# Uncomment only what you need to import, please.
-#from parser_tools import find_token, find_end_of, find_tokens, \
-# find_token_exact, find_end_of_inset, find_end_of_layout, \
-# find_token_backwards, is_in_inset, get_value, get_quoted_value, \
-# del_token, check_token, get_option_value
-
from lyx2lyx_tools import (add_to_preamble, put_cmd_in_ert, get_ert,
- lyx2latex, lyx2verbatim, length_in_bp, convert_info_insets)
-# insert_to_preamble, latex_length, revert_flex_inset,
-# revert_font_attrs, hex2ratio, str2bool
+ lyx2latex, lyx2verbatim, length_in_bp, convert_info_insets, insert_document_option)
from parser_tools import (check_token, del_complete_lines,
find_end_of_inset, find_end_of_layout, find_nonempty_line, find_re,
- find_token, find_token_backwards, get_containing_layout,
+ find_substring, find_token, find_token_backwards, get_containing_layout,
get_containing_inset, get_quoted_value, get_value, is_in_inset,
get_bool_value, set_bool_value)
j = find_token_backwards(document.body, "\\end_layout", i-1)
if j != -1:
+ # Very old LyX files do not have Plain Layout in insets (but Standard).
+ # So we additionally check here if there is no inset boundary
+ # between the previous layout and this one.
+ n = find_token(document.body, "\\end_inset", j, lay[1])
+ if n != -1:
+ i = i + 1
+ continue
lay = get_containing_layout(document.body, j-1)
if lay != False and lay[0] == "Standard" \
and find_token(document.body, "\\align", lay[1], lay[2]) == -1 \
if document.backend != "latex":
return
- lines = document.body
i = 0
- while i+1 < len(lines):
- i += 1
- line = lines[i]
- if "--" not in line:
- continue
+ while True:
+ i = find_substring(document.body, "--", i+1)
+ if i == -1:
+ break
+ line = document.body[i]
# skip label width string (bug 10243):
if line.startswith("\\labelwidthstring"):
continue
# Do not touch hyphens in some insets:
try:
- value, start, end = get_containing_inset(lines, i)
+ value, start, end = get_containing_inset(document.body, i)
except TypeError:
# False means no (or malformed) containing inset
value, start, end = "no inset", -1, -1
i = end
continue
try:
- layout, start, end, j = get_containing_layout(lines, i)
+ layout, start, end, j = get_containing_layout(document.body, i)
except TypeError: # no (or malformed) containing layout
document.warning("Malformed LyX document: "
"Can't find layout at line %d" % i)
# Replace as LaTeX does: First try emdash, then endash
line = line.replace("---", "\\threehyphens\n")
line = line.replace("--", "\\twohyphens\n")
- lines[i:i+1] = line.splitlines()
+ document.body[i:i+1] = line.split('\n')
# remove ligature breaks between dashes
- i = 1
- while i < len(lines):
- line = lines[i]
- if (line.endswith(r"-\SpecialChar \textcompwordmark{}") and
- lines[i+1].startswith("-")):
- lines[i] = line.replace(r"\SpecialChar \textcompwordmark{}",
- lines.pop(i+1))
- else:
- i += 1
+ i = 0
+ while True:
+ i = find_substring(document.body,
+ r"-\SpecialChar \textcompwordmark{}", i+1)
+ if i == -1:
+ break
+ if document.body[i+1].startswith("-"):
+ document.body[i] = document.body[i].replace(
+ r"\SpecialChar \textcompwordmark{}", document.body.pop(i+1))
def revert_dashes(document):
r'\renewcommand{\textemdash}{---}'])
# Insert ligature breaks to prevent ligation of hyphens to dashes:
- lines = document.body
i = 0
- while i+1 < len(lines):
- i += 1
- line = lines[i]
- if "--" not in line:
- continue
+ while True:
+ i = find_substring(document.body, "--", i+1)
+ if i == -1:
+ break
+ line = document.body[i]
# skip label width string (bug 10243):
if line.startswith("\\labelwidthstring"):
continue
# do not touch hyphens in some insets (cf. convert_dashes):
try:
- value, start, end = get_containing_inset(lines, i)
+ value, start, end = get_containing_inset(document.body, i)
except TypeError:
# False means no (or malformed) containing inset
value, start, end = "no inset", -1, -1
# Revert \twohyphens and \threehyphens:
i = 1
- while i < len(lines):
- line = lines[i]
+ while i < len(document.body):
+ line = document.body[i]
if not line.endswith("hyphens"):
i +=1
elif line.endswith("\\twohyphens") or line.endswith("\\threehyphens"):
line = line.replace("\\twohyphens", "--")
line = line.replace("\\threehyphens", "---")
- lines[i] = line + lines.pop(i+1)
+ document.body[i] = line + document.body.pop(i+1)
else:
i += 1
if document.backend != "latex":
return
- for phrase in phrases:
- i = 0
- while i < len(document.body):
+ i = 0
+ while i < len(document.body):
+ 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"]:
+ 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))
+ document.warning("Malformed LyX document: Can't find end of inset at line %d" % (i))
i += 1
else:
i = j
- continue
- if document.body[i].find("\\") == 0:
+ else:
i += 1
- continue
+ continue
+ for phrase in phrases:
j = document.body[i].find(phrase)
if j == -1:
- i += 1
continue
if not is_part_of_converted_phrase(document.body[i], j, phrase):
front = document.body[i][:j]
document.body.insert(i+1, back)
# We cannot use SpecialChar since we do not know whether we are outside passThru
document.body[i] = front + "\\SpecialCharNoPassThru \\" + phrase
- i += 1
+ i += 1
def revert_phrases(document):
- "convert special phrases to plain text"
+ "revert special phrases to plain text"
i = 0
while i < len(document.body):
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:
j = find_token(document.header, "\\language_package default", 0)
if j != -1:
document.header[j] = "\\language_package babel"
- k = find_token(document.header, "\\options", 0)
- if k != -1:
- document.header[k] = document.header[k].replace("\\options", "\\options georgian,")
- else:
- l = find_token(document.header, "\\use_default_options", 0)
- document.header.insert(l + 1, "\\options georgian")
+ insert_document_option(document, "georgian")
def revert_sigplan_doi(document):
if framecolor == "black" and backcolor == "none": # default values
i += 15 # skip box option lines
continue
-
+
# Emulate non-default colours with LaTeX code:
einset = find_end_of_inset(document.body, i)
if einset == -1: