]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx_1_6.py
These commands should just take some lines.
[lyx.git] / lib / lyx2lyx / lyx_1_6.py
index d11ed229745174eda299ce0a65d5223da01c8a83..e1ed5e670f86fa360e249988af11b49aebd39c33 100644 (file)
@@ -22,11 +22,27 @@ import re
 import unicodedata
 import sys, os
 
-from parser_tools import find_token, find_end_of, find_tokens, get_value, get_value_string
+from parser_tools import find_token, find_end_of, find_tokens, get_value
 
 ####################################################################
 # Private helper functions
 
+
+def get_value_string(lines, token, start, end = 0, trim = False, default = ""):
+    """ get_value_string(lines, token, start[[, end], trim, default]) -> string
+
+    Return tokens after token as string, in lines, where
+    token is the first element. When trim is used, the first and last character
+    of the string is trimmed."""
+
+    val = get_value(lines, token, start, end, "")
+    if not val:
+      return default
+    if trim:
+      return val[1:-1]
+    return val
+
+
 def find_end_of_inset(lines, i):
     " Find end of inset, where lines[i] is included."
     return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
@@ -209,7 +225,7 @@ def extract_argument(line):
     return (line[:pos + 1], line[pos + 1:])
 
 
-def latex2ert(line):
+def latex2ert(line, isindex):
     '''Converts LaTeX commands into ERT. line may well be a multi-line
        string when it is returned.'''
     if not line:
@@ -246,6 +262,9 @@ def latex2ert(line):
     # put all remaining braces in ERT
     line = wrap_into_ert(line, '}', '}')
     line = wrap_into_ert(line, '{', '{')
+    if isindex:
+        # active character that is not available in all font encodings
+        line = wrap_into_ert(line, '|', '|')
     retval += line
     return retval
 
@@ -257,10 +276,12 @@ unicode_reps = read_unicodesymbols()
 #end up inside ERT. That routine could be modified so that it returned
 #a list of lines, and we could then skip ERT bits and only deal with
 #the other bits.
-def latex2lyx(data):
+def latex2lyx(data, isindex):
     '''Takes a string, possibly multi-line, and returns the result of
     converting LaTeX constructs into LyX constructs. Returns a list of
-    lines, suitable for insertion into document.body.'''
+    lines, suitable for insertion into document.body.
+    The bool isindex specifies whether we are in an index macro (which
+    has some specific active characters that need to be ERTed).'''
 
     if not data:
         return [""]
@@ -309,14 +330,14 @@ def latex2lyx(data):
             g = m.group(3)
             if s:
                 # this is non-math!
-                s = latex2ert(s)
+                s = latex2ert(s, isindex)
                 subst = s.split('\n')
                 retval += subst
             retval.append("\\begin_inset Formula " + f)
             retval.append("\\end_inset")
             m = mathre.match(g)
         # Handle whatever is left, which is just text
-        g = latex2ert(g)
+        g = latex2ert(g, isindex)
         subst = g.split('\n')
         retval += subst
     return retval
@@ -467,6 +488,7 @@ def revert_ltcaption(document):
         j = find_end_of_inset(document.body, i + 1)
         if j == -1:
             document.warning("Malformed LyX document: Could not find end of tabular.")
+            i += 1
             continue
 
         m = i + 1
@@ -566,9 +588,10 @@ def revert_tablines(document):
         i = find_token(document.body, "\\begin_inset Tabular", i)
         if i == -1:
             return
-        j = find_end_of_inset(document.body, i + 1)
+        j = find_end_of_inset(document.body, i)
         if j == -1:
             document.warning("Malformed LyX document: Could not find end of tabular.")
+            i += 1
             continue
 
         m = i + 1
@@ -1096,7 +1119,7 @@ def convert_latexcommand_index(document):
             linelist = [""]
         else:
             fullcontent = m.group(1)
-            linelist = latex2lyx(fullcontent)
+            linelist = latex2lyx(fullcontent, True)
         #document.warning(fullcontent)
 
         linelist = ["\\begin_inset Index", "status collapsed", "\\begin_layout Standard", ""] + \
@@ -1321,13 +1344,13 @@ def convert_url(document):
       j = find_token(document.body, "target", i)
       if j == -1:
         document.warning("Malformed LyX document: Can't find target for url inset")
-        i = j
+        i += 1
         continue
       target = document.body[j][8:-1]
       k = find_token(document.body, "\\end_inset", j)
       if k == -1:
         document.warning("Malformed LyX document: Can't find end of url inset")
-        i = k
+        i = j
         continue
       newstuff = ["\\begin_inset Flex URL",
         "status collapsed", "",
@@ -1337,7 +1360,7 @@ def convert_url(document):
         "\\end_layout",
         ""]
       document.body[i:k] = newstuff
-      i = k
+      i = i + len(newstuff)
 
 def convert_ams_classes(document):
   tc = document.textclass
@@ -2176,7 +2199,7 @@ def convert_subfig(document):
         addedLines -= 1
         subst = ['\\begin_inset Float figure', 'wide false', 'sideways false',
                  'status open', '', '\\begin_layout Plain Layout', '\\begin_inset Caption',
-                 '', '\\begin_layout Plain Layout'] + latex2lyx(caption) + \
+                 '', '\\begin_layout Plain Layout'] + latex2lyx(caption, False) + \
                  [ '\\end_layout', '', '\\end_inset', '',
                  '\\end_layout', '', '\\begin_layout Plain Layout']
         document.body[i : i] = subst