]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph_pimpl.h
add config.h
[lyx.git] / src / paragraph_pimpl.h
index 5ecd70bcf2df681072e6487eca0024b5745e6d07..3b8e0b0fab6f61c497caa39f47298994a20b69a5 100644 (file)
@@ -1,93 +1,73 @@
 // -*- C++ -*-
 /**
  * \file paragraph_pimpl.h
- * Copyright 1995-2002 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author John Levon
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
  */
 
 #ifndef PARAGRAPH_PIMPL_H
 #define PARAGRAPH_PIMPL_H
 
 #include "paragraph.h"
-#include "ParagraphParameters.h"
+
 #include "changes.h"
-#include "counters.h"
+#include "lyxfont.h"
+#include "ParagraphParameters.h"
 
 #include <boost/scoped_ptr.hpp>
+
+
+namespace lyx {
+
+class Encoding;
 class LyXLayout;
 
-struct Paragraph::Pimpl {
-       ///
-       typedef std::vector<value_type> TextContainer;
 
+class Paragraph::Pimpl {
+public:
        ///
        Pimpl(Paragraph * owner);
-       /// Copy constructor
-       Pimpl(Pimpl const &, Paragraph * owner, bool same_ids = false);
-       ///
-       lyx::pos_type size() const {
-               return text.size();
-       }
-       ///
-       bool empty() const {
-               return text.empty();
-       }
-       ///
-       void clear();
-       ///
-       void setContentsFromPar(Paragraph const * par);
-       /// 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;
+       /// "Copy constructor"
+       Pimpl(Pimpl const &, Paragraph * owner);
+
+       //
+       // Change tracking
+       //
        /// 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);
+       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);
+
        ///
-       void insertChar(lyx::pos_type pos, value_type c, LyXFont const & font, Change change = Change(Change::INSERTED));
+       value_type getChar(pos_type pos) const;
        ///
-       void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const & font, Change change = Change(Change::INSERTED));
-       /// definite erase
-       void eraseIntern(lyx::pos_type pos);
-       /// erase the given position
-       void erase(lyx::pos_type pos);
-       /// erase the given range
-       bool erase(lyx::pos_type start, lyx::pos_type end);
+       void insertChar(pos_type pos, value_type c, Change const & change);
        ///
-       LyXFont const realizeFont(LyXFont const & font,
-                                 BufferParams const & bparams) const;
+       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);
        ///
-       Inset * inset_owner;
+       InsetBase * inset_owner;
 
        /** A font entry covers a range of positions. Notice that the
            entries in the list are inserted in random order.
@@ -100,24 +80,23 @@ struct Paragraph::Pimpl {
            and font_i covers the chars in positions pos_{i-1}+1,...,pos_i
            (font_1 covers the chars 0,...,pos_1) (Dekel)
        */
-       struct FontTable  {
+       class FontTable  {
+       public:
                ///
-               FontTable(lyx::pos_type p, LyXFont const & f)
-                       : pos_(p)
-                       {
-                               font_ = container.get(f);
-                       }
+               FontTable(pos_type p, LyXFont const & f)
+                       : pos_(p), font_(f)
+               {}
                ///
-               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_; }
+               LyXFont const & font() const { return font_; }
                ///
-               void font(LyXFont const & f) { font_ = container.get(f);}
+               void font(LyXFont const & f) { font_ = f;}
        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
@@ -127,16 +106,14 @@ struct Paragraph::Pimpl {
                    The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT
                    allowed in these font tables.
                */
-               boost::shared_ptr<LyXFont> font_;
-               ///
-               static ShareContainer<LyXFont> container;
+               LyXFont font_;
        };
        ///
-       friend struct matchFT;
+       friend class matchFT;
        ///
-       struct matchFT {
+       class matchFT {
+       public:
                /// used by lower_bound and upper_bound
-               inline
                int operator()(FontTable const & a, FontTable const & b) const {
                        return a.pos() < b.pos();
                }
@@ -147,24 +124,30 @@ struct Paragraph::Pimpl {
        ///
        FontList fontlist;
 
-       ///
-       Paragraph * TeXDeeper(Buffer const *, BufferParams const &,
-                                std::ostream &, TexRow & texrow);
-       ///
-       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,
-                                  bool moving_arg,
+       void simpleTeXSpecialChars(Buffer const &, BufferParams const &,
+                                  Encoding const &, odocstream &,
+                                  TexRow & texrow, OutputParams const &,
                                   LyXFont & font, LyXFont & running_font,
-                                  LyXFont & basefont, bool & open_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);
 
        ///
@@ -179,19 +162,19 @@ struct Paragraph::Pimpl {
        ParagraphParameters params;
 
 private:
-       /// erase at the given position. Returns true if it was actually erased
-       bool erasePos(lyx::pos_type pos);
-
+       ///
+       pos_type size() const { return owner_->size(); }
        /// match a string against a particular point in the paragraph
-       bool isTextAt(string const & str, lyx::pos_type pos) const;
+       bool isTextAt(std::string const & str, pos_type pos) const;
+
+       /// for recording and looking up changes
+       Changes changes_;
 
-       /// for recording and looking up changes in revision tracking mode
-       boost::scoped_ptr<Changes> changes_;
        /// Who owns us?
        Paragraph * owner_;
-       ///
-       TextContainer text;
 };
 
+
+} // namespace lyx
+
 #endif