commit d56a5447f30688286c1fe19f3b51225f4b586b3e
Author: Juergen Spitzmueller <[email protected]>
Date: Sat Dec 16 16:11:25 2017 +0100
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 3f9eb67..d4b0018 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 80bfe3d..a6c72c3 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 b607231..53cee98 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 f0b3fb7..fc98c1b 100644
--- a/src/frontends/qt4/ui/FontUi.ui
+++ b/src/frontends/qt4/ui/FontUi.ui
@@ -297,10 +297,10 @@
<item row="11" column="1">
<widget class="QCheckBox" name="dashesCB">
<property name="toolTip">
- <string>Use font ligatures -- and --- instead of \textendash and
\textemdash for en- and em-dashes</string>
+ <string>By default, a line break can occur after en- and em-dashes and
before em-dashes. Checking this box prevents that.</string>
</property>
<property name="text">
- <string>Output en- and &em-dashes as ligatures</string>
+ <string>Disallow l&ine breaks at dashes</string>
</property>
</widget>
</item>