change_bars = false;
postpone_fragile_content = true;
use_default_options = true;
- maintain_unincluded_children = false;
+ maintain_unincluded_children = CM_None;
secnumdepth = 3;
tocdepth = 3;
language = default_language;
} else if (token == "\\begin_includeonly") {
readIncludeonly(lex);
} else if (token == "\\maintain_unincluded_children") {
- lex >> maintain_unincluded_children;
+ string tmp;
+ lex >> tmp;
+ if (tmp == "no")
+ maintain_unincluded_children = CM_None;
+ else if (tmp == "mostly")
+ maintain_unincluded_children = CM_Mostly;
+ else if (tmp == "strict")
+ maintain_unincluded_children = CM_Strict;
} else if (token == "\\options") {
lex.eatLine();
options = lex.getString();
os << c << '\n';
os << "\\end_includeonly" << '\n';
}
- os << "\\maintain_unincluded_children "
- << convert<string>(maintain_unincluded_children) << '\n';
+ string muc = "no";
+ switch (maintain_unincluded_children) {
+ case CM_Mostly:
+ muc = "mostly";
+ break;
+ case CM_Strict:
+ muc = "strict";
+ break;
+ case CM_None:
+ default:
+ break;
+ }
+ os << "\\maintain_unincluded_children " << muc << '\n';
// local layout information
docstring const local_layout = getLocalLayout(false);
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