X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetspecialchar.C;h=3c4193b08fb5283f72d5d97f3d5349023baca844;hb=ba5e47f1a92c3688d16f76f654fd3768672ebb50;hp=3f38317bbab0534a3f3a19d0da018ebd2c0f0f49;hpb=a0cf758d5a79140045c2a90e2ff5878e0b391bcc;p=lyx.git diff --git a/src/insets/insetspecialchar.C b/src/insets/insetspecialchar.C index 3f38317bba..3c4193b08f 100644 --- a/src/insets/insetspecialchar.C +++ b/src/insets/insetspecialchar.C @@ -38,26 +38,36 @@ int InsetSpecialChar::descent(Painter &, LyXFont const & font) const int InsetSpecialChar::width(Painter &, LyXFont const & font) const { - LyXFont f(font); switch (kind) { case HYPHENATION: { - int w = f.textWidth("-", 1); + int w = font.textWidth("-", 1); if (w > 5) w -= 2; // to make it look shorter return w; } case END_OF_SENTENCE: { - return f.textWidth(".", 1); + return font.textWidth(".", 1); } case LDOTS: { - return f.textWidth(". . .", 5); + return font.textWidth(". . .", 5); } - case MENU_SEPARATOR: { - return f.textWidth(" x ", 3); + case MENU_SEPARATOR: + { + return font.textWidth(" x ", 3); + } +#if 0 + case NEWLINE: + { + } +#endif + case PROTECTED_SEPARATOR: + { + return font.textWidth("x", 1); } + } return 1; // To shut up gcc } @@ -104,13 +114,41 @@ void InsetSpecialChar::draw(Painter & pain, LyXFont const & f, pain.lines(xp, yp, 4, LColor::special); x += width(pain, font); + break; + } +#if 0 + case NEWLINE: + { + } +#endif + case PROTECTED_SEPARATOR: + { + float w = width(pain, font); + int h = font.ascent('x'); + int xp[4], yp[4]; + + xp[0] = int(x); + yp[0] = baseline - max(h / 4, 1); + + xp[1] = int(x); + yp[1] = baseline; + + xp[2] = int(x + w); + yp[2] = baseline; + + xp[3] = int(x + w); + yp[3] = baseline - max(h / 4, 1); + + pain.lines(xp, yp, 4, LColor::special); + x += w; + break; } } } // In lyxf3 this will be just LaTeX -void InsetSpecialChar::Write(ostream & os) +void InsetSpecialChar::Write(ostream & os) const { string command; switch (kind) { @@ -118,6 +156,11 @@ void InsetSpecialChar::Write(ostream & os) case END_OF_SENTENCE: command = "\\@."; break; case LDOTS: command = "\\ldots{}"; break; case MENU_SEPARATOR: command = "\\menuseparator"; break; +#if 0 + case NEWLINE: command = "\\newline"; break; +#endif + case PROTECTED_SEPARATOR: + command = "\\protected_separator"; break; } os << "\\SpecialChar " << command << "\n"; } @@ -137,12 +180,14 @@ void InsetSpecialChar::Read(LyXLex & lex) kind = LDOTS; else if (command == "\\menuseparator") kind = MENU_SEPARATOR; + else if (command == "\\protected_separator") + kind = PROTECTED_SEPARATOR; else lex.printError("InsetSpecialChar: Unknown kind: `$$Token'"); } -int InsetSpecialChar::Latex(ostream & os, signed char /*fragile*/) +int InsetSpecialChar::Latex(ostream & os, signed char /*fragile*/) const { string command; signed char dummy = 0; @@ -152,37 +197,40 @@ int InsetSpecialChar::Latex(ostream & os, signed char /*fragile*/) } -int InsetSpecialChar::Latex(string & file, signed char /*fragile*/) +int InsetSpecialChar::Latex(string & file, signed char /*fragile*/) const { switch (kind) { case HYPHENATION: file += "\\-"; break; case END_OF_SENTENCE: file += "\\@."; break; case LDOTS: file += "\\ldots{}"; break; case MENU_SEPARATOR: file += "\\lyxarrow{}"; break; + case PROTECTED_SEPARATOR: file += "~"; break; } return 0; } -int InsetSpecialChar::Linuxdoc(string & file) +int InsetSpecialChar::Linuxdoc(string & file) const { switch (kind) { case HYPHENATION: file += ""; break; case END_OF_SENTENCE: file += ""; break; case LDOTS: file += "..."; break; case MENU_SEPARATOR: file += "->"; break; + case PROTECTED_SEPARATOR: file += " "; break; } return 0; } -int InsetSpecialChar::DocBook(string & file) +int InsetSpecialChar::DocBook(string & file) const { switch (kind) { case HYPHENATION: file += ""; break; case END_OF_SENTENCE: file += ""; break; case LDOTS: file += "..."; break; case MENU_SEPARATOR: file += "->"; break; + case PROTECTED_SEPARATOR: file += " "; break; } return 0; }