From 3457d9d25f9aa2b5b11b535d5c40689703c804a4 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sun, 22 Apr 2018 10:08:07 +0200 Subject: [PATCH] Output "textbaltic" definitions only if needed. --- src/Encoding.cpp | 5 +++-- src/LaTeXFeatures.cpp | 12 ++++-------- src/Paragraph.cpp | 16 +++++++++++----- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/Encoding.cpp b/src/Encoding.cpp index 0947c148c1..f6197af13d 100644 --- a/src/Encoding.cpp +++ b/src/Encoding.cpp @@ -589,10 +589,11 @@ bool Encodings::isKnownScriptChar(char_type const c, string & preamble) return false; if (it->second.textpreamble() != "textgreek" - && it->second.textpreamble() != "textcyrillic") + && it->second.textpreamble() != "textcyrillic" + && it->second.textpreamble() != "textbaltic") return false; - if (preamble.empty()) { + if (preamble.empty() && it->second.textpreamble() != "textbaltic") { preamble = it->second.textpreamble(); return true; } diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index e8d1387070..d3b8a50844 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -620,10 +620,6 @@ bool LaTeXFeatures::isProvided(string const & name) const if (provides_.find(name) != provides_.end()) return true; - // FIXME: the "textbaltic" definitions are only needed if the context - // font encoding of the respective char is not l7x. - // We cannot check this here as we have no context information. - if (params_.useNonTeXFonts) return params_.documentClass().provides(name); @@ -1393,19 +1389,19 @@ TexString LaTeXFeatures::getMacros() const // non-standard text accents: if (mustProvide("textcommaabove") || mustProvide("textcommaaboveright") || - mustProvide("textcommabelow") || mustProvide("textbaltic")) + mustProvide("textcommabelow") || mustProvide("textbalticdefs")) macros << lyxaccent_def; - if (mustProvide("textcommabelow") || mustProvide("textbaltic")) + if (mustProvide("textcommabelow") || mustProvide("textbalticdefs")) macros << textcommabelow_def << '\n'; - if (mustProvide("textcommaabove") || mustProvide("textbaltic")) + if (mustProvide("textcommaabove") || mustProvide("textbalticdefs")) macros << textcommaabove_def << '\n'; if (mustProvide("textcommaaboveright")) macros << textcommaaboveright_def << '\n'; - if (mustProvide("textbaltic")) + if (mustProvide("textbalticdefs")) macros << textbaltic_def << '\n'; // split-level fractions diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 574a830690..8cd8357b8b 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -1547,6 +1547,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const // then the contents BufferParams const bp = features.runparams().is_child ? features.buffer().masterParams() : features.buffer().params(); + string bscript = "textbaltic"; for (pos_type i = 0; i < int(text_.size()) ; ++i) { char_type c = text_[i]; if (c == 0x0022) { @@ -1555,11 +1556,16 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const else if (bp.main_font_encoding() != "T1" || ((&owner_->getFontSettings(bp, i))->language()->internalFontEncoding())) features.require("textquotedbl"); - } - if (!bp.use_dash_ligatures - && (c == 0x2013 || c == 0x2014) - && bp.useNonTeXFonts - && features.runparams().flavor == OutputParams::XETEX) + } else if (Encodings::isKnownScriptChar(c, bscript)){ + string fontenc = (&owner_->getFontSettings(bp, i))->language()->fontenc(); + if (fontenc.empty()) + fontenc = features.runparams().main_fontenc; + if (Encodings::needsScriptWrapper("textbaltic", fontenc)) + features.require("textbalticdefs"); + } else if (!bp.use_dash_ligatures + && (c == 0x2013 || c == 0x2014) + && bp.useNonTeXFonts + && features.runparams().flavor == OutputParams::XETEX) // XeTeX's dash behaviour is determined via a global setting features.require("xetexdashbreakstate"); BufferEncodings::validate(c, features); -- 2.39.2