X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetspecialchar.C;h=3c4193b08fb5283f72d5d97f3d5349023baca844;hb=ba5e47f1a92c3688d16f76f654fd3768672ebb50;hp=525b749aa1a67209f4256977b72c2e87eff7121e;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/insets/insetspecialchar.C b/src/insets/insetspecialchar.C index 525b749aa1..3c4193b08f 100644 --- a/src/insets/insetspecialchar.C +++ b/src/insets/insetspecialchar.C @@ -3,9 +3,9 @@ * * LyX, The Document Processor * - * Copyright (C) 1997 Asger Alstrup + * Copyright 1997 Asger Alstrup * - *======================================================*/ + * ====================================================== */ #include @@ -14,94 +14,89 @@ #endif #include "insetspecialchar.h" -#include "lyxdraw.h" -#include "error.h" +#include "debug.h" #include "LaTeXFeatures.h" - -// $Id: insetspecialchar.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $ - -#if !defined(lint) && !defined(WITH_WARNINGS) -static char vcid[] = "$Id: insetspecialchar.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $"; -#endif /* lint */ - -InsetSpecialChar::InsetSpecialChar() -{ -} +#include "Painter.h" InsetSpecialChar::InsetSpecialChar(Kind k) : kind(k) -{ -} +{} -InsetSpecialChar::~InsetSpecialChar() -{ -} - - -int InsetSpecialChar::Ascent(LyXFont const&font) const +int InsetSpecialChar::ascent(Painter &, LyXFont const & font) const { return font.maxAscent(); } -int InsetSpecialChar::Descent(LyXFont const&font) const +int InsetSpecialChar::descent(Painter &, LyXFont const & font) const { return font.maxDescent(); } -int InsetSpecialChar::Width(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 } -void InsetSpecialChar::Draw(LyXFont font, LyXScreen &scr, - int baseline, float &x) +void InsetSpecialChar::draw(Painter & pain, LyXFont const & f, + int baseline, float & x) const { + LyXFont font(f); switch (kind) { case HYPHENATION: { - font.setColor(LyXFont::MAGENTA); - scr.drawText(font, "-", 1, baseline, int(x)); - x += Width(font); + font.setColor(LColor::special); + pain.text(int(x), baseline, "-", font); + x += width(pain, font); break; } case END_OF_SENTENCE: { - font.setColor(LyXFont::MAGENTA); - scr.drawText(font, ".", 1, baseline, int(x)); - x += Width(font); + font.setColor(LColor::special); + pain.text(int(x), baseline, ".", font); + x += width(pain, font); break; } case LDOTS: { - font.setColor(LyXFont::MAGENTA); - scr.drawText(font, ". . .", 5, baseline, int(x)); - x += Width(font); + font.setColor(LColor::special); + pain.text(int(x), baseline, ". . .", font); + x += width(pain, font); break; } case MENU_SEPARATOR: @@ -110,105 +105,144 @@ void InsetSpecialChar::Draw(LyXFont font, LyXScreen &scr, 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); + int xp[4], yp[4]; + + xp[0] = ox; yp[0] = baseline; + xp[1] = ox; yp[1] = baseline - h; + xp[2] = ox + w; yp[2] = baseline - h/2; + xp[3] = ox; yp[3] = baseline; + + 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(FILE *file) +void InsetSpecialChar::Write(ostream & os) const { - LString command; + string command; switch (kind) { case HYPHENATION: command = "\\-"; break; 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; } - fprintf(file, "\\SpecialChar %s\n", command.c_str()); + os << "\\SpecialChar " << command << "\n"; } // This function will not be necessary when lyx3 -void InsetSpecialChar::Read(LyXLex &lex) +void InsetSpecialChar::Read(LyXLex & lex) { lex.nextToken(); - LString command = lex.GetString(); + string command = lex.GetString(); - if (command=="\\-") + if (command == "\\-") kind = HYPHENATION; - else if (command=="\\@.") + else if (command == "\\@.") kind = END_OF_SENTENCE; - else if (command=="\\ldots{}") + else if (command == "\\ldots{}") kind = LDOTS; - else if (command=="\\menuseparator") + 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(FILE *file, signed char /*fragile*/) +int InsetSpecialChar::Latex(ostream & os, signed char /*fragile*/) const { - LString command; + string command; signed char dummy = 0; Latex(command, dummy); - fprintf(file, "%s", command.c_str()); + os << command; return 0; } -int InsetSpecialChar::Latex(LString &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(LString &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(LString &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; } -Inset* InsetSpecialChar::Clone() +Inset * InsetSpecialChar::Clone() const { - InsetSpecialChar *result = new InsetSpecialChar(kind); - return result; + return new InsetSpecialChar(kind); } -void InsetSpecialChar::Validate(LaTeXFeatures& features) const +void InsetSpecialChar::Validate(LaTeXFeatures & features) const { if (kind == MENU_SEPARATOR) { features.lyxarrow = true;