commit faf40fb4084e10848bbb33ec6d892c05843cd179
Author: Juergen Spitzmueller <[email protected]>
Date: Sun Aug 26 09:48:23 2018 +0200
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
---
src/tex2lyx/TODO.txt | 1 -
src/tex2lyx/text.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt
index dc76136..93dd5e9 100644
--- a/src/tex2lyx/TODO.txt
+++ b/src/tex2lyx/TODO.txt
@@ -36,7 +36,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
546 Landscape support
\begin{landscape}...\end{landscape} \begin_inset Flex Landscape (see
#11259)
555 V column type (varwidth package) Automatically detected with
newlines, paragraph breaks and environment content in cells of rows
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index ed86635..34bf04d 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
@@ -4182,21 +4200,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");
@@ -4225,8 +4259,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;
}