commit 5b6329786bd308f4d41048ec7ee330e9e14dd0ea
Author: Juergen Spitzmueller <[email protected]>
Date:   Mon Oct 6 15:09:18 2025 +0200

    Support formatted references for linguistic elements
    
    via CrossrefNeedDef
    
    file format change
---
 development/FORMAT                      |   5 +
 lib/examples/Modules/Linguistics.lyx    |  58 ++-
 lib/examples/de/Modules/Linguistics.lyx | 651 --------------------------------
 lib/layouts/linguistics.module          |   6 +-
 lib/lyx2lyx/LyX.py                      |   5 +-
 lib/lyx2lyx/Makefile.am                 |   1 +
 lib/lyx2lyx/lyx_2_6.py                  | 217 +++++++++++
 src/version.h                           |   4 +-
 8 files changed, 284 insertions(+), 663 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index b6fdeda12b..0d9cde93a9 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,11 @@ changes happened in particular if possible. A good example 
would be
 
 -----------------------
 
+2025-10-05 Jürgen Spitzmüller <[email protected]>
+       * Format incremented to 644:
+        Support formatted cross references for examples
+        and tableaux in linguistics module
+
 2025-07-30 Jürgen Spitzmüller <[email protected]>
        * Format incremented to 643: New buffer param
          \begin_preamble_html ... \end_preamble_html
diff --git a/lib/examples/Modules/Linguistics.lyx 
b/lib/examples/Modules/Linguistics.lyx
index 2c8b93d1f3..f14a122c50 100644
--- a/lib/examples/Modules/Linguistics.lyx
+++ b/lib/examples/Modules/Linguistics.lyx
@@ -30,9 +30,6 @@
     }
   }
 }{}
-
-% Formatted references to (sub-)examples via prettyref
-\newrefformat{lex}{example~(\ref{#1})}
 \end_preamble
 \use_default_options false
 \begin_modules
@@ -134,7 +131,7 @@ End
 \paperpagestyle default
 \tablestyle default
 \listings_params "language={[LaTeX]TeX},basicstyle={\ttfamily}"
-\tracking_changes false
+\tracking_changes true
 \output_changes false
 \change_bars false
 \postpone_fragile_content false
@@ -144,6 +141,7 @@ End
 \docbook_table_output 0
 \docbook_mathml_prefix 1
 \docbook_mathml_version 0
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -173,7 +171,13 @@ literal "false"
 \begin_layout Date
 \SpecialChar LyX
  v.
- 2.5
+ 2.
+\change_deleted -712698321 1759755941
+5
+\change_inserted -712698321 1759755941
+6
+\change_unchanged
+
 \end_layout
 
 \begin_layout Abstract
@@ -739,7 +743,9 @@ tuple "list"
 \end_inset
 
 .
- However,
+ 
+\change_deleted -712698321 1759755984
+However,
  as the cross-reference packages that are employed by \SpecialChar LyX
  to produce such references do not know 
 \emph on
@@ -758,6 +764,8 @@ Format Packages
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 In what follows,
  we describe the necessary settings for English documents.
  If you write in a different language (or prefer other terminology),
@@ -785,6 +793,8 @@ Examples
 \end_layout
 
 \begin_layout Enumerate
+
+\change_deleted -712698321 1759755984
 With 
 \begin_inset Quotes eld
 \end_inset
@@ -799,6 +809,8 @@ prettyref and varioref
 
 \begin_deeper
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 \begin_inset listings
 inline false
 status open
@@ -817,6 +829,8 @@ ref{#1})}
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 Note that the 
 \emph on
 prettyref
@@ -851,6 +865,8 @@ lex:
 
 \end_deeper
 \begin_layout Enumerate
+
+\change_deleted -712698321 1759755984
 With 
 \begin_inset Quotes eld
 \end_inset
@@ -865,6 +881,8 @@ refstyle and varioref
 
 \begin_deeper
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 \begin_inset listings
 inline false
 status open
@@ -907,6 +925,8 @@ ref{#1})
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 As with 
 \emph on
 prettyref
@@ -939,6 +959,8 @@ refstyle
 
 \end_deeper
 \begin_layout Enumerate
+
+\change_deleted -712698321 1759755984
 With 
 \begin_inset Quotes eld
 \end_inset
@@ -953,6 +975,8 @@ cleveref and varioref
 
 \begin_deeper
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 \begin_inset listings
 inline false
 status open
@@ -1046,6 +1070,8 @@ crefalias{equation}{covex}
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 Other than 
 \emph on
 prettyref
@@ -1092,6 +1118,8 @@ first-level enumeration) counter.
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 If you separate numbering for equations and examples as documented in 
 \begin_inset CommandInset ref
 LatexCommand formatted
@@ -1104,6 +1132,8 @@ reference "subsec:numbering"
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 Also,
  other than 
 \emph on
@@ -1120,6 +1150,8 @@ refstyle
 
 \end_deeper
 \begin_layout Enumerate
+
+\change_deleted -712698321 1759755984
 Finally,
  with 
 \begin_inset Quotes eld
@@ -1135,6 +1167,8 @@ zref-clever and zref-vario
 
 \begin_deeper
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 \begin_inset listings
 inline false
 status open
@@ -1227,6 +1261,8 @@ zcsetup{countertype={equation=covex}}%
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 As with 
 \emph on
 cleveref
@@ -1238,6 +1274,8 @@ cleveref
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 Note that 
 \emph on
 zref-clever
@@ -1273,6 +1311,8 @@ literal "false"
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 Note,
  finally,
  that the 
@@ -1287,6 +1327,8 @@ AddToHook
 
 \end_deeper
 \begin_layout Standard
+
+\change_deleted -712698321 1759755984
 If you want the formatted references also to appear that way in the workarea 
or cross-references dialog,
  add this to 
 \family sans
@@ -1298,6 +1340,8 @@ Local Layout
 \end_layout
 
 \begin_layout Quote
+
+\change_deleted -712698321 1759755984
 \begin_inset listings
 inline false
 status open
@@ -1349,6 +1393,8 @@ End
 \end_inset
 
 
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection
diff --git a/lib/examples/de/Modules/Linguistics.lyx 
b/lib/examples/de/Modules/Linguistics.lyx
index 7232758e2d..ea5cba0bc7 100644
--- a/lib/examples/de/Modules/Linguistics.lyx
+++ b/lib/examples/de/Modules/Linguistics.lyx
@@ -34,9 +34,6 @@
 
 % Trennausnahmen
 \hyphenation{Dis-kurs-reprä-sen-ta-tions-struk-tur}
-
-% Formatierte Querverweise auf (Unter-)Beispiele mittels prettyref
-\newrefformat{lex}{Beispiel~(\ref{#1})}
 \end_preamble
 \use_default_options false
 \begin_modules
@@ -786,654 +783,6 @@ tuple "list"
 \end_inset
 
 .
- Da jedoch die \SpecialChar LaTeX
--Pakete,
- die \SpecialChar LyX
- zur Produktion solcher Querverweise einbindet,
- das Paket 
-\emph on
-covington
-\emph default
- nicht kennen,
- müssen Sie \SpecialChar LaTeX
--Code in den Vorspann eingeben,
- damit dies funktioniert.
- Welcher Code das ist,
- hängt von Ihrer Auswahl in 
-\family sans
-Dokument\SpecialChar menuseparator
-Einstellungen\SpecialChar menuseparator
-Dokumentklasse\SpecialChar menuseparator
-Formatpakete
-\family default
- ab.
-\end_layout
-
-\begin_layout Standard
-Im Folgenden beschreiben wir,
- was Sie für englischsprachige Dokumente tun müssen (englischsprachig deshalb,
- weil wir dort anders als im Deutschen die Differenzierung zwischen Groß- und 
Kleinschreibung brauchen).
- Falls Sie in einer anderen Sprache schreiben (oder eine andere Terminologie 
bevorzugen),
- passen Sie die Zeichenketten 
-\emph on
-example
-\emph default
- in den verschiedenen Varianten (
-\emph on
-\lang english
-examples
-\emph default
-\lang ngerman
-,
- 
-\emph on
-\lang english
-Example
-\emph default
-\lang ngerman
-,
- 
-\emph on
-\lang english
-Examples
-\emph default
-\lang ngerman
-) an.
- Für Deutsch,
- wo Nomina stets großgeschrieben werden,
- verwenden Sie natürlich für alle Varianten Großschreibung (die 
Differenzierung der Varianten ist dennoch auch hier aus systematischen Gründen 
sinnvoll):
-\end_layout
-
-\begin_layout Enumerate
-Mit 
-\begin_inset Quotes gld
-\end_inset
-
-Prettyref und Varioref
-\begin_inset Quotes grd
-\end_inset
-
- (was wir auch in diesem Dokument verwenden),
- fügen Sie ein:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-\backslash
-newrefformat{lex}{example~(
-\backslash
-ref{#1})}
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Beachten Sie,
- dass das Paket 
-\emph on
-prettyref
-\emph default
- sehr basal ist und keine optionalen Plural- (
-\emph on
-\lang english
-examples
-\emph default
-\lang ngerman
-) oder Groß-/Kleinschreibungsvarianten (
-\emph on
-\lang english
-Example
-\emph default
-,
- 
-\emph on
-Examples
-\emph default
-\lang ngerman
-) anbietet (welche Sie ansonsten im Querverweis-Dialog oder Kontextmenü 
auswählen könnten).
- Beachten Sie auch,
- dass die Definition von dem Präfix,
- das Sie in den Marken verwenden,
- abhängt.
- Die Definition oben setzt voraus,
- dass dies 
-\begin_inset Quotes gld
-\end_inset
-
-lex:
-\begin_inset Quotes grd
-\end_inset
-
- ist,
- denn dies ist auch das Präfix,
- das \SpecialChar LyX
- für linguistische Beispiele und Unterbeispiele automatisch einfügt.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Mit 
-\begin_inset Quotes gld
-\end_inset
-
-Refstyle und Varioref
-\begin_inset Quotes grd
-\end_inset
-
- (der Voreinstellung für neue Dokumente),
- fügen Sie statt dessen ein:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-\backslash
-newref{lex}{
-\end_layout
-
-\begin_layout Plain Layout
-    name = {example~},
-\end_layout
-
-\begin_layout Plain Layout
-    names = {examples~},
-\end_layout
-
-\begin_layout Plain Layout
-    Name = {Example~},
-\end_layout
-
-\begin_layout Plain Layout
-    Names = {Examples~},
-\end_layout
-
-\begin_layout Plain Layout
-    refcmd = (
-\backslash
-ref{#1})
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Wie bei 
-\emph on
-prettyref
-\emph default
- hängt die Definition von dem Präfix,
- das Sie in den Marken verwenden,
- ab.
- Die Definition oben setzt voraus,
- dass dies 
-\begin_inset Quotes gld
-\end_inset
-
-lex:
-\begin_inset Quotes grd
-\end_inset
-
- ist,
- denn dies ist auch das Präfix,
- das \SpecialChar LyX
- für linguistische Beispiele und Unterbeispiele automatisch einfügt.
- Anders als 
-\emph on
-prettyref
-\emph default
- erlaubt 
-\emph on
-refstyle
-\emph default
- Plural und Großschreibung (bspw.
- am Satzanfang im Englischen).
- Beides kann für individuelle Verweise im Querverwies-Dialog oder Kontextmenü 
ausgewählt werden.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Mit 
-\begin_inset Quotes gld
-\end_inset
-
-Cleveref und Varioref
-\begin_inset Quotes grd
-\end_inset
-
-,
- fügen Sie ein:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-% Wir müssen cleveref manuell laden,
- da es
-\end_layout
-
-\begin_layout Plain Layout
-% vor covington geladen werden muss!
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-usepackage{cleveref}
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-crefname{covex}{example}{examples}
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-Crefname{covex}{Example}{Examples}
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-creflabelformat{covex}{
-\backslash
-textup{(#2#1#3)}}
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-AddToHook{env/covsubexamples/begin}{%
-\end_layout
-
-\begin_layout Plain Layout
-  
-\backslash
-crefalias{enumi}{covex}
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\begin_layout Plain Layout
-% Das Folgende ist mit der Option 
-\begin_inset Quotes eld
-\end_inset
-
-owncounter
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-% nicht nötig:
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-AddToHook{env/covexamples/begin}{%
-\end_layout
-
-\begin_layout Plain Layout
-  
-\backslash
-crefalias{equation}{covex}
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Anders als 
-\emph on
-prettyref
-\emph default
- und 
-\emph on
-refstyle
-\emph default
- verwendet 
-\emph on
-cleveref
-\emph default
- nicht das Präfix,
- um den Verweistyp zu bestimmen,
- sondern den verwendeten \SpecialChar TeX
--Zähler.
- Wie oben (Abschnitt
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "subsec:Nummerierung"
-
-\end_inset
-
-) ausgeführt,
- verwendet 
-\emph on
-covington
-\emph default
- standardmäßig den Zähler 
-\family typewriter
-equation
-\family default
- für Beispiele;
- für Unterbeispiele wird der Zähler 
-\family typewriter
-enumi
-\family default
- (=
-\begin_inset space ~
-\end_inset
-
-Aufzählung erster Ebene) verwendet.
-\end_layout
-
-\begin_layout Standard
-Wenn Sie,
- wie in Abschnitt
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "subsec:Nummerierung"
-
-\end_inset
-
- dokumentiert,
- die Zähler von Gleichungen und Beispielen trennen,
- können Sie den letzten Teil des Codes (wie im Kommentar vermerkt) weglassen.
-\end_layout
-
-\begin_layout Standard
-Anders als bei 
-\emph on
-refstyle
-\emph default
- (aber wie bei
-\emph on
- zref-clever
-\emph default
-) werden Pluralformen nicht im Dialog oder Kontextmenü ausgewählt.
- Das Paket wählt sie automatisch,
- wenn ein Querverweis auf mehrere Beispiele verweist.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Mit 
-\begin_inset Quotes gld
-\end_inset
-
-Zref-Clever und Zref-Vario
-\begin_inset Quotes grd
-\end_inset
-
- schließlich geben Sie dies ein:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-\backslash
-zcRefTypeSetup{covex}{
-\end_layout
-
-\begin_layout Plain Layout
-  Name-sg = Example ,
-\end_layout
-
-\begin_layout Plain Layout
-  name-sg = example ,
-\end_layout
-
-\begin_layout Plain Layout
-  Name-pl = Examples ,
-\end_layout
-
-\begin_layout Plain Layout
-  name-pl = examples ,
-\end_layout
-
-\begin_layout Plain Layout
-  refbounds-first-sg = {,(,),} ,
-\end_layout
-
-\begin_layout Plain Layout
-  refbounds = {(,,,)} ,
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-AddToHook{env/covsubexs/begin}{%
-\end_layout
-
-\begin_layout Plain Layout
-   
-\backslash
-zcsetup{countertype={enumi=covex}}%
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-% Das Folgende ist mit der Option 
-\begin_inset Quotes eld
-\end_inset
-
-owncounter
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-% nicht nötig:
-\end_layout
-
-\begin_layout Plain Layout
-
-\backslash
-AddToHook{env/covexamples/begin}{%
-\end_layout
-
-\begin_layout Plain Layout
-  
-\backslash
-zcsetup{countertype={equation=covex}}%
-\end_layout
-
-\begin_layout Plain Layout
-}
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Wie bei 
-\emph on
-cleveref
-\emph default
- wird der Verweistyp über den Zähler bestimmt.
- Wenn Sie also Beispiele und Gleichungen separat nummerieren,
- können Sie auch hier wieder den letzten Teil des Codes weglassen.
-\end_layout
-
-\begin_layout Standard
-Beachten Sie,
- dass 
-\emph on
-zref-clever
-\emph default
- sogar noch mehr Varianten unterstützt (bspw.
- unterschiedliche Kasus,
- also Genitiv,
- Dativ,
- Akkusativ,
- wenn sie sich – wie im Deutschen hier die Genitivform [
-\emph on
-des Beispiels
-\emph default
-] formal vom Nominativ unterscheiden – oder optionale abgekürzte Formen wie 
-\emph on
-Bsp
-\emph default
-.),
- die man auch in \SpecialChar LyX
- verwenden kann (über die benutzerdefinierten Optionen im Querverweis-Dialog).
- Bitte konsuliteren Sie die Dokumentantion des Pakets 
-\emph on
-zref-clever
-\emph default
- 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "zref-clever"
-literal "false"
-
-\end_inset
-
- für Informationen,
- wie man diese in die obige Definition einbinden kann.
-\end_layout
-
-\begin_layout Standard
-Beachten Sie schließlich,
- dass der Befehl 
-\family typewriter
-
-\backslash
-AddToHook
-\family default
-,der in einigen Definitionen erwendet wird,
- nur bei einigermaßen neuen Versionen von \SpecialChar LaTeX
- zur Verfügung steht.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Wenn Sie die formatierten Querverweise in dieser eleganten Form auch im 
Arbeitsbereich oder dem Querverweisdialog sehen wollen,
- fügen Sie das Folgende in 
-\family sans
-Dokument\SpecialChar menuseparator
-Einstellungen\SpecialChar menuseparator
-Lokales Format
-\family default
- ein (wie wir das für dieses Dokument getan haben):
-\end_layout
-
-\begin_layout Quote
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-Counter examplei
-\end_layout
-
-\begin_layout Plain Layout
-    PrettyFormat 
-\begin_inset Quotes eld
-\end_inset
-
-Example|Examples ##
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-End
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-Counter subexamplei
-\end_layout
-
-\begin_layout Plain Layout
-    PrettyFormat 
-\begin_inset Quotes eld
-\end_inset
-
-Example|Examples ##
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-End
-\end_layout
-
-\end_inset
-
-
 \end_layout
 
 \begin_layout Subsection
diff --git a/lib/layouts/linguistics.module b/lib/layouts/linguistics.module
index df450c1236..e07efda2a1 100644
--- a/lib/layouts/linguistics.module
+++ b/lib/layouts/linguistics.module
@@ -18,7 +18,7 @@ Counter examplei
        GuiName              "Numbered Example (Multiline)"
        Within               chapter
        LabelString          "(\theequation)"
-       PrettyFormat         "##"
+       PrettyFormat         "Example|Examples (##)"
        StepOtherCounter      equation
        LaTeXName             equation
 End
@@ -27,7 +27,7 @@ Counter subexamplei
        GuiName              Subexample
        Within               examplei
        LabelString          "(\theequation) (\alph{subexamplei})"
-       PrettyFormat         "##"
+       PrettyFormat         "Example|Examples (##)"
        LaTeXName             enumi
 End
 
@@ -53,6 +53,7 @@ Style Numbered_Example_(multiline)
        LabelType             Static
        LabelCounter          examplei
        RefPrefix             lex
+       CrossrefNeedDef       refstyle,prettyref,cleveref,zref
        LabelFont
                Color         textlabel1
        EndFont
@@ -568,6 +569,7 @@ Float
        Type                  tableau
        GuiName               Tableau
        RefPrefix             tbl
+       CrossrefNeedDef       refstyle,prettyref,cleveref,zref
        Placement             tbp
        Extension             otl
        NumberWithin          none
diff --git a/lib/lyx2lyx/LyX.py b/lib/lyx2lyx/LyX.py
index 3fb9268e67..ab3e915859 100644
--- a/lib/lyx2lyx/LyX.py
+++ b/lib/lyx2lyx/LyX.py
@@ -104,8 +104,9 @@ format_relation = [
     ("2_1", list(range(414, 475)), minor_versions("2.1", 5), 48),
     ("2_2", list(range(475, 509)), minor_versions("2.2", 4), 60),
     ("2_3", list(range(509, 545)), minor_versions("2.3", 7), 66),
-    ("2_4", list(range(545, 621)), minor_versions("2.4", 0), 104),
-    ("2_5", (), minor_versions("2.5", 0), sys.maxsize),
+    ("2_4", list(range(545, 621)), minor_versions("2.4", 5), 104),
+    ("2_5", list(range(621, 644)), minor_versions("2.5", 0), 111),
+    ("2_6", (), minor_versions("2.6", 0), sys.maxsize),
 ]
 
 ####################################################################
diff --git a/lib/lyx2lyx/Makefile.am b/lib/lyx2lyx/Makefile.am
index b09f5b67f4..00f5b2967d 100644
--- a/lib/lyx2lyx/Makefile.am
+++ b/lib/lyx2lyx/Makefile.am
@@ -36,6 +36,7 @@ dist_lyx2lyx_PYTHON = \
        lyx_2_3.py \
        lyx_2_4.py \
        lyx_2_5.py \
+       lyx_2_6.py \
        test_parser_tools.py
 
 install-data-hook:
diff --git a/lib/lyx2lyx/lyx_2_6.py b/lib/lyx2lyx/lyx_2_6.py
new file mode 100644
index 0000000000..9d4b32b873
--- /dev/null
+++ b/lib/lyx2lyx/lyx_2_6.py
@@ -0,0 +1,217 @@
+# This file is part of lyx2lyx
+# Copyright (C) 2025 The LyX team
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+"""Convert files to the file format generated by lyx 2.6"""
+
+import re
+
+# Uncomment only what you need to import, please (lyx2lyx_tools):
+#    convert_info_insets,
+#    get_ert,
+#    hex2ratio,
+#    insert_to_preamble,
+#    latex_length,
+#    length_in_bp,
+#    lyx2latex,
+#    lyx2verbatim,
+#    put_cmd_in_ert,
+#    revert_flex_inset,
+#    revert_flex_inset,
+#    revert_font_attrs,
+#    revert_language
+#    str2bool
+from lyx2lyx_tools import (
+    add_to_preamble
+)
+
+# Uncomment only what you need to import, please (parser_tools):
+#    check_token,
+#    count_pars_in_inset,
+#    del_complete_lines,
+#    del_token,
+#    del_value,
+#    find_complete_lines, 
+#    find_end_of,
+#    find_end_of_layout,
+#    find_re,
+#    find_substring,
+#    find_token_backwards,
+#    find_token_exact,
+#    find_tokens,
+#    get_containing_inset,
+#    get_containing_layout,
+#    get_bool_value,
+#    get_option_value,
+#    set_bool_value,
+#    is_in_inset
+from parser_tools import (
+    find_end_of_inset,
+    find_token,
+    get_quoted_value,
+    get_value
+)
+
+####################################################################
+# Private helper functions
+
+# Provide, on reversion, preamble definitions for elements that
+# are supported via CrossrefNeedDef
+# prfx: ref prefix [string]
+# form: PrettyFormat, e.g., "Example|Examples (##)" [string]
+# counter: counter name [string]
+# alias: alias definitions for zref and cleveref in keyval form,
+#        type/latexname=realcounter
+#        e.g. "env/covexamples=equation" [list]
+def revert_xref_defs(document, prfx, form, counter, alias):
+    """Revert supported xref defs to preamble code"""
+    package = "refstyle"
+    i = find_token(document.header, "\\crossref_package", 0)
+    if i == -1:
+        document.warning("Missing \\crossref_package header!")
+    else:
+        package = get_value(document.header, "\\crossref_package", i)
+
+    have_ref = False
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset CommandInset ref", i)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning("Can't find end of reference inset at line %d!!" 
% (i))
+            i += 1
+            continue
+
+        k = find_token(document.body, "LatexCommand formatted", i, j)
+        if k == -1:
+            i += 1
+            continue
+
+        label = get_quoted_value(document.body, "reference", i, j)
+        if not ":" in label:
+            i += 1
+            continue
+
+        prefix = label.split(":", 1)[0]
+        if prefix == prfx:
+            have_ref = True
+        i += 1
+
+    if not have_ref:
+        return
+
+    pr_def = []
+    pr_xdef = []
+    forms = form.split("|", 1)
+    form_sg = forms[0]
+    form_pl = forms[1].split()[0]
+    form_nr = forms[1].split()[1]
+    br_left = ""
+    br_right = ""
+    if not form_nr.startswith("##"):
+        br_left = form_nr.split("#", 1)[0]
+    if not form_nr.endswith("##"):
+        br_right = form_nr.split("##")[-1]
+        
+    if "prettyref" in package:
+        pr_def = ["\\newrefformat{" + prfx + "}{" + form_sg + "~" + br_left + 
"\\ref{#1}" + br_right + "}"]
+    elif package == "refstyle":
+        pr_def = ["\\newref{" + prfx + "}{",
+                  "name = {" + form_sg.lower() + "~},",
+                  "names = {" + form_pl.lower() + "~},",
+                  "Name = {" + form_sg + "~},",
+                  "Names = {" + form_pl + "~},",
+                  "refcmd = {" + br_left + "\\ref{#1}" + br_right + "}",
+                  "}"]
+    elif package == "cleveref":
+        pr_def = ["\\usepackage{cleveref}",
+                  "\\crefname{" + counter + "}{" + form_sg.lower() + "}{" + 
form_pl.lower() + "}",
+                  "\\Crefname{" + counter + "}{" + form_sg + "}{" + form_pl + 
"}",
+                  "\\creflabelformat{" + counter + "}{\\textup{" + br_left + 
"#2#1#3" + br_right + "}}"]
+        for al in alias:
+            if not "=" in al:
+                continue
+            pr_xdef += ["\\AddToHook{" +  al.split("=")[0] + "/begin}{%",
+                       "\\crefalias{" + al.split("=")[1] + "}{" + counter + 
"}",
+                       "}"]
+    elif package == "zref":
+        pr_def = ["\\usepackage{zref-clever}",
+                  "\\zcRefTypeSetup{" + counter + "}{",
+                  "Name-sg = " + form_sg + " ,",
+                  "name-sg = " + form_sg.lower() + " ,",
+                  "Name-pl = " + form_pl + " ,",
+                  "name-pl = " + form_pl.lower() + " ,",
+                  "refbounds-first-sg = {," + br_left + "," + br_right + ",} 
,",
+                  "refbounds = {," + br_left + ",,," + br_right + ",} ,",
+                  "}"]
+        for al in alias:
+            if not "=" in al:
+                continue
+            pr_xdef += ["\\AddToHook{" +  al.split("=")[0] + "/begin}{%",
+                       "\\zcsetup{countertype={" + al.split("=")[1] + "}{" + 
counter + "}}",
+                       "}"]
+    
+    if len(pr_def) > 0:
+        add_to_preamble(
+                document,
+                pr_def
+            )
+    if len(pr_xdef) > 0:
+        add_to_preamble(
+                document,
+                pr_xdef
+            )
+
+
+
+###############################################################################
+###
+### Conversion and reversion routines
+###
+###############################################################################
+
+
+def revert_ling_xrefs(document):
+    """Revert xref defs of linguistics module"""
+
+    if not "linguistics" in document.get_module_list():
+        return
+
+    # examples
+    revert_xref_defs(document, "lex", "Example|Examples (##)", "covex", 
["env/covsubexamples=enumi", "env/covexamples=equation"])
+    # tableaux
+    revert_xref_defs(document, "tbl", "Tableau|Tableaux ##", "tableau", [""])
+
+
+##
+# Conversion hub
+#
+
+supported_versions = ["2.6.0", "2.6"]
+convert = [
+    [644, []]
+]
+
+
+revert = [
+    [643, [revert_ling_xrefs]]
+]
+
+
+if __name__ == "__main__":
+    pass
diff --git a/src/version.h b/src/version.h
index ea74976e2a..9bb07d31ba 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 643 // spitz: html preamble
-#define LYX_FORMAT_TEX2LYX 643
+#define LYX_FORMAT_LYX 644 // spitz: linguistics xrefs
+#define LYX_FORMAT_TEX2LYX 644
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to