commit 4ea81b52f8c17d9eea1655e115ea6bc47377da2e
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sun Mar 23 13:04:49 2025 +0100

    Add support for zref-clever and zref-vario
    
    tex2lyx support will follow.
---
 development/FORMAT               |  18 +++-
 lib/chkconfig.ltx                |   2 +
 lib/doc/LaTeXConfig.lyx          |  99 +++++++++++++++++++
 lib/doc/UserGuide.lyx            | 141 +++++++++++++++++++++++++--
 lib/doc/de/UserGuide.lyx         | 113 +++++++++++++++++++--
 lib/lyx2lyx/lyx_2_5.py           |  93 +++++++++++++++++-
 src/LaTeXFeatures.cpp            |   2 +
 src/frontends/qt/GuiDocument.cpp |   1 +
 src/frontends/qt/GuiRef.cpp      |  15 ++-
 src/frontends/qt/ui/RefUi.ui     | 205 +++++++++++++++++++++------------------
 src/insets/InsetRef.cpp          |  58 ++++++++---
 11 files changed, 624 insertions(+), 123 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index 4ee108bf48..d9bd340254 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -8,7 +8,8 @@ changes happened in particular if possible. A good example 
would be
 -----------------------
 
 2025-03-23 Jürgen Spitzmüller <sp...@lyx.org>
-       * Format incremented to 636: Support for the cleveref package
+       * Format incremented to 636: 
+       1. Support for the cleveref package
          \crossref_package cleveref
          With CommandInset ref:
          * LatexCommand formatted: \cref
@@ -17,6 +18,21 @@ changes happened in particular if possible. A good example 
would be
          * LatexCommand nameref: \namecref
            + caps "true": \nameCref
            + plural "true": \namecrefs, \nameCrefs
+       2. Support for zref-clever and zref-vario
+         \crossref_package zref
+         With CommandInset ref:
+         * LatexCommand formatted: \zcref
+           + caps "true": \zcref[S]
+           + nolink "true": \zcref*
+           + options: \zcref[<options>]
+         * LatexCommand vref: \zvref
+           + caps "true": \zvref[S]
+           + nolink "true": \zvref*
+           + options: \zvref[<options>]
+         * LatexCommand vpageref: \zvpageref
+           + caps "true": \zvpageref[S]
+           + nolink "true": \zvpageref*
+           + options: \zvpageref[<options>]
 
 2025-03-22 Jürgen Spitzmüller <sp...@lyx.org>
        * Format incremented to 635:  Rename buffer param \use_refstyle to 
\crossref_package
diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx
index 5d9e076d46..f36daf0876 100644
--- a/lib/chkconfig.ltx
+++ b/lib/chkconfig.ltx
@@ -439,6 +439,8 @@
 \TestPackage{xkeyval}
 \TestPackage{xltabular}
 \TestPackage{xskak} % required by chessboard
+\TestPackage{zref-clever}
+\TestPackage{zref-vario}
 
 % Packages used by LyX's documentation files
 \TestPackage{arydshln}
diff --git a/lib/doc/LaTeXConfig.lyx b/lib/doc/LaTeXConfig.lyx
index 3b7a1ce0fe..c224c7a11c 100644
--- a/lib/doc/LaTeXConfig.lyx
+++ b/lib/doc/LaTeXConfig.lyx
@@ -10291,5 +10291,104 @@ color
  uses it to output colored change tracking marks.
 \end_layout
 
+\begin_layout Subsection
+zref-clever
+\end_layout
+
+\begin_layout Description
+Found:
+ 
+\begin_inset Info
+type  "package"
+arg   "zref-clever"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+CTAN:
+ 
+\family typewriter
+macros/latex/contrib/zref-clever
+\end_layout
+
+\begin_layout Description
+Notes:
+ The package 
+\family sans
+zref-clever
+\family default
+ provides commands to identify reference labels by their context and 
automatically output matching references (e.g.,
+ 
+\begin_inset Quotes eld
+\end_inset
+
+section
+\begin_inset space ~
+\end_inset
+
+3
+\begin_inset Quotes erd
+\end_inset
+
+).
+ It is an alternative approach to 
+\family sans
+prettyref
+\family default
+ and 
+\family sans
+refstyle
+\family default
+,
+ which both need a specific label prefix,
+ and 
+\family sans
+cleveref
+\family default
+,
+ which it emulates and enhances.
+\end_layout
+
+\begin_layout Subsection
+zref-vario
+\end_layout
+
+\begin_layout Description
+Found:
+ 
+\begin_inset Info
+type  "package"
+arg   "zref-vario"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+CTAN:
+ 
+\family typewriter
+macros/latex/contrib/zref-vario
+\end_layout
+
+\begin_layout Description
+Notes:
+ The package 
+\family sans
+zref-vario
+\family default
+ is a companion package to 
+\family sans
+zref-clever
+\family default
+ which emulates page references known from the 
+\family sans
+varioref
+\family default
+ package.
+\end_layout
+
 \end_body
 \end_document
diff --git a/lib/doc/UserGuide.lyx b/lib/doc/UserGuide.lyx
index 35f0a0e5d1..8c3ef7f1d1 100644
--- a/lib/doc/UserGuide.lyx
+++ b/lib/doc/UserGuide.lyx
@@ -31881,11 +31881,15 @@ status open
 
 \change_inserted -712698321 1742721546
 prettyref
+\change_unchanged
+
 \end_layout
 
 \end_inset
 
 
+\change_unchanged
+
 \end_layout
 
 \end_inset
@@ -32005,7 +32009,7 @@ newref\SpecialChar ligaturebreak
 format
 \series default
  (prettyref)
-\change_inserted -712698321 1742721923
+\change_inserted -712698321 1742730901
 ,
 
 \series bold
@@ -32015,7 +32019,14 @@ crefname|
 \backslash
 crefname
 \series default
- (cleveref)
+ (cleveref),
+ 
+\series bold
+
+\backslash
+zcRefTypeSetup
+\series default
+ (zref-clever)
 \change_unchanged
  or 
 \series bold
@@ -32129,7 +32140,7 @@ For more information about defining formatted 
references,
  have a look at the package documentation 
 \begin_inset CommandInset citation
 LatexCommand cite
-key "cleveref,prettyref,refstyle"
+key "cleveref,prettyref,refstyle,zref-clever"
 literal "true"
 
 \end_inset
@@ -32161,7 +32172,7 @@ refstyle
 \change_unchanged
 .
 
-\change_inserted -712698321 1742722131
+\change_inserted -712698321 1742730991
  
 \family sans
 Capitalized
@@ -32171,16 +32182,57 @@ Capitalized
 refstyle
 \series default
 ,
- and with formatted and textual references using 
+ with formatted and textual references using 
 \series bold
 cleveref
 \series default
+,
+ and with formatted and 
+\begin_inset Quotes eld
+\end_inset
+
+on page
+\begin_inset Quotes erd
+\end_inset
+
+ references with
+\series bold
+ zref-clever
+\series default
+ and 
+\series bold
+zref-vario
+\series default
 .
-\change_unchanged
+\change_deleted -712698321 1742731074
 
 \begin_inset Newline newline
 \end_inset
 
+
+\change_inserted -712698321 1742731076
+
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+
+\change_inserted -712698321 1742731072
+For
+\series bold
+ zref-clever
+\series default
+ and 
+\series bold
+zref-vario
+\series default
+,
+ you can also insert custom options;
+ for the other packages,
+ this field is disabled.
+\end_layout
+
+\begin_layout Standard
 If you activate the option 
 \family sans
 Format cross-references in work area
@@ -32201,6 +32253,7 @@ Theorem 1
  rather than just displaying the label.
 \end_layout
 
+\end_deeper
 \begin_layout Description
 Textual
 \begin_inset space ~
@@ -59589,11 +59642,15 @@ status open
 
 \change_inserted -712698321 1742722254
 cleveref
+\change_unchanged
+
 \end_layout
 
 \end_inset
 
 
+\change_unchanged
+
 \end_layout
 
 \end_inset
@@ -59610,6 +59667,8 @@ status collapsed
 
 \change_inserted -712698321 1742722259
 https://mirrors.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf
+\change_unchanged
+
 \end_layout
 
 \end_inset
@@ -60051,6 +60110,76 @@ 
https://mirrors.ctan.org/macros/latex/contrib/refstyle/refstyle.pdf
 \end_inset
 
 
+\change_inserted -712698321 1742730694
+
+\end_layout
+
+\begin_layout Bibliography
+
+\change_inserted -712698321 1742730701
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "zref-clever"
+literal "false"
+
+\end_inset
+
+
+\begin_inset CommandInset href
+LatexCommand href
+name "Documentation"
+target 
"https://mirrors.ctan.org/macros/latex/contrib/zref-clever//zref-clever.pdf";
+literal "false"
+
+\end_inset
+
+ of the \SpecialChar LaTeX
+ package zref-clever
+\begin_inset Index idx
+range none
+pageformat default
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1742730695
+\SpecialChar LaTeX
+ packages
+\begin_inset IndexMacro subentry
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1742730730
+zref-clever
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+:
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1742730723
+https://mirrors.ctan.org/macros/latex/contrib/refstyle//zref-clever.pdf
+\end_layout
+
+\end_inset
+
+
+\change_unchanged
+
 \end_layout
 
 \begin_layout Bibliography
diff --git a/lib/doc/de/UserGuide.lyx b/lib/doc/de/UserGuide.lyx
index db98488a7f..2266f5cf74 100644
--- a/lib/doc/de/UserGuide.lyx
+++ b/lib/doc/de/UserGuide.lyx
@@ -30802,7 +30802,7 @@ Dokumentklasse
 \series bold
 refstyle
 \series default
- ist die Voreinstellung und bevorzugt.
+ ist die Voreinstellung.
  Beachten Sie,
  dass 
 \series bold
@@ -30825,7 +30825,14 @@ crefname|
 \backslash
 crefname
 \series default
- (cleveref) oder 
+ (cleveref)
+\series bold
+,
+ 
+\backslash
+zcRefTypeSetup
+\series default
+ (zref-clever) oder 
 \series bold
 
 \backslash
@@ -30912,7 +30919,7 @@ Für weitere Informationen zur Definition formatierter 
Querverweise konsultieren
  
 \begin_inset CommandInset citation
 LatexCommand cite
-key "cleveref,prettyref,refstyle"
+key "cleveref,prettyref,refstyle,zref-clever"
 literal "true"
 
 \end_inset
@@ -30941,18 +30948,50 @@ Großschreibung
 \family default
  ist bei formatierten Querverweisen mit 
 \series bold
-refstyle
+refstyle,
+
 \series default
- und 
+ 
 \series bold
 cleveref
+\series default
+ und 
+\series bold
+zref-clever
 \series default
  aktiviert,
  bei 
 \series bold
 cleveref
 \series default
- außerdem auch bei Textverweisen.
+ außerdem auch bei Textverweisen,
+ bei 
+\series bold
+zref-clever\SpecialChar breakableslash
+zref-vario
+\series default
+ bei 
+\begin_inset Quotes gld
+\end_inset
+
+auf Seite
+\begin_inset Quotes grd
+\end_inset
+
+-Verweisen.
+\begin_inset Newline newline
+\end_inset
+
+Für 
+\series bold
+zref-clever
+\series default
+ und 
+\series bold
+zref-vario
+\series default
+ können Sie auch benutzerdefinierte Optionen eingeben,
+ für die andere Pakete ist dies deaktiviert.
 \begin_inset Newline newline
 \end_inset
 
@@ -56871,6 +56910,68 @@ literal "true"
 \end_inset
 
 
+\begin_inset CommandInset href
+LatexCommand href
+name "Dokumentation"
+target 
"https://mirrors.ctan.org/macros/latex/contrib/zref-clever/zref-clever.pdf";
+literal "false"
+
+\end_inset
+
+ des \SpecialChar LaTeX
+-Pakets 
+\series bold
+zref-clever
+\series default
+
+\begin_inset Index idx
+range none
+pageformat default
+status open
+
+\begin_layout Plain Layout
+\SpecialChar LaTeX
+-Paket
+\begin_inset IndexMacro subentry
+status open
+
+\begin_layout Plain Layout
+zref-clever
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+:
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+https://mirrors.ctan.org/macros/latex/contrib/zref-clever/zref-clever.pdf
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "zref-clever"
+literal "false"
+
+\end_inset
+
+
 \begin_inset CommandInset href
 LatexCommand href
 name "Dokumentation"
diff --git a/lib/lyx2lyx/lyx_2_5.py b/lib/lyx2lyx/lyx_2_5.py
index d1b4a17287..afc069598f 100644
--- a/lib/lyx2lyx/lyx_2_5.py
+++ b/lib/lyx2lyx/lyx_2_5.py
@@ -2585,7 +2585,96 @@ def revert_cleveref(document):
             document,
             ["\\usepackage{cleveref}"]
         )
-    
+
+
+def revert_zref(document):
+    "Reverts zref-clever and zref-vario commands to ERT"
+
+    use_zref = True
+    i = find_token(document.header, "\\crossref_package zref", 0)
+    if i == -1:
+        use_zref = False
+
+    if use_zref:
+        # Reset header
+        document.header[i] = "\\crossref_package prettyref"
+
+    # Check and revert insets
+    i = 0
+    need_zref_clever = False
+    need_zref_vario = False
+    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
+
+        if not use_zref:
+            # only need to remove the options
+            del_token(document.body, "options", i, j)
+            i += 1
+            continue
+
+        vref = False
+        vpageref = False
+        k = find_token(document.body, "LatexCommand formatted", i, j)
+        if k == -1:
+            k = find_token(document.body, "LatexCommand vref", i, j)
+            if k == -1:
+                k = find_token(document.body, "LatexCommand vpageref", i, j)
+                if k == -1:
+                    i += 1
+                    continue
+                vpageref = True
+            else:
+                vref = True
+
+        caps = get_bool_value(document.body, "caps", i, j, False)
+        nolink = get_bool_value(document.body, "nolink", i, j, False)
+        label = get_quoted_value(document.body, "reference", i, j)
+        options = get_quoted_value(document.body, "options", i, j)
+
+        cmd = ""
+        if vref:
+            cmd = "\\zvref"
+        elif vpageref:
+            cmd = "\\zvpageref"
+        else:
+            cmd = "\\zcref"
+        if nolink:
+            cmd += "*"
+        opts = ""
+        if caps:
+            opts = "S"
+            if options != "":
+                opts += "," + options
+        elif options != "":
+            opts = options
+        if opts != "":
+            cmd += "[" + opts + "]"
+        cmd += "{" + label + "}"
+        document.body[i : j + 1] = put_cmd_in_ert([cmd])
+        if vref or vpageref:
+            need_zref_vario = True
+        else:
+            need_zref_clever = True
+        i += 1
+
+    # preamble
+    if need_zref_clever:
+        add_to_preamble(
+            document,
+            ["\\usepackage{zref-clever}"]
+        )
+    if need_zref_vario:
+        add_to_preamble(
+            document,
+            ["\\usepackage{zref-vario}"]
+        )
 
 ##
 # Conversion hub
@@ -2613,7 +2702,7 @@ convert = [
 
 
 revert = [
-    [635, [revert_cleveref]],
+    [635, [revert_cleveref, revert_zref]],
     [634, [revert_crossref_package]],
     [633, [revert_colortbl]],
     [632, [revert_doc_colors, revert_colorbox]],
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index b40b3304d1..e7b7d16144 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -1072,6 +1072,8 @@ char const * simplefeatures[] = {
        "varioref",
        "prettyref",
        "refstyle",
+       "zref-clever",
+       "zref-vario",
        /*For a successful cooperation of the `wrapfig' package with the
          `float' package you should load the `wrapfig' package *after*
          the `float' package. See the caption package documentation
diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index b39482f7a9..f3688a4a67 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -1675,6 +1675,7 @@ GuiDocument::GuiDocument(GuiView & lv)
        latexModule->xrefPackageCO->addItem(qt_("Cleveref and varioref"), 
toqstr("cleveref"));
        latexModule->xrefPackageCO->addItem(qt_("Prettyref and varioref"), 
toqstr("prettyref"));
        latexModule->xrefPackageCO->addItem(qt_("Refstyle and varioref"), 
toqstr("refstyle"));
+       latexModule->xrefPackageCO->addItem(qt_("Zref-clever and zref-vario"), 
toqstr("zref"));
 
        // postscript drivers
        for (int n = 0; tex_graphics[n][0]; ++n) {
diff --git a/src/frontends/qt/GuiRef.cpp b/src/frontends/qt/GuiRef.cpp
index c4c5f486e0..78820cfdbf 100644
--- a/src/frontends/qt/GuiRef.cpp
+++ b/src/frontends/qt/GuiRef.cpp
@@ -109,6 +109,8 @@ GuiRef::GuiRef(GuiView & lv)
                this, SLOT(changed_adaptor()));
        connect(nolinkCB, SIGNAL(clicked()),
                this, SLOT(changed_adaptor()));
+       connect(refOptionsLE, SIGNAL(textChanged(QString)),
+               this, SLOT(changed_adaptor()));
 
        enableBoxes();
 
@@ -140,20 +142,25 @@ void GuiRef::enableBoxes()
                typeCO->itemData(typeCO->currentIndex()).toString();
        bool const use_refstyle = buffer().params().xref_package == "refstyle";
        bool const use_cleveref = buffer().params().xref_package == "cleveref";
+       bool const use_zref = buffer().params().xref_package == "zref";
        bool const isFormatted = (reftype == "formatted");
        bool const isLabelOnly = (reftype == "labelonly");
        bool const hyper_on = buffer().params().pdfoptions().use_hyperref;
        bool const cleveref_nameref = use_cleveref && reftype == "nameref"
                        && (!hyper_on || nolinkCB->isChecked());
+       bool const zref_clever = use_zref && (reftype == "vref" || reftype == 
"vpageref");
        bool const allow_plural = use_refstyle || cleveref_nameref;
-       bool const allow_caps = use_refstyle || use_cleveref;
-       bool const allow_nohyper = !isLabelOnly && (!isFormatted || 
use_cleveref);
+       bool const allow_caps = use_refstyle || use_cleveref || use_zref;
+       bool const allow_nohyper = !isLabelOnly && (!isFormatted || 
use_cleveref || use_zref);
        bool const intext = bufferview()->cursor().inTexted();
        pluralCB->setEnabled(intext && (isFormatted || cleveref_nameref) && 
allow_plural);
-       capsCB->setEnabled(intext && (isFormatted || cleveref_nameref) && 
allow_caps);
+       capsCB->setEnabled(intext && (isFormatted || cleveref_nameref || 
zref_clever) && allow_caps);
        noprefixCB->setEnabled(intext && isLabelOnly);
        // disabling of hyperlinks not supported by formatted references
        nolinkCB->setEnabled(hyper_on && intext && allow_nohyper);
+       // options only supported by zref currently
+       refOptionsLE->setEnabled(use_zref && (isFormatted || zref_clever));
+       refOptionsLA->setEnabled(use_zref && (isFormatted || zref_clever));
 }
 
 
@@ -348,6 +355,7 @@ void GuiRef::updateContents()
        capsCB->setChecked(params_["caps"] == "true");
        noprefixCB->setChecked(params_["noprefix"] == "true");
        nolinkCB->setChecked(params_["nolink"] == "true");
+       refOptionsLE->setText(toqstr(params_["options"]));
 
        // insert buffer list
        bufferCO->clear();
@@ -392,6 +400,7 @@ void GuiRef::applyView()
              from_ascii("true") : from_ascii("false");
        params_["nolink"] = nolinkCB->isChecked() ?
              from_ascii("true") : from_ascii("false");
+       params_["options"] = qstring_to_ucs4(refOptionsLE->text());
        restored_buffer_ = bufferCO->currentIndex();
 }
 
diff --git a/src/frontends/qt/ui/RefUi.ui b/src/frontends/qt/ui/RefUi.ui
index dac7d7f4b7..73d3241397 100644
--- a/src/frontends/qt/ui/RefUi.ui
+++ b/src/frontends/qt/ui/RefUi.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>435</width>
-    <height>539</height>
+    <height>592</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -16,33 +16,7 @@
   <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="2" column="0">
-    <widget class="QTreeWidget" name="refsTW">
-     <property name="columnCount">
-      <number>2</number>
-     </property>
-     <attribute name="headerDefaultSectionSize">
-      <number>200</number>
-     </attribute>
-     <attribute name="headerStretchLastSection">
-      <bool>true</bool>
-     </attribute>
-     <column>
-      <property name="text">
-       <string>Label</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Reference counter value</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item row="7" column="0">
-    <layout class="QHBoxLayout" name="horizontalLayout_4"/>
-   </item>
+  <layout class="QGridLayout" name="gridLayout_3">
    <item row="0" column="0">
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
@@ -111,6 +85,39 @@
      </item>
     </layout>
    </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Available &amp;Labels:</string>
+     </property>
+     <property name="buddy">
+      <cstring>refsTW</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QTreeWidget" name="refsTW">
+     <property name="columnCount">
+      <number>2</number>
+     </property>
+     <attribute name="headerDefaultSectionSize">
+      <number>200</number>
+     </attribute>
+     <attribute name="headerStretchLastSection">
+      <bool>true</bool>
+     </attribute>
+     <column>
+      <property name="text">
+       <string>Label</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Reference counter value</string>
+      </property>
+     </column>
+    </widget>
+   </item>
    <item row="3" column="0">
     <layout class="QHBoxLayout">
      <property name="spacing">
@@ -170,16 +177,6 @@
      </item>
     </layout>
    </item>
-   <item row="1" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Available &amp;Labels:</string>
-     </property>
-     <property name="buddy">
-      <cstring>refsTW</cstring>
-     </property>
-    </widget>
-   </item>
    <item row="4" column="0">
     <layout class="QHBoxLayout" name="horizontalLayout_2">
      <item>
@@ -290,7 +287,83 @@
      </item>
     </layout>
    </item>
-   <item row="8" column="0">
+   <item row="6" column="0">
+    <widget class="QGroupBox" name="refOptionsGB">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0" colspan="2">
+       <layout class="QHBoxLayout" name="horizontalLayout9">
+        <item>
+         <widget class="QCheckBox" name="pluralCB">
+          <property name="toolTip">
+           <string>Use plural form of formatted reference. (Works only for 
formatted references, and only if you are using refstyle.)</string>
+          </property>
+          <property name="text">
+           <string>&amp;Plural</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="capsCB">
+          <property name="toolTip">
+           <string>Use capitalized form of formatted reference. (Works only 
for formatted references, and only if you are using refstyle.)</string>
+          </property>
+          <property name="text">
+           <string>&amp;Capitalized</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="noprefixCB">
+          <property name="toolTip">
+           <string>Do not output part of label before &quot;:&quot;</string>
+          </property>
+          <property name="text">
+           <string>No Prefi&amp;x</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="nolinkCB">
+          <property name="text">
+           <string>No H&amp;yperlink</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="refOptionsLA">
+        <property name="text">
+         <string>&amp;Custom:</string>
+        </property>
+        <property name="buddy">
+         <cstring>refOptionsLE</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="refOptionsLE"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="7" column="0">
     <layout class="QHBoxLayout">
      <property name="spacing">
       <number>6</number>
@@ -316,60 +389,6 @@
      </item>
     </layout>
    </item>
-   <item row="6" column="0">
-    <layout class="QHBoxLayout" name="horizontalLayout9">
-     <item>
-      <widget class="QCheckBox" name="pluralCB">
-       <property name="toolTip">
-        <string>Use plural form of formatted reference. (Works only for 
formatted references, and only if you are using refstyle.)</string>
-       </property>
-       <property name="text">
-        <string>Plural</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QCheckBox" name="capsCB">
-       <property name="toolTip">
-        <string>Use capitalized form of formatted reference. (Works only for 
formatted references, and only if you are using refstyle.)</string>
-       </property>
-       <property name="text">
-        <string>Capitalized</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QCheckBox" name="noprefixCB">
-       <property name="toolTip">
-        <string>Do not output part of label before &quot;:&quot;</string>
-       </property>
-       <property name="text">
-        <string>No Prefix</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QCheckBox" name="nolinkCB">
-       <property name="text">
-        <string>No Hyperlink</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
   </layout>
  </widget>
  <tabstops>
diff --git a/src/insets/InsetRef.cpp b/src/insets/InsetRef.cpp
index 9cd0ddabf6..3233be0c3f 100644
--- a/src/insets/InsetRef.cpp
+++ b/src/insets/InsetRef.cpp
@@ -78,6 +78,7 @@ ParamInfo const & InsetRef::findInfo(string const & /* 
cmdName */)
                param_info_.add("caps", ParamInfo::LYX_INTERNAL);
                param_info_.add("noprefix", ParamInfo::LYX_INTERNAL);
                param_info_.add("nolink", ParamInfo::LYX_INTERNAL);
+               param_info_.add("options", ParamInfo::LYX_INTERNAL);
        }
        return param_info_;
 }
@@ -205,10 +206,16 @@ docstring InsetRef::getFormattedCmd(docstring const & ref,
        docstring & label, docstring & prefix, string const xref_package,
        bool use_caps)
 {
-       bool const use_cleveref = xref_package == "cleveref";
-       docstring const crefcmd = use_caps ? from_ascii("\\Cref") : 
from_ascii("\\cref");
-       static docstring const defcmd = use_cleveref ? crefcmd : 
from_ascii("\\ref");
-       static docstring const prtcmd = use_cleveref ? crefcmd : 
from_ascii("\\prettyref");
+       docstring defcmd = from_ascii("\\ref");
+       docstring prtcmd = from_ascii("\\prettyref");
+       if (xref_package == "cleveref") {
+               docstring const crefcmd = use_caps ? from_ascii("\\Cref") : 
from_ascii("\\cref");
+               defcmd = crefcmd;
+               prtcmd = crefcmd;
+       } else if  (xref_package == "zref") {
+               defcmd = from_ascii("\\zcref");
+               prtcmd = from_ascii("\\zcref");
+       }
 
 
        label = split(ref, prefix, ':');
@@ -267,7 +274,10 @@ void InsetRef::latex(otexstream & os, OutputParams const & 
rp) const
        docstring const & data = getEscapedLabel(rp);
        bool const hyper_on = buffer().masterParams().pdfoptions().use_hyperref;
        bool const use_nolink = hyper_on && getParam("nolink") == "true";
+       bool const use_caps   = getParam("caps") == "true";
+       bool const use_plural = getParam("plural") == "true";
        bool const use_cleveref = buffer().masterParams().xref_package == 
"cleveref";
+       bool const use_zref = buffer().masterParams().xref_package == "zref";
 
        if (rp.inulemcmd > 0)
                os << "\\mbox{";
@@ -284,15 +294,23 @@ void InsetRef::latex(otexstream & os, OutputParams const 
& rp) const
        } else if (cmd == "formatted") {
                docstring label;
                docstring prefix;
-               bool const use_caps     = getParam("caps") == "true";
-               bool const use_plural   = getParam("plural") == "true";
                docstring const fcmd =
                        getFormattedCmd(data, label, prefix, 
buffer().masterParams().xref_package, use_caps);
                os << fcmd;
-               if (use_cleveref && use_nolink)
+               if ((use_cleveref || use_zref) && use_nolink)
                        os << "*";
                if (buffer().masterParams().xref_package == "refstyle" && 
use_plural)
                        os << "[s]";
+               else if (use_zref) {
+                       docstring opts = getParam("options");
+                       if (use_caps) {
+                               if (!opts.empty())
+                                       opts +=", ";
+                               opts += "S";
+                       }
+                       if (!opts.empty())
+                               os << "[" << opts << "]";
+               }
                if (contains(label, ' '))
                        // refstyle bug: labels with blanks need to be grouped
                        // otherwise the blanks will be gobbled
@@ -300,8 +318,6 @@ void InsetRef::latex(otexstream & os, OutputParams const & 
rp) const
                else
                        os << '{' << label << '}';
        } else if (cmd == "nameref" && use_cleveref && (use_nolink || 
!hyper_on)) {
-               bool const use_caps     = getParam("caps") == "true";
-               bool const use_plural   = getParam("plural") == "true";
                docstring const crefcmd = use_caps ? from_ascii("Cref") : 
from_ascii("cref");
                os << "\\name" << crefcmd;
                if (use_plural)
@@ -321,6 +337,19 @@ void InsetRef::latex(otexstream & os, OutputParams const & 
rp) const
                                os << suffix;
                        }
                }
+       } else if ((cmd == "vref" || cmd == "vpageref") && use_zref) {
+               os << "\\z" << cmd;
+               if (use_nolink)
+                       os << "*";
+               docstring opts = getParam("options");
+               if (use_caps) {
+                       if (!opts.empty())
+                               opts +=", ";
+                       opts += "S";
+               }
+               if (!opts.empty())
+                       os << "[" << opts << "]";
+               os << '{' << data << '}';
        } else {
                InsetCommandParams p(REF_CODE, cmd);
                bool const use_nolink = hyper_on && getParam("nolink") == 
"true";
@@ -609,9 +638,12 @@ void InsetRef::addToToc(DocIterator const & cpit, bool 
output_active,
 void InsetRef::validate(LaTeXFeatures & features) const
 {
        string const & cmd = getCmdName();
-       if (cmd == "vref" || cmd == "vpageref")
-               features.require("varioref");
-       else if (cmd == "formatted") {
+       if (cmd == "vref" || cmd == "vpageref") {
+               if (buffer().masterParams().xref_package == "zref")
+                       features.require("zref-vario");
+               else
+                       features.require("varioref");
+       } else if (cmd == "formatted") {
                docstring const data = getEscapedLabel(features.runparams());
                docstring label;
                docstring prefix;
@@ -629,6 +661,8 @@ void InsetRef::validate(LaTeXFeatures & features) const
                        }
                } else if (buffer().masterParams().xref_package == "cleveref") {
                        features.require("cleveref");
+               } else if (buffer().masterParams().xref_package == "zref") {
+                       features.require("zref-clever");
                } else {
                        features.require("prettyref");
                        // prettyref uses "cha" for chapters, so we provide a 
kind of
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to