X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetspecialchar.C;h=0c03dde33cea8adad5b0a3fd02d71bdd545a99de;hb=4a5b7a5952ad2381fcdf4830511293e184c7c5a1;hp=2b5e7fab0a74c06f3e82077906f7c1cfd5a6cb49;hpb=76a135cf07b775033b3031d609e6e0a084af1c91;p=lyx.git diff --git a/src/insets/insetspecialchar.C b/src/insets/insetspecialchar.C index 2b5e7fab0a..0c03dde33c 100644 --- a/src/insets/insetspecialchar.C +++ b/src/insets/insetspecialchar.C @@ -19,15 +19,22 @@ #include "BufferView.h" #include "Painter.h" #include "font.h" +#include "lyxlex.h" +#include "lyxfont.h" using std::ostream; using std::max; InsetSpecialChar::InsetSpecialChar(Kind k) - : kind(k) + : kind_(k) {} +InsetSpecialChar::Kind InsetSpecialChar::kind() const +{ + return kind_; +} + int InsetSpecialChar::ascent(BufferView *, LyXFont const & font) const { return lyxfont::maxAscent(font); @@ -42,7 +49,7 @@ int InsetSpecialChar::descent(BufferView *, LyXFont const & font) const int InsetSpecialChar::width(BufferView *, LyXFont const & font) const { - switch (kind) { + switch (kind_) { case HYPHENATION: { int w = lyxfont::width('-', font); @@ -50,7 +57,7 @@ int InsetSpecialChar::width(BufferView *, LyXFont const & font) const w -= 2; // to make it look shorter return w; } - case HYPHENATION_BREAK: + case LIGATURE_BREAK: { return lyxfont::width('|', font); } @@ -82,7 +89,7 @@ void InsetSpecialChar::draw(BufferView * bv, LyXFont const & f, Painter & pain = bv->painter(); LyXFont font(f); - switch (kind) { + switch (kind_) { case HYPHENATION: { font.setColor(LColor::special); @@ -90,7 +97,7 @@ void InsetSpecialChar::draw(BufferView * bv, LyXFont const & f, x += width(bv, font); break; } - case HYPHENATION_BREAK: + case LIGATURE_BREAK: { font.setColor(LColor::special); pain.text(int(x), baseline, "|", font); @@ -158,11 +165,11 @@ void InsetSpecialChar::draw(BufferView * bv, LyXFont const & f, void InsetSpecialChar::write(Buffer const *, ostream & os) const { string command; - switch (kind) { + switch (kind_) { case HYPHENATION: command = "\\-"; break; - case HYPHENATION_BREAK: + case LIGATURE_BREAK: command = "\\textcompwordmark{}"; break; case END_OF_SENTENCE: @@ -187,21 +194,21 @@ void InsetSpecialChar::write(Buffer const *, ostream & os) const void InsetSpecialChar::read(Buffer const *, LyXLex & lex) { lex.nextToken(); - string const command = lex.GetString(); + string const command = lex.getString(); if (command == "\\-") - kind = HYPHENATION; + kind_ = HYPHENATION; else if (command == "\\textcompwordmark{}") - kind = HYPHENATION_BREAK; + kind_ = LIGATURE_BREAK; else if (command == "\\@.") - kind = END_OF_SENTENCE; + kind_ = END_OF_SENTENCE; else if (command == "\\ldots{}") - kind = LDOTS; + kind_ = LDOTS; else if (command == "\\menuseparator") - kind = MENU_SEPARATOR; + kind_ = MENU_SEPARATOR; else if (command == "\\protected_separator" || command == "~") - kind = PROTECTED_SEPARATOR; + kind_ = PROTECTED_SEPARATOR; else lex.printError("InsetSpecialChar: Unknown kind: `$$Token'"); } @@ -210,11 +217,11 @@ void InsetSpecialChar::read(Buffer const *, LyXLex & lex) int InsetSpecialChar::latex(Buffer const *, ostream & os, bool /*fragile*/, bool free_space) const { - switch (kind) { + switch (kind_) { case HYPHENATION: os << "\\-"; break; - case HYPHENATION_BREAK: + case LIGATURE_BREAK: os << "\\textcompwordmark{}"; break; case END_OF_SENTENCE: @@ -236,9 +243,9 @@ int InsetSpecialChar::latex(Buffer const *, ostream & os, bool /*fragile*/, int InsetSpecialChar::ascii(Buffer const *, ostream & os, int) const { - switch (kind) { + switch (kind_) { case HYPHENATION: - case HYPHENATION_BREAK: + case LIGATURE_BREAK: break; case END_OF_SENTENCE: os << "."; @@ -257,27 +264,85 @@ int InsetSpecialChar::ascii(Buffer const *, ostream & os, int) const } -int InsetSpecialChar::linuxdoc(Buffer const * buf, ostream & os) const +int InsetSpecialChar::linuxdoc(Buffer const *, ostream & os) const { - return ascii(buf, os, 0); + switch (kind_) { + case HYPHENATION: + case LIGATURE_BREAK: + break; + case END_OF_SENTENCE: + os << "."; + break; + case LDOTS: + os << "..."; + break; + case MENU_SEPARATOR: + os << "&lyxarrow;"; + break; + case PROTECTED_SEPARATOR: + os << " "; + break; + } + return 0; } -int InsetSpecialChar::docBook(Buffer const * buf, ostream & os) const +int InsetSpecialChar::docbook(Buffer const *, ostream & os) const { - return ascii(buf, os, 0); + switch (kind_) { + case HYPHENATION: + case LIGATURE_BREAK: + break; + case END_OF_SENTENCE: + os << "."; + break; + case LDOTS: + os << "..."; + break; + case MENU_SEPARATOR: + os << "&lyxarrow;"; + break; + case PROTECTED_SEPARATOR: + os << " "; + break; + } + return 0; } Inset * InsetSpecialChar::clone(Buffer const &, bool) const { - return new InsetSpecialChar(kind); + return new InsetSpecialChar(kind_); } void InsetSpecialChar::validate(LaTeXFeatures & features) const { - if (kind == MENU_SEPARATOR) { - features.lyxarrow = true; + if (kind_ == MENU_SEPARATOR) { + features.require("lyxarrow"); } } + + +bool InsetSpecialChar::isChar() const +{ + return true; +} + + +bool InsetSpecialChar::isLetter() const +{ + return kind_ == HYPHENATION || kind_ == LIGATURE_BREAK; +} + + +bool InsetSpecialChar::isSpace() const +{ + return kind_ == PROTECTED_SEPARATOR; +} + + +bool InsetSpecialChar::isLineSeparator() const +{ + return kind_ == HYPHENATION || kind_ == MENU_SEPARATOR; +}