commit faf40fb4084e10848bbb33ec6d892c05843cd179
Author: Juergen Spitzmueller <sp...@lyx.org>
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;
                }

Reply via email to