X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=inline;f=lib%2Flyx2lyx%2Flyx_2_4.py;h=73826a5f59373a3e9bfc1b12b73ed82fcbd25ee6;hb=069122feba922dc53f2114522eee206809e44971;hp=7d5d7a82d44f40360fb77625e22c2dc5ec67b9ee;hpb=b3b22b0c70717d0f44dcb91f559ddc0c3239d30c;p=features.git diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py index 7d5d7a82d4..73826a5f59 100644 --- a/lib/lyx2lyx/lyx_2_4.py +++ b/lib/lyx2lyx/lyx_2_4.py @@ -4414,6 +4414,7 @@ def revert_docbook_mathml_prefix(document): return del document.header[i] + def revert_document_metadata(document): """Revert document metadata""" i = 0 @@ -4427,6 +4428,128 @@ def revert_document_metadata(document): break document.header[i : j + 1] = [] + +def revert_index_macros(document): + " Revert inset index macros " + + i = 0 + while True: + # trailing blank needed here to exclude IndexMacro insets + i = find_token(document.body, '\\begin_inset Index ', i+1) + 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 index inset at line %d" % i) + continue + pl = find_token(document.body, '\\begin_layout Plain Layout', i, j) + if pl == -1: + document.warning("Malformed LyX document: Can't find plain layout in index inset at line %d" % i) + continue + # find, store and remove inset params + pr = find_token(document.body, 'range', i, pl) + prval = get_quoted_value(document.body, "range", pr) + pagerange = "" + if prval == "start": + pagerange = "(" + elif prval == "end": + pagerange = ")" + pf = find_token(document.body, 'pageformat', i, pl) + pageformat = get_quoted_value(document.body, "pageformat", pf) + del document.body[pr:pf+1] + # Now re-find (potentially moved) inset end again, and search for subinsets + j = find_end_of_inset(document.body, i) + if j == -1: + document.warning("Malformed LyX document: Can't find end of index inset at line %d" % i) + continue + # We search for all possible subentries in turn, store their + # content and delete them + see = [] + seealso = [] + subentry = [] + subentry2 = [] + sortkey = [] + # Two subentries are allowed, thus the duplication + imacros = ["seealso", "see", "subentry", "subentry", "sortkey"] + for imacro in imacros: + iim = find_token(document.body, "\\begin_inset IndexMacro %s" % imacro, i, j) + if iim == -1: + continue + iime = find_end_of_inset(document.body, iim) + if iime == -1: + document.warning("Malformed LyX document: Can't find end of index macro inset at line %d" % i) + continue + iimpl = find_token(document.body, '\\begin_layout Plain Layout', iim, iime) + if iimpl == -1: + document.warning("Malformed LyX document: Can't find plain layout in index macro inset at line %d" % i) + continue + iimple = find_end_of_layout(document.body, iimpl) + if iimple == -1: + document.warning("Malformed LyX document: Can't find end of index macro inset plain layout at line %d" % i) + continue + icont = document.body[iimpl:iimple] + if imacro == "seealso": + seealso = icont[1:] + elif imacro == "see": + see = icont[1:] + elif imacro == "subentry": + # subentries might hace their own sortkey! + xiim = find_token(document.body, "\\begin_inset IndexMacro sortkey", iimpl, iimple) + if xiim != -1: + xiime = find_end_of_inset(document.body, xiim) + if xiime == -1: + document.warning("Malformed LyX document: Can't find end of index macro inset at line %d" % i) + else: + xiimpl = find_token(document.body, '\\begin_layout Plain Layout', xiim, xiime) + if xiimpl == -1: + document.warning("Malformed LyX document: Can't find plain layout in index macro inset at line %d" % i) + else: + xiimple = find_end_of_layout(document.body, xiimpl) + if xiimple == -1: + document.warning("Malformed LyX document: Can't find end of index macro inset plain layout at line %d" % i) + else: + # the sortkey + xicont = document.body[xiimpl+1:xiimple] + # everything before ................... or after + xxicont = document.body[iimpl+1:xiim] + document.body[xiime+1:iimple] + # construct the latex sequence + icont = xicont + put_cmd_in_ert("@") + xxicont[1:] + if len(subentry) > 0: + subentry2 = icont[1:] + else: + subentry = icont[1:] + elif imacro == "sortkey": + sortkey = icont + # Everything stored. Delete subinset. + del document.body[iim:iime+1] + # Again re-find (potentially moved) index inset end + j = find_end_of_inset(document.body, i) + if j == -1: + document.warning("Malformed LyX document: Can't find end of index inset at line %d" % i) + continue + # Now insert all stuff, starting from the inset end + pl = find_token(document.body, '\\begin_layout Plain Layout', i, j) + if pl == -1: + document.warning("Malformed LyX document: Can't find plain layout in index inset at line %d" % i) + continue + ple = find_end_of_layout(document.body, pl) + if ple == -1: + document.warning("Malformed LyX document: Can't find end of index macro inset plain layout at line %d" % i) + continue + if len(see) > 0: + document.body[ple:ple] = put_cmd_in_ert("|" + pagerange + "see{") + see + put_cmd_in_ert("}") + elif len(seealso) > 0: + document.body[ple:ple] = put_cmd_in_ert("|" + pagerange + "seealso{") + seealso + put_cmd_in_ert("}") + elif pageformat != "default": + document.body[ple:ple] = put_cmd_in_ert("|" + pagerange + pageformat) + if len(subentry2) > 0: + document.body[ple:ple] = put_cmd_in_ert("!") + subentry2 + if len(subentry) > 0: + document.body[ple:ple] = put_cmd_in_ert("!") + subentry + if len(sortkey) > 0: + document.body[pl:pl+1] = document.body[pl:pl] + sortkey + put_cmd_in_ert("@") + + ## # Conversion hub # @@ -4497,10 +4620,12 @@ convert = [ [606, [convert_koma_frontispiece]], [607, []], [608, []], - [609, []] + [609, []], + [610, []] ] -revert = [[608, [revert_document_metadata]], +revert = [[609, [revert_index_macros]], + [608, [revert_document_metadata]], [607, [revert_docbook_mathml_prefix]], [606, [revert_spellchecker_ignore]], [605, [revert_koma_frontispiece]],