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.
- * The encodings used by isComposeChar_arabic and
- * isComposeChar_hebrew are incorrect (probably iso8859-8 and
- * iso8859-6), they also have to be adapted to Unicode.
* 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.
- * See also http://thread.gmane.org/gmane.editors.lyx.devel/79740
if (arabic && Encodings::isComposeChar_arabic(c))
break;
if (arabic) {
c = par_.transformChar(c, pos);
+ /* see comment in hebrew, explaining why we break */
break;
}
// 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