X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.C;h=15102ef3c20b6e580f05b90086f8f3ad327fa036;hb=9dafe9b9a5cb12e19e0f3a1a9669d81dc140b0e3;hp=f208c53590933dc21cb00b343453f01601636479;hpb=fcc833018cf7670591bec9bd792f05b5a3f017ad;p=lyx.git diff --git a/src/LaTeXFeatures.C b/src/LaTeXFeatures.C index f208c53590..15102ef3c2 100644 --- a/src/LaTeXFeatures.C +++ b/src/LaTeXFeatures.C @@ -11,84 +11,101 @@ #include #ifdef __GNUG__ -#pragma implementation "LaTeXFeatures.h" +#pragma implementation #endif -#include "LString.h" +#include "LaTeXFeatures.h" #include "debug.h" #include "lyx_sty.h" #include "lyxrc.h" -#include "LaTeXFeatures.h" #include "bufferparams.h" -#include "layout.h" -#include "support/filetools.h" -#include "support/lstrings.h" +#include "lyxtextclasslist.h" #include "FloatList.h" #include "language.h" #include "encoding.h" +#include "LString.h" + +#include "support/filetools.h" +#include "support/lstrings.h" + +using lyx::layout_type; +using lyx::textclass_type; using std::endl; using std::set; +using std::vector; +using std::find; +using std::ostream; -LaTeXFeatures::LaTeXFeatures(BufferParams const & p, LyXTextClass::size_type n) + +LaTeXFeatures::LaTeXFeatures(BufferParams const & p, layout_type n) : layout(n, false), params(p) -{ - -} +{} void LaTeXFeatures::require(string const & name) { - // INSET_GRAPHICS: remove this when InsetFig is thrown. - if (name == "graphics") { - features.push_back("graphicx"); - features.push_back("graphics"); - } else - features.push_back(name); - + if (isRequired(name)) + return; + + features.push_back(name); } -void LaTeXFeatures::useLayout(std::vector::size_type const & idx) + +void LaTeXFeatures::useLayout(vector::size_type const & idx) { layout[idx] = true; } + bool LaTeXFeatures::isRequired(string const & name) const { - FeaturesList::const_iterator i = std::find(features.begin(), - features.end(), - name); - return i!= features.end(); + FeaturesList::const_iterator i = find(features.begin(), + features.end(), + name); + return i != features.end(); } + void LaTeXFeatures::addExternalPreamble(string const & pream) { externalPreambles += pream; } + void LaTeXFeatures::useFloat(string const & name) { usedFloats.insert(name); + // We only need float.sty if we use non builtin floats, or if we + // use the "H" modifier. This includes modified table and + // figure floats. (Lgb) + Floating const & fl = floatList.getType(name); + if (!fl.type().empty() && !fl.builtin()) { + require("float"); + } } + void LaTeXFeatures::useLanguage(Language const * lang) { UsedLanguages.insert(lang); } + void LaTeXFeatures::includeFile(string const & key, string const & name) { IncludedFiles[key] = name; } + bool LaTeXFeatures::hasLanguages() { return !UsedLanguages.empty(); } + string LaTeXFeatures::getLanguages() const { - ostringstream languages; for (LanguageList::const_iterator cit = @@ -100,6 +117,7 @@ string LaTeXFeatures::getLanguages() const return languages.str().c_str(); } + set LaTeXFeatures::getEncodingSet(string const & doc_encoding) { set encodings; @@ -111,6 +129,26 @@ set LaTeXFeatures::getEncodingSet(string const & doc_encoding) return encodings; } +namespace { + +char const * simplefeatures[] = { + "array", + "verbatim", + "longtable", + "rotating", + "latexsym", + "pifont", + "subfigure", + "floatflt", + "varioref", + "prettyref", + "float" +}; + +const int nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *); + +} + string const LaTeXFeatures::getPackages() const { ostringstream packages; @@ -122,54 +160,23 @@ string const LaTeXFeatures::getPackages() const * These are all the 'simple' includes. i.e * packages which we just \usepackage{package} **/ - -// array-package - if (isRequired("array")) - packages << "\\usepackage{array}\n"; - - // verbatim.sty - if (isRequired("verbatim")) - packages << "\\usepackage{verbatim}\n"; - - //longtable.sty - if (isRequired("longtable")) - packages << "\\usepackage{longtable}\n"; - - //rotating.sty - if (isRequired("rotating")) - packages << "\\usepackage{rotating}\n"; - - - // latexsym.sty - if (isRequired("latexsym")) - packages << "\\usepackage{latexsym}\n"; - - // pifont.sty - if (isRequired("pifont")) - packages << "\\usepackage{pifont}\n"; - - // subfigure.sty - if (isRequired("subfigure")) - packages << "\\usepackage{subfigure}\n"; - - // floatflt.sty - if (isRequired("floatflt")) - packages << "\\usepackage{floatflt}\n"; - - - // varioref.sty - if (isRequired("varioref")) - packages << "\\usepackage{varioref}\n"; - - // prettyref.sty - if (isRequired("prettyref")) - packages << "\\usepackage{prettyref}\n"; - + for (int i = 0 ; i < nb_simplefeatures ; ++i) { + if (isRequired(simplefeatures[i])) + packages << "\\usepackage{" + << simplefeatures[i] + << "}\n"; + } + /** * The rest of these packages are somewhat more complicated * than those above. **/ + if (isRequired("amsmath") + && ! tclass.provides(LyXTextClass::amsmath)) { + packages << "\\usepackage{amsmath}\n"; + } + // color.sty if (isRequired("color")) { if (params.graphicsDriver == "default") @@ -197,17 +204,6 @@ string const LaTeXFeatures::getPackages() const << "]{graphicx}\n"; } - // INSET_GRAPHICS: remove this when InsetFig is thrown. - // graphics.sty - if (isRequired("graphics") && params.graphicsDriver != "none") { - if (params.graphicsDriver == "default") - packages << "\\usepackage{graphics}\n"; - else - packages << "\\usepackage[" - << params.graphicsDriver - << "]{graphics}\n"; - } - //if (algorithm) { // packages << "\\usepackage{algorithm}\n"; //} @@ -250,24 +246,6 @@ string const LaTeXFeatures::getPackages() const " {\\newcommand{\\url}{\\texttt}}\n"; // float.sty - // We only need float.sty if we use non builtin floats, or if we - // use the "H" modifier. This includes modified table and - // figure floats. (Lgb) - if (!usedFloats.empty()) { - UsedFloats::const_iterator beg = usedFloats.begin(); - UsedFloats::const_iterator end = usedFloats.end(); - for (; beg != end; ++beg) { - Floating const & fl = floatList.getType((*beg)); - if (!fl.type().empty() && !fl.builtin()) { - const_cast(this)->require("floats"); - break; - } - } - } - if (isRequired("floats")) { - packages << "\\usepackage{float}\n"; - } - // natbib.sty if (isRequired("natbib")) { packages << "\\usepackage["; @@ -282,7 +260,6 @@ string const LaTeXFeatures::getPackages() const packages << externalPreambles; return packages.str().c_str(); - } @@ -297,13 +274,11 @@ string const LaTeXFeatures::getMacros() const if (isRequired("lyxline")) macros << lyxline_def << '\n'; - if (isRequired("noun")) { + if (isRequired("noun")) macros << noun_def << '\n'; - } - if (isRequired("lyxarrow")) { + if (isRequired("lyxarrow")) macros << lyxarrow_def << '\n'; - } // quotes. if (isRequired("quotesinglbase")) @@ -320,17 +295,17 @@ string const LaTeXFeatures::getMacros() const macros << guillemotright_def << '\n'; // Math mode - if (isRequired("boldsymbol") && !isRequired("amsstyle")) + if (isRequired("boldsymbol") && !isRequired("amsmath")) macros << boldsymbol_def << '\n'; - if (isRequired("binom") && !isRequired("amsstyle")) + if (isRequired("binom") && !isRequired("amsmath")) macros << binom_def << '\n'; // other - if (isRequired("NeedLyXMinipageIndent")) + if (isRequired("NeedLyXMinipageIndent")) macros << minipageindent_def; - if (isRequired("ParagraphIndent")) + if (isRequired("ParagraphIndent")) macros << paragraphindent_def; - if (isRequired("NeedLyXFootnoteCode")) + if (isRequired("NeedLyXFootnoteCode")) macros << floatingfootnote_def; // floats @@ -350,15 +325,14 @@ string const LaTeXFeatures::getMacros() const string const LaTeXFeatures::getTClassPreamble() const { // the text class specific preamble - LyXTextClass const & tclass = - textclasslist.TextClass(params.textclass); + LyXTextClass const & tclass = textclasslist.TextClass(params.textclass); ostringstream tcpreamble; - + tcpreamble << tclass.preamble(); - for (LyXTextClass::size_type i = 0; i < tclass.numLayouts(); ++i) { + for (layout_type i = 0; i < tclass.numLayouts(); ++i) { if (layout[i]) { - tcpreamble << tclass[i].preamble(); + tcpreamble << tclass[i].preamble(); } } @@ -372,8 +346,7 @@ string const LaTeXFeatures::getLyXSGMLEntities() const ostringstream entities; if (isRequired("lyxarrow")) { - entities << "" - << '\n'; + entities << "" << '\n'; } return entities.str().c_str(); @@ -389,7 +362,7 @@ string const LaTeXFeatures::getIncludedFiles(string const & fname) const for (FileMap::const_iterator fi = IncludedFiles.begin(); fi != end; ++fi) sgmlpreamble << "\nfirst - << (IsSGMLFilename(fi->second) ? " SYSTEM \"" : " \"" ) + << (IsSGMLFilename(fi->second) ? " SYSTEM \"" : " \"") << MakeRelPath(fi->second, basename) << "\">"; return sgmlpreamble.str().c_str(); @@ -410,7 +383,7 @@ BufferParams const & LaTeXFeatures::bufferParams() const return params; } -void LaTeXFeatures::getFloatDefinitions(std::ostream & os) const +void LaTeXFeatures::getFloatDefinitions(ostream & os) const { // Here we will output the code to create the needed float styles. // We will try to do this as minimal as possible. @@ -462,7 +435,7 @@ void LaTeXFeatures::getFloatDefinitions(std::ostream & os) const << name << "}\n"; // What missing here is to code to minimalize the code - // outputted so that the same floatstyle will not be + // output so that the same floatstyle will not be // used several times, when the same style is still in // effect. (Lgb) }