X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx_1_5.py;h=76d23b6b5de831abb0d430479a46918b49664b8d;hb=e302757476e46910347ee94cf3141f615ea53ffd;hp=62c314a14a63c446a5a3f1dd56377b1341f88a79;hpb=391ba1e592193017c32f03559199c21c4adc0bcb;p=lyx.git diff --git a/lib/lyx2lyx/lyx_1_5.py b/lib/lyx2lyx/lyx_1_5.py index 62c314a14a..76d23b6b5d 100644 --- a/lib/lyx2lyx/lyx_1_5.py +++ b/lib/lyx2lyx/lyx_1_5.py @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA """ Convert files to the file format generated by lyx 1.5""" @@ -24,8 +24,17 @@ import unicodedata import sys, os from parser_tools import find_re, find_token, find_token_backwards, find_token_exact, find_tokens, find_end_of, get_value, find_beginning_of, find_nonempty_line +from lyx2lyx_tools import insert_document_option from LyX import get_encoding +# Provide support for both python 2 and 3 +PY2 = sys.version_info[0] == 2 +if not PY2: + text_type = str + unichr = chr +else: + text_type = unicode +# End of code to support for both python 2 and 3 #################################################################### # Private helper functions @@ -53,7 +62,7 @@ def find_beginning_of_layout(lines, i): def revert_framed(document): "Revert framed notes. " i = 0 - while 1: + while True: i = find_tokens(document.body, ["\\begin_inset Note Framed", "\\begin_inset Note Shaded"], i) if i == -1: @@ -93,7 +102,7 @@ def convert_font_settings(document): if font_scheme == '': document.warning("Malformed LyX document: Empty `\\fontscheme'.") font_scheme = 'default' - if not font_scheme in roman_fonts.keys(): + if not font_scheme in list(roman_fonts.keys()): document.warning("Malformed LyX document: Unknown `\\fontscheme' `%s'." % font_scheme) font_scheme = 'default' document.header[i:i+1] = ['\\font_roman %s' % roman_fonts[font_scheme], @@ -163,7 +172,7 @@ def revert_font_settings(document): del document.header[i] if font_tt_scale != '100': document.warning("Conversion of '\\font_tt_scale' not yet implemented.") - for font_scheme in roman_fonts.keys(): + for font_scheme in list(roman_fonts.keys()): if (roman_fonts[font_scheme] == fonts['roman'] and sans_fonts[font_scheme] == fonts['sans'] and typewriter_fonts[font_scheme] == fonts['typewriter']): @@ -208,7 +217,7 @@ def revert_booktabs(document): re_bspace = re.compile(r'\s+bottomspace="[^"]+"') re_ispace = re.compile(r'\s+interlinespace="[^"]+"') i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset Tabular", i) if i == -1: return @@ -334,6 +343,7 @@ def revert_utf8(document): convert_multiencoding(document, False) +# FIXME: Use the version in unicode_symbols.py which has some bug fixes def read_unicodesymbols(): " Read the unicodesymbols list of unicode characters and corresponding commands." pathname = os.path.abspath(os.path.dirname(sys.argv[0])) @@ -356,7 +366,7 @@ def read_unicodesymbols(): def revert_unicode_line(document, i, insets, spec_chars, replacement_character = '???'): # Define strings to start and end ERT and math insets - ert_intro='\n\n\\begin_inset ERT\nstatus collapsed\n\\begin_layout %s\n\\backslash\n' % document.default_layout + ert_intro='\n\n\\begin_inset ERT\nstatus collapsed\n\\begin_layout %s' % document.default_layout ert_outro='\n\\end_layout\n\n\\end_inset\n' math_intro='\n\\begin_inset Formula $' math_outro='$\n\\end_inset' @@ -376,7 +386,7 @@ def revert_unicode_line(document, i, insets, spec_chars, replacement_character = last_char = character except: # Try to replace with ERT/math inset - if spec_chars.has_key(character): + if character in spec_chars: command = spec_chars[character][0] # the command to replace unicode flag1 = spec_chars[character][1] flag2 = spec_chars[character][2] @@ -415,8 +425,8 @@ def revert_unicode_line(document, i, insets, spec_chars, replacement_character = command = command + '}' elif not insets or insets[-1] != "ERT": # add an ERT inset with the replacement character - command = command.replace('\\\\', ert_intro) - command = command + ert_outro + command = command.replace('\\\\', '\n\\backslash\n') + command = ert_intro + command + ert_outro else: command = command.replace('\\\\', '\n\\backslash\n') last_char = '' # indicate that the character should not be removed @@ -461,14 +471,14 @@ implemented.''' def revert_cs_label(document): " Remove status flag of charstyle label. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset CharStyle", i) if i == -1: return # Seach for a line starting 'show_label' # If it is not there, break with a warning message i = i + 1 - while 1: + while True: if (document.body[i][:10] == "show_label"): del document.body[i] break @@ -495,7 +505,7 @@ key "argument" This must be called after convert_commandparams. """ i = 0 - while 1: + while True: i = find_token(document.body, "\\bibitem", i) if i == -1: break @@ -583,7 +593,7 @@ def convert_commandparams(document): # convert_bibitem()), but could be read in, so we convert it here, too. i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset LatexCommand", i) if i == -1: break @@ -671,7 +681,7 @@ def convert_commandparams(document): def revert_commandparams(document): regex = re.compile(r'(\S+)\s+(.+)') i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset LatexCommand", i) if i == -1: break @@ -729,7 +739,7 @@ def revert_nomenclature(document): regex = re.compile(r'(\S+)\s+(.+)') i = 0 use_nomencl = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset LatexCommand nomenclature", i) if i == -1: break @@ -780,7 +790,7 @@ def revert_printnomenclature(document): regex = re.compile(r'(\S+)\s+(.+)') i = 0 use_nomencl = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset LatexCommand printnomenclature", i) if i == -1: break @@ -846,7 +856,7 @@ def revert_esint(document): def revert_clearpage(document): " clearpage -> ERT " i = 0 - while 1: + while True: i = find_token(document.body, "\\clearpage", i) if i == -1: break @@ -867,7 +877,7 @@ def revert_clearpage(document): def revert_cleardoublepage(document): " cleardoublepage -> ERT " i = 0 - while 1: + while True: i = find_token(document.body, "\\cleardoublepage", i) if i == -1: break @@ -925,7 +935,7 @@ def revert_encodings(document): def convert_caption(document): " Convert caption layouts to caption insets. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_layout Caption", i) if i == -1: return @@ -945,7 +955,7 @@ def revert_caption(document): " Convert caption insets to caption layouts. " " This assumes that the text class has a caption style. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset Caption", i) if i == -1: return @@ -1110,7 +1120,7 @@ def convert_accent(document): re_contents = re.compile(r'^([^\s{]+)(.*)$') re_accentedcontents = re.compile(r'^\s*{?([^{}]*)}?\s*$') i = 0 - while 1: + while True: i = find_re(document.body, re_wholeinset, i) if i == -1: return @@ -1211,7 +1221,7 @@ def revert_accent(document): try: document.body[i] = normalize("NFD", document.body[i]) except TypeError: - document.body[i] = normalize("NFD", unicode(document.body[i], 'utf-8')) + document.body[i] = normalize("NFD", text_type(document.body[i], 'utf-8')) # Replace accented characters with InsetLaTeXAccent # Do not convert characters that can be represented in the chosen @@ -1346,15 +1356,15 @@ def normalize_font_whitespace(document, char_properties): # a new paragraph resets all font changes changes.clear() # also reset the default language to be the paragraph's language - if "\\lang" in char_properties.keys(): + if "\\lang" in list(char_properties.keys()): char_properties["\\lang"] = \ get_paragraph_language(document, i + 1) - elif len(words) > 1 and words[0] in char_properties.keys(): + elif len(words) > 1 and words[0] in list(char_properties.keys()): # we have a font change if char_properties[words[0]] == words[1]: # property gets reset - if words[0] in changes.keys(): + if words[0] in list(changes.keys()): del changes[words[0]] defaultproperty = True else: @@ -1372,11 +1382,11 @@ def normalize_font_whitespace(document, char_properties): lines[i-1] = lines[i-1][:-1] # a space before the font change added_lines = [" "] - for k in changes.keys(): + for k in list(changes.keys()): # exclude property k because that is already in lines[i] if k != words[0]: added_lines[1:1] = ["%s %s" % (k, changes[k])] - for k in changes.keys(): + for k in list(changes.keys()): # exclude property k because that must be added below anyway if k != words[0]: added_lines[0:0] = ["%s %s" % (k, char_properties[k])] @@ -1400,11 +1410,11 @@ def normalize_font_whitespace(document, char_properties): continue lines[i+1] = lines[i+1][1:] added_lines = [" "] - for k in changes.keys(): + for k in list(changes.keys()): # exclude property k because that is already in lines[i] if k != words[0]: added_lines[1:1] = ["%s %s" % (k, changes[k])] - for k in changes.keys(): + for k in list(changes.keys()): # exclude property k because that must be added below anyway if k != words[0]: added_lines[0:0] = ["%s %s" % (k, char_properties[k])] @@ -1443,13 +1453,13 @@ def revert_utf8plain(document): def revert_beamer_alert(document): " Revert beamer's \\alert inset back to ERT. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset CharStyle Alert", i) if i == -1: return document.body[i] = "\\begin_inset ERT" i = i + 1 - while 1: + while True: if (document.body[i][:13] == "\\begin_layout"): # Insert the \alert command document.body[i + 1] = "\\alert{" + document.body[i + 1] + '}' @@ -1462,13 +1472,13 @@ def revert_beamer_alert(document): def revert_beamer_structure(document): " Revert beamer's \\structure inset back to ERT. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset CharStyle Structure", i) if i == -1: return document.body[i] = "\\begin_inset ERT" i = i + 1 - while 1: + while True: if (document.body[i][:13] == "\\begin_layout"): document.body[i + 1] = "\\structure{" + document.body[i + 1] + '}' break @@ -1541,7 +1551,7 @@ def revert_cv_textclass(document): def convert_graphics_rotation(document): " add scaleBeforeRotation graphics parameter. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset Graphics", i) if i == -1: return @@ -1563,7 +1573,7 @@ def convert_graphics_rotation(document): def revert_graphics_rotation(document): " remove scaleBeforeRotation graphics parameter. " i = 0 - while 1: + while True: i = find_token(document.body, "\\begin_inset Graphics", i) if i == -1: return @@ -1597,7 +1607,7 @@ def revert_graphics_rotation(document): def convert_tableborder(document): - # The problematic is: LyX double the table cell border as it ignores the "|" character in + # The problem is: LyX doubles the table cell border as it ignores the "|" character in # the cell arguments. A fix takes care of this and therefore the "|" has to be removed i = 0 while i < len(document.body): @@ -1606,7 +1616,7 @@ def convert_tableborder(document): # the two tokens have to be in one line if (h != -1 and k != -1): # delete the "|" - document.body[i] = document.body[i][:k] + document.body[i][k+1:len(document.body[i])-1] + document.body[i] = document.body[i][:k] + document.body[i][k+1:len(document.body[i])] i = i + 1 @@ -1898,13 +1908,7 @@ def revert_ext_font_sizes(document): i = find_token(document.header, '\\paperfontsize', 0) document.header[i] = '\\paperfontsize default' - - i = find_token(document.header, '\\options', 0) - if i == -1: - i = find_token(document.header, '\\textclass', 0) + 1 - document.header[i:i] = ['\\options %s' % fontsize] - else: - document.header[i] += ',%s' % fontsize + insert_document_option(document, fontsize) def convert_ext_font_sizes(document):