X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx_2_1.py;h=91666ba4e2746048586fa8c82c80dc21b5d3d248;hb=a84a98b54561044b5902dfce39bc31082877fec1;hp=38c399f9ad24aec6204691bb5bc0ad958bfc8e38;hpb=b95c17cfdd469aac842304073a56e3fb64bfe629;p=lyx.git diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py index 38c399f9ad..91666ba4e2 100644 --- a/lib/lyx2lyx/lyx_2_1.py +++ b/lib/lyx2lyx/lyx_2_1.py @@ -25,13 +25,13 @@ import sys, os # Uncomment only what you need to import, please. -from parser_tools import del_token, find_token, find_end_of, find_end_of_inset, \ - find_end_of_layout, find_re, get_option_value, get_value, get_quoted_value, \ - set_option_value +from parser_tools import del_token, find_token, find_token_backwards, find_end_of, \ + find_end_of_inset, find_end_of_layout, find_re, get_option_value, get_containing_layout, \ + get_value, get_quoted_value, set_option_value #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, del_token, check_token + #is_in_inset, del_token, check_token from lyx2lyx_tools import add_to_preamble, put_cmd_in_ert, get_ert @@ -1133,27 +1133,697 @@ def revert_uop(document): def convert_latexargs(document): " Convert InsetArgument to new syntax " + if find_token(document.body, "\\begin_inset Argument", 0) == -1: + # nothing to do. + return + + # A list of layouts (document classes) with only optional or no arguments. + # These can be safely converted to the new syntax + # (I took the liberty to add some of my personal layouts/modules here; JSP) + safe_layouts = ["aa", "aapaper", "aastex", "achemso", "acmsiggraph", "AEA", + "agu-dtd", "agums", "agutex", "amsart", "amsbook", "apa", + "arab-article", "armenian-article", "article-beamer", "article", + "beamer", "book", "broadway", "chess", "cl2emult", "ctex-article", + "ctex-book", "ctex-report", "dinbrief", "docbook-book", "docbook-chapter", + "docbook", "docbook-section", "doublecol-new", "dtk", "ectaart", "egs", + "elsarticle", "elsart", "entcs", "europecv", "extarticle", "extbook", + "extletter", "extreport", "foils", "frletter", "g-brief2", "g-brief", + "heb-article", "heb-letter", "hollywood", "IEEEtran", "ijmpc", "ijmpd", + "iopart", "isprs", "jarticle", "jasatex", "jbook", "jgrga", "jreport", + "jsarticle", "jsbeamer", "jsbook", "jss", "kluwer", "latex8", "letter", "lettre", + "literate-article", "literate-book", "literate-report", "llncs", "ltugboat", + "memoir", "moderncv", "mwart", "mwbk", "mwrep", "paper", "powerdot", + "recipebook", "report", "revtex4", "revtex", "scrartcl", "scrarticle-beamer", + "scrbook", "scrlettr", "scrlttr2", "scrreprt", "seminar", "siamltex", + "sigplanconf", "simplecv", "singlecol", "singlecol-new", "slides", "spie", + "svglobal3", "svglobal", "svjog", "svmono", "svmult", "svprobth", "tarticle", + "tbook", "treport", "tufte-book", "tufte-handout"] + # A list of "safe" modules, same as above + safe_modules = ["biblatex", "beameraddons", "beamersession", "braille", "customHeadersFooters", + "endnotes", "enumitem", "eqs-within-sections", "figs-within-sections", "fix-cm", + "fixltx2e", "foottoend", "hanging", "jscharstyles", "knitr", "lilypond", + "linguistics", "linguisticx", "logicalmkup", "minimalistic", "nomindex", "noweb", + "pdfcomment", "sweave", "tabs-within-sections", "theorems-ams-bytype", + "theorems-ams-extended-bytype", "theorems-ams-extended", "theorems-ams", "theorems-bytype", + "theorems-chap-bytype", "theorems-chap", "theorems-named", "theorems-sec-bytype", + "theorems-sec", "theorems-starred", "theorems-std", "todonotes"] + # Modules we need to take care of + caveat_modules = ["initials"] + # information about the relevant styles in caveat_modules (number of opt and req args) + # use this if we get more caveat_modules. For now, use hard coding (see below). + # initials = [{'Layout' : 'Initial', 'opt' : 1, 'req' : 1}] + + # Is this a known safe layout? + safe_layout = document.textclass in safe_layouts + if not safe_layout: + document.warning("Lyx2lyx knows nothing about textclass '%s'. " + "Please check if short title insets have been converted correctly." + % document.textclass) + # Do we use unsafe or unknown modules + mods = document.get_module_list() + unknown_modules = False + used_caveat_modules = list() + for mod in mods: + if mod in safe_modules: + continue + if mod in caveat_modules: + used_caveat_modules.append(mod) + continue + unknown_modules = True + document.warning("Lyx2lyx knows nothing about module '%s'. " + "Please check if short title insets have been converted correctly." + % mod) + i = 0 while True: - i = find_token(document.body, "\\begin_inset Argument", i) - if i == -1: - return - # We cannot do more here since we have no access to the layout. - # InsetArgument itself will do the real work - # (see InsetArgument::updateBuffer()) - document.body[i] = "\\begin_inset Argument 999" - i = i + 1 + i = find_token(document.body, "\\begin_inset Argument", i) + if i == -1: + return + + if not safe_layout or unknown_modules: + # We cannot do more here since we have no access to this layout. + # InsetArgument itself will do the real work + # (see InsetArgument::updateBuffer()) + document.body[i] = "\\begin_inset Argument 999" + i = i + 1 + continue + + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: + document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 + continue + parbeg = parent[1] + parend = parent[2] + allowed_opts = -1 + first_req = -1 + if len(used_caveat_modules) > 0: + # We know for now that this must be the initials module with the Initial layout + # If we get more such modules, we need some automating. + if parent[0] == "Initial": + # Layout has 1 opt and 1 req arg. + # Count the actual arguments + actualargs = 0 + for p in range(parbeg, parend): + if document.body[p] == "\\begin_inset Argument": + actualargs += 1 + if actualargs == 1: + allowed_opts = 0 + first_req = 2 + # Collect all arguments in this paragraph + argnr = 0 + for p in range(parbeg, parend): + if document.body[p] == "\\begin_inset Argument": + argnr += 1 + if allowed_opts != -1: + # We have less arguments than opt + required. + # required must take precedence. + if argnr > allowed_opts and argnr < first_req: + argnr = first_req + document.body[p] = "\\begin_inset Argument %d" % argnr + i = i + 1 def revert_latexargs(document): " Revert InsetArgument to old syntax " - # What needs to be done is this: - # * find all arguments in a paragraph and reorder them - # according to their ID (which is deleted) - # So: \\begin_inset Argument 2 ... \\begin_inset Argument 1 - # => \\begin_inset Argument ... \\begin_inset Argument - # with correct order. + i = 0 + rx = re.compile(r'^\\begin_inset Argument (\d+)$') + args = dict() + while True: + # Search for Argument insets + i = find_token(document.body, "\\begin_inset Argument", i) + if i == -1: + return + m = rx.match(document.body[i]) + if not m: + # No ID: inset already reverted + i = i + 1 + continue + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: + document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 + continue + parbeg = parent[1] + parend = parent[2] + # Collect all arguments in this paragraph + realparend = parend + for p in range(parbeg, parend): + m = rx.match(document.body[p]) + if m: + val = int(m.group(1)) + j = find_end_of_inset(document.body, p) + # Revert to old syntax + document.body[p] = "\\begin_inset Argument" + if j == -1: + document.warning("Malformed lyx document: Can't find end of Argument inset") + continue + if val > 0: + args[val] = document.body[p : j + 1] + # Adjust range end + realparend = realparend - len(document.body[p : j + 1]) + # Remove arg inset at this position + del document.body[p : j + 1] + if p >= realparend: + break + # Now sort the arg insets + subst = [""] + for f in sorted(args): + subst += args[f] + del args[f] + # Insert the sorted arg insets at paragraph begin + document.body[parbeg + 1:parbeg + 1] = subst + + i = parbeg + 1 + len(subst) + + +def revert_Argument_to_TeX_brace(document, line, n, nmax, environment): + ''' + Reverts an InsetArgument to TeX-code + usage: + revert_Argument_to_TeX_brace(document, LineOfBeginLayout, StartArgument, EndArgument, isEnvironment) + LineOfBeginLayout is the line of the \begin_layout statement + StartArgument is the number of the first argument that needs to be converted + EndArgument is the number of the last argument that needs to be converted or the last defined one + isEnvironment must be true, if the layout id for a LaTeX environment + ''' + lineArg = 0 + while lineArg != -1 and n < nmax + 1: + lineArg = find_token(document.body, "\\begin_inset Argument " + str(n), line) + if lineArg != -1: + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", lineArg) + # we have to assure that no other inset is in the Argument + beginInset = find_token(document.body, "\\begin_inset", beginPlain) + endInset = find_token(document.body, "\\end_inset", beginPlain) + k = beginPlain + 1 + l = k + while beginInset < endInset and beginInset != -1: + beginInset = find_token(document.body, "\\begin_inset", k) + endInset = find_token(document.body, "\\end_inset", l) + k = beginInset + 1 + l = endInset + 1 + if environment == False: + document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}{") + del(document.body[lineArg : beginPlain + 1]) + else: + document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}") + document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("{") + n = n + 1 + + +def revert_IEEEtran(document): + ''' + Reverts InsetArgument of + Page headings + Biography + Biography without photo + to TeX-code + ''' + if document.textclass == "IEEEtran": + i = 0 + j = 0 + k = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Page headings", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 1, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout Biography without photo", j) + if j != -1: + revert_Argument_to_TeX_brace(document, j, 1, 1, True) + j = j + 1 + if k != -1: + k = find_token(document.body, "\\begin_layout Biography", k) + kA = find_token(document.body, "\\begin_layout Biography without photo", k) + if k == kA and k != -1: + k = k + 1 + continue + if k != -1: + # start with the second argument, therefore 2 + revert_Argument_to_TeX_brace(document, k, 2, 2, True) + k = k + 1 + if i == -1 and j == -1 and k == -1: + return + + +def convert_TeX_brace_to_Argument(document, line, n, nmax, inset, environment): + ''' + Converts TeX code for mandatory arguments to an InsetArgument + The conversion of TeX code for optional arguments must be done with another routine + !!! Be careful if the braces are different in your case as expected here: + - "}{" separates mandatory arguments of commands + - "}" + "{" separates mandatory arguments of commands + - "}" + " " + "{" separates mandatory arguments of commands + - { and } surround a mandatory argument of an environment + usage: + convert_TeX_brace_to_Argument(document, LineOfBeginLayout/Inset, StartArgument, EndArgument, isInset, isEnvironment) + LineOfBeginLayout/Inset is the line of the \begin_layout or \begin_inset statement + StartArgument is the number of the first ERT that needs to be converted + EndArgument is the number of the last ERT that needs to be converted + isInset must be true, if braces inside an InsetLayout needs to be converted + isEnvironment must be true, if the layout is for a LaTeX environment + + Todo: this routine can currently handle only one mandatory argument of environments + ''' + lineERT = line + endn = line + loop = 1 + while lineERT != -1 and n < nmax + 1: + lineERT = find_token(document.body, "\\begin_inset ERT", lineERT) + if environment == False and lineERT != -1: + bracePair = find_token(document.body, "}{", lineERT) + # assure that the "}{" is in this ERT + if bracePair == lineERT + 5: + end = find_token(document.body, "\\end_inset", bracePair) + document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"] + if loop == 1: + # in the case that n > 1 we have optional arguments before + # therefore detect them if any + if n > 1: + # first check if there is an argument + lineArg = find_token(document.body, "\\begin_inset Argument", line) + if lineArg < lineERT and lineArg != -1: + # we have an argument, so now search backwards for its end + # we must now assure that we don't find other insets like e.g. a newline + endInsetArg = lineERT + endLayoutArg = endInsetArg + while endInsetArg != endLayoutArg + 2 and endInsetArg != -1: + endInsetArg = endInsetArg - 1 + endLayoutArg = endInsetArg + endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg) + endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg) + line = endInsetArg + 1 + if inset == False: + document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + else: + document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + else: + document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + n = n + 1 + endn = end + loop = loop + 1 + # now check the case that we have "}" + "{" in two ERTs + else: + endBrace = find_token(document.body, "}", lineERT) + if endBrace == lineERT + 5: + beginBrace = find_token(document.body, "{", endBrace) + # assure that the ERTs are consecutive (11 or 12 depending if there is a space between the ERTs or not) + if beginBrace == endBrace + 11 or beginBrace == endBrace + 12: + end = find_token(document.body, "\\end_inset", beginBrace) + document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"] + if loop == 1: + # in the case that n > 1 we have optional arguments before + # therefore detect them if any + if n > 1: + # first check if there is an argument + lineArg = find_token(document.body, "\\begin_inset Argument", line) + if lineArg < lineERT and lineArg != -1: + # we have an argument, so now search backwards for its end + # we must now assure that we don't find other insets like e.g. a newline + endInsetArg = lineERT + endLayoutArg = endInsetArg + while endInsetArg != endLayoutArg + 2 and endInsetArg != -1: + endInsetArg = endInsetArg - 1 + endLayoutArg = endInsetArg + endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg) + endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg) + line = endInsetArg + 1 + if inset == False: + document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + else: + document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + else: + document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + n = n + 1 + loop = loop + 1 + # set the line where the next argument will be inserted + if beginBrace == endBrace + 11: + endn = end - 11 + else: + endn = end - 12 + else: + lineERT = lineERT + 1 + if environment == True and lineERT != -1: + opening = find_token(document.body, "{", lineERT) + if opening == lineERT + 5: # assure that the "{" is in this ERT + end = find_token(document.body, "\\end_inset", opening) + document.body[lineERT : end + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"] + n = n + 1 + lineERT2 = find_token(document.body, "\\begin_inset ERT", lineERT) + closing = find_token(document.body, "}", lineERT2) + if closing == lineERT2 + 5: # assure that the "}" is in this ERT + end2 = find_token(document.body, "\\end_inset", closing) + document.body[lineERT2 : end2 + 1] = ["\\end_layout", "", "\\end_inset"] + else: + lineERT = lineERT + 1 + + +def convert_IEEEtran(document): + ''' + Converts ERT of + Page headings + Biography + Biography without photo + to InsetArgument + ''' + if document.textclass == "IEEEtran": + i = 0 + j = 0 + k = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Page headings", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 1, False, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout Biography without photo", j) + if j != -1: + convert_TeX_brace_to_Argument(document, j, 1, 1, False, True) + j = j + 1 + if k != -1: + # assure that we don't handle Biography Biography without photo + k = find_token(document.body, "\\begin_layout Biography", k) + kA = find_token(document.body, "\\begin_layout Biography without photo", k - 1) + if k == kA and k != -1: + k = k + 1 + continue + if k != -1: + # the argument we want to convert is the second one + convert_TeX_brace_to_Argument(document, k, 2, 2, False, True) + k = k + 1 + if i == -1 and j == -1 and k == -1: + return + + +def revert_AASTeX(document): + " Reverts InsetArgument of Altaffilation to TeX-code " + if document.textclass == "aastex": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Altaffilation", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 1, False) + i = i + 1 + if i == -1: + return + + +def convert_AASTeX(document): + " Converts ERT of Altaffilation to InsetArgument " + if document.textclass == "aastex": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Altaffilation", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 1, False, False) + i = i + 1 + if i == -1: + return + + +def revert_AGUTeX(document): + " Reverts InsetArgument of Author affiliation to TeX-code " + if document.textclass == "agutex": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Author affiliation", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 1, False) + i = i + 1 + if i == -1: + return + + +def convert_AGUTeX(document): + " Converts ERT of Author affiliation to InsetArgument " + if document.textclass == "agutex": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Author affiliation", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 1, False, False) + i = i + 1 + if i == -1: + return + + +def revert_IJMP(document): + " Reverts InsetArgument of MarkBoth to TeX-code " + if document.textclass == "ijmpc" or document.textclass == "ijmpd": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout MarkBoth", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 1, False) + i = i + 1 + if i == -1: + return + + +def convert_IJMP(document): + " Converts ERT of MarkBoth to InsetArgument " + if document.textclass == "ijmpc" or document.textclass == "ijmpd": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout MarkBoth", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 1, False, False) + i = i + 1 + if i == -1: + return + + +def revert_SIGPLAN(document): + " Reverts InsetArgument of MarkBoth to TeX-code " + if document.textclass == "sigplanconf": + i = 0 + j = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Conference", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 1, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout Author", j) + if j != -1: + revert_Argument_to_TeX_brace(document, j, 1, 2, False) + j = j + 1 + if i == -1 and j == -1: + return + + +def convert_SIGPLAN(document): + " Converts ERT of MarkBoth to InsetArgument " + if document.textclass == "sigplanconf": + i = 0 + j = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Conference", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 1, False, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout Author", j) + if j != -1: + convert_TeX_brace_to_Argument(document, j, 1, 2, False, False) + j = j + 1 + if i == -1 and j == -1: + return + + +def revert_SIGGRAPH(document): + " Reverts InsetArgument of Flex CRcat to TeX-code " + if document.textclass == "acmsiggraph": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_inset Flex CRcat", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 1, 3, False) + i = i + 1 + if i == -1: + return + + +def convert_SIGGRAPH(document): + " Converts ERT of Flex CRcat to InsetArgument " + if document.textclass == "acmsiggraph": + i = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_inset Flex CRcat", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 1, 3, True, False) + i = i + 1 + if i == -1: + return + + +def revert_EuropeCV(document): + " Reverts InsetArgument of Flex CRcat to TeX-code " + if document.textclass == "europecv": + i = 0 + j = 0 + k = 0 + m = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Item", i) + if i != -1: + revert_Argument_to_TeX_brace(document, i, 2, 2, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout BulletedItem", j) + if j != -1: + revert_Argument_to_TeX_brace(document, j, 2, 2, False) + j = j + 1 + if k != -1: + k = find_token(document.body, "\\begin_layout Language", k) + if k != -1: + revert_Argument_to_TeX_brace(document, k, 2, 6, False) + k = k + 1 + if m != -1: + m = find_token(document.body, "\\begin_layout LastLanguage", m) + if m != -1: + revert_Argument_to_TeX_brace(document, m, 2, 6, False) + m = m + 1 + if i == -1 and j == -1 and k == -1 and m == -1: + return + + +def convert_EuropeCV(document): + " Converts ERT of Flex CRcat to InsetArgument " + if document.textclass == "europecv": + i = 0 + j = 0 + k = 0 + m = 0 + while True: + if i != -1: + i = find_token(document.body, "\\begin_layout Item", i) + if i != -1: + convert_TeX_brace_to_Argument(document, i, 2, 2, False, False) + i = i + 1 + if j != -1: + j = find_token(document.body, "\\begin_layout BulletedItem", j) + if j != -1: + convert_TeX_brace_to_Argument(document, j, 2, 2, False, False) + j = j + 1 + if k != -1: + k = find_token(document.body, "\\begin_layout Language", k) + if k != -1: + convert_TeX_brace_to_Argument(document, k, 2, 6, False, False) + k = k + 1 + if m != -1: + m = find_token(document.body, "\\begin_layout LastLanguage", m) + if m != -1: + convert_TeX_brace_to_Argument(document, m, 2, 6, False, False) + m = m + 1 + if i == -1 and j == -1 and k == -1 and m == -1: + return + + +def revert_literate(document): + " Revert Literate document to old format " + if del_token(document.header, "noweb", 0): + document.textclass = "literate-" + document.textclass + i = 0 + while True: + i = find_token(document.body, "\\begin_layout Chunk", i) + if i == -1: + break + document.body[i] = "\\begin_layout Scrap" + i = i + 1 + + +def convert_literate(document): + " Convert Literate document to new format" + i = find_token(document.header, "\\textclass", 0) + if (i != -1) and "literate-" in document.header[i]: + document.textclass = document.header[i].replace("\\textclass literate-", "") + j = find_token(document.header, "\\begin_modules", 0) + if (j != -1): + document.header.insert(j + 1, "noweb") + else: + document.header.insert(i + 1, "\\end_modules") + document.header.insert(i + 1, "noweb") + document.header.insert(i + 1, "\\begin_modules") + i = 0 + while True: + i = find_token(document.body, "\\begin_layout Scrap", i) + if i == -1: + break + document.body[i] = "\\begin_layout Chunk" + i = i + 1 + + +def revert_itemargs(document): + " Reverts \\item arguments to TeX-code " + i = 0 + while True: + i = find_token(document.body, "\\begin_inset Argument item:", i) + if i == -1: + return + j = find_end_of_inset(document.body, i) + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: + document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 + continue + parbeg = parent[1] + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i) + endPlain = find_end_of_layout(document.body, beginPlain) + content = document.body[beginPlain + 1 : endPlain] + del document.body[i:j+1] + subst = put_cmd_in_ert("[") + content + put_cmd_in_ert("]") + document.body[parbeg + 1:parbeg + 1] = subst + i = i + 1 + + +def revert_garamondx_newtxmath(document): + " Revert native garamond newtxmath definition to LaTeX " + + i = find_token(document.header, "\\font_math", 0) + if i == -1: + return + if find_token(document.header, "\\use_non_tex_fonts false", 0) != -1: + val = get_value(document.header, "\\font_math", i) + if val == "garamondx-ntxm": + add_to_preamble(document, "\\usepackage[garamondx]{newtxmath}") + document.header[i] = "\\font_math auto" + + +def revert_garamondx(document): + " Revert native garamond font definition to LaTeX " + + if find_token(document.header, "\\use_non_tex_fonts false", 0) != -1: + i = find_token(document.header, "\\font_roman garamondx", 0) + if i != -1: + osf = False + j = find_token(document.header, "\\font_osf true", 0) + if j != -1: + osf = True + preamble = "\\usepackage" + if osf: + preamble += "[osfI]" + preamble += "{garamondx}" + add_to_preamble(document, [preamble]) + document.header[i] = "\\font_roman default" ## @@ -1194,10 +1864,18 @@ convert = [ [443, []], [444, []], [445, []], - [446, [convert_latexargs]] + [446, [convert_latexargs]], + [447, [convert_IEEEtran, convert_AASTeX, convert_AGUTeX, convert_IJMP, convert_SIGPLAN, convert_SIGGRAPH, convert_EuropeCV]], + [448, [convert_literate]], + [449, []], + [450, []] ] revert = [ + [449, [revert_garamondx, revert_garamondx_newtxmath]], + [448, [revert_itemargs]], + [447, [revert_literate]], + [446, [revert_IEEEtran, revert_AASTeX, revert_AGUTeX, revert_IJMP, revert_SIGPLAN, revert_SIGGRAPH, revert_EuropeCV]], [445, [revert_latexargs]], [444, [revert_uop]], [443, [revert_biolinum]],