]> git.lyx.org Git - features.git/commitdiff
Fix the nameref reversion routine per a suggestion of Uwe's: We just
authorRichard Heck <rgheck@comcast.net>
Tue, 13 Jul 2010 21:07:26 +0000 (21:07 +0000)
committerRichard Heck <rgheck@comcast.net>
Tue, 13 Jul 2010 21:07:26 +0000 (21:07 +0000)
revert to ERT.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34891 a592a061-630c-0410-9148-cb99ea01b6c8

lib/lyx2lyx/lyx_2_0.py

index 298ec480146cff3af0eda179615411d2b3e23a26..ab0b093a2404474981df3bc283d1be1db4ab6680 100644 (file)
@@ -44,6 +44,9 @@ def add_to_preamble(document, text):
     """ Add text to the preamble if it is not already there.
     Only the first line is checked!"""
 
+    if not type(text) is list:
+      text = [text]
+
     if find_token(document.preamble, text[0], 0) != -1:
         return
 
@@ -1945,38 +1948,55 @@ def revert_IEEEtran(document):
 
 def revert_nameref(document):
   " Convert namerefs to regular references "
-  # We cannot really revert these properly, so we will
-  # revert them to commands we understand.
-  cmds = [["Nameref", "vref"], ["nameref", "ref"]]
+  cmds = ["Nameref", "nameref"]
+  foundone = False
+  rx = re.compile(r'reference "(.*)"')
   for cmd in cmds:
     i = 0
-    oldcmd = "LatexCommand " + cmd[0]
-    newcmd = "LatexCommand " + cmd[1]
+    oldcmd = "LatexCommand " + cmd
     while 1:
+      # It seems better to look for this, as most of the reference
+      # insets won't be ones we care about.
       i = find_token(document.body, oldcmd, i)
       if i == -1:
         break
+      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.
-      j = i - 10
-      if j < 0:
-        j = 0
-      j = find_token(document.body, "\\begin_inset CommandInset ref", j)
-      if j == -1 or j > i:
-        i += 1
+      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
-      k = find_end_of_inset(document.body, i)
-      if k == -1:
-        document.warning("Can't find end of inset at line " + j + "!!")
-        i += 1
+      endins = find_end_of_inset(document.body, stins)
+      if endins == -1:
+        document.warning("Can't find end of inset at line " + stins + "!!")
         continue
-      if k < i:
-        i += 1
+      if endins < cmdloc:
         continue
-      document.body[i] = newcmd
-      i += 1
+      refline = find_token(document.body, "reference", stins)
+      if refline == -1 or refline > endins:
+        document.warning("Can't find reference for inset at line " + stinst + "!!")
+        continue
+      m = rx.match(document.body[refline])
+      if not m:
+        document.warning("Can't match reference line: " + document.body[ref])
+        continue
+      foundone = True
+      ref = m.group(1)
+      newcontent = ['\\begin_inset ERT', 'status collapsed', '', \
+        '\\begin_layout Plain Layout', '', '\\backslash', \
+        cmd + '{' + ref + '}', '\\end_layout', '', '\\end_inset']
+      document.body[stins:endins + 1] = newcontent
+  if foundone:
+    add_to_preamble(document, "\usepackage{nameref}")
+
+
 
 
 ##
@@ -2033,7 +2053,7 @@ convert = [[346, []],
            [392, [convert_beamer_args]],
            [393, [convert_optarg]],
            [394, []],
-           [395, []]
+           [395, []],
            [396, []]
           ]