// Copyright 2009, Squish Tech, LLC. #ifndef SRC_XML_SAX_PARSER_H_ #define SRC_XML_SAX_PARSER_H_ #include namespace libxmljs { class XmlSaxParser : public Nan::ObjectWrap { public: XmlSaxParser(); virtual ~XmlSaxParser(); static void Initialize(v8::Local target); static NAN_METHOD(NewParser); static NAN_METHOD(NewPushParser); static NAN_METHOD(ParseString); static NAN_METHOD(Push); void Callback(const char* what, int argc = 0, v8::Local argv[] = NULL); void parse_string(const char* str, unsigned int size); void initialize_push_parser(); void push(const char* str, unsigned int size, bool terminate); /// callbacks static void start_document(void* context); static void end_document(void* context); static void start_element(void* context, const xmlChar* name, const xmlChar** p); static void end_element(void* context, const xmlChar* name); static void start_element_ns(void* context, const xmlChar* localname, const xmlChar* prefix, const xmlChar* uri, int nb_namespaces, const xmlChar** namespaces, int nb_attributes, int nb_defaulted, const xmlChar** attributes); static void end_element_ns(void* context, const xmlChar* localname, const xmlChar* prefix, const xmlChar* uri); static void characters(void* context, const xmlChar* ch, int len); static void comment(void* context, const xmlChar* value); static void cdata_block(void* context, const xmlChar* value, int len); static void warning(void* context, const char* msg, ...); static void error(void* context, const char* msg, ...); protected: void initializeContext(); void releaseContext(); xmlParserCtxt* context_; xmlSAXHandler sax_handler_; }; } // namespace libxmljs #endif // SRC_XML_SAX_PARSER_H_