commit 96ea84e04202325b2407c5eb6923aad49535b522
Author: Richard Kimberly Heck <[email protected]>
Date:   Mon Jul 16 22:14:40 2018 -0400

    Speed up convert_specialchars. Part of #11200.
---
 lib/lyx2lyx/lyx_2_2.py |   53 ++++++++++++++++++++++++++---------------------
 1 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/lib/lyx2lyx/lyx_2_2.py b/lib/lyx2lyx/lyx_2_2.py
index a945cec..0a2722c 100644
--- a/lib/lyx2lyx/lyx_2_2.py
+++ b/lib/lyx2lyx/lyx_2_2.py
@@ -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:

Reply via email to