diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-04-13 22:04:49 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-04-13 22:04:49 +0000 |
| commit | fe875852760883dd20b6a57b57be50de83e37fc2 (patch) | |
| tree | 60832d184f5899591b918ff551bb561aca6846a1 /src/util/expression-evaluator.h | |
| parent | Breton translation update (diff) | |
| download | inkscape-fe875852760883dd20b6a57b57be50de83e37fc2.tar.gz inkscape-fe875852760883dd20b6a57b57be50de83e37fc2.zip | |
add expression evaluator for spinbox input boxes. also knows a little about units.
needs more work to fully integrate it in all of inkscape spinboxes
also needs documentation rework
(bzr r10162)
Diffstat (limited to 'src/util/expression-evaluator.h')
| -rw-r--r-- | src/util/expression-evaluator.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/util/expression-evaluator.h b/src/util/expression-evaluator.h new file mode 100644 index 000000000..90789a25f --- /dev/null +++ b/src/util/expression-evaluator.h @@ -0,0 +1,80 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball + * + * Original file from libgimpwidgets: gimpeevl.h + * Copyright (C) 2008-2009 Fredrik Alstromer <roe@excu.se> + * Copyright (C) 2008-2009 Martin Nordholts <martinn@svn.gnome.org> + * Modified for Inkscape by Johan Engelen + * Copyright (C) 2011 Johan Engelen + * + * This library is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#ifndef __GIMP_EEVL_H__ +#define __GIMP_EEVL_H__ + +#include "util/units.h" + +#include <exception> +#include <sstream> +#include <string> + +namespace Inkscape { +namespace Util { + +class Unit; + +/** +* GimpEevlQuantity: +* @value: In reference units. +* @dimension: in has a dimension of 1, in^2 has a dimension of 2 etc +*/ +typedef struct +{ + double value; + gint dimension; +} GimpEevlQuantity; + +typedef bool (* GimpEevlUnitResolverProc) (const gchar *identifier, + GimpEevlQuantity *result, + Unit* unit); + +GimpEevlQuantity gimp_eevl_evaluate (const gchar* string, Unit* unit = NULL); + +/** + * Special exception class for the expression evaluator. + */ +class EvaluatorException : public std::exception { +public: + EvaluatorException(const char * message, const char *at_position) { + std::ostringstream os; + const char* token = at_position ? at_position : "<End of input>"; + os << "Expression evaluator error: " << message << " at '" << token << "'"; + msgstr = os.str(); + } + + virtual ~EvaluatorException() throw() {} // necessary to destroy the string object!!! + + virtual const char* what() const throw () { + return msgstr.c_str(); + } +protected: + std::string msgstr; +}; + +} +} + +#endif /* __GIMP_EEVL_H__ */ |
