X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=ba261ec7989d42a35ea5688af18c78b96a9b5e64;hb=14001c49fe0fb3d95a0f69f63344e7ae59d28180;hp=72d1a93d1f724935a64600e8225515dc6d4381c4;hpb=e0acb978ff34c174dcfaddae08caa70eed11ef35;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 72d1a93d1f..ba261ec798 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -25,6 +25,7 @@ #include "Color.h" #include "ColorSet.h" #include "Encoding.h" +#include "HSpace.h" #include "IndicesList.h" #include "Language.h" #include "LaTeXFeatures.h" @@ -289,6 +290,7 @@ public: /** This is the amount of space used for paragraph_separation "skip", * and for detached paragraphs in "indented" documents. */ + HSpace indentation; VSpace defskip; PDFOptions pdfoptions; LayoutFileIndex baseClass_; @@ -334,6 +336,7 @@ BufferParams::BufferParams() use_geometry = false; use_amsmath = package_auto; use_esint = package_auto; + use_mhchem = package_auto; cite_engine_ = ENGINE_BASIC; use_bibtopic = false; use_indices = false; @@ -343,6 +346,7 @@ BufferParams::BufferParams() secnumdepth = 3; tocdepth = 3; language = default_language; + fontenc = "global"; fontsRoman = "default"; fontsSans = "default"; fontsTypewriter = "default"; @@ -361,6 +365,7 @@ BufferParams::BufferParams() columns = 1; listings_params = string(); pagestyle = "default"; + suppress_date = false; // white is equal to no background color backgroundcolor = lyx::rgbFromHexName("#ffffff"); compressed = false; @@ -370,6 +375,8 @@ BufferParams::BufferParams() } // default index indiceslist().addDefault(B_("Index")); + html_be_strict = true; + html_use_mathml = true; } @@ -468,6 +475,18 @@ PDFOptions const & BufferParams::pdfoptions() const } +HSpace const & BufferParams::getIndentation() const +{ + return pimpl_->indentation; +} + + +void BufferParams::setIndentation(HSpace const & indent) +{ + pimpl_->indentation = indent; +} + + VSpace const & BufferParams::getDefSkip() const { return pimpl_->defskip; @@ -525,6 +544,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\master") { lex.eatLine(); master = lex.getString(); + } else if (token == "\\suppress_date") { + lex >> suppress_date; } else if (token == "\\language") { readLanguage(lex); } else if (token == "\\inputencoding") { @@ -539,6 +560,9 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\index_command") { lex.eatLine(); index_command = lex.getString(); + } else if (token == "\\fontencoding") { + lex.eatLine(); + fontenc = lex.getString(); } else if (token == "\\font_roman") { lex.eatLine(); fontsRoman = lex.getString(); @@ -566,6 +590,10 @@ string BufferParams::readToken(Lexer & lex, string const & token, string parsep; lex >> parsep; paragraph_separation = parseptranslator().find(parsep); + } else if (token == "\\paragraph_indentation") { + lex.next(); + string indentation = lex.getString(); + pimpl_->indentation = HSpace(indentation); } else if (token == "\\defskip") { lex.next(); string defskip = lex.getString(); @@ -591,6 +619,10 @@ string BufferParams::readToken(Lexer & lex, string const & token, int useesint; lex >> useesint; use_esint = packagetranslator().find(useesint); + } else if (token == "\\use_mhchem") { + int usemhchem; + lex >> usemhchem; + use_mhchem = packagetranslator().find(usemhchem); } else if (token == "\\cite_engine") { string engine; lex >> engine; @@ -618,7 +650,11 @@ string BufferParams::readToken(Lexer & lex, string const & token, if (branch_ptr) branch_ptr->setSelected(lex.getInteger()); } - // not yet operational + if (tok == "\\filename_suffix") { + lex.next(); + if (branch_ptr) + branch_ptr->setFilenameSuffix(lex.getInteger()); + } if (tok == "\\color") { lex.eatLine(); string color = lex.getString(); @@ -634,6 +670,7 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\index") { lex.eatLine(); docstring index = lex.getDocString(); + docstring shortcut; indiceslist().add(index); while (true) { lex.next(); @@ -643,10 +680,10 @@ string BufferParams::readToken(Lexer & lex, string const & token, Index * index_ptr = indiceslist().find(index); if (tok == "\\shortcut") { lex.next(); + shortcut = lex.getDocString(); if (index_ptr) - index_ptr->setShortcut(lex.getDocString()); + index_ptr->setShortcut(shortcut); } - // not yet operational if (tok == "\\color") { lex.eatLine(); string color = lex.getString(); @@ -656,7 +693,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, if (color == "none") color = lcolor.getX11Name(Color_background); // FIXME UNICODE - lcolor.setColor(to_utf8(index), color); + if (!shortcut.empty()) + lcolor.setColor(to_utf8(shortcut), color); } } } else if (token == "\\author") { @@ -664,7 +702,7 @@ string BufferParams::readToken(Lexer & lex, string const & token, istringstream ss(lex.getString()); Author a; ss >> a; - author_map.push_back(pimpl_->authorlist.record(a)); + author_map[a.buffer_id()] = pimpl_->authorlist.record(a); } else if (token == "\\paperorientation") { string orient; lex >> orient; @@ -732,6 +770,10 @@ string BufferParams::readToken(Lexer & lex, string const & token, toktmp << endl; return toktmp; } + } else if (token == "\\html_use_mathml") { + lex >> html_use_mathml; + } else if (token == "\\html_be_strict") { + lex >> html_be_strict; } else { lyxerr << "BufferParams::readToken(): Unknown token: " << token << endl; @@ -806,6 +848,7 @@ void BufferParams::writeFile(ostream & os) const if (language != ignore_language) os << "\\language " << language->lang() << '\n'; os << "\\inputencoding " << inputenc + << "\n\\fontencoding " << fontenc << "\n\\font_roman " << fontsRoman << "\n\\font_sans " << fontsSans << "\n\\font_typewriter " << fontsTypewriter @@ -836,10 +879,12 @@ void BufferParams::writeFile(ostream & os) const << "\n\\use_geometry " << convert(use_geometry) << "\n\\use_amsmath " << use_amsmath << "\n\\use_esint " << use_esint + << "\n\\use_mhchem " << use_mhchem << "\n\\cite_engine " << citeenginetranslator().find(cite_engine_) << "\n\\use_bibtopic " << convert(use_bibtopic) << "\n\\use_indices " << convert(use_indices) << "\n\\paperorientation " << string_orientation[orientation] + << "\n\\suppress_date " << convert(suppress_date) << '\n'; if (backgroundcolor != lyx::rgbFromHexName("#ffffff")) os << "\\backgroundcolor " << lyx::X11hexname(backgroundcolor) << '\n'; @@ -849,6 +894,7 @@ void BufferParams::writeFile(ostream & os) const for (; it != end; ++it) { os << "\\branch " << to_utf8(it->branch()) << "\n\\selected " << it->isSelected() + << "\n\\filename_suffix " << it->hasFilenameSuffix() << "\n\\color " << lyx::X11hexname(it->color()) << "\n\\end_branch" << "\n"; @@ -897,9 +943,12 @@ void BufferParams::writeFile(ostream & os) const os << "\\secnumdepth " << secnumdepth << "\n\\tocdepth " << tocdepth << "\n\\paragraph_separation " - << string_paragraph_separation[paragraph_separation] - << "\n\\defskip " << getDefSkip().asLyXCommand() - << "\n\\quotes_language " + << string_paragraph_separation[paragraph_separation]; + if (!paragraph_separation) + os << "\n\\paragraph_indentation " << getIndentation().asLyXCommand(); + else + os << "\n\\defskip " << getDefSkip().asLyXCommand(); + os << "\n\\quotes_language " << string_quotes_language[quotes_language] << "\n\\papercolumns " << columns << "\n\\papersides " << sides @@ -924,17 +973,12 @@ void BufferParams::writeFile(ostream & os) const } } - os << "\\tracking_changes " << convert(trackChanges) << "\n"; - os << "\\output_changes " << convert(outputChanges) << "\n"; + os << "\\tracking_changes " << convert(trackChanges) << "\n" + << "\\output_changes " << convert(outputChanges) << "\n" + << "\\html_use_mathml " << convert(html_use_mathml) << "\n" + << "\\html_be_strict " << convert(html_be_strict) << "\n"; - AuthorList::Authors::const_iterator a_it = pimpl_->authorlist.begin(); - AuthorList::Authors::const_iterator a_end = pimpl_->authorlist.end(); - for (; a_it != a_end; ++a_it) { - if (a_it->second.used()) - os << "\\author " << a_it->second << "\n"; - else - os << "\\author " << Author() << "\n"; - } + os << pimpl_->authorlist; } @@ -987,6 +1031,8 @@ void BufferParams::validate(LaTeXFeatures & features) const features.require("amsmath"); if (use_esint == package_on) features.require("esint"); + if (use_mhchem == package_on) + features.require("mhchem"); // Document-level line spacing if (spacing().getSpace() != Spacing::Single && !spacing().isDefault()) @@ -1018,7 +1064,7 @@ void BufferParams::validate(LaTeXFeatures & features) const features.require("hyperref"); // due to interferences with babel and hyperref, the color package has to // be loaded after hyperref when hyperref is used with the colorlinks - // option, see http://bugzilla.lyx.org/show_bug.cgi?id=5291 + // option, see http://www.lyx.org/trac/ticket/5291 if (pdfoptions().colorlinks) features.require("color"); } @@ -1135,7 +1181,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, size_t mongo = language_options.str().find("mongolian"); // if Japanese is used, babel must directly be loaded // with language options, not in the class options, see - // http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4 + // http://www.lyx.org/trac/ticket/4597#c4 size_t japan = language_options.str().find("japanese"); if (lyxrc.language_global_options && !language_options.str().empty() && viet == string::npos && japan == string::npos @@ -1183,19 +1229,18 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, << from_ascii(fontsDefaultFamily) << "}\n"; // set font encoding - // this one is not per buffer // for arabic_arabi and farsi we also need to load the LAE and // LFE encoding // XeTeX works without fontenc - if (lyxrc.fontenc != "default" && language->lang() != "japanese" + if (font_encoding() != "default" && language->lang() != "japanese" && !useXetex) { if (language->lang() == "arabic_arabi" || language->lang() == "farsi") { - os << "\\usepackage[" << from_ascii(lyxrc.fontenc) + os << "\\usepackage[" << from_ascii(font_encoding()) << ",LFE,LAE]{fontenc}\n"; texrow.newline(); } else { - os << "\\usepackage[" << from_ascii(lyxrc.fontenc) + os << "\\usepackage[" << from_ascii(font_encoding()) << "]{fontenc}\n"; texrow.newline(); } @@ -1364,6 +1409,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, } if (paragraph_separation) { + // when skip separation switch (getDefSkip().kind()) { case VSpace::SMALLSKIP: os << "\\setlength{\\parskip}{\\smallskipamount}\n"; @@ -1384,9 +1430,17 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, break; } texrow.newline(); - os << "\\setlength{\\parindent}{0pt}\n"; texrow.newline(); + } else { + // when separation by indentation + // only output something when a width is given + if (getIndentation().asLyXCommand() != "default") { + os << "\\setlength{\\parindent}{" + << from_utf8(getIndentation().asLatexCommand()) + << "}\n"; + texrow.newline(); + } } // Now insert the LyX specific LaTeX commands... @@ -1395,7 +1449,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // 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 - // http://bugzilla.lyx.org/show_bug.cgi?id=5291 + // http://www.lyx.org/trac/ticket/5291 // we decided therefore to load color always before babel, see // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg144349.html lyxpreamble += from_ascii(features.getColorOptions()); @@ -1463,6 +1517,12 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, "Textclass specific LaTeX commands.\n" + tmppreamble + '\n'; + // suppress date if selected + // use \@ifundefined because we cannot be sure that every document class + // has a \date command + if (suppress_date) + atlyxpreamble += "\\@ifundefined{date}{}{\\date{}}\n"; + /* the user-defined preamble */ if (!containsOnly(preamble, " \n\t")) // FIXME UNICODE @@ -1935,6 +1995,12 @@ string const BufferParams::dvips_options() const } +string const BufferParams::font_encoding() const +{ + return (fontenc == "global") ? lyxrc.fontenc : fontenc; +} + + string BufferParams::babelCall(string const & lang_opts) const { string lang_pack = lyxrc.language_package; @@ -1958,7 +2024,7 @@ string BufferParams::babelCall(string const & lang_opts) const size_t mongo = lang_opts.find("mongolian"); // If Japanese is used, babel must directly be loaded with the // language options, see - // http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4 + // http://www.lyx.org/trac/ticket/4597#c4 size_t japan = lang_opts.find("japanese"); if (!lyxrc.language_global_options || viet != string::npos || japan != string::npos || latvian != string::npos @@ -2150,7 +2216,7 @@ string const BufferParams::loadFonts(string const & rm, // AE else if (rm == "ae") { // not needed when using OT1 font encoding. - if (lyxrc.fontenc != "default") + if (font_encoding() != "default") os << "\\usepackage{ae,aecompl}\n"; } // Times @@ -2189,7 +2255,7 @@ string const BufferParams::loadFonts(string const & rm, // fourier supersedes utopia.sty, but does // not work with OT1 encoding. if (LaTeXFeatures::isAvailable("fourier") - && lyxrc.fontenc != "default") { + && font_encoding() != "default") { os << "\\usepackage"; if (osf || sc) { os << '[';