]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetSpecialChar.cpp
requires is a keyword in C++2a
[lyx.git] / src / insets / InsetSpecialChar.cpp
index ec9daba0e9f9de69eccdea7b71a951ec52f93fab..740061e0312ea85a2ef60aa639f478ccbfdefd5d 100644 (file)
@@ -15,6 +15,7 @@
 #include "InsetSpecialChar.h"
 
 #include "Dimension.h"
+#include "Encoding.h"
 #include "Font.h"
 #include "Language.h"
 #include "LaTeXFeatures.h"
@@ -130,6 +131,7 @@ void drawLogo(PainterInfo & pi, int & x, int const y, InsetSpecialChar::Kind kin
                drawLogo(pi, x, y, InsetSpecialChar::PHRASE_LATEX);
                x += 3 * em / 20;
                drawChar(pi, x, y, '2');
+               // ε U+03B5 GREEK SMALL LETTER EPSILON
                drawChar(pi, x, y + em / 4, char_type(0x03b5));
                break;
 
@@ -212,6 +214,7 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
                        dim.des = fm.maxDescent();
                        frontend::NullPainter np;
                        PainterInfo pi(mi.base.bv, np);
+                       pi.base.font = mi.base.font;
                        drawLogo(pi, dim.wid, 0, kind_);
                        break;
        }
@@ -382,6 +385,7 @@ void InsetSpecialChar::latex(otexstream & os,
                             OutputParams const & rp) const
 {
        bool const rtl = rp.local_font->isRightToLeft();
+       bool const utf8 = rp.encoding->iconvName() == "UTF-8";
        string lswitch = "";
        string lswitche = "";
        if (rtl && !rp.use_polyglossia) {
@@ -397,10 +401,15 @@ void InsetSpecialChar::latex(otexstream & os,
                os << "\\-";
                break;
        case ALLOWBREAK:
+               // U+200B not yet supported by utf8 inputenc
                os << "\\LyXZeroWidthSpace" << termcmd;
                break;
        case LIGATURE_BREAK:
-               os << "\\textcompwordmark" << termcmd;
+               if (utf8)
+                       // U+200C ZERO WIDTH NON-JOINER
+                       os.put(0x200c);
+               else
+                       os << "\\textcompwordmark" << termcmd;
                break;
        case END_OF_SENTENCE:
                os << "\\@.";
@@ -454,15 +463,18 @@ int InsetSpecialChar::plaintext(odocstringstream & os,
        case HYPHENATION:
                return 0;
        case ALLOWBREAK:
+               // U+200B ZERO WIDTH SPACE (ZWSP)
                os.put(0x200b);
                return 1;
        case LIGATURE_BREAK:
+               // U+200C ZERO WIDTH NON-JOINER
                os.put(0x200c);
                return 1;
        case END_OF_SENTENCE:
                os << '.';
                return 1;
        case LDOTS:
+               // … U+2026 HORIZONTAL ELLIPSIS
                os.put(0x2026);
                return 1;
        case MENU_SEPARATOR:
@@ -472,6 +484,7 @@ int InsetSpecialChar::plaintext(odocstringstream & os,
                os << '/';
                return 1;
        case NOBREAKDASH:
+               // ‑ U+2011 NON-BREAKING HYPHEN
                os.put(0x2011);
                return 1;
        case PHRASE_LYX:
@@ -482,6 +495,7 @@ int InsetSpecialChar::plaintext(odocstringstream & os,
                return 3;
        case PHRASE_LATEX2E:
                os << "LaTeX2";
+               // ε U+03B5 GREEK SMALL LETTER EPSILON
                os.put(0x03b5);
                return 7;
        case PHRASE_LATEX:
@@ -498,6 +512,7 @@ int InsetSpecialChar::docbook(odocstream & os, OutputParams const &) const
        case HYPHENATION:
                break;
        case ALLOWBREAK:
+               // U+200B ZERO WIDTH SPACE (ZWSP)
                os.put(0x200b);
                break;
        case LIGATURE_BREAK:
@@ -525,6 +540,7 @@ int InsetSpecialChar::docbook(odocstream & os, OutputParams const &) const
                break;
        case PHRASE_LATEX2E:
                os << "LaTeX2";
+               // ε U+03B5 GREEK SMALL LETTER EPSILON
                os.put(0x03b5);
                break;
        case PHRASE_LATEX: