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>