X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=b72054d9ffd7c56ec291cea5ebf14ad82c9bb6be;hb=55a3dd7b346d29a52ba305a4558e9e380ef50f47;hp=347a703ba89ee40e9af85dfbf1755adf62d99ebd;hpb=8edfef001d791c3dd43a24dc9bbcf04c3430722a;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 347a703ba8..b72054d9ff 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -24,6 +24,7 @@ #include "Floating.h" #include "FloatList.h" #include "Language.h" +#include "LaTeXPackages.h" #include "Layout.h" #include "Lexer.h" #include "LyXRC.h" @@ -160,7 +161,7 @@ static docstring const mathcircumflex_def = from_ascii( static docstring const tabularnewline_def = from_ascii( "%% Because html converters don't know tabularnewline\n" "\\providecommand{\\tabularnewline}{\\\\}\n"); - + static docstring const lyxgreyedout_def = from_ascii( "%% The greyedout annotation environment\n" "\\newenvironment{lyxgreyedout}\n" @@ -265,10 +266,10 @@ static docstring const ogonek_def = from_ascii( static docstring const lyxref_def = from_ascii( "\\RS@ifundefined{subref}\n" - " {\\def\\RSsubtxt{section~}\\newref{sub}{name = \\RSsubtxt}}\n" + " {\\def\\RSsubtxt{section~}\\newref{sub}{name = \\RSsubtxt}}\n" " {}\n" "\\RS@ifundefined{thmref}\n" - " {\\def\\RSthmtxt{theorem~}\\newref{thm}{name = \\RSthmtxt}}\n" + " {\\def\\RSthmtxt{theorem~}\\newref{thm}{name = \\RSthmtxt}}\n" " {}\n" "\\RS@ifundefined{lemref}\n" " {\\def\\RSlemtxt{lemma~}\\newref{lem}{name = \\RSlemtxt}}\n" @@ -281,8 +282,6 @@ static docstring const lyxref_def = from_ascii( // ///////////////////////////////////////////////////////////////////// -LaTeXFeatures::Packages LaTeXFeatures::packages_; - LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p, OutputParams const & r) @@ -334,36 +333,6 @@ void LaTeXFeatures::require(set const & names) } -void LaTeXFeatures::getAvailable() -{ - Lexer lex; - support::FileName const real_file = libFileSearch("", "packages.lst"); - - if (real_file.empty()) - return; - - lex.setFile(real_file); - - if (!lex.isOK()) - return; - - // Make sure that we are clean - packages_.clear(); - - bool finished = false; - // Parse config-file - while (lex.isOK() && !finished) { - switch (lex.lex()) { - case Lexer::LEX_FEOF: - finished = true; - break; - default: - packages_.insert(lex.getString()); - } - } -} - - void LaTeXFeatures::useLayout(docstring const & layoutname) { // Some code to avoid loops in dependency definition @@ -379,7 +348,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname) DocumentClass const & tclass = params_.documentClass(); if (tclass.hasLayout(layoutname)) { // Is this layout already in usedLayouts? - if (find(usedLayouts_.begin(), usedLayouts_.end(), layoutname) + if (find(usedLayouts_.begin(), usedLayouts_.end(), layoutname) != usedLayouts_.end()) return; @@ -411,7 +380,7 @@ void LaTeXFeatures::useInsetLayout(InsetLayout const & lay) if (!tclass.hasInsetLayout(lname)) return; // Is this layout already in usedInsetLayouts? - if (find(usedInsetLayouts_.begin(), usedInsetLayouts_.end(), lname) + if (find(usedInsetLayouts_.begin(), usedInsetLayouts_.end(), lname) != usedInsetLayouts_.end()) return; @@ -441,13 +410,7 @@ bool LaTeXFeatures::isAvailable(string const & name) //LYXERR0("from=[" << from << "] to=[" << to << "]"); return theConverters().isReachable(from, to); } - - if (packages_.empty()) - getAvailable(); - string n = name; - if (suffixIs(n, ".sty")) - n.erase(name.length() - 4); - return packages_.find(n) != packages_.end(); + return LaTeXPackages::isAvailable(name); } @@ -460,6 +423,15 @@ void LaTeXFeatures::addPreambleSnippet(string const & preamble) } +void LaTeXFeatures::addCSSSnippet(std::string const & snippet) +{ + SnippetList::const_iterator begin = css_snippets_.begin(); + SnippetList::const_iterator end = css_snippets_.end(); + if (find(begin, end, snippet) == end) + css_snippets_.push_back(snippet); +} + + void LaTeXFeatures::useFloat(string const & name, bool subfloat) { if (!usedFloats_[name]) @@ -599,7 +571,10 @@ char const * simplefeatures[] = { "ifsym", "marvosym", "txfonts", + "pxfonts", + "mathdesign", "mathrsfs", + "mathabx", "ascii", "url", "covington", @@ -710,8 +685,9 @@ string const LaTeXFeatures::getPackages() const // if fontspec is used, AMS packages have to be loaded before // fontspec (in BufferParams) - if (!params_.useNonTeXFonts && !loadAMSPackages().empty()) - packages << loadAMSPackages(); + string const amsPackages = loadAMSPackages(); + if (!params_.useNonTeXFonts && !amsPackages.empty()) + packages << amsPackages; // fixltx2e must be loaded after amsthm, since amsthm produces an error with // the redefined \[ command (bug 7233). Load is as early as possible, since @@ -749,7 +725,7 @@ string const LaTeXFeatures::getPackages() const packages << "\\usepackage{undertilde}\n"; // [x]color and pdfcolmk are handled in getColorOptions() above - + // makeidx.sty if (isRequired("makeidx") || isRequired("splitidx")) { if (!tclass.provides("makeidx") && !isRequired("splitidx")) @@ -768,7 +744,7 @@ string const LaTeXFeatures::getPackages() const << params_.graphics_driver << "]{graphicx}\n"; } - + // lyxskak.sty --- newer chess support based on skak.sty if (mustProvide("chess")) packages << "\\usepackage[ps,mover]{lyxskak}\n"; @@ -779,7 +755,7 @@ string const LaTeXFeatures::getPackages() const // esint must be after amsmath and wasysym, since it will redeclare // inconsistent integral symbols - if ((mustProvide("esint") || mustProvide("esintoramsmath")) && + if (mustProvide("esint") && params_.use_esint != BufferParams::package_off) packages << "\\usepackage{esint}\n"; @@ -799,7 +775,7 @@ string const LaTeXFeatures::getPackages() const // jurabib -- we need version 0.6 at least. if (mustProvide("jurabib")) packages << "\\usepackage{jurabib}[2004/01/25]\n"; - + // xargs -- we need version 1.09 at least if (mustProvide("xargs")) packages << "\\usepackage{xargs}[2008/03/08]\n"; @@ -844,7 +820,7 @@ string const LaTeXFeatures::getPackages() const } -string LaTeXFeatures::getPreambleSnippets() const +string LaTeXFeatures::getPreambleSnippets() const { ostringstream snip; SnippetList::const_iterator pit = preamble_snippets_.begin(); @@ -855,6 +831,17 @@ string LaTeXFeatures::getPreambleSnippets() const } +std::string LaTeXFeatures::getCSSSnippets() const +{ + ostringstream snip; + SnippetList::const_iterator pit = css_snippets_.begin(); + SnippetList::const_iterator pend = css_snippets_.end(); + for (; pit != pend; ++pit) + snip << *pit << '\n'; + return snip.str(); +} + + docstring const LaTeXFeatures::getMacros() const { odocstringstream macros; @@ -975,17 +962,17 @@ docstring const LaTeXFeatures::getMacros() const // floats getFloatDefinitions(macros); - - if (mustProvide("refstyle")) - macros << lyxref_def << '\n'; - + + if (mustProvide("refstyle")) + macros << lyxref_def << '\n'; + // change tracking if (mustProvide("ct-dvipost")) macros << changetracking_dvipost_def; - + if (mustProvide("ct-xcolor-ulem")) { streamsize const prec = macros.precision(2); - + RGBColor cadd = rgbFromHexName(lcolor.getX11Name(Color_addedtext)); macros << "\\providecolor{lyxadded}{rgb}{" << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n"; @@ -995,7 +982,7 @@ docstring const LaTeXFeatures::getMacros() const << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; macros.precision(prec); - + if (isRequired("hyperref")) macros << changetracking_xcolor_ulem_hyperref_def; else @@ -1062,12 +1049,8 @@ string const LaTeXFeatures::loadAMSPackages() const if (mustProvide("amsthm")) tmp << "\\usepackage{amsthm}\n"; - // esint is preferred for esintoramsmath - if ((mustProvide("amsmath") - && params_.use_amsmath != BufferParams::package_off) - || (mustProvide("esintoramsmath") - && params_.use_esint == BufferParams::package_off - && params_.use_amsmath != BufferParams::package_off)) { + if (mustProvide("amsmath") + && params_.use_amsmath != BufferParams::package_off) { tmp << "\\usepackage{amsmath}\n"; } else { // amsbsy and amstext are already provided by amsmath @@ -1076,7 +1059,7 @@ string const LaTeXFeatures::loadAMSPackages() const if (mustProvide("amstext")) tmp << "\\usepackage{amstext}\n"; } - + if (mustProvide("amssymb") || params_.use_amsmath == BufferParams::package_on) tmp << "\\usepackage{amssymb}\n"; @@ -1112,7 +1095,7 @@ docstring const LaTeXFeatures::getTClassPreamble() const } -docstring const LaTeXFeatures::getTClassHTMLPreamble() const +docstring const LaTeXFeatures::getTClassHTMLPreamble() const { DocumentClass const & tclass = params_.documentClass(); odocstringstream tcpreamble; @@ -1138,10 +1121,13 @@ docstring const LaTeXFeatures::getTClassHTMLPreamble() const } -docstring const LaTeXFeatures::getTClassHTMLStyles() const { +docstring const LaTeXFeatures::getTClassHTMLStyles() const +{ DocumentClass const & tclass = params_.documentClass(); odocstringstream tcpreamble; + tcpreamble << tclass.htmlstyles(); + list::const_iterator cit = usedLayouts_.begin(); list::const_iterator end = usedLayouts_.end(); for (; cit != end; ++cit) @@ -1220,7 +1206,7 @@ docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel, bool use_po UsedFloats::const_iterator fend = usedFloats_.end(); for (; fit != fend; ++fit) { Floating const & fl = floats.getType(fit->first); - // we assume builtin floats are translated + // we assume builtin floats are translated if (fl.isPredefined()) continue; docstring const type = from_ascii(fl.floattype()); @@ -1388,4 +1374,25 @@ void LaTeXFeatures::getFloatDefinitions(odocstream & os) const } +void LaTeXFeatures::resolveAlternatives() +{ + for (Features::iterator it = features_.begin(); it != features_.end();) { + if (contains(*it, '|')) { + vector const alternatives = getVectorFromString(*it, "|"); + vector::const_iterator const end = alternatives.end(); + vector::const_iterator ita = alternatives.begin(); + for (; ita != end; ++ita) { + if (isRequired(*ita)) + break; + } + if (ita == end) + require(alternatives.front()); + features_.erase(it); + it = features_.begin(); + } else + ++it; + } +} + + } // namespace lyx