]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx_1_6.py
Fix a bunch of backslashes.
[lyx.git] / lib / lyx2lyx / lyx_1_6.py
index c8bc593777ba2298b8d3c6cf5350bd03da4d1fa8..976fb87d81fb940a256e372c6039905f57a0c77b 100644 (file)
@@ -788,7 +788,7 @@ def convert_latexcommand_index(document):
           document.body.insert(i + 4, "\\end_inset")
           i += 2
         # Generic, \\ -> \backslash:
-        g = wrap_into_ert(g, r'\\', '\\backslash{}')
+        g = wrap_into_ert(g, r'\\', '\\backslash')
         g = wrap_into_ert(g, '{', '{')
         g = wrap_into_ert(g, '}', '}')
         document.body.insert(i + 3, g)
@@ -812,23 +812,43 @@ def revert_latexcommand_index(document):
         document.body[i + 1] =  "LatexCommand index"
         # clean up multiline stuff
         content = ""
+        ert_end = 0
         for k in range(i + 3, j - 2):
           line = document.body[k]
           if line.startswith("\\begin_inset ERT"):
-            line = line[16:]
+              ert_end = find_end_of_inset(document.body, k + 1)
+              line = line[16:]
           if line.startswith("\\begin_inset Formula"):
             line = line[20:]
           if line.startswith("\\begin_layout Standard"):
             line = line[22:]
-          if line.startswith("\\begin_layout Plain"):
-            line = line[22:]
+          if line.startswith("\\begin_layout Plain Layout"):
+            line = line[26:]
           if line.startswith("\\end_layout"):
             line = line[11:]
           if line.startswith("\\end_inset"):
             line = line[10:]
           if line.startswith("status collapsed"):
             line = line[16:]
-          line = line.replace(u'ä', r'\\\"a').replace(u'ö', r'\\\"o').replace(u'ü', r'\\\"u')
+          if line.startswith("status open"):
+            line = line[11:]
+          # a lossless reversion is not possible
+          # try at least to handle some common insets and settings
+          # do not replace inside ERTs
+          if ert_end < k:
+              line = line.replace(u'ä', r'\\\"a').replace(u'ö', r'\\\"o').replace(u'ü', r'\\\"u')
+              line = line.replace(r'\\backslash', r'\\textbackslash{}')
+              line = line.replace(r'\\series bold', r'\\bfseries{}').replace(r'\\series default', r'\\mdseries{}')
+              line = line.replace(r'\\shape italic', r'\\itshape{}').replace(r'\\shape smallcaps', r'\\scshape{}')
+              line = line.replace(r'\\shape slanted', r'\\slshape{}').replace(r'\\shape default', r'\\upshape{}')
+              line = line.replace(r'\\emph on', r'\\em{}').replace(r'\\emph default', r'\\em{}')
+              line = line.replace(r'\\noun on', r'\\scshape{}').replace(r'\\noun default', r'\\upshape{}')
+              line = line.replace(r'\\bar under', r'\\underbar{').replace(r'\\bar default', r'}')
+              line = line.replace(r'\\family sans', r'\\sffamily{}').replace(r'\\family default', r'\\normalfont{}')
+              line = line.replace(r'\\family typewriter', r'\\ttfamily{}').replace(r'\\family roman', r'\\rmfamily{}')
+              line = line.replace(r'\\InsetSpace ', r'').replace(r'\\SpecialChar ', r'')
+          else:
+              line = line.replace(r'\\backslash', r'\\')
           content = content + line;
         document.body[i + 3] = "name " + '"' + content + '"'
         for k in range(i + 4, j - 2):
@@ -1813,11 +1833,14 @@ def remove_extra_embedded_files(document):
 
 
 def convert_spaceinset(document):
-    " Convert '\\InsetSpace foo' to '\\begin_inset Space foo\n\\end_inset' "
-    for i in range(len(document.body)):
-        if re.search(r'\InsetSpace', document.body[i]):
-            document.body[i] = document.body[i].replace('\\InsetSpace', '\n\\begin_inset Space')
-            document.body[i] = document.body[i] + "\n\\end_inset"
+   " Convert '\\InsetSpace foo' to '\\begin_inset Space foo\n\\end_inset' "
+   for i in range(len(document.body)):
+       m = re.match(r'(.*)\\InsetSpace (.*)', document.body[i])
+       if m:
+           before = m.group(1)
+           after = m.group(2)
+           subst = [before, "\\begin_inset Space " + after, "\\end_inset"]
+           document.body[i: i+1] = subst
 
 
 def revert_spaceinset(document):
@@ -2208,6 +2231,78 @@ def revert_graphics_group(document):
         i = i + 1
 
 
+def update_apa_styles(document):
+    ' Replace obsolete styles '
+
+    if document.textclass != "apa":
+        return
+
+    obsoletedby = { "Acknowledgments": "Acknowledgements",
+                    "Section*":        "Section",
+                    "Subsection*":     "Subsection",
+                    "Subsubsection*":  "Subsubsection",
+                    "Paragraph*":      "Paragraph",
+                    "Subparagraph*":   "Subparagraph"}
+    i = 0
+    while 1:
+        i = find_token(document.body, "\\begin_layout", i)
+        if i == -1:
+            return
+
+        layout = document.body[i][14:]
+        if layout in obsoletedby:
+            document.body[i] = "\\begin_layout " + obsoletedby[layout]
+
+        i += 1
+
+
+def convert_paper_sizes(document):
+    ' exchange size options legalpaper and executivepaper to correct order '
+    # routine is needed to fix http://bugzilla.lyx.org/show_bug.cgi?id=4868
+    i = 0
+    j = 0
+    i = find_token(document.header, "\\papersize executivepaper", 0)
+    if i != -1:
+        document.header[i] = "\\papersize legalpaper"
+        return
+    j = find_token(document.header, "\\papersize legalpaper", 0)
+    if j != -1:
+        document.header[j] = "\\papersize executivepaper"
+
+
+def revert_paper_sizes(document):
+    ' exchange size options legalpaper and executivepaper to correct order '
+    i = 0
+    j = 0
+    i = find_token(document.header, "\\papersize executivepaper", 0)
+    if i != -1:
+        document.header[i] = "\\papersize legalpaper"
+        return
+    j = find_token(document.header, "\\papersize legalpaper", 0)
+    if j != -1:
+        document.header[j] = "\\papersize executivepaper"
+
+
+def convert_InsetSpace(document):
+    " Convert '\\begin_inset Space foo' to '\\begin_inset space foo'"
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Space", i)
+        if i == -1:
+            return
+        document.body[i] = document.body[i].replace('\\begin_inset Space', '\\begin_inset space')
+
+
+def revert_InsetSpace(document):
+    " Revert '\\begin_inset space foo' to '\\begin_inset Space foo'"
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset space", i)
+        if i == -1:
+            return
+        document.body[i] = document.body[i].replace('\\begin_inset space', '\\begin_inset Space')
+
+
 ##
 # Conversion hub
 #
@@ -2269,9 +2364,15 @@ convert = [[277, [fix_wrong_tables]],
            [330, []],
            [331, [convert_ltcaption]],
            [332, []],
+           [333, [update_apa_styles]],
+           [334, [convert_paper_sizes]],
+           [335, [convert_InsetSpace]],
           ]
 
-revert =  [[331, [revert_graphics_group]],
+revert =  [[334, [revert_InsetSpace]],
+           [333, [revert_paper_sizes]],
+           [332, []],
+           [331, [revert_graphics_group]],
            [330, [revert_ltcaption]],
            [329, [revert_leftarrowfill, revert_rightarrowfill, revert_upbracefill, revert_downbracefill]],
            [328, [revert_master]],