3 * \file MathMacroTable.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
12 #ifndef MATH_MACROTABLE_H
13 #define MATH_MACROTABLE_H
18 #include "support/docstring.h"
20 #include <boost/assert.hpp>
32 MacroData(docstring const & def, int nargs, docstring const & disp, std::string const &);
34 docstring def() const { return def_; }
36 docstring disp() const { return disp_; }
38 int numargs() const { return numargs_; }
39 /// replace #1,#2,... by given MathAtom 0,1,..
40 void expand(std::vector<MathArray> const & from, MathArray & to) const;
42 std::string requires() const { return requires_; }
44 std::string & requires() { return requires_; }
47 int lock() { return ++lockCount_; }
49 bool locked() const { return lockCount_!=0; }
51 void unlock() { --lockCount_; BOOST_ASSERT(lockCount_>=0); }
61 std::string requires_;
67 // This contains a table of "global" macros that are always accessible,
68 // either because they implement a feature of standard LaTeX or some
69 // hack to display certain contents nicely.
71 class MacroTable : public std::map<docstring, MacroData>
74 /// Parse full "\\def..." or "\\newcommand..." or ...
75 void insert(docstring const & definition, std::string const &);
76 /// Insert pre-digested macro definition
77 void insert(docstring const & name, MacroData const & data);
78 /// Do we have a macro by that name?
79 bool has(docstring const & name) const;
81 MacroData const & get(docstring const & name) const;
86 static MacroTable & globalMacros();
87 /// the local list hack
88 //static MacroTable & localMacros();