X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx_2_4.py;h=2b03ada0d89b6877973d33e5cc290a8b896e0e5e;hb=aca303135257f979ba09c9ab70147d4b51cef230;hp=21e0a0889945ad3b8f84ab724f6b08f992d03d6c;hpb=e0a5babde7f97d86742b58f17d6b2eaad4d0c860;p=lyx.git diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py index 21e0a08899..2b03ada0d8 100644 --- a/lib/lyx2lyx/lyx_2_4.py +++ b/lib/lyx2lyx/lyx_2_4.py @@ -24,16 +24,17 @@ import sys, os # Uncomment only what you need to import, please. -from parser_tools import (find_end_of_inset, find_token) +from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, +get_bool_value, get_value, get_quoted_value) # del_token, del_value, del_complete_lines, -# find_complete_lines, find_end_of, find_end_of_layout, +# find_complete_lines, find_end_of, # find_re, find_substring, find_token_backwards, -# get_containing_inset, get_containing_layout, get_bool_value, get_value, -# get_quoted_value, is_in_inset, set_bool_value +# get_containing_inset, get_containing_layout, +# is_in_inset, set_bool_value # find_tokens, find_token_exact, check_token, get_option_value -#from lyx2lyx_tools import (add_to_preamble, put_cmd_in_ert, revert_font_attrs, -# insert_to_preamble, latex_length) +from lyx2lyx_tools import (put_cmd_in_ert, add_to_preamble) +# revert_font_attrs, insert_to_preamble, latex_length # get_ert, lyx2latex, lyx2verbatim, length_in_bp, convert_info_insets # revert_flex_inset, hex2ratio, str2bool @@ -87,16 +88,271 @@ def revert_lst_literalparam(document): del document.body[k] +def revert_paratype(document): + " Revert ParaType font definitions to LaTeX " + + if find_token(document.header, "\\use_non_tex_fonts false", 0) != -1: + preamble = "" + i1 = find_token(document.header, "\\font_roman \"PTSerif-TLF\"", 0) + i2 = find_token(document.header, "\\font_sans \"default\"", 0) + i3 = find_token(document.header, "\\font_typewriter \"default\"", 0) + j = find_token(document.header, "\\font_sans \"PTSans-TLF\"", 0) + sfval = get_value(document.header, "\\font_sf_scale", 0) + # cutoff " 100" + sfval = sfval[:-4] + sfoption = "" + if sfval != "100": + sfoption = "scaled=" + format(float(sfval) / 100, '.2f') + k = find_token(document.header, "\\font_typewriter \"PTMono-TLF\"", 0) + ttval = get_value(document.header, "\\font_tt_scale", 0) + # cutoff " 100" + ttval = ttval[:-4] + ttoption = "" + if ttval != "100": + ttoption = "scaled=" + format(float(ttval) / 100, '.2f') + if i1 != -1 and i2 != -1 and i3!= -1: + add_to_preamble(document, ["\\usepackage{paratype}"]) + else: + if i1!= -1: + add_to_preamble(document, ["\\usepackage{PTSerif}"]) + document.header[i1] = document.header[i1].replace("PTSerif-TLF", "default") + if j!= -1: + if sfoption != "": + add_to_preamble(document, ["\\usepackage[" + sfoption + "]{PTSans}"]) + else: + add_to_preamble(document, ["\\usepackage{PTSans}"]) + document.header[j] = document.header[j].replace("PTSans-TLF", "default") + if k!= -1: + if ttoption != "": + add_to_preamble(document, ["\\usepackage[" + ttoption + "]{PTMono}"]) + else: + add_to_preamble(document, ["\\usepackage{PTMono}"]) + document.header[k] = document.header[k].replace("PTMono-TLF", "default") + + +def revert_xcharter(document): + " Revert XCharter font definitions to LaTeX " + + i = find_token(document.header, "\\font_roman \"xcharter\"", 0) + if i == -1: + return + + # replace unsupported font setting + document.header[i] = document.header[i].replace("xcharter", "default") + # no need for preamble code with system fonts + if get_bool_value(document.header, "\\use_non_tex_fonts"): + return + + # transfer old style figures setting to package options + j = find_token(document.header, "\\font_osf true") + if j != -1: + options = "[osf]" + document.header[j] = "\\font_osf false" + else: + options = "" + if i != -1: + add_to_preamble(document, ["\\usepackage%s{XCharter}"%options]) + + +def revert_lscape(document): + " Reverts the landscape environment (Landscape module) to TeX-code " + + if not "landscape" in document.get_module_list(): + return + + i = 0 + while True: + i = find_token(document.body, "\\begin_inset Flex Landscape", i) + if i == -1: + return + j = find_end_of_inset(document.body, i) + if j == -1: + document.warning("Malformed LyX document: Can't find end of Landscape inset") + i += 1 + continue + + if document.body[i] == "\\begin_inset Flex Landscape (Floating)": + document.body[j - 2 : j + 1] = put_cmd_in_ert("\\end{landscape}}") + document.body[i : i + 4] = put_cmd_in_ert("\\afterpage{\\begin{landscape}") + add_to_preamble(document, ["\\usepackage{afterpage}"]) + else: + document.body[j - 2 : j + 1] = put_cmd_in_ert("\\end{landscape}") + document.body[i : i + 4] = put_cmd_in_ert("\\begin{landscape}") + + add_to_preamble(document, ["\\usepackage{pdflscape}"]) + # no need to reset i + + +def convert_fontenc(document): + " Convert default fontenc setting " + + i = find_token(document.header, "\\fontencoding global", 0) + if i == -1: + return + + document.header[i] = document.header[i].replace("global", "auto") + + +def revert_fontenc(document): + " Revert default fontenc setting " + + i = find_token(document.header, "\\fontencoding auto", 0) + if i == -1: + return + + document.header[i] = document.header[i].replace("auto", "global") + + +def revert_nospellcheck(document): + " Remove nospellcheck font info param " + + i = 0 + while True: + i = find_token(document.body, '\\nospellcheck', i) + if i == -1: + return + del document.body[i] + + +def revert_floatpclass(document): + " Remove float placement params 'document' and 'class' " + + i = 0 + i = find_token(document.header, "\\float_placement class", 0) + if i != -1: + del document.header[i] + + i = 0 + while True: + i = find_token(document.body, '\\begin_inset Float', i) + if i == -1: + break + j = find_end_of_inset(document.body, i) + k = find_token(document.body, 'placement class', i, i + 2) + if k == -1: + k = find_token(document.body, 'placement document', i, i + 2) + if k != -1: + del document.body[k] + i = j + continue + del document.body[k] + + +def revert_floatalignment(document): + " Remove float alignment params " + + i = 0 + i = find_token(document.header, "\\float_alignment", 0) + galignment = "" + if i != -1: + galignment = get_value(document.header, "\\float_alignment", i) + del document.header[i] + + i = 0 + while True: + i = find_token(document.body, '\\begin_inset Float', i) + if i == -1: + break + 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 + k = find_token(document.body, 'alignment', i, i + 4) + if k == -1: + i = j + continue + alignment = get_value(document.body, "alignment", k) + if alignment == "document": + alignment = galignment + del document.body[k] + l = find_token(document.body, "\\begin_layout Plain Layout", i, j) + if l == -1: + document.warning("Can't find float layout!") + i = j + continue + alcmd = [] + if alignment == "left": + alcmd = put_cmd_in_ert("\\raggedright{}") + elif alignment == "center": + alcmd = put_cmd_in_ert("\\centering{}") + elif alignment == "right": + alcmd = put_cmd_in_ert("\\raggedleft{}") + if len(alcmd) > 0: + document.body[l+1:l+1] = alcmd + i = j + + +def revert_tuftecite(document): + " Revert \cite commands in tufte classes " + + tufte = ["tufte-book", "tufte-handout"] + if document.textclass not in tufte: + return + + i = 0 + while (True): + i = find_token(document.body, "\\begin_inset CommandInset citation", i) + if i == -1: + break + j = find_end_of_inset(document.body, i) + if j == -1: + document.warning("Can't find end of citation inset at line %d!!" %(i)) + i += 1 + continue + k = find_token(document.body, "LatexCommand", i, j) + if k == -1: + document.warning("Can't find LatexCommand for citation inset at line %d!" %(i)) + i = j + 1 + continue + cmd = get_value(document.body, "LatexCommand", k) + if cmd != "cite": + i = j + 1 + continue + pre = get_quoted_value(document.body, "before", i, j) + post = get_quoted_value(document.body, "after", i, j) + key = get_quoted_value(document.body, "key", i, j) + if not key: + document.warning("Citation inset at line %d does not have a key!" %(i)) + key = "???" + # Replace command with ERT + res = "\\cite" + if pre: + res += "[" + pre + "]" + if post: + res += "[" + post + "]" + elif pre: + res += "[]" + res += "{" + key + "}" + document.body[i:j+1] = put_cmd_in_ert([res]) + i = j + 1 + + ## # Conversion hub # supported_versions = ["2.4.0", "2.4"] convert = [ - [545, [convert_lst_literalparam]] + [545, [convert_lst_literalparam]], + [546, []], + [547, []], + [548, []], + [549, []], + [550, [convert_fontenc]], + [551, []], + [552, []], + [553, []] ] revert = [ + [552, [revert_tuftecite]], + [551, [revert_floatpclass, revert_floatalignment]], + [550, [revert_nospellcheck]], + [549, [revert_fontenc]], + [548, []],# dummy format change + [547, [revert_lscape]], + [546, [revert_xcharter]], + [545, [revert_paratype]], [544, [revert_lst_literalparam]] ]