summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2008-12-02 21:35:21 (UTC)
committer Michael Krelin <hacker@klever.net>2008-12-02 21:35:21 (UTC)
commit47bf5ab634dc5cc3bd5d71894b2d6681f7a83024 (patch) (unidiff)
treebe3715dc65030eafd816ee3b50a192daf39df444
parenta07665e030a8f26f6cd77efc466507ed6381acc5 (diff)
downloadlibopkele-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>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/expat.h3
-rw-r--r--lib/expat.cc9
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
7namespace opkele { 7namespace 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}