Speed up convert_specialchars. Part of #11200.

This commit is contained in:
Richard Kimberly Heck 2018-07-16 22:14:40 -04:00
parent 4cb209b121
commit 96ea84e042

View 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: