summaryrefslogtreecommitdiff
path: root/ext/xml/compat.c
diff options
context:
space:
mode:
authorSterling Hughes <sterling@php.net>2003-05-17 22:09:58 +0000
committerSterling Hughes <sterling@php.net>2003-05-17 22:09:58 +0000
commit00e48b7f70a80a774665677c60a9ed7e97e6b5fb (patch)
treecd659ac5906d6218a2cbc29056c41e65c0e0f384 /ext/xml/compat.c
parent80c75c4d6261a68704baceb4c415564bb8945dda (diff)
downloadphp-git-00e48b7f70a80a774665677c60a9ed7e97e6b5fb.tar.gz
send comments to the default handler like done with expat, add a
setcommenthandler function, which exists in expat, but isn't used by the extension.
Diffstat (limited to 'ext/xml/compat.c')
-rw-r--r--ext/xml/compat.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/ext/xml/compat.c b/ext/xml/compat.c
index 3a63a69088..9b9b1c4127 100644
--- a/ext/xml/compat.c
+++ b/ext/xml/compat.c
@@ -183,6 +183,33 @@ _notation_decl_handler(void *user, const xmlChar *notation, const xmlChar *sys_i
}
static void
+_build_comment(const xmlChar *data, int data_len, xmlChar **comment, int *comment_len)
+{
+ *comment_len = data_len + 6;
+
+ *comment = emalloc(*comment_len + 1);
+ memcpy(*comment, "<--", 3);
+ memcpy(*comment + 3, data, data_len);
+ memcpy(*comment + 3 + data_len, "-->", 3);
+
+ (*comment)[*comment_len] = '\0';
+}
+
+static void
+_comment_handler(void *user, const xmlChar *comment)
+{
+ XML_Parser parser = (XML_Parser) user;
+
+ if (parser->h_default) {
+ xmlChar *d_comment;
+ int d_comment_len;
+
+ _build_comment(comment, xmlStrlen(comment), &d_comment, &d_comment_len);
+ parser->h_default(parser->user, d_comment, d_comment_len);
+ }
+}
+
+static void
_external_entity_ref_handler(void *user, const xmlChar *names, int type, const xmlChar *sys_id, const xmlChar *pub_id, xmlChar *content)
{
XML_Parser parser = (XML_Parser) user;
@@ -216,7 +243,7 @@ php_xml_compat_handlers = {
_cdata_handler,
NULL, /* ignorableWhitespace */
_pi_handler,
- NULL, /* comment */
+ _comment_handler, /* comment */
NULL, /* warning */
NULL, /* error */
NULL /* fatalError */
@@ -273,7 +300,6 @@ XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *m
parser->mem_hdlrs = *memsuite;
parser->parser = xmlCreatePushParserCtxt((xmlSAXHandlerPtr) &php_xml_compat_handlers, (void *) parser, NULL, 0, NULL);
if (parser->parser == NULL) {
- parser->mem_hdlrs.free_fcn(parser->parser);
return NULL;
}
if (encoding != NULL) {
@@ -320,6 +346,12 @@ XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstruction
parser->h_pi = pi;
}
+void
+XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler comment)
+{
+ parser->h_comment = comment;
+}
+
void
XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler d)
{