// -*- C++ -*-
-#ifndef MATHMACROTABLE
-#define MATHMACROTABLE
+/**
+ * \file math_macrotable.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+#ifndef MATH_MACROTABLE_H
+#define MATH_MACROTABLE_H
+
+#include <map>
+#include <string>
#include <vector>
-#include "LString.h"
-class MathMacroTemplate;
-class MathMacro;
+class MathArray;
+
///
-class MathMacroTable {
+class MacroData {
public:
- ///
- void addTemplate(MathMacroTemplate *);
- ///
- MathMacro * getMacro(string const &) const;
- ///
- MathMacroTemplate * getTemplate(string const &) const;
- ///
- void builtinMacros();
- ///
- static MathMacroTable mathMTable;
- ///
- static bool built;
+ ///
+ MacroData();
+ ///
+ MacroData(std::string const & def, int nargs, std::string const & disp);
+ ///
+ std::string def() const { return def_; }
+ ///
+ std::string disp() const { return disp_; }
+ ///
+ int numargs() const { return numargs_; }
+ /// replace #1,#2,... by given MathAtom 0,1,..
+ void expand(std::vector<MathArray> const & from, MathArray & to) const;
+
private:
- ///
- typedef std::vector<MathMacroTemplate *> table_type;
- ///
- typedef table_type::size_type size_type;
- ///
- table_type macro_table;
+ ///
+ std::string def_;
+ ///
+ int numargs_;
+ ///
+ std::string disp_;
+};
+
+
+// This contains a table of "global" macros that are always accessible,
+// either because they implement a feature of standard LaTeX or some
+// hack to display certain contents nicely.
+
+class MacroTable : public std::map<std::string, MacroData>
+{
+public:
+ /// Parse full "\def..." or "\newcommand..." or ...
+ void insert(std::string const & definition);
+ /// Insert pre-digested macro definition
+ void insert(std::string const & name, MacroData const & data);
+ /// Do we have a macro by that name?
+ bool has(std::string const & name) const;
+ ///
+ MacroData const & get(std::string const & name) const;
+ ///
+ void dump();
+
+ /// the global list
+ static MacroTable & globalMacros();
+ /// the local list hack
+ //static MacroTable & localMacros();
};
+
#endif