X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=d2218e073db8bab912634fb4eddc83013c6c5407;hb=e3625b5b8052e75e8741152bdfd313b54969c675;hp=fe47c05bf07792917f64d3e4ae61ea2920bc1d11;hpb=3a70340a95339ce3cdabf77232e0e70c2f1053ad;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index fe47c05bf0..d2218e073d 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -369,6 +369,7 @@ BufferParams::BufferParams() biblio_style = "plain"; use_bibtopic = false; use_indices = false; + save_transient_properties = true; track_changes = false; output_changes = false; use_default_options = true; @@ -387,6 +388,7 @@ BufferParams::BufferParams() fonts_math[1] = "auto"; fonts_default_family = "default"; useNonTeXFonts = false; + use_microtype = false; fonts_expert_sc = false; fonts_old_figures = false; fonts_sans_scale[0] = 100; @@ -673,6 +675,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, frontend::Alert::warning(_("Document class not available"), msg, true); } + } else if (token == "\\save_transient_properties") { + lex >> save_transient_properties; } else if (token == "\\origin") { lex.eatLine(); origin = lex.getString(); @@ -768,6 +772,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, lex >> fonts_typewriter_scale[1]; } else if (token == "\\font_cjk") { lex >> fonts_cjk; + } else if (token == "\\use_microtype") { + lex >> use_microtype; } else if (token == "\\paragraph_separation") { string parsep; lex >> parsep; @@ -1015,16 +1021,19 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const // The top of the file is written by the buffer. // Prints out the buffer info into the .lyx file given by file - // the document directory - // use realPath() instead of absFileName() for comparing - // so we can catch also eventually used symbolic parts of the path. - string filepath = buf->fileName().onlyPath().realPath(); - string const sysdir = package().system_support().realPath(); + os << "\\save_transient_properties " + << convert(save_transient_properties) << '\n'; + + // the document directory (must end with a path separator) + // realPath() is used to resolve symlinks, while addPath(..., "") + // ensures a trailing path separator. + string filepath = addPath(buf->fileName().onlyPath().realPath(), ""); + string const sysdir = addPath(package().system_support().realPath(), ""); string const relpath = to_utf8(makeRelPath(from_utf8(filepath), from_utf8(sysdir))); if (!prefixIs(relpath, "../") && !FileName::isAbsolute(relpath)) filepath = addPath("/systemlyxdir", relpath); - else if (!lyxrc.save_origin) + else if (!save_transient_properties || !lyxrc.save_origin) filepath = "unavailable"; os << "\\origin " << quoteIfNeeded(filepath) << '\n'; @@ -1133,6 +1142,7 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const if (!fonts_cjk.empty()) { os << "\\font_cjk " << fonts_cjk << '\n'; } + os << "\\use_microtype " << convert(use_microtype) << '\n'; os << "\\graphics " << graphics_driver << '\n'; os << "\\default_output_format " << default_output_format << '\n'; os << "\\output_sync " << output_sync << '\n'; @@ -1273,15 +1283,16 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const } } - os << "\\tracking_changes " << convert(track_changes) << '\n' - << "\\html_math_output " << html_math_output << '\n' + os << "\\tracking_changes " + << (save_transient_properties ? convert(track_changes) : "false") + << '\n'; + + os << "\\output_changes " + << (save_transient_properties ? convert(output_changes) : "false") + << '\n'; + + os << "\\html_math_output " << html_math_output << '\n' << "\\html_css_as_file " << html_css_as_file << '\n' - // \output_changes is output at a distance from \tracking changes as a - // workaround to bug #9841: both parameters can be seen as per-user - // preferences and therefore can cause undesirable merge conflicts, in a - // multi-author setting, if it were treated as a single block by the - // version control system. - << "\\output_changes " << convert(output_changes) << '\n' << "\\html_be_strict " << convert(html_be_strict) << '\n'; if (html_math_img_scale != 1.0) @@ -1404,6 +1415,9 @@ void BufferParams::validate(LaTeXFeatures & features) const if (useNonTeXFonts && fontsMath() != "auto") features.require("unicode-math"); + + if (use_microtype) + features.require("microtype"); if (!language->requires().empty()) features.require(language->requires()); @@ -1575,7 +1589,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, os << from_ascii(ams); if (useNonTeXFonts) { - os << "\\usepackage{fontspec}\n"; + if (!features.isProvided("fontspec")) + os << "\\usepackage{fontspec}\n"; if (features.mustProvide("unicode-math") && features.isAvailable("unicode-math")) os << "\\usepackage{unicode-math}\n"; @@ -2040,7 +2055,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, // koma's own caption commands are used instead of caption. We // use \PassOptionsToPackage here because the user could have // already loaded subfig in the preamble. - if (features.isRequired("subfig")) { + if (features.mustProvide("subfig")) { atlyxpreamble += "\\@ifundefined{showcaptionsetup}{}{%\n" " \\PassOptionsToPackage{caption=false}{subfig}}\n" "\\usepackage{subfig}\n"; @@ -2101,7 +2116,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } if (features.isRequired("bicaption")) lyxpreamble += "\\usepackage{bicaption}\n"; - if (!listings_params.empty() || features.isRequired("listings")) + if (!listings_params.empty() || features.mustProvide("listings")) lyxpreamble += "\\usepackage{listings}\n"; if (!listings_params.empty()) { lyxpreamble += "\\lstset{"; @@ -2191,7 +2206,7 @@ bool BufferParams::hasClassDefaults() const DocumentClass const & BufferParams::documentClass() const { - return *doc_class_.get(); + return *doc_class_; } @@ -2959,8 +2974,8 @@ void BufferParams::writeEncodingPreamble(otexstream & os, // XeTeX/LuaTeX: (see also #9740) // With Unicode fonts we use utf8-plain without encoding package. // With TeX fonts, we cannot use utf8-plain, but "inputenc" fails. - // XeTeX must use ASCII encoding, for LuaTeX, we load - // "luainputenc" (see below). + // XeTeX must use ASCII encoding (see Buffer.cpp), + // for LuaTeX, we load "luainputenc" (see below). if (useNonTeXFonts || features.runparams().flavor == OutputParams::XETEX) return;