X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx_1_2.py;h=a47fcaf1a018f5ad7646afa0d6872de5edf35b64;hb=9da74fe2078e24e1e7891784ecbfe33ff77e7f85;hp=3d9cd8b9121e81e382d3b04346698d00217f2ad9;hpb=8fc2c1dd05e48c3a4230a0dad881186f52694a6e;p=lyx.git diff --git a/lib/lyx2lyx/lyx_1_2.py b/lib/lyx2lyx/lyx_1_2.py index 3d9cd8b912..a47fcaf1a0 100644 --- a/lib/lyx2lyx/lyx_1_2.py +++ b/lib/lyx2lyx/lyx_1_2.py @@ -1,7 +1,7 @@ # This file is part of lyx2lyx -# -*- coding: iso-8859-1 -*- +# -*- coding: utf-8 -*- # Copyright (C) 2002 Dekel Tsur -# Copyright (C) 2004 José Matos +# Copyright (C) 2004 José Matos # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -15,13 +15,15 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +""" Convert files to the file format generated by lyx 1.2""" -import string import re from parser_tools import find_token, find_token_backwards, \ - find_tokens, find_tokens_backwards, find_beginning_of, find_end_of, find_re, \ + find_tokens, find_tokens_backwards, \ + find_beginning_of, find_end_of, find_re, \ is_nonempty_line, find_nonempty_line, \ get_value, check_token @@ -29,14 +31,15 @@ from parser_tools import find_token, find_token_backwards, \ # Private helper functions def get_layout(line, default_layout): - tokens = string.split(line) + " Get layout, if empty return the default layout." + tokens = line.split() if len(tokens) > 1: return tokens[1] return default_layout -# Finds the paragraph that contains line i. def get_paragraph(lines, i, format): + " Finds the paragraph that contains line i." begin_layout = "\\layout" while i != -1: @@ -48,8 +51,8 @@ def get_paragraph(lines, i, format): return -1 -# Finds the paragraph after the paragraph that contains line i. def get_next_paragraph(lines, i, format): + " Finds the paragraph after the paragraph that contains line i." tokens = ["\\begin_inset", "\\layout", "\\end_float", "\\the_end"] while i != -1: @@ -61,19 +64,22 @@ def get_next_paragraph(lines, i, format): def find_beginning_of_inset(lines, i): + " Find beginning of inset, where lines[i] is included." return find_beginning_of(lines, i, "\\begin_inset", "\\end_inset") -# Finds the matching \end_inset def find_end_of_inset(lines, i): + " Finds the matching \end_inset" return find_end_of(lines, i, "\\begin_inset", "\\end_inset") def find_end_of_tabular(lines, i): + " Finds the matching end of tabular." return find_end_of(lines, i, " i+1: - j2 = get_next_paragraph(lines, j + 1, file.format + 1) + j2 = get_next_paragraph(lines, j + 1, document.format + 1) lines[j2:j2] = ["\\end_deeper "]*(i2-(i+1)) new = floats[floattype]+[""] @@ -183,7 +188,7 @@ def remove_oldfloat(file): # 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, file.format + 1) + k = get_paragraph(lines, i, document.format + 1) flag = 0 for token in font_tokens: if find_token(lines, token, k, i) != -1: @@ -193,7 +198,7 @@ def remove_oldfloat(file): flag = 1 new.append("") if token == "\\lang": - new.append(token+" "+ file.language) + new.append(token+" "+ document.language) else: new.append(token+" default ") @@ -205,8 +210,9 @@ 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(file): - lines = file.body +def remove_pextra(document): + " Remove pextra token." + lines = document.body i = 0 flag = 0 while 1: @@ -246,10 +252,10 @@ def remove_pextra(file): if hfill: start = ["","\hfill",""]+start else: - start = ['\\layout %s' % file.default_layout,''] + start + start = ['\\layout %s' % document.default_layout,''] + start j0 = find_token_backwards(lines,"\\layout", i-1) - j = get_next_paragraph(lines, i, file.format + 1) + j = get_next_paragraph(lines, i, document.format + 1) count = 0 while 1: @@ -277,6 +283,7 @@ def remove_pextra(file): def is_empty(lines): + " Are all the lines empty?" return filter(is_nonempty_line, lines) == [] @@ -285,13 +292,14 @@ ert_rexp = re.compile(r"\\begin_inset|\\hfill|.*\\SpecialChar") spchar_rexp = re.compile(r"(.*)(\\SpecialChar.*)") -def remove_oldert(file): +def remove_oldert(document): + " Remove old ERT inset." ert_begin = ["\\begin_inset ERT", "status Collapsed", "", - '\\layout %s' % file.default_layout, + '\\layout %s' % document.default_layout, ""] - lines = file.body + lines = document.body i = 0 while 1: i = find_tokens(lines, ["\\latex latex", "\\layout LaTeX"], i) @@ -316,7 +324,7 @@ def remove_oldert(file): new = [] new2 = [] if check_token(lines[i], "\\layout LaTeX"): - new = ['\layout %s' % file.default_layout, "", ""] + new = ['\layout %s' % document.default_layout, "", ""] k = i+1 while 1: @@ -398,9 +406,9 @@ def remove_oldert(file): del lines[i] -# ERT insert are hidden feature of lyx 1.1.6. This might be removed in the future. -def remove_oldertinset(file): - lines = file.body +def remove_oldertinset(document): + " ERT insert are hidden feature of lyx 1.1.6. This might be removed in the future." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset ERT", i) @@ -408,7 +416,7 @@ def remove_oldertinset(file): break j = find_end_of_inset(lines, i) k = find_token(lines, "\\layout", i+1) - l = get_paragraph(lines, i, file.format + 1) + l = get_paragraph(lines, i, document.format + 1) if lines[k] == lines[l]: # same layout k = k+1 new = lines[k:j] @@ -416,11 +424,12 @@ def remove_oldertinset(file): i = i+1 -def is_ert_paragraph(file, i): - lines = file.body +def is_ert_paragraph(document, i): + " Is this a ert paragraph? " + lines = document.body if not check_token(lines[i], "\\layout"): return 0 - if not file.is_default_layout(get_layout(lines[i], file.default_layout)): + if not document.is_default_layout(get_layout(lines[i], document.default_layout)): return 0 i = find_nonempty_line(lines, i+1) @@ -432,17 +441,18 @@ def is_ert_paragraph(file, i): return check_token(lines[k], "\\layout") -def combine_ert(file): - lines = file.body +def combine_ert(document): + " Combine ERT paragraphs." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset ERT", i) if i == -1: break - j = get_paragraph(lines, i, file.format + 1) + j = get_paragraph(lines, i, document.format + 1) count = 0 text = [] - while is_ert_paragraph(file, j): + while is_ert_paragraph(document, j): count = count+1 i2 = find_token(lines, "\\layout", j+1) @@ -462,20 +472,23 @@ def combine_ert(file): oldunits = ["pt", "cm", "in", "text%", "col%"] def get_length(lines, name, start, end): + " Get lenght." i = find_token(lines, name, start, end) if i == -1: return "" - x = string.split(lines[i]) + x = lines[i].split() return x[2]+oldunits[int(x[1])] def write_attribute(x, token, value): + " Write attribute." if value != "": x.append("\t"+token+" "+value) -def remove_figinset(file): - lines = file.body +def remove_figinset(document): + " Remove figinset." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset Figure", i) @@ -483,9 +496,9 @@ def remove_figinset(file): break j = find_end_of_inset(lines, i) - if ( len(string.split(lines[i])) > 2 ): - lyxwidth = string.split(lines[i])[3]+"pt" - lyxheight = string.split(lines[i])[4]+"pt" + if ( len(lines[i].split()) > 2 ): + lyxwidth = lines[i].split()[3]+"pt" + lyxheight = lines[i].split()[4]+"pt" else: lyxwidth = "" lyxheight = "" @@ -543,15 +556,13 @@ def remove_figinset(file): lines[i:j+1] = new -## -# Convert tabular format 2 to 3 -# attr_re = re.compile(r' \w*="(false|0|)"') line_re = re.compile(r'<(features|column|row|cell)') -def update_tabular(file): +def update_tabular(document): + " Convert tabular format 2 to 3." regexp = re.compile(r'^\\begin_inset\s+Tabular') - lines = file.body + lines = document.body i = 0 while 1: i = find_re(lines, regexp, i) @@ -560,9 +571,9 @@ def update_tabular(file): for k in get_tabular_lines(lines, i): if check_token(lines[k], "') + " Insert attribute in lines[i]." + last = lines[i].find('>') lines[i] = lines[i][:last] + ' ' + attribute + lines[i][last:] @@ -678,9 +692,10 @@ rows_re = re.compile(r'rows="(\d*)"') longtable_re = re.compile(r'islongtable="(\w)"') 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): +def update_longtables(document): + " Update longtables to new format." regexp = re.compile(r'^\\begin_inset\s+Tabular') - body = file.body + body = document.body i = 0 while 1: i = find_re(body, regexp, i) @@ -710,7 +725,7 @@ def update_longtables(file): # remove longtable elements from features features = lt_features_re.search(body[i]) if features: - body[i] = string.replace(body[i], features.group(1), "") + body[i] = body[i].replace(features.group(1), "") continue row_info = row() * rows @@ -747,9 +762,9 @@ def update_longtables(file): i = i + 1 -# Figure insert are hidden feature of lyx 1.1.6. This might be removed in the future. -def fix_oldfloatinset(file): - lines = file.body +def fix_oldfloatinset(document): + " Figure insert are hidden feature of lyx 1.1.6. This might be removed in the future." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset Float ", i) @@ -761,8 +776,9 @@ def fix_oldfloatinset(file): i = i+1 -def change_listof(file): - lines = file.body +def change_listof(document): + " Change listof insets." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset LatexCommand \\listof", i) @@ -773,14 +789,15 @@ def change_listof(file): i = i+1 -def change_infoinset(file): - lines = file.body +def change_infoinset(document): + " Change info inset." + lines = document.body i = 0 while 1: i = find_token(lines, "\\begin_inset Info", i) if i == -1: break - txt = string.lstrip(lines[i][18:]) + txt = lines[i][18:].lstrip() new = ["\\begin_inset Note", "collapsed true", ""] j = find_token(lines, "\\end_inset", i) if j == -1: @@ -791,8 +808,8 @@ def change_infoinset(file): note_lines = [txt]+note_lines for line in note_lines: - new = new + ['\layout %s' % file.default_layout, ""] - tmp = string.split(line, '\\') + new = new + ['\layout %s' % document.default_layout, ""] + tmp = line.split('\\') new = new + [tmp[0]] for x in tmp[1:]: new = new + ["\\backslash ", x] @@ -800,8 +817,9 @@ def change_infoinset(file): i = i+5 -def change_header(file): - lines = file.header +def change_header(document): + " Update header." + lines = document.header i = find_token(lines, "\\use_amsmath", 0) if i == -1: return @@ -809,6 +827,7 @@ def change_header(file): "\use_numerical_citations 0"] +supported_versions = ["1.2.%d" % i for i in range(5)] + ["1.2"] convert = [[220, [change_header, change_listof, fix_oldfloatinset, update_tabular, update_longtables, remove_pextra, remove_oldfloat, remove_figinset, remove_oldertinset,