X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=2a3841f85dd976b9999fd834588cc4654589fc30;hb=04e6076ebb889a3215eaa4ff5cb200822611185c;hp=15ed12edadc0f75569b41761d395f98d13fa81b1;hpb=3d91ff0e409f5fd8b3864af9d51a90d63fbd1bdb;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 15ed12edad..2a3841f85d 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -74,7 +74,8 @@ static char const * const string_papersize[] = { "default", "custom", "letterpaper", "legalpaper", "executivepaper", "a0paper", "a1paper", "a2paper", "a3paper", "a4paper", "a5paper", "a6paper", "b0paper", "b1paper", "b2paper","b3paper", "b4paper", - "b5paper", "b6paper", "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", + "b5paper", "b6paper", "c0paper", "c1paper", "c2paper", "c3paper", + "c4paper", "c5paper", "c6paper", "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", "b6j", "" }; @@ -173,13 +174,20 @@ static PaperSizeTranslator initPaperSizeTranslator() translator.addPair(string_papersize[16], PAPER_B4); translator.addPair(string_papersize[17], PAPER_B5); translator.addPair(string_papersize[18], PAPER_B6); - translator.addPair(string_papersize[19], PAPER_JISB0); - translator.addPair(string_papersize[20], PAPER_JISB1); - translator.addPair(string_papersize[21], PAPER_JISB2); - translator.addPair(string_papersize[22], PAPER_JISB3); - translator.addPair(string_papersize[23], PAPER_JISB4); - translator.addPair(string_papersize[24], PAPER_JISB5); - translator.addPair(string_papersize[25], PAPER_JISB6); + translator.addPair(string_papersize[19], PAPER_C0); + translator.addPair(string_papersize[20], PAPER_C1); + translator.addPair(string_papersize[21], PAPER_C2); + translator.addPair(string_papersize[22], PAPER_C3); + translator.addPair(string_papersize[23], PAPER_C4); + translator.addPair(string_papersize[24], PAPER_C5); + translator.addPair(string_papersize[25], PAPER_C6); + translator.addPair(string_papersize[26], PAPER_JISB0); + translator.addPair(string_papersize[27], PAPER_JISB1); + translator.addPair(string_papersize[28], PAPER_JISB2); + translator.addPair(string_papersize[29], PAPER_JISB3); + translator.addPair(string_papersize[30], PAPER_JISB4); + translator.addPair(string_papersize[31], PAPER_JISB5); + translator.addPair(string_papersize[32], PAPER_JISB6); return translator; } @@ -355,6 +363,7 @@ BufferParams::BufferParams() use_amsmath = package_auto; use_esint = package_auto; use_mhchem = package_auto; + use_mathdots = package_auto; cite_engine_ = ENGINE_BASIC; use_bibtopic = false; use_indices = false; @@ -404,8 +413,9 @@ BufferParams::BufferParams() html_be_strict = false; html_math_output = MathML; html_math_img_scale = 1.0; - html_latex_start = ""; - html_latex_end = ""; + + output_sync = false; + use_refstyle = true; } @@ -524,6 +534,8 @@ VSpace const & BufferParams::getDefSkip() const void BufferParams::setDefSkip(VSpace const & vs) { + // DEFSKIP will cause an infinite loop + LASSERT(vs.kind() != VSpace::DEFSKIP, return); pimpl_->defskip = vs; } @@ -547,19 +559,19 @@ string BufferParams::readToken(Lexer & lex, string const & token, // We assume that a tex class exists for local or unknown layouts so this warning // will only be given for system layouts. if (!baseClass()->isTeXClassAvailable()) { - docstring desc = + docstring const desc = translateIfPossible(from_utf8(baseClass()->description())); + docstring const prereqs = from_utf8(baseClass()->prerequisites()); docstring const msg = - bformat(_("The used document class\n" + bformat(_("The selected document class\n" "\t%1$s\n" "requires external files that are not available.\n" - "The document class can still be used, but LyX\n" - "will not be able to produce output until the\n" - "following prerequisites are installed:\n" + "The document class can still be used, but the\n" + "document cannot be compiled until the following\n" + "prerequisites are installed:\n" "\t%2$s\n" "See section 3.1.2.2 of the User's Guide for\n" - "more information."), - desc, from_utf8(baseClass()->prerequisites())); + "more information."), desc, prereqs); frontend::Alert::warning(_("Document class not available"), msg); } @@ -635,11 +647,11 @@ string BufferParams::readToken(Lexer & lex, string const & token, pimpl_->indentation = HSpace(indentation); } else if (token == "\\defskip") { lex.next(); - string defskip = lex.getString(); - if (defskip == "defskip") - // this is invalid - defskip = "medskip"; + string const defskip = lex.getString(); pimpl_->defskip = VSpace(defskip); + if (pimpl_->defskip.kind() == VSpace::DEFSKIP) + // that is invalid + pimpl_->defskip = VSpace(VSpace::MEDSKIP); } else if (token == "\\quotes_language") { string quotes_lang; lex >> quotes_lang; @@ -662,6 +674,10 @@ string BufferParams::readToken(Lexer & lex, string const & token, int usemhchem; lex >> usemhchem; use_mhchem = packagetranslator().find(usemhchem); + } else if (token == "\\use_mathdots") { + int usemathdots; + lex >> usemathdots; + use_mathdots = packagetranslator().find(usemathdots); } else if (token == "\\cite_engine") { string engine; lex >> engine; @@ -831,9 +847,17 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\html_math_img_scale") { lex >> html_math_img_scale; } else if (token == "\\html_latex_start") { - lex >> html_latex_start; + lex.eatLine(); + html_latex_start = lex.getString(); } else if (token == "\\html_latex_end") { - lex >> html_latex_end; + lex.eatLine(); + html_latex_end = lex.getString(); + } else if (token == "\\output_sync") { + lex >> output_sync; + } else if (token == "\\output_sync_macro") { + lex >> output_sync_macro; + } else if (token == "\\use_refstyle") { + lex >> use_refstyle; } else { lyxerr << "BufferParams::readToken(): Unknown token: " << token << endl; @@ -936,6 +960,9 @@ void BufferParams::writeFile(ostream & os) const } os << "\n\\graphics " << graphicsDriver << '\n'; os << "\\default_output_format " << defaultOutputFormat << '\n'; + os << "\\output_sync " << output_sync << '\n'; + if (!output_sync_macro.empty()) + os << "\\output_sync_macro \"" << output_sync_macro << "\"\n"; os << "\\bibtex_command " << bibtex_command << '\n'; os << "\\index_command " << index_command << '\n'; @@ -952,11 +979,13 @@ void BufferParams::writeFile(ostream & os) const << "\n\\use_amsmath " << use_amsmath << "\n\\use_esint " << use_esint << "\n\\use_mhchem " << use_mhchem + << "\n\\use_mathdots " << use_mathdots << "\n\\cite_engine " << citeenginetranslator().find(cite_engine_) << "\n\\use_bibtopic " << convert(use_bibtopic) << "\n\\use_indices " << convert(use_indices) << "\n\\paperorientation " << string_orientation[orientation] << "\n\\suppress_date " << convert(suppress_date) + << "\n\\use_refstyle " << use_refstyle << '\n'; if (isbackgroundcolor == true) os << "\\backgroundcolor " << lyx::X11hexname(backgroundcolor) << '\n'; @@ -1054,10 +1083,14 @@ void BufferParams::writeFile(ostream & os) const os << "\\tracking_changes " << convert(trackChanges) << '\n' << "\\output_changes " << convert(outputChanges) << '\n' << "\\html_math_output " << html_math_output << '\n' - << "\\html_be_strict " << convert(html_be_strict) << '\n' - << "\\html_math_img_scale " << convert(html_math_img_scale) << '\n' - << "\\html_latex_start \"" << html_latex_start << "\"\n" - << "\\html_latex_end \"" << html_latex_end << "\"\n"; + << "\\html_be_strict " << convert(html_be_strict) << '\n'; + + if (html_math_img_scale != 1.0) + os << "\\html_math_img_scale " << convert(html_math_img_scale) << '\n'; + if (!html_latex_start.empty()) + os << "\\html_latex_start " << html_latex_start << '\n'; + if (!html_latex_end.empty()) + os << "\\html_latex_end " << html_latex_end << '\n'; os << pimpl_->authorlist; } @@ -1114,6 +1147,8 @@ void BufferParams::validate(LaTeXFeatures & features) const features.require("esint"); if (use_mhchem == package_on) features.require("mhchem"); + if (use_mathdots == package_on) + features.require("mathdots"); // Document-level line spacing if (spacing().getSpace() != Spacing::Single && !spacing().isDefault()) @@ -1217,6 +1252,13 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_B3: case PAPER_B4: case PAPER_B6: + case PAPER_C0: + case PAPER_C1: + case PAPER_C2: + case PAPER_C3: + case PAPER_C4: + case PAPER_C5: + case PAPER_C6: case PAPER_JISB0: case PAPER_JISB1: case PAPER_JISB2: @@ -1260,7 +1302,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, features.useLanguage(default_language); ostringstream language_options; - bool const use_babel = features.useBabel(); + bool const use_babel = features.useBabel() && !tclass.provides("babel"); if (use_babel) { language_options << features.getLanguages(); if (!language->babel().empty()) { @@ -1335,7 +1377,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // LFE encoding // XeTeX works without fontenc if (font_encoding() != "default" && language->lang() != "japanese" - && !useXetex) { + && !useXetex && !tclass.provides("fontenc")) { size_t fars = language_options.str().find("farsi"); size_t arab = language_options.str().find("arabic"); if (language->lang() == "arabic_arabi" @@ -1467,6 +1509,27 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_B6: ods << ",b6paper"; break; + case PAPER_C0: + ods << ",c0paper"; + break; + case PAPER_C1: + ods << ",c1paper"; + break; + case PAPER_C2: + ods << ",c2paper"; + break; + case PAPER_C3: + ods << ",c3paper"; + break; + case PAPER_C4: + ods << ",c4paper"; + break; + case PAPER_C5: + ods << ",c5paper"; + break; + case PAPER_C6: + ods << ",c6paper"; + break; case PAPER_JISB0: ods << ",b0j"; break; @@ -1523,6 +1586,13 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_B3: case PAPER_B4: case PAPER_B6: + case PAPER_C0: + case PAPER_C1: + case PAPER_C2: + case PAPER_C3: + case PAPER_C4: + case PAPER_C5: + case PAPER_C6: case PAPER_JISB0: case PAPER_JISB1: case PAPER_JISB2: @@ -1540,7 +1610,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, os << '[' << g_options << ']'; os << "{geometry}\n"; texrow.newline(); - // output this if only use_geometry is true + // output this only if use_geometry is true if (use_geometry) { os << "\\geometry{verbose"; if (!topmargin.empty()) @@ -1649,6 +1719,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // Now insert the LyX specific LaTeX commands... docstring lyxpreamble; + if (output_sync) { + if (!output_sync_macro.empty()) + lyxpreamble += from_utf8(output_sync_macro) +"\n"; + else if (features.runparams().flavor == OutputParams::LATEX) + lyxpreamble += "\\usepackage[active]{srcltx}\n"; + else if (features.runparams().flavor == OutputParams::PDFLATEX) + lyxpreamble += "\\synctex=-1\n"; + } + // due to interferences with babel and hyperref, the color package has to // be loaded (when it is not already loaded) before babel when hyperref // is used with the colorlinks option, see @@ -1710,7 +1789,9 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, texrow.newlines(lines); // set back for the rest lyxpreamble.clear(); - } + } else if (features.isRequired("nameref")) + // hyperref loads this automatically + lyxpreamble += "\\usepackage{nameref}\n"; // Will be surrounded by \makeatletter and \makeatother when not empty docstring atlyxpreamble; @@ -1867,12 +1948,14 @@ DocumentClass const & BufferParams::documentClass() const } -DocumentClass const * BufferParams::documentClassPtr() const { +DocumentClass const * BufferParams::documentClassPtr() const +{ return doc_class_; } -void BufferParams::setDocumentClass(DocumentClass const * const tc) { +void BufferParams::setDocumentClass(DocumentClass const * const tc) +{ // evil, but this function is evil doc_class_ = const_cast(tc); } @@ -2213,6 +2296,34 @@ string BufferParams::paperSizeName(PapersizePurpose purpose) const if (purpose == DVIPS || purpose == DVIPDFM) return string(); return "b6"; + case PAPER_C0: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c0"; + case PAPER_C1: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c1"; + case PAPER_C2: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c2"; + case PAPER_C3: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c3"; + case PAPER_C4: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c4"; + case PAPER_C5: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c5"; + case PAPER_C6: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "c6"; case PAPER_JISB0: if (purpose == DVIPS || purpose == DVIPDFM) return string();