X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.C;h=dff424a9af00d7cb4d0b5cae3fedd22f7e08c9f9;hb=024275f0690b41634e26dabe8758e3dc6cd31ee2;hp=8c4bed9e433e08e1ec6464fef648953488fbdd51;hpb=58408d23621d77c0c3acc4b36ab8dc608717f08f;p=lyx.git diff --git a/src/bufferparams.C b/src/bufferparams.C index 8c4bed9e43..dff424a9af 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -26,6 +26,7 @@ #include "language.h" #include "LaTeXFeatures.h" #include "LColor.h" +#include "lyxfont.h" #include "lyxlex.h" #include "lyxrc.h" #include "lyxtextclasslist.h" @@ -45,10 +46,12 @@ #include -namespace support = lyx::support; -using lyx::support::bformat; -using lyx::support::rtrim; -using lyx::support::tokenPos; + +namespace lyx { + +using support::bformat; +using support::rtrim; +using support::tokenPos; using std::endl; using std::string; @@ -57,7 +60,7 @@ using std::ostream; using std::ostringstream; using std::pair; -namespace biblio = lyx::biblio; +namespace Alert = lyx::frontend::Alert; // Local translators @@ -171,23 +174,22 @@ SidesTranslator const & sidestranslator() } - -// AMS -typedef Translator AMSTranslator; +// LaTeX packages +typedef Translator PackageTranslator; -AMSTranslator const init_amstranslator() +PackageTranslator const init_packagetranslator() { - AMSTranslator translator(0, BufferParams::AMS_OFF); - translator.addPair(1, BufferParams::AMS_AUTO); - translator.addPair(2, BufferParams::AMS_ON); + PackageTranslator translator(0, BufferParams::package_off); + translator.addPair(1, BufferParams::package_auto); + translator.addPair(2, BufferParams::package_on); return translator; } -AMSTranslator const & amstranslator() +PackageTranslator const & packagetranslator() { - static AMSTranslator translator = init_amstranslator(); + static PackageTranslator translator = init_packagetranslator(); return translator; } @@ -259,7 +261,8 @@ BufferParams::Impl::Impl() : defskip(VSpace::MEDSKIP) { // set initial author - authorlist.record(Author(lyxrc.user_name, lyxrc.user_email)); + // FIXME UNICODE + authorlist.record(Author(from_utf8(lyxrc.user_name), from_utf8(lyxrc.user_email))); } @@ -283,7 +286,7 @@ BufferParams::BufferParams() // true in the returned pair, then `second' is the textclass // number; if it is false, second is 0. In both cases, second // is what we want. - textclass(textclasslist.NumberOfClass("article").second), + textclass(textclasslist.numberOfClass("article").second), pimpl_(new Impl) { paragraph_separation = PARSEP_INDENT; @@ -294,15 +297,23 @@ BufferParams::BufferParams() papersize = PAPER_DEFAULT; orientation = ORIENTATION_PORTRAIT; use_geometry = false; - use_amsmath = AMS_AUTO; + use_amsmath = package_auto; + use_esint = package_auto; cite_engine = biblio::ENGINE_BASIC; use_bibtopic = false; - tracking_changes = false; - output_changes = false; + trackChanges = false; + outputChanges = false; secnumdepth = 3; tocdepth = 3; language = default_language; - fonts = "default"; + fontsRoman = "default"; + fontsSans = "default"; + fontsTypewriter = "default"; + fontsDefaultFamily = "default"; + fontsSC = false; + fontsOSF = false; + fontsSansScale = 100; + fontsTypewriterScale = 100; inputenc = "auto"; graphicsDriver = "default"; sides = LyXTextClass::OneSide; @@ -402,19 +413,28 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) lex.next(); string const classname = lex.getString(); pair pp = - textclasslist.NumberOfClass(classname); + textclasslist.numberOfClass(classname); if (pp.first) { textclass = pp.second; } else { - textclass = 0; - return classname; + // if text class does not exist, try to load it from filepath + pp = textclasslist.addTextClass(classname, filepath); + if (pp.first) { + textclass = pp.second; + } else { + textclass = 0; + return classname; + } } + // FIXME: isTeXClassAvailable will try to load the layout file, but will + // fail because of the lack of path info. Warnings will be given although + // the layout file will be correctly loaded later. if (!getLyXTextClass().isTeXClassAvailable()) { - string const msg = + docstring const msg = bformat(_("The document uses a missing " - "TeX class \"%1$s\".\n"), classname); + "TeX class \"%1$s\".\n"), from_utf8(classname)); Alert::warning(_("Document class not available"), - msg + _("LyX will not be able to produce output.")); + msg + _("LyX will not be able to produce output.")); } } else if (token == "\\begin_preamble") { readPreamble(lex); @@ -427,8 +447,22 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) lex >> inputenc; } else if (token == "\\graphics") { readGraphicsDriver(lex); - } else if (token == "\\fontscheme") { - lex >> fonts; + } else if (token == "\\font_roman") { + lex >> fontsRoman; + } else if (token == "\\font_sans") { + lex >> fontsSans; + } else if (token == "\\font_typewriter") { + lex >> fontsTypewriter; + } else if (token == "\\font_default_family") { + lex >> fontsDefaultFamily; + } else if (token == "\\font_sc") { + lex >> fontsSC; + } else if (token == "\\font_osf") { + lex >> fontsOSF; + } else if (token == "\\font_sf_scale") { + lex >> fontsSansScale; + } else if (token == "\\font_tt_scale") { + lex >> fontsTypewriterScale; } else if (token == "\\paragraph_separation") { string parsep; lex >> parsep; @@ -449,7 +483,11 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) } else if (token == "\\use_amsmath") { int use_ams; lex >> use_ams; - use_amsmath = amstranslator().find(use_ams); + use_amsmath = packagetranslator().find(use_ams); + } else if (token == "\\use_esint") { + int useesint; + lex >> useesint; + use_esint = packagetranslator().find(useesint); } else if (token == "\\cite_engine") { string engine; lex >> engine; @@ -457,12 +495,12 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) } else if (token == "\\use_bibtopic") { lex >> use_bibtopic; } else if (token == "\\tracking_changes") { - lex >> tracking_changes; + lex >> trackChanges; } else if (token == "\\output_changes") { - lex >> output_changes; + lex >> outputChanges; } else if (token == "\\branch") { lex.next(); - string branch = lex.getString(); + docstring branch = lex.getDocString(); branchlist().add(branch); while (true) { lex.next(); @@ -484,7 +522,8 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) // Update also the LColor table: if (color == "none") color = lcolor.getX11Name(LColor::background); - lcolor.setColor(branch, color); + // FIXME UNICODE + lcolor.setColor(to_utf8(branch), color); } } @@ -578,7 +617,14 @@ void BufferParams::writeFile(ostream & os) const if (language != ignore_language) os << "\\language " << language->lang() << '\n'; os << "\\inputencoding " << inputenc - << "\n\\fontscheme " << fonts + << "\n\\font_roman " << fontsRoman + << "\n\\font_sans " << fontsSans + << "\n\\font_typewriter " << fontsTypewriter + << "\n\\font_default_family " << fontsDefaultFamily + << "\n\\font_sc " << convert(fontsSC) + << "\n\\font_osf " << convert(fontsOSF) + << "\n\\font_sf_scale " << fontsSansScale + << "\n\\font_tt_scale " << fontsTypewriterScale << "\n\\graphics " << graphicsDriver << '\n'; if (!float_placement.empty()) { @@ -591,6 +637,7 @@ void BufferParams::writeFile(ostream & os) const os << "\\papersize " << string_papersize[papersize] << "\n\\use_geometry " << convert(use_geometry) << "\n\\use_amsmath " << use_amsmath + << "\n\\use_esint " << use_esint << "\n\\cite_engine " << citeenginetranslator().find(cite_engine) << "\n\\use_bibtopic " << convert(use_bibtopic) << "\n\\paperorientation " << string_orientation[orientation] @@ -599,9 +646,9 @@ void BufferParams::writeFile(ostream & os) const BranchList::const_iterator it = branchlist().begin(); BranchList::const_iterator end = branchlist().end(); for (; it != end; ++it) { - os << "\\branch " << it->getBranch() + os << "\\branch " << to_utf8(it->getBranch()) << "\n\\selected " << it->getSelected() - << "\n\\color " << it->getColor() + << "\n\\color " << lyx::X11hexname(it->getColor()) << "\n\\end_branch" << "\n"; } @@ -652,27 +699,26 @@ void BufferParams::writeFile(ostream & os) const << user_defined_bullet(i).getSize() << "\n"; } else { + // FIXME UNICODE os << "\\bulletLaTeX " << i << " \"" - << user_defined_bullet(i).getText() + << lyx::to_ascii(user_defined_bullet(i).getText()) << "\"\n"; } } } - os << "\\tracking_changes " << convert(tracking_changes) << "\n"; - os << "\\output_changes " << convert(output_changes) << "\n"; + os << "\\tracking_changes " << convert(trackChanges) << "\n"; + os << "\\output_changes " << convert(outputChanges) << "\n"; - if (tracking_changes) { - AuthorList::Authors::const_iterator it = pimpl_->authorlist.begin(); - AuthorList::Authors::const_iterator end = pimpl_->authorlist.end(); - for (; it != end; ++it) { - os << "\\author " << it->second << "\n"; - } + AuthorList::Authors::const_iterator a_it = pimpl_->authorlist.begin(); + AuthorList::Authors::const_iterator a_end = pimpl_->authorlist.end(); + for (; a_it != a_end; ++a_it) { + os << "\\author " << a_it->second << "\n"; } } -bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, +bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, TexRow & texrow) const { os << "\\documentclass"; @@ -688,10 +734,10 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, } // custom, A3, B3 and B4 paper sizes need geometry - bool nonstandard_papersize = (papersize == PAPER_B3) || - (papersize == PAPER_B4) || - (papersize == PAPER_A3) || - (papersize == PAPER_CUSTOM); + bool nonstandard_papersize = papersize == PAPER_B3 + || papersize == PAPER_B4 + || papersize == PAPER_A3 + || papersize == PAPER_CUSTOM; if (!use_geometry) { switch (papersize) { @@ -769,47 +815,65 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, string strOptions(clsoptions.str()); if (!strOptions.empty()) { strOptions = rtrim(strOptions, ","); - os << '[' << strOptions << ']'; + // FIXME UNICODE + os << '[' << from_utf8(strOptions) << ']'; } - os << '{' << tclass.latexname() << "}\n"; + os << '{' << from_ascii(tclass.latexname()) << "}\n"; texrow.newline(); // end of \documentclass defs // font selection must be done before loading fontenc.sty - // The ae package is not needed when using OT1 font encoding. - if (fonts != "default" && - (fonts != "ae" || lyxrc.fontenc != "default")) { - os << "\\usepackage{" << fonts << "}\n"; + string const fonts = + loadFonts(features, fontsRoman, fontsSans, + fontsTypewriter, fontsSC, fontsOSF, + fontsSansScale, fontsTypewriterScale); + if (!fonts.empty()) { + os << from_ascii(fonts); texrow.newline(); - if (fonts == "ae") { - os << "\\usepackage{aecompl}\n"; - texrow.newline(); - } } + if (fontsDefaultFamily != "default") + os << "\\renewcommand{\\familydefault}{\\" + << from_ascii(fontsDefaultFamily) << "}\n"; // this one is not per buffer if (lyxrc.fontenc != "default") { - os << "\\usepackage[" << lyxrc.fontenc + os << "\\usepackage[" << from_ascii(lyxrc.fontenc) << "]{fontenc}\n"; texrow.newline(); } if (inputenc == "auto") { string const doc_encoding = - language->encoding()->LatexName(); + language->encoding()->latexName(); // Create a list with all the input encodings used // in the document std::set encodings = features.getEncodingSet(doc_encoding); - os << "\\usepackage["; - std::copy(encodings.begin(), encodings.end(), - std::ostream_iterator(os, ",")); - os << doc_encoding << "]{inputenc}\n"; - texrow.newline(); - } else if (inputenc != "default") { - os << "\\usepackage[" << inputenc + // thailatex does not use the inputenc package, but sets up + // babel directly for tis620-0 encoding, therefore we must + // not request inputenc for tis620-0 encoding + if (!encodings.empty() || doc_encoding != "tis620-0") { + os << "\\usepackage["; + std::set::const_iterator it = encodings.begin(); + std::set::const_iterator const end = encodings.end(); + if (it != end) { + os << from_ascii(*it); + ++it; + } + for (; it != end; ++it) + os << ',' << from_ascii(*it); + if (doc_encoding != "tis620-0") { + if (!encodings.empty()) + os << ','; + os << from_ascii(doc_encoding); + } + os << "]{inputenc}\n"; + texrow.newline(); + } + } else if (inputenc != "default" && inputenc != "tis620-0") { + os << "\\usepackage[" << from_ascii(inputenc) << "]{inputenc}\n"; texrow.newline(); } @@ -824,10 +888,10 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, case PAPER_CUSTOM: if (!paperwidth.empty()) os << ",paperwidth=" - << paperwidth; + << from_ascii(paperwidth); if (!paperheight.empty()) os << ",paperheight=" - << paperheight; + << from_ascii(paperheight); break; case PAPER_USLETTER: os << ",letterpaper"; @@ -888,19 +952,19 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, } } if (!topmargin.empty()) - os << ",tmargin=" << topmargin; + os << ",tmargin=" << from_ascii(topmargin); if (!bottommargin.empty()) - os << ",bmargin=" << bottommargin; + os << ",bmargin=" << from_ascii(bottommargin); if (!leftmargin.empty()) - os << ",lmargin=" << leftmargin; + os << ",lmargin=" << from_ascii(leftmargin); if (!rightmargin.empty()) - os << ",rmargin=" << rightmargin; + os << ",rmargin=" << from_ascii(rightmargin); if (!headheight.empty()) - os << ",headheight=" << headheight; + os << ",headheight=" << from_ascii(headheight); if (!headsep.empty()) - os << ",headsep=" << headsep; + os << ",headsep=" << from_ascii(headsep); if (!footskip.empty()) - os << ",footskip=" << footskip; + os << ",footskip=" << from_ascii(footskip); os << "}\n"; texrow.newline(); } @@ -911,67 +975,70 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, os << "\\usepackage{fancyhdr}\n"; texrow.newline(); } - os << "\\pagestyle{" << pagestyle << "}\n"; + os << "\\pagestyle{" << from_ascii(pagestyle) << "}\n"; texrow.newline(); } - if (secnumdepth != tclass.secnumdepth()) { - os << "\\setcounter{secnumdepth}{" - << secnumdepth - << "}\n"; - texrow.newline(); - } - if (tocdepth != tclass.tocdepth()) { - os << "\\setcounter{tocdepth}{" - << tocdepth - << "}\n"; - texrow.newline(); + // Only if class has a ToC hierarchy + if (tclass.hasTocLevels()) { + if (secnumdepth != tclass.secnumdepth()) { + os << "\\setcounter{secnumdepth}{" + << secnumdepth + << "}\n"; + texrow.newline(); + } + if (tocdepth != tclass.tocdepth()) { + os << "\\setcounter{tocdepth}{" + << tocdepth + << "}\n"; + texrow.newline(); + } } if (paragraph_separation) { switch (getDefSkip().kind()) { case VSpace::SMALLSKIP: - os << "\\setlength\\parskip{\\smallskipamount}\n"; + os << "\\setlength{\\parskip}{\\smallskipamount}\n"; break; case VSpace::MEDSKIP: - os << "\\setlength\\parskip{\\medskipamount}\n"; + os << "\\setlength{\\parskip}{\\medskipamount}\n"; break; case VSpace::BIGSKIP: - os << "\\setlength\\parskip{\\bigskipamount}\n"; + os << "\\setlength{\\parskip}{\\bigskipamount}\n"; break; case VSpace::LENGTH: - os << "\\setlength\\parskip{" - << getDefSkip().length().asLatexString() + os << "\\setlength{\\parskip}{" + << from_utf8(getDefSkip().length().asLatexString()) << "}\n"; break; default: // should never happen // Then delete it. - os << "\\setlength\\parskip{\\medskipamount}\n"; + os << "\\setlength{\\parskip}{\\medskipamount}\n"; break; } texrow.newline(); - os << "\\setlength\\parindent{0pt}\n"; + os << "\\setlength{\\parindent}{0pt}\n"; texrow.newline(); } // If we use jurabib, we have to call babel here. if (use_babel && features.isRequired("jurabib")) { - os << babelCall(language_options.str()) + os << from_ascii(babelCall(language_options.str())) << '\n' - << features.getBabelOptions(); + << from_ascii(features.getBabelOptions()); texrow.newline(); } // Now insert the LyX specific LaTeX commands... // The optional packages; - string lyxpreamble(features.getPackages()); + docstring lyxpreamble(from_ascii(features.getPackages())); // this might be useful... lyxpreamble += "\n\\makeatletter\n"; // Some macros LyX will need - string tmppreamble(features.getMacros()); + docstring tmppreamble(from_ascii(features.getMacros())); if (!tmppreamble.empty()) { lyxpreamble += "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% " @@ -989,9 +1056,10 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, /* the user-defined preamble */ if (!preamble.empty()) { + // FIXME UNICODE lyxpreamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% " "User specified LaTeX commands.\n" - + preamble + '\n'; + + from_utf8(preamble) + '\n'; } // Itemize bullet settings need to be last in case the user @@ -1000,11 +1068,11 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, // Actually it has to be done much later than that // since some packages like frenchb make modifications // at \begin{document} time -- JMarc - string bullets_def; + docstring bullets_def; for (int i = 0; i < 4; ++i) { if (user_defined_bullet(i) != ITEMIZE_DEFAULTS[i]) { if (bullets_def.empty()) - bullets_def="\\AtBeginDocument{\n"; + bullets_def += "\\AtBeginDocument{\n"; bullets_def += " \\def\\labelitemi"; switch (i) { // `i' is one less than the item to modify @@ -1033,14 +1101,15 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, // with other packages. // Jurabib has to be called after babel, though. if (use_babel && !features.isRequired("jurabib")) { - lyxpreamble += babelCall(language_options.str()) + '\n'; - lyxpreamble += features.getBabelOptions(); + // FIXME UNICODE + lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n'; + lyxpreamble += from_utf8(features.getBabelOptions()); } lyxpreamble += "\\makeatother\n"; // dvipost settings come after everything else - if (features.isAvailable("dvipost") && tracking_changes && output_changes) { + if (features.isAvailable("dvipost") && outputChanges) { lyxpreamble += "\\dvipostlayout\n" "\\dvipost{osstart color push Red}\n" @@ -1068,8 +1137,11 @@ void BufferParams::useClassDefaults() columns = tclass.columns(); pagestyle = tclass.pagestyle(); options = tclass.options(); - secnumdepth = tclass.secnumdepth(); - tocdepth = tclass.tocdepth(); + // Only if class has a ToC hierarchy + if (tclass.hasTocLevels()) { + secnumdepth = tclass.secnumdepth(); + tocdepth = tclass.tocdepth(); + } } @@ -1096,6 +1168,12 @@ LyXFont const BufferParams::getFont() const { LyXFont f = getLyXTextClass().defaultfont(); f.setLanguage(language); + if (fontsDefaultFamily == "rmdefault") + f.setFamily(LyXFont::ROMAN_FAMILY); + else if (fontsDefaultFamily == "sfdefault") + f.setFamily(LyXFont::SANS_FAMILY); + else if (fontsDefaultFamily == "ttdefault") + f.setFamily(LyXFont::TYPEWRITER_FAMILY); return f; } @@ -1176,7 +1254,7 @@ void BufferParams::readBulletsLaTeX(LyXLex & lex) if (!lex.next()) return; int const index = lex.getInteger(); lex.next(true); - string const temp_str = lex.getString(); + docstring const temp_str = lex.getDocString(); user_defined_bullet(index).setText(temp_str); temp_bullet(index).setText(temp_str); @@ -1247,3 +1325,156 @@ string const BufferParams::babelCall(string const & lang_opts) const tmp = string("\\usepackage[") + lang_opts + "]{babel}"; return tmp; } + + +string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm, + string const & sf, string const & tt, + bool const & sc, bool const & osf, + int const & sfscale, int const & ttscale) const +{ + /* The LaTeX font world is in a flux. In the PSNFSS font interface, + several packages have been replaced by others, that might not + be installed on every system. We have to take care for that + (see psnfss.pdf). We try to support all psnfss fonts as well + as the fonts that have become de facto standard in the LaTeX + world (e.g. Latin Modern). We do not support obsolete fonts + (like PSLatex). In general, it should be possible to mix any + rm font with any sf or tt font, respectively. (JSpitzm) + TODO: + -- separate math fonts. + */ + + if (rm == "default" && sf == "default" && tt == "default") + //nothing to do + return string(); + + ostringstream os; + + // ROMAN FONTS + // Computer Modern (must be explicitely selectable -- there might be classes + // that define a different default font! + if (rm == "cmr") { + os << "\\renewcommand{\\rmdefault}{cmr}\n"; + // osf for Computer Modern needs eco.sty + if (osf) + os << "\\usepackage{eco}\n"; + } + // Latin Modern Roman + else if (rm == "lmodern") + os << "\\usepackage{lmodern}\n"; + // AE + else if (rm == "ae") { + // not needed when using OT1 font encoding. + if (lyxrc.fontenc != "default") + os << "\\usepackage{ae,aecompl}\n"; + } + // Times + else if (rm == "times") { + // try to load the best available package + if (features.isAvailable("mathptmx")) + os << "\\usepackage{mathptmx}\n"; + else if (features.isAvailable("mathptm")) + os << "\\usepackage{mathptm}\n"; + else + os << "\\usepackage{times}\n"; + } + // Palatino + else if (rm == "palatino") { + // try to load the best available package + if (features.isAvailable("mathpazo")) { + os << "\\usepackage"; + if (osf || sc) { + os << '['; + if (!osf) + os << "sc"; + else + // "osf" includes "sc"! + os << "osf"; + os << ']'; + } + os << "{mathpazo}\n"; + } + else if (features.isAvailable("mathpple")) + os << "\\usepackage{mathpple}\n"; + else + os << "\\usepackage{palatino}\n"; + } + // Utopia + else if (rm == "utopia") { + // fourier supersedes utopia.sty, but does + // not work with OT1 encoding. + if (features.isAvailable("fourier") + && lyxrc.fontenc != "default") { + os << "\\usepackage"; + if (osf || sc) { + os << '['; + if (sc) + os << "expert"; + if (osf && sc) + os << ','; + if (osf) + os << "oldstyle"; + os << ']'; + } + os << "{fourier}\n"; + } + else + os << "\\usepackage{utopia}\n"; + } + // Bera (complete fontset) + else if (rm == "bera" && sf == "default" && tt == "default") + os << "\\usepackage{bera}\n"; + // everything else + else if (rm != "default") + os << "\\usepackage" << "{" << rm << "}\n"; + + // SANS SERIF + // Helvetica, Bera Sans + if (sf == "helvet" || sf == "berasans") { + if (sfscale != 100) + os << "\\usepackage[scaled=" << float(sfscale) / 100 + << "]{" << sf << "}\n"; + else + os << "\\usepackage{" << sf << "}\n"; + } + // Avant Garde + else if (sf == "avant") + os << "\\usepackage{" << sf << "}\n"; + // Computer Modern, Latin Modern, CM Bright + else if (sf != "default") + os << "\\renewcommand{\\sfdefault}{" << sf << "}\n"; + + // monospaced/typewriter + // Courier, LuxiMono + if (tt == "luximono" || tt == "beramono") { + if (ttscale != 100) + os << "\\usepackage[scaled=" << float(ttscale) / 100 + << "]{" << tt << "}\n"; + else + os << "\\usepackage{" << tt << "}\n"; + } + // Courier + else if (tt == "courier" ) + os << "\\usepackage{" << tt << "}\n"; + // Computer Modern, Latin Modern, CM Bright + else if (tt != "default") + os << "\\renewcommand{\\ttdefault}{" << tt << "}\n"; + + return os.str(); +} + + +Encoding const & BufferParams::encoding() const +{ + if (inputenc == "auto" || inputenc == "default") + return *(language->encoding()); + Encoding const * const enc = + encodings.getFromLaTeXName(inputenc); + if (enc) + return *enc; + lyxerr << "Unknown inputenc value `" << inputenc + << "'. Using `auto' instead." << endl; + return *(language->encoding()); +} + +} // namespace lyx