mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 19:59:46 +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{}" }
|
||||
};
|
||||
|
||||
char const * const html_quote[2][5] = {
|
||||
{ "‚", "’", "‘",
|
||||
"‹", "›" },
|
||||
{ "„", "”", "“", "«", "»" }
|
||||
};
|
||||
|
||||
} // namespace anon
|
||||
|
||||
|
||||
@ -98,8 +104,15 @@ InsetQuotes::InsetQuotes(Buffer * buf, string const & str) : Inset(buf)
|
||||
InsetQuotes::InsetQuotes(Buffer * buf, char_type c, QuoteTimes t)
|
||||
: Inset(buf), times_(t)
|
||||
{
|
||||
if (buf)
|
||||
if (buf) {
|
||||
language_ = buf->params().quotes_language;
|
||||
fontenc_ = (buf->params().fontenc == "global")
|
||||
? lyxrc.fontenc : buf->params().fontenc;
|
||||
} else {
|
||||
language_ = EnglishQuotes;
|
||||
fontenc_ = lyxrc.fontenc;
|
||||
}
|
||||
|
||||
setSide(c);
|
||||
}
|
||||
|
||||
@ -264,7 +277,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
|
||||
qstr = "\\og "; //the spaces are important here
|
||||
else
|
||||
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];
|
||||
#ifdef DO_USE_DEFAULT_LANGUAGE
|
||||
} else if (doclang == "default") {
|
||||
@ -277,12 +290,14 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
|
||||
qstr = latex_quote_babel[times_][quoteind];
|
||||
}
|
||||
|
||||
// Always guard against unfortunate ligatures (!` ?`)
|
||||
// Always guard against unfortunate ligatures (!` ?` `` '' ,, << >>)
|
||||
char_type const lastchar = os.lastChar();
|
||||
if (prefixIs(qstr, "`")) {
|
||||
char_type const lastchar = os.lastChar();
|
||||
if (lastchar == '!' || lastchar == '?')
|
||||
qstr.insert(0, "{}");
|
||||
}
|
||||
if (qstr[1] == lastchar)
|
||||
qstr.insert(0, "{}");
|
||||
|
||||
os << from_ascii(qstr);
|
||||
}
|
||||
@ -298,16 +313,8 @@ int InsetQuotes::plaintext(odocstringstream & os,
|
||||
|
||||
|
||||
docstring InsetQuotes::getQuoteEntity() const {
|
||||
if (times_ == DoubleQuotes) {
|
||||
if (side_ == LeftQuote)
|
||||
return from_ascii("“");
|
||||
else
|
||||
return from_ascii("”");
|
||||
}
|
||||
if (side_ == LeftQuote)
|
||||
return from_ascii("‘");
|
||||
else
|
||||
return from_ascii("’");
|
||||
const int quoteind = quote_index[side_][language_];
|
||||
return from_ascii(html_quote[times_][quoteind]);
|
||||
}
|
||||
|
||||
|
||||
@ -346,7 +353,7 @@ void InsetQuotes::validate(LaTeXFeatures & features) const
|
||||
#else
|
||||
if (!features.useBabel()
|
||||
#endif
|
||||
&& lyxrc.fontenc != "T1") {
|
||||
&& fontenc_ != "T1") {
|
||||
if (times_ == SingleQuotes)
|
||||
switch (type) {
|
||||
case ',': features.require("quotesinglbase"); break;
|
||||
|
@ -116,6 +116,8 @@ private:
|
||||
QuoteSide side_;
|
||||
///
|
||||
QuoteTimes times_;
|
||||
///
|
||||
std::string fontenc_;
|
||||
};
|
||||
|
||||
} // namespace lyx
|
||||
|
@ -100,6 +100,14 @@ What's new
|
||||
|
||||
- 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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user