summaryrefslogtreecommitdiff
path: root/lib/querypath/src/QueryPath/ParseException.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/querypath/src/QueryPath/ParseException.php')
-rw-r--r--lib/querypath/src/QueryPath/ParseException.php44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/querypath/src/QueryPath/ParseException.php b/lib/querypath/src/QueryPath/ParseException.php
new file mode 100644
index 0000000..7da7beb
--- /dev/null
+++ b/lib/querypath/src/QueryPath/ParseException.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @file
+ * Query path parsing exception.
+ */
+
+namespace QueryPath;
+
+/**
+ * Exception indicating that a parser has failed to parse a file.
+ *
+ * This will report parser warnings as well as parser errors. It should only be
+ * thrown, though, under error conditions.
+ *
+ * @ingroup querypath_core
+ */
+class ParseException extends \QueryPath\Exception {
+ const ERR_MSG_FORMAT = 'Parse error in %s on line %d column %d: %s (%d)';
+ const WARN_MSG_FORMAT = 'Parser warning in %s on line %d column %d: %s (%d)';
+ // trigger_error
+ public function __construct($msg = '', $code = 0, $file = NULL, $line = NULL) {
+
+ $msgs = array();
+ foreach(libxml_get_errors() as $err) {
+ $format = $err->level == LIBXML_ERR_WARNING ? self::WARN_MSG_FORMAT : self::ERR_MSG_FORMAT;
+ $msgs[] = sprintf($format, $err->file, $err->line, $err->column, $err->message, $err->code);
+ }
+ $msg .= implode("\n", $msgs);
+
+ if (isset($file)) {
+ $msg .= ' (' . $file;
+ if (isset($line)) $msg .= ': ' . $line;
+ $msg .= ')';
+ }
+
+ parent::__construct($msg, $code);
+ }
+
+ public static function initializeFromError($code, $str, $file, $line, $cxt) {
+ //printf("\n\nCODE: %s %s\n\n", $code, $str);
+ $class = __CLASS__;
+ throw new $class($str, $code, $file, $line);
+ }
+}