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;
html_math_output = MathML;
html_math_img_scale = 1.0;
html_css_as_file = false;
+ docbook_table_output = HTMLTable;
display_pixel_ratio = 1.0;
shell_escape = false;
} 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();
branch_ptr->setColor(color);
// Update also the Color table:
if (color == "none")
- color = lcolor.getX11Name(Color_background);
+ color = lcolor.getX11HexName(Color_background);
// FIXME UNICODE
lcolor.setColor(to_utf8(branch), color);
}
index_ptr->setColor(color);
// Update also the Color table:
if (color == "none")
- color = lcolor.getX11Name(Color_background);
+ color = lcolor.getX11HexName(Color_background);
// FIXME UNICODE
if (!shortcut.empty())
lcolor.setColor(to_utf8(shortcut), color);
} else if (token == "\\html_latex_end") {
lex.eatLine();
html_latex_end = lex.getString();
+ } else if (token == "\\docbook_table_output") {
+ int temp;
+ lex >> temp;
+ docbook_table_output = static_cast<TableOutput>(temp);
} else if (token == "\\output_sync") {
lex >> output_sync;
} else if (token == "\\output_sync_macro") {
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);
<< "\\html_css_as_file " << html_css_as_file << '\n'
<< "\\html_be_strict " << convert<string>(html_be_strict) << '\n';
+ os << "\\docbook_table_output " << docbook_table_output << '\n';
+
if (html_math_img_scale != 1.0)
os << "\\html_math_img_scale " << convert<string>(html_math_img_scale) << '\n';
if (!html_latex_start.empty())
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 = "\\smallskipamount";
break;
case VSpace::MEDSKIP:
- os << "\\setlength{\\parskip}{\\medskipamount}\n";
+ psopt = "\\medskipamount";
break;
case VSpace::BIGSKIP:
- os << "\\setlength{\\parskip}{\\bigskipamount}\n";
+ psopt = "\\bigskipamount";
+ break;
+ case VSpace::HALFLINE:
+ // default (no option)
+ break;
+ case VSpace::FULLLINE:
+ psopt = "\\baselineskip";
break;
case VSpace::LENGTH:
- os << "\\setlength{\\parskip}{"
- << from_utf8(getDefSkip().length().asLatexString())
- << "}\n";
+ psopt = 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.isProvided("parskip")) {
+ if (!psopt.empty())
+ psopt = "[skip=" + psopt + "]";
+ os << "\\usepackage" + psopt + "{parskip}\n";
+ } else {
+ os << "\\setlength{\\parskip}{" + psopt + "}\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
if (useNonTeXFonts) {
excludes.insert("latex");
excludes.insert("pdflatex");
- } else if (inputenc != "ascii" && inputenc != "utf8-plain")
+ } else if (inputenc != "ascii" && inputenc != "utf8-plain") {
// XeTeX with TeX fonts requires input encoding ascii (#10600).
excludes.insert("xetex");
- FormatList result = theConverters().getReachable(backs[0], only_viewable,
- true, excludes);
+ }
+
+ FormatList result =
+ theConverters().getReachable(backs[0], only_viewable, true, excludes);
vector<string>::const_iterator it = backs.begin() + 1;
for (; it != backs.end(); ++it) {
FormatList r = theConverters().getReachable(*it, only_viewable,
}
v.push_back("xhtml");
+ v.push_back("docbook5");
v.push_back("text");
v.push_back("lyx");
return v;
// something with formats.
if (dformat == "xhtml")
result = OutputParams::HTML;
+ else if (dformat == "docbook5")
+ result = OutputParams::DOCBOOK5;
else if (dformat == "text")
result = OutputParams::TEXT;
else if (dformat == "lyx")
if (!default_output_format.empty()
&& default_output_format != "default")
return default_output_format;
- if (isDocBook()) {
- FormatList const & formats = exportableFormats(true);
- if (formats.empty())
- return string();
- // return the first we find
- return formats.front()->name();
- }
if (encoding().package() == Encoding::japanese)
return lyxrc.default_platex_view_format;
if (useNonTeXFonts)
}
-bool BufferParams::isDocBook() const
-{
- return documentClass().outputType() == DOCBOOK;
-}
-
-
void BufferParams::readPreamble(Lexer & lex)
{
if (lex.getString() != "\\begin_preamble")