X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=fcf4a73a8153de3a05ac41a13d218a04fccae70b;hb=63c1979401271381e7667f8e55a018a728788aaa;hp=859896900f315096b027f2b82cf51403fda337d9;hpb=8be0ec0db5731b2089462ac81abb67c108cd7840;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 859896900f..fcf4a73a81 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 @@ -1490,6 +1501,16 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const for (; icit != iend; ++icit) { if (icit->inset) { features.inDeletedInset(owner_->isDeleted(icit->pos)); + if (icit->inset->lyxCode() == FOOT_CODE) { + // FIXME: an item inset would make things much easier. + if ((layout_->latextype == LATEX_LIST_ENVIRONMENT + || (layout_->latextype == LATEX_ITEM_ENVIRONMENT + && layout_->margintype == MARGIN_FIRST_DYNAMIC)) + && (icit->pos < begin_of_body_ + || (icit->pos == begin_of_body_ + && (icit->pos == 0 || text_[icit->pos - 1] != ' ')))) + features.saveNoteEnv("description"); + } icit->inset->validate(features); features.inDeletedInset(false); if (layout_->needprotect && @@ -1499,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) { @@ -1509,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); } } @@ -2542,6 +2568,7 @@ void Paragraph::latex(BufferParams const & bparams, bool const using_begin_end = runparams.use_polyglossia || !lang_end_command.empty(); if (!running_lang.empty() && + (!using_begin_end || running_lang == openLanguageName()) && current_font.language()->encoding()->package() == Encoding::CJK) { string end_tag = subst(lang_end_command, "$$lang",