]> git.lyx.org Git - lyx.git/commitdiff
Consistent output of breakable/non-breakable dashes on all TeX engines.
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 16 Dec 2017 15:11:25 +0000 (16:11 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Sat, 16 Dec 2017 15:12:26 +0000 (16:12 +0100)
Fixes: #10839
src/LaTeXFeatures.cpp
src/Paragraph.cpp
src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/ui/FontUi.ui

index 3f9eb6776267ab6fb3b0c00efb21a1c53d4d9898..d4b0018b73dbe936743f71bc5a52c7fd7a603dfd 100644 (file)
@@ -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)
index 80bfe3decd733f328e2a9f456fa5c5ed894fb0d3..a6c72c310e0b22a07b1251132133a1d02899041a 100644 (file)
@@ -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);
        }
 }
index b607231043babad542a27f1d51b8f3d0f5d967b5..53cee98e0490892eb21bde2a084cf1c1c5797804 100644 (file)
@@ -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);
index f0b3fb7e8b2870e8c25862cf5b8107c8c338a07b..fc98c1b7ebdd0e7108c32eaecbf91c2b066a992b 100644 (file)
    <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 &amp;em-dashes as ligatures</string>
+      <string>Disallow l&amp;ine breaks at dashes</string>
      </property>
     </widget>
    </item>