mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-03 01:38:46 +02:00
In modern C++, static constexpr member variables are automatically inline (aka weak) so the template trick is not needed. This also avoid duplication and reduces the amount of parsed code. No impact on generated binary (actually: smaller debuginfo, close to identical binary). Differential Revision: https://phabricator.services.mozilla.com/D247825
90 lines
3.3 KiB
C++
90 lines
3.3 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
#ifndef nsIHTMLContentSink_h___
|
|
#define nsIHTMLContentSink_h___
|
|
|
|
/**
|
|
* This interface is OBSOLETE and in the process of being REMOVED.
|
|
* Do NOT implement!
|
|
*
|
|
* This file declares the concrete HTMLContentSink class.
|
|
* This class is used during the parsing process as the
|
|
* primary interface between the parser and the content
|
|
* model.
|
|
*
|
|
* After the tokenizer completes, the parser iterates over
|
|
* the known token list. As the parser identifies valid
|
|
* elements, it calls the contentsink interface to notify
|
|
* the content model that a new node or child node is being
|
|
* created and added to the content model.
|
|
*
|
|
* The HTMLContentSink interface assumes 4 underlying
|
|
* containers: HTML, HEAD, BODY and FRAMESET. Before
|
|
* accessing any these, the parser will call the appropriate
|
|
* OpennsIHTMLContentSink method: OpenHTML,OpenHead,OpenBody,OpenFrameSet;
|
|
* likewise, the ClosensIHTMLContentSink version will be called when the
|
|
* parser is done with a given section.
|
|
*
|
|
* IMPORTANT: The parser may Open each container more than
|
|
* once! This is due to the irregular nature of HTML files.
|
|
* For example, it is possible to encounter plain text at
|
|
* the start of an HTML document (that precedes the HTML tag).
|
|
* Such text is treated as if it were part of the body.
|
|
* In such cases, the parser will Open the body, pass the text-
|
|
* node in and then Close the body. The body will likely be
|
|
* re-Opened later when the actual <BODY> tag has been seen.
|
|
*
|
|
* Containers within the body are Opened and Closed
|
|
* using the OpenContainer(...) and CloseContainer(...) calls.
|
|
* It is assumed that the document or contentSink is
|
|
* maintaining its state to manage where new content should
|
|
* be added to the underlying document.
|
|
*
|
|
* NOTE: OpenHTML() and OpenBody() may get called multiple times
|
|
* in the same document. That's fine, and it doesn't mean
|
|
* that we have multiple bodies or HTML's.
|
|
*
|
|
* NOTE: I haven't figured out how sub-documents (non-frames)
|
|
* are going to be handled. Stay tuned.
|
|
*/
|
|
#include "nsIContentSink.h"
|
|
#include "nsHTMLTags.h"
|
|
|
|
#define NS_IHTML_CONTENT_SINK_IID \
|
|
{0xefc5af86, 0x5cfd, 0x4918, {0x9d, 0xd3, 0x5f, 0x7a, 0xb2, 0x88, 0xb2, 0x68}}
|
|
|
|
/**
|
|
* This interface is OBSOLETE and in the process of being REMOVED.
|
|
* Do NOT implement!
|
|
*/
|
|
class nsIHTMLContentSink : public nsIContentSink {
|
|
public:
|
|
NS_INLINE_DECL_STATIC_IID(NS_IHTML_CONTENT_SINK_IID)
|
|
|
|
enum ElementType { eHTML, eBody };
|
|
|
|
/**
|
|
* This method is used to open a generic container in the sink.
|
|
*
|
|
* @update 4/1/98 gess
|
|
*/
|
|
NS_IMETHOD OpenContainer(ElementType aNodeType) = 0;
|
|
|
|
/**
|
|
* This method gets called by the parser when a close
|
|
* container tag has been consumed and needs to be closed.
|
|
*
|
|
* @param aTag - The tag to be closed.
|
|
*/
|
|
NS_IMETHOD CloseContainer(ElementType aTag) = 0;
|
|
|
|
/**
|
|
* This method returns true if there are more than one
|
|
* pending style sheets, false otherwise.
|
|
*/
|
|
virtual bool WaitForPendingSheets() = 0;
|
|
};
|
|
|
|
#endif /* nsIHTMLContentSink_h___ */
|