X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBidi.cpp;h=37cb87520a1e0f31b5a1ce84ef7e9d6bbf3fcc8a;hb=e54ae72e5fac6f750c3f7972c74bb42b57f3a049;hp=5a979eff55634eae1d93e68ca0a7f846ac030eb1;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/Bidi.cpp b/src/Bidi.cpp index 5a979eff55..37cb87520a 100644 --- a/src/Bidi.cpp +++ b/src/Bidi.cpp @@ -12,7 +12,8 @@ #include "Bidi.h" #include "Buffer.h" -#include "LyXFont.h" +#include "BufferView.h" +#include "Font.h" #include "Row.h" #include "LyXRC.h" #include "Paragraph.h" @@ -59,7 +60,7 @@ void Bidi::computeTables(Paragraph const & par, return; } - if (par.ownerCode() == InsetBase::ERT_CODE) { + if (par.ownerCode() == Inset::ERT_CODE || par.ownerCode() == Inset::LISTINGS_CODE) { start_ = -1; return; } @@ -94,17 +95,24 @@ void Bidi::computeTables(Paragraph const & par, 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; } @@ -196,7 +204,7 @@ bool Bidi::isBoundary(Buffer const & buf, Paragraph const & par, 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 @@ -209,4 +217,24 @@ bool Bidi::isBoundary(Buffer const & buf, Paragraph const & par, } +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().isRightToLeftPar( + cur.bv().buffer()->params()); +} + + +bool isWithinRtlParagraph(Cursor const & cur) +{ + return cur.innerParagraph().isRightToLeftPar( + cur.bv().buffer()->params()); +} + } // namespace lyx