1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is Mozilla Communicator client code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
24 * Alternatively, the contents of this file may be used under the terms of
25 * either of the GNU General Public License Version 2 or later (the "GPL"),
26 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
37 #ifndef nsIFragmentContentSink_h___
38 #define nsIFragmentContentSink_h___
40 #include "nsISupports.h"
42 class nsIDOMDocumentFragment
;
45 #define NS_I_FRAGMENT_CONTENT_SINK_IID \
46 { 0x1ecdb30d, 0x1f10, 0x45d2, \
47 { 0xa4, 0xf4, 0xec, 0xbc, 0x03, 0x52, 0x9a, 0x7e } }
50 * The fragment sink allows a client to parse a fragment of sink, possibly
51 * surrounded in context. Also see nsIParser::ParseFragment().
52 * Note: once you've parsed a fragment, the fragment sink must be re-set on
53 * the parser in order to parse another fragment.
55 class nsIFragmentContentSink
: public nsISupports
{
57 NS_DECLARE_STATIC_IID_ACCESSOR(NS_I_FRAGMENT_CONTENT_SINK_IID
)
59 * This method is used to obtain the fragment created by
60 * a fragment content sink. The value returned will be null
61 * if the content sink hasn't yet received parser notifications.
63 * If aWillOwnFragment is PR_TRUE then the sink should drop its
64 * ownership of the fragment.
66 NS_IMETHOD
GetFragment(PRBool aWillOwnFragment
,
67 nsIDOMDocumentFragment
** aFragment
) = 0;
70 * This method is used to set the target document for this fragment
71 * sink. This document's nodeinfo manager will be used to create
72 * the content objects. This MUST be called before the sink is used.
74 * @param aDocument the document the new nodes will belong to
75 * (should not be null)
77 NS_IMETHOD
SetTargetDocument(nsIDocument
* aDocument
) = 0;
80 * This method is used to indicate to the sink that we're done building
81 * the context and should start paying attention to the incoming content
83 NS_IMETHOD
WillBuildContent() = 0;
86 * This method is used to indicate to the sink that we're done building
87 * The real content. This is useful if you want to parse additional context
88 * (such as an end context).
90 NS_IMETHOD
DidBuildContent() = 0;
93 * This method is a total hack to help with parsing fragments. It is called to
94 * tell the fragment sink that a container from the context will be delivered
95 * after the call to WillBuildContent(). This is only relevent for HTML
96 * fragments that use nsHTMLTokenizer/CNavDTD.
98 NS_IMETHOD
IgnoreFirstContainer() = 0;
101 NS_DEFINE_STATIC_IID_ACCESSOR(nsIFragmentContentSink
,
102 NS_I_FRAGMENT_CONTENT_SINK_IID
)
105 * Base version takes string nested in context, content surrounded by
106 * WillBuildContent()/DidBuildContent() calls. The 2nd version just loads
110 #define NS_HTMLFRAGMENTSINK_CONTRACTID "@mozilla.org/layout/htmlfragmentsink;1"
111 #define NS_HTMLFRAGMENTSINK2_CONTRACTID "@mozilla.org/layout/htmlfragmentsink;2"
112 #define NS_HTMLPARANOIDFRAGMENTSINK_CONTRACTID \
113 "@mozilla.org/htmlparanoidfragmentsink;1"
115 #define NS_XMLFRAGMENTSINK_CONTRACTID "@mozilla.org/layout/xmlfragmentsink;1"
116 #define NS_XMLFRAGMENTSINK2_CONTRACTID "@mozilla.org/layout/xmlfragmentsink;2"
117 #define NS_XHTMLPARANOIDFRAGMENTSINK_CONTRACTID \
118 "@mozilla.org/xhtmlparanoidfragmentsink;1"
121 // the HTML versions are in nsHTMLParts.h
123 NS_NewXMLFragmentContentSink(nsIFragmentContentSink
** aInstancePtrResult
);
125 NS_NewXMLFragmentContentSink2(nsIFragmentContentSink
** aInstancePtrResult
);
127 // This strips all but a whitelist of elements and attributes defined
128 // in nsContentSink.h
130 NS_NewXHTMLParanoidFragmentSink(nsIFragmentContentSink
** aInstancePtrResult
);
132 NS_XHTMLParanoidFragmentSinkShutdown();