[LyX/master] Update covington support in linguistics module (file format change)
Juergen Spitzmueller
spitz at lyx.org
Thu Jul 20 11:56:50 UTC 2023
commit 2841a1c06315edb7dd3a264746c093ee4c1a7c9f
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Thu Jul 20 15:09:47 2023 +0200
Update covington support in linguistics module (file format change)
---
development/FORMAT | 9 +
lib/layouts/linguistics.module | 60 +++++-
lib/lyx2lyx/lyx_2_4.py | 521 +++++++++++++++++++++++++++++++++++++++-
src/version.h | 4 +-
4 files changed, 586 insertions(+), 8 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index 48ee924..11acdfc 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,15 @@ changes happened in particular if possible. A good example would be
-----------------------
+2023-07-20 Jürgen Spitzmüller <spitz at lyx.org>
+ * Format incremented to 617: Update covington support in linguistics module:
+ - Support enviroment option of example and examples
+ - Support angular item argument of examples and subexamples (this shifts item
+ argument structure)
+ - Support new optional arguments of \digloss and \trigloss (this shifts argument
+ structure)
+ - Support \expreamble and \subexpreamble macros
+
2022-12-25 Richard Kimberly Heck <rikiheck at lyx.org>
* Format incremented to 614: New "Other" type for hyperlinks
diff --git a/lib/layouts/linguistics.module b/lib/layouts/linguistics.module
index 8bfb213..4c04255 100644
--- a/lib/layouts/linguistics.module
+++ b/lib/layouts/linguistics.module
@@ -81,6 +81,12 @@ Style Numbered_Example_(multiline)
Color textlabel1
EndFont
Requires covington
+ Argument 1
+ LabelString "Example options"
+ MenuString "Examples options|s"
+ Tooltip "Add examples options here"
+ PassThru 1
+ EndArgument
Category Linguistics
DocBookWrapperTag informalexample
DocBookWrapperAttr role='numbered'
@@ -108,6 +114,12 @@ Style Numbered_Examples_(consecutive)
EndFont
EndArgument
Argument item:1
+ LabelString "Judgment|J"
+ Tooltip "Grammaticality judgment marker"
+ LeftDelim <
+ RightDelim >
+ EndArgument
+ Argument item:2
LabelString "Custom Numbering|s"
Tooltip "Customize the numeration"
EndArgument
@@ -135,6 +147,21 @@ Style Subexample
HTMLClass SubExample
End
+InsetLayout Flex:Example_Preamble
+ LyXType custom
+ Decoration classic
+ LatexType command
+ LatexName expreamble
+ LabelString "Ex. Preamble"
+ ResetsFont true
+End
+
+InsetLayout Flex:Subexample_Preamble
+ CopyStyle Flex:Example_Preamble
+ LatexName subexpreamble
+ LabelString "Subex. Preamble"
+End
+
#
# Interlinear Glosses
@@ -164,6 +191,11 @@ InsetLayout Flex:Interlinear_Gloss_(2_Lines)
Tooltip "Add digloss options here"
EndArgument
Argument post:1
+ LabelString "Sentence Comment"
+ MenuString "Sentence Comment"
+ Tooltip "Add an optional sentence comment here"
+ EndArgument
+ Argument post:2
Decoration conglomerate
LabelString "Interlinear Gloss"
MenuString "Interlinear Gloss"
@@ -173,7 +205,12 @@ InsetLayout Flex:Interlinear_Gloss_(2_Lines)
FreeSpacing true
InsertOnNewline true
EndArgument
- Argument post:2
+ Argument post:3
+ LabelString "Gloss Comment"
+ MenuString "Gloss Comment"
+ Tooltip "Add an optional gloss comment here"
+ EndArgument
+ Argument post:4
Decoration conglomerate
LabelString "Translation"
MenuString "Gloss Translation"
@@ -210,6 +247,11 @@ InsetLayout Flex:Interlinear_Gloss_(3_Lines)
Tooltip "Add trigloss options here"
EndArgument
Argument post:1
+ LabelString "Sentence Comment"
+ MenuString "Sentence Comment"
+ Tooltip "Add an optional sentence comment here"
+ EndArgument
+ Argument post:2
Decoration conglomerate
LabelString "Interlinear Gloss (1)"
MenuString "Interlinear Gloss (Line 1)|1"
@@ -219,17 +261,27 @@ InsetLayout Flex:Interlinear_Gloss_(3_Lines)
FreeSpacing true
InsertOnNewline true
EndArgument
- Argument post:2
+ Argument post:3
+ LabelString "Gloss Comment (1)"
+ MenuString "Gloss Comment (Line 1)"
+ Tooltip "Add an optional gloss comment here"
+ EndArgument
+ Argument post:4
Decoration conglomerate
LabelString "Interlinear Gloss (2)"
MenuString "Interlinear Gloss (Line 2)|2"
- Tooltip "Add the first inter-linear gloss line here"
+ Tooltip "Add the second inter-linear gloss line here"
Mandatory true
AutoInsert true
FreeSpacing true
InsertOnNewline true
EndArgument
- Argument post:3
+ Argument post:5
+ LabelString "Gloss Comment (2)"
+ MenuString "Gloss Comment (Line 2)"
+ Tooltip "Add an optional gloss comment here"
+ EndArgument
+ Argument post:6
Decoration conglomerate
LabelString "Translation"
MenuString "Gloss Translation"
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 8c0b9c3..dd092e9 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -5007,6 +5007,521 @@ def convert_empty_macro(document):
i += 1
+def convert_cov_options(document):
+ """Update examples item argument structure"""
+
+ if "linguistics" not in document.get_module_list():
+ return
+
+ layouts = ["Numbered Examples (consecutive)", "Subexample"]
+
+ for layout in layouts:
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_layout %s" % layout, i)
+ if i == -1:
+ break
+ j = find_end_of_layout(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of example layout at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument item:1', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument item:2'
+ i += 1
+ # Shift gloss arguments
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex Interlinear Gloss (2 Lines)", 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 gloss inset at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument post:2', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:4'
+ k = find_token(document.body, '\\begin_inset Argument post:1', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:2'
+ i += 1
+
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex Interlinear Gloss (3 Lines)", 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 gloss inset at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument post:3', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:6'
+ k = find_token(document.body, '\\begin_inset Argument post:2', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:4'
+ k = find_token(document.body, '\\begin_inset Argument post:1', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:2'
+ i += 1
+
+
+def revert_linggloss2(document):
+ " Revert gloss with new args to ERT "
+
+ if not "linguistics" in document.get_module_list():
+ return
+
+ cov_req = False
+ glosses = ["\\begin_inset Flex Interlinear Gloss (2 Lines)", "\\begin_inset Flex Interlinear Gloss (3 Lines)"]
+ for glosse in glosses:
+ i = 0
+ while True:
+ i = find_token(document.body, glosse, 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 Gloss inset")
+ continue
+
+ # Check if we have new options
+ arg = find_token(document.body, "\\begin_inset Argument post:1", i, j)
+ if arg == -1:
+ arg = find_token(document.body, "\\begin_inset Argument post:3", i, j)
+ if arg == -1:
+ arg = find_token(document.body, "\\begin_inset Argument post:5", i, j)
+ if arg == -1:
+ # nothing to do
+ continue
+
+ arg = find_token(document.body, "\\begin_inset Argument 1", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ optargcontent = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ optargcontent = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:1", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg1content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 1 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg1content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:2", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg2content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 2 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg2content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:3", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg3content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 3 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg3content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:4", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg4content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 4 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg4content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:5", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg5content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 5 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg5content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ arg = find_token(document.body, "\\begin_inset Argument post:6", i, j)
+ endarg = find_end_of_inset(document.body, arg)
+ marg6content = []
+ if arg != -1:
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find arg 6 plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ marg6content = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+
+ cmd = "\\digloss"
+ if glosse == "\\begin_inset Flex Interlinear Gloss (3 Lines)":
+ cmd = "\\trigloss"
+
+ beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
+ endInset = find_end_of_inset(document.body, i)
+ endPlain = find_end_of_layout(document.body, beginPlain)
+ precontent = put_cmd_in_ert(cmd)
+ if len(optargcontent) > 0:
+ precontent += put_cmd_in_ert("[") + optargcontent + put_cmd_in_ert("]")
+ precontent += put_cmd_in_ert("{")
+
+ postcontent = put_cmd_in_ert("}")
+ if len(marg1content) > 0:
+ postcontent += put_cmd_in_ert("[") + marg1content + put_cmd_in_ert("]")
+ postcontent += put_cmd_in_ert("{") + marg2content + put_cmd_in_ert("}")
+ if len(marg3content) > 0:
+ postcontent += put_cmd_in_ert("[") + marg3content + put_cmd_in_ert("]")
+ postcontent += put_cmd_in_ert("{") + marg4content + put_cmd_in_ert("}")
+ if cmd == "\\trigloss":
+ if len(marg5content) > 0:
+ postcontent += put_cmd_in_ert("[") + marg5content + put_cmd_in_ert("]")
+ postcontent += put_cmd_in_ert("{") + marg6content + put_cmd_in_ert("}")
+
+ document.body[endPlain:endInset + 1] = postcontent
+ document.body[beginPlain + 1:beginPlain] = precontent
+ del document.body[i : beginPlain + 1]
+ if not cov_req:
+ document.append_local_layout("Requires covington")
+ cov_req = True
+ i = beginPlain
+
+
+def revert_exarg2(document):
+ " Revert linguistic examples with new arguments to ERT "
+
+ if not "linguistics" in document.get_module_list():
+ return
+
+ cov_req = False
+
+ layouts = ["Numbered Example", "Subexample"]
+
+ for layout in layouts:
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_layout %s" % layout, i+1)
+ if i == -1:
+ break
+ j = find_end_of_layout(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of example layout")
+ continue
+ consecex = document.body[i] == "\\begin_layout Numbered Examples (consecutive)"
+ subexpl = document.body[i] == "\\begin_layout Subexample"
+ singleex = document.body[i] == "\\begin_layout Numbered Examples (multiline)"
+ layouttype = "\\begin_layout Numbered Examples (multiline)"
+ if consecex:
+ layouttype = "\\begin_layout Numbered Examples (consecutive)"
+ elif subexpl:
+ layouttype = "\\begin_layout Subexample"
+ k = i
+ l = j
+ while True:
+ if singleex:
+ break
+ m = find_end_of_layout(document.body, k)
+ # check for consecutive layouts
+ k = find_token(document.body, "\\begin_layout", m)
+ if k == -1 or document.body[k] != layouttype:
+ break
+ l = find_end_of_layout(document.body, k)
+ if l == -1:
+ document.warning("Malformed LyX document: Can't find end of example layout")
+ continue
+
+ arg = find_token(document.body, "\\begin_inset Argument 1", i, l)
+ if subexpl or arg == -1:
+ iarg = find_token(document.body, "\\begin_inset Argument item:1", i, l)
+ if iarg == -1:
+ continue
+
+ if arg != -1:
+ endarg = find_end_of_inset(document.body, arg)
+ optargcontent = ""
+ argbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg, endarg)
+ if argbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ argendPlain = find_end_of_inset(document.body, argbeginPlain)
+ optargcontent = lyx2latex(document, document.body[argbeginPlain + 1 : argendPlain - 2])
+ # This is a verbatim argument
+ optargcontent = re.sub(r'textbackslash{}', r'', optargcontent)
+
+ itemarg = ""
+ iarg = find_token(document.body, "\\begin_inset Argument item:1", i, j)
+ if iarg != -1:
+ endiarg = find_end_of_inset(document.body, iarg)
+ iargcontent = ""
+ iargbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", iarg, endiarg)
+ if iargbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ iargendPlain = find_end_of_inset(document.body, iargbeginPlain)
+ itemarg = "<" + lyx2latex(document, document.body[iargbeginPlain : iargendPlain]) + ">"
+
+ iarg2 = find_token(document.body, "\\begin_inset Argument item:2", i, j)
+ if iarg2 != -1:
+ endiarg2 = find_end_of_inset(document.body, iarg2)
+ iarg2content = ""
+ iarg2beginPlain = find_token(document.body, "\\begin_layout Plain Layout", iarg2, endiarg2)
+ if iarg2beginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ iarg2endPlain = find_end_of_inset(document.body, iarg2beginPlain)
+ itemarg += "[" + lyx2latex(document, document.body[iarg2beginPlain : iarg2endPlain]) + "]"
+
+ if itemarg == "":
+ itemarg = " "
+
+ # remove Arg insets and paragraph, if it only contains this inset
+ if arg != -1:
+ if document.body[arg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, arg - 1) == endarg + 3:
+ del document.body[arg - 1 : endarg + 4]
+ else:
+ del document.body[arg : endarg + 1]
+ if iarg != -1:
+ iarg = find_token(document.body, "\\begin_inset Argument item:1", i, j)
+ if iarg == -1:
+ document.warning("Unable to re-find item:1 Argument")
+ else:
+ endiarg = find_end_of_inset(document.body, iarg)
+ if document.body[iarg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, iarg - 1) == endiarg + 3:
+ del document.body[iarg - 1 : endiarg + 4]
+ else:
+ del document.body[iarg : endiarg + 1]
+ if iarg2 != -1:
+ iarg2 = find_token(document.body, "\\begin_inset Argument item:2", i, j)
+ if iarg2 == -1:
+ document.warning("Unable to re-find item:2 Argument")
+ else:
+ endiarg2 = find_end_of_inset(document.body, iarg2)
+ if document.body[iarg2 - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, iarg2 - 1) == endiarg2 + 3:
+ del document.body[iarg2 - 1 : endiarg2 + 4]
+ else:
+ del document.body[iarg2 : endiarg2 + 1]
+
+ envname = "example"
+ if consecex:
+ envname = "examples"
+ elif subexpl:
+ envname = "subexamples"
+
+ cmd = put_cmd_in_ert("\\begin{" + envname + "}[" + optargcontent + "]")
+
+ # re-find end of layout
+ j = find_end_of_layout(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of Subexample layout")
+ continue
+ l = j
+ while True:
+ # check for consecutive layouts
+ k = find_token(document.body, "\\begin_layout", l)
+ if k == -1 or document.body[k] != layouttype:
+ break
+ if not singleex:
+ subitemarg = ""
+ m = find_end_of_layout(document.body, k)
+ iarg = find_token(document.body, "\\begin_inset Argument item:1", k, m)
+ if iarg != -1:
+ endiarg = find_end_of_inset(document.body, iarg)
+ iargcontent = ""
+ iargbeginPlain = find_token(document.body, "\\begin_layout Plain Layout", iarg, endiarg)
+ if iargbeginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ iargendPlain = find_end_of_inset(document.body, iargbeginPlain)
+ subitemarg = "<" + lyx2latex(document, document.body[iargbeginPlain : iargendPlain]) + ">"
+
+ iarg2 = find_token(document.body, "\\begin_inset Argument item:2", k, m)
+ if iarg2 != -1:
+ endiarg2 = find_end_of_inset(document.body, iarg2)
+ iarg2content = ""
+ iarg2beginPlain = find_token(document.body, "\\begin_layout Plain Layout", iarg2, endiarg2)
+ if iarg2beginPlain == -1:
+ document.warning("Malformed LyX document: Can't find optarg plain Layout")
+ continue
+ iarg2endPlain = find_end_of_inset(document.body, iarg2beginPlain)
+ subitemarg += "[" + lyx2latex(document, document.body[iarg2beginPlain : iarg2endPlain]) + "]"
+
+ if subitemarg == "":
+ subitemarg = " "
+ document.body[k : k + 1] = ["\\begin_layout Standard"] + put_cmd_in_ert("\\item" + subitemarg)
+ # Refind and remove arg insets
+ if iarg != -1:
+ iarg = find_token(document.body, "\\begin_inset Argument item:1", k, m)
+ if iarg == -1:
+ document.warning("Unable to re-find item:1 Argument")
+ else:
+ endiarg = find_end_of_inset(document.body, iarg)
+ if document.body[iarg - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, iarg - 1) == endiarg + 3:
+ del document.body[iarg - 1 : endiarg + 4]
+ else:
+ del document.body[iarg : endiarg + 1]
+ if iarg2 != -1:
+ iarg2 = find_token(document.body, "\\begin_inset Argument item:2", k, m)
+ if iarg2 == -1:
+ document.warning("Unable to re-find item:2 Argument")
+ else:
+ endiarg2 = find_end_of_inset(document.body, iarg2)
+ if document.body[iarg2 - 1] == "\\begin_layout Plain Layout" and find_end_of_layout(document.body, iarg2 - 1) == endiarg2 + 3:
+ del document.body[iarg2 - 1 : endiarg2 + 4]
+ else:
+ del document.body[iarg2 : endiarg2 + 1]
+ else:
+ document.body[k : k + 1] = ["\\begin_layout Standard"]
+ l = find_end_of_layout(document.body, k)
+ if l == -1:
+ document.warning("Malformed LyX document: Can't find end of example layout")
+ continue
+
+ endev = put_cmd_in_ert("\\end{" + envname + "}")
+
+ document.body[l : l] = ["\\end_layout", "", "\\begin_layout Standard"] + endev
+ document.body[i : i + 1] = ["\\begin_layout Standard"] + cmd \
+ + ["\\end_layout", "", "\\begin_layout Standard"] + put_cmd_in_ert("\\item" + itemarg)
+ if not cov_req:
+ document.append_local_layout("Requires covington")
+ cov_req = True
+
+
+def revert_cov_options(document):
+ """Revert examples item argument structure"""
+
+ if "linguistics" not in document.get_module_list():
+ return
+
+ layouts = ["Numbered Examples (consecutive)", "Subexample"]
+
+ for layout in layouts:
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_layout %s" % layout, i)
+ if i == -1:
+ break
+ j = find_end_of_layout(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of example layout at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument item:2', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument item:1'
+ i += 1
+ # Shift gloss arguments
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex Interlinear Gloss (2 Lines)", 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 gloss inset at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument post:2', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:1'
+ k = find_token(document.body, '\\begin_inset Argument post:4', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:2'
+ i += 1
+
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex Interlinear Gloss (3 Lines)", 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 gloss inset at line %d" % i)
+ i += 1
+ continue
+ k = find_token(document.body, '\\begin_inset Argument post:2', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:1'
+ k = find_token(document.body, '\\begin_inset Argument post:4', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:2'
+ k = find_token(document.body, '\\begin_inset Argument post:6', i, j)
+ if k != -1:
+ document.body[k] = '\\begin_inset Argument post:3'
+ i += 1
+
+
+def revert_expreambles(document):
+ """Revert covington example preamble flex insets to ERT"""
+
+ revert_flex_inset(document.body, "Example Preamble", "\\expreamble")
+ revert_flex_inset(document.body, "Subexample Preamble", "\\subexpreamble")
+
+
##
# Conversion hub
#
@@ -5084,10 +5599,12 @@ convert = [
[613, []],
[614, [convert_hyper_other]],
[615, [convert_acknowledgment,convert_ack_theorems]],
- [616, [convert_empty_macro]]
+ [616, [convert_empty_macro]],
+ [617, [convert_cov_options]]
]
-revert = [[615, [revert_empty_macro]],
+revert = [[616, [revert_expreambles,revert_exarg2,revert_linggloss2,revert_cov_options]],
+ [615, [revert_empty_macro]],
[614, [revert_ack_theorems,revert_acknowledgment]],
[613, [revert_hyper_other]],
[612, [revert_familydefault]],
diff --git a/src/version.h b/src/version.h
index c17c3d9..df53604 100644
--- a/src/version.h
+++ b/src/version.h
@@ -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 616 // forenr: empty macros
-#define LYX_FORMAT_TEX2LYX 616
+#define LYX_FORMAT_LYX 617 // spitz: linguistics module enhancements
+#define LYX_FORMAT_TEX2LYX 617
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER
More information about the lyx-cvs
mailing list