X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetspecialchar.C;h=8caa469bfebcb8ef3c215c006d2fd9843b1d9c83;hb=3c8aba3b556871fb1100a2f98cd93d5d4e3f70c9;hp=e1eba4e01a0e1cafcac681b88874416914237387;hpb=d6f638ea96150d5a0bb559d520dd2af8baad23d7;p=lyx.git diff --git a/src/insets/insetspecialchar.C b/src/insets/insetspecialchar.C index e1eba4e01a..8caa469bfe 100644 --- a/src/insets/insetspecialchar.C +++ b/src/insets/insetspecialchar.C @@ -17,97 +17,60 @@ #include "debug.h" #include "LaTeXFeatures.h" #include "Painter.h" -#ifndef USE_PAINTER -#include "lyxdraw.h" -#endif +#include "font.h" + +using std::ostream; +using std::max; InsetSpecialChar::InsetSpecialChar(Kind k) : kind(k) {} -#ifdef USE_PAINTER int InsetSpecialChar::ascent(Painter &, LyXFont const & font) const { - return font.maxAscent(); -} -#else -int InsetSpecialChar::Ascent(LyXFont const & font) const -{ - return font.maxAscent(); + return lyxfont::maxAscent(font); } -#endif -#ifdef USE_PAINTER int InsetSpecialChar::descent(Painter &, LyXFont const & font) const { - return font.maxDescent(); -} -#else -int InsetSpecialChar::Descent(LyXFont const & font) const -{ - return font.maxDescent(); + return lyxfont::maxDescent(font); } -#endif -#ifdef USE_PAINTER int InsetSpecialChar::width(Painter &, LyXFont const & font) const { - LyXFont f(font); switch (kind) { case HYPHENATION: { - int w = f.textWidth("-", 1); + int w = lyxfont::width('-', font); if (w > 5) w -= 2; // to make it look shorter return w; } case END_OF_SENTENCE: { - return f.textWidth(".", 1); + return lyxfont::width('.', font); } case LDOTS: { - return f.textWidth(". . .", 5); - } - case MENU_SEPARATOR: { - return f.textWidth(" x ", 3); - } - } - return 1; // To shut up gcc -} -#else -int InsetSpecialChar::Width(LyXFont const & font) const -{ - LyXFont f = font; - switch (kind) { - case HYPHENATION: - { - int w = f.textWidth("-", 1); - if (w > 5) - w -= 2; // to make it look shorter - return w; + return lyxfont::width(". . .", font); } - case END_OF_SENTENCE: + case MENU_SEPARATOR: { - return f.textWidth(".", 1); + return lyxfont::width(" x ", font); } - case LDOTS: + case PROTECTED_SEPARATOR: { - return f.textWidth(". . .", 5); - } - case MENU_SEPARATOR: { - return f.textWidth(" x ", 3); + return lyxfont::width('x', font); } + } return 1; // To shut up gcc } -#endif -#ifdef USE_PAINTER void InsetSpecialChar::draw(Painter & pain, LyXFont const & f, int baseline, float & x) const { @@ -137,9 +100,9 @@ void InsetSpecialChar::draw(Painter & pain, LyXFont const & f, case MENU_SEPARATOR: { // A triangle the width and height of an 'x' - int w = font.textWidth("x", 1); - int ox = font.textWidth(" ", 1) + int(x); - int h = font.ascent('x'); + int w = lyxfont::width('x', font); + int ox = lyxfont::width(' ', font) + int(x); + int h = lyxfont::ascent('x', font); int xp[4], yp[4]; xp[0] = ox; yp[0] = baseline; @@ -149,56 +112,36 @@ void InsetSpecialChar::draw(Painter & pain, LyXFont const & f, pain.lines(xp, yp, 4, LColor::special); x += width(pain, font); - } - } -} -#else -void InsetSpecialChar::Draw(LyXFont font, LyXScreen & scr, - int baseline, float & x) -{ - switch (kind) { - case HYPHENATION: - { - font.setColor(LyXFont::BLUE); - scr.drawText(font, "-", 1, baseline, int(x)); - x += Width(font); break; } - case END_OF_SENTENCE: + case PROTECTED_SEPARATOR: { - font.setColor(LyXFont::BLUE); - scr.drawText(font, ".", 1, baseline, int(x)); - x += Width(font); + float w = width(pain, font); + int h = lyxfont::ascent('x', font); + 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; } - case LDOTS: - { - font.setColor(LyXFont::BLUE); - scr.drawText(font, ". . .", 5, baseline, int(x)); - x += Width(font); - break; - } - case MENU_SEPARATOR: - { - // A triangle the width and height of an 'x' - int w = font.textWidth("x", 1); - int ox = font.textWidth(" ", 1) + int(x); - int h = font.ascent('x'); - XPoint p[4]; - p[0].x = ox; p[0].y = baseline; - p[1].x = ox; p[1].y = baseline - h; - p[2].x = ox + w;p[2].y = baseline - h/2; - p[3].x = ox; p[3].y = baseline; - scr.drawLines(getGC(gc_copy), p, 4); - x += Width(font); - } } } -#endif // In lyxf3 this will be just LaTeX -void InsetSpecialChar::Write(ostream & os) +void InsetSpecialChar::Write(ostream & os) const { string command; switch (kind) { @@ -206,6 +149,8 @@ void InsetSpecialChar::Write(ostream & os) case END_OF_SENTENCE: command = "\\@."; break; case LDOTS: command = "\\ldots{}"; break; case MENU_SEPARATOR: command = "\\menuseparator"; break; + case PROTECTED_SEPARATOR: + command = "\\protected_separator"; break; } os << "\\SpecialChar " << command << "\n"; } @@ -225,54 +170,48 @@ 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, bool /*fragile*/, + bool free_space) const { - string command; - signed char dummy = 0; - Latex(command, dummy); - os << command; + switch (kind) { + case HYPHENATION: os << "\\-"; break; + case END_OF_SENTENCE: os << "\\@."; break; + case LDOTS: os << "\\ldots{}"; break; + case MENU_SEPARATOR: os << "\\lyxarrow{}"; break; + case PROTECTED_SEPARATOR: os << (free_space ? " " : "~"); break; + } return 0; } - -int InsetSpecialChar::Latex(string & file, signed char /*fragile*/) +int InsetSpecialChar::Ascii(ostream & os) 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 HYPHENATION: break; + case END_OF_SENTENCE: os << "."; break; + case LDOTS: os << "..."; break; + case MENU_SEPARATOR: os << "->"; break; + case PROTECTED_SEPARATOR: os << " "; break; } return 0; } -int InsetSpecialChar::Linuxdoc(string & file) +int InsetSpecialChar::Linuxdoc(ostream & os) const { - switch (kind) { - case HYPHENATION: file += ""; break; - case END_OF_SENTENCE: file += ""; break; - case LDOTS: file += "..."; break; - case MENU_SEPARATOR: file += "->"; break; - } - return 0; + return Ascii(os); } -int InsetSpecialChar::DocBook(string & file) +int InsetSpecialChar::DocBook(ostream & os) const { - switch (kind) { - case HYPHENATION: file += ""; break; - case END_OF_SENTENCE: file += ""; break; - case LDOTS: file += "..."; break; - case MENU_SEPARATOR: file += "->"; break; - } - return 0; + return Ascii(os); }