#include "Dimension.h"
#include "Font.h"
+#include "Language.h"
#include "LaTeXFeatures.h"
#include "Lexer.h"
#include "MetricsInfo.h"
return width;
}
+} // namespace
+
+docstring InsetSpecialChar::toolTip(BufferView const &, int, int) const
+{
+ docstring message;
+ switch (kind_) {
+ case ALLOWBREAK:
+ message = from_ascii("Optional Line Break (ZWSP)");
+ break;
+ case LIGATURE_BREAK:
+ message = from_ascii("Ligature Break (ZWNJ)");
+ break;
+ case END_OF_SENTENCE:
+ message = from_ascii("End of Sentence");
+ break;
+ case HYPHENATION:
+ message = from_ascii("Hyphenation Point");
+ break;
+ case SLASH:
+ message = from_ascii("Breakable Slash");
+ break;
+ case NOBREAKDASH:
+ message = from_ascii("Protected Hyphen (SHY)");
+ break;
+ case LDOTS:
+ case MENU_SEPARATOR:
+ case PHRASE_LYX:
+ case PHRASE_TEX:
+ case PHRASE_LATEX2E:
+ case PHRASE_LATEX:
+ // no tooltip for these ones.
+ break;
+ }
+ return message;
}
docstring s;
switch (kind_) {
+ case ALLOWBREAK:
+ dim.wid = fm.em() / 8;
+ break;
case LIGATURE_BREAK:
s = from_ascii("|");
break;
}
}
-}
+} // namespace
void InsetSpecialChar::draw(PainterInfo & pi, int x, int y) const
{
pi.pain.text(x, y, char_type('-'), font);
break;
}
+ case ALLOWBREAK:
+ {
+ // A small vertical line
+ int const asc = theFontMetrics(pi.base.font).ascent('x');
+ int const desc = theFontMetrics(pi.base.font).descent('g');
+ int const x0 = x; // x + 1; // FIXME: incline,
+ int const x1 = x; // x - 1; // similar to LibreOffice?
+ int const y0 = y + desc;
+ int const y1 = y - asc / 3;
+ pi.pain.line(x0, y1, x1, y0, Color_special);
+ break;
+ }
case LIGATURE_BREAK:
{
font.setColor(Color_special);
case HYPHENATION:
command = "softhyphen";
break;
+ case ALLOWBREAK:
+ command = "allowbreak";
+ break;
case LIGATURE_BREAK:
command = "ligaturebreak";
break;
if (command == "softhyphen")
kind_ = HYPHENATION;
+ else if (command == "allowbreak")
+ kind_ = ALLOWBREAK;
else if (command == "ligaturebreak")
kind_ = LIGATURE_BREAK;
else if (command == "endofsentence")
void InsetSpecialChar::latex(otexstream & os,
OutputParams const & rp) const
{
+ bool const rtl = rp.local_font->isRightToLeft();
+ string lswitch = "";
+ string lswitche = "";
+ if (rtl && !rp.use_polyglossia) {
+ lswitch = "\\L{";
+ lswitche = "}";
+ if (rp.local_font->language()->lang() == "arabic_arabi"
+ || rp.local_font->language()->lang() == "farsi")
+ lswitch = "\\textLR{";
+ }
+
switch (kind_) {
case HYPHENATION:
os << "\\-";
break;
+ case ALLOWBREAK:
+ os << "\\LyXZeroWidthSpace" << termcmd;
+ break;
case LIGATURE_BREAK:
os << "\\textcompwordmark" << termcmd;
break;
os << "\\ldots" << termcmd;
break;
case MENU_SEPARATOR:
- if (rp.local_font->isRightToLeft())
+ if (rtl)
os << "\\lyxarrow*";
else
os << "\\lyxarrow";
case PHRASE_LYX:
if (rp.moving_arg)
os << "\\protect";
- os << "\\LyX" << termcmd;
+ os << lswitch << "\\LyX" << termcmd << lswitche;
break;
case PHRASE_TEX:
if (rp.moving_arg)
os << "\\protect";
- os << "\\TeX" << termcmd;
+ os << lswitch << "\\TeX" << termcmd << lswitche;
break;
case PHRASE_LATEX2E:
if (rp.moving_arg)
os << "\\protect";
- os << "\\LaTeXe" << termcmd;
+ os << lswitch << "\\LaTeXe" << termcmd << lswitche;
break;
case PHRASE_LATEX:
if (rp.moving_arg)
os << "\\protect";
- os << "\\LaTeX" << termcmd;
+ os << lswitch << "\\LaTeX" << termcmd << lswitche;
break;
}
}
switch (kind_) {
case HYPHENATION:
return 0;
+ case ALLOWBREAK:
+ os.put(0x200b);
+ return 1;
case LIGATURE_BREAK:
os.put(0x200c);
return 1;
{
switch (kind_) {
case HYPHENATION:
+ break;
+ case ALLOWBREAK:
+ os.put(0x200b);
+ break;
case LIGATURE_BREAK:
break;
case END_OF_SENTENCE:
switch (kind_) {
case HYPHENATION:
break;
+ case ALLOWBREAK:
+ xs << XHTMLStream::ESCAPE_NONE << "​";
+ break;
case LIGATURE_BREAK:
xs << XHTMLStream::ESCAPE_NONE << "‌";
break;
void InsetSpecialChar::toString(odocstream & os) const
{
switch (kind_) {
+ case ALLOWBREAK:
case LIGATURE_BREAK:
- // Do not output ZERO WIDTH NON JOINER here
+ // Do not output ZERO WIDTH SPACE and ZERO WIDTH NON JOINER here
// Spell checker would choke on it.
return;
default:
void InsetSpecialChar::validate(LaTeXFeatures & features) const
{
+ if (kind_ == ALLOWBREAK)
+ features.require("lyxzerowidthspace");
if (kind_ == MENU_SEPARATOR)
features.require("lyxarrow");
if (kind_ == NOBREAKDASH)
}
+bool InsetSpecialChar::isChar() const
+{
+ return kind_ != HYPHENATION && kind_ != LIGATURE_BREAK;
+}
+
+
bool InsetSpecialChar::isLetter() const
{
return kind_ == HYPHENATION || kind_ == LIGATURE_BREAK
// 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
- || kind_ == SLASH;
+ return kind_ == HYPHENATION || kind_ == ALLOWBREAK
+ || kind_ == MENU_SEPARATOR || kind_ == SLASH;
#else
return false;
#endif