]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx_1_5.py
remerge he.po
[lyx.git] / lib / lyx2lyx / lyx_1_5.py
index d3de88f9981148e5d3b50d27f038f5bbc944e965..4b0fd5cfbbe55ca083e020f787782482c8b35c94 100644 (file)
@@ -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]
@@ -411,12 +421,12 @@ def revert_unicode_line(document, i, insets, spec_chars, replacement_character =
                     else:
                         if insets and insets[-1] == "Formula":
                             # avoid putting an ERT in a math; instead put command as text
-                            command = command.replace('\\\\', '\mathrm{')
+                            command = command.replace('\\\\', r'\mathrm{')
                             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
@@ -481,7 +491,7 @@ def revert_cs_label(document):
 
 
 def convert_bibitem(document):
-    """ Convert
+    r""" Convert
 \bibitem [option]{argument}
 
 to
@@ -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
@@ -566,16 +576,16 @@ commandparams_info = {
 def convert_commandparams(document):
     """ Convert
 
- \begin_inset LatexCommand \cmdname[opt1][opt2]{arg}
- \end_inset
+ \\begin_inset LatexCommand \\cmdname[opt1][opt2]{arg}
+ \\end_inset
 
  to
 
- \begin_inset LatexCommand cmdname
+ \\begin_inset LatexCommand cmdname
  name1 "opt1"
  name2 "opt2"
  name3 "arg"
- \end_inset
+ \\end_inset
 
  name1, name2 and name3 can be different for each command.
 """
@@ -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
@@ -886,7 +896,7 @@ def revert_cleardoublepage(document):
 
 
 def convert_lyxline(document):
-    " remove fontsize commands for \lyxline "
+    r" remove fontsize commands for \lyxline "
     # The problematic is: The old \lyxline definition doesn't handle the fontsize
     # to change the line thickness. The new definiton does this so that imported
     # \lyxlines would have a different line thickness. The eventual fontsize command
@@ -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
@@ -1677,7 +1687,7 @@ def revert_CJK(document):
 
 
 def revert_preamble_listings_params(document):
-    " Revert preamble option \listings_params "
+    r" Revert preamble option \listings_params "
     i = find_token(document.header, "\\listings_params", 0)
     if i != -1:
         document.preamble.append('\\usepackage{listings}')
@@ -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):
@@ -2001,10 +2005,10 @@ def convert_arabic (document):
             document.header[i] = "\\language arabic_arabtex"
     i = 0
     while i < len(document.body):
-        h = document.body[i].find("\lang arabic", 0, len(document.body[i]))
+        h = document.body[i].find(r"\lang arabic", 0, len(document.body[i]))
         if (h != -1):
             # change the language name
-            document.body[i] = '\lang arabic_arabtex'
+            document.body[i] = r'\lang arabic_arabtex'
         i = i + 1
 
 
@@ -2016,10 +2020,10 @@ def revert_arabic (document):
             document.header[i] = "\\language arabic"
     i = 0
     while i < len(document.body):
-        h = document.body[i].find("\lang arabic_arabtex", 0, len(document.body[i]))
+        h = document.body[i].find(r"\lang arabic_arabtex", 0, len(document.body[i]))
         if (h != -1):
             # change the language name
-            document.body[i] = '\lang arabic'
+            document.body[i] = r'\lang arabic'
         i = i + 1