#include "symbol_def.h"
#include "support/lstrings.h"
#include "debug.h"
+#include "mathed/support.h"
using std::endl;
const int SizeInset = sizeof(char*) + 2;
-extern int mathed_char_width(short type, int style, byte c);
-extern int mathed_string_width(short type, int style, string const & s);
-extern int mathed_char_height(short, int, byte, int &, int &);
+//extern int mathed_char_width(short type, int style, byte c);
+//extern int mathed_string_width(short type, int style, string const & s);
+//extern int mathed_char_height(short, int, byte, int &, int &);
+
+
+MathedIter::MathedIter()
+ : flags(0), fcode(0), pos(0), row(0), col(0), ncols(0), array(0)
+{}
+
-
void MathedIter::SetData(MathedArray * a)
{
array = a; Reset();
/* -------------------------- MathMacroTable -----------------------*/
-MathMacroTable::MathMacroTable(int n) : max_macros(n)
-{
- macro_table = new MathMacroTemplateP[max_macros];
- num_macros = 0;
-}
-
-
-MathMacroTable::~MathMacroTable()
-{
- delete[] macro_table;
-}
-
-
// The search is currently linear but will be binary or hash, later.
MathMacroTemplate * MathMacroTable::getTemplate(string const & name) const
{
- for (int i = 0; i < num_macros; ++i) {
- if (name == macro_table[i]->GetName())
- return macro_table[i];
- }
-
- return 0;
+ for (size_type i = 0; i < macro_table.size(); ++i) {
+ if (name == macro_table[i]->GetName())
+ return macro_table[i];
+ }
+
+ return 0;
}
void MathMacroTable::addTemplate(MathMacroTemplate * m)
{
- if (num_macros < max_macros)
- macro_table[num_macros++] = m;
- else
- lyxerr << "Error (MathMacroTable::addTemplate): "
- "Macro table exhausted!" << endl;
+ macro_table.push_back(m);
}
}
-MathMacroTable MathMacroTable::mathMTable(255);
+MathMacroTable MathMacroTable::mathMTable;
bool MathMacroTable::built = false;
struct MathedRowSt;
/**
- A graphic iterator (updates position.) Used for
- metrics and updating cursor position
- */
+ A graphic iterator (updates position.) Used for
+ metrics and updating cursor position
+*/
class MathedXIter: public MathedIter {
- public:
- ///
- MathedXIter();
- //
- MathedXIter(MathParInset *);
- ///
- void SetData(MathParInset *);
- ///
- MathParInset * getPar() const { return p; }
- ///
- bool Next();
- ///
- bool Prev();
- ///
- bool Up();
- ///
- bool Down();
- ///
- bool goNextColumn();
- ///
- void GoLast();
- ///
- void GoBegin();
- ///
- void Adjust();
- ///
- inline
- void GetPos(int &, int &) const;
- ///
- inline
- void GetIncPos(int &, int &) const;
- ///
- string const GetString() const;
- ///
- int GetX() const;
- ///
- int GetY() const;
- ///
- void subMetrics(int, int);
- ///
- void fitCoord(int, int);
- ///
- void getAD(int & a, int & d) const;
-
- /// Create a new row and insert #ncols# tabs.
- void addRow();
- ///
- void delRow();
-
- ///
- bool setLabel(string const & label);
- ///
- static string error_label;
- ///
- string const & getLabel() const;
- ///
- bool setNumbered(bool);
+public:
+ ///
+ MathedXIter();
+ //
+ MathedXIter(MathParInset *);
+ ///
+ void SetData(MathParInset *);
+ ///
+ MathParInset * getPar() const;
+ ///
+ bool Next();
+ ///
+ bool Prev();
+ ///
+ bool Up();
+ ///
+ bool Down();
+ ///
+ bool goNextColumn();
+ ///
+ void GoLast();
+ ///
+ void GoBegin();
+ ///
+ void Adjust();
+ ///
+ void GetPos(int &, int &) const;
+ ///
+ void GetIncPos(int &, int &) const;
+ ///
+ string const GetString() const;
+ ///
+ int GetX() const;
+ ///
+ int GetY() const;
+ ///
+ void subMetrics(int, int);
+ ///
+ void fitCoord(int, int);
+ ///
+ void getAD(int & a, int & d) const;
- ///
- void setTab(int, int);
- /// Merge the array at current position
- void Merge(MathedArray *);
- /// Delete every object from current position to pos2
- void Clean(int pos2);
- ///
- MathedRowSt * adjustVerticalSt();
-
+ /// Create a new row and insert #ncols# tabs.
+ void addRow();
+ ///
+ void delRow();
+
+ ///
+ bool setLabel(string const & label);
+ ///
+ static string error_label;
+ ///
+ string const & getLabel() const;
+ ///
+ bool setNumbered(bool);
+
+ ///
+ void setTab(int, int);
+ /// Merge the array at current position
+ void Merge(MathedArray *);
+ /// Delete every object from current position to pos2
+ void Clean(int pos2);
+ ///
+ MathedRowSt * adjustVerticalSt();
private:
- /// This function is not recursive, as MathPar::Metrics is
- void IMetrics(int, int &, int &, int &);
- /// Font size (display, text, script, script2)
- int size;
- /// current position
- mutable int x;
- ///
- int y;
- ///
- MathParInset * p;
-
- // Limits auxiliary variables
- /// Position and max width of a script
- int sx, sw;
- /// true= center, false= left align (default)
- bool limits;
- /// Type of previous script
- short s_type;
- ///
- void ipush();
- ///
- void ipop();
-
+ /// This function is not recursive, as MathPar::Metrics is
+ void IMetrics(int, int &, int &, int &);
+ /// Font size (display, text, script, script2)
+ int size;
+ /// current position
+ mutable int x;
+ ///
+ int y;
+ ///
+ MathParInset * p;
+
+ // Limits auxiliary variables
+ /// Position and max width of a script
+ int sx;
+ ///
+ int sw;
+ /// true= center, false= left align (default)
+ bool limits;
+ /// Type of previous script
+ short s_type;
+ ///
+ void ipush();
+ ///
+ void ipop();
protected:
- ///
- MathedRowSt * crow;
-
+ ///
+ MathedRowSt * crow;
+
private:
- ///
- friend class MathedCursor;
+ ///
+ friend class MathedCursor;
};
#endif