from parser_tools import find_token, find_token_backwards, get_next_paragraph,\
find_tokens, find_end_of_inset, find_re, \
is_nonempty_line, get_paragraph, find_nonempty_line, \
- get_value, get_tabular_lines, check_token
+ get_value, get_tabular_lines, check_token, get_layout
floats = {
"footnote": ["\\begin_inset Foot",
#
# Change \begin_float .. \end_float into \begin_inset Float .. \end_inset
#
-def remove_oldfloat(lines, opt):
+def remove_oldfloat(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_float", i)
floattype = string.split(lines[i])[1]
if not floats.has_key(floattype):
- opt.warning("Error! Unknown float type " + floattype)
+ file.warning("Error! Unknown float type " + floattype)
floattype = "fig"
# skip \end_deeper tokens
while check_token(lines[i2], "\\end_deeper"):
i2 = i2+1
if i2 > i+1:
- j2 = get_next_paragraph(lines, j+1)
+ j2 = get_next_paragraph(lines, j + 1, file.format + 1)
lines[j2:j2] = ["\\end_deeper "]*(i2-(i+1))
new = floats[floattype]+[""]
# as extra '\foo default' commands are ignored.
# In fact, it might be safer to output '\foo default' for all
# font attributes.
- k = get_paragraph(lines, i)
+ k = get_paragraph(lines, i, file.format + 1)
flag = 0
for token in font_tokens:
if find_token(lines, token, k, i) != -1:
flag = 1
new.append("")
if token == "\\lang":
- new.append(token+" "+ opt.language)
+ new.append(token+" "+ file.language)
else:
new.append(token+" default ")
pextra_type2_rexp = re.compile(r".*\\pextra_type\s+[12]")
pextra_type2_rexp2 = re.compile(r".*(\\layout|\\pextra_type\s+2)")
+pextra_widthp = re.compile(r"\\pextra_widthp")
-def remove_pextra(lines):
+def remove_pextra(file):
+ lines = file.body
i = 0
flag = 0
while 1:
if i == -1:
break
+ # Sometimes the \pextra_widthp argument comes in it own
+ # line. If that happens insert it back in this line.
+ if pextra_widthp.search(lines[i+1]):
+ lines[i] = lines[i] + ' ' + lines[i+1]
+ del lines[i+1]
+
mo = pextra_rexp.search(lines[i])
width = get_width(mo)
if hfill:
start = ["","\hfill",""]+start
else:
- start = ["\\layout Standard"] + start
+ start = ['\\layout %s' % file.default_layout,''] + start
j0 = find_token_backwards(lines,"\\layout", i-1)
- j = get_next_paragraph(lines, i)
+ j = get_next_paragraph(lines, i, file.format + 1)
count = 0
while 1:
move_rexp = re.compile(r"\\(family|series|shape|size|emph|numeric|bar|noun|end_deeper)")
ert_rexp = re.compile(r"\\begin_inset|\\hfill|.*\\SpecialChar")
spchar_rexp = re.compile(r"(.*)(\\SpecialChar.*)")
-ert_begin = ["\\begin_inset ERT",
- "status Collapsed",
- "",
- "\\layout Standard"]
-def remove_oldert(lines):
+def remove_oldert(file):
+ ert_begin = ["\\begin_inset ERT",
+ "status Collapsed",
+ "",
+ '\\layout %s' % file.default_layout,
+ ""]
+ lines = file.body
i = 0
while 1:
i = find_tokens(lines, ["\\latex latex", "\\layout LaTeX"], i)
new = []
new2 = []
if check_token(lines[i], "\\layout LaTeX"):
- new = ["\layout Standard", "", ""]
- # We have a problem with classes in which Standard is not the default layout!
+ new = ['\layout %s' % file.default_layout, "", ""]
k = i+1
while 1:
# ERT insert are hidden feature of lyx 1.1.6. This might be removed in the future.
-def remove_oldertinset(lines):
+def remove_oldertinset(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset ERT", i)
break
j = find_end_of_inset(lines, i)
k = find_token(lines, "\\layout", i+1)
- l = get_paragraph(lines, i)
+ l = get_paragraph(lines, i, file.format + 1)
if lines[k] == lines[l]: # same layout
k = k+1
new = lines[k:j]
i = i+1
-def is_ert_paragraph(lines, i):
- if not check_token(lines[i], "\\layout Standard"):
+def is_ert_paragraph(file, i):
+ lines = file.body
+ if not check_token(lines[i], "\\layout"):
+ return 0
+ if not file.is_default_layout(get_layout(lines[i], file.default_layout)):
return 0
i = find_nonempty_line(lines, i+1)
return check_token(lines[k], "\\layout")
-def combine_ert(lines):
+def combine_ert(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset ERT", i)
if i == -1:
break
- j = get_paragraph(lines, i)
+ j = get_paragraph(lines, i, file.format + 1)
count = 0
text = []
- while is_ert_paragraph(lines, j):
+ while is_ert_paragraph(file, j):
count = count+1
i2 = find_token(lines, "\\layout", j+1)
x.append("\t"+token+" "+value)
-def remove_figinset(lines):
+def remove_figinset(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset Figure", i)
attr_re = re.compile(r' \w*="(false|0|)"')
line_re = re.compile(r'<(features|column|row|cell)')
-def update_tabular(lines):
+def update_tabular(file):
+ regexp = re.compile(r'^\\begin_inset\s+Tabular')
+ lines = file.body
i = 0
while 1:
- i = find_token(lines, '\\begin_inset Tabular', i)
+ i = find_re(lines, regexp, i)
if i == -1:
break
ltvalues_re = re.compile(r'endhead="(-?\d*)" endfirsthead="(-?\d*)" endfoot="(-?\d*)" endlastfoot="(-?\d*)"')
lt_features_re = re.compile(r'(endhead="-?\d*" endfirsthead="-?\d*" endfoot="-?\d*" endlastfoot="-?\d*")')
def update_longtables(file):
+ regexp = re.compile(r'^\\begin_inset\s+Tabular')
body = file.body
i = 0
while 1:
- i = find_token(body, '\\begin_inset Tabular', i)
+ i = find_re(body, regexp, i)
if i == -1:
break
i = i + 1
i = find_token(body, '<features', i)
if i == -1:
break
-
+
# is this a longtable?
longtable = longtable_re.search(body[i])
# Figure insert are hidden feature of lyx 1.1.6. This might be removed in the future.
-def fix_oldfloatinset(lines):
+def fix_oldfloatinset(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset Float ", i)
i = i+1
-def change_listof(lines):
+def change_listof(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset LatexCommand \\listof", i)
i = i+1
-def change_infoinset(lines):
+def change_infoinset(file):
+ lines = file.body
i = 0
while 1:
i = find_token(lines, "\\begin_inset Info", i)
note_lines = [txt]+note_lines
for line in note_lines:
- new = new + ["\layout Standard", ""]
+ new = new + ['\layout %s' % file.default_layout, ""]
tmp = string.split(line, '\\')
new = new + [tmp[0]]
for x in tmp[1:]:
i = i+5
-def change_preamble(lines):
+def change_header(file):
+ lines = file.header
i = find_token(lines, "\\use_amsmath", 0)
if i == -1:
return
"\use_numerical_citations 0"]
-def convert(file):
- change_preamble(file.header)
- change_listof(file.body)
- fix_oldfloatinset(file.body)
- update_tabular(file.body)
- update_longtables(file)
- remove_pextra(file.body)
- remove_oldfloat(file.body, file)
- remove_figinset(file.body)
- remove_oldertinset(file.body)
- remove_oldert(file.body)
- combine_ert(file.body)
- change_infoinset(file.body)
- file.format = 220
-
-
-def revert(file):
- file.error("The convertion to an older format (%s) is not implemented." % file.format)
+convert = [[220, [change_header, change_listof, fix_oldfloatinset,
+ update_tabular, update_longtables, remove_pextra,
+ remove_oldfloat, remove_figinset, remove_oldertinset,
+ remove_oldert, combine_ert, change_infoinset]]]
+revert = []
if __name__ == "__main__":