X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.C;h=d7e58ef4d7cf6d3351cf5dc8703ae7b0a827fe94;hb=ba62665f966508db5a4de6864f4aa7374c5a5356;hp=420df763da8ba5e5bfc3fa5c7aef6e241fded93c;hpb=de6418f37765fe452f135f96dee6d49897bff215;p=lyx.git diff --git a/src/bufferparams.C b/src/bufferparams.C index 420df763da..d7e58ef4d7 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -174,23 +174,22 @@ SidesTranslator const & sidestranslator() } +// LaTeX packages +typedef Translator PackageTranslator; -// AMS -typedef Translator AMSTranslator; - -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; } @@ -237,9 +236,18 @@ SpaceTranslator const & spacetranslator() return translator; } -// ends annonym namespace + +textclass_type defaultTextclass() +{ + // Initialize textclass to point to article. if `first' is + // 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. + return textclasslist.numberOfClass("article").second; } +} // anon namespace + class BufferParams::Impl { @@ -262,7 +270,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))); } @@ -282,12 +291,7 @@ void BufferParams::MemoryTraits::destroy(BufferParams::Impl * ptr) BufferParams::BufferParams() - : // Initialize textclass to point to article. if `first' is - // 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), - pimpl_(new Impl) + : textclass(defaultTextclass()), pimpl_(new Impl) { paragraph_separation = PARSEP_INDENT; quotes_language = InsetQuotes::EnglishQ; @@ -297,7 +301,8 @@ 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; trackChanges = false; @@ -421,7 +426,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) if (pp.first) { textclass = pp.second; } else { - textclass = 0; + textclass = defaultTextclass(); return classname; } } @@ -482,7 +487,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; @@ -495,7 +504,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) lex >> outputChanges; } else if (token == "\\branch") { lex.next(); - string branch = lex.getString(); + docstring branch = lex.getDocString(); branchlist().add(branch); while (true) { lex.next(); @@ -517,7 +526,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); } } @@ -631,6 +641,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] @@ -639,7 +650,7 @@ 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 " << lyx::X11hexname(it->getColor()) << "\n\\end_branch" @@ -818,7 +829,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // font selection must be done before loading fontenc.sty string const fonts = - loadFonts(features, fontsRoman, fontsSans, + loadFonts(fontsRoman, fontsSans, fontsTypewriter, fontsSC, fontsOSF, fontsSansScale, fontsTypewriterScale); if (!fonts.empty()) { @@ -835,32 +846,41 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, texrow.newline(); } - // TODO: Some people want to support more encodings than UTF-8. They can have a field day around here - if (true) { - os << "\\usepackage[utf8]{inputenc}\n"; - texrow.newline(); - } else { - if (inputenc == "auto") { - string const doc_encoding = - language->encoding()->latexName(); + if (inputenc == "auto") { + string const doc_encoding = + language->encoding()->latexName(); - // Create a list with all the input encodings used - // in the document - std::set encodings = - features.getEncodingSet(doc_encoding); + // Create a list with all the input encodings used + // in the document + std::set encodings = + features.getEncodingSet(doc_encoding); + // 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) << ','; - os << from_ascii(doc_encoding) << "]{inputenc}\n"; - texrow.newline(); - } else if (inputenc != "default") { - os << "\\usepackage[" << from_ascii(inputenc) - << "]{inputenc}\n"; + 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" && + inputenc != "ascii") { + os << "\\usepackage[" << from_ascii(inputenc) + << "]{inputenc}\n"; + texrow.newline(); } if (use_geometry || nonstandard_papersize) { @@ -983,26 +1003,26 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, 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{" + 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(); } @@ -1017,13 +1037,13 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // 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%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% " @@ -1041,9 +1061,10 @@ bool BufferParams::writeLaTeX(odocstream & 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 @@ -1052,11 +1073,11 @@ bool BufferParams::writeLaTeX(odocstream & 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 @@ -1072,9 +1093,8 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, bullets_def += 'v'; break; } - // FIXME UNICODE bullets_def += '{' + - lyx::to_ascii(user_defined_bullet(i).getText()) + user_defined_bullet(i).getText() + "}\n"; } } @@ -1086,8 +1106,9 @@ bool BufferParams::writeLaTeX(odocstream & 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"; @@ -1108,8 +1129,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, texrow.newline(); } - // FIXME UNICODE - os << from_utf8(lyxpreamble); + os << lyxpreamble; return use_babel; } @@ -1312,7 +1332,7 @@ string const BufferParams::babelCall(string const & lang_opts) const } -string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm, +string const BufferParams::loadFonts(string const & rm, string const & sf, string const & tt, bool const & sc, bool const & osf, int const & sfscale, int const & ttscale) const @@ -1356,9 +1376,9 @@ string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm // Times else if (rm == "times") { // try to load the best available package - if (features.isAvailable("mathptmx")) + if (LaTeXFeatures::isAvailable("mathptmx")) os << "\\usepackage{mathptmx}\n"; - else if (features.isAvailable("mathptm")) + else if (LaTeXFeatures::isAvailable("mathptm")) os << "\\usepackage{mathptm}\n"; else os << "\\usepackage{times}\n"; @@ -1366,7 +1386,7 @@ string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm // Palatino else if (rm == "palatino") { // try to load the best available package - if (features.isAvailable("mathpazo")) { + if (LaTeXFeatures::isAvailable("mathpazo")) { os << "\\usepackage"; if (osf || sc) { os << '['; @@ -1379,7 +1399,7 @@ string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm } os << "{mathpazo}\n"; } - else if (features.isAvailable("mathpple")) + else if (LaTeXFeatures::isAvailable("mathpple")) os << "\\usepackage{mathpple}\n"; else os << "\\usepackage{palatino}\n"; @@ -1388,7 +1408,7 @@ string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm else if (rm == "utopia") { // fourier supersedes utopia.sty, but does // not work with OT1 encoding. - if (features.isAvailable("fourier") + if (LaTeXFeatures::isAvailable("fourier") && lyxrc.fontenc != "default") { os << "\\usepackage"; if (osf || sc) { @@ -1449,4 +1469,17 @@ string const BufferParams::loadFonts(LaTeXFeatures & features, string const & rm } +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