Rework linguistic gloss support

This now uses the new and enhanced \digloss ad \trigloss macros of
convington 2.0 rather than the deficient self-baked ones.

File format change.
This commit is contained in:
Juergen Spitzmueller 2019-06-04 11:01:19 +02:00
parent 550f46a188
commit e2f81b3a84
6 changed files with 954 additions and 62 deletions

View File

@ -7,7 +7,12 @@ changes happened in particular if possible. A good example would be
-----------------------
2019-04-16 Günter Milde <milde@lyx.org>
2019-06-04 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 577: Rework linguistic gloss support.
This now uses the covington 2.0 gloss macros (\digloss, \trigloss)
rather than self-baked ones.
2019-06-03 Günter Milde <milde@lyx.org>
* Format incremented to 576:
Support for the document languages azerbaijani, bengali,
churchslavonic, and oldrussian.

View File

@ -1,5 +1,5 @@
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 577
\begin_document
\begin_header
\save_transient_properties true
@ -39,7 +39,7 @@ linguistics
\language english
\language_package default
\inputencoding utf8
\fontencoding global
\fontencoding auto
\font_roman "lmodern" "FreeSerif"
\font_sans "default" "FreeSans"
\font_typewriter "default" "FreeMono"
@ -57,6 +57,8 @@ linguistics
\output_sync 0
\bibtex_command default
\index_command default
\float_placement class
\float_alignment class
\paperfontsize default
\spacing single
\use_hyperref true
@ -91,6 +93,7 @@ linguistics
\justification true
\use_refstyle 0
\use_minted 0
\use_lineno 0
\index Index
\shortcut idx
\color #008000
@ -106,11 +109,13 @@ linguistics
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\tablestyle default
\tracking_changes true
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\author -712698321 "Jürgen Spitzmüller"
\end_header
\begin_body
@ -218,6 +223,12 @@ literal "true"
\end_inset
: This is the base package used for numbered examples and glosses.
\change_inserted -712698321 1559635690
Note that at least version 2.0 of the covington package is required to use
all features.
\change_unchanged
\end_layout
\begin_deeper
@ -234,6 +245,8 @@ arg "covington"
\end_deeper
\begin_layout Enumerate
\change_deleted -712698321 1559635693
\emph on
enumitem.sty
\emph default
@ -263,6 +276,8 @@ description
\begin_deeper
\begin_layout Itemize
\change_deleted -712698321 1559635693
Installed on your system:
\begin_inset Info
type "package"
@ -270,6 +285,8 @@ arg "enumitem"
\end_inset
.
\change_unchanged
\end_layout
\end_deeper
@ -290,7 +307,11 @@ literal "true"
\emph on
Meaning
\emph default
character style.
character style
\change_inserted -712698321 1559635744
and for glosses
\change_unchanged
.
The package provides context sensitive quotation marks, depending on the
language in use.
\end_layout
@ -468,44 +489,298 @@ The Linguistics module provides two kinds of glosses, which can be inserted
via
\family sans
Insert\SpecialChar menuseparator
Custom Insets
Custom Inset
\change_deleted -712698321 1559635796
s
\change_unchanged
\family default
: The standard
:
\change_deleted -712698321 1559635812
The standard
\emph on
Glosse
\change_inserted -712698321 1559635861
Interlinear Gloss (2
\begin_inset space ~
\end_inset
Lines)
\change_unchanged
\emph default
provides a gloss that consists of two lines (a gloss pair) and a translation,
the
provides a gloss that consists of two lines (a gloss pair
\change_inserted -712698321 1559635998
consisting of the original language representation and and interlinear,
i.
\begin_inset space \thinspace{}
\end_inset
e.
word-to-word translation
\change_unchanged
)
\change_deleted -712698321 1559636571
and a
\change_inserted -712698321 1559636571
plus
\change_unchanged
\change_inserted -712698321 1559635981
free
\change_unchanged
translation, the
\change_deleted -712698321 1559635825
\emph on
Tri-Glosse
\change_inserted -712698321 1559635858
Interlinear Gloss (3
\begin_inset space ~
\end_inset
Lines)
\change_unchanged
\emph default
insets consists of three lines and a translation (the third line is usually
needed to give morphological or phonological information next to the gloss
pair).
insets consists of three lines
\change_deleted -712698321 1559636589
and a
\change_inserted -712698321 1559636589
plus
\change_unchanged
translation (the third line is usually needed to give morphological or
phonological information next to the gloss pair).
Each translation line might span multiple lines in the output, i.
\begin_inset space \thinspace{}
\end_inset
e., the paragraphs are automatically broken if they exceed the text width.
The translation line is inserted by means of
\change_inserted -712698321 1559636240
The original language representation (first line in the gloss) is input
in the Gloss inset directly, the other information in specific sub-insets
(
\family sans
Interlinear Gloss
\family default
or with the 3-line-gloss
\family sans
Interlinear Gloss (Line 1)
\family default
and
\family sans
Interlinear Gloss (Line 2)
\family default
, respectively, and
\family sans
Gloss Translation
\family default
).
\SpecialChar LyX
automatically inserts these sub-insets if you insert a new gloss.
\change_unchanged
The
\change_inserted -712698321 1559636247
y
\change_unchanged
\change_inserted -712698321 1559636252
can also be
\change_deleted -712698321 1559636256
translation line is
\change_unchanged
inserted
\change_inserted -712698321 1559636649
manually
\change_unchanged
by means of
\family sans
Insert\SpecialChar menuseparator
Glosse Translation
Gloss
\change_deleted -712698321 1559635897
e
\change_unchanged
Translation
\change_inserted -712698321 1559636277
\family default
and
\family sans
Insert\SpecialChar menuseparator
Interlinear Gloss
\change_unchanged
\family default
.
It does not matter where you insert the translation, it is always printed
as the last line.
It does not matter where you insert the
\change_inserted -712698321 1559636292
se sub-insets
\change_deleted -712698321 1559636298
translation
\change_unchanged
,
\change_deleted -712698321 1559636300
it is
\change_inserted -712698321 1559636302
they are
\change_unchanged
always printed
\change_deleted -712698321 1559636305
as the last line
\change_inserted -712698321 1559636308
in the right order
\change_unchanged
.
\change_inserted -712698321 1559636755
Finally, you can also insert gloss options via
\family sans
Insert\SpecialChar menuseparator
Gloss Options
\family default
.
These options let you customize the line appearance, add example numbers
or preceding text.
Please refer to the
\emph on
covington
\emph default
manual
\begin_inset CommandInset citation
LatexCommand cite
key "covington"
literal "false"
\end_inset
for details.
\begin_inset Foot
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559636976
Note that the gloss support has been completely rewritten for \SpecialChar LyX
2.4.
It now uses the new and enhanced
\emph on
covington
\emph default
(2.0) gloss macros.
Due to the major changes, old glosses cannot be converted to the new style.
Instead, the old insets are imported (and saved in the document as a
\family sans
Local Layout
\family default
).
Likewise, new gloss insets are converted to \SpecialChar TeX
code if you export to a previous
\SpecialChar LyX
version.
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
Here is a simple example for a
\change_inserted -712698321 1559636502
\emph on
Glosse
two-line
\change_unchanged
Gloss
\change_deleted -712698321 1559636506
e
\change_unchanged
\emph default
:
\change_inserted -712698321 1559637042
\end_layout
\begin_layout Standard
\change_inserted -712698321 1559637046
\begin_inset Flex Interlinear Gloss (2 Lines)
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637057
C'est un exemple simple
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637046
\begin_inset Argument post:1
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637065
\begin_inset Flex GroupGlossedWords
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637065
This is
\end_layout
\end_inset
an example simple
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637046
\begin_inset Argument post:2
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637069
This is a simple example
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
\change_deleted -712698321 1559637072
\begin_inset Flex Glosse
status open
@ -549,6 +824,8 @@ This is a simple example
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
@ -589,14 +866,122 @@ status open
\end_layout
\begin_layout Standard
Here is a three-line gloss (
Here is a three-line gloss
\change_deleted -712698321 1559637102
(
\emph on
Tri-Glosse
\emph default
); the procedure is the same:
)
\change_unchanged
; the procedure is the same:
\change_inserted -712698321 1559637107
\end_layout
\begin_layout Standard
\change_inserted -712698321 1559637110
\begin_inset Flex Interlinear Gloss (3 Lines)
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637135
C'est un exemple simple
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637110
\begin_inset Argument post:1
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637118
\begin_inset Flex GroupGlossedWords
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637118
Das ist
\end_layout
\end_inset
ein Beispiel einfach
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637111
\begin_inset Argument post:2
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637125
\begin_inset Flex GroupGlossedWords
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637125
This is
\end_layout
\end_inset
an example simple
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637111
\begin_inset Argument post:3
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637130
This is a simple example
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
\change_deleted -712698321 1559637137
\begin_inset Flex Tri-Glosse
status open
@ -653,15 +1038,109 @@ This is a simple example
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
\noindent
If you want to have numbered glosses, simply insert the gloss inset to a
numbered examples paragraph, as follows:
If you want to have numbered glosses,
\change_inserted -712698321 1559637163
either
\change_deleted -712698321 1559637165
simply
\change_unchanged
insert the gloss inset to a numbered examples paragraph, as follows:
\end_layout
\begin_layout Numbered Examples (consecutive)
\change_inserted -712698321 1559637185
\begin_inset Flex Interlinear Gloss (3 Lines)
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637191
Mein Luftkissenfahrzeug ist voller Aale
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637185
\begin_inset Argument post:1
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637197
My skeertuig is vol palings
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637185
\begin_inset Argument post:2
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637201
My hovercraft is
\begin_inset Flex GroupGlossedWords
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637201
full of
\end_layout
\end_inset
eels
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637185
\begin_inset Argument post:3
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637206
Do you have matches?
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\end_inset
\change_deleted -712698321 1559637208
\begin_inset Flex Tri-Glosse
status open
@ -710,6 +1189,119 @@ Do you have matches?
\end_inset
\change_inserted -712698321 1559637228
\end_layout
\begin_layout Standard
\change_inserted -712698321 1559637243
or use the
\emph on
ex
\emph default
gloss option:
\end_layout
\begin_layout Standard
\change_inserted -712698321 1559637243
\begin_inset Flex Interlinear Gloss (3 Lines)
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637251
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637252
ex
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
Mein Luftkissenfahrzeug ist voller Aale
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
\begin_inset Argument post:1
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
My skeertuig is vol palings
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
\begin_inset Argument post:2
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
My hovercraft is
\begin_inset Flex GroupGlossedWords
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
full of
\end_layout
\end_inset
eels
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
\begin_inset Argument post:3
status open
\begin_layout Plain Layout
\change_inserted -712698321 1559637243
Do you have matches?
\end_layout
\end_inset
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Subsection*
@ -721,14 +1313,60 @@ Avoiding Page Breaks within Glosses
\end_layout
\begin_layout Standard
Page breaks might occur within glosses, which is not desirable.
A workaround is to wrap glosses into boxes (via
\change_inserted -712698321 1559637546
By default,
\change_deleted -712698321 1559637546
P
\change_inserted -712698321 1559637547
p
\change_unchanged
age breaks might occur within glosses, which is not desirable.
\change_inserted -712698321 1559637701
You can avoid most of them by entering
\emph on
noglossbreaks
\emph default
to
\family sans
Document\SpecialChar menuseparator
Settings\SpecialChar ldots
\SpecialChar menuseparator
Document Class\SpecialChar menuseparator
Class Options\SpecialChar menuseparator
Custom
\family default
.
If page breaks still occur, you can
\change_deleted -712698321 1559637705
A workaround is to
\change_unchanged
wrap
\change_inserted -712698321 1559637709
the whole
\change_unchanged
gloss
\change_deleted -712698321 1559637710
es
\change_unchanged
into
\change_inserted -712698321 1559637714
a
\change_unchanged
box
\change_deleted -712698321 1559637716
es
\change_unchanged
(via
\family sans
Insert\SpecialChar menuseparator
Box\SpecialChar menuseparator
Frameless
\family default
).
\change_deleted -712698321 1559637727
If you want to automate this for all glosses, you can copy the following
code to
\family sans
@ -740,6 +1378,8 @@ LaTeX Preamble
\end_layout
\begin_layout Quote
\change_deleted -712698321 1559637727
\begin_inset listings
lstparams "language={[LaTeX]TeX},basicstyle={\footnotesize\ttfamily}"
inline false
@ -808,6 +1448,8 @@ end{minipage}}
\end_layout
\begin_layout Quote
\change_deleted -712698321 1559637727
\begin_inset listings
lstparams "language={[LaTeX]TeX},basicstyle={\footnotesize\ttfamily}"
inline false
@ -876,6 +1518,8 @@ end{minipage}}
\end_layout
\begin_layout Standard
\change_deleted -712698321 1559637727
You might have to adapt the minipage width (
\family typewriter
.7
@ -883,6 +1527,8 @@ You might have to adapt the minipage width (
textwidth
\family default
in the example code) to fit the glosses to your actual page width.
\change_unchanged
\end_layout
\begin_layout Subsubsection*
@ -910,7 +1556,11 @@ footnotetext{Actual footnote ...}
\family default
, also in TeX mode, right behind the
\emph on
Glosse
Gloss
\change_deleted -712698321 1559637777
e
\change_unchanged
\emph default
inset.
If you need several footnotes, just insert multiple of these constructs.
@ -1166,6 +1816,7 @@ Floats
\begin_layout Standard
\begin_inset Float tableau
placement h
alignment document
wide false
sideways false
status open

View File

@ -1,4 +1,4 @@
#\DeclareLyXModule[covington.sty,enumitem.sty,forest.sty]{Linguistics}
#\DeclareLyXModule[covington.sty,forest.sty]{Linguistics}
#\DeclareCategory{Academic Field Specifics}
#DescriptionBegin
#Defines some special environments useful for linguistics (numbered examples,
@ -93,11 +93,11 @@ End
# glosse (2 lines) with covington.sty
InsetLayout Flex:Glosse
InsetLayout Flex:Interlinear_Gloss_(2_Lines)
LyXType custom
LabelString Glosse
LatexType environment
LatexName linggloss
LabelString Gloss
LatexType command
LatexName digloss
Decoration minimalistic
LabelFont
Size Small
@ -105,34 +105,45 @@ InsetLayout Flex:Glosse
MultiPar true
CustomPars false
ForcePlain true
ParbreakIsNewline true
ParbreakIgnored true
FreeSpacing true
Requires covington
Preamble
\def\glosstr{}
\@ifundefined{linggloss}{%
\newenvironment{linggloss}[2][]{
\def\glosstr{\glt #1}%
\gll #2}
{\glosstr\glend}}{}
EndPreamble
Requires covington,csquotes
InToc true
ResetsFont true
Argument 1
LabelString "Gloss options"
MenuString "Gloss Options|s"
Tooltip "Add digloss options here"
EndArgument
Argument post:1
Decoration conglomerate
LabelString "Interlinear Gloss"
MenuString "Interlinear Gloss"
Tooltip "Add the inter-linear gloss here"
AutoInsert true
Mandatory true
FreeSpacing true
InsertOnNewline true
EndArgument
Argument post:2
Decoration conglomerate
LabelString "Translation"
MenuString "Glosse Translation|s"
Tooltip "Add a translation for the glosse"
MenuString "Gloss Translation"
Tooltip "Add a free translation for the gloss"
AutoInsert true
Mandatory true
FreeSpacing true
InsertOnNewline true
EndArgument
End
# glosse (3 lines) with covington.sty
InsetLayout Flex:Tri-Glosse
InsetLayout Flex:Interlinear_Gloss_(3_Lines)
LyXType custom
LabelString Tri-Glosse
LatexType environment
LatexName lingglosss
LabelString Tri-Gloss
LatexType command
LatexName trigloss
Decoration minimalistic
LabelFont
Size Small
@ -140,24 +151,44 @@ InsetLayout Flex:Tri-Glosse
MultiPar true
CustomPars false
ForcePlain true
ParbreakIsNewline true
ParbreakIgnored true
FreeSpacing true
InToc true
Requires covington
Preamble
\def\glosstr{}
\@ifundefined{lingglosss}{%
\newenvironment{lingglosss}[2][]{
\def\glosstr{\glt #1}%
\glll #2}
{\glosstr\glend}}{}
EndPreamble
Requires covington,csquotes
ResetsFont true
Argument 1
LabelString "Gloss options"
MenuString "Gloss Options|s"
Tooltip "Add trigloss options here"
EndArgument
Argument post:1
Decoration conglomerate
LabelString "Interlinear Gloss (1)"
MenuString "Interlinear Gloss (Line 1)|1"
Tooltip "Add the first inter-linear gloss line here"
Mandatory true
AutoInsert true
FreeSpacing true
InsertOnNewline true
EndArgument
Argument post:2
Decoration conglomerate
LabelString "Interlinear Gloss (2)"
MenuString "Interlinear Gloss (Line 2)|2"
Tooltip "Add the first inter-linear gloss line here"
Mandatory true
AutoInsert true
FreeSpacing true
InsertOnNewline true
EndArgument
Argument post:3
Decoration conglomerate
LabelString "Translation"
MenuString "Glosse Translation|s"
MenuString "Gloss Translation"
Tooltip "Add a translation for the glosse"
Mandatory true
AutoInsert true
InsertOnNewline true
EndArgument
End

View File

@ -27,11 +27,11 @@ from datetime import (datetime, date, time)
# Uncomment only what you need to import, please.
from parser_tools import (count_pars_in_inset, del_token, find_end_of_inset,
find_end_of_layout, find_token, find_re, get_bool_value,
find_end_of_layout, find_token, find_token_backwards, find_re, get_bool_value,
get_containing_layout, get_option_value, get_value, get_quoted_value)
# del_value, del_complete_lines,
# find_complete_lines, find_end_of,
# find_re, find_substring, find_token_backwards,
# find_re, find_substring,
# get_containing_inset,
# is_in_inset, set_bool_value
# find_tokens, find_token_exact, check_token
@ -1751,6 +1751,206 @@ def revert_new_languages(document):
revert_language(document, "korean", "", "korean")
gloss_inset_def = [
r'### Inserted by lyx2lyx (deprecated ling glosses) ###',
r'InsetLayout Flex:Glosse',
r' LyXType custom',
r' LabelString "Gloss (old version)"',
r' MenuString "Gloss (old version)"',
r' LatexType environment',
r' LatexName linggloss',
r' Decoration minimalistic',
r' LabelFont',
r' Size Small',
r' EndFont',
r' MultiPar true',
r' CustomPars false',
r' ForcePlain true',
r' ParbreakIsNewline true',
r' FreeSpacing true',
r' Requires covington',
r' Preamble',
r' \def\glosstr{}',
r' \@ifundefined{linggloss}{%',
r' \newenvironment{linggloss}[2][]{',
r' \def\glosstr{\glt #1}%',
r' \gll #2}',
r' {\glosstr\glend}}{}',
r' EndPreamble',
r' InToc true',
r' ResetsFont true',
r' Argument 1',
r' Decoration conglomerate',
r' LabelString "Translation"',
r' MenuString "Glosse Translation|s"',
r' Tooltip "Add a translation for the glosse"',
r' EndArgument',
r'End'
]
glosss_inset_def = [
r'### Inserted by lyx2lyx (deprecated ling glosses) ###',
r'InsetLayout Flex:Tri-Glosse',
r' LyXType custom',
r' LabelString "Tri-Gloss (old version)"',
r' MenuString "Tri-Gloss (old version)"',
r' LatexType environment',
r' LatexName lingglosss',
r' Decoration minimalistic',
r' LabelFont',
r' Size Small',
r' EndFont',
r' MultiPar true',
r' CustomPars false',
r' ForcePlain true',
r' ParbreakIsNewline true',
r' FreeSpacing true',
r' InToc true',
r' Requires covington',
r' Preamble',
r' \def\glosstr{}',
r' \@ifundefined{lingglosss}{%',
r' \newenvironment{lingglosss}[2][]{',
r' \def\glosstr{\glt #1}%',
r' \glll #2}',
r' {\glosstr\glend}}{}',
r' EndPreamble',
r' ResetsFont true',
r' Argument 1',
r' Decoration conglomerate',
r' LabelString "Translation"',
r' MenuString "Glosse Translation|s"',
r' Tooltip "Add a translation for the glosse"',
r' EndArgument',
r'End'
]
def convert_linggloss(document):
" Move old ling glosses to local layout "
if find_token(document.body, '\\begin_inset Flex Glosse', 0) != -1:
document.append_local_layout(gloss_inset_def)
if find_token(document.body, '\\begin_inset Flex Tri-Glosse', 0) != -1:
document.append_local_layout(glosss_inset_def)
def revert_linggloss(document):
" Revert to old ling gloss definitions "
document.del_local_layout(gloss_inset_def)
document.del_local_layout(glosss_inset_def)
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)
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")
i += 1
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")
i += 1
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")
i += 1
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")
i += 1
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")
i += 1
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]
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_token_backwards(document.body, "\\end_layout", endInset)
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("}{") + marg1content + put_cmd_in_ert("}{") + marg2content
if cmd == "\\trigloss":
postcontent += put_cmd_in_ert("}{") + marg3content
postcontent += 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 + 1
##
# Conversion hub
@ -1790,9 +1990,11 @@ convert = [
[574, [convert_ruby_module, convert_utf8_japanese]],
[575, [convert_lineno]],
[576, []],
[577, [convert_linggloss]]
]
revert = [[575, [revert_new_languages]],
revert = [[576, [revert_linggloss]],
[575, [revert_new_languages]],
[574, [revert_lineno]],
[573, [revert_ruby_module, revert_utf8_japanese]],
[572, [revert_inputencoding_namechange]],

View File

@ -35,6 +35,9 @@ Format LaTeX feature LyX feature
453 automatic stmaryrd loading \use_package stmaryrd
457 automatic stackrel loading \use_package stackrel
575 numbering of lines (lineno) \use_lineno, \lineno_options
577 new covington gloss macros
\digloss[opt]{one}{two}{three} \begin_inset Flex Interlinear Gloss (2 Lines) (Argument 1, Argument post:1, Argument:post 2)
\trigloss[opt]{one}{two}{three} \begin_inset Flex Interlinear Gloss (3 Lines) (Argument 1, Argument post:1, Argument:post 2, Argument:post 3)

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 576 // ps: new languages
#define LYX_FORMAT_TEX2LYX 576
#define LYX_FORMAT_LYX 577 // spitz: new ling glosses
#define LYX_FORMAT_TEX2LYX 577
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER