mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 15:52:07 +00:00
0c516988d6
--HG-- rename : content/xml/content/src/CDATASection.cpp => dom/xml/CDATASection.cpp rename : content/xml/content/src/CDATASection.h => dom/xml/CDATASection.h rename : content/xml/content/src/ProcessingInstruction.cpp => dom/xml/ProcessingInstruction.cpp rename : content/xml/content/src/ProcessingInstruction.h => dom/xml/ProcessingInstruction.h rename : content/xml/document/src/XMLDocument.cpp => dom/xml/XMLDocument.cpp rename : content/xml/document/src/XMLDocument.h => dom/xml/XMLDocument.h rename : content/xml/content/src/XMLStylesheetProcessingInstruction.cpp => dom/xml/XMLStylesheetProcessingInstruction.cpp rename : content/xml/content/src/XMLStylesheetProcessingInstruction.h => dom/xml/XMLStylesheetProcessingInstruction.h rename : content/xml/document/crashtests/136896-1.xml => dom/xml/crashtests/136896-1.xml rename : content/xml/document/crashtests/185285-1.xml => dom/xml/crashtests/185285-1.xml rename : content/xml/document/crashtests/382636-1.xml => dom/xml/crashtests/382636-1.xml rename : content/xml/document/crashtests/382636-2.svg => dom/xml/crashtests/382636-2.svg rename : content/xml/document/crashtests/382636-3.xhtml => dom/xml/crashtests/382636-3.xhtml rename : content/xml/document/crashtests/382636-4.xul => dom/xml/crashtests/382636-4.xul rename : content/xml/content/crashtest/420429.xul => dom/xml/crashtests/420429.xul rename : content/xml/document/crashtests/431703-1.xhtml => dom/xml/crashtests/431703-1.xhtml rename : content/xml/content/crashtest/453278-frame.xml => dom/xml/crashtests/453278-frame.xml rename : content/xml/content/crashtest/453278.html => dom/xml/crashtests/453278.html rename : content/xml/content/crashtest/803586.xhtml => dom/xml/crashtests/803586.xhtml rename : content/xml/document/crashtests/994740-1.xhtml => dom/xml/crashtests/994740-1.xhtml rename : content/xml/document/crashtests/crashtests.list => dom/xml/crashtests/crashtests.list rename : content/xml/document/crashtests/tree.gif => dom/xml/crashtests/tree.gif rename : content/xml/content/src/htmlmathml-f.ent => dom/xml/htmlmathml-f.ent rename : content/xml/content/src/moz.build => dom/xml/moz.build rename : content/xml/document/public/nsIXMLContentSink.h => dom/xml/nsIXMLContentSink.h rename : content/xml/document/src/nsXMLContentSink.cpp => dom/xml/nsXMLContentSink.cpp rename : content/xml/document/src/nsXMLContentSink.h => dom/xml/nsXMLContentSink.h rename : content/xml/content/src/nsXMLElement.cpp => dom/xml/nsXMLElement.cpp rename : content/xml/content/src/nsXMLElement.h => dom/xml/nsXMLElement.h rename : content/xml/document/src/nsXMLFragmentContentSink.cpp => dom/xml/nsXMLFragmentContentSink.cpp rename : content/xml/document/src/nsXMLPrettyPrinter.cpp => dom/xml/nsXMLPrettyPrinter.cpp rename : content/xml/document/src/nsXMLPrettyPrinter.h => dom/xml/nsXMLPrettyPrinter.h rename : content/xml/document/resources/XMLMonoPrint.css => dom/xml/resources/XMLMonoPrint.css rename : content/xml/document/resources/XMLPrettyPrint.css => dom/xml/resources/XMLPrettyPrint.css rename : content/xml/document/resources/XMLPrettyPrint.xml => dom/xml/resources/XMLPrettyPrint.xml rename : content/xml/document/resources/XMLPrettyPrint.xsl => dom/xml/resources/XMLPrettyPrint.xsl rename : content/xml/document/resources/jar.mn => dom/xml/resources/jar.mn rename : content/xml/document/resources/moz.build => dom/xml/resources/moz.build rename : content/xml/document/test/file_bug293347.xml => dom/xml/test/file_bug293347.xml rename : content/xml/document/test/file_bug293347xslt.xml => dom/xml/test/file_bug293347xslt.xml rename : content/xml/document/test/mochitest.ini => dom/xml/test/mochitest.ini rename : content/xml/document/test/moz.build => dom/xml/test/moz.build rename : content/xml/tests/books/bethlehem.gif => dom/xml/test/old/books/bethlehem.gif rename : content/xml/tests/books/bill.gif => dom/xml/test/old/books/bill.gif rename : content/xml/tests/books/books.js => dom/xml/test/old/books/books.js rename : content/xml/tests/books/books.xml => dom/xml/test/old/books/books.xml rename : content/xml/tests/books/charing.gif => dom/xml/test/old/books/charing.gif rename : content/xml/tests/books/classic.css => dom/xml/test/old/books/classic.css rename : content/xml/tests/books/common.css => dom/xml/test/old/books/common.css rename : content/xml/tests/books/kerouac.gif => dom/xml/test/old/books/kerouac.gif rename : content/xml/tests/books/list.css => dom/xml/test/old/books/list.css rename : content/xml/tests/books/road.gif => dom/xml/test/old/books/road.gif rename : content/xml/tests/books/welville.gif => dom/xml/test/old/books/welville.gif rename : content/xml/tests/docbook.css => dom/xml/test/old/docbook.css rename : content/xml/tests/docbooktest.xml => dom/xml/test/old/docbooktest.xml rename : content/xml/tests/flamer.gif => dom/xml/test/old/flamer.gif rename : content/xml/tests/load/display.css => dom/xml/test/old/load/display.css rename : content/xml/tests/load/display.xml => dom/xml/test/old/load/display.xml rename : content/xml/tests/load/load.html => dom/xml/test/old/load/load.html rename : content/xml/tests/load/loadauth.html => dom/xml/test/old/load/loadauth.html rename : content/xml/tests/load/loaddisplay.html => dom/xml/test/old/load/loaddisplay.html rename : content/xml/tests/load/test.xml => dom/xml/test/old/load/test.xml rename : content/xml/tests/script.xml => dom/xml/test/old/script.xml rename : content/xml/tests/simple.xml => dom/xml/test/old/simple.xml rename : content/xml/tests/toc/book.css => dom/xml/test/old/toc/book.css rename : content/xml/tests/toc/irslogo.gif => dom/xml/test/old/toc/irslogo.gif rename : content/xml/tests/toc/minus.gif => dom/xml/test/old/toc/minus.gif rename : content/xml/tests/toc/plus.gif => dom/xml/test/old/toc/plus.gif rename : content/xml/tests/toc/rights.xml => dom/xml/test/old/toc/rights.xml rename : content/xml/tests/toc/toc.css => dom/xml/test/old/toc/toc.css rename : content/xml/tests/toc/toc.js => dom/xml/test/old/toc/toc.js rename : content/xml/tests/xlink/auto.xml => dom/xml/test/old/xlink/auto.xml rename : content/xml/tests/xlink/link.css => dom/xml/test/old/xlink/link.css rename : content/xml/tests/xlink/manual.xml => dom/xml/test/old/xlink/manual.xml rename : content/xml/tests/xmlbase/xmlbase.css => dom/xml/test/old/xmlbase/xmlbase.css rename : content/xml/tests/xmlbase/xmlbase.xml => dom/xml/test/old/xmlbase/xmlbase.xml rename : content/xml/document/test/test_bug232004.xhtml => dom/xml/test/test_bug232004.xhtml rename : content/xml/document/test/test_bug293347.html => dom/xml/test/test_bug293347.html rename : content/xml/document/test/test_bug343870.xhtml => dom/xml/test/test_bug343870.xhtml rename : content/xml/document/test/test_bug355213.xhtml => dom/xml/test/test_bug355213.xhtml rename : content/xml/document/test/test_bug392338.html => dom/xml/test/test_bug392338.html rename : content/xml/document/test/test_bug399502.xhtml => dom/xml/test/test_bug399502.xhtml rename : content/xml/document/test/test_bug445330.html => dom/xml/test/test_bug445330.html rename : content/xml/document/test/test_bug691215.html => dom/xml/test/test_bug691215.html rename : content/xml/document/test/test_viewport.xhtml => dom/xml/test/test_viewport.xhtml
200 lines
6.7 KiB
C++
200 lines
6.7 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 nsXMLContentSink_h__
|
|
#define nsXMLContentSink_h__
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "nsContentSink.h"
|
|
#include "nsIXMLContentSink.h"
|
|
#include "nsIExpatSink.h"
|
|
#include "nsIDocumentTransformer.h"
|
|
#include "nsTArray.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsCRT.h"
|
|
#include "nsCycleCollectionParticipant.h"
|
|
#include "nsIDTD.h"
|
|
#include "mozilla/dom/FromParser.h"
|
|
|
|
class nsIDocument;
|
|
class nsIURI;
|
|
class nsIContent;
|
|
class nsIParser;
|
|
class nsViewManager;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
class NodeInfo;
|
|
}
|
|
}
|
|
|
|
typedef enum {
|
|
eXMLContentSinkState_InProlog,
|
|
eXMLContentSinkState_InDocumentElement,
|
|
eXMLContentSinkState_InEpilog
|
|
} XMLContentSinkState;
|
|
|
|
struct StackNode {
|
|
nsCOMPtr<nsIContent> mContent;
|
|
uint32_t mNumFlushed;
|
|
};
|
|
|
|
class nsXMLContentSink : public nsContentSink,
|
|
public nsIXMLContentSink,
|
|
public nsITransformObserver,
|
|
public nsIExpatSink
|
|
{
|
|
public:
|
|
nsXMLContentSink();
|
|
|
|
NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
|
|
|
|
nsresult Init(nsIDocument* aDoc,
|
|
nsIURI* aURL,
|
|
nsISupports* aContainer,
|
|
nsIChannel* aChannel);
|
|
|
|
// nsISupports
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_NO_UNLINK(nsXMLContentSink,
|
|
nsContentSink)
|
|
|
|
NS_DECL_NSIEXPATSINK
|
|
|
|
// nsIContentSink
|
|
NS_IMETHOD WillParse(void) MOZ_OVERRIDE;
|
|
NS_IMETHOD WillBuildModel(nsDTDMode aDTDMode) MOZ_OVERRIDE;
|
|
NS_IMETHOD DidBuildModel(bool aTerminated) MOZ_OVERRIDE;
|
|
NS_IMETHOD WillInterrupt(void) MOZ_OVERRIDE;
|
|
NS_IMETHOD WillResume(void) MOZ_OVERRIDE;
|
|
NS_IMETHOD SetParser(nsParserBase* aParser) MOZ_OVERRIDE;
|
|
virtual void FlushPendingNotifications(mozFlushType aType) MOZ_OVERRIDE;
|
|
NS_IMETHOD SetDocumentCharset(nsACString& aCharset) MOZ_OVERRIDE;
|
|
virtual nsISupports *GetTarget() MOZ_OVERRIDE;
|
|
virtual bool IsScriptExecuting() MOZ_OVERRIDE;
|
|
virtual void ContinueInterruptedParsingAsync() MOZ_OVERRIDE;
|
|
|
|
// nsITransformObserver
|
|
NS_IMETHOD OnDocumentCreated(nsIDocument *aResultDocument) MOZ_OVERRIDE;
|
|
NS_IMETHOD OnTransformDone(nsresult aResult, nsIDocument *aResultDocument) MOZ_OVERRIDE;
|
|
|
|
// nsICSSLoaderObserver
|
|
NS_IMETHOD StyleSheetLoaded(mozilla::CSSStyleSheet* aSheet,
|
|
bool aWasAlternate,
|
|
nsresult aStatus) MOZ_OVERRIDE;
|
|
static bool ParsePIData(const nsString &aData, nsString &aHref,
|
|
nsString &aTitle, nsString &aMedia,
|
|
bool &aIsAlternate);
|
|
|
|
protected:
|
|
virtual ~nsXMLContentSink();
|
|
|
|
nsIParser* GetParser();
|
|
|
|
void ContinueInterruptedParsingIfEnabled();
|
|
|
|
// Start layout. If aIgnorePendingSheets is true, this will happen even if
|
|
// we still have stylesheet loads pending. Otherwise, we'll wait until the
|
|
// stylesheets are all done loading.
|
|
virtual void MaybeStartLayout(bool aIgnorePendingSheets);
|
|
|
|
virtual nsresult AddAttributes(const char16_t** aNode, nsIContent* aContent);
|
|
nsresult AddText(const char16_t* aString, int32_t aLength);
|
|
|
|
virtual bool OnOpenContainer(const char16_t **aAtts,
|
|
uint32_t aAttsCount,
|
|
int32_t aNameSpaceID,
|
|
nsIAtom* aTagName,
|
|
uint32_t aLineNumber) { return true; }
|
|
// Set the given content as the root element for the created document
|
|
// don't set if root element was already set.
|
|
// return TRUE if this call set the root element
|
|
virtual bool SetDocElement(int32_t aNameSpaceID,
|
|
nsIAtom *aTagName,
|
|
nsIContent *aContent);
|
|
virtual bool NotifyForDocElement() { return true; }
|
|
virtual nsresult CreateElement(const char16_t** aAtts, uint32_t aAttsCount,
|
|
mozilla::dom::NodeInfo* aNodeInfo, uint32_t aLineNumber,
|
|
nsIContent** aResult, bool* aAppendContent,
|
|
mozilla::dom::FromParser aFromParser);
|
|
|
|
// aParent is allowed to be null here if this is the root content
|
|
// being closed
|
|
virtual nsresult CloseElement(nsIContent* aContent);
|
|
|
|
virtual nsresult FlushText(bool aReleaseTextNode = true);
|
|
|
|
nsresult AddContentAsLeaf(nsIContent *aContent);
|
|
|
|
nsIContent* GetCurrentContent();
|
|
StackNode* GetCurrentStackNode();
|
|
nsresult PushContent(nsIContent *aContent);
|
|
void PopContent();
|
|
bool HaveNotifiedForCurrentContent() const;
|
|
|
|
nsresult FlushTags() MOZ_OVERRIDE;
|
|
|
|
void UpdateChildCounts() MOZ_OVERRIDE;
|
|
|
|
void DidAddContent()
|
|
{
|
|
if (IsTimeToNotify()) {
|
|
FlushTags();
|
|
}
|
|
}
|
|
|
|
// nsContentSink override
|
|
virtual nsresult ProcessStyleLink(nsIContent* aElement,
|
|
const nsSubstring& aHref,
|
|
bool aAlternate,
|
|
const nsSubstring& aTitle,
|
|
const nsSubstring& aType,
|
|
const nsSubstring& aMedia) MOZ_OVERRIDE;
|
|
|
|
nsresult LoadXSLStyleSheet(nsIURI* aUrl);
|
|
|
|
bool CanStillPrettyPrint();
|
|
|
|
nsresult MaybePrettyPrint();
|
|
|
|
bool IsMonolithicContainer(mozilla::dom::NodeInfo* aNodeInfo);
|
|
|
|
nsresult HandleStartElement(const char16_t *aName, const char16_t **aAtts,
|
|
uint32_t aAttsCount, uint32_t aLineNumber,
|
|
bool aInterruptable);
|
|
nsresult HandleEndElement(const char16_t *aName, bool aInterruptable);
|
|
nsresult HandleCharacterData(const char16_t *aData, uint32_t aLength,
|
|
bool aInterruptable);
|
|
|
|
nsCOMPtr<nsIContent> mDocElement;
|
|
nsCOMPtr<nsIContent> mCurrentHead; // When set, we're in an XHTML <haed>
|
|
char16_t* mText;
|
|
|
|
XMLContentSinkState mState;
|
|
|
|
int32_t mTextLength;
|
|
int32_t mTextSize;
|
|
|
|
int32_t mNotifyLevel;
|
|
nsCOMPtr<nsIContent> mLastTextNode;
|
|
int32_t mLastTextNodeSize;
|
|
|
|
uint8_t mConstrainSize : 1;
|
|
uint8_t mPrettyPrintXML : 1;
|
|
uint8_t mPrettyPrintHasSpecialRoot : 1;
|
|
uint8_t mPrettyPrintHasFactoredElements : 1;
|
|
uint8_t mPrettyPrinting : 1; // True if we called PrettyPrint() and it
|
|
// decided we should in fact prettyprint.
|
|
// True to call prevent script execution in the fragment mode.
|
|
uint8_t mPreventScriptExecution : 1;
|
|
|
|
nsTArray<StackNode> mContentStack;
|
|
|
|
nsCOMPtr<nsIDocumentTransformer> mXSLTProcessor;
|
|
};
|
|
|
|
#endif // nsXMLContentSink_h__
|