]> git.lyx.org Git - lyx.git/blobdiff - src/Bidi.h
avoid float-conversion warning and simplify size computation
[lyx.git] / src / Bidi.h
index d556bc894408b4cd9d7b12d315a2ed86af9b7333..c406a7a2b52ed995ab5e5f8f0f8a1be2c5f8524f 100644 (file)
 #ifndef BIDI_H
 #define BIDI_H
 
-#include <config.h>
-
 #include "support/types.h"
+
 #include <vector>
 
+
+namespace lyx {
+
 class Buffer;
+class Cursor;
 class Paragraph;
 class Row;
-class LyXFont;
+class Font;
 
 
 /// bidi stuff
-struct  Bidi {
+class Bidi {
+public:
        ///
        bool isBoundary(Buffer const &, Paragraph const & par,
-                       lyx::pos_type pos) const;
+                       pos_type pos) const;
        ///
        bool isBoundary(Buffer const &, Paragraph const & par,
-                               lyx::pos_type pos, LyXFont const & font) const;
-       ///
-       lyx::pos_type log2vis(lyx::pos_type pos) const;
+                               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.
         */
-       lyx::pos_type vis2log(lyx::pos_type pos) const;
-       ///
-       lyx::pos_type level(lyx::pos_type pos) const;
-       ///
-       bool inRange(lyx::pos_type pos) const;
-       /// same_direction?
+       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: 
-       /// 
+private:
+       ///
        bool same_direction_;
        ///
-       std::vector<lyx::pos_type> log2vis_list_;
+       std::vector<pos_type> log2vis_list_;
        /** Maps positions in the visual string to positions
         *  in logical string.
         */
-       std::vector<lyx::pos_type> vis2log_list_;
+       std::vector<pos_type> vis2log_list_;
        ///
-       std::vector<lyx::pos_type> levels_;
+       std::vector<pos_type> levels_;
        ///
-       lyx::pos_type start_;
+       pos_type start_;
        ///
-       lyx::pos_type end_;
+       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