return
rgx = re.compile(r'\\html_use_mathml\s+(\w+)')
m = rgx.match(document.header[i])
- if rgx:
- newval = "0" # MathML
- val = m.group(1)
- if val != "true":
- newval = "2" # Images
- document.header[i] = "\\html_math_output " + newval
+ newval = "0" # MathML
+ if m:
+ val = m.group(1)
+ if val != "true":
+ newval = "2" # Images
+ else:
+ document.warning("Can't match " + document.header[i])
+ document.header[i] = "\\html_math_output " + newval
def revert_math_output(document):
rgx = re.compile(r'\\html_math_output\s+(\d)')
m = rgx.match(document.header[i])
newval = "true"
- if rgx:
+ if m:
val = m.group(1)
if val == "1" or val == "2":
newval = "false"
i = 0
while True:
i = find_token(document.body, "\\lyxline" , i)
- if i != -1:
- j = find_token(document.body, "\\color" , i - 2)
- if j == i - 2:
- color = document.body[j] + '\n'
- else:
- color = ''
- k = find_token(document.body, "\\begin_layout Standard" , i - 4)
- # we need to handle the case that \lyxline is in a separate paragraph and that it is colored
- # the result is then an extra empty paragraph which we get by adding an empty ERT inset
- if k == i - 4 and j == i - 2 and document.body[i - 1] == '':
- layout = '\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n\n\\end_layout\n\n\\end_inset\n' \
- + '\\end_layout\n\n' \
- + '\\begin_layout Standard\n'
- elif k == i - 2 and document.body[i - 1] == '':
- layout = ''
- else:
- layout = '\\end_layout\n\n' \
- + '\\begin_layout Standard\n'
- l = find_token(document.body, "\\begin_layout Standard" , i + 4)
- if l == i + 4 and document.body[i + 1] == '':
- layout2 = ''
- else:
- layout2 = '\\end_layout\n' \
- + '\n\\begin_layout Standard\n'
- subst = layout \
- + '\\noindent\n\n' \
- + color \
- + '\\begin_inset CommandInset line\n' \
- + 'LatexCommand rule\n' \
- + 'offset "0.5ex"\n' \
- + 'width "100line%"\n' \
- + 'height "1pt"\n' \
- + '\n\\end_inset\n\n\n' \
- + layout2
- document.body[i] = subst
- i += 1
- else:
+ if i == -1:
return
+
+ j = find_token(document.body, "\\color" , i - 2)
+ if j == i - 2:
+ color = document.body[j] + '\n'
+ else:
+ color = ''
+ k = find_token(document.body, "\\begin_layout Standard" , i - 4)
+ # we need to handle the case that \lyxline is in a separate paragraph and that it is colored
+ # the result is then an extra empty paragraph which we get by adding an empty ERT inset
+ if k == i - 4 and j == i - 2 and document.body[i - 1] == '':
+ layout = '\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n\n\\end_layout\n\n\\end_inset\n' \
+ + '\\end_layout\n\n' \
+ + '\\begin_layout Standard\n'
+ elif k == i - 2 and document.body[i - 1] == '':
+ layout = ''
+ else:
+ layout = '\\end_layout\n\n' \
+ + '\\begin_layout Standard\n'
+ l = find_token(document.body, "\\begin_layout Standard" , i + 4)
+ if l == i + 4 and document.body[i + 1] == '':
+ layout2 = ''
+ else:
+ layout2 = '\\end_layout\n' \
+ + '\n\\begin_layout Standard\n'
+ subst = layout \
+ + '\\noindent\n\n' \
+ + color \
+ + '\\begin_inset CommandInset line\n' \
+ + 'LatexCommand rule\n' \
+ + 'offset "0.5ex"\n' \
+ + 'width "100line%"\n' \
+ + 'height "1pt"\n' \
+ + '\n\\end_inset\n\n\n' \
+ + layout2
+ document.body[i] = subst
+ i += 1
def revert_rule(document):
i = 0
while 1:
i = find_token(document.body, "\\begin_inset CommandInset line" , i)
- if i != -1:
- # find end of inset
- j = find_token(document.body, "\\end_inset" , i)
- # assure we found the end_inset of the current inset
- if j > i + 6 or j == -1:
- document.warning("Malformed LyX document: Can't find end of line inset.")
- return
- # determine the optional offset
- k = find_token(document.body, 'offset', i)
- if k != -1 and k < j:
- offset = document.body[k][8:]
- else:
- offset = '0"'
- # determine the width
- l = find_token(document.body, 'width', k + 1)
- width = document.body[l][7:]
- # determine the height
- m = find_token(document.body, 'height', l + 1)
- height = document.body[m][8:]
- # remove trailing '"'
- offset = offset[:-1]
- width = width[:-1]
- height = height[:-1]
- # output the \rule command
- if offset <> "0":
- subst = "\\rule[" + offset + "]{" + width + "}{" + height + "}"
- else:
- subst = "\\rule{" + width + "}{" + height + "}"
- document.body[i:j + 1] = put_cmd_in_ert(subst)
- i += 1
- else:
+ if i == -1:
return
+ # find end of inset
+ j = find_token(document.body, "\\end_inset" , i)
+ # assure we found the end_inset of the current inset
+ if j > i + 6 or j == -1:
+ document.warning("Malformed LyX document: Can't find end of line inset.")
+ return
+ # determine the optional offset
+ k = find_token(document.body, 'offset', i, j)
+ if k != -1:
+ offset = document.body[k][8:-1]
+ else:
+ offset = ""
+ # determine the width
+ l = find_token(document.body, 'width', i, j)
+ if l != -1:
+ width = document.body[l][7:-1]
+ else:
+ width = "100col%"
+ # determine the height
+ m = find_token(document.body, 'height', i, j)
+ if m != -1:
+ height = document.body[m][8:-1]
+ else:
+ height = "1pt"
+ # output the \rule command
+ if offset:
+ subst = "\\rule[" + offset + "]{" + width + "}{" + height + "}"
+ else:
+ subst = "\\rule{" + width + "}{" + height + "}"
+ document.body[i:j + 1] = put_cmd_in_ert(subst)
+ i += 1
def revert_diagram(document):
return
-def convert_bibtexClearpage(document):
+def convert_bibtex_clearpage(document):
" insert a clear(double)page bibliographystyle if bibtotoc option is used "
+
+ i = find_token(document.header, '\\papersides', 0)
+ if i == -1:
+ document.warning("Malformed LyX document: Can't find papersides definition.")
+ return
+ sides = int(document.header[i][12])
+
+ j = 0
while True:
- i = find_token(document.header, '\\papersides', 0)
- if i == -1:
- document.warning("Malformed LyX document: Can't find papersides definition.")
- return
- else:
- sides = int(document.header[i][12])
- # only act of there is the option "bibtotoc"
- j = find_token(document.body, 'options "bibtotoc', 0)
+ j = find_token(document.body, "\\begin_inset CommandInset bibtex", j)
if j == -1:
return
+
+ k = find_end_of_inset(document.body, j)
+ if k == -1:
+ document.warning("Can't find end of Bibliography inset at line " + str(j))
+ j += 1
+ continue
+
+ # only act if there is the option "bibtotoc"
+ m = find_token(document.body, 'options', j, k)
+ if m == -1:
+ document.warning("Can't find options for bibliography inset at line " + str(j))
+ j = k
+ continue
+
+ optline = document.body[m]
+ idx = optline.find("bibtotoc")
+ if idx == -1:
+ j = k
+ continue
+
+ # so we want to insert a new page right before the paragraph that
+ # this bibliography thing is in. we'll look for it backwards.
+ lay = j - 1
+ while lay >= 0:
+ if document.body[lay].startswith("\\begin_layout"):
+ break
+ lay -= 1
+
+ if lay < 0:
+ document.warning("Can't find layout containing bibliography inset at line " + str(j))
+ j = k
+ continue
+
subst1 = '\\begin_layout Standard\n' \
+ '\\begin_inset Newpage clearpage\n' \
- + '\end_inset\n\n\n' \
- + '\end_layout\n'
+ + '\\end_inset\n\n\n' \
+ + '\\end_layout\n'
subst2 = '\\begin_layout Standard\n' \
+ '\\begin_inset Newpage cleardoublepage\n' \
- + '\end_inset\n\n\n' \
- + '\end_layout\n'
+ + '\\end_inset\n\n\n' \
+ + '\\end_layout\n'
if sides == 1:
- document.body.insert(j -5, subst1)
+ document.body.insert(lay, subst1)
+ document.warning(subst1)
else:
- document.body.insert(j -5, subst2)
- return
+ document.body.insert(lay, subst2)
+ document.warning(subst2)
+
+ j = k
##
[399, [convert_mathdots]],
[400, [convert_rule]],
[401, []],
- [402, [convert_bibtexClearpage]],
+ [402, [convert_bibtex_clearpage]],
[403, [convert_flexnames]],
[404, [convert_prettyref]]
]