8 #ifndef INCLUDED_ORCUS_SAX_PARSER_BASE_HPP
9 #define INCLUDED_ORCUS_SAX_PARSER_BASE_HPP
12 #include "pstring.hpp"
13 #include "cell_buffer.hpp"
14 #include "parser_global.hpp"
15 #include "parser_base.hpp"
23 #define ORCUS_DEBUG_SAX_PARSER 0
25 #if ORCUS_DEBUG_SAX_PARSER
31 namespace orcus {
namespace sax {
47 enum class keyword_type { dtd_public, dtd_private };
66 ORCUS_PSR_DLLPUBLIC
char decode_xml_encoded_char(
const char* p,
size_t n);
79 ORCUS_PSR_DLLPUBLIC std::string decode_xml_unicode_char(
const char* p,
size_t n);
89 const char* begin_pos;
111 std::unique_ptr<impl> mp_impl;
119 bool m_root_elem_open:1;
132 void nest_up() { ++m_nest_level; }
135 assert(m_nest_level > 0);
139 void inc_buffer_pos();
140 void reset_buffer_pos() { m_buffer_pos = 0; }
142 void has_char_throw(
const char* msg)
const
157 #if ORCUS_DEBUG_SAX_PARSER
158 if (mp_char >= mp_end)
161 return mp_end - mp_char;
164 char cur_char_checked()
const
175 #if ORCUS_DEBUG_SAX_PARSER
176 if (mp_char >= mp_end)
177 throw malformed_xml_error(
"xml stream ended prematurely.", offset());
182 char next_char_checked()
186 throw malformed_xml_error(
"xml stream ended prematurely.", offset());
191 cell_buffer& get_cell_buffer();
201 void expects_next(
const char* p,
size_t n);
203 void parse_encoded_char(cell_buffer& buf);
204 void value_with_encoded_char(cell_buffer& buf, pstring& str);
214 bool value(pstring& str,
bool decode);
216 void name(pstring& str);
217 void element_name(parser_element& elem,
const char* begin_pos);
218 void attribute_name(pstring& attr_ns, pstring& attr_name);
219 void characters_with_encoded_char(cell_buffer& buf);
Definition: pstring.hpp:24
Definition: sax_parser_base.hpp:100
Definition: parser_base.hpp:34
Definition: sax_parser_base.hpp:85
Definition: sax_parser_base.hpp:45
size_t remains() const
Definition: sax_parser_base.hpp:155
Definition: parser_base.hpp:20
Definition: sax_parser_base.hpp:108