]> git.lyx.org Git - lyx.git/commitdiff
Rewrite the linguistic Glosse insets.
authorJuergen Spitzmueller <spitz@lyx.org>
Tue, 21 Apr 2015 18:33:35 +0000 (20:33 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Tue, 21 Apr 2015 18:33:35 +0000 (20:33 +0200)
This gets rid of the PassThru hack and makes the inset actually usable
for linguistists.

Fixes: #7773
File format change.

development/FORMAT
lib/layouts/linguistics.module
lib/lyx2lyx/LyX.py
lib/lyx2lyx/lyx_2_2.py
src/version.h

index ff9cd12e9e279f459801c2c8d1f70f23569f10d4..a0bf4fa3159b27cdff244d56b8b4b9d8a26c7767 100644 (file)
@@ -11,6 +11,11 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
 
 -----------------------
 
+2015-04-21 Jürgen Spitzmüller <spitz@lyx.org>
+       * Format incremented to 488: Rewrite the Glosse insets (Glosse and Tri-Glosse).
+          These insets now do not any longer use PassThru. Instead, they use an optional
+          argument which is output as the glosse translation.
+
 2015-04-20 Jürgen Spitzmüller <spitz@lyx.org>
        * Format incremented to 487: Support the forest environment of the forest package.
           Note that this inset does not escape brackets in braces, i.e. [ and ] are output
index 22da764099d682a88fc48c80f44172cb650874f4..c887e239f1c0e475ecb8205e4a7a7fe2f7540a7a 100644 (file)
@@ -65,7 +65,6 @@ End
 
 
 # glosse (2 lines) with covington.sty
-# mandatory translation must be entered verbatim!
 InsetLayout Flex:Glosse
        LyXType               custom
        LabelString           Glosse
@@ -78,24 +77,29 @@ InsetLayout Flex:Glosse
        MultiPar              true
        CustomPars            false
        ForcePlain            true
-       PassThru              true
        ParbreakIsNewline     true
        FreeSpacing           true
-       ForceLTR              true
        Requires              covington
        Preamble
+               \def\glosstr{}
                \@ifundefined{linggloss}{%
-               \newenvironment{linggloss}[1]{%
-                       \gll #1}
-               {\glend}}{}
+               \newenvironment{linggloss}[2][]{
+                       \def\glosstr{\glt #1}%
+                       \gll #2}
+               {\glosstr\glend}}{}
        EndPreamble
        InToc                 true
-       ResetsFont true
+       ResetsFont            true
+       Argument 1
+               Decoration    conglomerate
+               LabelString   "Translation"
+               MenuString    "Glosse Translation|s"
+               Tooltip       "Add a translation for the glosse"
+       EndArgument
 End
 
 
 # glosse (3 lines) with covington.sty
-# mandatory translation must be entered verbatim!
 InsetLayout Flex:Tri-Glosse
        LyXType               custom
        LabelString           Tri-Glosse
@@ -108,21 +112,28 @@ InsetLayout Flex:Tri-Glosse
        MultiPar              true
        CustomPars            false
        ForcePlain            true
-       PassThru              true
        ParbreakIsNewline     true
        FreeSpacing           true
-       ForceLTR              true
        InToc                 true
        Requires              covington
        Preamble
+               \def\glosstr{}
                \@ifundefined{lingglosss}{%
-               \newenvironment{lingglosss}[1]{%
-                       \glll #1}
-               {\glend}}{}
+               \newenvironment{lingglosss}[2][]{
+                       \def\glosstr{\glt #1}%
+                       \glll #2}
+               {\glosstr\glend}}{}
        EndPreamble
-       ResetsFont true
+       ResetsFont            true
+       Argument 1
+               Decoration    conglomerate
+               LabelString   "Translation"
+               MenuString    "Glosse Translation|s"
+               Tooltip       "Add a translation for the glosse"
+       EndArgument
 End
 
+
 # Structure trees via the forest package
 InsetLayout Flex:Structure_Tree
        LyXType               custom
@@ -190,6 +201,16 @@ InsetLayout Flex:Meaning
 End
 
 
+# A helper to group words in Glosses
+InsetLayout Flex:GroupGlossedWords
+       LyxType               charstyle
+       LabelString           Group
+       LeftDelim             {
+       RightDelim            }
+       ResetsFont            true
+End
+
+
 # Tableaux for Optimality Theory
 Float
        Type                  tableau
index 055fcbd010557e7948611a6521c30352591c901d..f5e6e4079b9270e4acccf22669d862496a3cac46 100644 (file)
@@ -85,7 +85,7 @@ format_relation = [("0_06",    [200], minor_versions("0.6" , 4)),
                    ("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
                    ("2_0", list(range(346,414)), minor_versions("2.0" , 8)),
                    ("2_1", list(range(414,475)), minor_versions("2.1" , 0)),
-                   ("2_2", list(range(475,488)), minor_versions("2.2" , 0))
+                   ("2_2", list(range(475,489)), minor_versions("2.2" , 0))
                   ]
 
 ####################################################################
index 98c077988111878d25835000e62088e231caa98f..024ce8724e532c5f2e0812481ee6b781cffcf9cd 100644 (file)
@@ -796,7 +796,6 @@ def revert_forest(document):
         beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
         endPlain = find_end_of_layout(document.body, beginPlain)
         content = lyx2latex(document, document.body[beginPlain : endPlain])
-        document.warning("content: %s" % content)
 
         add_to_preamble(document, ["\\usepackage{forest}"])
 
@@ -808,6 +807,155 @@ def revert_forest(document):
         # no need to reset i
 
 
+def revert_glossgroup(document):
+    " Reverts the GroupGlossedWords inset (Linguistics module) to TeX-code "
+
+    # Do we use the linguistics module?
+    have_mod = False
+    mods = document.get_module_list()
+    for mod in mods:
+        if mod == "linguistics":
+            have_mod = True
+            continue
+
+    if not have_mod:
+        return
+
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Flex GroupGlossedWords", 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 GroupGlossedWords inset")
+            i += 1
+            continue
+
+        beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
+        endPlain = find_end_of_layout(document.body, beginPlain)
+        content = lyx2latex(document, document.body[beginPlain : endPlain])
+        document.warning("content: %s" % content)
+
+        document.body[i:j + 1] = ["{", "", content, "", "}"]
+        # no need to reset i
+
+
+def revert_newgloss(document):
+    " Reverts the new Glosse insets (Linguistics module) to the old format "
+
+    # Do we use the linguistics module?
+    have_mod = False
+    mods = document.get_module_list()
+    for mod in mods:
+        if mod == "linguistics":
+            have_mod = True
+            continue
+
+    if not have_mod:
+        return
+
+    glosses = ("\\begin_inset Flex Glosse", "\\begin_inset Flex Tri-Glosse")
+    for glosse in glosses:
+        i = 0
+        while True:
+            i = find_token(document.body, glosse, 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 Glosse inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument 1", i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            argcontent = ""
+            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 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                argcontent = lyx2latex(document, document.body[argbeginPlain : argendPlain - 2])
+
+                document.body[j:j] = ["", "\\begin_layout Plain Layout","\\backslash", "glt ",
+                    argcontent, "\\end_layout"]
+
+                # 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]
+
+            beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
+            endPlain = find_end_of_layout(document.body, beginPlain)
+            content = lyx2latex(document, document.body[beginPlain : endPlain])
+
+            document.body[beginPlain + 1:endPlain] = [content]
+            i = beginPlain + 1
+
+
+def convert_newgloss(document):
+    " Converts Glosse insets (Linguistics module) to the new format "
+
+    # Do we use the linguistics module?
+    have_mod = False
+    mods = document.get_module_list()
+    for mod in mods:
+        if mod == "linguistics":
+            have_mod = True
+            continue
+
+    if not have_mod:
+        return
+
+    glosses = ("\\begin_inset Flex Glosse", "\\begin_inset Flex Tri-Glosse")
+    for glosse in glosses:
+        i = 0
+        while True:
+            i = find_token(document.body, glosse, 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 Glosse inset")
+                i += 1
+                continue
+
+            k = i
+            while True:
+                argcontent = []
+                beginPlain = find_token(document.body, "\\begin_layout Plain Layout", k, j)
+                if beginPlain == -1:
+                    break
+                endPlain = find_end_of_layout(document.body, beginPlain)
+                if endPlain == -1:
+                    document.warning("Malformed LyX document: Can't find end of Glosse layout")
+                    i += 1
+                    continue
+
+                glt  = find_token(document.body, "\\backslash", beginPlain, endPlain)
+                if glt != -1 and document.body[glt + 1].startswith("glt"):
+                    document.body[glt + 1] = document.body[glt + 1].lstrip("glt").lstrip()
+                    argcontent = document.body[glt + 1 : endPlain]
+                    document.body[beginPlain + 1 : endPlain] = ["\\begin_inset Argument 1", "status open", "",
+                        "\\begin_layout Plain Layout", "\\begin_inset ERT", "status open", "",
+                        "\\begin_layout Plain Layout", ""] + argcontent + ["\\end_layout", "", "\\end_inset", "",
+                        "\\end_layout", "", "\\end_inset"]
+                else:
+                    content = document.body[beginPlain + 1 : endPlain]
+                    document.body[beginPlain + 1 : endPlain] = ["\\begin_inset ERT", "status open", "",
+                        "\\begin_layout Plain Layout"] + content + ["\\end_layout", "", "\\end_inset"]
+
+                endPlain = find_end_of_layout(document.body, beginPlain)
+                k = endPlain
+                j = find_end_of_inset(document.body, i)
+
+            i = endPlain + 1
+
+
 ##
 # Conversion hub
 #
@@ -829,10 +977,12 @@ convert = [
            [484, []],
            [485, []],
            [486, []],
-           [487, []]
+           [487, []],
+           [488, [convert_newgloss]]
           ]
 
 revert =  [
+           [486, [revert_newgloss, revert_glossgroup]],
            [486, [revert_forest]],
            [485, [revert_ex_itemargs]],
            [484, [revert_sigplan_doi]],
index 31466b46377c7a2a26c064b82a7a49b2cafcce62..e52d96babe2bbf5e693c5b4257d1e346f14eb752 100644 (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 487 // spitz: support for forest environment
-#define LYX_FORMAT_TEX2LYX 487
+#define LYX_FORMAT_LYX 488 // spitz: rework the Glosse insets
+#define LYX_FORMAT_TEX2LYX 488
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER