commit d7e9ab08a3497219136b2f8af27ce4a348b990ca
Author: Juergen Spitzmueller <[email protected]>
Date: Wed May 7 12:33:39 2014 +0200
Listings: Validate skip amounts correctly.
Fixes: #7373.
diff --git a/src/insets/InsetListingsParams.cpp
b/src/insets/InsetListingsParams.cpp
index a24d43f..d365d89 100644
--- a/src/insets/InsetListingsParams.cpp
+++ b/src/insets/InsetListingsParams.cpp
@@ -35,6 +35,7 @@ enum param_type {
TRUEFALSE, // accept 'true' or 'false'
INTEGER, // accept an integer
LENGTH, // accept a latex length
+ SKIP, // accept a skip or a length
ONEOF, // accept one of a few values
SUBSETOF // accept a string composed of given characters
};
@@ -93,6 +94,9 @@ private:
};
+char const * allowed_skips =
"\\smallskipamount,\\medskipamount,\\bigskipamount";
+
+
docstring ListingsParam::validate(string const & par) const
{
bool unclosed = false;
@@ -163,6 +167,20 @@ docstring ListingsParam::validate(string const & par) const
return _("Unbalanced braces!");
return docstring();
+ case SKIP:
+ if (par2.empty() && !onoff_) {
+ if (!hint_.empty())
+ return hint_;
+ else
+ return bformat(_("Please specify a LaTeX length
expression or a skip amount (%1$s)"),
+ from_ascii(subst(allowed_skips,
",", ", ")));
+ }
+ if (!isValidLength(par2) && tokenPos(allowed_skips, ',', par2)
== -1)
+ return _("Not a valid LaTeX length expression or skip
amount.");
+ if (unclosed)
+ return _("Unbalanced braces!");
+ return docstring();
+
case ONEOF: {
if (par2.empty() && !onoff_) {
if (!hint_.empty())
@@ -296,11 +314,11 @@ ParValidator::ParValidator()
all_params_["floatplacement"] =
ListingsParam("tbp", false, SUBSETOF, "tbp", empty_hint);
all_params_["aboveskip"] =
- ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint);
+ ListingsParam("\\medskipamount", false, SKIP, "", empty_hint);
all_params_["belowskip"] =
- ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint);
+ ListingsParam("\\medskipamount", false, SKIP, "", empty_hint);
all_params_["lineskip"] =
- ListingsParam("", false, LENGTH, "", empty_hint);
+ ListingsParam("", false, SKIP, "", empty_hint);
all_params_["boxpos"] =
ListingsParam("", false, SUBSETOF, "bct", empty_hint);
all_params_["print"] =
@@ -423,9 +441,9 @@ ParValidator::ParValidator()
all_params_["captionpos"] =
ListingsParam("", false, SUBSETOF, "tb", empty_hint);
all_params_["abovecaptionskip"] =
- ListingsParam("", false, LENGTH, "", empty_hint);
+ ListingsParam("", false, SKIP, "", empty_hint);
all_params_["belowcaptionskip"] =
- ListingsParam("", false, LENGTH, "", empty_hint);
+ ListingsParam("", false, SKIP, "", empty_hint);
all_params_["linewidth"] =
ListingsParam("", false, LENGTH, "", empty_hint);
all_params_["xleftmargin"] =