From d56a5447f30688286c1fe19f3b51225f4b586b3e Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sat, 16 Dec 2017 16:11:25 +0100 Subject: [PATCH] Consistent output of breakable/non-breakable dashes on all TeX engines. Fixes: #10839 --- src/LaTeXFeatures.cpp | 3 +++ src/Paragraph.cpp | 26 +++++++++++++++++++++----- src/frontends/qt4/GuiDocument.cpp | 5 ++--- src/frontends/qt4/ui/FontUi.ui | 4 ++-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 3f9eb67762..d4b0018b73 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -1318,6 +1318,9 @@ TexString LaTeXFeatures::getMacros() const macros << getPreambleSnippets(); } + if (mustProvide("xetexdashbreakstate")) + macros << "\\XeTeXdashbreakstate 0" << '\n'; + if (mustProvide("papersize")) { if (runparams_.flavor == OutputParams::LATEX || runparams_.flavor == OutputParams::DVILUATEX) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 80bfe3decd..a6c72c310e 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -1289,7 +1289,10 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, case 0x2013: case 0x2014: - if (bparams.use_dash_ligatures && !bparams.useNonTeXFonts) { + // XeTeX's dash behaviour is determined via a global setting + if (bparams.use_dash_ligatures + && owner_->getFontSettings(bparams, i).fontInfo().family() != TYPEWRITER_FAMILY + && (!bparams.useNonTeXFonts || runparams.flavor != OutputParams::XETEX)) { if (c == 0x2013) { // en-dash os << "--"; @@ -1417,6 +1420,14 @@ bool Paragraph::Private::latexSpecialT3(char_type const c, otexstream & os, os << "\\textvertline" << termcmd; column += 14; return true; + case 0x2013: + os << "\\textendash" << termcmd; + column += 12; + return true; + case 0x2014: + os << "\\textemdash" << termcmd; + column += 12; + return true; default: return false; } @@ -1425,11 +1436,11 @@ bool Paragraph::Private::latexSpecialT3(char_type const c, otexstream & os, void Paragraph::Private::validate(LaTeXFeatures & features) const { + Buffer const & buf = inset_owner_->buffer(); + BufferParams const & bp = features.runparams().is_child + ? buf.masterParams() : buf.params(); if (layout_->inpreamble && inset_owner_) { bool const is_command = layout_->latextype == LATEX_COMMAND; - Buffer const & buf = inset_owner_->buffer(); - BufferParams const & bp = features.runparams().is_child - ? buf.masterParams() : buf.params(); Font f; // Using a string stream here circumvents the encoding // switching machinery of odocstream. Therefore the @@ -1509,7 +1520,6 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const } // then the contents - BufferParams const bp = features.buffer().masterParams(); for (pos_type i = 0; i < int(text_.size()) ; ++i) { char_type c = text_[i]; if (c == 0x0022) { @@ -1519,6 +1529,12 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const || ((&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) + // XeTeX's dash behaviour is determined via a global setting + features.require("xetexdashbreakstate"); BufferEncodings::validate(c, features); } } diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index b607231043..53cee98e04 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -2074,7 +2074,6 @@ void GuiDocument::updateFontOptions() fontModule->fontsRomanCO->currentIndex()).toString(); fontModule->fontScCB->setEnabled(providesSC(font)); fontModule->fontOsfCB->setEnabled(providesOSF(font)); - fontModule->dashesCB->setEnabled(tex_fonts); updateMathFonts(font); } @@ -3210,7 +3209,7 @@ void GuiDocument::applyView() fromqstr(fontModule->cjkFontLE->text()); bp_.use_microtype = fontModule->microtypeCB->isChecked(); - bp_.use_dash_ligatures = fontModule->dashesCB->isChecked(); + bp_.use_dash_ligatures = !fontModule->dashesCB->isChecked(); bp_.fonts_sans_scale[nontexfonts] = fontModule->scaleSansSB->value(); bp_.fonts_sans_scale[!nontexfonts] = fontModule->font_sf_scale; @@ -3745,7 +3744,7 @@ void GuiDocument::paramsToDialog() fontModule->cjkFontLE->setText(QString()); fontModule->microtypeCB->setChecked(bp_.use_microtype); - fontModule->dashesCB->setChecked(bp_.use_dash_ligatures); + fontModule->dashesCB->setChecked(!bp_.use_dash_ligatures); fontModule->fontScCB->setChecked(bp_.fonts_expert_sc); fontModule->fontOsfCB->setChecked(bp_.fonts_old_figures); diff --git a/src/frontends/qt4/ui/FontUi.ui b/src/frontends/qt4/ui/FontUi.ui index f0b3fb7e8b..fc98c1b7eb 100644 --- a/src/frontends/qt4/ui/FontUi.ui +++ b/src/frontends/qt4/ui/FontUi.ui @@ -297,10 +297,10 @@ - Use font ligatures -- and --- instead of \textendash and \textemdash for en- and em-dashes + By default, a line break can occur after en- and em-dashes and before em-dashes. Checking this box prevents that. - Output en- and &em-dashes as ligatures + Disallow l&ine breaks at dashes