]> git.lyx.org Git - features.git/blobdiff - src/mathed/MathData.h
* Lazy MathData to avoid unneeded interpretation of macro definitions
[features.git] / src / mathed / MathData.h
index 7983cf65a3788240b4dc7efdcb6e58ab5f753bd7..1ddf623685218ff3e0dc5b0a849d12b34fdc9b4b 100644 (file)
@@ -7,6 +7,7 @@
  * \author Alejandro Aguilar Sierra
  * \author André Pönitz
  * \author Lars Gullik Bjønnes
+ * \author Stefan Schimanski
  *
  * Full author contact details are available in file CREDITS.
  */
 #ifndef MATH_DATA_H
 #define MATH_DATA_H
 
-#include <vector>
-
-#include "MathAtom.h"
 #include "Dimension.h"
+#include "MathAtom.h"
+
+#include "support/strfwd.h"
 
-#include "support/docstream.h"
+#include <vector>
 
 
 namespace lyx {
 
 class BufferView;
+class Cursor;
+class DocIterator;
 class LaTeXFeatures;
 class ReplaceData;
+class MacroContext;
+class MathMacro;
 class MetricsInfo;
 class PainterInfo;
 class TextMetricsInfo;
@@ -151,6 +156,10 @@ public:
        ///
        void swap(MathData & ar) { base_type::swap(ar); }
 
+       /// attach/detach arguments to macros, updating the cur to 
+       /// stay visually at the same position (cur==0 is allowed)
+       void updateMacros(Cursor * cur, MacroContext const & mc);
+
 protected:
        /// cached values for super/subscript placement
        mutable int minasc_;
@@ -158,11 +167,26 @@ protected:
        mutable int slevel_;
        mutable int sshift_;
        mutable int kerning_;
-
+       
 private:
        /// is this an exact match at this position?
        bool find1(MathData const & ar, size_type pos) const;
 
+       ///
+       void detachMacroParameters(Cursor * cur, const size_type macroPos);
+       ///
+       void attachMacroParameters(Cursor * cur, const size_type macroPos, 
+               const size_type macroNumArgs, const int macroOptionals,
+               const bool fromInitToNormalMode, const bool interactiveInit);
+       ///
+       void collectOptionalParameters(Cursor * cur, 
+               const size_type numOptionalParams, std::vector<MathData> & params, 
+               size_t & pos, const pos_type macroPos, const int thisPos, const int thisSlice);
+       ///
+       void collectParameters(Cursor * cur, 
+               const size_type numParams, std::vector<MathData> & params, 
+               size_t & pos, MathAtom & scriptToPutAround,
+               const pos_type macroPos, const int thisPos, const int thisSlice);
        ///
        mutable std::vector<Dimension> atom_dims_;
 };