@@ -25,7 +25,8 @@ static void rapidxml_DocumentObject_dealloc(rapidxml_DocumentObject* self) {
2525
2626static int _parse (rapidxml_DocumentObject* self,
2727 Py_buffer* text_buff,
28- bool from_file) {
28+ bool from_file,
29+ bool parse_cdata) {
2930 const char * text;
3031 std::vector<char > text_vector;
3132
@@ -43,9 +44,14 @@ static int _parse(rapidxml_DocumentObject* self,
4344 }
4445 try {
4546 self->base .base .document ->clear ();
46- (self->base .base .document
47- ->parse <rapidxml::parse_no_utf8 | rapidxml::parse_no_data_nodes>)
48- (self->base .base .document ->allocate_string (text));
47+ char * data = self->base .base .document ->allocate_string (text);
48+ if (!parse_cdata) {
49+ (self->base .base .document
50+ ->parse <rapidxml::parse_no_utf8 | rapidxml::parse_no_data_nodes>)(data);
51+ } else {
52+ (self->base .base .document
53+ ->parse <rapidxml::parse_declaration_node>)(data);
54+ }
4955 } catch (rapidxml::parse_error &e) {
5056 PyErr_SetString (rapidxml_RapidXmlError, e.what ());
5157 return 0 ;
@@ -58,17 +64,20 @@ static PyObject* rapidxml_DocumentObject_parse(rapidxml_DocumentObject* self,
5864 PyObject* kwds) {
5965 Py_buffer text_buff;
6066 PyObject* from_file_obj = NULL ;
67+ PyObject* read_cdata = NULL ;
6168 char kw_text[] = " text" ;
6269 char kw_from_file[] = " from_file" ;
70+ char kw_parse_cdata[] = " parse_cdata" ;
6371
64- static char * kwlist[] = {kw_text, kw_from_file, NULL };
65- if (!PyArg_ParseTupleAndKeywords (args, kwds, " s*|O " , kwlist,
66- &text_buff, &from_file_obj)) {
72+ static char * kwlist[] = {kw_text, kw_from_file, kw_parse_cdata, NULL };
73+ if (!PyArg_ParseTupleAndKeywords (args, kwds, " s*|OO " , kwlist,
74+ &text_buff, &from_file_obj, &read_cdata )) {
6775 return NULL ;
6876 }
6977
7078 if (!_parse (self, &text_buff,
71- (from_file_obj != NULL ) && PyObject_IsTrue (from_file_obj))) {
79+ (from_file_obj != NULL ) && PyObject_IsTrue (from_file_obj),
80+ (read_cdata != NULL ) && PyObject_IsTrue (read_cdata))) {
7281 return NULL ;
7382 }
7483 Py_INCREF (Py_None);
@@ -80,21 +89,26 @@ static int rapidxml_DocumentObject_init(rapidxml_DocumentObject* self,
8089 PyObject* kwds) {
8190 Py_buffer text_buff = {0 };
8291 PyObject* from_file_obj = NULL ;
92+ PyObject* read_cdata = NULL ;
8393 char kw_text[] = " text" ;
8494 char kw_from_file[] = " from_file" ;
95+ char kw_parse_cdata[] = " parse_cdata" ;
8596
8697 if (rapidxml_NodeType.tp_init (reinterpret_cast <PyObject*>(self), args, kwds) < 0 ) {
8798 return -1 ;
8899 }
89- static char * kwlist[] = {kw_text, kw_from_file, NULL };
90- if (!PyArg_ParseTupleAndKeywords (args, kwds, " |s*O " , kwlist,
91- &text_buff, &from_file_obj)) {
100+ static char * kwlist[] = {kw_text, kw_from_file, kw_parse_cdata, NULL };
101+ if (!PyArg_ParseTupleAndKeywords (args, kwds, " |s*OO " , kwlist,
102+ &text_buff, &from_file_obj, &read_cdata )) {
92103 return -1 ;
93104 }
94105 self->base .base .underlying_obj = new rapidxml::xml_document<>();
95106 self->base .base .document = static_cast <rapidxml::xml_document<>*>(self->base .base .underlying_obj );
96107 if (text_buff.buf ) {
97- return _parse (self, &text_buff, (from_file_obj != NULL ) && PyObject_IsTrue (from_file_obj)) - 1 ;
108+ return (_parse (self, &text_buff,
109+ (from_file_obj != NULL ) && PyObject_IsTrue (from_file_obj),
110+ (read_cdata != NULL ) && PyObject_IsTrue (read_cdata))
111+ - 1 );
98112 }
99113 return 0 ;
100114}
@@ -128,7 +142,7 @@ static PyObject* rapidxml_DocumentObject_allocate_node(rapidxml_DocumentObject*
128142 return _bind_result (reinterpret_cast <rapidxml_BaseObject*>(self),
129143 node, &rapidxml_NodeType);
130144}
131- # include < iostream >
145+
132146static PyObject* rapidxml_DocumentObject_allocate_attribute (rapidxml_DocumentObject* self,
133147 PyObject* args,
134148 PyObject* kwds) {
0 commit comments