]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph_pimpl.h
add config.h
[lyx.git] / src / paragraph_pimpl.h
index 5d15a82ec383bfed6e72d35378fb997ff1508bfa..3b8e0b0fab6f61c497caa39f47298994a20b69a5 100644 (file)
 
 #include <boost/scoped_ptr.hpp>
 
+
+namespace lyx {
+
+class Encoding;
 class LyXLayout;
 
 
@@ -32,51 +36,36 @@ public:
        Pimpl(Paragraph * owner);
        /// "Copy constructor"
        Pimpl(Pimpl const &, Paragraph * owner);
-       ///
-       void setContentsFromPar(Paragraph const & par);
 
        //
        // Change tracking
        //
-       /// set tracking mode
-       void trackChanges(Change::Type type = Change::UNCHANGED);
-       /// stop tracking
-       void untrackChanges();
-       /// set all text as new for change mode
-       void cleanChanges();
-       /// look up change type at given pos
-       Change::Type lookupChange(lyx::pos_type pos) const;
        /// look up change at given pos
-       Change const lookupChangeFull(lyx::pos_type pos) const;
-       /// is there a change in the given range ?
-       bool isChanged(lyx::pos_type start, lyx::pos_type end) const;
-       /// is there a non-addition in this range ?
-       bool isChangeEdited(lyx::pos_type start, lyx::pos_type end) const;
-       /// set change at pos
-       void setChange(lyx::pos_type pos, Change::Type type);
-       /// mark as erased
-       void markErased();
-       /// accept change
-       void acceptChange(lyx::pos_type start, lyx::pos_type end);
-       /// reject change
-       void rejectChange(lyx::pos_type start, lyx::pos_type end);
-       /// are we tracking changes ?
-       bool tracking() const { return changes_.get(); }
-
-       ///
-       value_type getChar(lyx::pos_type pos) const;
-       ///
-       void setChar(lyx::pos_type pos, value_type c);
-       ///
-       void insertChar(lyx::pos_type pos, value_type c, Change change);
-       ///
-       void insertInset(lyx::pos_type pos, InsetBase * inset, Change change);
-       /// definite erase
-       void eraseIntern(lyx::pos_type pos);
-       /// erase the given position. Returns true if it was actually erased
-       bool erase(lyx::pos_type pos);
-       /// erase the given range
-       int erase(lyx::pos_type start, lyx::pos_type end);
+       Change const & lookupChange(pos_type pos) const;
+       /// is there a change within the given range ?
+       bool isChanged(pos_type start, pos_type end) const;
+       /// will the paragraph be physically merged with the next
+       /// one if the imaginary end-of-par character is logically deleted?
+       bool isMergedOnEndOfParDeletion(bool trackChanges) const;
+       /// set change for the entire par
+       void setChange(Change const & change);
+       /// set change at given pos
+       void setChange(pos_type pos, Change const & change);
+       /// accept changes within the given range
+       void acceptChanges(BufferParams const & bparams, pos_type start, pos_type end);
+       /// reject changes within the given range
+       void rejectChanges(BufferParams const & bparams, pos_type start, pos_type end);
+
+       ///
+       value_type getChar(pos_type pos) const;
+       ///
+       void insertChar(pos_type pos, value_type c, Change const & change);
+       ///
+       void insertInset(pos_type pos, InsetBase * inset, Change const & change);
+       /// (logically) erase the char at pos; return true if it was actually erased
+       bool eraseChar(pos_type pos, bool trackChanges);
+       /// (logically) erase the given range; return the number of chars actually erased
+       int eraseChars(pos_type start, pos_type end, bool trackChanges);
        ///
        InsetBase * inset_owner;
 
@@ -94,29 +83,20 @@ public:
        class FontTable  {
        public:
                ///
-               FontTable(lyx::pos_type p, LyXFont const & f)
+               FontTable(pos_type p, LyXFont const & f)
                        : pos_(p), font_(f)
-               {
-#if 0
-                       font_ = container.get(f);
-#endif
-               }
+               {}
                ///
-               lyx::pos_type pos() const { return pos_; }
+               pos_type pos() const { return pos_; }
                ///
-               void pos(lyx::pos_type p) { pos_ = p; }
+               void pos(pos_type p) { pos_ = p; }
                ///
                LyXFont const & font() const { return font_; }
-#if 0
-               ///
-               void font(LyXFont const & f) { font_ = container.get(f);}
-#else
                ///
                void font(LyXFont const & f) { font_ = f;}
-#endif
        private:
                /// End position of paragraph this font attribute covers
-               lyx::pos_type pos_;
+               pos_type pos_;
                /** Font. Interpretation of the font values:
                    If a value is LyXFont::INHERIT_*, it means that the font
                    attribute is inherited from either the layout of this
@@ -126,13 +106,7 @@ public:
                    The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT
                    allowed in these font tables.
                */
-#if 0
-               boost::shared_ptr<LyXFont> font_;
-               ///
-               static ShareContainer<LyXFont> container;
-#else
                LyXFont font_;
-#endif
        };
        ///
        friend class matchFT;
@@ -150,23 +124,30 @@ public:
        ///
        FontList fontlist;
 
-       ///
-       void simpleTeXBlanks(std::ostream &, TexRow & texrow,
-                            lyx::pos_type const i,
+       /// Output the surrogate pair formed by \p c and \p next to \p os.
+       /// \return the number of characters written.
+       int latexSurrogatePair(odocstream & os, value_type c, value_type next,
+                              Encoding const &);
+       /// Output a space in appropriate formatting (or a surrogate pair
+       /// if the next character is a combining character).
+       /// \return whether a surrogate pair was output.
+       bool simpleTeXBlanks(BufferParams const &, Encoding const &,
+                            odocstream &, TexRow & texrow,
+                            pos_type & i,
                             unsigned int & column,
                             LyXFont const & font,
                             LyXLayout const & style);
        ///
        void simpleTeXSpecialChars(Buffer const &, BufferParams const &,
-                                  std::ostream &, TexRow & texrow,
-                                  OutputParams const &,
+                                  Encoding const &, odocstream &,
+                                  TexRow & texrow, OutputParams const &,
                                   LyXFont & font, LyXFont & running_font,
                                   LyXFont & basefont,
                                   LyXFont const & outerfont,
                                   bool & open_font,
                                   Change::Type & running_change,
                                   LyXLayout const & style,
-                                  lyx::pos_type & i,
+                                  pos_type & i,
                                   unsigned int & column, value_type const c);
 
        ///
@@ -182,15 +163,18 @@ public:
 
 private:
        ///
-       lyx::pos_type size() const { return owner_->size(); }
+       pos_type size() const { return owner_->size(); }
        /// match a string against a particular point in the paragraph
-       bool isTextAt(std::string const & str, lyx::pos_type pos) const;
+       bool isTextAt(std::string const & str, pos_type pos) const;
 
-       /// for recording and looking up changes in revision tracking mode
-       boost::scoped_ptr<Changes> changes_;
+       /// for recording and looking up changes
+       Changes changes_;
 
        /// Who owns us?
        Paragraph * owner_;
 };
 
+
+} // namespace lyx
+
 #endif