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";
// end of \documentclass defs
+ // The package options (via \PassOptionsToPackage)
+ os << from_ascii(features.getPackageOptions());
+
// if we use fontspec or newtxmath, we have to load the AMS packages here
string const ams = features.loadAMSPackages();
bool const ot1 = (main_font_encoding() == "default" || main_font_encoding() == "OT1");
if (paragraph_separation) {
// when skip separation
+ string psopt;
switch (getDefSkip().kind()) {
case VSpace::SMALLSKIP:
- os << "\\setlength{\\parskip}{\\smallskipamount}\n";
+ psopt = "[skip=\\smallskipamount]";
break;
case VSpace::MEDSKIP:
- os << "\\setlength{\\parskip}{\\medskipamount}\n";
+ psopt = "[skip=\\medskipamount]";
break;
case VSpace::BIGSKIP:
- os << "\\setlength{\\parskip}{\\bigskipamount}\n";
+ psopt = "[skip=\\bigskipamount]";
+ break;
+ case VSpace::HALFLINE:
+ break;
+ case VSpace::FULLLINE:
+ psopt = "[skip=\\baselineskip]";
break;
case VSpace::LENGTH:
- os << "\\setlength{\\parskip}{"
- << from_utf8(getDefSkip().length().asLatexString())
- << "}\n";
+ psopt = "[skip={" + getDefSkip().length().asLatexString() + "}]";
break;
- default: // should never happen // Then delete it.
- os << "\\setlength{\\parskip}{\\medskipamount}\n";
+ default:
break;
}
- os << "\\setlength{\\parindent}{0pt}\n";
+ if (features.isAvailable("parskip"))
+ os << "\\usepackage" + psopt + "{parskip}\n";
} else {
// when separation by indentation
// only output something when a width is given
os << "\\synctex=-1\n";
}
- // The package options (via \PassOptionsToPackage)
- os << from_ascii(features.getPackageOptions());
-
// due to interferences with babel and hyperref, the color package has to
// be loaded (when it is not already loaded) before babel when hyperref
// is used with the colorlinks option, see