Listings: Validate skip amounts correctly.

Fixes: #7373.
This commit is contained in:
Juergen Spitzmueller 2014-05-07 12:33:39 +02:00
parent 015333d987
commit d7e9ab08a3

View File

@ -35,6 +35,7 @@ enum param_type {
TRUEFALSE, // accept 'true' or 'false' TRUEFALSE, // accept 'true' or 'false'
INTEGER, // accept an integer INTEGER, // accept an integer
LENGTH, // accept a latex length LENGTH, // accept a latex length
SKIP, // accept a skip or a length
ONEOF, // accept one of a few values ONEOF, // accept one of a few values
SUBSETOF // accept a string composed of given characters 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 docstring ListingsParam::validate(string const & par) const
{ {
bool unclosed = false; bool unclosed = false;
@ -163,6 +167,20 @@ docstring ListingsParam::validate(string const & par) const
return _("Unbalanced braces!"); return _("Unbalanced braces!");
return docstring(); 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: { case ONEOF: {
if (par2.empty() && !onoff_) { if (par2.empty() && !onoff_) {
if (!hint_.empty()) if (!hint_.empty())
@ -296,11 +314,11 @@ ParValidator::ParValidator()
all_params_["floatplacement"] = all_params_["floatplacement"] =
ListingsParam("tbp", false, SUBSETOF, "tbp", empty_hint); ListingsParam("tbp", false, SUBSETOF, "tbp", empty_hint);
all_params_["aboveskip"] = all_params_["aboveskip"] =
ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint); ListingsParam("\\medskipamount", false, SKIP, "", empty_hint);
all_params_["belowskip"] = all_params_["belowskip"] =
ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint); ListingsParam("\\medskipamount", false, SKIP, "", empty_hint);
all_params_["lineskip"] = all_params_["lineskip"] =
ListingsParam("", false, LENGTH, "", empty_hint); ListingsParam("", false, SKIP, "", empty_hint);
all_params_["boxpos"] = all_params_["boxpos"] =
ListingsParam("", false, SUBSETOF, "bct", empty_hint); ListingsParam("", false, SUBSETOF, "bct", empty_hint);
all_params_["print"] = all_params_["print"] =
@ -423,9 +441,9 @@ ParValidator::ParValidator()
all_params_["captionpos"] = all_params_["captionpos"] =
ListingsParam("", false, SUBSETOF, "tb", empty_hint); ListingsParam("", false, SUBSETOF, "tb", empty_hint);
all_params_["abovecaptionskip"] = all_params_["abovecaptionskip"] =
ListingsParam("", false, LENGTH, "", empty_hint); ListingsParam("", false, SKIP, "", empty_hint);
all_params_["belowcaptionskip"] = all_params_["belowcaptionskip"] =
ListingsParam("", false, LENGTH, "", empty_hint); ListingsParam("", false, SKIP, "", empty_hint);
all_params_["linewidth"] = all_params_["linewidth"] =
ListingsParam("", false, LENGTH, "", empty_hint); ListingsParam("", false, LENGTH, "", empty_hint);
all_params_["xleftmargin"] = all_params_["xleftmargin"] =