commit f0fae27030f8624009296e6968e1221346fc1f83
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Fri Mar 28 16:17:37 2025 +0100

    tex2lyx support for crossref ranges
---
 development/FORMAT                              |  2 +-
 src/tex2lyx/test/test-insets-basic.lyx.lyx      |  7 +++
 src/tex2lyx/test/test-insets.lyx.lyx            |  7 +++
 src/tex2lyx/test/test-minted.lyx.lyx            |  5 ++
 src/tex2lyx/test/test-refstyle-theorems.lyx.lyx | 27 +++++++++
 src/tex2lyx/test/test.lyx.lyx                   |  2 +
 src/tex2lyx/text.cpp                            | 80 ++++++++++++++++++++-----
 7 files changed, 115 insertions(+), 15 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index 51ed4483aa..e905d1b983 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -17,7 +17,7 @@ changes happened in particular if possible. A good example 
would be
          1. \cpageref or \Cpageref with cleveref
          2. \zcpageref with zref
        - New supported LaTeX commands:
-         1. \vrefrange, \vpagerange (varioref) with LatexCommand vref
+         1. \vrefrange, \vpagerefrange (varioref) with LatexCommand vref
             and LatexCommand vpageref and a list of two labels.
          2. \<type>rangeref (refstyle) with two labels and tuple=range
          3. \crefrange, \CRefrange (cleveref) with dito conditions
diff --git a/src/tex2lyx/test/test-insets-basic.lyx.lyx 
b/src/tex2lyx/test/test-insets-basic.lyx.lyx
index acacba58ad..bbf8f1f04b 100644
--- a/src/tex2lyx/test/test-insets-basic.lyx.lyx
+++ b/src/tex2lyx/test/test-insets-basic.lyx.lyx
@@ -222,6 +222,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -250,6 +251,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -266,6 +268,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -282,6 +285,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -298,6 +302,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -314,6 +319,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -330,6 +336,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
diff --git a/src/tex2lyx/test/test-insets.lyx.lyx 
b/src/tex2lyx/test/test-insets.lyx.lyx
index 82717a6a57..48ac82a55a 100644
--- a/src/tex2lyx/test/test-insets.lyx.lyx
+++ b/src/tex2lyx/test/test-insets.lyx.lyx
@@ -202,6 +202,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -230,6 +231,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -246,6 +248,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -262,6 +265,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -278,6 +282,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -294,6 +299,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -310,6 +316,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
diff --git a/src/tex2lyx/test/test-minted.lyx.lyx 
b/src/tex2lyx/test/test-minted.lyx.lyx
index 380455f3f7..117c7ad97a 100644
--- a/src/tex2lyx/test/test-minted.lyx.lyx
+++ b/src/tex2lyx/test/test-minted.lyx.lyx
@@ -134,6 +134,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -304,6 +305,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -375,6 +377,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -440,6 +443,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -497,6 +501,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
diff --git a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx 
b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
index 41eef01818..9096cfff69 100644
--- a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
+++ b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
@@ -110,6 +110,7 @@ reference "part:part"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -135,6 +136,7 @@ reference "chap:chapter"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -160,6 +162,7 @@ reference "sec:Section"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -185,6 +188,7 @@ reference "subsec:subsection"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -210,6 +214,7 @@ reference "subsec:Subsubsection"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -235,6 +240,7 @@ reference "par:paragraph"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -260,6 +266,7 @@ reference "par:subparagraph"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -319,6 +326,7 @@ reference "fig:figure"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -378,6 +386,7 @@ reference "tab:table"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -437,6 +446,7 @@ reference "alg:algorithm"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -473,6 +483,7 @@ reference "fn:foot"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -510,6 +521,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -535,6 +547,7 @@ reference "enu:item"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -559,6 +572,7 @@ reference "eq:A=00003DB"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -584,6 +598,7 @@ reference "lem:lemma"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -609,6 +624,7 @@ reference "thm:theorem"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -634,6 +650,7 @@ reference "cor:corollary"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -659,6 +676,7 @@ reference "prop:proposition"
 plural "false"
 caps "false"
 noprefix "false"
+tuple "list"
 
 \end_inset
 
@@ -685,6 +703,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -711,6 +730,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -737,6 +757,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -763,6 +784,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -789,6 +811,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -815,6 +838,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -841,6 +865,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -867,6 +892,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -893,6 +919,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
diff --git a/src/tex2lyx/test/test.lyx.lyx b/src/tex2lyx/test/test.lyx.lyx
index 14d1b67992..a03f4f2ea9 100644
--- a/src/tex2lyx/test/test.lyx.lyx
+++ b/src/tex2lyx/test/test.lyx.lyx
@@ -439,6 +439,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
@@ -450,6 +451,7 @@ plural "false"
 caps "false"
 noprefix "false"
 nolink "false"
+tuple "list"
 
 \end_inset
 
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index 72ec552425..7e18b42382 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -151,28 +151,36 @@ char const * const known_babel_shorthands[] = { "\"", 
"|", "-", "~", "=", "/",
 
 char const * const known_ref_commands[] = { "ref", "pageref", "vref",
  "vpageref", "prettyref", "nameref", "eqref", "cref", "Cref", "namecref",
- "nameCref", "namecrefs", "nameCrefs", 0 };
+ "nameCref", "namecrefs", "nameCrefs", "cpageref", "labelcref",
+ "labelcpageref", "vrefrange", "vpagerefrange", "crefrange", "Crefrange", 0 };
 
 char const * const known_coded_ref_commands[] = { "ref", "pageref", "vref",
  "vpageref", "formatted", "nameref", "eqref", "formatted", "formatted", 
"nameref",
- "nameref", "nameref", "nameref", 0 };
+ "nameref", "nameref", "nameref", "cpageref", "ref", "pageref",
+  "vref", "vpageref", "formatted", "formatted", 0 };
 
 char const * const known_starref_commands[] = { "ref", "pageref", "vref",
- "vpageref", "nameref", "eqref", "cref", "Cref", 0 };
+ "vpageref", "nameref", "eqref", "cref", "Cref", "cpageref", 0 };
 
 char const * const known_refstyle_commands[] = { "algref", "chapref", "corref",
  "eqref", "enuref", "figref", "fnref", "lemref", "parref", "partref", 
"propref",
- "secref", "subsecref", "tabref", "thmref", 0 };
+ "secref", "subsecref", "tabref", "thmref",
+"algrangeref", "chaprangeref", "corrangeref",
+ "eqrangeref", "enurangeref", "figrangeref", "fnrangeref", "lemrangeref", 
"parrangeref", "partrangeref", "proprangeref",
+ "secrangeref", "subsecrangeref", "tabrangeref", "thmrangeref", 0 };
 
 char const * const known_refstyle_prefixes[] = { "alg", "chap", "cor",
  "eq", "enu", "fig", "fn", "lem", "par", "part", "prop",
- "sec", "subsec", "tab", "thm", 0 };
+ "sec", "subsec", "tab", "thm",
+ "alg", "chap", "cor",
+  "eq", "enu", "fig", "fn", "lem", "par", "part", "prop",
+  "sec", "subsec", "tab", "thm", 0 };
 
-char const * const known_zref_commands[] = { "zcref", "zvref",
- "zvpageref", 0 };
+char const * const known_zref_commands[] = { "zcref", "zcpageref", "zvref",
+ "zvpageref", "zvrefrange", "zvpagerefrange", 0 };
 
-char const * const known_coded_zref_commands[] = { "formatted", "vref",
- "vpageref", 0 };
+char const * const known_coded_zref_commands[] = { "formatted", "cpageref", 
"vref",
+ "vpageref", "vref", "vpageref", 0 };
 
 
 /**
@@ -4578,11 +4586,22 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                        // remove the grouping
                        if (contains(arg, ' '))
                                arg = ltrim(rtrim(arg, "}"), "{");
+                       if (contains(t.cs(), "range")) {
+                               string arg2 = p.getArg('{', '}');
+                               if (contains(arg2, ' '))
+                                       arg2 = ltrim(rtrim(arg2, "}"), "{");
+                               if (!arg2.empty())
+                                       arg += "," + arg2;
+                       }
                        os << convert_literate_command_inset_arg(arg)
                           << "\"\n";
                        os << "plural \"" << plural << "\"\n";
                        os << "caps \"" << cap << "\"\n";
                        os << "noprefix \"false\"\n";
+                       if (contains(t.cs(), "range"))
+                               os << "tuple \"range\"\n";
+                       else
+                               os << "tuple \"list\"\n";
                        end_inset(os);
                        preamble.registerAutomaticallyLoadedPackage("refstyle");
                        continue;
@@ -4605,8 +4624,14 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                                context.check_layout(os);
                                begin_command_inset(os, "ref",
                                        known_coded_ref_commands[where - 
known_ref_commands]);
+                               string arg = p.getArg('{', '}');
+                               if (contains(t.cs(), "range")) {
+                                       string arg2 = p.getArg('{', '}');
+                                       if (!arg2.empty())
+                                               arg += "," + arg2;
+                               }
                                os << "reference \""
-                                  << 
convert_literate_command_inset_arg(p.verbatim_item())
+                                  << convert_literate_command_inset_arg(arg)
                                   << "\"\n";
                                if (plural)
                                        os << "plural \"true\"\n";
@@ -4621,8 +4646,13 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                                        os << "nolink \"true\"\n";
                                else
                                        os << "nolink \"false\"\n";
+                               if (contains(t.cs(), "range"))
+                                       os << "tuple \"range\"\n";
+                               else
+                                       os << "tuple \"list\"\n";
                                end_inset(os);
-                               if (t.cs() == "vref" || t.cs() == "vpageref")
+                               if (t.cs() == "vref" || t.cs() == "vpageref"
+                                   || t.cs() == "vrefrange" || t.cs() == 
"vpagerefrange")
                                        
preamble.registerAutomaticallyLoadedPackage("varioref");
                                else if (t.cs() == "prettyref")
                                        
preamble.registerAutomaticallyLoadedPackage("prettyref");
@@ -4640,6 +4670,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, 
bool outer,
                     && preamble.crossrefPackage() == "zref") {
                        bool starred = false;
                        bool caps = false;
+                       bool range = false;
+                       bool noname = false;
+                       bool page = false;
                        if (p.next_token().asInput() == "*") {
                                starred = true;
                                p.get_token();
@@ -4650,6 +4683,12 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                        for (auto const & opt : opts) {
                                if (opt == "S")
                                        caps = true;
+                               if (opt == "range")
+                                       range = true;
+                               if (opt == "noname" && t.cs() == "zcref")
+                                       noname = true;
+                               if (opt == "page" && t.cs() == "zcref")
+                                       page = true;
                                else {
                                        if (!first)
                                                options += ",";
@@ -4658,10 +4697,19 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                                }
                        }
                        context.check_layout(os);
-                       begin_command_inset(os, "ref",
-                               known_coded_zref_commands[where - 
known_zref_commands]);
+                       string lyxname = known_coded_zref_commands[where - 
known_zref_commands];
+                       if (noname) 
+                               lyxname = (page) ? "pageref" : "ref";
+                       begin_command_inset(os, "ref", lyxname);
+                       string arg = p.getArg('{', '}');
+                       if (contains(t.cs(), "range")) {
+                               range = true;
+                               string arg2 = p.getArg('{', '}');
+                               if (!arg2.empty())
+                                       arg += "," + arg2;
+                       }
                        os << "reference \""
-                          << 
convert_literate_command_inset_arg(p.verbatim_item())
+                          << convert_literate_command_inset_arg(arg)
                           << "\"\n";
                        os << "plural \"false\"\n";
                        if (caps)
@@ -4673,6 +4721,10 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                                os << "nolink \"true\"\n";
                        else
                                os << "nolink \"false\"\n";
+                       if (range)
+                               os << "tuple \"range\"\n";
+                       else
+                               os << "tuple \"list\"\n";
                        end_inset(os);
                        if (t.cs() == "zvref" || t.cs() == "zvpageref")
                                
preamble.registerAutomaticallyLoadedPackage("zref-vario");
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to