diff -r 000000000000 -r 1918ee327afb src/xmlpatterns/environment/createReportContext.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/xmlpatterns/environment/createReportContext.xsl Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,559 @@ + + + + + + + + + + + + + + + + + + + + + + + +#include +#include + +#include "qnamepool_p.h" +#include "qxmlname.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QAbstractMessageHandler; +class QSourceLocation; +class QString; + +namespace QPatternist +{ + class SourceLocationReflection; + + /** + * @short A callback for reporting errors. + * + * ReportContext receives messages of various severity and type via its + * functions warning() and error(). In turn, ReportContext create Message instances + * and submit them to the QAbstractMessageHandler instance returned by messageHandler(). + * + * The Message attributes are set as follows: + * + * - Message::description() - A translated, human-readable description + * - Message::type() - Message::Error if a static, dynamic or type error was encountered + * that halted compilation or evaluation, or Message::Warning in case of a warning + * - Message::identifier() - This is a URI consisting of the error namespace with the + * error code as fragment. For example, a Message representing a syntax error + * would return the type "http://www.w3.org/2005/xqt-errors#XPST0003". The convenience + * function codeFromURI() can be used to extract the error code. The error namespace + * is typically the namespace for XPath and XQuery errors(as in the previous example), but + * can also be user defined. + * + * @see XML Path Language + * (XPath) 2.0, 2.3.2 Identifying and Reporting Errors + * @see XQuery 1.0 and + * XPath 2.0 Functions and Operators, 3 The Error Function + * @author Frans Englich + * @warning This file is auto-generated from extractErrorCodes.xsl. Any + * modifications done to this file are lost. + */ + class Q_AUTOTEST_EXPORT ReportContext : public QSharedData + { + public: + typedef QHash LocationHash; + + /** + * A smart pointer wrapping ReportContext instances. + */ + typedef QExplicitlySharedDataPointer Ptr; + + /** + * @short Default constructors. + * + * For some reason GCC fails to synthesize it, so we provide an empty + * one here. + */ + inline ReportContext() {} + + virtual ~ReportContext(); + + /** + * Error codes that corresponds to the error codes defined in the + * relevant specifications. They are used throughout the API for + * identifying error conditions. + * + * While strings could have been used for identifying errors, enums + * reduces bugs by providing type safety. + * + * @see XML + * Path Language (XPath) 2.0, 2.3 Error Handling + * @see XQuery 1.0 + * and XPath 2.0 Functions and Operators, C Error Summary + * @see XSL Transformations + * (XSLT) Version 2.0, E Summary of Error Conditions (Non-Normative) + * @note The enumerator values' Doxygen documentation is copied from the + * W3C documents + * XQuery 1.0 and XPath + * 2.0 Functions and Operators, + * XML Path Language (XPath) 2.0, and + * XSL Transformations (XSLT) + * Version 2.0, respectively. The doxygen documentation is therefore covered + * by the following legal notice: + * "Copyright @ 2005 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C + * liability, + * trademark and + * document + * use rules apply." + * @warning This enumerator is auto-generated from the relevant specifications + * by the XSL-T stylesheet extractErrorCodes.xsl. Hence, any modifications + * done to this file, in contrary to the stylesheet, are therefore lost. + */]]> + enum ErrorCode + { + /** + * XML Schema error code. + */ + XSDError, + + + + + + + }; +XML Path Language (XPath) 2.0, + * 2.3 Error Handling + * @param message the message to be read by the user. + * @param sourceLocation the location of where the warning originates from. + */ + void warning(const QString &message, const QSourceLocation &sourceLocation = QSourceLocation()); + + /** + * Issues an error. May be used at the static analysis phase or + * the dynamic evaluation phase. + * + * For SourceLocationReflection instances, the overload taking an SouourceLocationReflection should be used. + * + * @see XML Path Language (XPath) 2.0, + * 2.3 Error Handling + * @param message the message to be read by the user. + * @param errorCode identifies the error condition, as described + * @param sourceLocation the location of where the error originates from + * in "XML Path Language (XPath) 2.0" section "G Error Conditions" + */ + void error(const QString &message, + const ReportContext::ErrorCode errorCode, + const QSourceLocation &sourceLocation); + + /** + * Overload. + * + * Same as the above, but passes the SourceLocationReflection as reference for error reporting. + */ + void error(const QString &message, + const ReportContext::ErrorCode errorCode, + const SourceLocationReflection *reflection); + + /** + * Issues an error which is not identified in the XPath specifications. This function + * is among other things used for implementing the fn:error() function. + */ + void error(const QString &message, + const QXmlName qName, + const SourceLocationReflection *const r); + + /** + * @return the QAbstractMessageHandler which functions such as warning() and + * error() should submit messages to. This function + * may never return @c null; a valid QAbstractMessageHandler pointer must always be returned. + */ + virtual QAbstractMessageHandler *messageHandler() const = 0; + + virtual NamePool::Ptr namePool() const = 0; + + /** + * Returns a string representation of the error code @p code. + * + * @see ReportContext::ErrorCode + * @param errorCode identifies the error condition, as described + * in XML Path + * Language (XPath) 2.0, G Error Conditions + */ + static QString codeToString(const ReportContext::ErrorCode errorCode); + + /** + * @returns the error code part of @p typeURI and sets @p uri to the error namespace. Note + * that the error namespace not necessarily is the namespace for XPath and + * XQuery errors, http://www.w3.org/2005/xqt-errors, but can be user defined. + */ + static QString codeFromURI(const QString &typeURI, + QString &uri); + + /** + * @short Returns the source location applying for @p reflection. + */ + virtual QSourceLocation locationFor(const SourceLocationReflection *const reflection) const = 0; + + /** + * Resolves @p relative against @p baseURI, possibly using a URI resolver. + */ + QUrl resolveURI(const QUrl &relative, + const QUrl &baseURI) const; + + /** + * @short The URI resolver in use. + * + * If no URI resolver is in use, a @c null pointer is returned. + * + * @note You should probably use resolveURI(), which handles the case of + * when uriResolver() is @c null. + */ + virtual QAbstractUriResolver *uriResolver() const = 0; + + private: + void createError(const QString &description, + const QtMsgType type, + const QUrl &id, + const QSourceLocation &sourceLocation) const; + static inline QString finalizeDescription(const QString &desc); + QSourceLocation lookupSourceLocation(const SourceLocationReflection *const ref) const; + + Q_DISABLE_COPY(ReportContext) + }; + + /** + * @short This is the class type that is being thrown when a query error occur. + * + * @relates ReportContext + */ + typedef bool Exception; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif]]> + + + + + + + + + + + + + /** + + + */ + , + + + + + + + + + + + + + /** + + + */ + , + + + + + + + + + + + + /** + + + */ + + + , + + + + + + + + + + + + + /** + + + */ + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +