X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetSpecialChar.cpp;h=f342d0f20d0ee24de9a2149da9e495e9b7c7ac0d;hb=3d4076b598deb18660e50ec9c327efc3b15f15d0;hp=99707cbb59ddb8250606a161798cf60de41b2638;hpb=db8c16d554ebb1dcb319e44d318572de6eff024b;p=lyx.git diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp index 99707cbb59..f342d0f20d 100644 --- a/src/insets/InsetSpecialChar.cpp +++ b/src/insets/InsetSpecialChar.cpp @@ -5,7 +5,7 @@ * * \author Asger Alstrup Nielsen * \author Jean-Marc Lasgouttes - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * * Full author contact details are available in file CREDITS. */ @@ -15,9 +15,11 @@ #include "InsetSpecialChar.h" #include "Dimension.h" +#include "Font.h" #include "LaTeXFeatures.h" #include "Lexer.h" #include "MetricsInfo.h" +#include "output_xhtml.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" @@ -31,7 +33,7 @@ namespace lyx { InsetSpecialChar::InsetSpecialChar(Kind k) - : kind_(k) + : Inset(0), kind_(k) {} @@ -203,8 +205,8 @@ void InsetSpecialChar::read(Lexer & lex) } -int InsetSpecialChar::latex(odocstream & os, - OutputParams const &) const +void InsetSpecialChar::latex(otexstream & os, + OutputParams const & rp) const { switch (kind_) { case HYPHENATION: @@ -220,25 +222,32 @@ int InsetSpecialChar::latex(odocstream & os, os << "\\ldots{}"; break; case MENU_SEPARATOR: - os << "\\lyxarrow{}"; + if (rp.local_font->isRightToLeft()) + os << "\\lyxarrow*{}"; + else + os << "\\lyxarrow{}"; break; case SLASH: os << "\\slash{}"; break; case NOBREAKDASH: + if (rp.moving_arg) + os << "\\protect"; os << "\\nobreakdash-"; break; } - return 0; } -int InsetSpecialChar::plaintext(odocstream & os, OutputParams const &) const +int InsetSpecialChar::plaintext(odocstringstream & os, + OutputParams const &, size_t) const { switch (kind_) { case HYPHENATION: - case LIGATURE_BREAK: return 0; + case LIGATURE_BREAK: + os.put(0x200c); + return 1; case END_OF_SENTENCE: os << '.'; return 1; @@ -252,7 +261,7 @@ int InsetSpecialChar::plaintext(odocstream & os, OutputParams const &) const os << '/'; return 1; case NOBREAKDASH: - os << '-'; + os.put(0x2011); return 1; } return 0; @@ -285,15 +294,55 @@ int InsetSpecialChar::docbook(odocstream & os, OutputParams const &) const } -void InsetSpecialChar::textString(odocstream & os) const +docstring InsetSpecialChar::xhtml(XHTMLStream & xs, OutputParams const &) const { - plaintext(os, OutputParams(0)); + switch (kind_) { + case HYPHENATION: + break; + case LIGATURE_BREAK: + xs << XHTMLStream::ESCAPE_NONE << "‌"; + break; + case END_OF_SENTENCE: + xs << '.'; + break; + case LDOTS: + xs << XHTMLStream::ESCAPE_NONE << "…"; + break; + case MENU_SEPARATOR: + xs << XHTMLStream::ESCAPE_NONE << "⇒"; + break; + case SLASH: + xs << XHTMLStream::ESCAPE_NONE << "⁄"; + break; + case NOBREAKDASH: + xs << XHTMLStream::ESCAPE_NONE << "‑"; + break; + } + return docstring(); +} + + +void InsetSpecialChar::toString(odocstream & os) const +{ + switch (kind_) { + case LIGATURE_BREAK: + // Do not output ZERO WIDTH NON JOINER here + // Spell checker would choke on it. + return; + default: + break; + } + odocstringstream ods; + plaintext(ods, OutputParams(0)); + os << ods.str(); } -Inset * InsetSpecialChar::clone() const +void InsetSpecialChar::forToc(docstring & os, size_t) const { - return new InsetSpecialChar(kind_); + odocstringstream ods; + plaintext(ods, OutputParams(0)); + os += ods.str(); } @@ -306,15 +355,10 @@ void InsetSpecialChar::validate(LaTeXFeatures & features) const } -bool InsetSpecialChar::isChar() const -{ - return true; -} - - bool InsetSpecialChar::isLetter() const { - return kind_ == HYPHENATION || kind_ == LIGATURE_BREAK; + return kind_ == HYPHENATION || kind_ == LIGATURE_BREAK + || kind_ == NOBREAKDASH; } @@ -325,7 +369,8 @@ bool InsetSpecialChar::isLineSeparator() const // Paragraph::stripLeadingSpaces nukes the characters which // have this property. I leave the code here, since it should // eventually be made to work. (JMarc 20020327) - return kind_ == HYPHENATION || kind_ == MENU_SEPARATOR; + return kind_ == HYPHENATION || kind_ == MENU_SEPARATOR + || kind_ == SLASH; #else return false; #endif