X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=ab2c846599d8e5188d65e83c39b9b78aeb7d70c3;hb=91186013ba84382a3863a56e09e090b555fd4afa;hp=e58dd68986df5fdaf414ff6b78042a6a2a47f8ad;hpb=ec767f02a059d18b74b97a3465555f62db1c2135;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index e58dd68986..ab2c846599 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -827,6 +827,12 @@ bool LaTeXFeatures::isAvailable(string const & name) } +bool LaTeXFeatures::isAvailableAtLeastFrom(string const & name, int const y, int const m, int const d) +{ + return LaTeXPackages::isAvailableAtLeastFrom(name, y, m, d); +} + + namespace { void addSnippet(std::list & list, TexString ts, bool allow_dupes) @@ -1268,11 +1274,36 @@ string const LaTeXFeatures::getPackages() const // also unknown packages can be requested. They are silently // swallowed now. We should change this eventually. + // Simple hooks to add things before or after a given "simple" + // feature. Useful if loading order matters. + map before_simplefeature_; + map after_simplefeature_; + + // Babel languages with activated colon (such as French) break + // with prettyref. Work around that. + if (mustProvide("prettyref") && !runparams_.isFullUnicode() + && useBabel() && contains(getActiveChars(), ':')) { + before_simplefeature_["prettyref"] = + "% Make prettyref compatible with babel active colon\n" + "% (make ':' active in prettyref definitions)\n" + "\\edef\\lyxsavedcolcatcode{\\the\\catcode`\\:}\n" + "\\catcode`:=13\n"; + after_simplefeature_["prettyref"] = + "% restore original catcode for :\n" + "\\catcode`\\:=\\lyxsavedcolcatcode\\relax\n"; + } + // These are all the 'simple' includes. i.e // packages which we just \usepackage{package} + // potentially preceded and followed by the hook code for (char const * feature : simplefeatures) { - if (mustProvide(feature)) + if (mustProvide(feature)) { + if (before_simplefeature_.find(feature) != before_simplefeature_.end()) + packages << before_simplefeature_[feature]; packages << "\\usepackage{" << feature << "}\n"; + if (after_simplefeature_.find(feature) != after_simplefeature_.end()) + packages << after_simplefeature_[feature]; + } } // The rest of these packages are somewhat more complicated @@ -1514,7 +1545,7 @@ string const LaTeXFeatures::getPackages() const // fixltx2e provides subscript if (mustProvide("subscript") && !isRequired("fixltx2e") - && !isAvailable("LaTeX-2005/12/01")) + && !isAvailableAtLeastFrom("LaTeX", 2005, 12)) packages << "\\usepackage{subscript}\n"; // footmisc must be loaded after setspace @@ -1927,16 +1958,12 @@ docstring const LaTeXFeatures::getTClassHTMLStyles() const tcpreamble << tclass.htmlstyles(); - list::const_iterator cit = usedLayouts_.begin(); - list::const_iterator end = usedLayouts_.end(); - for (; cit != end; ++cit) - tcpreamble << tclass[*cit].htmlstyle(); + for (auto const & c : usedLayouts_) + tcpreamble << tclass[c].htmlstyle(); - cit = usedInsetLayouts_.begin(); - end = usedInsetLayouts_.end(); TextClass::InsetLayouts const & ils = tclass.insetLayouts(); - for (; cit != end; ++cit) { - TextClass::InsetLayouts::const_iterator it = ils.find(*cit); + for (auto const & c : usedInsetLayouts_) { + TextClass::InsetLayouts::const_iterator it = ils.find(c); if (it == ils.end()) continue; tcpreamble << it->second.htmlstyle(); @@ -2162,37 +2189,6 @@ docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel, } -docstring const LaTeXFeatures::getLyXSGMLEntities() const -{ - // Definition of entities used in the document that are LyX related. - odocstringstream entities; - - if (mustProvide("lyxarrow")) { - entities << "" << '\n'; - } - - return entities.str(); -} - - -docstring const LaTeXFeatures::getIncludedFiles(string const & fname) const -{ - odocstringstream sgmlpreamble; - // FIXME UNICODE - docstring const basename(from_utf8(onlyPath(fname))); - - FileMap::const_iterator end = IncludedFiles_.end(); - for (FileMap::const_iterator fi = IncludedFiles_.begin(); - fi != end; ++fi) - // FIXME UNICODE - sgmlpreamble << "\nfirst - << (isSGMLFileName(fi->second) ? " SYSTEM \"" : " \"") - << makeRelPath(from_utf8(fi->second), basename) << "\">"; - - return sgmlpreamble.str(); -} - - void LaTeXFeatures::showStruct() const { lyxerr << "LyX needs the following commands when LaTeXing:"