]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.h
Merge branch 'master' of lyx:lyx
[lyx.git] / src / Paragraph.h
index 041c33e70cee9c4fbea9c99c23e9bc66fe6b8158..f5d6a23b26f9b18f20f47542ab3a6c2cdf870c62 100644 (file)
@@ -55,6 +55,7 @@ class TexRow;
 class Toc;
 class WordLangTuple;
 class XHTMLStream;
+class otexstream;
 
 class FontSpan {
 public:
@@ -76,8 +77,38 @@ public:
        {
                return first == s.first && last == s.last;
        }
+
+       inline bool inside(pos_type p) const
+       {
+               return first <= p && p <= last;
+       }
+
+       inline size_t size() const
+       {
+               return empty() ? 0 : last - first;
+       }
        
+
+       inline FontSpan intersect(FontSpan const & f) const
+       {
+               FontSpan result = FontSpan();
+               if (inside(f.first))
+                       result.first = f.first;
+               else if (f.inside(first))
+                       result.first = first;
+               else
+                       return result;
+               if (inside(f.last))
+                       result.last = f.last;
+               else if (f.inside(last))
+                       result.last = last;
+               return result;
+       }
        
+       inline bool empty() const
+       {
+               return first > last;
+       }
 };
 
 ///
@@ -97,7 +128,8 @@ enum AsStringParameter
        AS_STR_NONE = 0, ///< No option, only printable characters.
        AS_STR_LABEL = 1, ///< Prefix with paragraph label.
        AS_STR_INSETS = 2, ///< Go into insets.
-       AS_STR_NEWLINES = 4 ///< Get also newline characters.
+       AS_STR_NEWLINES = 4, ///< Get also newline characters.
+       AS_STR_SKIPDELETE = 8 ///< Skip deleted text in change tracking.
 };
 
 
@@ -145,6 +177,8 @@ public:
        ///
        docstring asString(pos_type beg, pos_type end,
                int options = AS_STR_NONE) const;
+       ///
+       void forToc(docstring &, size_t maxlen) const;
 
        /// Extract only the explicitly visible text (without any formatting),
        /// descending into insets
@@ -157,9 +191,9 @@ public:
        void validate(LaTeXFeatures &) const;
 
        /// \param force means: output even if layout.inpreamble is true.
-       void latex(BufferParams const &, Font const & outerfont, odocstream &,
-                  TexRow & texrow, OutputParams const &,
-                  int start_pos = 0, int end_pos = -1, bool force = false) const;
+       void latex(BufferParams const &, Font const & outerfont, otexstream &,
+                  OutputParams const &, int start_pos = 0, int end_pos = -1,
+                  bool force = false) const;
 
        /// Can we drop the standard paragraph wrapper?
        bool emptyTag() const;
@@ -202,6 +236,8 @@ public:
        ///
        bool usePlainLayout() const;
        ///
+       bool isPassThru() const;
+       ///
        pos_type size() const;
        ///
        bool empty() const;
@@ -384,6 +420,9 @@ public:
        bool isChar(pos_type pos) const;
        /// True if the element at this point is a space
        bool isSpace(pos_type pos) const;
+       /// True if the element at this point is a hard hyphen or a apostrophe
+       /// If it is enclosed by spaces return false
+       bool isHardHyphenOrApostrophe(pos_type pos) const;
 
        /// returns true if at least one line break or line separator has been deleted
        /// at the beginning of the paragraph (either physically or logically)
@@ -419,9 +458,10 @@ public:
                pos_type & right, TextCase action);
 
        /// find \param str string inside Paragraph.
-       /// \return true if the specified string is at the specified position
+       /// \return non-zero if the specified string is at the specified
+       ///     position; returned value is the actual match length in positions
        /// \param del specifies whether deleted strings in ct mode will be considered
-       bool find(
+       int find(
                docstring const & str, ///< string to search
                bool cs, ///<
                bool mw, ///<
@@ -441,8 +481,15 @@ public:
                bool check_learned = false) const;
 
        /// Spell checker status at position \p pos.
-       /// \return true if pointed position is misspelled.
-       bool isMisspelled(pos_type pos) const;
+       /// If \p check_boundary is true the status of position immediately
+       /// before \p pos is tested too if it is at word boundary.
+       /// \return true if one of the tested positions is misspelled.
+       bool isMisspelled(pos_type pos, bool check_boundary = false) const;
+
+       /// \return true if both positions are inside the same
+       /// spell range - i.e. the same word.
+       /// use it for positions inside misspelled range only.
+       bool isSameSpellRange(pos_type pos1, pos_type pos2) const;
 
        /// spell check of whole paragraph
        /// remember results until call of requestSpellCheck()