X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=2a3841f85dd976b9999fd834588cc4654589fc30;hb=04e6076ebb889a3215eaa4ff5cb200822611185c;hp=9a64ec6cf5e6a859de99c7e8eddcb7056eaab53b;hpb=870e4549f9aeab8ebe8d3a703dbdfb10c386d9fa;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 9a64ec6cf5..2a3841f85d 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -72,7 +72,11 @@ static char const * const string_quotes_language[] = { static char const * const string_papersize[] = { "default", "custom", "letterpaper", "legalpaper", "executivepaper", - "a3paper", "a4paper", "a5paper", "b3paper", "b4paper", "b5paper", "" + "a0paper", "a1paper", "a2paper", "a3paper", "a4paper", "a5paper", + "a6paper", "b0paper", "b1paper", "b2paper","b3paper", "b4paper", + "b5paper", "b6paper", "c0paper", "c1paper", "c2paper", "c3paper", + "c4paper", "c5paper", "c6paper", "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", + "b6j", "" }; @@ -156,12 +160,34 @@ static PaperSizeTranslator initPaperSizeTranslator() translator.addPair(string_papersize[2], PAPER_USLETTER); translator.addPair(string_papersize[3], PAPER_USLEGAL); translator.addPair(string_papersize[4], PAPER_USEXECUTIVE); - translator.addPair(string_papersize[5], PAPER_A3); - translator.addPair(string_papersize[6], PAPER_A4); - translator.addPair(string_papersize[7], PAPER_A5); - translator.addPair(string_papersize[8], PAPER_B3); - translator.addPair(string_papersize[9], PAPER_B4); - translator.addPair(string_papersize[10], PAPER_B5); + translator.addPair(string_papersize[5], PAPER_A0); + translator.addPair(string_papersize[6], PAPER_A1); + translator.addPair(string_papersize[7], PAPER_A2); + translator.addPair(string_papersize[8], PAPER_A3); + translator.addPair(string_papersize[9], PAPER_A4); + translator.addPair(string_papersize[10], PAPER_A5); + translator.addPair(string_papersize[11], PAPER_A6); + translator.addPair(string_papersize[12], PAPER_B0); + translator.addPair(string_papersize[13], PAPER_B1); + translator.addPair(string_papersize[14], PAPER_B2); + translator.addPair(string_papersize[15], PAPER_B3); + 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_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; } @@ -337,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; @@ -367,17 +394,28 @@ BufferParams::BufferParams() listings_params = string(); pagestyle = "default"; suppress_date = false; - // white is equal to no background color + // no color is the default (white) backgroundcolor = lyx::rgbFromHexName("#ffffff"); - compressed = false; + isbackgroundcolor = false; + // no color is the default (black) + fontcolor = lyx::rgbFromHexName("#000000"); + isfontcolor = false; + // light gray is the default font color for greyed-out notes + notefontcolor = lyx::rgbFromHexName("#cccccc"); + boxbgcolor = lyx::rgbFromHexName("#ff0000"); + compressed = lyxrc.save_compressed; for (int iter = 0; iter < 4; ++iter) { user_defined_bullet(iter) = ITEMIZE_DEFAULTS[iter]; temp_bullet(iter) = ITEMIZE_DEFAULTS[iter]; } // default index indiceslist().addDefault(B_("Index")); - html_be_strict = true; - html_use_mathml = true; + html_be_strict = false; + html_math_output = MathML; + html_math_img_scale = 1.0; + + output_sync = false; + use_refstyle = true; } @@ -496,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; } @@ -511,7 +551,7 @@ string BufferParams::readToken(Lexer & lex, string const & token, string tcp; LayoutFileList & bcl = LayoutFileList::get(); if (tcp.empty() && !filepath.empty()) - tcp = bcl.addLocalLayout(classname, filepath.absFilename()); + tcp = bcl.addLocalLayout(classname, filepath.absFileName()); if (!tcp.empty()) setBaseClass(tcp); else @@ -519,16 +559,22 @@ 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 const desc = + translateIfPossible(from_utf8(baseClass()->description())); + docstring const prereqs = from_utf8(baseClass()->prerequisites()); docstring const msg = - bformat(_("The layout file requested by this document,\n" - "%1$s.layout,\n" - "is not usable. This is probably because a LaTeX\n" - "class or style file required by it is not\n" - "available. See the Customization documentation\n" - "for more information.\n"), from_utf8(classname)); + 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 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, prereqs); frontend::Alert::warning(_("Document class not available"), - msg + _("LyX will not be able to produce output.")); - } + msg); + } } else if (token == "\\begin_preamble") { readPreamble(lex); } else if (token == "\\begin_local_layout") { @@ -601,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; @@ -628,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; @@ -658,7 +708,7 @@ string BufferParams::readToken(Lexer & lex, string const & token, if (tok == "\\filename_suffix") { lex.next(); if (branch_ptr) - branch_ptr->setFilenameSuffix(lex.getInteger()); + branch_ptr->setFileNameSuffix(lex.getInteger()); } if (tok == "\\color") { lex.eatLine(); @@ -715,6 +765,19 @@ string BufferParams::readToken(Lexer & lex, string const & token, } else if (token == "\\backgroundcolor") { lex.eatLine(); backgroundcolor = lyx::rgbFromHexName(lex.getString()); + isbackgroundcolor = true; + } else if (token == "\\fontcolor") { + lex.eatLine(); + fontcolor = lyx::rgbFromHexName(lex.getString()); + isfontcolor = true; + } else if (token == "\\notefontcolor") { + lex.eatLine(); + string color = lex.getString(); + notefontcolor = lyx::rgbFromHexName(color); + } else if (token == "\\boxbgcolor") { + lex.eatLine(); + string color = lex.getString(); + boxbgcolor = lyx::rgbFromHexName(color); } else if (token == "\\paperwidth") { lex >> paperwidth; } else if (token == "\\paperheight") { @@ -775,10 +838,26 @@ string BufferParams::readToken(Lexer & lex, string const & token, toktmp << endl; return toktmp; } - } else if (token == "\\html_use_mathml") { - lex >> html_use_mathml; + } else if (token == "\\html_math_output") { + int temp; + lex >> temp; + html_math_output = static_cast(temp); } else if (token == "\\html_be_strict") { lex >> html_be_strict; + } else if (token == "\\html_math_img_scale") { + lex >> html_math_img_scale; + } else if (token == "\\html_latex_start") { + lex.eatLine(); + html_latex_start = lex.getString(); + } else if (token == "\\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; @@ -881,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'; @@ -897,21 +979,29 @@ 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 (backgroundcolor != lyx::rgbFromHexName("#ffffff")) + if (isbackgroundcolor == true) os << "\\backgroundcolor " << lyx::X11hexname(backgroundcolor) << '\n'; + if (isfontcolor == true) + os << "\\fontcolor " << lyx::X11hexname(fontcolor) << '\n'; + if (notefontcolor != lyx::rgbFromHexName("#cccccc")) + os << "\\notefontcolor " << lyx::X11hexname(notefontcolor) << '\n'; + if (boxbgcolor != lyx::rgbFromHexName("#ff0000")) + os << "\\boxbgcolor " << lyx::X11hexname(boxbgcolor) << '\n'; BranchList::const_iterator it = branchlist().begin(); BranchList::const_iterator end = branchlist().end(); for (; it != end; ++it) { os << "\\branch " << to_utf8(it->branch()) << "\n\\selected " << it->isSelected() - << "\n\\filename_suffix " << it->hasFilenameSuffix() + << "\n\\filename_suffix " << it->hasFileNameSuffix() << "\n\\color " << lyx::X11hexname(it->color()) << "\n\\end_branch" << "\n"; @@ -990,10 +1080,17 @@ void BufferParams::writeFile(ostream & os) const } } - os << "\\tracking_changes " << convert(trackChanges) << "\n" - << "\\output_changes " << convert(outputChanges) << "\n" - << "\\html_use_mathml " << convert(html_use_mathml) << "\n" - << "\\html_be_strict " << convert(html_be_strict) << "\n"; + 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'; + + 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; } @@ -1050,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()) @@ -1111,11 +1210,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, clsoptions << fontsize << "pt,"; } - // custom, A3, B3 and B4 paper sizes need geometry - bool nonstandard_papersize = papersize == PAPER_B3 - || papersize == PAPER_B4 - || papersize == PAPER_A3 - || papersize == PAPER_CUSTOM; + // all paper sizes except of A4, A5, B5 and the US sizes need the + // geometry package + bool nonstandard_papersize = papersize != PAPER_DEFAULT + && papersize != PAPER_USLETTER + && papersize != PAPER_USLEGAL + && papersize != PAPER_USEXECUTIVE + && papersize != PAPER_A4 + && papersize != PAPER_A5 + && papersize != PAPER_B5; if (!use_geometry) { switch (papersize) { @@ -1138,9 +1241,31 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, clsoptions << "legalpaper,"; break; case PAPER_DEFAULT: + case PAPER_A0: + case PAPER_A1: + case PAPER_A2: case PAPER_A3: + case PAPER_A6: + case PAPER_B0: + case PAPER_B1: + case PAPER_B2: 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: + case PAPER_JISB3: + case PAPER_JISB4: + case PAPER_JISB5: + case PAPER_JISB6: case PAPER_CUSTOM: break; } @@ -1177,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()) { @@ -1192,10 +1317,12 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // viet = string::npos when not found // the same is for all other languages that are not directly supported by // babel, but where LaTeX-packages add babel support. - // this is currently the case for Latvian, Lithuanian, and Mongolian + // this is currently the case for Latvian, Lithuanian, Mongolian + // and Turkmen size_t latvian = language_options.str().find("latvian"); size_t lithu = language_options.str().find("lithuanian"); size_t mongo = language_options.str().find("mongolian"); + size_t turkmen = language_options.str().find("turkmen"); // if Japanese is used, babel must directly be loaded // with language options, not in the class options, see // http://www.lyx.org/trac/ticket/4597#c4 @@ -1203,7 +1330,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, if (lyxrc.language_global_options && !language_options.str().empty() && viet == string::npos && japan == string::npos && latvian == string::npos && lithu == string::npos - && mongo == string::npos) + && mongo == string::npos && turkmen == string::npos) clsoptions << language_options.str() << ','; } @@ -1250,9 +1377,12 @@ 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" - || language->lang() == "farsi") { + || language->lang() == "farsi" || fars != string::npos + || arab != string::npos) { os << "\\usepackage[" << from_ascii(font_encoding()) << ",LFE,LAE]{fontenc}\n"; texrow.newline(); @@ -1273,9 +1403,9 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, bool first = true; for (; it != includedChildren_.end() ; ++it) { string incfile = *it; - FileName inc = makeAbsPath(incfile, filepath.absFilename()); - string mangled = DocFileName(changeExtension(inc.absFilename(), ".tex")). - mangledFilename(); + FileName inc = makeAbsPath(incfile, filepath.absFileName()); + string mangled = DocFileName(changeExtension(inc.absFileName(), ".tex")). + mangledFileName(); if (!features.runparams().nice) incfile = mangled; // \includeonly doesn't want an extension @@ -1337,6 +1467,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_USEXECUTIVE: ods << ",executivepaper"; break; + case PAPER_A0: + ods << ",a0paper"; + break; + case PAPER_A1: + ods << ",a1paper"; + break; + case PAPER_A2: + ods << ",a2paper"; + break; case PAPER_A3: ods << ",a3paper"; break; @@ -1346,6 +1485,18 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_A5: ods << ",a5paper"; break; + case PAPER_A6: + ods << ",a6paper"; + break; + case PAPER_B0: + ods << ",b0paper"; + break; + case PAPER_B1: + ods << ",b1paper"; + break; + case PAPER_B2: + ods << ",b2paper"; + break; case PAPER_B3: ods << ",b3paper"; break; @@ -1355,6 +1506,51 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_B5: ods << ",b5paper"; break; + 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; + case PAPER_JISB1: + ods << ",b1j"; + break; + case PAPER_JISB2: + ods << ",b2j"; + break; + case PAPER_JISB3: + ods << ",b3j"; + break; + case PAPER_JISB4: + ods << ",b4j"; + break; + case PAPER_JISB5: + ods << ",b5j"; + break; + case PAPER_JISB6: + ods << ",b6j"; + break; default: // default papersize ie PAPER_DEFAULT switch (lyxrc.default_papersize) { @@ -1380,8 +1576,30 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, case PAPER_B5: ods << ",b5paper"; break; + case PAPER_A0: + case PAPER_A1: + case PAPER_A2: + case PAPER_A6: + case PAPER_B0: + case PAPER_B1: + case PAPER_B2: 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: + case PAPER_JISB3: + case PAPER_JISB4: + case PAPER_JISB5: + case PAPER_JISB6: case PAPER_CUSTOM: break; } @@ -1392,26 +1610,30 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, os << '[' << g_options << ']'; os << "{geometry}\n"; texrow.newline(); - os << "\\geometry{verbose"; - if (!topmargin.empty()) - os << ",tmargin=" << from_ascii(Length(topmargin).asLatexString()); - if (!bottommargin.empty()) - os << ",bmargin=" << from_ascii(Length(bottommargin).asLatexString()); - if (!leftmargin.empty()) - os << ",lmargin=" << from_ascii(Length(leftmargin).asLatexString()); - if (!rightmargin.empty()) - os << ",rmargin=" << from_ascii(Length(rightmargin).asLatexString()); - if (!headheight.empty()) - os << ",headheight=" << from_ascii(Length(headheight).asLatexString()); - if (!headsep.empty()) - os << ",headsep=" << from_ascii(Length(headsep).asLatexString()); - if (!footskip.empty()) - os << ",footskip=" << from_ascii(Length(footskip).asLatexString()); - if (!columnsep.empty()) - os << ",columnsep=" << from_ascii(Length(columnsep).asLatexString()); - os << "}\n"; - texrow.newline(); - } else if (orientation == ORIENTATION_LANDSCAPE) { + // output this only if use_geometry is true + if (use_geometry) { + os << "\\geometry{verbose"; + if (!topmargin.empty()) + os << ",tmargin=" << from_ascii(Length(topmargin).asLatexString()); + if (!bottommargin.empty()) + os << ",bmargin=" << from_ascii(Length(bottommargin).asLatexString()); + if (!leftmargin.empty()) + os << ",lmargin=" << from_ascii(Length(leftmargin).asLatexString()); + if (!rightmargin.empty()) + os << ",rmargin=" << from_ascii(Length(rightmargin).asLatexString()); + if (!headheight.empty()) + os << ",headheight=" << from_ascii(Length(headheight).asLatexString()); + if (!headsep.empty()) + os << ",headsep=" << from_ascii(Length(headsep).asLatexString()); + if (!footskip.empty()) + os << ",footskip=" << from_ascii(Length(footskip).asLatexString()); + if (!columnsep.empty()) + os << ",columnsep=" << from_ascii(Length(columnsep).asLatexString()); + os << "}\n"; + texrow.newline(); + } + } else if (orientation == ORIENTATION_LANDSCAPE + || papersize != PAPER_DEFAULT) { features.require("papersize"); } @@ -1425,8 +1647,8 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, texrow.newline(); } - // only output when the background color is not white - if (backgroundcolor != lyx::rgbFromHexName("#ffffff")) { + // only output when the background color is not default + if (isbackgroundcolor == true) { // only require color here, the background color will be defined // in LaTeXFeatures.cpp to avoid interferences with the LaTeX // package pdfpages @@ -1434,6 +1656,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, features.require("pagecolor"); } + // only output when the font color is not default + if (isfontcolor == true) { + // only require color here, the font color will be defined + // in LaTeXFeatures.cpp to avoid interferences with the LaTeX + // package pdfpages + features.require("color"); + features.require("fontcolor"); + } + // Only if class has a ToC hierarchy if (tclass.hasTocLevels()) { if (secnumdepth != tclass.secnumdepth()) { @@ -1488,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 @@ -1549,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; @@ -1706,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); } @@ -1723,10 +1967,11 @@ bool BufferParams::setBaseClass(string const & classname) LayoutFileList & bcl = LayoutFileList::get(); if (!bcl.haveClass(classname)) { docstring s = - bformat(_("The document class %1$s could not be found. " - "A default textclass with default layouts will be used. " - "LyX might not be able to produce output unless a correct " - "textclass is selected from the document settings dialog."), + bformat(_("The layout file:\n" + "%1$s\n" + "could not be found. A default textclass with default\n" + "layouts will be used. LyX will not be able to produce\n" + "correct output."), from_utf8(classname)); frontend::Alert::error(_("Document class not found"), s); bcl.addEmptyClass(classname); @@ -1735,10 +1980,14 @@ bool BufferParams::setBaseClass(string const & classname) bool const success = bcl[classname].load(); if (!success) { docstring s = - bformat(_("The document class %1$s could not be loaded."), + bformat(_("Due to some error in it, the layout file:\n" + "%1$s\n" + "could not be loaded. A default textclass with default\n" + "layouts will be used. LyX will not be able to produce\n" + "correct output."), from_utf8(classname)); frontend::Alert::error(_("Could not load class"), s); - return false; + bcl.addEmptyClass(classname); } pimpl_->baseClass_ = classname; @@ -1777,6 +2026,7 @@ void BufferParams::makeDocumentClass() } } + bool BufferParams::moduleCanBeAdded(string const & modName) const { return layoutModules_.moduleCanBeAdded(modName, baseClass()); @@ -1994,14 +2244,42 @@ string BufferParams::paperSizeName(PapersizePurpose purpose) const } return string(); } + case PAPER_A0: + // dvips and dvipdfm do not know this + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "a0"; + case PAPER_A1: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "a1"; + case PAPER_A2: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "a2"; case PAPER_A3: return "a3"; case PAPER_A4: return "a4"; case PAPER_A5: return "a5"; + case PAPER_A6: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "a6"; + case PAPER_B0: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "b0"; + case PAPER_B1: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "b1"; + case PAPER_B2: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "b2"; case PAPER_B3: - // dvips and dvipdfm do not know this if (purpose == DVIPS || purpose == DVIPDFM) return string(); return "b3"; @@ -2011,10 +2289,69 @@ string BufferParams::paperSizeName(PapersizePurpose purpose) const return string(); return "b4"; case PAPER_B5: - // dvipdfm does not know this if (purpose == DVIPDFM) return string(); return "b5"; + case PAPER_B6: + 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(); + return "jisb0"; + case PAPER_JISB1: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb1"; + case PAPER_JISB2: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb2"; + case PAPER_JISB3: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb3"; + case PAPER_JISB4: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb4"; + case PAPER_JISB5: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb5"; + case PAPER_JISB6: + if (purpose == DVIPS || purpose == DVIPDFM) + return string(); + return "jisb6"; case PAPER_USEXECUTIVE: // dvipdfm does not know this if (purpose == DVIPDFM) @@ -2085,17 +2422,20 @@ string BufferParams::babelCall(string const & lang_opts) const // viet = string::npos when not found // the same is for all other languages that are not directly supported by // babel, but where LaTeX-packages add babel support. - // this is currently the case for Latvian, Lithuanian, and Mongolian + // this is currently the case for Latvian, Lithuanian, Mongolian + // and Turkmen size_t latvian = lang_opts.find("latvian"); size_t lithu = lang_opts.find("lithuanian"); size_t mongo = lang_opts.find("mongolian"); + size_t turkmen = lang_opts.find("turkmen"); // If Japanese is used, babel must directly be loaded with the // language options, see // http://www.lyx.org/trac/ticket/4597#c4 size_t japan = lang_opts.find("japanese"); if (!lyxrc.language_global_options || viet != string::npos || japan != string::npos || latvian != string::npos - || lithu != string::npos || mongo != string::npos) + || lithu != string::npos || mongo != string::npos + || turkmen != string::npos) return "\\usepackage[" + lang_opts + "]{babel}"; return lang_pack; }