]> git.lyx.org Git - features.git/commitdiff
Fix bug #11484
authorEnrico Forestieri <forenr@lyx.org>
Mon, 4 Feb 2019 09:49:02 +0000 (10:49 +0100)
committerEnrico Forestieri <forenr@lyx.org>
Tue, 5 Feb 2019 13:57:18 +0000 (14:57 +0100)
When splitting parameters at commas, take into account that
commas inside curly braces are not parameter separators.

(cherry picked from commit 6316b9b7aed7d67c585f8c17cce5669f8cbb5d65)

src/insets/InsetInclude.cpp
status.23x

index 437e0ea3094caeb94dd758841b0e9ddb4a362987..7c0d6ce5505a3f86d7b1cc15f2b9ed4cdf662b03 100644 (file)
@@ -165,6 +165,23 @@ InsetLabel * createLabel(Buffer * buf, docstring const & label_str)
        return new InsetLabel(buf, icp);
 }
 
+
+char_type replaceCommaInBraces(docstring & params)
+{
+       // Code point from private use area
+       char_type private_char = 0xE000;
+       int count = 0;
+       for (char_type & c : params) {
+               if (c == '{')
+                       ++count;
+               else if (c == '}')
+                       --count;
+               else if (c == ',' && count)
+                       c = private_char;
+       }
+       return private_char;
+}
+
 } // namespace
 
 
@@ -617,12 +634,18 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const
                docstring label;
                docstring placement;
                bool isfloat = lstparams.isFloat();
+               // We are going to split parameters at commas, so
+               // replace commas that are not parameter separators
+               // with a code point from the private use area
+               char_type comma = replaceCommaInBraces(parameters);
                // Get float placement, language, caption, and
                // label, then remove the relative options if minted.
                vector<docstring> opts =
                        getVectorFromString(parameters, from_ascii(","), false);
                vector<docstring> latexed_opts;
                for (size_t i = 0; i < opts.size(); ++i) {
+                       // Restore replaced commas
+                       opts[i] = subst(opts[i], comma, ',');
                        if (use_minted && prefixIs(opts[i], from_ascii("float"))) {
                                if (prefixIs(opts[i], from_ascii("float=")))
                                        placement = opts[i].substr(6);
index 2d7bd62fa4f7587f88f0ab401c6caeee02775775..e1402cfa1acd84aa9819ccfde062ddc582c48e1d 100644 (file)
@@ -87,6 +87,8 @@ What's new
 
 - Fix LaTeX export of query strings in Hyperlinks (bug 11482).
 
+- Fix breakage caused by commas in the caption of listings (bug 11484).
+
 
 * USER INTERFACE