Add last missing bit to insetindexmacros: file format change and lyx2lyx

The feature is now ready for primetime!
This commit is contained in:
Juergen Spitzmueller 2022-10-29 15:11:11 +02:00
parent 43365d2bbd
commit 874f559bc7
2 changed files with 118 additions and 4 deletions

View File

@ -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,117 @@ def revert_document_metadata(document):
break
document.header[i : j + 1] = []
def revert_index_macros(document):
" Revert inset index macros "
i = 0
while True:
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 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]
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
imacros = ["seealso", "see", "subindex", "subindex", "sortkey"]
see = []
seealso = []
subindex = []
subindex2 = []
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 == "see":
see = icont[1:]
elif imacro == "seealso":
seealso = icont[1:]
elif imacro == "subindex":
# subindexes 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:
xicont = document.body[xiimpl:xiimple]
xxicont = document.body[iimpl:xiimpl] + document.body[xiimple+1:iimple]
icont = xicont + put_cmd_in_ert("@") + xxicont[1:]
if len(subindex) > 0:
subindex2 = icont[1:]
else:
subindex = icont[1:]
elif imacro == "sortkey":
sortkey = icont
del document.body[iim:iime+1]
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
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(subindex2) > 0:
document.body[ple:ple] = put_cmd_in_ert("!") + subindex2
if len(subindex) > 0:
document.body[ple:ple] = put_cmd_in_ert("!") + subindex
if len(sortkey) > 0:
document.body[pl:pl+1] = document.body[pl:pl] + sortkey + put_cmd_in_ert("@")
##
# Conversion hub
#
@ -4497,10 +4609,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]],

View File

@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
#define LYX_FORMAT_LYX 609 // spitz: document metadata
#define LYX_FORMAT_TEX2LYX 609
#define LYX_FORMAT_LYX 610 // spitz: inset index macros
#define LYX_FORMAT_TEX2LYX 610
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER