From: Juergen Spitzmueller Date: Sun, 26 Aug 2018 07:48:23 +0000 (+0200) Subject: tex2lyx: support for plural and capitalized refstyle X-Git-Tag: 2.3.2~96 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a6fa2d721e6d9a7756ac88e717a4120a21bdddf5;p=lyx.git tex2lyx: support for plural and capitalized refstyle Also fix a glitch in non-refstyle import (getOpt() returns the option with delimiter, so do not add them in ERT once more) Candidate for stable (cherry picked from commit faf40fb4084e10848bbb33ec6d892c05843cd179) --- diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index a5f4f8ac3e..7244a6b4f7 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -34,8 +34,6 @@ Format LaTeX feature LyX feature 443 unicode-math.sty InsetMath* 453 automatic stmaryrd loading \use_package stmaryrd 457 automatic stackrel loading \use_package stackrel -526 Plural and capitalized refstyles InsetRef - General diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index 2e10421b73..38b03d9179 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -539,6 +539,24 @@ string const fromPolyglossiaEnvironment(string const s) } +string uncapitalize(string const s) +{ + docstring in = from_ascii(s); + char_type t = lowercase(s[0]); + in[0] = t; + return to_ascii(in); +} + + +bool isCapitalized(string const s) +{ + docstring in = from_ascii(s); + char_type t = uppercase(s[0]); + in[0] = t; + return to_ascii(in) == s; +} + + } // namespace @@ -4041,21 +4059,37 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, continue; } - // handle refstyle first to catch \eqref which can also occur - // without refstyle. Only recognize these commands if + // Handle refstyle first in order to to catch \eqref, because this + // can also occur without refstyle. Only recognize these commands if // refstyle.sty was found in the preamble (otherwise \eqref // and user defined ref commands could be misdetected). - if ((where = is_known(t.cs(), known_refstyle_commands)) + // We uncapitalize the input in order to catch capitalized commands + // such as \Eqref. + if ((where = is_known(uncapitalize(t.cs()), known_refstyle_commands)) && preamble.refstyle()) { + string const cap = isCapitalized(t.cs()) ? "true" : "false"; + string plural = "false"; + // Catch the plural option [s] + if (p.hasOpt()) { + string const opt = p.getOpt(); + if (opt == "[s]") + plural = "true"; + else { + // LyX does not yet support other optional arguments of ref commands + output_ert_inset(os, t.asInput() + opt + "{" + + p.verbatim_item() + '}', context); + continue; + } + } context.check_layout(os); begin_command_inset(os, "ref", "formatted"); os << "reference \""; os << known_refstyle_prefixes[where - known_refstyle_commands] << ":"; - os << convert_literate_command_inset_arg(p.verbatim_item()) + os << convert_literate_command_inset_arg(p.getArg('{', '}')) << "\"\n"; - os << "plural \"false\"\n"; - os << "caps \"false\"\n"; + os << "plural \"" << plural << "\"\n"; + os << "caps \"" << cap << "\"\n"; os << "noprefix \"false\"\n"; end_inset(os); preamble.registerAutomaticallyLoadedPackage("refstyle"); @@ -4084,8 +4118,8 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, preamble.registerAutomaticallyLoadedPackage("prettyref"); } else { // LyX does not yet support optional arguments of ref commands - output_ert_inset(os, t.asInput() + '[' + opt + "]{" + - p.verbatim_item() + '}', context); + output_ert_inset(os, t.asInput() + opt + "{" + + p.verbatim_item() + '}', context); } continue; } diff --git a/status.23x b/status.23x index 81a153c0c1..b0c95fde19 100644 --- a/status.23x +++ b/status.23x @@ -43,6 +43,8 @@ What's new - Add support for decimal alignment in table cells. +- Add support for plural and capitalized refstyle references. + * USER INTERFACE