gecko-dev/layout/xml/document/public/nsIXMLContentSink.h

123 строки
4.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1998
* Netscape Communications Corporation. All Rights Reserved.
*/
#ifndef nsIXMLContentSink_h___
#define nsIXMLContentSink_h___
#include "nsIContentSink.h"
#include "nsIParserNode.h"
#include "nsISupports.h"
class nsIDocument;
class nsIURL;
class nsIWebShell;
#define NS_IXMLCONTENT_SINK_IID \
{ 0xa6cf90c9, 0x15b3, 0x11d2, \
{ 0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } }
/**
* This interface represents a content sink for generic XML files.
* The goal of this sink is to deal with XML documents that do not
* have pre-built semantics, though it may also be implemented for
* cases in which semantics are hard-wired.
*
* The expectation is that the parser has already performed
* well-formedness and validity checking.
*
* XXX The expectation is that entity expansion will be done by the sink
* itself. This would require, however, that the sink has the ability
* to query the parser for entity replacement text.
*
* XXX This interface does not contain a mechanism for the sink to
* get specific schema/DTD information from the parser. This information
* may be necessary for entity expansion. It is also necessary for
* building the DOM portions that relate to the schema.
*
* XXX This interface does not deal with the presence of an external
* subset. It seems possible that this could be dealt with completely
* at the parser level.
*/
class nsIXMLContentSink : public nsIContentSink {
public:
/**
* This method is called by the parser when it encounters
* the XML declaration for a document.
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddXMLDecl(const nsIParserNode& aNode)=0;
/**
* This method is called by the parser when it encounters
* a document type declaration.
*
* XXX Should the parser also part the internal subset?
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddDocTypeDecl(const nsIParserNode& aNode)=0;
/**
* This method is called by the parser when it encounters
* character data - either regular CDATA or a marked CDATA
* section.
*
* XXX Could be removed in favor of nsIContentSink::AddLeaf
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddCharacterData(const nsIParserNode& aNode)=0;
/**
* This method is called by the parser when it encounters
* an unparsed entity (i.e. NDATA)
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddUnparsedEntity(const nsIParserNode& aNode)=0;
/**
* This method is called by the parser when it encounters
* a notation.
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddNotation(const nsIParserNode& aNode)=0;
/**
* This method is called by the parser when it encounters
* an entity reference. Note that the expectation is that
* the content sink itself will expand the entity reference
* in the content model.
*
* @param nsIParserNode reference to parser node interface
*/
NS_IMETHOD AddEntityReference(const nsIParserNode& aNode)=0;
};
extern nsresult NS_NewXMLContentSink(nsIXMLContentSink** aInstancePtrResult,
nsIDocument* aDoc,
nsIURL* aURL,
nsIWebShell* aWebShell);
#endif // nsIXMLContentSink_h___