17db96d56Sopenharmony_ci"""Different kinds of SAX Exceptions"""
27db96d56Sopenharmony_ciimport sys
37db96d56Sopenharmony_ciif sys.platform[:4] == "java":
47db96d56Sopenharmony_ci    from java.lang import Exception
57db96d56Sopenharmony_cidel sys
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci# ===== SAXEXCEPTION =====
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciclass SAXException(Exception):
107db96d56Sopenharmony_ci    """Encapsulate an XML error or warning. This class can contain
117db96d56Sopenharmony_ci    basic error or warning information from either the XML parser or
127db96d56Sopenharmony_ci    the application: you can subclass it to provide additional
137db96d56Sopenharmony_ci    functionality, or to add localization. Note that although you will
147db96d56Sopenharmony_ci    receive a SAXException as the argument to the handlers in the
157db96d56Sopenharmony_ci    ErrorHandler interface, you are not actually required to raise
167db96d56Sopenharmony_ci    the exception; instead, you can simply read the information in
177db96d56Sopenharmony_ci    it."""
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci    def __init__(self, msg, exception=None):
207db96d56Sopenharmony_ci        """Creates an exception. The message is required, but the exception
217db96d56Sopenharmony_ci        is optional."""
227db96d56Sopenharmony_ci        self._msg = msg
237db96d56Sopenharmony_ci        self._exception = exception
247db96d56Sopenharmony_ci        Exception.__init__(self, msg)
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci    def getMessage(self):
277db96d56Sopenharmony_ci        "Return a message for this exception."
287db96d56Sopenharmony_ci        return self._msg
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci    def getException(self):
317db96d56Sopenharmony_ci        "Return the embedded exception, or None if there was none."
327db96d56Sopenharmony_ci        return self._exception
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci    def __str__(self):
357db96d56Sopenharmony_ci        "Create a string representation of the exception."
367db96d56Sopenharmony_ci        return self._msg
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci    def __getitem__(self, ix):
397db96d56Sopenharmony_ci        """Avoids weird error messages if someone does exception[ix] by
407db96d56Sopenharmony_ci        mistake, since Exception has __getitem__ defined."""
417db96d56Sopenharmony_ci        raise AttributeError("__getitem__")
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci# ===== SAXPARSEEXCEPTION =====
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ciclass SAXParseException(SAXException):
477db96d56Sopenharmony_ci    """Encapsulate an XML parse error or warning.
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci    This exception will include information for locating the error in
507db96d56Sopenharmony_ci    the original XML document. Note that although the application will
517db96d56Sopenharmony_ci    receive a SAXParseException as the argument to the handlers in the
527db96d56Sopenharmony_ci    ErrorHandler interface, the application is not actually required
537db96d56Sopenharmony_ci    to raise the exception; instead, it can simply read the
547db96d56Sopenharmony_ci    information in it and take a different action.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci    Since this exception is a subclass of SAXException, it inherits
577db96d56Sopenharmony_ci    the ability to wrap another exception."""
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci    def __init__(self, msg, exception, locator):
607db96d56Sopenharmony_ci        "Creates the exception. The exception parameter is allowed to be None."
617db96d56Sopenharmony_ci        SAXException.__init__(self, msg, exception)
627db96d56Sopenharmony_ci        self._locator = locator
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci        # We need to cache this stuff at construction time.
657db96d56Sopenharmony_ci        # If this exception is raised, the objects through which we must
667db96d56Sopenharmony_ci        # traverse to get this information may be deleted by the time
677db96d56Sopenharmony_ci        # it gets caught.
687db96d56Sopenharmony_ci        self._systemId = self._locator.getSystemId()
697db96d56Sopenharmony_ci        self._colnum = self._locator.getColumnNumber()
707db96d56Sopenharmony_ci        self._linenum = self._locator.getLineNumber()
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci    def getColumnNumber(self):
737db96d56Sopenharmony_ci        """The column number of the end of the text where the exception
747db96d56Sopenharmony_ci        occurred."""
757db96d56Sopenharmony_ci        return self._colnum
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci    def getLineNumber(self):
787db96d56Sopenharmony_ci        "The line number of the end of the text where the exception occurred."
797db96d56Sopenharmony_ci        return self._linenum
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci    def getPublicId(self):
827db96d56Sopenharmony_ci        "Get the public identifier of the entity where the exception occurred."
837db96d56Sopenharmony_ci        return self._locator.getPublicId()
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci    def getSystemId(self):
867db96d56Sopenharmony_ci        "Get the system identifier of the entity where the exception occurred."
877db96d56Sopenharmony_ci        return self._systemId
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci    def __str__(self):
907db96d56Sopenharmony_ci        "Create a string representation of the exception."
917db96d56Sopenharmony_ci        sysid = self.getSystemId()
927db96d56Sopenharmony_ci        if sysid is None:
937db96d56Sopenharmony_ci            sysid = "<unknown>"
947db96d56Sopenharmony_ci        linenum = self.getLineNumber()
957db96d56Sopenharmony_ci        if linenum is None:
967db96d56Sopenharmony_ci            linenum = "?"
977db96d56Sopenharmony_ci        colnum = self.getColumnNumber()
987db96d56Sopenharmony_ci        if colnum is None:
997db96d56Sopenharmony_ci            colnum = "?"
1007db96d56Sopenharmony_ci        return "%s:%s:%s: %s" % (sysid, linenum, colnum, self._msg)
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci# ===== SAXNOTRECOGNIZEDEXCEPTION =====
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ciclass SAXNotRecognizedException(SAXException):
1067db96d56Sopenharmony_ci    """Exception class for an unrecognized identifier.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci    An XMLReader will raise this exception when it is confronted with an
1097db96d56Sopenharmony_ci    unrecognized feature or property. SAX applications and extensions may
1107db96d56Sopenharmony_ci    use this class for similar purposes."""
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci# ===== SAXNOTSUPPORTEDEXCEPTION =====
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ciclass SAXNotSupportedException(SAXException):
1167db96d56Sopenharmony_ci    """Exception class for an unsupported operation.
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci    An XMLReader will raise this exception when a service it cannot
1197db96d56Sopenharmony_ci    perform is requested (specifically setting a state or value). SAX
1207db96d56Sopenharmony_ci    applications and extensions may use this class for similar
1217db96d56Sopenharmony_ci    purposes."""
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci# ===== SAXNOTSUPPORTEDEXCEPTION =====
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ciclass SAXReaderNotAvailable(SAXNotSupportedException):
1267db96d56Sopenharmony_ci    """Exception class for a missing driver.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci    An XMLReader module (driver) should raise this exception when it
1297db96d56Sopenharmony_ci    is first imported, e.g. when a support module cannot be imported.
1307db96d56Sopenharmony_ci    It also may be raised during parsing, e.g. if executing an external
1317db96d56Sopenharmony_ci    program is not permitted."""
132