From: Juergen Spitzmueller Date: Tue, 21 May 2019 10:59:18 +0000 (+0200) Subject: Check character encodability with pass-thru in command insets X-Git-Tag: 2.3.5~81 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e1c29a0510d7df071b9f3be64eaaf4af502aff72;p=features.git Check character encodability with pass-thru in command insets Fixes: #11584 (cherry picked from commit ebc2b1295a0464dde6c20a09ddc249c463a21c79) --- diff --git a/src/insets/InsetCommandParams.cpp b/src/insets/InsetCommandParams.cpp index 741f6aa940..02a583f1ce 100644 --- a/src/insets/InsetCommandParams.cpp +++ b/src/insets/InsetCommandParams.cpp @@ -490,8 +490,41 @@ docstring InsetCommandParams::prepareCommand(OutputParams const & runparams, } else if (handling & ParamInfo::HANDLING_ESCAPE) result = escape(command); - else if (handling & ParamInfo::HANDLING_NONE) - result = command; + else if (handling & ParamInfo::HANDLING_NONE) { + // we can only output characters covered by the current + // encoding! + docstring uncodable; + for (size_type i = 0 ; i < command.size() ; ++i) { + char_type c = command[i]; + try { + if (runparams.encoding->encodable(c)) + result += c; + else if (runparams.dryrun) { + result += "<" + _("LyX Warning: ") + + _("uncodable character") + " '"; + result += docstring(1, c); + result += "'>"; + } else + uncodable += c; + } catch (EncodingException & /* e */) { + if (runparams.dryrun) { + result += "<" + _("LyX Warning: ") + + _("uncodable character") + " '"; + result += docstring(1, c); + result += "'>"; + } else + uncodable += c; + } + } + if (!uncodable.empty() && !runparams.silent) { + // issue a warning about omitted characters + // FIXME: should be passed to the error dialog + frontend::Alert::warning(_("Uncodable characters in nomenclature inset"), + bformat(_("The following characters in one of the nomenclature listings are\n" + "not representable in the current encoding and have been omitted:\n%1$s."), + uncodable)); + } + } // INDEX_ESCAPE is independent of the others if (handling & ParamInfo::HANDLING_INDEX_ESCAPE) { // Now escape special commands