X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetListingsParams.cpp;h=998554c395c7f3f6e33c4798c2fb469b3b6e0c36;hb=131f4b92bac3ecb75b47c266dfa3d8543bd4d578;hp=4fde290d6e94cc6b916cf216c145d7a23747d360;hpb=3f61375bc390fcd9dbe6e643b71ca121cf68ebe4;p=lyx.git diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index 4fde290d6e..998554c395 100644 --- a/src/insets/InsetListingsParams.cpp +++ b/src/insets/InsetListingsParams.cpp @@ -102,7 +102,7 @@ docstring ListingsParam::validate(string const & par) const bool unclosed = false; string par2 = par; // braces are allowed - if (prefixIs(par, "{") && suffixIs(par, "}") && !suffixIs(par, "\\}")) + if (prefixIs(par, "{") && suffixIs(par, "}") && !suffixIs(par, "\\}")) par2 = par.substr(1, par.size() - 2); // check for unmatched braces @@ -114,7 +114,7 @@ docstring ListingsParam::validate(string const & par) const --braces; } unclosed = braces != 0; - + switch (type_) { case ALL: @@ -269,6 +269,31 @@ char const * allowed_languages = "[97]VRML\nXML\nXSLT"; +/// Return language allowed in the GUI without dialect and proper casing +string const languageonly(string const & lang) +{ + string const locase = ascii_lowercase(trim(lang, "{}")); + string const all_languages = ascii_lowercase(allowed_languages) + "\n"; + string language = (lang.at(0) == '[') ? locase + "\n" + : string("]") + locase + "\n"; + size_t i = all_languages.find(language); + if (i == string::npos && lang.at(0) != '[') { + language[0] = '\n'; + i = all_languages.find(language); + } + if (i == string::npos) + return lang; + if (all_languages.at(i) == '[') + i = all_languages.find(']', i); + if (i == string::npos) + return lang; + size_t j = all_languages.find('\n', i + 1); + if (j == string::npos) + return lang; + return string(allowed_languages).substr(i + 1, j - i - 1); +} + + /// ListingsParam Validator. /// This class is aimed to be a singleton which is instantiated in /// \c InsetListingsParams::addParam(). @@ -889,10 +914,10 @@ docstring ParValidator::validate(string const & name, _("Available listing parameters are %1$s"), from_ascii(param_names)); else return bformat( - _("Available listings parameters containing string \"%1$s\" are %2$s"), + _("Available listings parameters containing string \"%1$s\" are %2$s"), from_utf8(suffix), from_utf8(param_names)); } - + // locate name in parameter table ListingsParams::const_iterator it = all_params_[p].find(name); if (it != all_params_[p].end()) { @@ -934,7 +959,7 @@ bool ParValidator::onoff(string const & name) const return false; } -} // namespace anon. +} // namespace // define a global ParValidator ParValidator * par_validator = 0; @@ -944,13 +969,13 @@ ParValidator * par_validator = 0; int InsetListingsParams::package_ = 0; InsetListingsParams::InsetListingsParams() - : inline_(false), params_(), status_(InsetCollapsable::Open) + : inline_(false), params_(), status_(InsetCollapsible::Open) { } InsetListingsParams::InsetListingsParams(string const & par, bool in, - InsetCollapsable::CollapseStatus s) + InsetCollapsible::CollapseStatus s) : inline_(in), params_(), status_(s) { // this will activate parameter validation. @@ -971,9 +996,9 @@ void InsetListingsParams::write(ostream & os) const void InsetListingsParams::read(Lexer & lex) { lex >> inline_; - int s = InsetCollapsable::Collapsed; + int s = InsetCollapsible::Collapsed; lex >> s; - status_ = static_cast(s); + status_ = static_cast(s); string par; lex >> par; fromEncodedString(par); @@ -1019,12 +1044,15 @@ string InsetListingsParams::getValue(string const & key) const } -void InsetListingsParams::addParam(string const & key, - string const & value, bool replace) +void InsetListingsParams::addParam(string const & key, + string const & val, bool replace) { if (key.empty()) return; + bool const is_minted_language = minted() && key == "language"; + string const value = (is_minted_language && !val.empty()) + ? languageonly(val) : val; // duplicate parameters! string keyname = key; if (!replace && hasParam(key)) @@ -1049,7 +1077,7 @@ void InsetListingsParams::addParam(string const & key, has_special_char = true; break; } - if (has_special_char) + if (has_special_char && !is_minted_language) params_.push_back(make_pair(keyname, "{" + value + "}")); else params_.push_back(make_pair(keyname, value)); @@ -1083,7 +1111,7 @@ void InsetListingsParams::addParams(string const & par) } else if (par[i] == '{' && i > 0 && par[i-1] != '\\') // don't count a brace in first position ++braces; - else if (par[i] == '}' && i != par.size() - 1 + else if (par[i] == '}' && i != par.size() - 1 && (i == 0 || (i > 0 && par[i-1] != '\\'))) --braces;