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