#include "Bidi.h"
#include "Buffer.h"
-#include "LyXFont.h"
+#include "BufferView.h"
+#include "Font.h"
#include "Row.h"
#include "LyXRC.h"
#include "Paragraph.h"
return;
}
- if (par.ownerCode() == Inset::ERT_CODE) {
+ if (par.ownerCode() == ERT_CODE || par.ownerCode() == LISTINGS_CODE) {
start_ = -1;
return;
}
BufferParams const & bufparams = buf.params();
pos_type stack[2];
- bool const rtl_par = par.isRightToLeftPar(bufparams);
+ bool const rtl_par = par.isRTL(bufparams);
int lev = 0;
bool rtl = false;
bool rtl0 = false;
pos_type const body_pos = par.beginOfBody();
for (pos_type lpos = start_; lpos <= end_; ++lpos) {
- bool is_space = par.isLineSeparator(lpos);
+ bool is_space = false;
+ // We do not handle spaces around an RTL segment in a special way anymore.
+ // Neither do we do so when generating the LaTeX, so setting is_space
+ // to false makes the view in the GUI consistent with the output of LaTeX
+ // later. The old setting was:
+ //bool is_space = par.isLineSeparator(lpos);
+ // FIXME: once we're sure that this is what we really want, we should just
+ // get rid of this variable...
pos_type const pos =
(is_space && lpos + 1 <= end_ &&
!par.isLineSeparator(lpos + 1) &&
!par.isNewline(lpos + 1))
? lpos + 1 : lpos;
- LyXFont font = par.getFontSettings(bufparams, pos);
+ Font font = par.getFontSettings(bufparams, pos);
if (pos != lpos && 0 < lpos && rtl0 && font.isRightToLeft() &&
- font.number() == LyXFont::ON &&
+ font.number() == Font::ON &&
par.getFontSettings(bufparams, lpos - 1).number()
- == LyXFont::ON) {
+ == Font::ON) {
font = par.getFontSettings(bufparams, lpos);
is_space = false;
}
bool const rtl = level(pos - 1) % 2;
bool const rtl2 = inRange(pos)
? level(pos) % 2
- : par.isRightToLeftPar(buf.params());
+ : par.isRTL(buf.params());
return rtl != rtl2;
}
bool Bidi::isBoundary(Buffer const & buf, Paragraph const & par,
- pos_type pos, LyXFont const & font) const
+ pos_type pos, Font const & font) const
{
if (!lyxrc.rtl_support)
return false; // This is just for speedup
bool const rtl = font.isVisibleRightToLeft();
bool const rtl2 = inRange(pos)
? level(pos) % 2
- : par.isRightToLeftPar(buf.params());
+ : par.isRTL(buf.params());
return rtl != rtl2;
}
+bool reverseDirectionNeeded(Cursor const & cur)
+{
+ /*
+ * We determine the directions based on the direction of the
+ * bottom() --- i.e., outermost --- paragraph, because that is
+ * the only way to achieve consistency of the arrow's movements
+ * within a paragraph, and thus avoid situations in which the
+ * cursor gets stuck.
+ */
+ return cur.bottom().paragraph().isRTL(cur.bv().buffer().params());
+}
+
+
+bool isWithinRtlParagraph(Cursor const & cur)
+{
+ return cur.innerParagraph().isRTL(cur.bv().buffer().params());
+}
+
} // namespace lyx