mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-30 13:20:58 +00:00
Fix some quote inset bugs:
* Adjoining closing Single + double quote becomes double + single quote (for English, Swedish and German, LaTeX export as '''). * French double quotes are converted to << >> in the LaTeX file and to double inverted question/interrogation marks in the output, if the font encoding is set to [None] or OT1 but the global default is T1. (test for lyxrc.fontenc instead of the document-specific fontenc setting in InsetQuotes.cpp). * Quote type ignored for LyXHTML: always "English" quotes used. See #10451
This commit is contained in:
parent
8d247e2407
commit
6c4c164531
@ -87,6 +87,12 @@ char const * const latex_quote_babel[2][5] = {
|
|||||||
{ "\\glqq ", "''", "``", "\\flqq{}", "\\frqq{}" }
|
{ "\\glqq ", "''", "``", "\\flqq{}", "\\frqq{}" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
char const * const html_quote[2][5] = {
|
||||||
|
{ "‚", "’", "‘",
|
||||||
|
"‹", "›" },
|
||||||
|
{ "„", "”", "“", "«", "»" }
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace anon
|
} // namespace anon
|
||||||
|
|
||||||
|
|
||||||
@ -98,8 +104,15 @@ InsetQuotes::InsetQuotes(Buffer * buf, string const & str) : Inset(buf)
|
|||||||
InsetQuotes::InsetQuotes(Buffer * buf, char_type c, QuoteTimes t)
|
InsetQuotes::InsetQuotes(Buffer * buf, char_type c, QuoteTimes t)
|
||||||
: Inset(buf), times_(t)
|
: Inset(buf), times_(t)
|
||||||
{
|
{
|
||||||
if (buf)
|
if (buf) {
|
||||||
language_ = buf->params().quotes_language;
|
language_ = buf->params().quotes_language;
|
||||||
|
fontenc_ = (buf->params().fontenc == "global")
|
||||||
|
? lyxrc.fontenc : buf->params().fontenc;
|
||||||
|
} else {
|
||||||
|
language_ = EnglishQuotes;
|
||||||
|
fontenc_ = lyxrc.fontenc;
|
||||||
|
}
|
||||||
|
|
||||||
setSide(c);
|
setSide(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,7 +277,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
|
|||||||
qstr = "\\og "; //the spaces are important here
|
qstr = "\\og "; //the spaces are important here
|
||||||
else
|
else
|
||||||
qstr = " \\fg{}"; //and here
|
qstr = " \\fg{}"; //and here
|
||||||
} else if (lyxrc.fontenc == "T1" && !runparams.use_polyglossia) {
|
} else if (fontenc_ == "T1" && !runparams.use_polyglossia) {
|
||||||
qstr = latex_quote_t1[times_][quoteind];
|
qstr = latex_quote_t1[times_][quoteind];
|
||||||
#ifdef DO_USE_DEFAULT_LANGUAGE
|
#ifdef DO_USE_DEFAULT_LANGUAGE
|
||||||
} else if (doclang == "default") {
|
} else if (doclang == "default") {
|
||||||
@ -277,12 +290,14 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
|
|||||||
qstr = latex_quote_babel[times_][quoteind];
|
qstr = latex_quote_babel[times_][quoteind];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always guard against unfortunate ligatures (!` ?`)
|
// Always guard against unfortunate ligatures (!` ?` `` '' ,, << >>)
|
||||||
if (prefixIs(qstr, "`")) {
|
|
||||||
char_type const lastchar = os.lastChar();
|
char_type const lastchar = os.lastChar();
|
||||||
|
if (prefixIs(qstr, "`")) {
|
||||||
if (lastchar == '!' || lastchar == '?')
|
if (lastchar == '!' || lastchar == '?')
|
||||||
qstr.insert(0, "{}");
|
qstr.insert(0, "{}");
|
||||||
}
|
}
|
||||||
|
if (qstr[1] == lastchar)
|
||||||
|
qstr.insert(0, "{}");
|
||||||
|
|
||||||
os << from_ascii(qstr);
|
os << from_ascii(qstr);
|
||||||
}
|
}
|
||||||
@ -298,16 +313,8 @@ int InsetQuotes::plaintext(odocstringstream & os,
|
|||||||
|
|
||||||
|
|
||||||
docstring InsetQuotes::getQuoteEntity() const {
|
docstring InsetQuotes::getQuoteEntity() const {
|
||||||
if (times_ == DoubleQuotes) {
|
const int quoteind = quote_index[side_][language_];
|
||||||
if (side_ == LeftQuote)
|
return from_ascii(html_quote[times_][quoteind]);
|
||||||
return from_ascii("“");
|
|
||||||
else
|
|
||||||
return from_ascii("”");
|
|
||||||
}
|
|
||||||
if (side_ == LeftQuote)
|
|
||||||
return from_ascii("‘");
|
|
||||||
else
|
|
||||||
return from_ascii("’");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -346,7 +353,7 @@ void InsetQuotes::validate(LaTeXFeatures & features) const
|
|||||||
#else
|
#else
|
||||||
if (!features.useBabel()
|
if (!features.useBabel()
|
||||||
#endif
|
#endif
|
||||||
&& lyxrc.fontenc != "T1") {
|
&& fontenc_ != "T1") {
|
||||||
if (times_ == SingleQuotes)
|
if (times_ == SingleQuotes)
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ',': features.require("quotesinglbase"); break;
|
case ',': features.require("quotesinglbase"); break;
|
||||||
|
@ -116,6 +116,8 @@ private:
|
|||||||
QuoteSide side_;
|
QuoteSide side_;
|
||||||
///
|
///
|
||||||
QuoteTimes times_;
|
QuoteTimes times_;
|
||||||
|
///
|
||||||
|
std::string fontenc_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
@ -100,6 +100,14 @@ What's new
|
|||||||
|
|
||||||
- Correct encoding for Baltic languages like Lithuanian (bug 10474).
|
- Correct encoding for Baltic languages like Lithuanian (bug 10474).
|
||||||
|
|
||||||
|
- Fix some quote inset bugs (bug 10451):
|
||||||
|
# Adjoining closing Single + double quote becomes double + single quote
|
||||||
|
(for English, Swedish and German).
|
||||||
|
# French double quotes are converted to << >> in the LaTeX file and to double
|
||||||
|
inverted question/interrogation marks in the output, if the font encoding is
|
||||||
|
set to [None] or OT1 but the global default is T1.
|
||||||
|
# Quote type ignored for LyXHTML: always "English" quotes used.
|
||||||
|
|
||||||
|
|
||||||
* LYX2LYX
|
* LYX2LYX
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user