X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetQuotes.cpp;h=49922943c255dd6681e155a6fc11110596fa0dc3;hb=88e5e5fd345c280b0927ad84785657cbc9e55f77;hp=7ae2d0ff9b08af7c801dc2e2c507c22b6c8f53a0;hpb=3add3e2eae8f75cf25aa0f32141a62eaef01650d;p=lyx.git diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp index 7ae2d0ff9b..49922943c2 100644 --- a/src/insets/InsetQuotes.cpp +++ b/src/insets/InsetQuotes.cpp @@ -630,7 +630,7 @@ InsetQuotes::InsetQuotes(Buffer * buf, char_type c, InsetQuotesParams::QuoteLeve fontspec_ = buf->masterBuffer()->params().useNonTeXFonts; } else { global_style_ = InsetQuotesParams::EnglishQuotes; - fontenc_ = lyxrc.fontenc; + fontenc_ = "OT1"; fontspec_ = false; } if (style.empty()) @@ -800,7 +800,7 @@ void InsetQuotes::doDispatch(Cursor & cur, FuncRequest & cmd) } cur.recordUndoInset(this); parseString(cmd.getArg(1), true); - cur.buffer()->updateBuffer(); + cur.forceBufferUpdate(); break; } default: @@ -853,8 +853,11 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const // (spacing and kerning is then handled respectively) qstr = docstring(1, quotechar); } + // The CJK marks are not yet covered by utf8 inputenc (we don't have the entry in + // unicodesymbols, since we don't want to add fake synbols there). else if (style == InsetQuotesParams::CJKQuotes || style == InsetQuotesParams::CJKAngleQuotes) { - if (runparams.encoding && runparams.encoding->encodable(quotechar)) + if (runparams.encoding && runparams.encoding->name() != "utf8" + && runparams.encoding->encodable(quotechar)) qstr = docstring(1, quotechar); else qstr = quoteparams.getLaTeXQuote(quotechar, "int"); @@ -898,15 +901,21 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const if (!runparams.pass_thru) { // Guard against unwanted ligatures with preceding text char_type const lastchar = os.lastChar(); + // LuaTeX does not respect {} as ligature breaker by design, + // see https://tex.stackexchange.com/q/349725/19291 + docstring const nolig = + (runparams.flavor == OutputParams::LUATEX + || runparams.flavor == OutputParams::DVILUATEX) ? + from_ascii("\\/") : from_ascii("{}"); // !` ?` => !{}` ?{}` if (prefixIs(qstr, from_ascii("`")) && (lastchar == '!' || lastchar == '?')) - os << "{}"; + os << nolig; // ``` ''' ,,, <<< >>> // => `{}`` '{}'' ,{},, <{}<< >{}>> if (contains(from_ascii(",'`<>"), lastchar) && prefixIs(qstr, lastchar)) - os << "{}"; + os << nolig; } os << qstr; @@ -1039,10 +1048,12 @@ void InsetQuotes::validate(LaTeXFeatures & features) const features.require("textquotedbl"); break; } - // we fake these from math + // we fake these from math (also for utf8 inputenc + // currently; see above) case 0x300e: // LEFT WHITE CORNER BRACKET case 0x300f: // RIGHT WHITE CORNER BRACKET if (!features.runparams().encoding + || features.runparams().encoding->name() == "utf8" || !features.runparams().encoding->encodable(type)) features.require("stmaryrd"); break;