[LyX/2.3.x] Check character encodability with pass-thru in command insets

Juergen Spitzmueller spitz at lyx.org
Thu Mar 26 06:35:39 UTC 2020


commit e1c29a0510d7df071b9f3be64eaaf4af502aff72
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Tue May 21 12:59:18 2019 +0200

    Check character encodability with pass-thru in command insets
    
    Fixes: #11584
    (cherry picked from commit ebc2b1295a0464dde6c20a09ddc249c463a21c79)
---
 src/insets/InsetCommandParams.cpp |   37 +++++++++++++++++++++++++++++++++++--
 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/insets/InsetCommandParams.cpp b/src/insets/InsetCommandParams.cpp
index 741f6aa..02a583f 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


More information about the lyx-cvs mailing list