bool tmp = refreshInside;
if (!in || !in->wide()) {
refreshInside = true;
- if (lyxerr.debugging(Debug::PAINTING)) {
- lyxerr << endl << "Paint inset fully" << endl;
- }
+ LYXERR(Debug::PAINTING) << endl << "Paint inset fully" << endl;
}
if (refreshInside)
inset->drawSelection(pi, int(x_), yo_);
if (isPrintableNonspace(c)) {
int const width2 = text_.singleWidth(par_, i, c,
text_.getFont(*bv_.buffer(), par_, i));
- // FIXME UNICODE
- // This does not work anymore, and non-ascii
- // characters in source files are forbidden
- // anyway.
- // dalet / resh
- dx = (c == 'ø' || c == 'ã')
+ dx = (c == 0x05e8 || // resh
+ c == 0x05d3) // dalet
? width2 - width
: (width2 - width) / 2;
}
}
// Draw nikud
- // FIXME UNICODE
pain_.text(int(x_) + dx, yo_, str, font);
}
if (!isPrintableNonspace(c))
break;
+ /* Because we do our own bidi, at this point the strings are
+ * already in visual order. However, Qt also applies its own
+ * bidi algorithm to strings that it paints to the screen.
+ * Therefore, if we were to paint Hebrew/Arabic words as a
+ * single string, the letters in the words would get reversed
+ * again. In order to avoid that, we don't collect Hebrew/
+ * Arabic characters, but rather paint them one at a time.
+ * See also http://thread.gmane.org/gmane.editors.lyx.devel/79740
+ */
+ if (hebrew)
+ break;
+
+ /* FIXME: these checks are irrelevant, since 'arabic' and
+ * 'hebrew' alone are already going to trigger a break.
+ * However, this should not be removed completely, because
+ * if an alternative solution is found which allows grouping
+ * of arabic and hebrew characters, then these breaks may have
+ * to be re-applied.
+
if (arabic && Encodings::isComposeChar_arabic(c))
break;
if (hebrew && Encodings::isComposeChar_hebrew(c))
break;
+ */
- if (arabic)
+ if (arabic) {
c = par_.transformChar(c, pos);
+ /* see comment in hebrew, explaining why we break */
+ break;
+ }
str.push_back(c);
}
// special case languages
std::string const & lang = orig_font.language()->lang();
bool const hebrew = lang == "hebrew";
- bool const arabic = lang == "arabic" &&
- (lyxrc.font_norm_type == LyXRC::ISO_8859_6_8 ||
- lyxrc.font_norm_type == LyXRC::ISO_10646_1);
+ bool const arabic = lang == "arabic";
// draw as many chars as we can
if ((!hebrew && !arabic)
// 12 lines lower):
if (lyxerr.debugging(Debug::PAINTING)) {
if (text.isMainText(*pi.base.bv->buffer()))
- lyxerr[Debug::PAINTING] << "#";
+ LYXERR(Debug::PAINTING) << "#";
else
- lyxerr[Debug::PAINTING] << "[" <<
+ LYXERR(Debug::PAINTING) << "[" <<
repaintAll << row_has_changed <<
cursor_on_row << "]";
}
// Re-enable screen drawing for future use of the painter.
pi.pain.setDrawingEnabled(true);
- if (lyxerr.debugging(Debug::PAINTING)) {
- lyxerr[Debug::PAINTING] << "." << endl;
- }
+ LYXERR(Debug::PAINTING) << "." << endl;
}
} // namespace anon