author | Michael Krelin <hacker@klever.net> | 2008-12-02 21:35:21 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-12-02 21:35:21 (UTC) |
commit | 47bf5ab634dc5cc3bd5d71894b2d6681f7a83024 (patch) (unidiff) | |
tree | be3715dc65030eafd816ee3b50a192daf39df444 | |
parent | a07665e030a8f26f6cd77efc466507ed6381acc5 (diff) | |
download | libopkele-47bf5ab634dc5cc3bd5d71894b2d6681f7a83024.zip libopkele-47bf5ab634dc5cc3bd5d71894b2d6681f7a83024.tar.gz libopkele-47bf5ab634dc5cc3bd5d71894b2d6681f7a83024.tar.bz2 |
support for unknown encoding in expat wrapper
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | include/opkele/expat.h | 3 | ||||
-rw-r--r-- | lib/expat.cc | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/opkele/expat.h b/include/opkele/expat.h index 3ab1630..21be003 100644 --- a/include/opkele/expat.h +++ b/include/opkele/expat.h | |||
@@ -1,91 +1,94 @@ | |||
1 | #ifndef __OPKELE_EXPAT_H | 1 | #ifndef __OPKELE_EXPAT_H |
2 | #define __OPKELE_EXPAT_H | 2 | #define __OPKELE_EXPAT_H |
3 | 3 | ||
4 | #include <cassert> | 4 | #include <cassert> |
5 | #include <expat.h> | 5 | #include <expat.h> |
6 | 6 | ||
7 | namespace opkele { | 7 | namespace opkele { |
8 | 8 | ||
9 | namespace util { | 9 | namespace util { |
10 | 10 | ||
11 | class expat_t { | 11 | class expat_t { |
12 | public: | 12 | public: |
13 | XML_Parser _x; | 13 | XML_Parser _x; |
14 | 14 | ||
15 | expat_t() : _x(0) { } | 15 | expat_t() : _x(0) { } |
16 | expat_t(XML_Parser x) : _x(x) { } | 16 | expat_t(XML_Parser x) : _x(x) { } |
17 | virtual ~expat_t() throw(); | 17 | virtual ~expat_t() throw(); |
18 | 18 | ||
19 | expat_t& operator=(XML_Parser x); | 19 | expat_t& operator=(XML_Parser x); |
20 | 20 | ||
21 | operator const XML_Parser(void) const { return _x; } | 21 | operator const XML_Parser(void) const { return _x; } |
22 | operator XML_Parser(void) { return _x; } | 22 | operator XML_Parser(void) { return _x; } |
23 | 23 | ||
24 | inline bool parse(const char *s,int len,bool final=false) { | 24 | inline bool parse(const char *s,int len,bool final=false) { |
25 | assert(_x); | 25 | assert(_x); |
26 | return XML_Parse(_x,s,len,final); | 26 | return XML_Parse(_x,s,len,final); |
27 | } | 27 | } |
28 | 28 | ||
29 | virtual int unknown_encoding(const XML_Char * /* n */,XML_Encoding * /* i */) { return XML_STATUS_ERROR; } | ||
30 | void set_unknown_encoding_handler(); | ||
31 | |||
29 | virtual void start_element(const XML_Char * /* n */,const XML_Char ** /* a */) { } | 32 | virtual void start_element(const XML_Char * /* n */,const XML_Char ** /* a */) { } |
30 | virtual void end_element(const XML_Char * /* n */) { } | 33 | virtual void end_element(const XML_Char * /* n */) { } |
31 | void set_element_handler(); | 34 | void set_element_handler(); |
32 | 35 | ||
33 | virtual void character_data(const XML_Char * /* s */,int /* l */) { } | 36 | virtual void character_data(const XML_Char * /* s */,int /* l */) { } |
34 | void set_character_data_handler(); | 37 | void set_character_data_handler(); |
35 | 38 | ||
36 | virtual void processing_instruction(const XML_Char * /* t */,const XML_Char * /* d */) { } | 39 | virtual void processing_instruction(const XML_Char * /* t */,const XML_Char * /* d */) { } |
37 | void set_processing_instruction_handler(); | 40 | void set_processing_instruction_handler(); |
38 | 41 | ||
39 | virtual void comment(const XML_Char * /* d */) { } | 42 | virtual void comment(const XML_Char * /* d */) { } |
40 | void set_comment_handler(); | 43 | void set_comment_handler(); |
41 | 44 | ||
42 | virtual void start_cdata_section() { } | 45 | virtual void start_cdata_section() { } |
43 | virtual void end_cdata_section() { } | 46 | virtual void end_cdata_section() { } |
44 | void set_cdata_section_handler(); | 47 | void set_cdata_section_handler(); |
45 | 48 | ||
46 | virtual void default_handler(const XML_Char * /* s */,int /* l */) { } | 49 | virtual void default_handler(const XML_Char * /* s */,int /* l */) { } |
47 | void set_default_handler(); | 50 | void set_default_handler(); |
48 | void set_default_handler_expand(); | 51 | void set_default_handler_expand(); |
49 | 52 | ||
50 | virtual void start_namespace_decl(const XML_Char * /* p */,const XML_Char * /* u */) { } | 53 | virtual void start_namespace_decl(const XML_Char * /* p */,const XML_Char * /* u */) { } |
51 | virtual void end_namespace_decl(const XML_Char * /* p */) { } | 54 | virtual void end_namespace_decl(const XML_Char * /* p */) { } |
52 | void set_namespace_decl_handler(); | 55 | void set_namespace_decl_handler(); |
53 | 56 | ||
54 | inline enum XML_Error get_error_code() { | 57 | inline enum XML_Error get_error_code() { |
55 | assert(_x); return XML_GetErrorCode(_x); } | 58 | assert(_x); return XML_GetErrorCode(_x); } |
56 | static inline const XML_LChar *error_string(XML_Error c) { | 59 | static inline const XML_LChar *error_string(XML_Error c) { |
57 | return XML_ErrorString(c); } | 60 | return XML_ErrorString(c); } |
58 | 61 | ||
59 | inline long get_current_byte_index() { | 62 | inline long get_current_byte_index() { |
60 | assert(_x); return XML_GetCurrentByteIndex(_x); } | 63 | assert(_x); return XML_GetCurrentByteIndex(_x); } |
61 | inline int get_current_line_number() { | 64 | inline int get_current_line_number() { |
62 | assert(_x); return XML_GetCurrentLineNumber(_x); } | 65 | assert(_x); return XML_GetCurrentLineNumber(_x); } |
63 | inline int get_current_column_number() { | 66 | inline int get_current_column_number() { |
64 | assert(_x); return XML_GetCurrentColumnNumber(_x); } | 67 | assert(_x); return XML_GetCurrentColumnNumber(_x); } |
65 | 68 | ||
66 | inline void set_user_data() { | 69 | inline void set_user_data() { |
67 | assert(_x); XML_SetUserData(_x,this); } | 70 | assert(_x); XML_SetUserData(_x,this); } |
68 | 71 | ||
69 | inline bool set_base(const XML_Char *b) { | 72 | inline bool set_base(const XML_Char *b) { |
70 | assert(_x); return XML_SetBase(_x,b); } | 73 | assert(_x); return XML_SetBase(_x,b); } |
71 | inline const XML_Char *get_base() { | 74 | inline const XML_Char *get_base() { |
72 | assert(_x); return XML_GetBase(_x); } | 75 | assert(_x); return XML_GetBase(_x); } |
73 | 76 | ||
74 | inline int get_specified_attribute_count() { | 77 | inline int get_specified_attribute_count() { |
75 | assert(_x); return XML_GetSpecifiedAttributeCount(_x); } | 78 | assert(_x); return XML_GetSpecifiedAttributeCount(_x); } |
76 | 79 | ||
77 | inline bool set_param_entity_parsing(enum XML_ParamEntityParsing c) { | 80 | inline bool set_param_entity_parsing(enum XML_ParamEntityParsing c) { |
78 | assert(_x); return XML_SetParamEntityParsing(_x,c); } | 81 | assert(_x); return XML_SetParamEntityParsing(_x,c); } |
79 | 82 | ||
80 | inline static XML_Parser parser_create(const XML_Char *e=0) { | 83 | inline static XML_Parser parser_create(const XML_Char *e=0) { |
81 | return XML_ParserCreate(e); } | 84 | return XML_ParserCreate(e); } |
82 | inline static XML_Parser parser_create_ns(const XML_Char *e=0,XML_Char s='\t') { | 85 | inline static XML_Parser parser_create_ns(const XML_Char *e=0,XML_Char s='\t') { |
83 | return XML_ParserCreateNS(e,s); } | 86 | return XML_ParserCreateNS(e,s); } |
84 | 87 | ||
85 | }; | 88 | }; |
86 | 89 | ||
87 | } | 90 | } |
88 | 91 | ||
89 | } | 92 | } |
90 | 93 | ||
91 | #endif /* __OPKELE_EXPAT_H */ | 94 | #endif /* __OPKELE_EXPAT_H */ |
diff --git a/lib/expat.cc b/lib/expat.cc index c4dab7e..fb58a9a 100644 --- a/lib/expat.cc +++ b/lib/expat.cc | |||
@@ -31,67 +31,76 @@ namespace opkele { | |||
31 | static void _character_data(void *ud,const XML_Char *s,int l) { | 31 | static void _character_data(void *ud,const XML_Char *s,int l) { |
32 | ((expat_t*)ud)->character_data(s,l); | 32 | ((expat_t*)ud)->character_data(s,l); |
33 | } | 33 | } |
34 | 34 | ||
35 | void expat_t::set_character_data_handler() { | 35 | void expat_t::set_character_data_handler() { |
36 | assert(_x); | 36 | assert(_x); |
37 | XML_SetCharacterDataHandler(_x,_character_data); | 37 | XML_SetCharacterDataHandler(_x,_character_data); |
38 | } | 38 | } |
39 | 39 | ||
40 | static void _processing_instruction(void *ud,const XML_Char *t,const XML_Char *d) { | 40 | static void _processing_instruction(void *ud,const XML_Char *t,const XML_Char *d) { |
41 | ((expat_t*)ud)->processing_instruction(t,d); | 41 | ((expat_t*)ud)->processing_instruction(t,d); |
42 | } | 42 | } |
43 | 43 | ||
44 | void expat_t::set_processing_instruction_handler() { | 44 | void expat_t::set_processing_instruction_handler() { |
45 | assert(_x); | 45 | assert(_x); |
46 | XML_SetProcessingInstructionHandler(_x,_processing_instruction); | 46 | XML_SetProcessingInstructionHandler(_x,_processing_instruction); |
47 | } | 47 | } |
48 | 48 | ||
49 | static void _comment(void *ud,const XML_Char *d) { | 49 | static void _comment(void *ud,const XML_Char *d) { |
50 | ((expat_t*)ud)->comment(d); | 50 | ((expat_t*)ud)->comment(d); |
51 | } | 51 | } |
52 | 52 | ||
53 | void expat_t::set_comment_handler() { | 53 | void expat_t::set_comment_handler() { |
54 | assert(_x); | 54 | assert(_x); |
55 | XML_SetCommentHandler(_x,_comment); | 55 | XML_SetCommentHandler(_x,_comment); |
56 | } | 56 | } |
57 | 57 | ||
58 | static void _start_cdata_section(void *ud) { | 58 | static void _start_cdata_section(void *ud) { |
59 | ((expat_t*)ud)->start_cdata_section(); | 59 | ((expat_t*)ud)->start_cdata_section(); |
60 | } | 60 | } |
61 | static void _end_cdata_section(void *ud) { | 61 | static void _end_cdata_section(void *ud) { |
62 | ((expat_t*)ud)->end_cdata_section(); | 62 | ((expat_t*)ud)->end_cdata_section(); |
63 | } | 63 | } |
64 | 64 | ||
65 | void expat_t::set_cdata_section_handler() { | 65 | void expat_t::set_cdata_section_handler() { |
66 | assert(_x); | 66 | assert(_x); |
67 | XML_SetCdataSectionHandler(_x,_start_cdata_section,_end_cdata_section); | 67 | XML_SetCdataSectionHandler(_x,_start_cdata_section,_end_cdata_section); |
68 | } | 68 | } |
69 | 69 | ||
70 | static void _default_handler(void *ud,const XML_Char *s,int l) { | 70 | static void _default_handler(void *ud,const XML_Char *s,int l) { |
71 | ((expat_t*)ud)->default_handler(s,l); | 71 | ((expat_t*)ud)->default_handler(s,l); |
72 | } | 72 | } |
73 | 73 | ||
74 | void expat_t::set_default_handler() { | 74 | void expat_t::set_default_handler() { |
75 | assert(_x); | 75 | assert(_x); |
76 | XML_SetDefaultHandler(_x,_default_handler); | 76 | XML_SetDefaultHandler(_x,_default_handler); |
77 | } | 77 | } |
78 | void expat_t::set_default_handler_expand() { | 78 | void expat_t::set_default_handler_expand() { |
79 | assert(_x); | 79 | assert(_x); |
80 | XML_SetDefaultHandlerExpand(_x,_default_handler); | 80 | XML_SetDefaultHandlerExpand(_x,_default_handler); |
81 | } | 81 | } |
82 | 82 | ||
83 | static void _start_namespace_decl(void *ud,const XML_Char *p,const XML_Char *u) { | 83 | static void _start_namespace_decl(void *ud,const XML_Char *p,const XML_Char *u) { |
84 | ((expat_t*)ud)->start_namespace_decl(p,u); | 84 | ((expat_t*)ud)->start_namespace_decl(p,u); |
85 | } | 85 | } |
86 | static void _end_namespace_decl(void *ud,const XML_Char *p) { | 86 | static void _end_namespace_decl(void *ud,const XML_Char *p) { |
87 | ((expat_t*)ud)->end_namespace_decl(p); | 87 | ((expat_t*)ud)->end_namespace_decl(p); |
88 | } | 88 | } |
89 | 89 | ||
90 | void expat_t::set_namespace_decl_handler() { | 90 | void expat_t::set_namespace_decl_handler() { |
91 | assert(_x); | 91 | assert(_x); |
92 | XML_SetNamespaceDeclHandler(_x,_start_namespace_decl,_end_namespace_decl); | 92 | XML_SetNamespaceDeclHandler(_x,_start_namespace_decl,_end_namespace_decl); |
93 | } | 93 | } |
94 | 94 | ||
95 | static int _unknown_encoding(void *ehd,const XML_Char *n,XML_Encoding *i) { | ||
96 | return ((expat_t*)ehd)->unknown_encoding(n,i); | ||
97 | } | ||
98 | |||
99 | void expat_t::set_unknown_encoding_handler() { | ||
100 | assert(_x); | ||
101 | XML_SetUnknownEncodingHandler(_x,_unknown_encoding,this); | ||
102 | } | ||
103 | |||
95 | } | 104 | } |
96 | 105 | ||
97 | } | 106 | } |