summaryrefslogtreecommitdiffstats
path: root/src/util/expression-evaluator.h
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-04-13 22:04:49 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-04-13 22:04:49 +0000
commitfe875852760883dd20b6a57b57be50de83e37fc2 (patch)
tree60832d184f5899591b918ff551bb561aca6846a1 /src/util/expression-evaluator.h
parentBreton translation update (diff)
downloadinkscape-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.h80
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__ */