X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=ecf02295f54f0ec5d1e3c1ee8e5e9bfc5289efd4;hb=6154a90fba843789b65d2a023c7f3cc7b72ef775;hp=8340940ef9be365760302e0eb7ca4ebd3048dcb8;hpb=3d8828fa1420ca155df167dd9b61d9fe3aabcd37;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 8340940ef9..ecf02295f5 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -18,7 +18,6 @@ #include "Color.h" #include "BufferParams.h" -#include "support/debug.h" #include "Encoding.h" #include "Floating.h" #include "FloatList.h" @@ -28,9 +27,11 @@ #include "LyXRC.h" #include "TextClass.h" +#include "support/debug.h" #include "support/docstream.h" #include "support/FileName.h" #include "support/filetools.h" +#include "support/lstrings.h" using namespace std; using namespace lyx::support; @@ -173,6 +174,16 @@ static string const changetracking_dvipost_def = "\\newcommand{\\lyxdeleted}[3]{%\n" "\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n"; +static string const changetracking_xcolor_soul_def = + "%% Change tracking with soul\n" + "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}#3}}\n" + "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\st{#3}}}\n"; + +static string const changetracking_xcolor_soul_hyperref_def = + "%% Change tracking with soul\n" + "\\newcommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}}{}#3}}\n" + "\\newcommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\st{#3}}{}}}\n"; + static string const changetracking_none_def = "\\newcommand{\\lyxadded}[3]{#3}\n" "\\newcommand{\\lyxdeleted}[3]{}\n"; @@ -292,7 +303,7 @@ static string const newlyxcommand_def = // ///////////////////////////////////////////////////////////////////// -LaTeXFeatures::PackagesList LaTeXFeatures::packages_; +LaTeXFeatures::Packages LaTeXFeatures::packages_; LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p, @@ -312,10 +323,13 @@ bool LaTeXFeatures::useBabel() const void LaTeXFeatures::require(string const & name) { - if (isRequired(name)) - return; + features_.insert(name); +} + - features_.push_back(name); +void LaTeXFeatures::require(set const & names) +{ + features_.insert(names.begin(), names.end()); } @@ -343,11 +357,7 @@ void LaTeXFeatures::getAvailable() finished = true; break; default: - string const name = lex.getString(); - PackagesList::const_iterator begin = packages_.begin(); - PackagesList::const_iterator end = packages_.end(); - if (find(begin, end, name) == end) - packages_.push_back(name); + packages_.insert(lex.getString()); } } } @@ -368,17 +378,16 @@ void LaTeXFeatures::useLayout(docstring const & layoutname) TextClass const & tclass = params_.getTextClass(); if (tclass.hasLayout(layoutname)) { // Is this layout already in usedLayouts? - list::const_iterator cit = usedLayouts_.begin(); - list::const_iterator end = usedLayouts_.end(); - for (; cit != end; ++cit) { - if (layoutname == *cit) - return; - } + if (find(usedLayouts_.begin(), usedLayouts_.end(), layoutname) + != usedLayouts_.end()) + return; - LayoutPtr const & lyt = tclass[layoutname]; - if (!lyt->depends_on().empty()) { + Layout const & layout = *tclass[layoutname]; + require(layout.requires()); + + if (!layout.depends_on().empty()) { ++level; - useLayout(lyt->depends_on()); + useLayout(layout.depends_on()); --level; } usedLayouts_.push_back(layoutname); @@ -394,7 +403,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname) bool LaTeXFeatures::isRequired(string const & name) const { - return find(features_.begin(), features_.end(), name) != features_.end(); + return features_.find(name) != features_.end(); } @@ -406,20 +415,19 @@ bool LaTeXFeatures::mustProvide(string const & name) const bool LaTeXFeatures::isAvailable(string const & name) { - string n = name; if (packages_.empty()) getAvailable(); - size_t loc = n.rfind(".sty"); - if (loc == n.length() - 4) - n = n.erase(name.length() - 4); - return find(packages_.begin(), packages_.end(), n) != packages_.end(); + string n = name; + if (suffixIs(n, ".sty")) + n.erase(name.length() - 4); + return packages_.find(n) != packages_.end(); } void LaTeXFeatures::addPreambleSnippet(string const & preamble) { - FeaturesList::const_iterator begin = preamble_snippets_.begin(); - FeaturesList::const_iterator end = preamble_snippets_.end(); + SnippetList::const_iterator begin = preamble_snippets_.begin(); + SnippetList::const_iterator end = preamble_snippets_.end(); if (find(begin, end, preamble) == end) preamble_snippets_.push_back(preamble); } @@ -534,7 +542,8 @@ char const * simplefeatures[] = { "enumitem", "endnotes", "ifthen", - "amsthm" + "amsthm", + "listings" }; int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *); @@ -642,30 +651,8 @@ string const LaTeXFeatures::getPackages() const } // setspace.sty - if ((isRequired("setspace") - || ((params_.spacing().getSpace() != Spacing::Single - && !params_.spacing().isDefault()))) - && !tclass.provides("SetSpace")) { + if (mustProvide("setspace") && !tclass.provides("SetSpace")) packages << "\\usepackage{setspace}\n"; - } - bool const upcase = tclass.provides("SetSpace"); - switch (params_.spacing().getSpace()) { - case Spacing::Default: - case Spacing::Single: - // we dont use setspace.sty so dont print anything - //packages += "\\singlespacing\n"; - break; - case Spacing::Onehalf: - packages << (upcase ? "\\OnehalfSpacing\n" : "\\onehalfspacing\n"); - break; - case Spacing::Double: - packages << (upcase ? "\\DoubleSpacing\n" : "\\doublespacing\n"); - break; - case Spacing::Other: - packages << (upcase ? "\\setSingleSpace{" : "\\setstretch{") - << params_.spacing().getValue() << "}\n"; - break; - } // amssymb.sty if (mustProvide("amssymb") @@ -714,9 +701,6 @@ string const LaTeXFeatures::getPackages() const "\\makenomenclature\n"; } - if (mustProvide("listings")) - packages << "\\usepackage{listings}\n"; - return packages.str(); } @@ -727,8 +711,8 @@ string const LaTeXFeatures::getMacros() const if (!preamble_snippets_.empty()) macros << '\n'; - FeaturesList::const_iterator pit = preamble_snippets_.begin(); - FeaturesList::const_iterator pend = preamble_snippets_.end(); + SnippetList::const_iterator pit = preamble_snippets_.begin(); + SnippetList::const_iterator pend = preamble_snippets_.end(); for (; pit != pend; ++pit) macros << *pit << '\n'; @@ -810,9 +794,11 @@ string const LaTeXFeatures::getMacros() const << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; macros.precision(prec); - - macros << "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}#3}}\n" - << "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\st{#3}}}\n"; + + if (isRequired("hyperref")) + macros << changetracking_xcolor_soul_hyperref_def; + else + macros << changetracking_xcolor_soul_def; } if (mustProvide("ct-none"))