From: Juergen Spitzmueller Date: Wed, 7 May 2014 10:33:39 +0000 (+0200) Subject: Listings: Validate skip amounts correctly. X-Git-Tag: 2.2.0alpha1~1970 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=d7e9ab08a3497219136b2f8af27ce4a348b990ca;p=features.git Listings: Validate skip amounts correctly. Fixes: #7373. --- diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index a24d43fb0c..d365d89987 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"] =