]> git.lyx.org Git - features.git/commitdiff
Speed up convert_specialchars. Part of #11200.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Tue, 17 Jul 2018 02:14:40 +0000 (22:14 -0400)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Sun, 22 Jul 2018 02:18:22 +0000 (22:18 -0400)
lib/lyx2lyx/lyx_2_2.py

index a945cece2e1142713990912d939f56af5f2615fa..0a2722c5fa7be279cd976817d5d47e8886462ad6 100644 (file)
@@ -741,20 +741,20 @@ def convert_phrases(document):
     for phrase in phrases:
         i = 0
         while i < len(document.body):
-            words = document.body[i].split()
-            if len(words) > 1 and words[0] == "\\begin_inset" and \
-               words[1] in ["CommandInset", "External", "Formula", "Graphics", "listings"]:
-                # must not replace anything in insets that store LaTeX contents in .lyx files
-                # (math and command insets without overridden read() and write() methods)
-                j = find_end_of_inset(document.body, i)
-                if j == -1:
-                    document.warning("Malformed LyX document: Can't find end of inset at line " + str(i))
-                    i += 1
+            if document.body[i] and document.body[i][0] == "\\":
+                words = document.body[i].split()
+                if len(words) > 1 and words[0] == "\\begin_inset" and \
+                words[1] in ["CommandInset", "External", "Formula", "Graphics", "listings"]:
+                    # must not replace anything in insets that store LaTeX contents in .lyx files
+                    # (math and command insets without overridden read() and write() methods)
+                    j = find_end_of_inset(document.body, i)
+                    if j == -1:
+                        document.warning("Malformed LyX document: Can't find end of inset at line " + str(i))
+                        i += 1
+                    else:
+                        i = j
                 else:
-                    i = j
-                continue
-            if document.body[i].find("\\") == 0:
-                i += 1
+                    i += 1
                 continue
             j = document.body[i].find(phrase)
             if j == -1:
@@ -771,7 +771,7 @@ def convert_phrases(document):
 
 
 def revert_phrases(document):
-    "convert special phrases to plain text"
+    "revert special phrases to plain text"
 
     i = 0
     while i < len(document.body):
@@ -816,16 +816,21 @@ def convert_specialchar_internal(document, forward):
 
     i = 0
     while i < len(document.body):
-        words = document.body[i].split()
-        if len(words) > 1 and words[0] == "\\begin_inset" and \
-           words[1] in ["CommandInset", "External", "Formula", "Graphics", "listings"]:
-            # see convert_phrases
-            j = find_end_of_inset(document.body, i)
-            if j == -1:
-                document.warning("Malformed LyX document: Can't find end of Formula inset at line " + str(i))
-                i += 1
-            else:
-                i = j
+        if document.body[i] and document.body[i][0] == "\\":
+            words = document.body[i].split()
+            if len(words) > 1 and words[0] == "\\begin_inset" and \
+            words[1] in ["CommandInset", "External", "Formula", "Graphics", "listings"]:
+                # see convert_phrases
+                j = find_end_of_inset(document.body, i)
+                if j == -1:
+                    document.warning("Malformed LyX document: Can't find end of %s inset at line %d" % (words[1], i))
+                    i += 1
+                else:
+                    i = j
+                continue
+            # else...
+        if not "\\SpecialChar" in document.body[i]:
+            i += 1
             continue
         for key, value in specialchars.items():
             if forward: