X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetquotes.C;h=eb7c87e454086a3daf03fd07dfb4d88d9e4f1ca6;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=01b2feec4cf1d5528a5335a21e4ad5091380d9a5;hpb=0d449056ef9ace3ef737e4b9aba8d3994615dc18;p=lyx.git diff --git a/src/insets/insetquotes.C b/src/insets/insetquotes.C index 01b2feec4c..eb7c87e454 100644 --- a/src/insets/insetquotes.C +++ b/src/insets/insetquotes.C @@ -30,9 +30,9 @@ #include "support/lstrings.h" -using lyx::docstring; -using lyx::odocstream; -using lyx::support::prefixIs; +namespace lyx { + +using support::prefixIs; using std::endl; using std::string; @@ -85,29 +85,34 @@ char const * const latex_quote_babel[2][5] = InsetQuotes::InsetQuotes(string const & str) { parseString(str); + setInsetName(from_utf8("InsetQuotes")); } InsetQuotes::InsetQuotes(quote_language l, quote_side s, quote_times t) : language_(l), side_(s), times_(t) -{} +{ + setInsetName(from_utf8("InsetQuotes")); +} -InsetQuotes::InsetQuotes(lyx::char_type c, BufferParams const & params) +InsetQuotes::InsetQuotes(char_type c, BufferParams const & params) : language_(params.quotes_language), times_(params.quotes_times) { getPosition(c); + setInsetName(from_utf8("InsetQuotes")); } -InsetQuotes::InsetQuotes(lyx::char_type c, quote_language l, quote_times t) +InsetQuotes::InsetQuotes(char_type c, quote_language l, quote_times t) : language_(l), times_(t) { getPosition(c); + setInsetName(from_utf8("InsetQuotes")); } -void InsetQuotes::getPosition(lyx::char_type c) +void InsetQuotes::getPosition(char_type c) { // Decide whether left or right switch (c) { @@ -169,44 +174,63 @@ void InsetQuotes::parseString(string const & s) } -string const InsetQuotes::dispString(Language const * loclang) const +docstring const InsetQuotes::dispString(Language const * loclang) const { string disp; disp += quote_char[quote_index[side_][language_]]; if (times_ == DoubleQ) disp += disp; - if (lyxrc.font_norm_type == LyXRC::ISO_8859_1 - || lyxrc.font_norm_type == LyXRC::ISO_8859_9 - || lyxrc.font_norm_type == LyXRC::ISO_8859_15) { - if (disp == "<<") - disp = '«'; - else if (disp == ">>") - disp = '»'; - } + docstring retdisp; + if (disp == "<<") + retdisp = docstring(1, 0x00ab); //'«'; + else if (disp == ">>") + retdisp = docstring(1, 0x00bb); //'»'; +#if 0 + // The below are supposed to work, but something fails. + else if (disp == ",,") + retdisp = docstring(1, 0x201e); + else if (disp == "''") + retdisp == docstring(1, 0x201d); + else if (disp == "``") + retdisp == docstring(1, 0x201c); + else if (disp == "<") + retdisp = docstring(1, 0x2039); + else if (disp == ">") + retdisp = docstring(1, 0x203a); + else if (disp == ",") + retdisp = docstring(1, 0x201a); + else if (disp == "'") + retdisp = docstring(1, 0x2019); + else if (disp == "`") + retdisp = docstring(1, 0x2018); +#endif + else + retdisp = lyx::from_ascii(disp); + // in french, spaces are added inside double quotes if (times_ == DoubleQ && prefixIs(loclang->code(), "fr")) { if (side_ == LeftQ) - disp += ' '; + retdisp += ' '; else - disp.insert(string::size_type(0), 1, ' '); + retdisp.insert(docstring::size_type(0), 1, ' '); } - return disp; + return retdisp; } -void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const +bool InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const { LyXFont & font = mi.base.font; - lyx::frontend::FontMetrics const & fm = + frontend::FontMetrics const & fm = theFontMetrics(font); dim.asc = fm.maxAscent(); dim.des = fm.maxDescent(); dim.wid = 0; - string const text = dispString(font.language()); + docstring const text = dispString(font.language()); for (string::size_type i = 0; i < text.length(); ++i) { if (text[i] == ' ') dim.wid += fm.width('i'); @@ -215,7 +239,9 @@ void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const else dim.wid += fm.width(','); } + bool const changed = dim_ != dim; dim_ = dim; + return changed; } @@ -234,7 +260,7 @@ LyXFont const InsetQuotes::convertFont(LyXFont const & f) const void InsetQuotes::draw(PainterInfo & pi, int x, int y) const { - string const text = dispString(pi.base.font.language()); + docstring const text = dispString(pi.base.font.language()); if (text.length() == 2 && text[0] == text[1]) { pi.pain.text(x, y, text[0], pi.base.font); @@ -242,9 +268,9 @@ void InsetQuotes::draw(PainterInfo & pi, int x, int y) const .width(','); pi.pain.text(x + t, y, text[0], pi.base.font); } else { - docstring dtext(text.begin(), text.end()); - pi.pain.text(x, y, dtext, pi.base.font); + pi.pain.text(x, y, text, pi.base.font); } + setPosCache(pi, x, y); } @@ -297,15 +323,15 @@ int InsetQuotes::latex(Buffer const &, odocstream & os, if (prefixIs(qstr, "`")) qstr.insert(0, "{}"); - os << lyx::from_ascii(qstr); + os << from_ascii(qstr); return 0; } -int InsetQuotes::plaintext(Buffer const &, odocstream & os, - OutputParams const &) const +int InsetQuotes::plaintext(Buffer const & buf, odocstream & os, + OutputParams const &) const { - os << '"'; + os << dispString(buf.params().language); return 0; } @@ -328,10 +354,9 @@ int InsetQuotes::docbook(Buffer const &, odocstream & os, } -int InsetQuotes::textString(Buffer const & buf, odocstream & os, - OutputParams const & op) const +void InsetQuotes::textString(Buffer const & buf, odocstream & os) const { - return plaintext(buf, os, op); + os << dispString(buf.params().language); } @@ -372,5 +397,8 @@ auto_ptr InsetQuotes::doClone() const InsetBase::Code InsetQuotes::lyxCode() const { - return InsetBase::QUOTE_CODE; + return InsetBase::QUOTE_CODE; } + + +} // namespace lyx