commit 94654b3586a18f83e5e0c6de12be9efc8c84e0f8
Author: Juergen Spitzmueller <[email protected]>
Date:   Sun Jun 23 12:59:56 2019 +0200

    Linguistics: add support for Discourse Representation Structures
    
    File format change
---
 development/FORMAT                   |    4 +
 lib/chkconfig.ltx                    |    2 +
 lib/doc/LaTeXConfig.lyx              |   97 ++++-
 lib/examples/Modules/Linguistics.lyx |  878 +++++++++++++++++++++++++++++++++-
 lib/layouts/linguistics.module       |  178 +++++++-
 lib/lyx2lyx/lyx_2_4.py               |  219 +++++++++-
 src/LaTeXFeatures.cpp                |    4 +-
 src/tex2lyx/TODO.txt                 |   15 +-
 src/version.h                        |    4 +-
 9 files changed, 1387 insertions(+), 14 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index 084faaf..cd66ae7 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example 
would be
 
 -----------------------
 
+2019-06-23  Jürgen Spitzmüller <[email protected]>
+       * Format incremented to 578: Add support for Discourse Representation 
Structures
+          in the Linguistics module (using drs package).
+
 2019-06-04  Jürgen Spitzmüller <[email protected]>
        * Format incremented to 577: Rework linguistic gloss support.
           This now uses the covington 2.0 gloss macros (\digloss, \trigloss)
diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx
index dbdb7ed..970b26b 100644
--- a/lib/chkconfig.ltx
+++ b/lib/chkconfig.ltx
@@ -305,6 +305,7 @@
 \TestPackage{covington}
 \TestPackage{cprotect}
 \TestPackage{csquotes}
+\TestPackage{drs}
 \TestPackage[koi8-r.def]{cyrillic}
 \TestPackage{dvipost}
 \TestPackage{endnotes}
@@ -363,6 +364,7 @@
 \TestPackage{pdfcomment}
 \TestPackage{pdfpages}
 \TestPackage{pgf} % required by tcolorbox
+\TestPackage{pict2e}
 \TestPackage{prettyref}
 \TestPackage{preview}
 \TestPackage{refstyle}
diff --git a/lib/doc/LaTeXConfig.lyx b/lib/doc/LaTeXConfig.lyx
index af70dd9..8ad9a5b 100644
--- a/lib/doc/LaTeXConfig.lyx
+++ b/lib/doc/LaTeXConfig.lyx
@@ -1,5 +1,5 @@
 #LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 566
+\lyxformat 578
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -53,6 +53,7 @@
 \justification true
 \use_refstyle 0
 \use_minted 0
+\use_lineno 0
 \index Index
 \shortcut idx
 \color #008000
@@ -68,6 +69,7 @@
 \papercolumns 1
 \papersides 1
 \paperpagestyle plain
+\tablestyle default
 \tracking_changes true
 \output_changes false
 \html_math_output 0
@@ -76,6 +78,7 @@
 \html_latex_start <span class='latex'>
 \html_latex_end </span>
 \author -1402925745 "Günter Milde"
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -6477,6 +6480,50 @@ csquotes
  provides context-sensitive quotation marks that adapt to the conventions
  of the actual document language.
  It is used by the Linguistics module for the character style Meaning.
+\change_inserted -712698321 1561287288
+
+\end_layout
+
+\begin_layout Subsubsection
+
+\change_inserted -712698321 1561287293
+drs
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287288
+Found: 
+\begin_inset Info
+type  "package"
+arg   "drs"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287316
+CTAN: 
+\family typewriter
+macros/latex/contrib/drs/
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287342
+Notes: The package 
+\family sans
+drs
+\family default
+ provides some commands for 
+\emph on
+Discourse Representation Structures
+\emph default
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsubsection
@@ -6538,6 +6585,54 @@ Notes: The package
 forest
 \family default
  provides support for generating linguistic structure trees.
+\change_inserted -712698321 1561287358
+
+\end_layout
+
+\begin_layout Subsubsection
+
+\change_inserted -712698321 1561287365
+pict2e
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287358
+Found: 
+\begin_inset Info
+type  "package"
+arg   "pict2e"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287390
+CTAN: 
+\family typewriter
+macros/latex/contrib/
+\family default
+pict2e
+\family typewriter
+/
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1561287426
+Notes: The package 
+\family sans
+pict2e
+\family default
+ is used for 
+\emph on
+Duplex Condition DRS
+\emph default
+es.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection
diff --git a/lib/examples/Modules/Linguistics.lyx 
b/lib/examples/Modules/Linguistics.lyx
index 063b0ae..ec211c3 100644
--- a/lib/examples/Modules/Linguistics.lyx
+++ b/lib/examples/Modules/Linguistics.lyx
@@ -154,8 +154,11 @@ This paper describes some features that \SpecialChar LyX
 \change_inserted -712698321 1559649291
 interlinear 
 \change_unchanged
-glosses, OT tableaux, semantic markup, structure trees, and phonetic symbols
- (IPA).
+glosses, OT tableaux, semantic markup, structure trees, 
+\change_inserted -712698321 1561275938
+Discourse Representation Structures, 
+\change_unchanged
+and phonetic symbols (IPA).
 \end_layout
 
 \begin_layout Section
@@ -262,6 +265,8 @@ arg   "covington"
 \end_inset
 
 .
+\change_inserted -712698321 1561275950
+
 \end_layout
 
 \end_deeper
@@ -347,6 +352,48 @@ arg   "csquotes"
 \end_inset
 
 .
+\change_inserted -712698321 1561276155
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561276156
+
+\emph on
+drs.sty
+\emph default
+ 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "drs"
+literal "true"
+
+\end_inset
+
+: Needed for 
+\emph on
+Discourse Representation Structures
+\emph default
+.
+ Note that at least version 2.3 of the covington package is required if you
+ use DRS with covington features.
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+
+\change_inserted -712698321 1561276156
+Installed on your system: 
+\begin_inset Info
+type  "package"
+arg   "drs"
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \end_deeper
@@ -405,6 +452,46 @@ arg   "forest"
 \end_inset
 
 .
+\change_inserted -712698321 1561276162
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561276195
+
+\emph on
+pict2e.sty
+\emph default
+ 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "pict2e"
+literal "true"
+
+\end_inset
+
+: Needed for 
+\emph on
+Duplex Condition DRS
+\emph default
+es.
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+
+\change_inserted -712698321 1561276163
+Installed on your system: 
+\begin_inset Info
+type  "package"
+arg   "pict2e"
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \end_deeper
@@ -2675,6 +2762,727 @@ literal "true"
 \end_layout
 
 \begin_layout Section
+
+\change_inserted -712698321 1561276366
+Discourse Representation Structures
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561276535
+The linguistics module provides some insets to draw 
+\emph on
+Discourse Representation Structures
+\emph default
+ (DRSes) in the box notation introduced in 
+\noun on
+Hans Kamp
+\noun default
+'s 
+\emph on
+Discourse Representation Theory
+\emph default
+.
+ These insets can be found in 
+\family sans
+Insert\SpecialChar menuseparator
+Custom Insets
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561282371
+A simple DRS is produced by 
+\family sans
+Discourse Representation Structure
+\family default
+.
+ A DRS consists of the 
+\emph on
+conditions
+\emph default
+, which have to be inserted into the inset directly and the (possibly empty)
+ 
+\emph on
+referents
+\emph default
+ (or 
+\emph on
+universe
+\emph default
+ in DRTese), which have to be input in the (automatically inserted) 
+\emph on
+Referents
+\emph default
+ sub-inset.
+\begin_inset Foot
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561276845
+If it is not inserted, you can also insert it via 
+\family sans
+Insert\SpecialChar menuseparator
+DRS Referents
+\family default
+.
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ Line breaks in conditions need to be done via 
+\begin_inset Info
+type  "shortcut"
+arg   "newline-insert newline"
+\end_inset
+
+.
+ Here is a simple example:
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561277426
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Flex DRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561276618
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561276576
+x
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561277217
+donkey(x)
+\begin_inset Newline newline
+\end_inset
+
+green(x)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561278779
+\begin_inset VSpace defskip
+\end_inset
+
+DRSes get some extra spacing for better positioning on the page.
+ The 
+\family sans
+unspaced
+\family default
+ variant comes without this extra spacing.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561282534
+In addition to this simple DRS, the following conditional DRSes are provided
+ (mainly for nesting into simple DRSes):
+\end_layout
+
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561282617
+The 
+\family sans
+If-Then DRS
+\family default
+ represents a conditional (implicational) sentence constructions of the
+ form 
+\emph on
+if S
+\begin_inset script subscript
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279387
+
+\emph off
+1
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ then S
+\emph default
+
+\begin_inset script subscript
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279395
+2
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+:
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1561279897
+\begin_inset Flex IfThen-DRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279544
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280450
+x
+\begin_inset space ~
+\end_inset
+
+y
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280496
+John(x)
+\begin_inset Newline newline
+\end_inset
+
+donkey(y)
+\begin_inset Newline newline
+\end_inset
+
+own(x,y)
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279603
+\begin_inset Argument post:1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279599
+z
+\begin_inset space ~
+\end_inset
+
+w
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279579
+\begin_inset Argument post:2
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280579
+z = x
+\begin_inset Newline newline
+\end_inset
+
+w = y
+\begin_inset Newline newline
+\end_inset
+
+feed(z,w)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561282668
+The 
+\family sans
+Conditional DRS
+\family default
+ is a more general case where you can specify an arbitrary condition (rather
+ than using the implicational condition).
+ You can insert any symbol in the condition sub-inset:
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1561281161
+\begin_inset Flex Cond-DRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280361
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280351
+x
+\begin_inset space ~
+\end_inset
+
+y
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280787
+John(x)
+\begin_inset Newline newline
+\end_inset
+
+donkey(y)
+\begin_inset Newline newline
+\end_inset
+
+own(x,y)
+\change_unchanged
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279982
+\begin_inset Argument post:1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280653
+\begin_inset Formula $\wedge\!\,$
+\end_inset
+
+
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279982
+\begin_inset Argument post:2
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280702
+z
+\begin_inset space ~
+\end_inset
+
+w
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561279982
+\begin_inset Argument post:3
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561280703
+z = x
+\begin_inset Newline newline
+\end_inset
+
+w = y
+\begin_inset Newline newline
+\end_inset
+
+love(w,z)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561281199
+The 
+\family sans
+Duplex Condition DRS
+\family default
+ can be used to insert duplex conditions:
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1561281613
+\begin_inset Flex QDRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281297
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281237
+x
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281305
+x 
+\begin_inset Formula $\in$
+\end_inset
+
+ X
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281209
+\begin_inset Argument post:1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281317
+every
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281209
+\begin_inset Argument post:2
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281320
+x
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281209
+\begin_inset Argument post:3
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281327
+y
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281209
+\begin_inset Argument post:4
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561282714
+secretary(y)
+\begin_inset Newline newline
+\end_inset
+
+hire(x,y)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\change_inserted -712698321 1561281636
+The 
+\family sans
+Negated DRS
+\family default
+ adds a DRS preceded by a negation symbol:
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1561281719
+\begin_inset Flex NegDRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281667
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281667
+x
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281697
+donkey(x)
+\begin_inset Newline newline
+\end_inset
+
+green(x)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1561281800
+Finally, 
+\family sans
+DRS with Sentence above
+\family default
+ lets you do what it promises: adding a sentence above the box representation:
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561282183
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Flex SDRS
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281911
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281859
+A donkey is green
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ 
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281886
+\begin_inset Argument 2
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281888
+x
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561281854
+donkey(x)
+\begin_inset Newline newline
+\end_inset
+
+green(x)
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1561282246
+The 
+\emph on
+drs
+\emph default
+ package provides some means to customize the layout and appearance of the
+ DRS boxes.
+ Please refer to the package manual 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "drs"
+literal "false"
+
+\end_inset
+
+ for details.
+\change_unchanged
+
+\end_layout
+
+\begin_layout Section
 Phonetic Symbols (IPA)
 \end_layout
 
@@ -3096,6 +3904,40 @@ 
http://www.ctan.org/tex-archive/macros/latex/contrib/csquotes/
 \end_inset
 
 .
+\change_inserted -712698321 1561276082
+
+\end_layout
+
+\begin_layout Bibliography
+
+\change_inserted -712698321 1561276305
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "drs"
+literal "false"
+
+\end_inset
+
+ The drs
+\emph on
+ 
+\emph default
+package: 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561282286
+
+https://ctan.org/tex-archive/macros/latex/contrib/drs
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Bibliography
@@ -3187,6 +4029,38 @@ https://wiki.lyx.org/LyX/LinguistLyX
 \end_inset
 
 .
+\change_inserted -712698321 1561276282
+
+\end_layout
+
+\begin_layout Bibliography
+
+\change_inserted -712698321 1561276302
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "pict2e"
+literal "false"
+
+\end_inset
+
+The pict2e package: 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1561276288
+
+https://ctan.org/tex-archive/macros/latex/contrib/pict2e
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+
+\change_unchanged
+
 \end_layout
 
 \begin_layout Bibliography
diff --git a/lib/layouts/linguistics.module b/lib/layouts/linguistics.module
index f83f2b6..352e9e4 100644
--- a/lib/layouts/linguistics.module
+++ b/lib/layouts/linguistics.module
@@ -1,4 +1,4 @@
-#\DeclareLyXModule[covington.sty,forest.sty]{Linguistics}
+#\DeclareLyXModule[covington.sty,drs.sty,forest.sty,pict2e.sty]{Linguistics}
 #\DeclareCategory{Academic Field Specifics}
 #DescriptionBegin
 #Defines some special environments useful for linguistics (numbered examples,
@@ -251,6 +251,182 @@ End
 
 
 #
+# Discourse Representation Structures
+#
+
+InsetLayout Flex:DRS
+       LyXType               custom
+       LabelString           DRS
+       MenuString            "Discourse Representation Structure|D"
+       LatexType             command
+       LatexName             drs
+       Decoration            classic
+       MultiPar              true
+       CustomPars            false
+       ParbreakIsNewline     true
+       FreeSpacing           true
+       Requires              drs
+       ResetsFont            true
+       Argument 1
+               Decoration    conglomerate
+               LabelString   "Referents"
+               MenuString    "DRS Referents"
+               Tooltip       "Add the DRS referents (universe) here"
+               Mandatory     true
+               AutoInsert    true
+       EndArgument
+End
+
+
+InsetLayout Flex:DRS*
+       CopyStyle             Flex:DRS
+       LabelString           DRS*
+       MenuString            "Discourse Representation Structure (unspaced)|u"
+       LatexName             drs*
+End
+
+
+InsetLayout Flex:IfThen-DRS
+       CopyStyle             Flex:DRS
+       LabelString           "If-Then DRS"
+       MenuString            "If-Then DRS"
+       LatexName             ifdrs
+       Argument post:1
+               Decoration    classic
+               LabelString   "Then-Referents"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-referents (universe) here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:2
+               Decoration    classic
+               LabelString   "Then-Conditions"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-conditions here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+End
+
+
+InsetLayout Flex:Cond-DRS
+       CopyStyle             Flex:DRS
+       LabelString           "Cond. DRS"
+       MenuString            "Conditional DRS"
+       LatexName             condrs
+       Argument post:1
+               Decoration    classic
+               LabelString   "Cond."
+               MenuString    "DRS Condition"
+               Tooltip       "Add the DRS condition here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:2
+               Decoration    classic
+               LabelString   "Then-Referents"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-referents (universe) here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:3
+               Decoration    classic
+               LabelString   "Then-Conditions"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-conditions here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+End
+
+
+InsetLayout Flex:QDRS
+       CopyStyle             Flex:DRS
+       LabelString           "Dupl. Cond. DRS"
+       MenuString            "Duplex Condition DRS"
+       LatexName             qdrs
+       Argument post:1
+               Decoration    classic
+               LabelString   "Quant."
+               MenuString    "DRS Quantifier"
+               Tooltip       "Add the DRS duplex quantifier here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:2
+               Decoration    classic
+               LabelString   "Quant. Var."
+               MenuString    "DRS Quantifier Variable"
+               Tooltip       "Add the DRS duplex quantifier variables here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:3
+               Decoration    classic
+               LabelString   "Then-Referents"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-referents (universe) here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument post:4
+               Decoration    classic
+               LabelString   "Then-Conditions"
+               MenuString    "DRS Then-Referents"
+               Tooltip       "Add the DRS then-conditions here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Requires              drs,pict2e
+End
+
+
+InsetLayout Flex:NegDRS
+       CopyStyle             Flex:DRS
+       LabelString           "Neg. DRS"
+       MenuString            "Negated DRS"
+       LatexName             negdrs
+End
+
+
+InsetLayout Flex:SDRS
+       CopyStyle             Flex:DRS
+       LabelString           "Sent. DRS"
+       MenuString            "DRS with Sentence above"
+       LatexName             sdrs
+       Argument 1
+               Decoration    conglomerate
+               LabelString   "Sentence"
+               MenuString    "DRS Sentence"
+               Tooltip       "Add the sentence here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+       Argument 2
+               Decoration    conglomerate
+               LabelString   "Referents"
+               MenuString    "DRS Referents"
+               Tooltip       "Add the DRS referents (universe) here"
+               Mandatory     true
+               AutoInsert    true
+               InsertOnNewline true
+       EndArgument
+End
+
+
+#
 # Semantic Markup
 #
 
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 29e08ae..dd32314 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -1841,7 +1841,7 @@ def revert_linggloss(document):
         return
 
     cov_req = False
-    glosses = ("\\begin_inset Flex Interlinear Gloss (2 Lines)", 
"\\begin_inset Flex Interlinear Gloss (3 Lines)")
+    glosses = ["\\begin_inset Flex Interlinear Gloss (2 Lines)", 
"\\begin_inset Flex Interlinear Gloss (3 Lines)"]
     for glosse in glosses:
         i = 0
         while True:
@@ -2032,6 +2032,217 @@ def revert_subexarg(document):
         i += 1
 
 
+def revert_drs(document):
+    " Revert DRS insets (linguistics) to ERT "
+
+    if not "linguistics" in document.get_module_list():
+        return
+
+    cov_req = False
+    drses = ["\\begin_inset Flex DRS", "\\begin_inset Flex DRS*",
+             "\\begin_inset Flex IfThen-DRS", "\\begin_inset Flex Cond-DRS",
+             "\\begin_inset Flex QDRS", "\\begin_inset Flex NegDRS",
+             "\\begin_inset Flex SDRS"]
+    for drs in drses:
+        i = 0
+        while True:
+            i = find_token(document.body, drs, 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 
DRS inset")
+                i += 1
+                continue
+
+            # Check for arguments
+            arg = find_token(document.body, "\\begin_inset Argument 1", i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            prearg1content = []
+            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 
Argument 1 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                prearg1content = 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]
+
+            # re-find inset end
+            j = find_end_of_inset(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX document: Can't find end of 
DRS inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument 2", i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            prearg2content = []
+            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 
Argument 2 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                prearg2content = 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]
+
+            # re-find inset end
+            j = find_end_of_inset(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX document: Can't find end of 
DRS inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument post:1", 
i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            postarg1content = []
+            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 
Argument post:1 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                postarg1content = 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]
+
+            # re-find inset end
+            j = find_end_of_inset(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX document: Can't find end of 
DRS inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument post:2", 
i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            postarg2content = []
+            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 
Argument post:2 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                postarg2content = 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]
+
+            # re-find inset end
+            j = find_end_of_inset(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX document: Can't find end of 
DRS inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument post:3", 
i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            postarg3content = []
+            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 
Argument post:3 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                postarg3content = 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]
+
+            # re-find inset end
+            j = find_end_of_inset(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX document: Can't find end of 
DRS inset")
+                i += 1
+                continue
+
+            arg = find_token(document.body, "\\begin_inset Argument post:4", 
i, j)
+            endarg = find_end_of_inset(document.body, arg)
+            postarg4content = []
+            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 
Argument post:4 plain Layout")
+                    i += 1
+                    continue
+                argendPlain = find_end_of_inset(document.body, argbeginPlain)
+                postarg4content = 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]
+
+            # The respective LaTeX command
+            cmd = "\\drs"
+            if drs == "\\begin_inset Flex DRS*":
+                cmd = "\\drs*"
+            elif drs == "\\begin_inset Flex IfThen-DRS":
+                cmd = "\\ifdrs"
+            elif drs == "\\begin_inset Flex Cond-DRS":
+                cmd = "\\condrs"
+            elif drs == "\\begin_inset Flex QDRS":
+                cmd = "\\qdrs"
+            elif drs == "\\begin_inset Flex NegDRS":
+                cmd = "\\negdrs"
+            elif drs == "\\begin_inset Flex SDRS":
+                cmd = "\\sdrs"
+
+            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)
+            precontent += put_cmd_in_ert("{") + prearg1content + 
put_cmd_in_ert("}")
+            if drs == "\\begin_inset Flex SDRS":
+                precontent += put_cmd_in_ert("{") + prearg2content + 
put_cmd_in_ert("}")
+            precontent += put_cmd_in_ert("{")
+
+            postcontent = []
+            if cmd == "\\qdrs" or cmd == "\\condrs" or cmd == "\\ifdrs":
+                postcontent = put_cmd_in_ert("}{") + postarg1content + 
put_cmd_in_ert("}{") + postarg2content + put_cmd_in_ert("}")
+                if cmd == "\\condrs" or cmd == "\\qdrs":
+                    postcontent += put_cmd_in_ert("{") + postarg3content + 
put_cmd_in_ert("}")
+                if cmd == "\\qdrs":
+                    postcontent += put_cmd_in_ert("{") + postarg4content + 
put_cmd_in_ert("}")
+            else:
+                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("Provides covington")
+                add_to_preamble(document, ["\\usepackage{drs,covington}"])
+                cov_req = True
+            i = beginPlain + 1
+
+
 ##
 # Conversion hub
 #
@@ -2070,10 +2281,12 @@ convert = [
            [574, [convert_ruby_module, convert_utf8_japanese]],
            [575, [convert_lineno]],
            [576, []],
-           [577, [convert_linggloss]]
+           [577, [convert_linggloss]],
+           [578, []]
           ]
 
-revert =  [[576, [revert_linggloss, revert_subexarg]],
+revert =  [[576, [revert_drs]],
+           [576, [revert_linggloss, revert_subexarg]],
            [575, [revert_new_languages]],
            [574, [revert_lineno]],
            [573, [revert_ruby_module, revert_utf8_japanese]],
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index d4c6d5e..4abb586 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -998,7 +998,9 @@ char const * simplefeatures[] = {
        "tabularx",
        "xltabular",
        "chessboard",
-       "xskak"
+       "xskak",
+       "pict2e",
+       "drs"
 };
 
 char const * bibliofeatures[] = {
diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt
index b93e4cc..203ad22 100644
--- a/src/tex2lyx/TODO.txt
+++ b/src/tex2lyx/TODO.txt
@@ -35,10 +35,17 @@ 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}{four} \begin_inset Flex Interlinear 
Gloss (3 Lines) (Argument 1, Argument post:1, Argument:post 2, Argument:post 3)
-
+577    new covington gloss macros (Linguistics module)
+       \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}{four} \begin_inset Flex Interlinear 
Gloss (3 Lines) (Argument 1, Argument post:1, Argument post:2, Argument post:3)
+578    Discourse Representation Structures (Linguistics module)
+       \drs{arg1}{content}                   \begin_inset Flex DRS (Argument 1)
+       \drs*{arg1}{content}                  \begin_inset Flex DRS* (Argument 
1)
+       \ifdrs{arg1}{content}{post1}{post2}   \begin_inset Flex IfThen-DRS 
(Argument 1, Argument post:1, Argument post:2)
+       \condrs{arg1}{content}{post1}{post2}{post3}  \begin_inset Flex Cond-DRS 
(Argument 1, Argument post:1, Argument post:2, Argument post:3)
+       \qdrs{arg1}{content}{post1}{post2}{post3}{post4} \begin_inset Flex QDRS 
(Argument 1, Argument post:1, Argument post:2, Argument post:3, Argument post:4)
+       \negdrs{arg1}{content}                \begin_inset Flex NegDRS 
(Argument 1)
+       \sdrs{arg1}[arg2}{content}            \begin_inset Flex SDRS (Argument 
1, Argument 2)
 
 
 General
diff --git a/src/version.h b/src/version.h
index 61d5ee6..ce41bf0 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 577 // spitz: new ling glosses
-#define LYX_FORMAT_TEX2LYX 577
+#define LYX_FORMAT_LYX 578 // spitz: drs
+#define LYX_FORMAT_TEX2LYX 578
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER

Reply via email to