You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
497 lines
15 KiB
497 lines
15 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1998
|
|
//
|
|
// File: xmlparser.idl
|
|
//7
|
|
//--------------------------------------------------------------------------
|
|
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("//")
|
|
cpp_quote("// Microsoft Windows")
|
|
cpp_quote("// Copyright (C) Microsoft Corporation, 1998.")
|
|
cpp_quote("//")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
|
|
#ifndef DO_NO_IMPORTS
|
|
import "unknwn.idl";
|
|
import "wtypes.idl";
|
|
import "objidl.idl";
|
|
import "oaidl.idl";
|
|
#endif
|
|
|
|
interface IXMLNodeSource;
|
|
interface IXMLParser;
|
|
interface IXMLNodeFactory;
|
|
interface IMoniker;
|
|
|
|
// This is the full list of node types that can be used in CreateNode.
|
|
typedef enum
|
|
{
|
|
// -------------- Container Nodes -----------------
|
|
XML_ELEMENT = 1, // <foo ... >
|
|
XML_ATTRIBUTE, // <foo bar=...>
|
|
XML_PI, // <?foo ...?>
|
|
XML_XMLDECL, // <?xml version=...
|
|
XML_DOCTYPE, // <!DOCTYPE
|
|
XML_DTDATTRIBUTE, // properties of DTD declarations (like XML_SYSTEM)
|
|
XML_ENTITYDECL, // <!ENTITY ...
|
|
XML_ELEMENTDECL, // <!ELEMENT ...
|
|
XML_ATTLISTDECL, // <!ATTLIST ...
|
|
XML_NOTATION, // <!NOTATION ...
|
|
XML_GROUP, // The ( ... ) grouping in content models.
|
|
XML_INCLUDESECT, // <![ INCLUDE [... ]]>
|
|
|
|
// -------------- Terminal Nodes -------------------
|
|
XML_PCDATA, // text inside a node or an attribute.
|
|
XML_CDATA, // <![CDATA[...]]>
|
|
XML_IGNORESECT, // <![ IGNORE [...]]>
|
|
XML_COMMENT, // <!--' and '-->
|
|
XML_ENTITYREF, // &foo;
|
|
XML_WHITESPACE, // white space between elements
|
|
XML_NAME, // general NAME token for typed attribute values or DTD declarations
|
|
XML_NMTOKEN, // general NMTOKEN for typed attribute values or DTD declarations
|
|
XML_STRING, // general quoted string literal in DTD declarations.
|
|
XML_PEREF, // %foo;
|
|
XML_MODEL, // EMPTY, ANY of MIXED.
|
|
XML_ATTDEF, // Name of attribute being defined.
|
|
XML_ATTTYPE,
|
|
XML_ATTPRESENCE,
|
|
|
|
XML_DTDSUBSET, // entire DTD subset as a string.
|
|
|
|
XML_LASTNODETYPE, // not used
|
|
|
|
} XML_NODE_TYPE;
|
|
|
|
// The subtypes
|
|
typedef enum
|
|
{
|
|
// for XML_ATTRIBUTE
|
|
XML_VERSION = XML_LASTNODETYPE, // for <?xml declarations?>
|
|
XML_ENCODING,
|
|
XML_STANDALONE,
|
|
XML_NS, // for namespace attributes.
|
|
XML_XMLSPACE, // xml:space
|
|
XML_XMLLANG, // xml:lang
|
|
|
|
// for XML_DTDATTRIBUTE
|
|
XML_SYSTEM, // SYSTEM literal
|
|
XML_PUBLIC, // PUBLIC literal
|
|
XML_NDATA, // NDATA name in ENTITY declarations
|
|
|
|
// for XML_ATTTYPE
|
|
XML_AT_CDATA, // ATTLIST attribute types.
|
|
XML_AT_ID,
|
|
XML_AT_IDREF,
|
|
XML_AT_IDREFS,
|
|
XML_AT_ENTITY,
|
|
XML_AT_ENTITIES,
|
|
XML_AT_NMTOKEN,
|
|
XML_AT_NMTOKENS,
|
|
XML_AT_NOTATION,
|
|
|
|
// for XML_ATTPRESENCE
|
|
XML_AT_REQUIRED,
|
|
XML_AT_IMPLIED,
|
|
XML_AT_FIXED,
|
|
|
|
// XML_ENTITYDECL subtype
|
|
XML_PENTITYDECL, // <!ENTITY % ...
|
|
|
|
// XML_MODEL subtypes
|
|
XML_EMPTY, // EMPTY
|
|
XML_ANY, // ANY
|
|
XML_MIXED, // (#PCDATA
|
|
XML_SEQUENCE, // ,
|
|
XML_CHOICE, // |
|
|
XML_STAR, // +
|
|
XML_PLUS, // *
|
|
XML_QUESTIONMARK, // ?
|
|
|
|
XML_LASTSUBNODETYPE, // not used
|
|
}
|
|
XML_NODE_SUBTYPE;
|
|
|
|
// Possible error codes include S_OK, E_PENDING and the following:
|
|
typedef enum
|
|
{
|
|
XML_E_PARSEERRORBASE = 0xC00CE500L,
|
|
|
|
// character level error codes.
|
|
XML_E_ENDOFINPUT = XML_E_PARSEERRORBASE,
|
|
XML_E_MISSINGEQUALS, // 1
|
|
XML_E_MISSINGQUOTE, // 2
|
|
XML_E_COMMENTSYNTAX, // 3
|
|
XML_E_BADSTARTNAMECHAR, // 4
|
|
XML_E_BADNAMECHAR, // 5
|
|
XML_E_BADCHARINSTRING, // 6
|
|
XML_E_XMLDECLSYNTAX, // 7
|
|
XML_E_BADCHARDATA, // 8
|
|
XML_E_MISSINGWHITESPACE, // 9
|
|
XML_E_EXPECTINGTAGEND, // A
|
|
XML_E_BADCHARINDTD, // B
|
|
XML_E_BADCHARINDECL, // C
|
|
XML_E_MISSINGSEMICOLON, // D
|
|
XML_E_BADCHARINENTREF, // E
|
|
XML_E_UNBALANCEDPAREN, // F
|
|
XML_E_EXPECTINGOPENBRACKET, // 10
|
|
XML_E_BADENDCONDSECT, // 11
|
|
XML_E_INTERNALERROR, // 12
|
|
XML_E_UNEXPECTED_WHITESPACE, // 13
|
|
XML_E_INCOMPLETE_ENCODING, // 14
|
|
XML_E_BADCHARINMIXEDMODEL, // 15
|
|
XML_E_MISSING_STAR, // 16
|
|
XML_E_BADCHARINMODEL, // 17
|
|
XML_E_MISSING_PAREN, // 18
|
|
XML_E_BADCHARINENUMERATION, // 19
|
|
XML_E_PIDECLSYNTAX, // 1A
|
|
XML_E_EXPECTINGCLOSEQUOTE, // 1B
|
|
XML_E_MULTIPLE_COLONS, // 1C
|
|
XML_E_INVALID_DECIMAL, // 1D
|
|
XML_E_INVALID_HEXIDECIMAL, // 1E
|
|
XML_E_INVALID_UNICODE, // 1F
|
|
XML_E_WHITESPACEORQUESTIONMARK, // 20
|
|
XML_E_ENDOFPE, // 21
|
|
|
|
// token level error codes
|
|
XML_E_TOKEN_ERROR = XML_E_PARSEERRORBASE + 0x50,
|
|
XML_E_SUSPENDED = XML_E_TOKEN_ERROR,// 50
|
|
XML_E_STOPPED, // 51
|
|
XML_E_UNEXPECTEDENDTAG, // 52
|
|
XML_E_UNCLOSEDTAG, // 53
|
|
XML_E_DUPLICATEATTRIBUTE, // 54
|
|
XML_E_MULTIPLEROOTS, // 55
|
|
XML_E_INVALIDATROOTLEVEL, // 56
|
|
XML_E_BADXMLDECL, // 57
|
|
XML_E_MISSINGROOT, // 58
|
|
XML_E_UNEXPECTEDEOF, // 59
|
|
XML_E_BADPEREFINSUBSET, // 5A
|
|
XML_E_PE_NESTING, // 5B
|
|
XML_E_INVALID_CDATACLOSINGTAG, // 5C
|
|
XML_E_UNCLOSEDPI, // 5D
|
|
XML_E_UNCLOSEDSTARTTAG, // 5E
|
|
XML_E_UNCLOSEDENDTAG, // 5F
|
|
XML_E_UNCLOSEDSTRING, // 60
|
|
XML_E_UNCLOSEDCOMMENT, // 61
|
|
XML_E_UNCLOSEDDECL, // 62
|
|
XML_E_UNCLOSEDMARKUPDECL, // 63
|
|
XML_E_UNCLOSEDCDATA, // 64
|
|
XML_E_BADDECLNAME, // 65
|
|
XML_E_BADEXTERNALID, // 66
|
|
XML_E_BADELEMENTINDTD, // 67
|
|
XML_E_RESERVEDNAMESPACE, // 68
|
|
XML_E_EXPECTING_VERSION, // 69
|
|
XML_E_EXPECTING_ENCODING, // 6A
|
|
XML_E_EXPECTING_NAME, // 6B
|
|
XML_E_UNEXPECTED_ATTRIBUTE, // 6C
|
|
XML_E_ENDTAGMISMATCH, // 6D
|
|
XML_E_INVALIDENCODING, // 6E
|
|
XML_E_INVALIDSWITCH, // 6F
|
|
XML_E_EXPECTING_NDATA, // 70
|
|
XML_E_INVALID_MODEL, // 71
|
|
XML_E_INVALID_TYPE, // 72
|
|
XML_E_INVALIDXMLSPACE, // 73
|
|
XML_E_MULTI_ATTR_VALUE, // 74
|
|
XML_E_INVALID_PRESENCE, // 75
|
|
XML_E_BADXMLCASE, // 76
|
|
XML_E_CONDSECTINSUBSET, // 77
|
|
XML_E_CDATAINVALID, // 78
|
|
XML_E_INVALID_STANDALONE, // 79
|
|
XML_E_UNEXPECTED_STANDALONE, // 7A
|
|
XML_E_DOCTYPE_IN_DTD, // 7B
|
|
XML_E_MISSING_ENTITY, // 7C
|
|
XML_E_ENTITYREF_INNAME, // 7D
|
|
XML_E_DOCTYPE_OUTSIDE_PROLOG, // 7E
|
|
XML_E_INVALID_VERSION, // 7F
|
|
XML_E_DTDELEMENT_OUTSIDE_DTD, // 80
|
|
XML_E_DUPLICATEDOCTYPE, // 81
|
|
XML_E_RESOURCE, // 82
|
|
XML_E_MISSINGNAME, // 83
|
|
|
|
XML_E_LASTERROR,
|
|
} XML_ERROR_CODE;
|
|
|
|
// Possible ready states
|
|
typedef enum
|
|
{
|
|
XMLPARSER_IDLE,
|
|
XMLPARSER_WAITING,
|
|
XMLPARSER_BUSY,
|
|
XMLPARSER_ERROR,
|
|
XMLPARSER_STOPPED,
|
|
XMLPARSER_SUSPENDED
|
|
} XML_PARSER_STATE;
|
|
|
|
// Some parser flags which can be OR'd together.
|
|
// By default all flags are clear.
|
|
// DTD and ENTITY are mutually exclusive.
|
|
typedef enum
|
|
{
|
|
XMLFLAG_FLOATINGAMP = 0x00000001,
|
|
XMLFLAG_SHORTENDTAGS = 0x00000002,
|
|
XMLFLAG_CASEINSENSITIVE = 0x00000004,
|
|
XMLFLAG_NONAMESPACES = 0x00000008,
|
|
XMLFLAG_NOWHITESPACE = 0x00000010,
|
|
XMLFLAG_IE4QUIRKS = 0x00000020,
|
|
XMLFLAG_NODTDNODES = 0x00000040,
|
|
XMLFLAG_IE4COMPATIBILITY = 0x000000FF,
|
|
XMLFLAG_IGNORESXMLDECL = 0x00000100,
|
|
XMLFLAG_SAX = 0x00000200,
|
|
XMLFLAG_NORMALIZELB = 0x00000400,
|
|
XMLFLAG_IGNOREENCODING = 0x00000800,
|
|
XMLFLAG_USEWINHTTP = 0x00001000,
|
|
XMLFLAG_RUNBUFFERONLY = 0x00002000,
|
|
XMLFLAG_LAZYRESYNC = 0x00004000,
|
|
XMLFLAG_IGNOREILLEGALCHARS= 0x00010000,
|
|
XMLFLAG_IE5COMPATIBILITY = 0x000F0100,
|
|
} XML_PARSER_FLAGS;
|
|
|
|
|
|
// Some things that node factories can be notified of
|
|
typedef enum
|
|
{
|
|
XMLNF_STARTDOCUMENT,
|
|
XMLNF_STARTDTD,
|
|
XMLNF_ENDDTD,
|
|
XMLNF_STARTDTDSUBSET,
|
|
XMLNF_ENDDTDSUBSET,
|
|
XMLNF_ENDPROLOG,
|
|
XMLNF_STARTENTITY,
|
|
XMLNF_ENDENTITY,
|
|
XMLNF_ENDDOCUMENT,
|
|
XMLNF_DATAAVAILABLE,
|
|
XMLNF_LASTEVENT = XMLNF_DATAAVAILABLE
|
|
} XML_NODEFACTORY_EVENT;
|
|
|
|
typedef struct _XML_NODE_INFO
|
|
{
|
|
DWORD dwSize; // size of this struct
|
|
DWORD dwType; // node type (XML_NODE_TYPE)
|
|
DWORD dwSubType; // node sub type (XML_NODE_SUBTYPE)
|
|
BOOL fTerminal; // whether this node can have any children
|
|
const WCHAR* pwcText; // element names, or text node contents.
|
|
ULONG ulLen; // length of pwcText
|
|
ULONG ulNsPrefixLen; // if element name, this is namespace prefix length.
|
|
PVOID pNode; // optionally created by & returned from node factory
|
|
PVOID pReserved; // reserved for factories to use between themselves.
|
|
} XML_NODE_INFO;
|
|
|
|
//------------------------------------------------------------------------
|
|
// See http://xmlweb/msxml/xmlparser.htm for a description of this interface.
|
|
|
|
|
|
[
|
|
uuid(d242361c-51a0-11d2-9caf-0060b0ec3d39), // LIBID_XMLPARSER
|
|
helpstring("Microsoft XML Parser 1.0"),
|
|
lcid(0x0000),
|
|
version(1.0)
|
|
]
|
|
|
|
library XMLPSR
|
|
{
|
|
importlib("stdole32.tlb");
|
|
importlib("stdole2.tlb");
|
|
|
|
[
|
|
object,
|
|
local,
|
|
uuid(d242361d-51a0-11d2-9caf-0060b0ec3d39), // IID_IXMLNodeSource
|
|
helpstring("IXMLParser Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IXMLNodeSource : IUnknown
|
|
{
|
|
HRESULT SetFactory(
|
|
[in] IXMLNodeFactory* pNodeFactory);
|
|
|
|
HRESULT GetFactory(
|
|
[out] IXMLNodeFactory** ppNodeFactory);
|
|
|
|
HRESULT Abort(
|
|
[in] BSTR bstrErrorInfo);
|
|
|
|
ULONG GetLineNumber();
|
|
|
|
ULONG GetLinePosition();
|
|
|
|
ULONG GetAbsolutePosition();
|
|
|
|
HRESULT GetLineBuffer(
|
|
[out] const WCHAR** ppwcBuf,
|
|
[out] ULONG* pulLen,
|
|
[out] ULONG* pulStartPos);
|
|
|
|
HRESULT GetLastError();
|
|
|
|
HRESULT GetErrorInfo(
|
|
[out] BSTR* pbstrErrorInfo);
|
|
|
|
ULONG GetFlags();
|
|
|
|
HRESULT GetURL(
|
|
[out] const WCHAR** ppwcBuf);
|
|
};
|
|
|
|
[
|
|
object,
|
|
local,
|
|
uuid(d242361e-51a0-11d2-9caf-0060b0ec3d39), // IID_IXMLParser
|
|
helpstring("IXMLParser Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IXMLParser : IXMLNodeSource
|
|
{
|
|
HRESULT SetURL(
|
|
[in] const WCHAR* pszBaseUrl,
|
|
[in] const WCHAR* pszRelativeUrl,
|
|
[in] BOOL fAsync);
|
|
|
|
HRESULT Load(
|
|
[in] BOOL fFullyAvailable,
|
|
[in] IMoniker *pimkName,
|
|
[in] LPBC pibc,
|
|
[in] DWORD grfMode);
|
|
|
|
HRESULT SetInput(
|
|
[in] IUnknown *pStm);
|
|
|
|
HRESULT PushData(
|
|
[in] const char* pData,
|
|
[in] ULONG ulChars,
|
|
[in] BOOL fLastBuffer);
|
|
|
|
HRESULT LoadDTD(
|
|
[in] const WCHAR* pszBaseUrl,
|
|
[in] const WCHAR* pszRelativeUrl);
|
|
|
|
HRESULT LoadEntity(
|
|
[in] const WCHAR* pszBaseUrl,
|
|
[in] const WCHAR* pszRelativeUrl,
|
|
[in] BOOL fpe);
|
|
|
|
HRESULT ParseEntity(
|
|
[in] const WCHAR* pwcText,
|
|
[in] ULONG ulLen,
|
|
[in] BOOL fpe);
|
|
|
|
// Similar to parsing internal parameter entities, except
|
|
// it doesn't insert any spaces. This is used to expand
|
|
// named entities inside attribute values when DTD specifies
|
|
// attribute type other than CDATA.
|
|
HRESULT ExpandEntity(
|
|
[in] const WCHAR* pwcText,
|
|
[in] ULONG ulLen);
|
|
|
|
HRESULT SetRoot(
|
|
[in] PVOID pRoot);
|
|
|
|
HRESULT GetRoot(
|
|
[in] PVOID* ppRoot);
|
|
|
|
HRESULT Run(
|
|
[in] long lChars);
|
|
|
|
HRESULT GetParserState();
|
|
|
|
HRESULT Suspend();
|
|
|
|
HRESULT Reset();
|
|
|
|
HRESULT SetFlags(
|
|
[in] ULONG iFlags);
|
|
|
|
// This is used as a default if LoadDTD or LoadEntity or SetURL is called
|
|
// with a NULL base URL.
|
|
HRESULT SetSecureBaseURL(
|
|
[in] const WCHAR* pszBaseUrl);
|
|
|
|
HRESULT GetSecureBaseURL(
|
|
[out] const WCHAR** ppwcBuf);
|
|
};
|
|
|
|
[
|
|
object,
|
|
local,
|
|
uuid(50fb5b1a-a75c-4ff4-86b2-14c62189e2cc), // IID_IXMLParser2
|
|
helpstring("IXMLParser2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IXMLParser2 : IXMLParser
|
|
{
|
|
HRESULT SetMaxXmlSize(
|
|
[in] ULONG MaxSizeCch);
|
|
|
|
HRESULT GetMaxXmlSize(
|
|
[out] ULONG * MaxSizeCch);
|
|
};
|
|
|
|
[
|
|
object,
|
|
local,
|
|
uuid(d242361f-51a0-11d2-9caf-0060b0ec3d39), // IID_IXMLNodeFactory
|
|
helpstring("IXMLNodeFactory Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IXMLNodeFactory : IUnknown
|
|
{
|
|
HRESULT NotifyEvent(
|
|
[in] IXMLNodeSource* pSource,
|
|
[in] XML_NODEFACTORY_EVENT iEvt);
|
|
|
|
HRESULT BeginChildren(
|
|
[in] IXMLNodeSource* pSource,
|
|
[in] XML_NODE_INFO* pNodeInfo);
|
|
|
|
HRESULT EndChildren(
|
|
[in] IXMLNodeSource* pSource,
|
|
[in] BOOL fEmpty,
|
|
[in] XML_NODE_INFO* pNodeInfo);
|
|
|
|
HRESULT Error(
|
|
[in] IXMLNodeSource* pSource,
|
|
[in] HRESULT hrErrorCode,
|
|
[in] USHORT cNumRecs,
|
|
[in] XML_NODE_INFO** apNodeInfo);
|
|
|
|
HRESULT CreateNode(
|
|
[in] IXMLNodeSource* pSource,
|
|
[in] PVOID pNodeParent,
|
|
[in] USHORT cNumRecs,
|
|
[in] XML_NODE_INFO** apNodeInfo);
|
|
|
|
};
|
|
|
|
// XMLParser co-Class, version independent
|
|
[
|
|
uuid(f5078f19-c551-11d3-89b9-0000f81fe221), // CLSID_XMLParser
|
|
helpstring("XML Parser (version independent) coclass")
|
|
]
|
|
coclass XMLParser
|
|
{
|
|
[default] interface IXMLParser;
|
|
};
|
|
|
|
|
|
// XMLParser co-Class, 2.6 version dependent
|
|
[
|
|
uuid(f5078f20-c551-11d3-89b9-0000f81fe221), // CLSID_XMLParser26
|
|
helpstring("XML Parser 2.6 coclass")
|
|
]
|
|
coclass XMLParser26
|
|
{
|
|
[default] interface IXMLParser;
|
|
};
|
|
|
|
// XMLParser co-Class, 3.0 version dependent
|
|
[
|
|
uuid(f5078f31-c551-11d3-89b9-0000f81fe221), // CLSID_XMLParser30
|
|
helpstring("XML Parser 3.0 coclass")
|
|
]
|
|
coclass XMLParser30
|
|
{
|
|
[default] interface IXMLParser;
|
|
};
|
|
|
|
}
|