From 608d5bbd79b120602a3a5272fa73ca3d5916aeb1 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 29 Aug 2010 15:08:33 +0000 Subject: XPath: Added error offset reporting git-svn-id: http://pugixml.googlecode.com/svn/trunk@639 99668b35-9821-0410-8761-19e4c4f06640 --- src/pugixpath.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp index 0478f39..c4134ed 100644 --- a/src/pugixpath.cpp +++ b/src/pugixpath.cpp @@ -965,6 +965,7 @@ namespace pugi private: const char_t* m_cur; + const char_t* m_cur_lexeme_pos; xpath_lexer_string m_cur_lexeme_contents; lexeme_t m_cur_lexeme; @@ -986,6 +987,9 @@ namespace pugi while (IS_CHARTYPEX(*cur, ctx_space)) ++cur; + // save lexeme position for error reporting + m_cur_lexeme_pos = cur; + switch (*cur) { case 0: @@ -1230,6 +1234,11 @@ namespace pugi return m_cur_lexeme; } + const char_t* current_pos() const + { + return m_cur_lexeme_pos; + } + const xpath_lexer_string& contents() const { assert(m_cur_lexeme == lex_number || m_cur_lexeme == lex_string || m_cur_lexeme == lex_quoted_string); @@ -2568,6 +2577,7 @@ namespace pugi { xpath_allocator& m_alloc; xpath_lexer m_lexer; + const char_t* m_query; xpath_parse_result* m_result; jmp_buf m_error_handler; @@ -2577,7 +2587,7 @@ namespace pugi void throw_error(const char* message) { m_result->error = message; - m_result->offset = 0; // $$$ lexer + m_result->offset = m_lexer.current_pos() - m_query; longjmp(m_error_handler, 1); } @@ -3332,7 +3342,7 @@ namespace pugi return parse_or_expression(); } - xpath_parser(const char_t* query, xpath_allocator& alloc, xpath_parse_result* result): m_alloc(alloc), m_lexer(query), m_result(result) + xpath_parser(const char_t* query, xpath_allocator& alloc, xpath_parse_result* result): m_alloc(alloc), m_lexer(query), m_query(query), m_result(result) { } -- cgit v1.2.3