// -*- C++ -*- /** * \file Bidi.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Dekel Tsur * * Full author contact details are available in file CREDITS. */ #ifndef BIDI_H #define BIDI_H #include "support/types.h" #include namespace lyx { class Buffer; class Cursor; class Paragraph; class Row; class Font; /// bidi stuff class Bidi { public: /// bool isBoundary(Buffer const &, Paragraph const & par, pos_type pos) const; /// bool isBoundary(Buffer const &, Paragraph const & par, pos_type pos, Font const & font) const; /** Maps positions in the visual string to positions * in logical string. */ pos_type log2vis(pos_type pos) const; /** Maps positions in the logical string to positions * in visual string. */ pos_type vis2log(pos_type pos) const; /* * The text direction at logical position \param pos. * Possible values are * 0: left-to-right text * 1: right-to-left text * 2: left-to-right text in right-to-left language (aka numbers) */ pos_type level(pos_type pos) const; /// Is logical position covered by this row? bool inRange(pos_type pos) const; /// Is the whole row in the same direction as the paragraph? bool same_direction() const; /// Compute the data for visual positions. void computeTables(Paragraph const & par, Buffer const &, Row const & row); private: /// bool same_direction_; /// std::vector log2vis_list_; /** Maps positions in the visual string to positions * in logical string. */ std::vector vis2log_list_; /// std::vector levels_; /// pos_type start_; /// pos_type end_; }; /// Should interpretation of the arrow keys be reversed? bool reverseDirectionNeeded(Cursor const & cur); /// Is current paragraph in RTL mode? bool isWithinRtlParagraph(Cursor const & cur); } // namespace lyx #endif // BIDI_H