📄 libxml.c
字号:
(char *) "ignorableWhitespace", (char *) "s#", ch, len); else if (type == 2) result = PyObject_CallMethod(handler, (char *) "data", (char *) "s#", ch, len); Py_XDECREF(result); }}static voidpythonProcessingInstruction(void *user_data, const xmlChar * target, const xmlChar * data){ PyObject *handler; PyObject *result;#ifdef DEBUG_SAX printf("pythonProcessingInstruction(%s, %s) called\n", target, data);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "processingInstruction")) { result = PyObject_CallMethod(handler, (char *) "processingInstruction", (char *) "ss", target, data); Py_XDECREF(result); }}static voidpythonComment(void *user_data, const xmlChar * value){ PyObject *handler; PyObject *result;#ifdef DEBUG_SAX printf("pythonComment(%s) called\n", value);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "comment")) { result = PyObject_CallMethod(handler, (char *) "comment", (char *) "s", value); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonWarning(void *user_data, const char *msg, ...){ PyObject *handler; PyObject *result; va_list args; char buf[1024];#ifdef DEBUG_SAX printf("pythonWarning(%s) called\n", msg);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "warning")) { va_start(args, msg); vsnprintf(buf, 1023, msg, args); va_end(args); buf[1023] = 0; result = PyObject_CallMethod(handler, (char *) "warning", (char *) "s", buf); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonError(void *user_data, const char *msg, ...){ PyObject *handler; PyObject *result; va_list args; char buf[1024];#ifdef DEBUG_SAX printf("pythonError(%s) called\n", msg);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "error")) { va_start(args, msg); vsnprintf(buf, 1023, msg, args); va_end(args); buf[1023] = 0; result = PyObject_CallMethod(handler, (char *) "error", (char *) "s", buf); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonFatalError(void *user_data, const char *msg, ...){ PyObject *handler; PyObject *result; va_list args; char buf[1024];#ifdef DEBUG_SAX printf("pythonFatalError(%s) called\n", msg);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "fatalError")) { va_start(args, msg); vsnprintf(buf, 1023, msg, args); va_end(args); buf[1023] = 0; result = PyObject_CallMethod(handler, (char *) "fatalError", (char *) "s", buf); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonCdataBlock(void *user_data, const xmlChar * ch, int len){ PyObject *handler; PyObject *result = NULL; int type = 0;#ifdef DEBUG_SAX printf("pythonCdataBlock(%s, %d) called\n", ch, len);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "cdataBlock")) type = 1; else if (PyObject_HasAttrString(handler, (char *) "cdata")) type = 2; if (type != 0) { if (type == 1) result = PyObject_CallMethod(handler, (char *) "cdataBlock", (char *) "s#", ch, len); else if (type == 2) result = PyObject_CallMethod(handler, (char *) "cdata", (char *) "s#", ch, len); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonExternalSubset(void *user_data, const xmlChar * name, const xmlChar * externalID, const xmlChar * systemID){ PyObject *handler; PyObject *result;#ifdef DEBUG_SAX printf("pythonExternalSubset(%s, %s, %s) called\n", name, externalID, systemID);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "externalSubset")) { result = PyObject_CallMethod(handler, (char *) "externalSubset", (char *) "sss", name, externalID, systemID); Py_XDECREF(result); }}static voidpythonEntityDecl(void *user_data, const xmlChar * name, int type, const xmlChar * publicId, const xmlChar * systemId, xmlChar * content){ PyObject *handler; PyObject *result; handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "entityDecl")) { result = PyObject_CallMethod(handler, (char *) "entityDecl", (char *) "sisss", name, type, publicId, systemId, content); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonNotationDecl(void *user_data, const xmlChar * name, const xmlChar * publicId, const xmlChar * systemId){ PyObject *handler; PyObject *result; handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "notationDecl")) { result = PyObject_CallMethod(handler, (char *) "notationDecl", (char *) "sss", name, publicId, systemId); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonAttributeDecl(void *user_data, const xmlChar * elem, const xmlChar * name, int type, int def, const xmlChar * defaultValue, xmlEnumerationPtr tree){ PyObject *handler; PyObject *nameList; PyObject *newName; xmlEnumerationPtr node; PyObject *result; int count; handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "attributeDecl")) { count = 0; for (node = tree; node != NULL; node = node->next) { count++; } nameList = PyList_New(count); count = 0; for (node = tree; node != NULL; node = node->next) { newName = PyString_FromString((char *) node->name); PyList_SetItem(nameList, count, newName); Py_DECREF(newName); count++; } result = PyObject_CallMethod(handler, (char *) "attributeDecl", (char *) "ssiisO", elem, name, type, def, defaultValue, nameList); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(nameList); Py_XDECREF(result); }}static voidpythonElementDecl(void *user_data, const xmlChar * name, int type, ATTRIBUTE_UNUSED xmlElementContentPtr content){ PyObject *handler; PyObject *obj; PyObject *result; handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "elementDecl")) { /* TODO: wrap in an elementContent object */ printf ("pythonElementDecl: xmlElementContentPtr wrapper missing !\n"); obj = Py_None; /* Py_XINCREF(Py_None); isn't the reference just borrowed ??? */ result = PyObject_CallMethod(handler, (char *) "elementDecl", (char *) "siO", name, type, obj); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonUnparsedEntityDecl(void *user_data, const xmlChar * name, const xmlChar * publicId, const xmlChar * systemId, const xmlChar * notationName){ PyObject *handler; PyObject *result; handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "unparsedEntityDecl")) { result = PyObject_CallMethod(handler, (char *) "unparsedEntityDecl", (char *) "ssss", name, publicId, systemId, notationName); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static voidpythonInternalSubset(void *user_data, const xmlChar * name, const xmlChar * ExternalID, const xmlChar * SystemID){ PyObject *handler; PyObject *result;#ifdef DEBUG_SAX printf("pythonInternalSubset(%s, %s, %s) called\n", name, ExternalID, SystemID);#endif handler = (PyObject *) user_data; if (PyObject_HasAttrString(handler, (char *) "internalSubset")) { result = PyObject_CallMethod(handler, (char *) "internalSubset", (char *) "sss", name, ExternalID, SystemID); if (PyErr_Occurred()) PyErr_Print(); Py_XDECREF(result); }}static xmlSAXHandler pythonSaxHandler = { pythonInternalSubset, NULL, /* TODO pythonIsStandalone, */ NULL, /* TODO pythonHasInternalSubset, */ NULL, /* TODO pythonHasExternalSubset, */ NULL, /* TODO pythonResolveEntity, */ NULL, /* TODO pythonGetEntity, */ pythonEntityDecl, pythonNotationDecl, pythonAttributeDecl, pythonElementDecl, pythonUnparsedEntityDecl, NULL, /* OBSOLETED pythonSetDocumentLocator, */ pythonStartDocument, pythonEndDocument, pythonStartElement, pythonEndElement, pythonReference, pythonCharacters, pythonIgnorableWhitespace, pythonProcessingInstruction, pythonComment, pythonWarning, pythonError, pythonFatalError, NULL, /* TODO pythonGetParameterEntity, */ pythonCdataBlock, pythonExternalSubset, 1, NULL, /* TODO mograte to SAX2 */ NULL, NULL, NULL};/************************************************************************ * * * Handling of specific parser context * * * ************************************************************************/PyObject *libxml_xmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self, PyObject * args){ const char *chunk; int size; const char *URI; PyObject *pyobj_SAX = NULL; xmlSAXHandlerPtr SAX = NULL; xmlParserCtxtPtr ret; PyObject *pyret; if (!PyArg_ParseTuple (args, (char *) "Oziz:xmlCreatePushParser", &pyobj_SAX, &chunk, &size, &URI)) return (NULL);#ifdef DEBUG printf("libxml_xmlCreatePushParser(%p, %s, %d, %s) called\n", pyobj_SAX, chunk, size, URI);#endif if (pyobj_SAX != Py_None) { SAX = &pythonSaxHandler; Py_INCREF(pyobj_SAX); /* The reference is released in pythonEndDocument() */ } ret = xmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI); pyret = libxml_xmlParserCtxtPtrWrap(ret); return (pyret);}PyObject *libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self, PyObject * args){#ifdef LIBXML_HTML_ENABLED const char *chunk; int size; const char *URI; PyObject *pyobj_SAX = NULL; xmlSAXHandlerPtr SAX = NULL; xmlParserCtxtPtr ret; PyObject *pyret; if (!PyArg_ParseTuple (args, (char *) "Oziz:htmlCreatePushParser", &pyobj_SAX, &chunk, &size, &URI)) return (NULL);#ifdef DEBUG printf("libxml_htmlCreatePushParser(%p, %s, %d, %s) called\n", pyobj_SAX, chunk, size, URI);#endif if (pyobj_SAX != Py_None) { SAX = &pythonSaxHandler; Py_INCREF(pyobj_SAX); /* The reference is released in pythonEndDocument() */ } ret = htmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI, XML_CHAR_ENCODING_NONE); pyret = libxml_xmlParserCtxtPtrWrap(ret); return (pyret);#else Py_INCREF(Py_None); return (Py_None);#endif /* LIBXML_HTML_ENABLED */}PyObject *libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args){ int recover; const char *URI; PyObject *pyobj_SAX = NULL; xmlSAXHandlerPtr SAX = NULL; if (!PyArg_ParseTuple(args, (char *) "Osi:xmlSAXParseFile", &pyobj_SAX, &URI, &recover)) return (NULL);#ifdef DEBUG printf("libxml_xmlSAXParseFile(%p, %s, %d) called\n", pyobj_SAX, URI, recover);#endif if (pyobj_SAX == Py_None) { Py_INCREF(Py_None); return (Py_None); } SAX = &pythonSaxHandler; Py_INCREF(pyobj_SAX); /* The reference is released in pythonEndDocument() */ xmlSAXUserParseFile(SAX, pyobj_SAX, URI); Py_INCREF(Py_None);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -