X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=8c9f9d0d6800f725e7f6944493b9ba3c0a2c8740;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=4a009aa009ff51a4f66716d22a339a14a8e654f6;hpb=25e4bf4b27b5b404e706ac7cf6f9f6c48cb57b33;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 4a009aa009..8c9f9d0d68 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -267,6 +267,7 @@ CiteEngineTypeTranslator const init_citeenginetypetranslator() { CiteEngineTypeTranslator translator("authoryear", ENGINE_TYPE_AUTHORYEAR); translator.addPair("numerical", ENGINE_TYPE_NUMERICAL); + translator.addPair("default", ENGINE_TYPE_DEFAULT); return translator; } @@ -335,8 +336,7 @@ BufferParams::Impl::Impl() BufferParams::Impl * BufferParams::MemoryTraits::clone(BufferParams::Impl const * ptr) { - LASSERT(ptr, /**/); - + LBUFERR(ptr); return new BufferParams::Impl(*ptr); } @@ -361,7 +361,7 @@ BufferParams::BufferParams() orientation = ORIENTATION_PORTRAIT; use_geometry = false; cite_engine_.push_back("basic"); - cite_engine_type_ = ENGINE_TYPE_NUMERICAL; + cite_engine_type_ = ENGINE_TYPE_DEFAULT; biblio_style = "plain"; use_bibtopic = false; use_indices = false; @@ -423,7 +423,7 @@ BufferParams::BufferParams() docstring BufferParams::B_(string const & l10n) const { - LASSERT(language, /**/); + LASSERT(language, return from_utf8(l10n)); return getMessages(language->code()).get(l10n); } @@ -443,19 +443,31 @@ void BufferParams::use_package(std::string const & p, BufferParams::Package u) } -vector const & BufferParams::auto_packages() +map const & BufferParams::auto_packages() { - static vector packages; + static map packages; if (packages.empty()) { // adding a package here implies a file format change! - packages.push_back("amsmath"); - packages.push_back("amssymb"); - packages.push_back("esint"); - packages.push_back("mathdots"); - packages.push_back("mathtools"); - packages.push_back("mhchem"); - packages.push_back("stmaryrd"); - packages.push_back("undertilde"); + packages["amsmath"] = + N_("The LaTeX package amsmath is only used if AMS formula types or symbols from the AMS math toolbars are inserted into formulas"); + packages["amssymb"] = + N_("The LaTeX package amssymb is only used if symbols from the AMS math toolbars are inserted into formulas"); + packages["cancel"] = + N_("The LaTeX package cancel is only used if \\cancel commands are used in formulas"); + packages["esint"] = + N_("The LaTeX package esint is only used if special integral symbols are inserted into formulas"); + packages["mathdots"] = + N_("The LaTeX package mathdots is only used if the command \\iddots is inserted into formulas"); + packages["mathtools"] = + N_("The LaTeX package mathtools is only used if some mathematical relations are inserted into formulas"); + packages["mhchem"] = + N_("The LaTeX package mhchem is only used if either the command \\ce or \\cf is inserted into formulas"); + packages["stackrel"] = + N_("The LaTeX package stackrel is only used if the command \\stackrel with subscript is inserted into formulas"); + packages["stmaryrd"] = + N_("The LaTeX package stmaryrd is only used if symbols from the St Mary's Road symbol font for theoretical computer science are inserted into formulas"); + packages["undertilde"] = + N_("The LaTeX package undertilde is only used if you use the math frame decoration 'utilde'"); } return packages; } @@ -499,28 +511,28 @@ IndicesList const & BufferParams::indiceslist() const Bullet & BufferParams::temp_bullet(lyx::size_type const index) { - LASSERT(index < 4, /**/); + LASSERT(index < 4, return pimpl_->temp_bullets[0]); return pimpl_->temp_bullets[index]; } Bullet const & BufferParams::temp_bullet(lyx::size_type const index) const { - LASSERT(index < 4, /**/); + LASSERT(index < 4, return pimpl_->temp_bullets[0]); return pimpl_->temp_bullets[index]; } Bullet & BufferParams::user_defined_bullet(lyx::size_type const index) { - LASSERT(index < 4, /**/); + LASSERT(index < 4, return pimpl_->temp_bullets[0]); return pimpl_->user_defined_bullets[index]; } Bullet const & BufferParams::user_defined_bullet(lyx::size_type const index) const { - LASSERT(index < 4, /**/); + LASSERT(index < 4, return pimpl_->temp_bullets[0]); return pimpl_->user_defined_bullets[index]; } @@ -586,8 +598,9 @@ string BufferParams::readToken(Lexer & lex, string const & token, // be available. string tcp; LayoutFileList & bcl = LayoutFileList::get(); - if (tcp.empty() && !filepath.empty()) + if (!filepath.empty()) tcp = bcl.addLocalLayout(classname, filepath.absFileName()); + // that returns non-empty if a "local" layout file is found. if (!tcp.empty()) setBaseClass(tcp); else @@ -615,7 +628,9 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\begin_preamble") { readPreamble(lex); } else if (token == "\\begin_local_layout") { - readLocalLayout(lex); + readLocalLayout(lex, false); + } else if (token == "\\begin_forced_local_layout") { + readLocalLayout(lex, true); } else if (token == "\\begin_modules") { readModules(lex); } else if (token == "\\begin_removed_modules") { @@ -978,6 +993,7 @@ void BufferParams::writeFile(ostream & os) const << convert(maintain_unincluded_children) << '\n'; // local layout information + string const local_layout = getLocalLayout(false); if (!local_layout.empty()) { // remove '\n' from the end string const tmplocal = rtrim(local_layout, "\n"); @@ -985,6 +1001,14 @@ void BufferParams::writeFile(ostream & os) const << tmplocal << "\n\\end_local_layout\n"; } + string const forced_local_layout = getLocalLayout(true); + if (!forced_local_layout.empty()) { + // remove '\n' from the end + string const tmplocal = rtrim(forced_local_layout, "\n"); + os << "\\begin_forced_local_layout\n" + << tmplocal + << "\n\\end_forced_local_layout\n"; + } // then the text parameters if (language != ignore_language) @@ -1024,10 +1048,11 @@ void BufferParams::writeFile(ostream & os) const os << "\\papersize " << string_papersize[papersize] << "\n\\use_geometry " << convert(use_geometry); - vector const & packages = auto_packages(); - for (size_t i = 0; i < packages.size(); ++i) - os << "\n\\use_package " << packages[i] << ' ' - << use_package(packages[i]); + map const & packages = auto_packages(); + for (map::const_iterator it = packages.begin(); + it != packages.end(); ++it) + os << "\n\\use_package " << it->first << ' ' + << use_package(it->first); os << "\n\\cite_engine "; @@ -1750,10 +1775,12 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg144349.html lyxpreamble += from_ascii(features.getColorOptions()); - // If we use hyperref, jurabib, japanese, or vietnamese, we have to call babel before them. + // If we use hyperref, jurabib, japanese, varioref or vietnamese, + // we have to call babel before if (use_babel && (features.isRequired("jurabib") || features.isRequired("hyperref") + || features.isRequired("varioref") || features.isRequired("vietnamese") || features.isRequired("japanese"))) { // FIXME UNICODE @@ -1912,9 +1939,10 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, + atlyxpreamble + "\\makeatother\n\n"; // We try to load babel late, in case it interferes with other packages. - // Jurabib and Hyperref have to be called after babel, though. + // Jurabib, hyperref and varioref have to be called after babel, though. if (use_babel && !features.isRequired("jurabib") && !features.isRequired("hyperref") + && !features.isRequired("varioref") && !features.isRequired("vietnamese") && !features.isRequired("japanese")) { // FIXME UNICODE @@ -2086,13 +2114,15 @@ void BufferParams::makeDocumentClass() doc_class_ = getDocumentClass(*baseClass(), mods); - if (!local_layout.empty()) { - TextClass::ReturnValues success = - doc_class_->read(local_layout, TextClass::MODULE); - if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) { - docstring const msg = _("Error reading internal layout information"); - frontend::Alert::warning(_("Read Error"), msg); - } + TextClass::ReturnValues success = TextClass::OK; + if (!forced_local_layout_.empty()) + success = doc_class_->read(forced_local_layout_, TextClass::MODULE); + if (!local_layout_.empty() && + (success == TextClass::OK || success == TextClass::OK_OLDFORMAT)) + success = doc_class_->read(local_layout_, TextClass::MODULE); + if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) { + docstring const msg = _("Error reading internal layout information"); + frontend::Alert::warning(_("Read Error"), msg); } } @@ -2109,6 +2139,24 @@ bool BufferParams::citationModuleCanBeAdded(string const & modName) const } +std::string BufferParams::getLocalLayout(bool forced) const +{ + if (forced) + return doc_class_->forcedLayouts(); + else + return local_layout_; +} + + +void BufferParams::setLocalLayout(string const & layout, bool forced) +{ + if (forced) + forced_local_layout_ = layout; + else + local_layout_ = layout; +} + + bool BufferParams::addLayoutModule(string const & modName) { LayoutModuleList::const_iterator it = layout_modules_.begin(); @@ -2145,16 +2193,6 @@ bool BufferParams::isExportable(string const & format) const } -namespace { - -bool formatSorter(Format const * lhs, Format const * rhs) -{ - return _(lhs->prettyname()) < _(rhs->prettyname()); -} - -} - - vector BufferParams::exportableFormats(bool only_viewable) const { vector const backs = backends(); @@ -2171,7 +2209,6 @@ vector BufferParams::exportableFormats(bool only_viewable) const theConverters().getReachable(*it, only_viewable, false, excludes); result.insert(result.end(), r.begin(), r.end()); } - sort(result.begin(), result.end(), formatSorter); return result; } @@ -2207,8 +2244,11 @@ vector BufferParams::backends() const v.push_back("xetex"); } else if (buffmt == "xetex") { v.push_back("xetex"); - v.push_back("luatex"); - v.push_back("dviluatex"); + // FIXME: need to test all languages (bug 8205) + if (!language || !language->isPolyglossiaExclusive()) { + v.push_back("luatex"); + v.push_back("dviluatex"); + } } else v.push_back(buffmt); @@ -2334,13 +2374,19 @@ void BufferParams::readPreamble(Lexer & lex) } -void BufferParams::readLocalLayout(Lexer & lex) +void BufferParams::readLocalLayout(Lexer & lex, bool forced) { - if (lex.getString() != "\\begin_local_layout") + string const expected = forced ? "\\begin_forced_local_layout" : + "\\begin_local_layout"; + if (lex.getString() != expected) lyxerr << "Error (BufferParams::readLocalLayout):" "consistency check failed." << endl; - local_layout = lex.getLongString("\\end_local_layout"); + if (forced) + forced_local_layout_ = + lex.getLongString("\\end_forced_local_layout"); + else + local_layout_ = lex.getLongString("\\end_local_layout"); } @@ -2785,7 +2831,7 @@ void BufferParams::writeEncodingPreamble(otexstream & os, // do not load inputenc if japanese is used if (features.isRequired("japanese")) break; - os << "\\usepackage[" << from_ascii(inputenc) + os << "\\usepackage[" << from_ascii(encoding().latexName()) << "]{inputenc}\n"; break; case Encoding::CJK: @@ -2912,10 +2958,10 @@ Encoding const & BufferParams::encoding() const // This check will not work with XeTeX/LuaTeX and tex fonts. // Thus we have to reset the encoding in Buffer::makeLaTeXFile. if (useNonTeXFonts) - return *(encodings.fromLaTeXName("utf8-plain")); + return *(encodings.fromLyXName("utf8-plain")); if (inputenc == "auto" || inputenc == "default") return *language->encoding(); - Encoding const * const enc = encodings.fromLaTeXName(inputenc); + Encoding const * const enc = encodings.fromLyXName(inputenc); if (enc) return *enc; LYXERR0("Unknown inputenc value `" << inputenc