Skip to content

Instantly share code, notes, and snippets.

@hoodoos
Created December 2, 2010 13:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hoodoos/725268 to your computer and use it in GitHub Desktop.
Save hoodoos/725268 to your computer and use it in GitHub Desktop.
supports cdata start/end for node-expat
diff --git a/node-expat.cc b/node-expat.cc
index fbd6b0a..d39dcbe 100644
--- a/node-expat.cc
+++ b/node-expat.cc
@@ -10,6 +10,7 @@ using namespace v8;
using namespace node;
static Persistent<String> sym_startElement, sym_endElement,
+ sym_startCdataElement, sym_endCdataElement,
sym_text, sym_processingInstruction,
sym_comment, sym_xmlDecl;
@@ -31,6 +32,8 @@ public:
sym_startElement = NODE_PSYMBOL("startElement");
sym_endElement = NODE_PSYMBOL("endElement");
+ sym_startCdataElement = NODE_PSYMBOL("startCdataElement");
+ sym_endCdataElement = NODE_PSYMBOL("endCdataElement");
sym_text = NODE_PSYMBOL("text");
sym_processingInstruction = NODE_PSYMBOL("processingInstruction");
sym_comment = NODE_PSYMBOL("comment");
@@ -66,6 +69,7 @@ protected:
XML_SetUserData(parser, this);
XML_SetElementHandler(parser, StartElement, EndElement);
XML_SetCharacterDataHandler(parser, Text);
+ XML_SetCdataSectionHandler(parser, StartCdataElement, EndCdataElement);
XML_SetProcessingInstructionHandler(parser, ProcessingInstruction);
XML_SetCommentHandler(parser, Comment);
XML_SetXmlDeclHandler(parser, XmlDecl);
@@ -227,6 +231,24 @@ private:
Handle<Value> argv[1] = { String::New(name) };
parser->Emit(sym_endElement, 1, argv);
}
+
+ static void StartCdataElement(void *userData)
+ {
+ Parser *parser = reinterpret_cast<Parser *>(userData);
+
+ /* Trigger event */
+ Handle<Value> argv[0] = {};
+ parser->Emit(sym_startCdataElement, 0, argv);
+ }
+
+ static void EndCdataElement(void *userData)
+ {
+ Parser *parser = reinterpret_cast<Parser *>(userData);
+
+ /* Trigger event */
+ Handle<Value> argv[0] = {};
+ parser->Emit(sym_endCdataElement, 0, argv);
+ }
static void Text(void *userData,
const XML_Char *s, int len)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment