Annotation of embedaddon/libxml2/python/libxml.py, revision 1.1

1.1     ! misho       1: import libxml2mod
        !             2: import types
        !             3: import sys
        !             4: 
        !             5: # The root of all libxml2 errors.
        !             6: class libxmlError(Exception): pass
        !             7: 
        !             8: #
        !             9: # id() is sometimes negative ...
        !            10: #
        !            11: def pos_id(o):
        !            12:     i = id(o)
        !            13:     if (i < 0):
        !            14:         return (sys.maxint - i)
        !            15:     return i
        !            16: 
        !            17: #
        !            18: # Errors raised by the wrappers when some tree handling failed.
        !            19: #
        !            20: class treeError(libxmlError):
        !            21:     def __init__(self, msg):
        !            22:         self.msg = msg
        !            23:     def __str__(self):
        !            24:         return self.msg
        !            25: 
        !            26: class parserError(libxmlError):
        !            27:     def __init__(self, msg):
        !            28:         self.msg = msg
        !            29:     def __str__(self):
        !            30:         return self.msg
        !            31: 
        !            32: class uriError(libxmlError):
        !            33:     def __init__(self, msg):
        !            34:         self.msg = msg
        !            35:     def __str__(self):
        !            36:         return self.msg
        !            37: 
        !            38: class xpathError(libxmlError):
        !            39:     def __init__(self, msg):
        !            40:         self.msg = msg
        !            41:     def __str__(self):
        !            42:         return self.msg
        !            43: 
        !            44: class ioWrapper:
        !            45:     def __init__(self, _obj):
        !            46:         self.__io = _obj
        !            47:         self._o = None
        !            48: 
        !            49:     def io_close(self):
        !            50:         if self.__io == None:
        !            51:             return(-1)
        !            52:         self.__io.close()
        !            53:         self.__io = None
        !            54:         return(0)
        !            55: 
        !            56:     def io_flush(self):
        !            57:         if self.__io == None:
        !            58:             return(-1)
        !            59:         self.__io.flush()
        !            60:         return(0)
        !            61: 
        !            62:     def io_read(self, len = -1):
        !            63:         if self.__io == None:
        !            64:             return(-1)
        !            65:         if len < 0:
        !            66:             return(self.__io.read())
        !            67:         return(self.__io.read(len))
        !            68: 
        !            69:     def io_write(self, str, len = -1):
        !            70:         if self.__io == None:
        !            71:             return(-1)
        !            72:         if len < 0:
        !            73:             return(self.__io.write(str))
        !            74:         return(self.__io.write(str, len))
        !            75: 
        !            76: class ioReadWrapper(ioWrapper):
        !            77:     def __init__(self, _obj, enc = ""):
        !            78:         ioWrapper.__init__(self, _obj)
        !            79:         self._o = libxml2mod.xmlCreateInputBuffer(self, enc)
        !            80: 
        !            81:     def __del__(self):
        !            82:         print "__del__"
        !            83:         self.io_close()
        !            84:         if self._o != None:
        !            85:             libxml2mod.xmlFreeParserInputBuffer(self._o)
        !            86:         self._o = None
        !            87: 
        !            88:     def close(self):
        !            89:         self.io_close()
        !            90:         if self._o != None:
        !            91:             libxml2mod.xmlFreeParserInputBuffer(self._o)
        !            92:         self._o = None
        !            93: 
        !            94: class ioWriteWrapper(ioWrapper):
        !            95:     def __init__(self, _obj, enc = ""):
        !            96: #        print "ioWriteWrapper.__init__", _obj
        !            97:         if type(_obj) == type(''):
        !            98:             print "write io from a string"
        !            99:             self.o = None
        !           100:         elif type(_obj) == types.InstanceType:
        !           101:             print "write io from instance of %s" % (_obj.__class__)
        !           102:             ioWrapper.__init__(self, _obj)
        !           103:             self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
        !           104:         else:
        !           105:             file = libxml2mod.outputBufferGetPythonFile(_obj)
        !           106:             if file != None:
        !           107:                 ioWrapper.__init__(self, file)
        !           108:             else:
        !           109:                 ioWrapper.__init__(self, _obj)
        !           110:             self._o = _obj
        !           111: 
        !           112:     def __del__(self):
        !           113: #        print "__del__"
        !           114:         self.io_close()
        !           115:         if self._o != None:
        !           116:             libxml2mod.xmlOutputBufferClose(self._o)
        !           117:         self._o = None
        !           118: 
        !           119:     def flush(self):
        !           120:         self.io_flush()
        !           121:         if self._o != None:
        !           122:             libxml2mod.xmlOutputBufferClose(self._o)
        !           123:         self._o = None
        !           124: 
        !           125:     def close(self):
        !           126:         self.io_flush()
        !           127:         if self._o != None:
        !           128:             libxml2mod.xmlOutputBufferClose(self._o)
        !           129:         self._o = None
        !           130: 
        !           131: #
        !           132: # Example of a class to handle SAX events
        !           133: #
        !           134: class SAXCallback:
        !           135:     """Base class for SAX handlers"""
        !           136:     def startDocument(self):
        !           137:         """called at the start of the document"""
        !           138:         pass
        !           139: 
        !           140:     def endDocument(self):
        !           141:         """called at the end of the document"""
        !           142:         pass
        !           143: 
        !           144:     def startElement(self, tag, attrs):
        !           145:         """called at the start of every element, tag is the name of
        !           146:            the element, attrs is a dictionary of the element's attributes"""
        !           147:         pass
        !           148: 
        !           149:     def endElement(self, tag):
        !           150:         """called at the start of every element, tag is the name of
        !           151:            the element"""
        !           152:         pass
        !           153: 
        !           154:     def characters(self, data):
        !           155:         """called when character data have been read, data is the string
        !           156:            containing the data, multiple consecutive characters() callback
        !           157:            are possible."""
        !           158:         pass
        !           159: 
        !           160:     def cdataBlock(self, data):
        !           161:         """called when CDATA section have been read, data is the string
        !           162:            containing the data, multiple consecutive cdataBlock() callback
        !           163:            are possible."""
        !           164:         pass
        !           165: 
        !           166:     def reference(self, name):
        !           167:         """called when an entity reference has been found"""
        !           168:         pass
        !           169: 
        !           170:     def ignorableWhitespace(self, data):
        !           171:         """called when potentially ignorable white spaces have been found"""
        !           172:         pass
        !           173: 
        !           174:     def processingInstruction(self, target, data):
        !           175:         """called when a PI has been found, target contains the PI name and
        !           176:            data is the associated data in the PI"""
        !           177:         pass
        !           178: 
        !           179:     def comment(self, content):
        !           180:         """called when a comment has been found, content contains the comment"""
        !           181:         pass
        !           182: 
        !           183:     def externalSubset(self, name, externalID, systemID):
        !           184:         """called when a DOCTYPE declaration has been found, name is the
        !           185:            DTD name and externalID, systemID are the DTD public and system
        !           186:            identifier for that DTd if available"""
        !           187:         pass
        !           188: 
        !           189:     def internalSubset(self, name, externalID, systemID):
        !           190:         """called when a DOCTYPE declaration has been found, name is the
        !           191:            DTD name and externalID, systemID are the DTD public and system
        !           192:            identifier for that DTD if available"""
        !           193:         pass
        !           194: 
        !           195:     def entityDecl(self, name, type, externalID, systemID, content):
        !           196:         """called when an ENTITY declaration has been found, name is the
        !           197:            entity name and externalID, systemID are the entity public and
        !           198:            system identifier for that entity if available, type indicates
        !           199:            the entity type, and content reports it's string content"""
        !           200:         pass
        !           201: 
        !           202:     def notationDecl(self, name, externalID, systemID):
        !           203:         """called when an NOTATION declaration has been found, name is the
        !           204:            notation name and externalID, systemID are the notation public and
        !           205:            system identifier for that notation if available"""
        !           206:         pass
        !           207: 
        !           208:     def attributeDecl(self, elem, name, type, defi, defaultValue, nameList):
        !           209:         """called when an ATTRIBUTE definition has been found"""
        !           210:         pass
        !           211: 
        !           212:     def elementDecl(self, name, type, content):
        !           213:         """called when an ELEMENT definition has been found"""
        !           214:         pass
        !           215: 
        !           216:     def entityDecl(self, name, publicId, systemID, notationName):
        !           217:         """called when an unparsed ENTITY declaration has been found,
        !           218:            name is the entity name and publicId,, systemID are the entity
        !           219:            public and system identifier for that entity if available,
        !           220:            and notationName indicate the associated NOTATION"""
        !           221:         pass
        !           222: 
        !           223:     def warning(self, msg):
        !           224:         #print msg
        !           225:         pass
        !           226: 
        !           227:     def error(self, msg):
        !           228:         raise parserError(msg)
        !           229: 
        !           230:     def fatalError(self, msg):
        !           231:         raise parserError(msg)
        !           232: 
        !           233: #
        !           234: # This class is the ancestor of all the Node classes. It provides
        !           235: # the basic functionalities shared by all nodes (and handle
        !           236: # gracefylly the exception), like name, navigation in the tree,
        !           237: # doc reference, content access and serializing to a string or URI
        !           238: #
        !           239: class xmlCore:
        !           240:     def __init__(self, _obj=None):
        !           241:         if _obj != None: 
        !           242:             self._o = _obj;
        !           243:             return
        !           244:         self._o = None
        !           245: 
        !           246:     def __eq__(self, other):
        !           247:         if other == None:
        !           248:             return False
        !           249:         ret = libxml2mod.compareNodesEqual(self._o, other._o)
        !           250:         if ret == None:
        !           251:             return False
        !           252:         return ret == True
        !           253:     def __ne__(self, other):
        !           254:         if other == None:
        !           255:             return True
        !           256:         ret = libxml2mod.compareNodesEqual(self._o, other._o)
        !           257:         return not ret
        !           258:     def __hash__(self):
        !           259:         ret = libxml2mod.nodeHash(self._o)
        !           260:         return ret
        !           261: 
        !           262:     def __str__(self):
        !           263:         return self.serialize()
        !           264:     def get_parent(self):
        !           265:         ret = libxml2mod.parent(self._o)
        !           266:         if ret == None:
        !           267:             return None
        !           268:         return xmlNode(_obj=ret)
        !           269:     def get_children(self):
        !           270:         ret = libxml2mod.children(self._o)
        !           271:         if ret == None:
        !           272:             return None
        !           273:         return xmlNode(_obj=ret)
        !           274:     def get_last(self):
        !           275:         ret = libxml2mod.last(self._o)
        !           276:         if ret == None:
        !           277:             return None
        !           278:         return xmlNode(_obj=ret)
        !           279:     def get_next(self):
        !           280:         ret = libxml2mod.next(self._o)
        !           281:         if ret == None:
        !           282:             return None
        !           283:         return xmlNode(_obj=ret)
        !           284:     def get_properties(self):
        !           285:         ret = libxml2mod.properties(self._o)
        !           286:         if ret == None:
        !           287:             return None
        !           288:         return xmlAttr(_obj=ret)
        !           289:     def get_prev(self):
        !           290:         ret = libxml2mod.prev(self._o)
        !           291:         if ret == None:
        !           292:             return None
        !           293:         return xmlNode(_obj=ret)
        !           294:     def get_content(self):
        !           295:         return libxml2mod.xmlNodeGetContent(self._o)
        !           296:     getContent = get_content  # why is this duplicate naming needed ?
        !           297:     def get_name(self):
        !           298:         return libxml2mod.name(self._o)
        !           299:     def get_type(self):
        !           300:         return libxml2mod.type(self._o)
        !           301:     def get_doc(self):
        !           302:         ret = libxml2mod.doc(self._o)
        !           303:         if ret == None:
        !           304:             if self.type in ["document_xml", "document_html"]:
        !           305:                 return xmlDoc(_obj=self._o)
        !           306:             else:
        !           307:                 return None
        !           308:         return xmlDoc(_obj=ret)
        !           309:     #
        !           310:     # Those are common attributes to nearly all type of nodes
        !           311:     # defined as python2 properties
        !           312:     # 
        !           313:     import sys
        !           314:     if float(sys.version[0:3]) < 2.2:
        !           315:         def __getattr__(self, attr):
        !           316:             if attr == "parent":
        !           317:                 ret = libxml2mod.parent(self._o)
        !           318:                 if ret == None:
        !           319:                     return None
        !           320:                 return xmlNode(_obj=ret)
        !           321:             elif attr == "properties":
        !           322:                 ret = libxml2mod.properties(self._o)
        !           323:                 if ret == None:
        !           324:                     return None
        !           325:                 return xmlAttr(_obj=ret)
        !           326:             elif attr == "children":
        !           327:                 ret = libxml2mod.children(self._o)
        !           328:                 if ret == None:
        !           329:                     return None
        !           330:                 return xmlNode(_obj=ret)
        !           331:             elif attr == "last":
        !           332:                 ret = libxml2mod.last(self._o)
        !           333:                 if ret == None:
        !           334:                     return None
        !           335:                 return xmlNode(_obj=ret)
        !           336:             elif attr == "next":
        !           337:                 ret = libxml2mod.next(self._o)
        !           338:                 if ret == None:
        !           339:                     return None
        !           340:                 return xmlNode(_obj=ret)
        !           341:             elif attr == "prev":
        !           342:                 ret = libxml2mod.prev(self._o)
        !           343:                 if ret == None:
        !           344:                     return None
        !           345:                 return xmlNode(_obj=ret)
        !           346:             elif attr == "content":
        !           347:                 return libxml2mod.xmlNodeGetContent(self._o)
        !           348:             elif attr == "name":
        !           349:                 return libxml2mod.name(self._o)
        !           350:             elif attr == "type":
        !           351:                 return libxml2mod.type(self._o)
        !           352:             elif attr == "doc":
        !           353:                 ret = libxml2mod.doc(self._o)
        !           354:                 if ret == None:
        !           355:                     if self.type == "document_xml" or self.type == "document_html":
        !           356:                         return xmlDoc(_obj=self._o)
        !           357:                     else:
        !           358:                         return None
        !           359:                 return xmlDoc(_obj=ret)
        !           360:             raise AttributeError,attr
        !           361:     else:
        !           362:         parent = property(get_parent, None, None, "Parent node")
        !           363:         children = property(get_children, None, None, "First child node")
        !           364:         last = property(get_last, None, None, "Last sibling node")
        !           365:         next = property(get_next, None, None, "Next sibling node")
        !           366:         prev = property(get_prev, None, None, "Previous sibling node")
        !           367:         properties = property(get_properties, None, None, "List of properies")
        !           368:         content = property(get_content, None, None, "Content of this node")
        !           369:         name = property(get_name, None, None, "Node name")
        !           370:         type = property(get_type, None, None, "Node type")
        !           371:         doc = property(get_doc, None, None, "The document this node belongs to")
        !           372: 
        !           373:     #
        !           374:     # Serialization routines, the optional arguments have the following
        !           375:     # meaning:
        !           376:     #     encoding: string to ask saving in a specific encoding
        !           377:     #     indent: if 1 the serializer is asked to indent the output
        !           378:     #
        !           379:     def serialize(self, encoding = None, format = 0):
        !           380:         return libxml2mod.serializeNode(self._o, encoding, format)
        !           381:     def saveTo(self, file, encoding = None, format = 0):
        !           382:         return libxml2mod.saveNodeTo(self._o, file, encoding, format)
        !           383:             
        !           384:     #
        !           385:     # Canonicalization routines:
        !           386:     #
        !           387:     #   nodes: the node set (tuple or list) to be included in the
        !           388:     #     canonized image or None if all document nodes should be
        !           389:     #     included.
        !           390:     #   exclusive: the exclusive flag (0 - non-exclusive
        !           391:     #     canonicalization; otherwise - exclusive canonicalization)
        !           392:     #   prefixes: the list of inclusive namespace prefixes (strings),
        !           393:     #     or None if there is no inclusive namespaces (only for
        !           394:     #     exclusive canonicalization, ignored otherwise)
        !           395:     #   with_comments: include comments in the result (!=0) or not
        !           396:     #     (==0)
        !           397:     def c14nMemory(self,
        !           398:                    nodes=None,
        !           399:                    exclusive=0,
        !           400:                    prefixes=None,
        !           401:                    with_comments=0):
        !           402:         if nodes:
        !           403:             nodes = map(lambda n: n._o, nodes)
        !           404:         return libxml2mod.xmlC14NDocDumpMemory(
        !           405:             self.get_doc()._o,
        !           406:             nodes,
        !           407:             exclusive != 0,
        !           408:             prefixes,
        !           409:             with_comments != 0)
        !           410:     def c14nSaveTo(self,
        !           411:                    file,
        !           412:                    nodes=None,
        !           413:                    exclusive=0,
        !           414:                    prefixes=None,
        !           415:                    with_comments=0):
        !           416:         if nodes:
        !           417:             nodes = map(lambda n: n._o, nodes)
        !           418:         return libxml2mod.xmlC14NDocSaveTo(
        !           419:             self.get_doc()._o,
        !           420:             nodes,
        !           421:             exclusive != 0,
        !           422:             prefixes,
        !           423:             with_comments != 0,
        !           424:             file)
        !           425: 
        !           426:     #
        !           427:     # Selecting nodes using XPath, a bit slow because the context
        !           428:     # is allocated/freed every time but convenient.
        !           429:     #
        !           430:     def xpathEval(self, expr):
        !           431:         doc = self.doc
        !           432:         if doc == None:
        !           433:             return None
        !           434:         ctxt = doc.xpathNewContext()
        !           435:         ctxt.setContextNode(self)
        !           436:         res = ctxt.xpathEval(expr)
        !           437:         ctxt.xpathFreeContext()
        !           438:         return res
        !           439: 
        !           440: #    #
        !           441: #    # Selecting nodes using XPath, faster because the context
        !           442: #    # is allocated just once per xmlDoc.
        !           443: #    #
        !           444: #    # Removed: DV memleaks c.f. #126735
        !           445: #    #
        !           446: #    def xpathEval2(self, expr):
        !           447: #        doc = self.doc
        !           448: #        if doc == None:
        !           449: #            return None
        !           450: #        try:
        !           451: #            doc._ctxt.setContextNode(self)
        !           452: #        except:
        !           453: #            doc._ctxt = doc.xpathNewContext()
        !           454: #            doc._ctxt.setContextNode(self)
        !           455: #        res = doc._ctxt.xpathEval(expr)
        !           456: #        return res
        !           457:     def xpathEval2(self, expr):
        !           458:         return self.xpathEval(expr)
        !           459: 
        !           460:     # Remove namespaces
        !           461:     def removeNsDef(self, href):
        !           462:         """
        !           463:         Remove a namespace definition from a node.  If href is None,
        !           464:         remove all of the ns definitions on that node.  The removed
        !           465:         namespaces are returned as a linked list.
        !           466: 
        !           467:         Note: If any child nodes referred to the removed namespaces,
        !           468:         they will be left with dangling links.  You should call
        !           469:         renconciliateNs() to fix those pointers.
        !           470: 
        !           471:         Note: This method does not free memory taken by the ns
        !           472:         definitions.  You will need to free it manually with the
        !           473:         freeNsList() method on the returns xmlNs object.
        !           474:         """
        !           475: 
        !           476:         ret = libxml2mod.xmlNodeRemoveNsDef(self._o, href)
        !           477:         if ret is None:return None
        !           478:         __tmp = xmlNs(_obj=ret)
        !           479:         return __tmp
        !           480: 
        !           481:     # support for python2 iterators
        !           482:     def walk_depth_first(self):
        !           483:         return xmlCoreDepthFirstItertor(self)
        !           484:     def walk_breadth_first(self):
        !           485:         return xmlCoreBreadthFirstItertor(self)
        !           486:     __iter__ = walk_depth_first
        !           487: 
        !           488:     def free(self):
        !           489:         try:
        !           490:             self.doc._ctxt.xpathFreeContext()
        !           491:         except:
        !           492:             pass
        !           493:         libxml2mod.xmlFreeDoc(self._o)
        !           494: 
        !           495: 
        !           496: #
        !           497: # implements the depth-first iterator for libxml2 DOM tree
        !           498: #
        !           499: class xmlCoreDepthFirstItertor:
        !           500:     def __init__(self, node):
        !           501:         self.node = node
        !           502:         self.parents = []
        !           503:     def __iter__(self):
        !           504:         return self
        !           505:     def next(self):
        !           506:         while 1:
        !           507:             if self.node:
        !           508:                 ret = self.node
        !           509:                 self.parents.append(self.node)
        !           510:                 self.node = self.node.children
        !           511:                 return ret
        !           512:             try:
        !           513:                 parent = self.parents.pop()
        !           514:             except IndexError:
        !           515:                 raise StopIteration
        !           516:             self.node = parent.next
        !           517: 
        !           518: #
        !           519: # implements the breadth-first iterator for libxml2 DOM tree
        !           520: #
        !           521: class xmlCoreBreadthFirstItertor:
        !           522:     def __init__(self, node):
        !           523:         self.node = node
        !           524:         self.parents = []
        !           525:     def __iter__(self):
        !           526:         return self
        !           527:     def next(self):
        !           528:         while 1:
        !           529:             if self.node:
        !           530:                 ret = self.node
        !           531:                 self.parents.append(self.node)
        !           532:                 self.node = self.node.next
        !           533:                 return ret
        !           534:             try:
        !           535:                 parent = self.parents.pop()
        !           536:             except IndexError:
        !           537:                 raise StopIteration
        !           538:             self.node = parent.children
        !           539: 
        !           540: #
        !           541: # converters to present a nicer view of the XPath returns
        !           542: #
        !           543: def nodeWrap(o):
        !           544:     # TODO try to cast to the most appropriate node class
        !           545:     name = libxml2mod.type(o)
        !           546:     if name == "element" or name == "text":
        !           547:         return xmlNode(_obj=o)
        !           548:     if name == "attribute":
        !           549:         return xmlAttr(_obj=o)
        !           550:     if name[0:8] == "document":
        !           551:         return xmlDoc(_obj=o)
        !           552:     if name == "namespace":
        !           553:         return xmlNs(_obj=o)
        !           554:     if name == "elem_decl":
        !           555:         return xmlElement(_obj=o)
        !           556:     if name == "attribute_decl":
        !           557:         return xmlAttribute(_obj=o)
        !           558:     if name == "entity_decl":
        !           559:         return xmlEntity(_obj=o)
        !           560:     if name == "dtd":
        !           561:         return xmlDtd(_obj=o)
        !           562:     return xmlNode(_obj=o)
        !           563: 
        !           564: def xpathObjectRet(o):
        !           565:     otype = type(o)
        !           566:     if otype == type([]):
        !           567:         ret = map(xpathObjectRet, o)
        !           568:         return ret
        !           569:     elif otype == type(()):
        !           570:         ret = map(xpathObjectRet, o)
        !           571:         return tuple(ret)
        !           572:     elif otype == type('') or otype == type(0) or otype == type(0.0):
        !           573:         return o
        !           574:     else:
        !           575:         return nodeWrap(o)
        !           576: 
        !           577: #
        !           578: # register an XPath function
        !           579: #
        !           580: def registerXPathFunction(ctxt, name, ns_uri, f):
        !           581:     ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f)
        !           582: 
        !           583: #
        !           584: # For the xmlTextReader parser configuration
        !           585: #
        !           586: PARSER_LOADDTD=1
        !           587: PARSER_DEFAULTATTRS=2
        !           588: PARSER_VALIDATE=3
        !           589: PARSER_SUBST_ENTITIES=4
        !           590: 
        !           591: #
        !           592: # For the error callback severities
        !           593: #
        !           594: PARSER_SEVERITY_VALIDITY_WARNING=1
        !           595: PARSER_SEVERITY_VALIDITY_ERROR=2
        !           596: PARSER_SEVERITY_WARNING=3
        !           597: PARSER_SEVERITY_ERROR=4
        !           598: 
        !           599: #
        !           600: # register the libxml2 error handler
        !           601: #
        !           602: def registerErrorHandler(f, ctx):
        !           603:     """Register a Python written function to for error reporting.
        !           604:        The function is called back as f(ctx, error). """
        !           605:     import sys
        !           606:     if not sys.modules.has_key('libxslt'):
        !           607:         # normal behaviour when libxslt is not imported
        !           608:         ret = libxml2mod.xmlRegisterErrorHandler(f,ctx)
        !           609:     else:
        !           610:         # when libxslt is already imported, one must
        !           611:         # use libxst's error handler instead
        !           612:         import libxslt
        !           613:         ret = libxslt.registerErrorHandler(f,ctx)
        !           614:     return ret
        !           615: 
        !           616: class parserCtxtCore:
        !           617: 
        !           618:     def __init__(self, _obj=None):
        !           619:         if _obj != None: 
        !           620:             self._o = _obj;
        !           621:             return
        !           622:         self._o = None
        !           623: 
        !           624:     def __del__(self):
        !           625:         if self._o != None:
        !           626:             libxml2mod.xmlFreeParserCtxt(self._o)
        !           627:         self._o = None
        !           628: 
        !           629:     def setErrorHandler(self,f,arg):
        !           630:         """Register an error handler that will be called back as
        !           631:            f(arg,msg,severity,reserved).
        !           632:            
        !           633:            @reserved is currently always None."""
        !           634:         libxml2mod.xmlParserCtxtSetErrorHandler(self._o,f,arg)
        !           635: 
        !           636:     def getErrorHandler(self):
        !           637:         """Return (f,arg) as previously registered with setErrorHandler
        !           638:            or (None,None)."""
        !           639:         return libxml2mod.xmlParserCtxtGetErrorHandler(self._o)
        !           640: 
        !           641:     def addLocalCatalog(self, uri):
        !           642:         """Register a local catalog with the parser"""
        !           643:         return libxml2mod.addLocalCatalog(self._o, uri)
        !           644:     
        !           645: 
        !           646: class ValidCtxtCore:
        !           647: 
        !           648:     def __init__(self, *args, **kw):
        !           649:         pass
        !           650: 
        !           651:     def setValidityErrorHandler(self, err_func, warn_func, arg=None):
        !           652:         """
        !           653:         Register error and warning handlers for DTD validation.
        !           654:         These will be called back as f(msg,arg)
        !           655:         """
        !           656:         libxml2mod.xmlSetValidErrors(self._o, err_func, warn_func, arg)
        !           657:     
        !           658: 
        !           659: class SchemaValidCtxtCore:
        !           660: 
        !           661:     def __init__(self, *args, **kw):
        !           662:         pass
        !           663: 
        !           664:     def setValidityErrorHandler(self, err_func, warn_func, arg=None):
        !           665:         """
        !           666:         Register error and warning handlers for Schema validation.
        !           667:         These will be called back as f(msg,arg)
        !           668:         """
        !           669:         libxml2mod.xmlSchemaSetValidErrors(self._o, err_func, warn_func, arg)
        !           670: 
        !           671: 
        !           672: class relaxNgValidCtxtCore:
        !           673: 
        !           674:     def __init__(self, *args, **kw):
        !           675:         pass
        !           676: 
        !           677:     def setValidityErrorHandler(self, err_func, warn_func, arg=None):
        !           678:         """
        !           679:         Register error and warning handlers for RelaxNG validation.
        !           680:         These will be called back as f(msg,arg)
        !           681:         """
        !           682:         libxml2mod.xmlRelaxNGSetValidErrors(self._o, err_func, warn_func, arg)
        !           683: 
        !           684:     
        !           685: def _xmlTextReaderErrorFunc((f,arg),msg,severity,locator):
        !           686:     """Intermediate callback to wrap the locator"""
        !           687:     return f(arg,msg,severity,xmlTextReaderLocator(locator))
        !           688: 
        !           689: class xmlTextReaderCore:
        !           690: 
        !           691:     def __init__(self, _obj=None):
        !           692:         self.input = None
        !           693:         if _obj != None:self._o = _obj;return
        !           694:         self._o = None
        !           695: 
        !           696:     def __del__(self):
        !           697:         if self._o != None:
        !           698:             libxml2mod.xmlFreeTextReader(self._o)
        !           699:         self._o = None
        !           700: 
        !           701:     def SetErrorHandler(self,f,arg):
        !           702:         """Register an error handler that will be called back as
        !           703:            f(arg,msg,severity,locator)."""
        !           704:         if f is None:
        !           705:             libxml2mod.xmlTextReaderSetErrorHandler(\
        !           706:                 self._o,None,None)
        !           707:         else:
        !           708:             libxml2mod.xmlTextReaderSetErrorHandler(\
        !           709:                 self._o,_xmlTextReaderErrorFunc,(f,arg))
        !           710: 
        !           711:     def GetErrorHandler(self):
        !           712:         """Return (f,arg) as previously registered with setErrorHandler
        !           713:            or (None,None)."""
        !           714:         f,arg = libxml2mod.xmlTextReaderGetErrorHandler(self._o)
        !           715:         if f is None:
        !           716:             return None,None
        !           717:         else:
        !           718:             # assert f is _xmlTextReaderErrorFunc
        !           719:             return arg
        !           720: 
        !           721: #
        !           722: # The cleanup now goes though a wrappe in libxml.c
        !           723: #
        !           724: def cleanupParser():
        !           725:     libxml2mod.xmlPythonCleanupParser()
        !           726: 
        !           727: # WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
        !           728: #
        !           729: # Everything before this line comes from libxml.py 
        !           730: # Everything after this line is automatically generated
        !           731: #
        !           732: # WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
        !           733: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>