-# -*- coding: utf-8 -*-
-
# file prefs2prefs.py
# This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING.
-# author Richard Heck
+# author Richard Kimberly Heck
# Full author contact details are available in file CREDITS
# This is the main file for the user preferences conversion system.
# There are two subsidiary files:
-# prefs2prefs_lfuns.py
-# prefs2prefs_prefs.py
+# prefs2prefs_lfuns.py
+# prefs2prefs_prefs.py
# The former is used to convert bind and ui files; the latter, to convert
-# the preferences file.
-#
-# I've organized it this way because, in many ways, converting bind and ui
-# files lfuns) and converting the preferences file are the same task. It's
-# very line-by-line, unlike lyx2lyx and layout2layout, where changes can be
-# more "global". So we read the file, line by line, and give a bunch of
-# converter functions a chance to see if they want to modify that line.
-
-# The converter functions are all in the subsidiary files. They take a line
-# as argument and return a list: (Bool, NewLine), where the Bool says if
-# we've modified anything and the NewLine is the new line, if so, which will
-# be used to replace the old line.
-
-# The format of the existing files is format 0, as of 2.0.alpha6. We'll
-# introduce new format numbers as we proceed, just as with layout2layout.
-# These will be different for the bind and ui files and for the preferences
-# file.
-
-from __future__ import print_function
+# the preferences file. The converter functions are all in the subsidiary
+# files.
+#
+# The format of the existing files was format 0, as of 2.0.alpha6.
+
import os, re, string, sys
from getopt import getopt
import io
def trim_bom(line):
" Remove byte order mark."
- if line[0:3] == u"\357\273\277":
+ if line[0:3] == "\357\273\277":
return line[3:]
else:
- return line
+ return line
def read(source):
def find_format_line(lines):
'''
- Returns (bool, int), where int is number of the line the `Format'
- specification is on, or else the number of the first non-blank,
+ Returns (bool, int), where int is number of the line the `Format'
+ specification is on, or else the number of the first non-blank,
non-comment line. The bool tells whether we found a format line.
'''
for i in range(len(lines)):
source = sys.stdin
output = sys.stdout
elif len(args) == 2:
- source = io.open(args[0], 'r', encoding='utf_8', errors='surrogateescape')
- output = io.open(args[1], 'w', encoding='utf_8', newline='\n')
+ source = open(args[0], encoding='utf_8', errors='surrogateescape')
+ output = open(args[1], 'w', encoding='utf_8', newline='\n')
opened_files = True
else:
usage()
from prefs2prefs_lfuns import conversions
elif opt == "-p":
from prefs2prefs_prefs import conversions
-
+
if not conversions:
usage()
abort("Neither -l nor -p given.")
abort("Something is wrong with the conversion chain.")
for c in convert:
- for i in range(len(lines)):
- (update, newline) = c(lines[i])
- if update:
- lines[i] = newline
+ try:
+ # first see if the routine will accept a list of lines
+ c(lines)
+ except:
+ # if not, it wants individual lines
+ for i in range(len(lines)):
+ (update, newline) = c(lines[i])
+ if update:
+ lines[i] = newline
update_format(lines)
format = get_format(lines)
if __name__ == "__main__":
- main(sys.argv)
+ main(sys.argv)