]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx_2_0.py
Factor out some common code.
[lyx.git] / lib / lyx2lyx / lyx_2_0.py
index 7d4e5e23ffd6d2fb93ece450551d0fd0822887ba..79f9f1be2f17c2fa826bf22c751038cbea3b0f8f 100644 (file)
@@ -24,7 +24,8 @@ import unicodedata
 import sys, os
 
 from parser_tools import find_token, find_end_of, find_tokens, \
-  find_end_of_inset, find_end_of_layout, get_value, get_value_string
+  find_end_of_inset, find_end_of_layout, find_token_backwards, \
+  get_containing_inset, get_value, get_value_string
   
 from lyx2lyx_tools import add_to_preamble, insert_to_preamble, \
   put_cmd_in_ert, lyx2latex, latex_length, revert_flex_inset, \
@@ -1463,16 +1464,29 @@ def convert_use_makebox(document):
   " Adds use_makebox option for boxes "
   i = 0
   while 1:
-    # remove the option use_makebox
     i = find_token(document.body, '\\begin_inset Box', i)
     if i == -1:
       return
-    k = find_token(document.body, 'use_parbox', i)
+    # all of this is to make sure we actually find the use_parbox
+    # that is an option for this box, not some text elsewhere.
+    z = find_end_of_inset(document.body, i)
+    if z == -1:
+      document.warning("Can't find end of box inset!!")
+      i += 1
+      continue
+    blay = find_token(document.body, "\\begin_layout", i, z)
+    if blay == -1:
+      document.warning("Can't find layout in box inset!!")
+      i = z
+      continue
+    # so now we are looking for use_parbox before the box's layout
+    k = find_token(document.body, 'use_parbox', i, blay)
     if k == -1:
       document.warning("Malformed LyX document: Can't find use_parbox statement in box.")
-      return
+      i = z
+      continue
     document.body.insert(k + 1, "use_makebox 0")
-    i = k + 1
+    i = z + 1
 
 
 def revert_IEEEtran(document):
@@ -1494,7 +1508,7 @@ def revert_IEEEtran(document):
         i = find_token(document.body, '\\begin_layout ' + layout, i)
         if i == -1:
           break
-        j = find_end_of(document.body, i, '\\begin_layout', '\\end_layout')
+        j = find_end_of_layout(document.body, i)
         if j == -1:
           document.warning("Malformed LyX document: Can't find end of " + layout + " layout.")
           i += 1
@@ -1502,10 +1516,11 @@ def revert_IEEEtran(document):
         if layout in obsoletedby:
           document.body[i] = "\\begin_layout " + obsoletedby[layout]
           i = j
-        else:
-          content = lyx2latex(document, document.body[i:j + 1])
-          add_to_preamble(document, [latexcmd[layout] + "{" + content + "}"])
-          del document.body[i:j + 1]
+          continue
+        content = lyx2latex(document, document.body[i:j + 1])
+        add_to_preamble(document, [latexcmd[layout] + "{" + content + "}"])
+        del document.body[i:j + 1]
+        # no need to reset i
 
 
 def convert_prettyref(document):
@@ -1523,8 +1538,8 @@ def convert_prettyref(document):
                        document.warning("Malformed LyX document: No end of InsetRef!")
                        i += 1
                        continue
-               k = find_token(document.body, "LatexCommand prettyref", i)
-               if k != -1 and k < j:
+               k = find_token(document.body, "LatexCommand prettyref", i, j)
+               if k != -1:
                        document.body[k] = "LatexCommand formatted"
                i = j + 1
        document.header.insert(-1, "\\use_refstyle 0")
@@ -1545,8 +1560,8 @@ def revert_refstyle(document):
                        document.warning("Malformed LyX document: No end of InsetRef")
                        i += 1
                        continue
-               k = find_token(document.body, "LatexCommand formatted", i)
-               if k != -1 and k < j:
+               k = find_token(document.body, "LatexCommand formatted", i, j)
+               if k != -1:
                        document.body[k] = "LatexCommand prettyref"
                i = j + 1
        i = find_token(document.header, "\\use_refstyle", 0)
@@ -1571,23 +1586,15 @@ def revert_nameref(document):
       cmdloc = i
       i += 1
       # Make sure it is actually in an inset!
-      # We could just check document.lines[i-1], but that relies
-      # upon something that might easily change.
-      # We'll look back a few lines.
-      stins = cmdloc - 10
-      if stins < 0:
-        stins = 0
-      stins = find_token(document.body, "\\begin_inset CommandInset ref", stins)
-      if stins == -1 or stins > cmdloc:
-        continue
-      endins = find_end_of_inset(document.body, stins)
-      if endins == -1:
-        document.warning("Can't find end of inset at line " + stins + "!!")
-        continue
-      if endins < cmdloc:
+      # A normal line could begin with "LatexCommand nameref"!
+      stins, endins = get_containing_inset(document.body, cmdloc, \
+          "\\begin_inset CommandInset ref")
+      if stins == -1:
         continue
-      refline = find_token(document.body, "reference", stins)
-      if refline == -1 or refline > endins:
+
+      # ok, so it is in an InsetRef
+      refline = find_token(document.body, "reference", stins, endins)
+      if refline == -1:
         document.warning("Can't find reference for inset at line " + stinst + "!!")
         continue
       m = rx.match(document.body[refline])
@@ -1596,10 +1603,9 @@ def revert_nameref(document):
         continue
       foundone = True
       ref = m.group(1)
-      newcontent = ['\\begin_inset ERT', 'status collapsed', '', \
-        '\\begin_layout Plain Layout', '', '\\backslash', \
-        cmd + '{' + ref + '}', '\\end_layout', '', '\\end_inset']
+      newcontent = put_cmd_in_ert('\\' + cmd + '{' + ref + '}')
       document.body[stins:endins + 1] = newcontent
+
   if foundone:
     add_to_preamble(document, "\usepackage{nameref}")
 
@@ -1617,20 +1623,9 @@ def remove_Nameref(document):
     i += 1
     
     # Make sure it is actually in an inset!
-    # We could just check document.lines[i-1], but that relies
-    # upon something that might easily change.
-    # We'll look back a few lines.
-    stins = cmdloc - 10
-    if stins < 0:
-      stins = 0
-    stins = find_token(document.body, "\\begin_inset CommandInset ref", stins)
-    if stins == -1 or stins > cmdloc:
-      continue
-    endins = find_end_of_inset(document.body, stins)
-    if endins == -1:
-      document.warning("Can't find end of inset at line " + stins + "!!")
-      continue
-    if endins < cmdloc:
+    stins, endins = get_containing_inset(document.body, \
+        cmdloc, "\\begin_inset CommandInset ref")
+    if stins == -1:
       continue
     document.body[cmdloc] = "LatexCommand nameref"