commit af4e5aefe0db1bfd65482d2cae995a81f49e7a7c
Author: Juergen Spitzmueller <[email protected]>
Date: Fri May 15 09:50:25 2020 +0200
Check class options for uncodable glyphs
Fixes #11865
(cherry picked from commit 11dc817e9d13ab065908d99ba6dd5f0b9b4f6e64)
---
src/BufferParams.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
status.23x | 2 ++
2 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 9a15849..11a7842 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -1722,12 +1722,52 @@ bool BufferParams::writeLaTeX(otexstream & os,
LaTeXFeatures & features,
if (!options.empty()) {
clsoptions << options << ',';
}
-
- string strOptions(clsoptions.str());
+
+ docstring const strOptions = from_utf8(clsoptions.str());
if (!strOptions.empty()) {
- strOptions = rtrim(strOptions, ",");
- // FIXME UNICODE
- os << '[' << from_utf8(strOptions) << ']';
+ // Check if class options contain uncodable glyphs
+ docstring uncodable_glyphs;
+ docstring options_encodable;
+ Encoding const * const enc = features.runparams().encoding;
+ if (enc) {
+ for (size_t n = 0; n < strOptions.size(); ++n) {
+ char_type c = strOptions[n];
+ if (!enc->encodable(c)) {
+ docstring const glyph(1, c);
+ LYXERR0("Uncodable character '"
+ << glyph
+ << "' in class options!");
+ uncodable_glyphs += glyph;
+ if (features.runparams().dryrun) {
+ options_encodable += "<" +
_("LyX Warning: ")
+ + _("uncodable character") +
" '";
+ options_encodable += c;
+ options_encodable += "'>";
+ }
+ } else
+ options_encodable += c;
+ }
+ } else
+ options_encodable = strOptions;
+
+ // On BUFFER_VIEW|UPDATE, warn user if we found uncodable glyphs
+ if (!features.runparams().dryrun && !uncodable_glyphs.empty()) {
+ frontend::Alert::warning(
+ _("Uncodable character in class options"),
+ support::bformat(
+ _("The class options of your document contain
glyphs "
+ "that are unknown in the current document
encoding "
+ "(namely %1$s).\nThese glyphs are omitted "
+ " from the output, which may result in "
+ "incomplete output."
+ "\n\nPlease select an appropriate "
+ "document encoding\n"
+ "(such as utf8) or change the "
+ "class options accordingly."),
+ uncodable_glyphs));
+ }
+ options_encodable = rtrim(options_encodable, ",");
+ os << '[' << options_encodable << ']';
}
os << '{' << from_ascii(tclass.latexname()) << "}\n";
diff --git a/status.23x b/status.23x
index a34e52e..4b05d28 100644
--- a/status.23x
+++ b/status.23x
@@ -47,6 +47,8 @@ What's new
- Fix crash with non-encodable glyph in nomcenlature inset (bug 11584).
+- Fix crash with non-encodable glyph in class options (bug 11865).
+
- Fix problems with non-ASCII characters in file path with recent LaTeX
(bug 11146).
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs