]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Fix result of deleteSpaces()
[lyx.git] / src / LaTeXFeatures.cpp
index e58dd68986df5fdaf414ff6b78042a6a2a47f8ad..ab2c846599d8e5188d65e83c39b9b78aeb7d70c3 100644 (file)
@@ -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<TexString> & 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<string, string> before_simplefeature_;
+       map<string, string> 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<docstring>::const_iterator cit = usedLayouts_.begin();
-       list<docstring>::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 << "<!ENTITY lyxarrow \"-&gt;\">" << '\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 << "\n<!ENTITY " << fi->first
-                            << (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:"