Annotation of embedaddon/libxml2/python/types.c, revision 1.1.1.1
1.1 misho 1: /*
2: * types.c: converter functions between the internal representation
3: * and the Python objects
4: *
5: * See Copyright for the status of this software.
6: *
7: * daniel@veillard.com
8: */
9: #include "libxml_wrap.h"
10: #include <libxml/xpathInternals.h>
11:
12: PyObject *
13: libxml_intWrap(int val)
14: {
15: PyObject *ret;
16:
17: #ifdef DEBUG
18: printf("libxml_intWrap: val = %d\n", val);
19: #endif
20: ret = PyInt_FromLong((long) val);
21: return (ret);
22: }
23:
24: PyObject *
25: libxml_longWrap(long val)
26: {
27: PyObject *ret;
28:
29: #ifdef DEBUG
30: printf("libxml_longWrap: val = %ld\n", val);
31: #endif
32: ret = PyInt_FromLong(val);
33: return (ret);
34: }
35:
36: PyObject *
37: libxml_doubleWrap(double val)
38: {
39: PyObject *ret;
40:
41: #ifdef DEBUG
42: printf("libxml_doubleWrap: val = %f\n", val);
43: #endif
44: ret = PyFloat_FromDouble((double) val);
45: return (ret);
46: }
47:
48: PyObject *
49: libxml_charPtrWrap(char *str)
50: {
51: PyObject *ret;
52:
53: #ifdef DEBUG
54: printf("libxml_xmlcharPtrWrap: str = %s\n", str);
55: #endif
56: if (str == NULL) {
57: Py_INCREF(Py_None);
58: return (Py_None);
59: }
60: /* TODO: look at deallocation */
61: ret = PyString_FromString(str);
62: xmlFree(str);
63: return (ret);
64: }
65:
66: PyObject *
67: libxml_charPtrConstWrap(const char *str)
68: {
69: PyObject *ret;
70:
71: #ifdef DEBUG
72: printf("libxml_xmlcharPtrWrap: str = %s\n", str);
73: #endif
74: if (str == NULL) {
75: Py_INCREF(Py_None);
76: return (Py_None);
77: }
78: /* TODO: look at deallocation */
79: ret = PyString_FromString(str);
80: return (ret);
81: }
82:
83: PyObject *
84: libxml_xmlCharPtrWrap(xmlChar * str)
85: {
86: PyObject *ret;
87:
88: #ifdef DEBUG
89: printf("libxml_xmlCharPtrWrap: str = %s\n", str);
90: #endif
91: if (str == NULL) {
92: Py_INCREF(Py_None);
93: return (Py_None);
94: }
95: /* TODO: look at deallocation */
96: ret = PyString_FromString((char *) str);
97: xmlFree(str);
98: return (ret);
99: }
100:
101: PyObject *
102: libxml_xmlCharPtrConstWrap(const xmlChar * str)
103: {
104: PyObject *ret;
105:
106: #ifdef DEBUG
107: printf("libxml_xmlCharPtrWrap: str = %s\n", str);
108: #endif
109: if (str == NULL) {
110: Py_INCREF(Py_None);
111: return (Py_None);
112: }
113: /* TODO: look at deallocation */
114: ret = PyString_FromString((char *) str);
115: return (ret);
116: }
117:
118: PyObject *
119: libxml_constcharPtrWrap(const char *str)
120: {
121: PyObject *ret;
122:
123: #ifdef DEBUG
124: printf("libxml_xmlcharPtrWrap: str = %s\n", str);
125: #endif
126: if (str == NULL) {
127: Py_INCREF(Py_None);
128: return (Py_None);
129: }
130: /* TODO: look at deallocation */
131: ret = PyString_FromString(str);
132: return (ret);
133: }
134:
135: PyObject *
136: libxml_constxmlCharPtrWrap(const xmlChar * str)
137: {
138: PyObject *ret;
139:
140: #ifdef DEBUG
141: printf("libxml_xmlCharPtrWrap: str = %s\n", str);
142: #endif
143: if (str == NULL) {
144: Py_INCREF(Py_None);
145: return (Py_None);
146: }
147: /* TODO: look at deallocation */
148: ret = PyString_FromString((char *) str);
149: return (ret);
150: }
151:
152: PyObject *
153: libxml_xmlDocPtrWrap(xmlDocPtr doc)
154: {
155: PyObject *ret;
156:
157: #ifdef DEBUG
158: printf("libxml_xmlDocPtrWrap: doc = %p\n", doc);
159: #endif
160: if (doc == NULL) {
161: Py_INCREF(Py_None);
162: return (Py_None);
163: }
164: /* TODO: look at deallocation */
165: ret =
166: PyCObject_FromVoidPtrAndDesc((void *) doc, (char *) "xmlDocPtr",
167: NULL);
168: return (ret);
169: }
170:
171: PyObject *
172: libxml_xmlNodePtrWrap(xmlNodePtr node)
173: {
174: PyObject *ret;
175:
176: #ifdef DEBUG
177: printf("libxml_xmlNodePtrWrap: node = %p\n", node);
178: #endif
179: if (node == NULL) {
180: Py_INCREF(Py_None);
181: return (Py_None);
182: }
183: ret =
184: PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "xmlNodePtr",
185: NULL);
186: return (ret);
187: }
188:
189: PyObject *
190: libxml_xmlURIPtrWrap(xmlURIPtr uri)
191: {
192: PyObject *ret;
193:
194: #ifdef DEBUG
195: printf("libxml_xmlURIPtrWrap: uri = %p\n", uri);
196: #endif
197: if (uri == NULL) {
198: Py_INCREF(Py_None);
199: return (Py_None);
200: }
201: ret =
202: PyCObject_FromVoidPtrAndDesc((void *) uri, (char *) "xmlURIPtr",
203: NULL);
204: return (ret);
205: }
206:
207: PyObject *
208: libxml_xmlNsPtrWrap(xmlNsPtr ns)
209: {
210: PyObject *ret;
211:
212: #ifdef DEBUG
213: printf("libxml_xmlNsPtrWrap: node = %p\n", ns);
214: #endif
215: if (ns == NULL) {
216: Py_INCREF(Py_None);
217: return (Py_None);
218: }
219: ret =
220: PyCObject_FromVoidPtrAndDesc((void *) ns, (char *) "xmlNsPtr",
221: NULL);
222: return (ret);
223: }
224:
225: PyObject *
226: libxml_xmlAttrPtrWrap(xmlAttrPtr attr)
227: {
228: PyObject *ret;
229:
230: #ifdef DEBUG
231: printf("libxml_xmlAttrNodePtrWrap: attr = %p\n", attr);
232: #endif
233: if (attr == NULL) {
234: Py_INCREF(Py_None);
235: return (Py_None);
236: }
237: ret =
238: PyCObject_FromVoidPtrAndDesc((void *) attr, (char *) "xmlAttrPtr",
239: NULL);
240: return (ret);
241: }
242:
243: PyObject *
244: libxml_xmlAttributePtrWrap(xmlAttributePtr attr)
245: {
246: PyObject *ret;
247:
248: #ifdef DEBUG
249: printf("libxml_xmlAttributePtrWrap: attr = %p\n", attr);
250: #endif
251: if (attr == NULL) {
252: Py_INCREF(Py_None);
253: return (Py_None);
254: }
255: ret =
256: PyCObject_FromVoidPtrAndDesc((void *) attr,
257: (char *) "xmlAttributePtr", NULL);
258: return (ret);
259: }
260:
261: PyObject *
262: libxml_xmlElementPtrWrap(xmlElementPtr elem)
263: {
264: PyObject *ret;
265:
266: #ifdef DEBUG
267: printf("libxml_xmlElementNodePtrWrap: elem = %p\n", elem);
268: #endif
269: if (elem == NULL) {
270: Py_INCREF(Py_None);
271: return (Py_None);
272: }
273: ret =
274: PyCObject_FromVoidPtrAndDesc((void *) elem,
275: (char *) "xmlElementPtr", NULL);
276: return (ret);
277: }
278:
279: PyObject *
280: libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt)
281: {
282: PyObject *ret;
283:
284: #ifdef DEBUG
285: printf("libxml_xmlXPathContextPtrWrap: ctxt = %p\n", ctxt);
286: #endif
287: if (ctxt == NULL) {
288: Py_INCREF(Py_None);
289: return (Py_None);
290: }
291: ret =
292: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
293: (char *) "xmlXPathContextPtr", NULL);
294: return (ret);
295: }
296:
297: PyObject *
298: libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt)
299: {
300: PyObject *ret;
301:
302: #ifdef DEBUG
303: printf("libxml_xmlXPathParserContextPtrWrap: ctxt = %p\n", ctxt);
304: #endif
305: if (ctxt == NULL) {
306: Py_INCREF(Py_None);
307: return (Py_None);
308: }
309: ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt,
310: (char *) "xmlXPathParserContextPtr",
311: NULL);
312: return (ret);
313: }
314:
315: PyObject *
316: libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt)
317: {
318: PyObject *ret;
319:
320: #ifdef DEBUG
321: printf("libxml_xmlParserCtxtPtrWrap: ctxt = %p\n", ctxt);
322: #endif
323: if (ctxt == NULL) {
324: Py_INCREF(Py_None);
325: return (Py_None);
326: }
327:
328: ret =
329: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
330: (char *) "xmlParserCtxtPtr", NULL);
331: return (ret);
332: }
333:
334: /**
335: * libxml_xmlXPathDestructNsNode:
336: * cobj: xmlNsPtr namespace node
337: * desc: ignored string
338: *
339: * This function is called if and when a namespace node returned in
340: * an XPath node set is to be destroyed. That's the only kind of
341: * object returned in node set not directly linked to the original
342: * xmlDoc document, see xmlXPathNodeSetDupNs.
343: */
344: static void
345: libxml_xmlXPathDestructNsNode(void *cobj, void *desc ATTRIBUTE_UNUSED) {
346: #ifdef DEBUG
347: fprintf(stderr, "libxml_xmlXPathDestructNsNode called %p\n", cobj);
348: #endif
349: xmlXPathNodeSetFreeNs((xmlNsPtr) cobj);
350: }
351:
352: PyObject *
353: libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
354: {
355: PyObject *ret;
356:
357: #ifdef DEBUG
358: printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);
359: #endif
360: if (obj == NULL) {
361: Py_INCREF(Py_None);
362: return (Py_None);
363: }
364: switch (obj->type) {
365: case XPATH_XSLT_TREE: {
366: if ((obj->nodesetval == NULL) ||
367: (obj->nodesetval->nodeNr == 0) ||
368: (obj->nodesetval->nodeTab == NULL)) {
369: ret = PyList_New(0);
370: } else {
371: int i, len = 0;
372: xmlNodePtr node;
373:
374: node = obj->nodesetval->nodeTab[0]->children;
375: while (node != NULL) {
376: len++;
377: node = node->next;
378: }
379: ret = PyList_New(len);
380: node = obj->nodesetval->nodeTab[0]->children;
381: for (i = 0;i < len;i++) {
382: PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
383: node = node->next;
384: }
385: }
386: /*
387: * Return now, do not free the object passed down
388: */
389: return (ret);
390: }
391: case XPATH_NODESET:
392: if ((obj->nodesetval == NULL)
393: || (obj->nodesetval->nodeNr == 0)) {
394: ret = PyList_New(0);
395: } else {
396: int i;
397: xmlNodePtr node;
398:
399: ret = PyList_New(obj->nodesetval->nodeNr);
400: for (i = 0; i < obj->nodesetval->nodeNr; i++) {
401: node = obj->nodesetval->nodeTab[i];
402: if (node->type == XML_NAMESPACE_DECL) {
403: PyObject *ns =
404: PyCObject_FromVoidPtrAndDesc((void *) node,
405: (char *) "xmlNsPtr",
406: libxml_xmlXPathDestructNsNode);
407: PyList_SetItem(ret, i, ns);
408: /* make sure the xmlNsPtr is not destroyed now */
409: obj->nodesetval->nodeTab[i] = NULL;
410: } else {
411: PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
412: }
413: }
414: }
415: break;
416: case XPATH_BOOLEAN:
417: ret = PyInt_FromLong((long) obj->boolval);
418: break;
419: case XPATH_NUMBER:
420: ret = PyFloat_FromDouble(obj->floatval);
421: break;
422: case XPATH_STRING:
423: ret = PyString_FromString((char *) obj->stringval);
424: break;
425: case XPATH_POINT:
426: {
427: PyObject *node;
428: PyObject *indexIntoNode;
429: PyObject *tuple;
430:
431: node = libxml_xmlNodePtrWrap(obj->user);
432: indexIntoNode = PyInt_FromLong((long) obj->index);
433:
434: tuple = PyTuple_New(2);
435: PyTuple_SetItem(tuple, 0, node);
436: PyTuple_SetItem(tuple, 1, indexIntoNode);
437:
438: ret = tuple;
439: break;
440: }
441: case XPATH_RANGE:
442: {
443: unsigned short bCollapsedRange;
444:
445: bCollapsedRange = ( (obj->user2 == NULL) ||
446: ((obj->user2 == obj->user) && (obj->index == obj->index2)) );
447: if ( bCollapsedRange ) {
448: PyObject *node;
449: PyObject *indexIntoNode;
450: PyObject *tuple;
451: PyObject *list;
452:
453: list = PyList_New(1);
454:
455: node = libxml_xmlNodePtrWrap(obj->user);
456: indexIntoNode = PyInt_FromLong((long) obj->index);
457:
458: tuple = PyTuple_New(2);
459: PyTuple_SetItem(tuple, 0, node);
460: PyTuple_SetItem(tuple, 1, indexIntoNode);
461:
462: PyList_SetItem(list, 0, tuple);
463:
464: ret = list;
465: } else {
466: PyObject *node;
467: PyObject *indexIntoNode;
468: PyObject *tuple;
469: PyObject *list;
470:
471: list = PyList_New(2);
472:
473: node = libxml_xmlNodePtrWrap(obj->user);
474: indexIntoNode = PyInt_FromLong((long) obj->index);
475:
476: tuple = PyTuple_New(2);
477: PyTuple_SetItem(tuple, 0, node);
478: PyTuple_SetItem(tuple, 1, indexIntoNode);
479:
480: PyList_SetItem(list, 0, tuple);
481:
482: node = libxml_xmlNodePtrWrap(obj->user2);
483: indexIntoNode = PyInt_FromLong((long) obj->index2);
484:
485: tuple = PyTuple_New(2);
486: PyTuple_SetItem(tuple, 0, node);
487: PyTuple_SetItem(tuple, 1, indexIntoNode);
488:
489: PyList_SetItem(list, 1, tuple);
490:
491: ret = list;
492: }
493: break;
494: }
495: case XPATH_LOCATIONSET:
496: {
497: xmlLocationSetPtr set;
498:
499: set = obj->user;
500: if ( set && set->locNr > 0 ) {
501: int i;
502: PyObject *list;
503:
504: list = PyList_New(set->locNr);
505:
506: for (i=0; i<set->locNr; i++) {
507: xmlXPathObjectPtr setobj;
508: PyObject *pyobj;
509:
510: setobj = set->locTab[i]; /*xmlXPathObjectPtr setobj*/
511:
512: pyobj = libxml_xmlXPathObjectPtrWrap(setobj);
513: /* xmlXPathFreeObject(setobj) is called */
514: set->locTab[i] = NULL;
515:
516: PyList_SetItem(list, i, pyobj);
517: }
518: set->locNr = 0;
519: ret = list;
520: } else {
521: Py_INCREF(Py_None);
522: ret = Py_None;
523: }
524: break;
525: }
526: default:
527: #ifdef DEBUG
528: printf("Unable to convert XPath object type %d\n", obj->type);
529: #endif
530: Py_INCREF(Py_None);
531: ret = Py_None;
532: }
533: xmlXPathFreeObject(obj);
534: return (ret);
535: }
536:
537: xmlXPathObjectPtr
538: libxml_xmlXPathObjectPtrConvert(PyObject * obj)
539: {
540: xmlXPathObjectPtr ret = NULL;
541:
542: #ifdef DEBUG
543: printf("libxml_xmlXPathObjectPtrConvert: obj = %p\n", obj);
544: #endif
545: if (obj == NULL) {
546: return (NULL);
547: }
548: if PyFloat_Check
549: (obj) {
550: ret = xmlXPathNewFloat((double) PyFloat_AS_DOUBLE(obj));
551:
552: } else if PyInt_Check(obj) {
553:
554: ret = xmlXPathNewFloat((double) PyInt_AS_LONG(obj));
555:
556: #ifdef PyBool_Check
557: } else if PyBool_Check (obj) {
558:
559: if (obj == Py_True) {
560: ret = xmlXPathNewBoolean(1);
561: }
562: else {
563: ret = xmlXPathNewBoolean(0);
564: }
565: #endif
566: } else if PyString_Check
567: (obj) {
568: xmlChar *str;
569:
570: str = xmlStrndup((const xmlChar *) PyString_AS_STRING(obj),
571: PyString_GET_SIZE(obj));
572: ret = xmlXPathWrapString(str);
573: } else if PyList_Check
574: (obj) {
575: int i;
576: PyObject *node;
577: xmlNodePtr cur;
578: xmlNodeSetPtr set;
579:
580: set = xmlXPathNodeSetCreate(NULL);
581:
582: for (i = 0; i < PyList_Size(obj); i++) {
583: node = PyList_GetItem(obj, i);
584: if ((node == NULL) || (node->ob_type == NULL))
585: continue;
586:
587: cur = NULL;
588: if (PyCObject_Check(node)) {
589: #ifdef DEBUG
590: printf("Got a CObject\n");
591: #endif
592: cur = PyxmlNode_Get(node);
593: } else if (PyInstance_Check(node)) {
594: PyInstanceObject *inst = (PyInstanceObject *) node;
595: PyObject *name = inst->in_class->cl_name;
596:
597: if PyString_Check
598: (name) {
599: char *type = PyString_AS_STRING(name);
600: PyObject *wrapper;
601:
602: if (!strcmp(type, "xmlNode")) {
603: wrapper =
604: PyObject_GetAttrString(node, (char *) "_o");
605: if (wrapper != NULL) {
606: cur = PyxmlNode_Get(wrapper);
607: }
608: }
609: }
610: } else {
611: #ifdef DEBUG
612: printf("Unknown object in Python return list\n");
613: #endif
614: }
615: if (cur != NULL) {
616: xmlXPathNodeSetAdd(set, cur);
617: }
618: }
619: ret = xmlXPathWrapNodeSet(set);
620: } else {
621: #ifdef DEBUG
622: printf("Unable to convert Python Object to XPath");
623: #endif
624: }
625: Py_DECREF(obj);
626: return (ret);
627: }
628:
629: PyObject *
630: libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid)
631: {
632: PyObject *ret;
633:
634: #ifdef DEBUG
635: printf("libxml_xmlValidCtxtPtrWrap: valid = %p\n", valid);
636: #endif
637: if (valid == NULL) {
638: Py_INCREF(Py_None);
639: return (Py_None);
640: }
641:
642: ret =
643: PyCObject_FromVoidPtrAndDesc((void *) valid,
644: (char *) "xmlValidCtxtPtr", NULL);
645:
646: return (ret);
647: }
648:
649: PyObject *
650: libxml_xmlCatalogPtrWrap(xmlCatalogPtr catal)
651: {
652: PyObject *ret;
653:
654: #ifdef DEBUG
655: printf("libxml_xmlNodePtrWrap: catal = %p\n", catal);
656: #endif
657: if (catal == NULL) {
658: Py_INCREF(Py_None);
659: return (Py_None);
660: }
661: ret =
662: PyCObject_FromVoidPtrAndDesc((void *) catal,
663: (char *) "xmlCatalogPtr", NULL);
664: return (ret);
665: }
666:
667: PyObject *
668: libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer)
669: {
670: PyObject *ret;
671:
672: #ifdef DEBUG
673: printf("libxml_xmlOutputBufferPtrWrap: buffer = %p\n", buffer);
674: #endif
675: if (buffer == NULL) {
676: Py_INCREF(Py_None);
677: return (Py_None);
678: }
679: ret =
680: PyCObject_FromVoidPtrAndDesc((void *) buffer,
681: (char *) "xmlOutputBufferPtr", NULL);
682: return (ret);
683: }
684:
685: PyObject *
686: libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer)
687: {
688: PyObject *ret;
689:
690: #ifdef DEBUG
691: printf("libxml_xmlParserInputBufferPtrWrap: buffer = %p\n", buffer);
692: #endif
693: if (buffer == NULL) {
694: Py_INCREF(Py_None);
695: return (Py_None);
696: }
697: ret =
698: PyCObject_FromVoidPtrAndDesc((void *) buffer,
699: (char *) "xmlParserInputBufferPtr", NULL);
700: return (ret);
701: }
702:
703: #ifdef LIBXML_REGEXP_ENABLED
704: PyObject *
705: libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp)
706: {
707: PyObject *ret;
708:
709: #ifdef DEBUG
710: printf("libxml_xmlRegexpPtrWrap: regexp = %p\n", regexp);
711: #endif
712: if (regexp == NULL) {
713: Py_INCREF(Py_None);
714: return (Py_None);
715: }
716: ret =
717: PyCObject_FromVoidPtrAndDesc((void *) regexp,
718: (char *) "xmlRegexpPtr", NULL);
719: return (ret);
720: }
721: #endif /* LIBXML_REGEXP_ENABLED */
722:
723: #ifdef LIBXML_READER_ENABLED
724: PyObject *
725: libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader)
726: {
727: PyObject *ret;
728:
729: #ifdef DEBUG
730: printf("libxml_xmlTextReaderPtrWrap: reader = %p\n", reader);
731: #endif
732: if (reader == NULL) {
733: Py_INCREF(Py_None);
734: return (Py_None);
735: }
736: ret =
737: PyCObject_FromVoidPtrAndDesc((void *) reader,
738: (char *) "xmlTextReaderPtr", NULL);
739: return (ret);
740: }
741:
742: PyObject *
743: libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator)
744: {
745: PyObject *ret;
746:
747: #ifdef DEBUG
748: printf("libxml_xmlTextReaderLocatorPtrWrap: locator = %p\n", locator);
749: #endif
750: if (locator == NULL) {
751: Py_INCREF(Py_None);
752: return (Py_None);
753: }
754: ret =
755: PyCObject_FromVoidPtrAndDesc((void *) locator,
756: (char *) "xmlTextReaderLocatorPtr", NULL);
757: return (ret);
758: }
759: #endif /* LIBXML_READER_ENABLED */
760:
761: #ifdef LIBXML_SCHEMAS_ENABLED
762: PyObject *
763: libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt)
764: {
765: PyObject *ret;
766:
767: #ifdef DEBUG
768: printf("libxml_xmlRelaxNGPtrWrap: ctxt = %p\n", ctxt);
769: #endif
770: if (ctxt == NULL) {
771: Py_INCREF(Py_None);
772: return (Py_None);
773: }
774: ret =
775: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
776: (char *) "xmlRelaxNGPtr", NULL);
777: return (ret);
778: }
779:
780: PyObject *
781: libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt)
782: {
783: PyObject *ret;
784:
785: #ifdef DEBUG
786: printf("libxml_xmlRelaxNGParserCtxtPtrWrap: ctxt = %p\n", ctxt);
787: #endif
788: if (ctxt == NULL) {
789: Py_INCREF(Py_None);
790: return (Py_None);
791: }
792: ret =
793: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
794: (char *) "xmlRelaxNGParserCtxtPtr", NULL);
795: return (ret);
796: }
797: PyObject *
798: libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid)
799: {
800: PyObject *ret;
801:
802: #ifdef DEBUG
803: printf("libxml_xmlRelaxNGValidCtxtPtrWrap: valid = %p\n", valid);
804: #endif
805: if (valid == NULL) {
806: Py_INCREF(Py_None);
807: return (Py_None);
808: }
809: ret =
810: PyCObject_FromVoidPtrAndDesc((void *) valid,
811: (char *) "xmlRelaxNGValidCtxtPtr", NULL);
812: return (ret);
813: }
814:
815: PyObject *
816: libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt)
817: {
818: PyObject *ret;
819:
820: #ifdef DEBUG
821: printf("libxml_xmlSchemaPtrWrap: ctxt = %p\n", ctxt);
822: #endif
823: if (ctxt == NULL) {
824: Py_INCREF(Py_None);
825: return (Py_None);
826: }
827: ret =
828: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
829: (char *) "xmlSchemaPtr", NULL);
830: return (ret);
831: }
832:
833: PyObject *
834: libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt)
835: {
836: PyObject *ret;
837:
838: #ifdef DEBUG
839: printf("libxml_xmlSchemaParserCtxtPtrWrap: ctxt = %p\n", ctxt);
840: #endif
841: if (ctxt == NULL) {
842: Py_INCREF(Py_None);
843: return (Py_None);
844: }
845: ret =
846: PyCObject_FromVoidPtrAndDesc((void *) ctxt,
847: (char *) "xmlSchemaParserCtxtPtr", NULL);
848:
849: return (ret);
850: }
851:
852: PyObject *
853: libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid)
854: {
855: PyObject *ret;
856:
857: #ifdef DEBUG
858: printf("libxml_xmlSchemaValidCtxtPtrWrap: valid = %p\n", valid);
859: #endif
860: if (valid == NULL) {
861: Py_INCREF(Py_None);
862: return (Py_None);
863: }
864:
865: ret =
866: PyCObject_FromVoidPtrAndDesc((void *) valid,
867: (char *) "xmlSchemaValidCtxtPtr", NULL);
868:
869: return (ret);
870: }
871: #endif /* LIBXML_SCHEMAS_ENABLED */
872:
873: PyObject *
874: libxml_xmlErrorPtrWrap(xmlErrorPtr error)
875: {
876: PyObject *ret;
877:
878: #ifdef DEBUG
879: printf("libxml_xmlErrorPtrWrap: error = %p\n", error);
880: #endif
881: if (error == NULL) {
882: Py_INCREF(Py_None);
883: return (Py_None);
884: }
885: ret =
886: PyCObject_FromVoidPtrAndDesc((void *) error,
887: (char *) "xmlErrorPtr", NULL);
888: return (ret);
889: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>