зеркало из https://github.com/mozilla/gecko-dev.git
Bug 487949 - Land HTML5 parser on trunk preffed off r=mrbkap, sr=jonas
This commit is contained in:
Родитель
297bd260d6
Коммит
8803c27a7f
|
@ -439,10 +439,13 @@ public:
|
||||||
* @param aNotify whether to notify the document (current document for
|
* @param aNotify whether to notify the document (current document for
|
||||||
* nsIContent, and |this| for nsIDocument) that the remove has
|
* nsIContent, and |this| for nsIDocument) that the remove has
|
||||||
* occurred
|
* occurred
|
||||||
|
* @param aMutationEvent whether to fire a mutation event
|
||||||
*
|
*
|
||||||
* Note: If there is no child at aIndex, this method will simply do nothing.
|
* Note: If there is no child at aIndex, this method will simply do nothing.
|
||||||
*/
|
*/
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify) = 0;
|
virtual nsresult RemoveChildAt(PRUint32 aIndex,
|
||||||
|
PRBool aNotify,
|
||||||
|
PRBool aMutationEvent = PR_TRUE) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a property associated with this node.
|
* Get a property associated with this node.
|
||||||
|
|
|
@ -84,6 +84,7 @@ REQUIRES = xpcom \
|
||||||
shistory \
|
shistory \
|
||||||
editor \
|
editor \
|
||||||
windowwatcher \
|
windowwatcher \
|
||||||
|
html5 \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
ifdef ACCESSIBILITY
|
ifdef ACCESSIBILITY
|
||||||
|
|
|
@ -794,7 +794,7 @@ nsContentSink::ProcessStyleLink(nsIContent* aElement,
|
||||||
nsresult
|
nsresult
|
||||||
nsContentSink::ProcessMETATag(nsIContent* aContent)
|
nsContentSink::ProcessMETATag(nsIContent* aContent)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(aContent, "missing base-element");
|
NS_ASSERTION(aContent, "missing meta-element");
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|
||||||
|
@ -810,6 +810,16 @@ nsContentSink::ProcessMETATag(nsIContent* aContent)
|
||||||
rv = ProcessHeaderData(fieldAtom, result, aContent);
|
rv = ProcessHeaderData(fieldAtom, result, aContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
/* Look for the viewport meta tag. If we find it, process it and put the
|
||||||
|
* data into the document header. */
|
||||||
|
if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::name,
|
||||||
|
nsGkAtoms::viewport, eIgnoreCase)) {
|
||||||
|
nsAutoString value;
|
||||||
|
aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::content, value);
|
||||||
|
rv = nsContentUtils::ProcessViewportInfo(mDocument, value);
|
||||||
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,8 @@ class nsContentSink : public nsICSSLoaderObserver,
|
||||||
|
|
||||||
virtual void UpdateChildCounts() = 0;
|
virtual void UpdateChildCounts() = 0;
|
||||||
|
|
||||||
|
PRBool IsTimeToNotify();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
nsContentSink();
|
nsContentSink();
|
||||||
virtual ~nsContentSink();
|
virtual ~nsContentSink();
|
||||||
|
@ -241,12 +243,14 @@ protected:
|
||||||
nsIURI **aManifestURI,
|
nsIURI **aManifestURI,
|
||||||
CacheSelectionAction *aAction);
|
CacheSelectionAction *aAction);
|
||||||
|
|
||||||
|
public:
|
||||||
// Searches for the offline cache manifest attribute and calls one
|
// Searches for the offline cache manifest attribute and calls one
|
||||||
// of the above defined methods to select the document's application
|
// of the above defined methods to select the document's application
|
||||||
// cache, let it be associated with the document and eventually
|
// cache, let it be associated with the document and eventually
|
||||||
// schedule the cache update process.
|
// schedule the cache update process.
|
||||||
void ProcessOfflineManifest(nsIContent *aElement);
|
void ProcessOfflineManifest(nsIContent *aElement);
|
||||||
|
|
||||||
|
protected:
|
||||||
// Tries to scroll to the URI's named anchor. Once we've successfully
|
// Tries to scroll to the URI's named anchor. Once we've successfully
|
||||||
// done that, further calls to this method will be ignored.
|
// done that, further calls to this method will be ignored.
|
||||||
void ScrollToRef();
|
void ScrollToRef();
|
||||||
|
@ -255,10 +259,9 @@ protected:
|
||||||
// Start layout. If aIgnorePendingSheets is true, this will happen even if
|
// Start layout. If aIgnorePendingSheets is true, this will happen even if
|
||||||
// we still have stylesheet loads pending. Otherwise, we'll wait until the
|
// we still have stylesheet loads pending. Otherwise, we'll wait until the
|
||||||
// stylesheets are all done loading.
|
// stylesheets are all done loading.
|
||||||
|
public:
|
||||||
void StartLayout(PRBool aIgnorePendingSheets);
|
void StartLayout(PRBool aIgnorePendingSheets);
|
||||||
|
protected:
|
||||||
PRBool IsTimeToNotify();
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FavorPerformanceHint(PRBool perfOverStarvation, PRUint32 starvationDelay);
|
FavorPerformanceHint(PRBool perfOverStarvation, PRUint32 starvationDelay);
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,7 @@ static NS_DEFINE_CID(kXTFServiceCID, NS_XTFSERVICE_CID);
|
||||||
#include "nsIMIMEHeaderParam.h"
|
#include "nsIMIMEHeaderParam.h"
|
||||||
#include "nsIDOMDragEvent.h"
|
#include "nsIDOMDragEvent.h"
|
||||||
#include "nsDOMDataTransfer.h"
|
#include "nsDOMDataTransfer.h"
|
||||||
|
#include "nsHtml5Module.h"
|
||||||
|
|
||||||
#ifdef IBMBIDI
|
#ifdef IBMBIDI
|
||||||
#include "nsIBidiKeyboard.h"
|
#include "nsIBidiKeyboard.h"
|
||||||
|
@ -3578,6 +3579,58 @@ nsContentUtils::CreateContextualFragment(nsIDOMNode* aContextNode,
|
||||||
// for compiling event handlers... so just bail out.
|
// for compiling event handlers... so just bail out.
|
||||||
nsCOMPtr<nsIDocument> document = node->GetOwnerDoc();
|
nsCOMPtr<nsIDocument> document = node->GetOwnerDoc();
|
||||||
NS_ENSURE_TRUE(document, NS_ERROR_NOT_AVAILABLE);
|
NS_ENSURE_TRUE(document, NS_ERROR_NOT_AVAILABLE);
|
||||||
|
|
||||||
|
PRBool bCaseSensitive = document->IsCaseSensitive();
|
||||||
|
|
||||||
|
nsCOMPtr<nsIHTMLDocument> htmlDoc(do_QueryInterface(document));
|
||||||
|
PRBool bHTML = htmlDoc && !bCaseSensitive;
|
||||||
|
|
||||||
|
if (bHTML && nsHtml5Module::Enabled) {
|
||||||
|
// See if the document has a cached fragment parser. nsHTMLDocument is the
|
||||||
|
// only one that should really have one at the moment.
|
||||||
|
nsCOMPtr<nsIParser> parser = document->GetFragmentParser();
|
||||||
|
if (parser) {
|
||||||
|
// Get the parser ready to use.
|
||||||
|
parser->Reset();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Create a new parser for this operation.
|
||||||
|
parser = nsHtml5Module::NewHtml5Parser();
|
||||||
|
if (!parser) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
document->SetFragmentParser(parser);
|
||||||
|
}
|
||||||
|
nsCOMPtr<nsIDOMDocumentFragment> frag;
|
||||||
|
rv = NS_NewDocumentFragment(getter_AddRefs(frag), document->NodeInfoManager());
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContent> contextAsContent = do_QueryInterface(aContextNode);
|
||||||
|
if (contextAsContent && !contextAsContent->IsNodeOfType(nsINode::eELEMENT)) {
|
||||||
|
contextAsContent = contextAsContent->GetParent();
|
||||||
|
if (contextAsContent && !contextAsContent->IsNodeOfType(nsINode::eELEMENT)) {
|
||||||
|
// can this even happen?
|
||||||
|
contextAsContent = nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contextAsContent) {
|
||||||
|
parser->ParseFragment(aFragment,
|
||||||
|
frag,
|
||||||
|
contextAsContent->Tag(),
|
||||||
|
contextAsContent->GetNameSpaceID(),
|
||||||
|
(document->GetCompatibilityMode() == eCompatibility_NavQuirks));
|
||||||
|
} else {
|
||||||
|
parser->ParseFragment(aFragment,
|
||||||
|
frag,
|
||||||
|
nsGkAtoms::body,
|
||||||
|
kNameSpaceID_XHTML,
|
||||||
|
(document->GetCompatibilityMode() == eCompatibility_NavQuirks));
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_ADDREF(*aReturn = frag);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
nsAutoTArray<nsString, 32> tagStack;
|
nsAutoTArray<nsString, 32> tagStack;
|
||||||
nsAutoString uriStr, nameStr;
|
nsAutoString uriStr, nameStr;
|
||||||
|
@ -3635,14 +3688,9 @@ nsContentUtils::CreateContextualFragment(nsIDOMNode* aContextNode,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCAutoString contentType;
|
nsCAutoString contentType;
|
||||||
PRBool bCaseSensitive = PR_TRUE;
|
|
||||||
nsAutoString buf;
|
nsAutoString buf;
|
||||||
document->GetContentType(buf);
|
document->GetContentType(buf);
|
||||||
LossyCopyUTF16toASCII(buf, contentType);
|
LossyCopyUTF16toASCII(buf, contentType);
|
||||||
bCaseSensitive = document->IsCaseSensitive();
|
|
||||||
|
|
||||||
nsCOMPtr<nsIHTMLDocument> htmlDoc(do_QueryInterface(document));
|
|
||||||
PRBool bHTML = htmlDoc && !bCaseSensitive;
|
|
||||||
|
|
||||||
// See if the document has a cached fragment parser. nsHTMLDocument is the
|
// See if the document has a cached fragment parser. nsHTMLDocument is the
|
||||||
// only one that should really have one at the moment.
|
// only one that should really have one at the moment.
|
||||||
|
|
|
@ -699,8 +699,9 @@ nsDOMAttribute::AppendChildTo(nsIContent* aKid, PRBool aNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsDOMAttribute::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsDOMAttribute::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on attribute child removal.");
|
||||||
if (aIndex != 0 || !mChild) {
|
if (aIndex != 0 || !mChild) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ public:
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult AppendChildTo(nsIContent* aKid, PRBool aNotify);
|
virtual nsresult AppendChildTo(nsIContent* aKid, PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
||||||
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
||||||
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
||||||
|
|
|
@ -3221,8 +3221,9 @@ nsDocument::AppendChildTo(nsIContent* aKid, PRBool aNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsDocument::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsDocument::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on document child removal.");
|
||||||
nsCOMPtr<nsIContent> oldKid = GetChildAt(aIndex);
|
nsCOMPtr<nsIContent> oldKid = GetChildAt(aIndex);
|
||||||
if (!oldKid) {
|
if (!oldKid) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -3234,7 +3235,8 @@ nsDocument::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult rv = nsGenericElement::doRemoveChildAt(aIndex, aNotify, oldKid,
|
nsresult rv = nsGenericElement::doRemoveChildAt(aIndex, aNotify, oldKid,
|
||||||
nsnull, this, mChildren);
|
nsnull, this, mChildren,
|
||||||
|
aMutationEvent);
|
||||||
mCachedRootContent = nsnull;
|
mCachedRootContent = nsnull;
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
|
@ -810,7 +810,7 @@ public:
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult AppendChildTo(nsIContent* aKid, PRBool aNotify);
|
virtual nsresult AppendChildTo(nsIContent* aKid, PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
||||||
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
||||||
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
||||||
|
|
|
@ -752,7 +752,7 @@ nsGenericDOMDataNode::InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsGenericDOMDataNode::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsGenericDOMDataNode::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@ public:
|
||||||
virtual PRInt32 IndexOf(nsINode* aPossibleChild) const;
|
virtual PRInt32 IndexOf(nsINode* aPossibleChild) const;
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
||||||
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
||||||
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
||||||
|
|
|
@ -3246,14 +3246,14 @@ nsGenericElement::doInsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsGenericElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsGenericElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIContent> oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex);
|
nsCOMPtr<nsIContent> oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex);
|
||||||
NS_ASSERTION(oldKid == GetChildAt(aIndex), "Unexpected child in RemoveChildAt");
|
NS_ASSERTION(oldKid == GetChildAt(aIndex), "Unexpected child in RemoveChildAt");
|
||||||
|
|
||||||
if (oldKid) {
|
if (oldKid) {
|
||||||
return doRemoveChildAt(aIndex, aNotify, oldKid, this, GetCurrentDoc(),
|
return doRemoveChildAt(aIndex, aNotify, oldKid, this, GetCurrentDoc(),
|
||||||
mAttrsAndChildren);
|
mAttrsAndChildren, aMutationEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -3264,7 +3264,8 @@ nsresult
|
||||||
nsGenericElement::doRemoveChildAt(PRUint32 aIndex, PRBool aNotify,
|
nsGenericElement::doRemoveChildAt(PRUint32 aIndex, PRBool aNotify,
|
||||||
nsIContent* aKid, nsIContent* aParent,
|
nsIContent* aKid, nsIContent* aParent,
|
||||||
nsIDocument* aDocument,
|
nsIDocument* aDocument,
|
||||||
nsAttrAndChildArray& aChildArray)
|
nsAttrAndChildArray& aChildArray,
|
||||||
|
PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(aParent || aDocument, "Must have document if no parent!");
|
NS_PRECONDITION(aParent || aDocument, "Must have document if no parent!");
|
||||||
NS_PRECONDITION(!aParent || aParent->GetCurrentDoc() == aDocument,
|
NS_PRECONDITION(!aParent || aParent->GetCurrentDoc() == aDocument,
|
||||||
|
@ -3300,6 +3301,7 @@ nsGenericElement::doRemoveChildAt(PRUint32 aIndex, PRBool aNotify,
|
||||||
|
|
||||||
mozAutoSubtreeModified subtree(nsnull, nsnull);
|
mozAutoSubtreeModified subtree(nsnull, nsnull);
|
||||||
if (aNotify &&
|
if (aNotify &&
|
||||||
|
aMutationEvent &&
|
||||||
nsContentUtils::HasMutationListeners(aKid,
|
nsContentUtils::HasMutationListeners(aKid,
|
||||||
NS_EVENT_BITS_MUTATION_NODEREMOVED, container)) {
|
NS_EVENT_BITS_MUTATION_NODEREMOVED, container)) {
|
||||||
mozAutoRemovableBlockerRemover blockerRemover;
|
mozAutoRemovableBlockerRemover blockerRemover;
|
||||||
|
|
|
@ -354,7 +354,7 @@ public:
|
||||||
virtual PRInt32 IndexOf(nsINode* aPossibleChild) const;
|
virtual PRInt32 IndexOf(nsINode* aPossibleChild) const;
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
||||||
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
virtual nsresult PostHandleEvent(nsEventChainPostVisitor& aVisitor);
|
||||||
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
virtual nsresult DispatchDOMEvent(nsEvent* aEvent, nsIDOMEvent* aDOMEvent,
|
||||||
|
@ -654,7 +654,8 @@ public:
|
||||||
static nsresult doRemoveChildAt(PRUint32 aIndex, PRBool aNotify,
|
static nsresult doRemoveChildAt(PRUint32 aIndex, PRBool aNotify,
|
||||||
nsIContent* aKid, nsIContent* aParent,
|
nsIContent* aKid, nsIContent* aParent,
|
||||||
nsIDocument* aDocument,
|
nsIDocument* aDocument,
|
||||||
nsAttrAndChildArray& aChildArray);
|
nsAttrAndChildArray& aChildArray,
|
||||||
|
PRBool aMutationEvent);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper methods for implementing querySelector/querySelectorAll
|
* Helper methods for implementing querySelector/querySelectorAll
|
||||||
|
|
|
@ -68,6 +68,7 @@
|
||||||
#include "nsLWBrkCIID.h"
|
#include "nsLWBrkCIID.h"
|
||||||
#include "nsIScriptElement.h"
|
#include "nsIScriptElement.h"
|
||||||
#include "nsAttrName.h"
|
#include "nsAttrName.h"
|
||||||
|
#include "nsHtml5Module.h"
|
||||||
|
|
||||||
static const char kMozStr[] = "moz";
|
static const char kMozStr[] = "moz";
|
||||||
|
|
||||||
|
@ -100,6 +101,7 @@ nsHTMLContentSerializer::AppendDocumentStart(nsIDOMDocument *aDocument,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "nsIHTMLDocument.h"
|
||||||
void
|
void
|
||||||
nsHTMLContentSerializer::SerializeAttributes(nsIContent* aContent,
|
nsHTMLContentSerializer::SerializeAttributes(nsIContent* aContent,
|
||||||
nsIDOMElement *aOriginalElement,
|
nsIDOMElement *aOriginalElement,
|
||||||
|
@ -108,19 +110,40 @@ nsHTMLContentSerializer::SerializeAttributes(nsIContent* aContent,
|
||||||
nsIAtom* aTagName,
|
nsIAtom* aTagName,
|
||||||
nsAString& aStr)
|
nsAString& aStr)
|
||||||
{
|
{
|
||||||
|
PRInt32 count = aContent->GetAttrCount();
|
||||||
|
if (!count)
|
||||||
|
return;
|
||||||
|
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
PRUint32 index, count;
|
|
||||||
nsAutoString nameStr, valueStr;
|
nsAutoString nameStr, valueStr;
|
||||||
|
|
||||||
count = aContent->GetAttrCount();
|
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(_mozStr, "_moz");
|
NS_NAMED_LITERAL_STRING(_mozStr, "_moz");
|
||||||
|
|
||||||
// Loop backward over the attributes, since the order they are stored in is
|
// HTML5 parser stored them in the order they were parsed so we want to
|
||||||
// the opposite of the order they were parsed in (see bug 213347 for reason).
|
// loop forward in that case.
|
||||||
// index is unsigned, hence index >= 0 is always true.
|
nsIDocument* doc = aContent->GetOwnerDocument();
|
||||||
for (index = count; index > 0; ) {
|
PRBool caseSensitive = doc && doc->IsCaseSensitive();
|
||||||
--index;
|
PRBool loopForward = PR_FALSE;
|
||||||
|
if (!caseSensitive) {
|
||||||
|
nsCOMPtr<nsIHTMLDocument> htmlDoc(do_QueryInterface(doc));
|
||||||
|
if (htmlDoc) {
|
||||||
|
loopForward = nsHtml5Module::Enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PRInt32 index, limit, step;
|
||||||
|
if (loopForward) {
|
||||||
|
index = 0;
|
||||||
|
limit = count;
|
||||||
|
step = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Loop backward over the attributes, since the order they are stored in is
|
||||||
|
// the opposite of the order they were parsed in (see bug 213347 for reason).
|
||||||
|
index = count - 1;
|
||||||
|
limit = -1;
|
||||||
|
step = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; index != limit; index += step) {
|
||||||
const nsAttrName* name = aContent->GetAttrNameAt(index);
|
const nsAttrName* name = aContent->GetAttrNameAt(index);
|
||||||
PRInt32 namespaceID = name->NamespaceID();
|
PRInt32 namespaceID = name->NamespaceID();
|
||||||
nsIAtom* attrName = name->LocalName();
|
nsIAtom* attrName = name->LocalName();
|
||||||
|
|
|
@ -15,20 +15,20 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=417255
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=417255">Mozilla Bug 417255</a>
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=417255">Mozilla Bug 417255</a>
|
||||||
<p id="display" style="width:800px"></p>
|
<div id="display" style="width:800px"></div>
|
||||||
|
|
||||||
<p><span id="s1" style="border:2px dotted red;"><span class="spacer" style="width:100px"></span>
|
<div><span id="s1" style="border:2px dotted red;"><span class="spacer" style="width:100px"></span>
|
||||||
<div style="width:500px; height:100px; background:yellow;"></div>
|
<div style="width:500px; height:100px; background:yellow;"></div>
|
||||||
<span class="spacer" style="width:200px"></span></span>
|
<span class="spacer" style="width:200px"></span></span></div>
|
||||||
|
|
||||||
<p><span id="s2" style="border:2px dotted red;"><span class="spacer" style="width:100px"></span>
|
<div><span id="s2" style="border:2px dotted red;"><span class="spacer" style="width:100px"></span>
|
||||||
<div style="width:150px; height:100px; background:yellow;"></div>
|
<div style="width:150px; height:100px; background:yellow;"></div>
|
||||||
<span class="spacer" style="width:200px"></span></span>
|
<span class="spacer" style="width:200px"></span></span></div>
|
||||||
|
|
||||||
<!-- test nested spans around the IB split -->
|
<!-- test nested spans around the IB split -->
|
||||||
<p><span id="s3" style="border:2px dotted red;"><span><span class="spacer" style="width:100px"></span>
|
<div><span id="s3" style="border:2px dotted red;"><span><span class="spacer" style="width:100px"></span>
|
||||||
<div style="width:500px; height:100px; background:yellow;"></div>
|
<div style="width:500px; height:100px; background:yellow;"></div>
|
||||||
<span class="spacer" style="width:200px"></span></span></span>
|
<span class="spacer" style="width:200px"></span></span></span></div>
|
||||||
|
|
||||||
<div id="content" style="display: none">
|
<div id="content" style="display: none">
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
// nsGenericElement
|
// nsGenericElement
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
|
|
||||||
// nsIContent
|
// nsIContent
|
||||||
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
virtual nsresult PreHandleEvent(nsEventChainPreVisitor& aVisitor);
|
||||||
|
@ -185,10 +185,11 @@ nsHTMLOptGroupElement::InsertChildAt(nsIContent* aKid,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLOptGroupElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsHTMLOptGroupElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutation events on optgroup child removal.");
|
||||||
nsSafeOptionListMutation safeMutation(GetSelect(), this, nsnull, aIndex);
|
nsSafeOptionListMutation safeMutation(GetSelect(), this, nsnull, aIndex);
|
||||||
nsresult rv = nsGenericHTMLElement::RemoveChildAt(aIndex, aNotify);
|
nsresult rv = nsGenericHTMLElement::RemoveChildAt(aIndex, aNotify, aMutationEvent);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
safeMutation.MutationFailed();
|
safeMutation.MutationFailed();
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,10 +208,11 @@ nsHTMLSelectElement::InsertChildAt(nsIContent* aKid,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLSelectElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsHTMLSelectElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on select child removal.");
|
||||||
nsSafeOptionListMutation safeMutation(this, this, nsnull, aIndex);
|
nsSafeOptionListMutation safeMutation(this, this, nsnull, aIndex);
|
||||||
nsresult rv = nsGenericHTMLFormElement::RemoveChildAt(aIndex, aNotify);
|
nsresult rv = nsGenericHTMLFormElement::RemoveChildAt(aIndex, aNotify, aMutationEvent);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
safeMutation.MutationFailed();
|
safeMutation.MutationFailed();
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,7 +271,7 @@ public:
|
||||||
virtual PRBool IsHTMLFocusable(PRBool *aIsFocusable, PRInt32 *aTabIndex);
|
virtual PRBool IsHTMLFocusable(PRBool *aIsFocusable, PRInt32 *aTabIndex);
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
|
|
||||||
// Overriden nsIFormControl methods
|
// Overriden nsIFormControl methods
|
||||||
NS_IMETHOD_(PRInt32) GetType() const { return NS_FORM_SELECT; }
|
NS_IMETHOD_(PRInt32) GetType() const { return NS_FORM_SELECT; }
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<s>
|
|
||||||
<form>a</form>
|
|
||||||
<iframe></iframe>
|
|
||||||
<script src=a></script>
|
|
||||||
<form></form>
|
|
||||||
<table>
|
|
||||||
<optgroup>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,14 +0,0 @@
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<s>
|
|
||||||
<form>a</form>
|
|
||||||
<iframe></iframe>
|
|
||||||
</s>
|
|
||||||
<form></form>
|
|
||||||
<form>
|
|
||||||
<select>
|
|
||||||
<optgroup></optgroup>
|
|
||||||
</select>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,4 +0,0 @@
|
||||||
<table>
|
|
||||||
<th>head</th>
|
|
||||||
<optgroup></optgroup>
|
|
||||||
</table>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<form>
|
|
||||||
<select>
|
|
||||||
<optgroup></optgroup>
|
|
||||||
</select>
|
|
||||||
</form>
|
|
||||||
<table>
|
|
||||||
<th>head</th>
|
|
||||||
</table>
|
|
|
@ -1,16 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" type="text/css"
|
|
||||||
href="bug448564_forms.css">
|
|
||||||
</link>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form>
|
|
||||||
<table>
|
|
||||||
<optgroup></optgroup>
|
|
||||||
</table>
|
|
||||||
<input type="button" value="button"></input>
|
|
||||||
</form>
|
|
||||||
<b>asdf</b>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,17 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" type="text/css"
|
|
||||||
href="bug448564_forms.css">
|
|
||||||
</link>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form>
|
|
||||||
<select>
|
|
||||||
<optgroup></optgroup>
|
|
||||||
</select>
|
|
||||||
<table></table>
|
|
||||||
<input type="button" value="button"></input>
|
|
||||||
</form>
|
|
||||||
<b>asdf</b>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,10 +1,4 @@
|
||||||
== bug448564-1_malformed.html bug448564-1_well-formed.html
|
== bug448564-1_malformed.html bug448564-1_well-formed.html
|
||||||
== bug448564-1_malformed.html bug448564-1_ideal.html
|
== bug448564-1_malformed.html bug448564-1_ideal.html
|
||||||
|
|
||||||
== bug448564-2_malformed.html bug448564-2_well-formed.html
|
|
||||||
|
|
||||||
== bug448564-3_malformed.html bug448564-3_well-formed.html
|
|
||||||
|
|
||||||
== bug448564-4a.html bug448564-4b.html
|
== bug448564-4a.html bug448564-4b.html
|
||||||
|
|
||||||
== bug448564-5_malformed.html bug448564-5_well-formed.html
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ REQUIRES = xpcom \
|
||||||
plugin \
|
plugin \
|
||||||
txtsvc \
|
txtsvc \
|
||||||
uriloader \
|
uriloader \
|
||||||
|
html5 \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CPPSRCS = \
|
CPPSRCS = \
|
||||||
|
|
|
@ -211,8 +211,6 @@ public:
|
||||||
NS_IMETHOD IsEnabled(PRInt32 aTag, PRBool* aReturn);
|
NS_IMETHOD IsEnabled(PRInt32 aTag, PRBool* aReturn);
|
||||||
NS_IMETHOD_(PRBool) IsFormOnStack();
|
NS_IMETHOD_(PRBool) IsFormOnStack();
|
||||||
|
|
||||||
virtual nsresult ProcessMETATag(nsIContent* aContent);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// nsIDebugDumpContent
|
// nsIDebugDumpContent
|
||||||
NS_IMETHOD DumpContentModel();
|
NS_IMETHOD DumpContentModel();
|
||||||
|
@ -2955,33 +2953,6 @@ HTMLContentSink::ProcessLINKTag(const nsIParserNode& aNode)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Extends nsContentSink::ProcessMETATag to grab the 'viewport' meta tag. This
|
|
||||||
* information is ignored by the generic content sink because it only stores
|
|
||||||
* http-equiv meta tags.
|
|
||||||
*
|
|
||||||
* Initially implemented for bug #436083
|
|
||||||
*/
|
|
||||||
nsresult
|
|
||||||
HTMLContentSink::ProcessMETATag(nsIContent *aContent) {
|
|
||||||
|
|
||||||
/* Call the superclass method. */
|
|
||||||
nsContentSink::ProcessMETATag(aContent);
|
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
|
||||||
|
|
||||||
/* Look for the viewport meta tag. If we find it, process it and put the
|
|
||||||
* data into the document header. */
|
|
||||||
if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::name,
|
|
||||||
nsGkAtoms::viewport, eIgnoreCase)) {
|
|
||||||
nsAutoString value;
|
|
||||||
aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::content, value);
|
|
||||||
rv = nsContentUtils::ProcessViewportInfo(mDocument, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void
|
void
|
||||||
HTMLContentSink::ForceReflow()
|
HTMLContentSink::ForceReflow()
|
||||||
|
|
|
@ -141,6 +141,7 @@
|
||||||
#include "nsRange.h"
|
#include "nsRange.h"
|
||||||
#include "mozAutoDocUpdate.h"
|
#include "mozAutoDocUpdate.h"
|
||||||
#include "nsCCUncollectableMarker.h"
|
#include "nsCCUncollectableMarker.h"
|
||||||
|
#include "nsHtml5Module.h"
|
||||||
#include "prprf.h"
|
#include "prprf.h"
|
||||||
|
|
||||||
#define NS_MAX_DOCUMENT_WRITE_DEPTH 20
|
#define NS_MAX_DOCUMENT_WRITE_DEPTH 20
|
||||||
|
@ -654,6 +655,11 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand,
|
||||||
PRBool aReset,
|
PRBool aReset,
|
||||||
nsIContentSink* aSink)
|
nsIContentSink* aSink)
|
||||||
{
|
{
|
||||||
|
PRBool loadAsHtml5 = nsHtml5Module::Enabled;
|
||||||
|
if (aSink) {
|
||||||
|
loadAsHtml5 = PR_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
nsCAutoString contentType;
|
nsCAutoString contentType;
|
||||||
aChannel->GetContentType(contentType);
|
aChannel->GetContentType(contentType);
|
||||||
|
|
||||||
|
@ -663,6 +669,11 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand,
|
||||||
|
|
||||||
mIsRegularHTML = PR_FALSE;
|
mIsRegularHTML = PR_FALSE;
|
||||||
mCompatMode = eCompatibility_FullStandards;
|
mCompatMode = eCompatibility_FullStandards;
|
||||||
|
loadAsHtml5 = PR_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(contentType.Equals("text/html") && aCommand && !nsCRT::strcmp(aCommand, "view"))) {
|
||||||
|
loadAsHtml5 = PR_FALSE;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
else {
|
else {
|
||||||
|
@ -709,8 +720,12 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsParser) {
|
if (needsParser) {
|
||||||
mParser = do_CreateInstance(kCParserCID, &rv);
|
if (loadAsHtml5) {
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
mParser = nsHtml5Module::NewHtml5Parser();
|
||||||
|
} else {
|
||||||
|
mParser = do_CreateInstance(kCParserCID, &rv);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PRInt32 textType = GET_BIDI_OPTION_TEXTTYPE(GetBidiOptions());
|
PRInt32 textType = GET_BIDI_OPTION_TEXTTYPE(GetBidiOptions());
|
||||||
|
@ -925,9 +940,10 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand,
|
||||||
// create the content sink
|
// create the content sink
|
||||||
nsCOMPtr<nsIContentSink> sink;
|
nsCOMPtr<nsIContentSink> sink;
|
||||||
|
|
||||||
if (aSink)
|
if (aSink) {
|
||||||
|
NS_ASSERTION((!loadAsHtml5), "Panic: We are loading as HTML5 and someone tries to set an external sink!");
|
||||||
sink = aSink;
|
sink = aSink;
|
||||||
else {
|
} else {
|
||||||
if (IsXHTML()) {
|
if (IsXHTML()) {
|
||||||
nsCOMPtr<nsIXMLContentSink> xmlsink;
|
nsCOMPtr<nsIXMLContentSink> xmlsink;
|
||||||
rv = NS_NewXMLContentSink(getter_AddRefs(xmlsink), this, uri,
|
rv = NS_NewXMLContentSink(getter_AddRefs(xmlsink), this, uri,
|
||||||
|
@ -935,12 +951,17 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand,
|
||||||
|
|
||||||
sink = xmlsink;
|
sink = xmlsink;
|
||||||
} else {
|
} else {
|
||||||
nsCOMPtr<nsIHTMLContentSink> htmlsink;
|
if (loadAsHtml5) {
|
||||||
|
nsHtml5Module::Initialize(mParser, this, uri, docShell, aChannel);
|
||||||
|
sink = mParser->GetContentSink();
|
||||||
|
} else {
|
||||||
|
nsCOMPtr<nsIHTMLContentSink> htmlsink;
|
||||||
|
|
||||||
rv = NS_NewHTMLContentSink(getter_AddRefs(htmlsink), this, uri,
|
rv = NS_NewHTMLContentSink(getter_AddRefs(htmlsink), this, uri,
|
||||||
docShell, aChannel);
|
docShell, aChannel);
|
||||||
|
|
||||||
sink = htmlsink;
|
sink = htmlsink;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
@ -1784,6 +1805,8 @@ nsHTMLDocument::OpenCommon(const nsACString& aContentType, PRBool aReplace)
|
||||||
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
|
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRBool loadAsHtml5 = nsHtml5Module::Enabled;
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|
||||||
// If we already have a parser we ignore the document.open call.
|
// If we already have a parser we ignore the document.open call.
|
||||||
|
@ -1935,7 +1958,12 @@ nsHTMLDocument::OpenCommon(const nsACString& aContentType, PRBool aReplace)
|
||||||
// resetting the document.
|
// resetting the document.
|
||||||
mSecurityInfo = securityInfo;
|
mSecurityInfo = securityInfo;
|
||||||
|
|
||||||
mParser = do_CreateInstance(kCParserCID, &rv);
|
if (loadAsHtml5) {
|
||||||
|
mParser = nsHtml5Module::NewHtml5Parser();
|
||||||
|
rv = NS_OK;
|
||||||
|
} else {
|
||||||
|
mParser = do_CreateInstance(kCParserCID, &rv);
|
||||||
|
}
|
||||||
|
|
||||||
// This will be propagated to the parser when someone actually calls write()
|
// This will be propagated to the parser when someone actually calls write()
|
||||||
mContentType = aContentType;
|
mContentType = aContentType;
|
||||||
|
@ -1943,18 +1971,22 @@ nsHTMLDocument::OpenCommon(const nsACString& aContentType, PRBool aReplace)
|
||||||
mWriteState = eDocumentOpened;
|
mWriteState = eDocumentOpened;
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv)) {
|
if (NS_SUCCEEDED(rv)) {
|
||||||
nsCOMPtr<nsIHTMLContentSink> sink;
|
if (loadAsHtml5) {
|
||||||
|
nsHtml5Module::Initialize(mParser, this, uri, shell, channel);
|
||||||
|
} else {
|
||||||
|
nsCOMPtr<nsIHTMLContentSink> sink;
|
||||||
|
|
||||||
rv = NS_NewHTMLContentSink(getter_AddRefs(sink), this, uri, shell,
|
rv = NS_NewHTMLContentSink(getter_AddRefs(sink), this, uri, shell,
|
||||||
channel);
|
channel);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
// Don't use a parser without a content sink.
|
// Don't use a parser without a content sink.
|
||||||
mParser = nsnull;
|
mParser = nsnull;
|
||||||
mWriteState = eNotWriting;
|
mWriteState = eNotWriting;
|
||||||
return rv;
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
mParser->SetContentSink(sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
mParser->SetContentSink(sink);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepare the docshell and the document viewer for the impending
|
// Prepare the docshell and the document viewer for the impending
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
#
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (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/MPL/
|
||||||
|
#
|
||||||
|
# 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.org code.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# Netscape Communications Corporation.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
DEPTH = ../../..
|
||||||
|
topsrcdir = @top_srcdir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
|
||||||
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
|
DIRS = public src
|
||||||
|
|
||||||
|
# ifdef ENABLE_TESTS
|
||||||
|
# DIRS += test
|
||||||
|
# endif
|
||||||
|
|
||||||
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,484 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
import nu.validator.htmlparser.annotation.IdType;
|
||||||
|
import nu.validator.htmlparser.annotation.Local;
|
||||||
|
import nu.validator.htmlparser.annotation.NsUri;
|
||||||
|
import nu.validator.htmlparser.annotation.Prefix;
|
||||||
|
import nu.validator.htmlparser.annotation.QName;
|
||||||
|
import nu.validator.htmlparser.common.XmlViolationPolicy;
|
||||||
|
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Be careful with this class. QName is the name in from HTML tokenization.
|
||||||
|
* Otherwise, please refer to the interface doc.
|
||||||
|
*
|
||||||
|
* @version $Id: AttributesImpl.java 206 2008-03-20 14:09:29Z hsivonen $
|
||||||
|
* @author hsivonen
|
||||||
|
*/
|
||||||
|
public final class HtmlAttributes implements Attributes {
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
private static final AttributeName[] EMPTY_ATTRIBUTENAMES = new AttributeName[0];
|
||||||
|
|
||||||
|
private static final String[] EMPTY_STRINGS = new String[0];
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
public static final HtmlAttributes EMPTY_ATTRIBUTES = new HtmlAttributes(
|
||||||
|
AttributeName.HTML);
|
||||||
|
|
||||||
|
private int mode;
|
||||||
|
|
||||||
|
private int length;
|
||||||
|
|
||||||
|
private AttributeName[] names;
|
||||||
|
|
||||||
|
private String[] values; // XXX perhaps make this @NoLength?
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
private String idValue;
|
||||||
|
|
||||||
|
private int xmlnsLength;
|
||||||
|
|
||||||
|
private AttributeName[] xmlnsNames;
|
||||||
|
|
||||||
|
private String[] xmlnsValues;
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
public HtmlAttributes(int mode) {
|
||||||
|
this.mode = mode;
|
||||||
|
this.length = 0;
|
||||||
|
this.names = new AttributeName[5]; // covers 98.3% of elements
|
||||||
|
// according to
|
||||||
|
// Hixie
|
||||||
|
this.values = new String[5];
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
this.idValue = null;
|
||||||
|
|
||||||
|
this.xmlnsLength = 0;
|
||||||
|
|
||||||
|
this.xmlnsNames = HtmlAttributes.EMPTY_ATTRIBUTENAMES;
|
||||||
|
|
||||||
|
this.xmlnsValues = HtmlAttributes.EMPTY_STRINGS;
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public HtmlAttributes(HtmlAttributes other) {
|
||||||
|
this.mode = other.mode;
|
||||||
|
this.length = other.length;
|
||||||
|
this.names = new AttributeName[other.length];
|
||||||
|
this.values = new String[other.length];
|
||||||
|
// [NOCPP[
|
||||||
|
this.idValue = other.idValue;
|
||||||
|
this.xmlnsLength = other.xmlnsLength;
|
||||||
|
this.xmlnsNames = new AttributeName[other.xmlnsLength];
|
||||||
|
this.xmlnsValues = new String[other.xmlnsLength];
|
||||||
|
// ]NOCPP]
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void destructor() {
|
||||||
|
clear(0);
|
||||||
|
Portability.releaseArray(names);
|
||||||
|
Portability.releaseArray(values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only use with a static argument
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getIndex(AttributeName name) {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
if (names[i] == name) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
public int getIndex(String qName) {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
if (names[i].getQName(mode).equals(qName)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIndex(String uri, String localName) {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
if (names[i].getLocal(mode).equals(localName)
|
||||||
|
&& names[i].getUri(mode).equals(uri)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @IdType String getType(String qName) {
|
||||||
|
int index = getIndex(qName);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getType(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @IdType String getType(String uri, String localName) {
|
||||||
|
int index = getIndex(uri, localName);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getType(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue(String qName) {
|
||||||
|
int index = getIndex(qName);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getValue(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue(String uri, String localName) {
|
||||||
|
int index = getIndex(uri, localName);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getValue(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Local String getLocalName(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index].getLocal(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
public @QName String getQName(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index].getQName(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @IdType String getType(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index].getType(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
public AttributeName getAttributeName(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NsUri String getURI(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index].getUri(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Prefix String getPrefix(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index].getPrefix(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue(int index) {
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return values[index];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only use with static argument.
|
||||||
|
*
|
||||||
|
* @see org.xml.sax.Attributes#getValue(java.lang.String)
|
||||||
|
*/
|
||||||
|
public String getValue(AttributeName name) {
|
||||||
|
int index = getIndex(name);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getValue(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return idValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getXmlnsLength() {
|
||||||
|
return xmlnsLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Local String getXmlnsLocalName(int index) {
|
||||||
|
if (index < xmlnsLength && index >= 0) {
|
||||||
|
return xmlnsNames[index].getLocal(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NsUri String getXmlnsURI(int index) {
|
||||||
|
if (index < xmlnsLength && index >= 0) {
|
||||||
|
return xmlnsNames[index].getUri(mode);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getXmlnsValue(int index) {
|
||||||
|
if (index < xmlnsLength && index >= 0) {
|
||||||
|
return xmlnsValues[index];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getXmlnsIndex(AttributeName name) {
|
||||||
|
for (int i = 0; i < xmlnsLength; i++) {
|
||||||
|
if (xmlnsNames[i] == name) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getXmlnsValue(AttributeName name) {
|
||||||
|
int index = getXmlnsIndex(name);
|
||||||
|
if (index == -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return getXmlnsValue(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AttributeName getXmlnsAttributeName(int index) {
|
||||||
|
if (index < xmlnsLength && index >= 0) {
|
||||||
|
return xmlnsNames[index];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
void addAttribute(AttributeName name, String value
|
||||||
|
// [NOCPP[
|
||||||
|
, XmlViolationPolicy xmlnsPolicy
|
||||||
|
// ]NOCPP]
|
||||||
|
) throws SAXException {
|
||||||
|
// [NOCPP[
|
||||||
|
if (name == AttributeName.ID) {
|
||||||
|
idValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name.isXmlns()) {
|
||||||
|
if (xmlnsNames.length == xmlnsLength) {
|
||||||
|
int newLen = xmlnsLength == 0 ? 2 : xmlnsLength << 1;
|
||||||
|
AttributeName[] newNames = new AttributeName[newLen];
|
||||||
|
System.arraycopy(xmlnsNames, 0, newNames, 0, xmlnsNames.length);
|
||||||
|
xmlnsNames = newNames;
|
||||||
|
String[] newValues = new String[newLen];
|
||||||
|
System.arraycopy(xmlnsValues, 0, newValues, 0, xmlnsValues.length);
|
||||||
|
xmlnsValues = newValues;
|
||||||
|
}
|
||||||
|
xmlnsNames[xmlnsLength] = name;
|
||||||
|
xmlnsValues[xmlnsLength] = value;
|
||||||
|
xmlnsLength++;
|
||||||
|
switch (xmlnsPolicy) {
|
||||||
|
case FATAL:
|
||||||
|
// this is ugly
|
||||||
|
throw new SAXException("Saw an xmlns attribute.");
|
||||||
|
case ALTER_INFOSET:
|
||||||
|
return;
|
||||||
|
case ALLOW:
|
||||||
|
// fall through
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
if (names.length == length) {
|
||||||
|
int newLen = length << 1; // The first growth covers virtually
|
||||||
|
// 100% of elements according to
|
||||||
|
// Hixie
|
||||||
|
AttributeName[] newNames = new AttributeName[newLen];
|
||||||
|
System.arraycopy(names, 0, newNames, 0, names.length);
|
||||||
|
Portability.releaseArray(names);
|
||||||
|
names = newNames;
|
||||||
|
String[] newValues = new String[newLen];
|
||||||
|
System.arraycopy(values, 0, newValues, 0, values.length);
|
||||||
|
Portability.releaseArray(values);
|
||||||
|
values = newValues;
|
||||||
|
}
|
||||||
|
names[length] = name;
|
||||||
|
values[length] = value;
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear(int m) {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
names[i].release();
|
||||||
|
names[i] = null;
|
||||||
|
Portability.releaseString(values[i]);
|
||||||
|
values[i] = null;
|
||||||
|
}
|
||||||
|
length = 0;
|
||||||
|
mode = m;
|
||||||
|
// [NOCPP[
|
||||||
|
idValue = null;
|
||||||
|
for (int i = 0; i < xmlnsLength; i++) {
|
||||||
|
xmlnsNames[i] = null;
|
||||||
|
xmlnsValues[i] = null;
|
||||||
|
}
|
||||||
|
xmlnsLength = 0;
|
||||||
|
// ]NOCPP]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is used in C++ to release special <code>isindex</code>
|
||||||
|
* attribute values whose ownership is not transferred.
|
||||||
|
*/
|
||||||
|
void releaseValue(int i) {
|
||||||
|
Portability.releaseString(values[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is only used for <code>AttributeName</code> ownership transfer
|
||||||
|
* in the isindex case to avoid freeing custom names twice in C++.
|
||||||
|
*/
|
||||||
|
void clearWithoutReleasingContents() {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
names[i] = null;
|
||||||
|
values[i] = null;
|
||||||
|
}
|
||||||
|
length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean contains(AttributeName name) {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
if (name.equalsAnother(names[i])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// [NOCPP[
|
||||||
|
for (int i = 0; i < xmlnsLength; i++) {
|
||||||
|
if (name.equalsAnother(xmlnsNames[i])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ]NOCPP]
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adjustForMath() {
|
||||||
|
mode = AttributeName.MATHML;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adjustForSvg() {
|
||||||
|
mode = AttributeName.SVG;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
void processNonNcNames(TreeBuilder<?> treeBuilder, XmlViolationPolicy namePolicy) throws SAXException {
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
AttributeName attName = names[i];
|
||||||
|
if (!attName.isNcName(mode)) {
|
||||||
|
String name = attName.getLocal(mode);
|
||||||
|
switch (namePolicy) {
|
||||||
|
case ALTER_INFOSET:
|
||||||
|
names[i] = AttributeName.create(NCName.escapeName(name));
|
||||||
|
// fall through
|
||||||
|
case ALLOW:
|
||||||
|
if (attName != AttributeName.XML_LANG) {
|
||||||
|
treeBuilder.warn("Attribute \u201C" + name + "\u201D is not serializable as XML 1.0.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FATAL:
|
||||||
|
treeBuilder.fatal("Attribute \u201C" + name + "\u201D is not serializable as XML 1.0.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void merge(HtmlAttributes attributes) throws SAXException {
|
||||||
|
int len = attributes.getLength();
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
AttributeName name = attributes.getAttributeName(i);
|
||||||
|
if (!contains(name)) {
|
||||||
|
addAttribute(name, attributes.getValue(i), XmlViolationPolicy.ALLOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,696 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import nu.validator.htmlparser.annotation.NoLength;
|
||||||
|
import nu.validator.htmlparser.common.ByteReadable;
|
||||||
|
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
public abstract class MetaScanner {
|
||||||
|
|
||||||
|
private static final @NoLength char[] CHARSET = "charset".toCharArray();
|
||||||
|
|
||||||
|
private static final @NoLength char[] CONTENT = "content".toCharArray();
|
||||||
|
|
||||||
|
private static final int NO = 0;
|
||||||
|
|
||||||
|
private static final int M = 1;
|
||||||
|
|
||||||
|
private static final int E = 2;
|
||||||
|
|
||||||
|
private static final int T = 3;
|
||||||
|
|
||||||
|
private static final int A = 4;
|
||||||
|
|
||||||
|
private static final int DATA = 0;
|
||||||
|
|
||||||
|
private static final int TAG_OPEN = 1;
|
||||||
|
|
||||||
|
private static final int SCAN_UNTIL_GT = 2;
|
||||||
|
|
||||||
|
private static final int TAG_NAME = 3;
|
||||||
|
|
||||||
|
private static final int BEFORE_ATTRIBUTE_NAME = 4;
|
||||||
|
|
||||||
|
private static final int ATTRIBUTE_NAME = 5;
|
||||||
|
|
||||||
|
private static final int AFTER_ATTRIBUTE_NAME = 6;
|
||||||
|
|
||||||
|
private static final int BEFORE_ATTRIBUTE_VALUE = 7;
|
||||||
|
|
||||||
|
private static final int ATTRIBUTE_VALUE_DOUBLE_QUOTED = 8;
|
||||||
|
|
||||||
|
private static final int ATTRIBUTE_VALUE_SINGLE_QUOTED = 9;
|
||||||
|
|
||||||
|
private static final int ATTRIBUTE_VALUE_UNQUOTED = 10;
|
||||||
|
|
||||||
|
private static final int AFTER_ATTRIBUTE_VALUE_QUOTED = 11;
|
||||||
|
|
||||||
|
private static final int MARKUP_DECLARATION_OPEN = 13;
|
||||||
|
|
||||||
|
private static final int MARKUP_DECLARATION_HYPHEN = 14;
|
||||||
|
|
||||||
|
private static final int COMMENT_START = 15;
|
||||||
|
|
||||||
|
private static final int COMMENT_START_DASH = 16;
|
||||||
|
|
||||||
|
private static final int COMMENT = 17;
|
||||||
|
|
||||||
|
private static final int COMMENT_END_DASH = 18;
|
||||||
|
|
||||||
|
private static final int COMMENT_END = 19;
|
||||||
|
|
||||||
|
private static final int SELF_CLOSING_START_TAG = 20;
|
||||||
|
|
||||||
|
protected ByteReadable readable;
|
||||||
|
|
||||||
|
private int metaState = NO;
|
||||||
|
|
||||||
|
private int contentIndex = -1;
|
||||||
|
|
||||||
|
private int charsetIndex = -1;
|
||||||
|
|
||||||
|
protected int stateSave = DATA;
|
||||||
|
|
||||||
|
private int strBufLen;
|
||||||
|
|
||||||
|
private char[] strBuf;
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param source
|
||||||
|
* @param errorHandler
|
||||||
|
* @param publicId
|
||||||
|
* @param systemId
|
||||||
|
*/
|
||||||
|
public MetaScanner() {
|
||||||
|
this.readable = null;
|
||||||
|
this.metaState = NO;
|
||||||
|
this.contentIndex = -1;
|
||||||
|
this.charsetIndex = -1;
|
||||||
|
this.stateSave = DATA;
|
||||||
|
strBufLen = 0;
|
||||||
|
strBuf = new char[36];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* -1 means end.
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
protected int read() throws IOException {
|
||||||
|
return readable.readByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
// WARNING When editing this, makes sure the bytecode length shown by javap
|
||||||
|
// stays under 8000 bytes!
|
||||||
|
protected final void stateLoop(int state)
|
||||||
|
throws SAXException, IOException {
|
||||||
|
int c = -1;
|
||||||
|
boolean reconsume = false;
|
||||||
|
stateloop: for (;;) {
|
||||||
|
switch (state) {
|
||||||
|
case DATA:
|
||||||
|
dataloop: for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '<':
|
||||||
|
state = MetaScanner.TAG_OPEN;
|
||||||
|
break dataloop; // FALL THROUGH continue
|
||||||
|
// stateloop;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
|
||||||
|
case TAG_OPEN:
|
||||||
|
tagopenloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case 'm':
|
||||||
|
case 'M':
|
||||||
|
metaState = M;
|
||||||
|
state = MetaScanner.TAG_NAME;
|
||||||
|
break tagopenloop;
|
||||||
|
// continue stateloop;
|
||||||
|
case '!':
|
||||||
|
state = MetaScanner.MARKUP_DECLARATION_OPEN;
|
||||||
|
continue stateloop;
|
||||||
|
case '?':
|
||||||
|
case '/':
|
||||||
|
state = MetaScanner.SCAN_UNTIL_GT;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
|
||||||
|
metaState = NO;
|
||||||
|
state = MetaScanner.TAG_NAME;
|
||||||
|
break tagopenloop;
|
||||||
|
// continue stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
reconsume = true;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALL THROUGH DON'T REORDER
|
||||||
|
case TAG_NAME:
|
||||||
|
tagnameloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
|
||||||
|
break tagnameloop;
|
||||||
|
// continue stateloop;
|
||||||
|
case '/':
|
||||||
|
state = MetaScanner.SELF_CLOSING_START_TAG;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
case 'e':
|
||||||
|
case 'E':
|
||||||
|
if (metaState == M) {
|
||||||
|
metaState = E;
|
||||||
|
} else {
|
||||||
|
metaState = NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case 't':
|
||||||
|
case 'T':
|
||||||
|
if (metaState == E) {
|
||||||
|
metaState = T;
|
||||||
|
} else {
|
||||||
|
metaState = NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case 'a':
|
||||||
|
case 'A':
|
||||||
|
if (metaState == T) {
|
||||||
|
metaState = A;
|
||||||
|
} else {
|
||||||
|
metaState = NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
metaState = NO;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case BEFORE_ATTRIBUTE_NAME:
|
||||||
|
beforeattributenameloop: for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Consume the next input character:
|
||||||
|
*/
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
continue;
|
||||||
|
case '/':
|
||||||
|
state = MetaScanner.SELF_CLOSING_START_TAG;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = DATA;
|
||||||
|
continue stateloop;
|
||||||
|
case 'c':
|
||||||
|
case 'C':
|
||||||
|
contentIndex = 0;
|
||||||
|
charsetIndex = 0;
|
||||||
|
state = MetaScanner.ATTRIBUTE_NAME;
|
||||||
|
break beforeattributenameloop;
|
||||||
|
default:
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
state = MetaScanner.ATTRIBUTE_NAME;
|
||||||
|
break beforeattributenameloop;
|
||||||
|
// continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case ATTRIBUTE_NAME:
|
||||||
|
attributenameloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
state = MetaScanner.AFTER_ATTRIBUTE_NAME;
|
||||||
|
continue stateloop;
|
||||||
|
case '/':
|
||||||
|
state = MetaScanner.SELF_CLOSING_START_TAG;
|
||||||
|
continue stateloop;
|
||||||
|
case '=':
|
||||||
|
strBufLen = 0;
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_VALUE;
|
||||||
|
break attributenameloop;
|
||||||
|
// continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
if (metaState == A) {
|
||||||
|
if (c >= 'A' && c <= 'Z') {
|
||||||
|
c += 0x20;
|
||||||
|
}
|
||||||
|
if (contentIndex == 6) {
|
||||||
|
contentIndex = -1;
|
||||||
|
} else if (contentIndex > -1
|
||||||
|
&& contentIndex < 6
|
||||||
|
&& (c == CONTENT[contentIndex + 1])) {
|
||||||
|
contentIndex++;
|
||||||
|
}
|
||||||
|
if (charsetIndex == 6) {
|
||||||
|
charsetIndex = -1;
|
||||||
|
} else if (charsetIndex > -1
|
||||||
|
&& charsetIndex < 6
|
||||||
|
&& (c == CHARSET[charsetIndex + 1])) {
|
||||||
|
charsetIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case BEFORE_ATTRIBUTE_VALUE:
|
||||||
|
beforeattributevalueloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
continue;
|
||||||
|
case '"':
|
||||||
|
state = MetaScanner.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
|
||||||
|
break beforeattributevalueloop;
|
||||||
|
// continue stateloop;
|
||||||
|
case '\'':
|
||||||
|
state = MetaScanner.ATTRIBUTE_VALUE_SINGLE_QUOTED;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
if (charsetIndex == 6 || contentIndex == 6) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
state = MetaScanner.ATTRIBUTE_VALUE_UNQUOTED;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case ATTRIBUTE_VALUE_DOUBLE_QUOTED:
|
||||||
|
attributevaluedoublequotedloop: for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '"':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||||||
|
break attributevaluedoublequotedloop;
|
||||||
|
// continue stateloop;
|
||||||
|
default:
|
||||||
|
if (metaState == A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case AFTER_ATTRIBUTE_VALUE_QUOTED:
|
||||||
|
afterattributevaluequotedloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
|
||||||
|
continue stateloop;
|
||||||
|
case '/':
|
||||||
|
state = MetaScanner.SELF_CLOSING_START_TAG;
|
||||||
|
break afterattributevaluequotedloop;
|
||||||
|
// continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
|
||||||
|
reconsume = true;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case SELF_CLOSING_START_TAG:
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
|
||||||
|
reconsume = true;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case ATTRIBUTE_VALUE_UNQUOTED:
|
||||||
|
for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
|
||||||
|
case '\u000C':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
if (metaState == A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case AFTER_ATTRIBUTE_NAME:
|
||||||
|
for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\u000C':
|
||||||
|
continue;
|
||||||
|
case '/':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.SELF_CLOSING_START_TAG;
|
||||||
|
continue stateloop;
|
||||||
|
case '=':
|
||||||
|
state = MetaScanner.BEFORE_ATTRIBUTE_VALUE;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
case 'c':
|
||||||
|
case 'C':
|
||||||
|
contentIndex = 0;
|
||||||
|
charsetIndex = 0;
|
||||||
|
state = MetaScanner.ATTRIBUTE_NAME;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
state = MetaScanner.ATTRIBUTE_NAME;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case MARKUP_DECLARATION_OPEN:
|
||||||
|
markupdeclarationopenloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.MARKUP_DECLARATION_HYPHEN;
|
||||||
|
break markupdeclarationopenloop;
|
||||||
|
// continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.SCAN_UNTIL_GT;
|
||||||
|
reconsume = true;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case MARKUP_DECLARATION_HYPHEN:
|
||||||
|
markupdeclarationhyphenloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.COMMENT_START;
|
||||||
|
break markupdeclarationhyphenloop;
|
||||||
|
// continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.SCAN_UNTIL_GT;
|
||||||
|
reconsume = true;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case COMMENT_START:
|
||||||
|
commentstartloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.COMMENT_START_DASH;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.COMMENT;
|
||||||
|
break commentstartloop;
|
||||||
|
// continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case COMMENT:
|
||||||
|
commentloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.COMMENT_END_DASH;
|
||||||
|
break commentloop;
|
||||||
|
// continue stateloop;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case COMMENT_END_DASH:
|
||||||
|
commentenddashloop: for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.COMMENT_END;
|
||||||
|
break commentenddashloop;
|
||||||
|
// continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.COMMENT;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FALLTHRU DON'T REORDER
|
||||||
|
case COMMENT_END:
|
||||||
|
for (;;) {
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
case '-':
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.COMMENT;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case COMMENT_START_DASH:
|
||||||
|
c = read();
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '-':
|
||||||
|
state = MetaScanner.COMMENT_END;
|
||||||
|
continue stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
state = MetaScanner.COMMENT;
|
||||||
|
continue stateloop;
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case ATTRIBUTE_VALUE_SINGLE_QUOTED:
|
||||||
|
for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '\'':
|
||||||
|
if (tryCharset()) {
|
||||||
|
break stateloop;
|
||||||
|
}
|
||||||
|
state = MetaScanner.AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
if (metaState == A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// XXX reorder point
|
||||||
|
case SCAN_UNTIL_GT:
|
||||||
|
for (;;) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = false;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case -1:
|
||||||
|
break stateloop;
|
||||||
|
case '>':
|
||||||
|
state = MetaScanner.DATA;
|
||||||
|
continue stateloop;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stateSave = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addToBuffer(int c) {
|
||||||
|
if (strBufLen == strBuf.length) {
|
||||||
|
char[] newBuf = new char[strBuf.length + (strBuf.length << 1)];
|
||||||
|
System.arraycopy(strBuf, 0, newBuf, 0, strBuf.length);
|
||||||
|
Portability.releaseArray(strBuf);
|
||||||
|
strBuf = newBuf;
|
||||||
|
}
|
||||||
|
strBuf[strBufLen++] = (char)c;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean tryCharset() throws SAXException {
|
||||||
|
if (metaState != A || !(contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String attVal = Portability.newStringFromBuffer(strBuf, 0, strBufLen);
|
||||||
|
String candidateEncoding;
|
||||||
|
if (contentIndex == 6) {
|
||||||
|
candidateEncoding = TreeBuilder.extractCharsetFromContent(attVal);
|
||||||
|
Portability.releaseString(attVal);
|
||||||
|
} else {
|
||||||
|
candidateEncoding = attVal;
|
||||||
|
}
|
||||||
|
if (candidateEncoding == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
boolean rv = tryCharset(candidateEncoding);
|
||||||
|
Portability.releaseString(candidateEncoding);
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean tryCharset(String encoding) throws SAXException;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
import nu.validator.htmlparser.annotation.Literal;
|
||||||
|
import nu.validator.htmlparser.annotation.Local;
|
||||||
|
import nu.validator.htmlparser.annotation.NoLength;
|
||||||
|
|
||||||
|
public final class Portability {
|
||||||
|
|
||||||
|
// Allocating methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a new local name object. In C++, the refcount must be set up in such a way that
|
||||||
|
* calling <code>releaseLocal</code> on the return value balances the refcount set by this method.
|
||||||
|
*/
|
||||||
|
public static @Local String newLocalNameFromBuffer(@NoLength char[] buf, int offset, int length) {
|
||||||
|
return new String(buf, offset, length).intern();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String newStringFromBuffer(@NoLength char[] buf, int offset, int length) {
|
||||||
|
return new String(buf, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String newEmptyString() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String newStringFromLiteral(@Literal String literal) {
|
||||||
|
return literal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX get rid of this
|
||||||
|
public static char[] newCharArrayFromLocal(@Local String local) {
|
||||||
|
return local.toCharArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static char[] newCharArrayFromString(String string) {
|
||||||
|
return string.toCharArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deallocation methods
|
||||||
|
|
||||||
|
public static void releaseString(String str) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void retainLocal(@Local String local) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This MUST be a no-op on locals that are known at compile time.
|
||||||
|
* @param local
|
||||||
|
*/
|
||||||
|
public static void releaseLocal(@Local String local) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Releases a Java array. This method is magically replaced by a macro in C++.
|
||||||
|
* @param arr
|
||||||
|
*/
|
||||||
|
public static void releaseArray(Object arr) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void retainElement(Object elt) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void releaseElement(Object elt) {
|
||||||
|
// No-op in Java
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comparison methods
|
||||||
|
|
||||||
|
public static boolean localEqualsBuffer(@Local String local, @NoLength char[] buf, int offset, int length) {
|
||||||
|
if (local.length() != length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
if (local.charAt(i) != buf[offset + i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(@Literal String lowerCaseLiteral,
|
||||||
|
String string) {
|
||||||
|
if (string == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (lowerCaseLiteral.length() > string.length()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < lowerCaseLiteral.length(); i++) {
|
||||||
|
char c0 = lowerCaseLiteral.charAt(i);
|
||||||
|
char c1 = string.charAt(i);
|
||||||
|
if (c1 >= 'A' && c1 <= 'Z') {
|
||||||
|
c1 += 0x20;
|
||||||
|
}
|
||||||
|
if (c0 != c1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean lowerCaseLiteralEqualsIgnoreAsciiCaseString(@Literal String lowerCaseLiteral,
|
||||||
|
String string) {
|
||||||
|
if (string == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (lowerCaseLiteral.length() != string.length()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < lowerCaseLiteral.length(); i++) {
|
||||||
|
char c0 = lowerCaseLiteral.charAt(i);
|
||||||
|
char c1 = string.charAt(i);
|
||||||
|
if (c1 >= 'A' && c1 <= 'Z') {
|
||||||
|
c1 += 0x20;
|
||||||
|
}
|
||||||
|
if (c0 != c1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean literalEqualsString(@Literal String literal, String string) {
|
||||||
|
return literal.equals(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static char[] isIndexPrompt() {
|
||||||
|
return "This is a searchable index. Insert your search keywords here: ".toCharArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void delete(Object o) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteArray(Object o) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
The *.java files in this directory are the source files from which the
|
||||||
|
corresponding nsHtml5*.cpp and nsHtml5*.h files were generated in
|
||||||
|
../src/.
|
||||||
|
|
||||||
|
You can obtain the full Java version of the parser and the translator
|
||||||
|
program from
|
||||||
|
svn co http://svn.versiondude.net/whattf/htmlparser/trunk/ htmlparser
|
||||||
|
|
||||||
|
See run-cpp-translate.sh at the top level of the SVN checkout.
|
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2007-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
import nu.validator.htmlparser.annotation.Local;
|
||||||
|
import nu.validator.htmlparser.annotation.NsUri;
|
||||||
|
|
||||||
|
final class StackNode<T> {
|
||||||
|
final int group;
|
||||||
|
|
||||||
|
final @Local String name;
|
||||||
|
|
||||||
|
final @Local String popName;
|
||||||
|
|
||||||
|
final @NsUri String ns;
|
||||||
|
|
||||||
|
final T node;
|
||||||
|
|
||||||
|
final boolean scoping;
|
||||||
|
|
||||||
|
final boolean special;
|
||||||
|
|
||||||
|
final boolean fosterParenting;
|
||||||
|
|
||||||
|
private int refcount = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param group
|
||||||
|
* TODO
|
||||||
|
* @param name
|
||||||
|
* @param node
|
||||||
|
* @param scoping
|
||||||
|
* @param special
|
||||||
|
* @param popName
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
StackNode(int group, final @NsUri String ns, final @Local String name, final T node,
|
||||||
|
final boolean scoping, final boolean special,
|
||||||
|
final boolean fosterParenting, final @Local String popName) {
|
||||||
|
this.group = group;
|
||||||
|
this.name = name;
|
||||||
|
this.popName = popName;
|
||||||
|
this.ns = ns;
|
||||||
|
this.node = node;
|
||||||
|
this.scoping = scoping;
|
||||||
|
this.special = special;
|
||||||
|
this.fosterParenting = fosterParenting;
|
||||||
|
this.refcount = 1;
|
||||||
|
Portability.retainLocal(name);
|
||||||
|
Portability.retainLocal(popName);
|
||||||
|
Portability.retainElement(node);
|
||||||
|
// not retaining namespace for now
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param elementName
|
||||||
|
* TODO
|
||||||
|
* @param node
|
||||||
|
*/
|
||||||
|
StackNode(final @NsUri String ns, ElementName elementName, final T node) {
|
||||||
|
this.group = elementName.group;
|
||||||
|
this.name = elementName.name;
|
||||||
|
this.popName = elementName.name;
|
||||||
|
this.ns = ns;
|
||||||
|
this.node = node;
|
||||||
|
this.scoping = elementName.scoping;
|
||||||
|
this.special = elementName.special;
|
||||||
|
this.fosterParenting = elementName.fosterParenting;
|
||||||
|
this.refcount = 1;
|
||||||
|
Portability.retainLocal(name);
|
||||||
|
Portability.retainLocal(popName);
|
||||||
|
Portability.retainElement(node);
|
||||||
|
// not retaining namespace for now
|
||||||
|
}
|
||||||
|
|
||||||
|
StackNode(final @NsUri String ns, ElementName elementName, final T node, @Local String popName) {
|
||||||
|
this.group = elementName.group;
|
||||||
|
this.name = elementName.name;
|
||||||
|
this.popName = popName;
|
||||||
|
this.ns = ns;
|
||||||
|
this.node = node;
|
||||||
|
this.scoping = elementName.scoping;
|
||||||
|
this.special = elementName.special;
|
||||||
|
this.fosterParenting = elementName.fosterParenting;
|
||||||
|
this.refcount = 1;
|
||||||
|
Portability.retainLocal(name);
|
||||||
|
Portability.retainLocal(popName);
|
||||||
|
Portability.retainElement(node);
|
||||||
|
// not retaining namespace for now
|
||||||
|
}
|
||||||
|
|
||||||
|
StackNode(final @NsUri String ns, ElementName elementName, final T node, @Local String popName, boolean scoping) {
|
||||||
|
this.group = elementName.group;
|
||||||
|
this.name = elementName.name;
|
||||||
|
this.popName = popName;
|
||||||
|
this.ns = ns;
|
||||||
|
this.node = node;
|
||||||
|
this.scoping = scoping;
|
||||||
|
this.special = false;
|
||||||
|
this.fosterParenting = false;
|
||||||
|
this.refcount = 1;
|
||||||
|
Portability.retainLocal(name);
|
||||||
|
Portability.retainLocal(popName);
|
||||||
|
Portability.retainElement(node);
|
||||||
|
// not retaining namespace for now
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused") private void destructor() {
|
||||||
|
Portability.releaseLocal(name);
|
||||||
|
Portability.releaseLocal(popName);
|
||||||
|
Portability.releaseElement(node);
|
||||||
|
// not releasing namespace for now
|
||||||
|
}
|
||||||
|
|
||||||
|
// [NOCPP[
|
||||||
|
/**
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override public @Local String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
// ]NOCPP]
|
||||||
|
|
||||||
|
public void retain() {
|
||||||
|
refcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void release() {
|
||||||
|
refcount--;
|
||||||
|
if (refcount == 0) {
|
||||||
|
Portability.delete(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
|
||||||
|
public class StateSnapshot<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param stack
|
||||||
|
* @param listOfActiveFormattingElements
|
||||||
|
* @param formPointer
|
||||||
|
*/
|
||||||
|
StateSnapshot(StackNode<T>[] stack,
|
||||||
|
StackNode<T>[] listOfActiveFormattingElements, T formPointer) {
|
||||||
|
this.stack = stack;
|
||||||
|
this.listOfActiveFormattingElements = listOfActiveFormattingElements;
|
||||||
|
this.formPointer = formPointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
final StackNode<T>[] stack;
|
||||||
|
|
||||||
|
final StackNode<T>[] listOfActiveFormattingElements;
|
||||||
|
|
||||||
|
final T formPointer;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused") private void destructor() {
|
||||||
|
for (int i = 0; i < stack.length; i++) {
|
||||||
|
stack[i].release();
|
||||||
|
}
|
||||||
|
Portability.releaseArray(stack);
|
||||||
|
for (int i = 0; i < listOfActiveFormattingElements.length; i++) {
|
||||||
|
if (listOfActiveFormattingElements[i] != null) {
|
||||||
|
listOfActiveFormattingElements[i].release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Portability.releaseArray(listOfActiveFormattingElements);
|
||||||
|
Portability.retainElement(formPointer);
|
||||||
|
}
|
||||||
|
}
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package nu.validator.htmlparser.impl;
|
||||||
|
|
||||||
|
import nu.validator.htmlparser.annotation.NoLength;
|
||||||
|
|
||||||
|
public final class UTF16Buffer {
|
||||||
|
private final @NoLength char[] buffer;
|
||||||
|
|
||||||
|
private int start;
|
||||||
|
|
||||||
|
private int end;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param buffer
|
||||||
|
* @param start
|
||||||
|
* @param end
|
||||||
|
*/
|
||||||
|
public UTF16Buffer(@NoLength char[] buffer, int start, int end) {
|
||||||
|
this.buffer = buffer;
|
||||||
|
this.start = start;
|
||||||
|
this.end = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the start.
|
||||||
|
*
|
||||||
|
* @return the start
|
||||||
|
*/
|
||||||
|
public int getStart() {
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the start.
|
||||||
|
*
|
||||||
|
* @param start the start to set
|
||||||
|
*/
|
||||||
|
public void setStart(int start) {
|
||||||
|
this.start = start;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the buffer.
|
||||||
|
*
|
||||||
|
* @return the buffer
|
||||||
|
*/
|
||||||
|
public @NoLength char[] getBuffer() {
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the end.
|
||||||
|
*
|
||||||
|
* @return the end
|
||||||
|
*/
|
||||||
|
public int getEnd() {
|
||||||
|
return end;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasMore() {
|
||||||
|
return start < end;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adjust(boolean lastWasCR) {
|
||||||
|
if (lastWasCR && buffer[start] == '\n') {
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the end.
|
||||||
|
*
|
||||||
|
* @param end the end to set
|
||||||
|
*/
|
||||||
|
public void setEnd(int end) {
|
||||||
|
this.end = end;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
#
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (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/MPL/
|
||||||
|
#
|
||||||
|
# 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.org code.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# Netscape Communications Corporation.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
DEPTH = ../../../..
|
||||||
|
topsrcdir = @top_srcdir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
|
||||||
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
|
MODULE = html5
|
||||||
|
|
||||||
|
EXPORTS = \
|
||||||
|
nsHtml5Module.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
include $(topsrcdir)/config/rules.mk
|
|
@ -119,9 +119,10 @@ nsSVGSwitchElement::InsertChildAt(nsIContent* aKid,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsSVGSwitchElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsSVGSwitchElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
nsresult rv = nsSVGSwitchElementBase::RemoveChildAt(aIndex, aNotify);
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on switch child removal.");
|
||||||
|
nsresult rv = nsSVGSwitchElementBase::RemoveChildAt(aIndex, aNotify, aMutationEvent);
|
||||||
if (NS_SUCCEEDED(rv)) {
|
if (NS_SUCCEEDED(rv)) {
|
||||||
MaybeInvalidate();
|
MaybeInvalidate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ public:
|
||||||
// nsINode
|
// nsINode
|
||||||
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
virtual nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
|
|
||||||
// nsIContent
|
// nsIContent
|
||||||
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
|
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
|
||||||
|
|
|
@ -1432,33 +1432,6 @@ nsXMLContentSink::ParsePIData(const nsString &aData, nsString &aHref,
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Extends nsContentSink::ProcessMETATag to grab the 'viewport' meta tag. This
|
|
||||||
* information is ignored by the generic content sink because it only stores
|
|
||||||
* http-equiv meta tags. We need it in the XMLContentSink for XHTML documents.
|
|
||||||
*
|
|
||||||
* Initially implemented for bug #436083
|
|
||||||
*/
|
|
||||||
nsresult
|
|
||||||
nsXMLContentSink::ProcessMETATag(nsIContent *aContent) {
|
|
||||||
|
|
||||||
/* Call the superclass method. */
|
|
||||||
nsContentSink::ProcessMETATag(aContent);
|
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
|
||||||
|
|
||||||
/* Look for the viewport meta tag. If we find it, process it and put the
|
|
||||||
* data into the document header. */
|
|
||||||
if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::name,
|
|
||||||
nsGkAtoms::viewport, eIgnoreCase)) {
|
|
||||||
nsAutoString value;
|
|
||||||
aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::content, value);
|
|
||||||
rv = nsContentUtils::ProcessViewportInfo(mDocument, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXMLContentSink::HandleXMLDeclaration(const PRUnichar *aVersion,
|
nsXMLContentSink::HandleXMLDeclaration(const PRUnichar *aVersion,
|
||||||
const PRUnichar *aEncoding,
|
const PRUnichar *aEncoding,
|
||||||
|
|
|
@ -114,8 +114,6 @@ public:
|
||||||
nsString &aTitle, nsString &aMedia,
|
nsString &aTitle, nsString &aMedia,
|
||||||
PRBool &aIsAlternate);
|
PRBool &aIsAlternate);
|
||||||
|
|
||||||
virtual nsresult ProcessMETATag(nsIContent* aContent);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Start layout. If aIgnorePendingSheets is true, this will happen even if
|
// Start layout. If aIgnorePendingSheets is true, this will happen even if
|
||||||
// we still have stylesheet loads pending. Otherwise, we'll wait until the
|
// we still have stylesheet loads pending. Otherwise, we'll wait until the
|
||||||
|
|
|
@ -265,12 +265,13 @@ nsXTFElementWrapper::InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsXTFElementWrapper::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsXTFElementWrapper::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on xtf child removal.");
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
if (mNotificationMask & nsIXTFElement::NOTIFY_WILL_REMOVE_CHILD)
|
if (mNotificationMask & nsIXTFElement::NOTIFY_WILL_REMOVE_CHILD)
|
||||||
GetXTFElement()->WillRemoveChild(aIndex);
|
GetXTFElement()->WillRemoveChild(aIndex);
|
||||||
rv = nsXTFElementWrapperBase::RemoveChildAt(aIndex, aNotify);
|
rv = nsXTFElementWrapperBase::RemoveChildAt(aIndex, aNotify, aMutationEvent);
|
||||||
if (mNotificationMask & nsIXTFElement::NOTIFY_CHILD_REMOVED)
|
if (mNotificationMask & nsIXTFElement::NOTIFY_CHILD_REMOVED)
|
||||||
GetXTFElement()->ChildRemoved(aIndex);
|
GetXTFElement()->ChildRemoved(aIndex);
|
||||||
return rv;
|
return rv;
|
||||||
|
|
|
@ -79,7 +79,7 @@ public:
|
||||||
PRBool aNullParent = PR_TRUE);
|
PRBool aNullParent = PR_TRUE);
|
||||||
nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
nsresult InsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||||
PRBool aNotify);
|
PRBool aNotify);
|
||||||
nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
nsIAtom *GetIDAttributeName() const;
|
nsIAtom *GetIDAttributeName() const;
|
||||||
nsresult SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
|
nsresult SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
|
||||||
nsIAtom* aPrefix, const nsAString& aValue,
|
nsIAtom* aPrefix, const nsAString& aValue,
|
||||||
|
|
|
@ -913,8 +913,9 @@ nsXULElement::UnbindFromTree(PRBool aDeep, PRBool aNullParent)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsXULElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
nsXULElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aMutationEvent, "Someone tried to inhibit mutations on XUL child removal.");
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
nsCOMPtr<nsIContent> oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex);
|
nsCOMPtr<nsIContent> oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex);
|
||||||
if (!oldKid) {
|
if (!oldKid) {
|
||||||
|
@ -981,7 +982,7 @@ nsXULElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = nsGenericElement::RemoveChildAt(aIndex, aNotify);
|
rv = nsGenericElement::RemoveChildAt(aIndex, aNotify, aMutationEvent);
|
||||||
|
|
||||||
if (newCurrentIndex == -2)
|
if (newCurrentIndex == -2)
|
||||||
controlElement->SetCurrentItem(nsnull);
|
controlElement->SetCurrentItem(nsnull);
|
||||||
|
|
|
@ -513,7 +513,7 @@ public:
|
||||||
nsIContent* aBindingParent,
|
nsIContent* aBindingParent,
|
||||||
PRBool aCompileEventHandlers);
|
PRBool aCompileEventHandlers);
|
||||||
virtual void UnbindFromTree(PRBool aDeep, PRBool aNullParent);
|
virtual void UnbindFromTree(PRBool aDeep, PRBool aNullParent);
|
||||||
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify);
|
virtual nsresult RemoveChildAt(PRUint32 aIndex, PRBool aNotify, PRBool aMutationEvent = PR_TRUE);
|
||||||
virtual nsIAtom *GetIDAttributeName() const;
|
virtual nsIAtom *GetIDAttributeName() const;
|
||||||
virtual nsIAtom *GetClassAttributeName() const;
|
virtual nsIAtom *GetClassAttributeName() const;
|
||||||
virtual PRBool GetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
|
virtual PRBool GetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
|
||||||
|
|
|
@ -94,6 +94,7 @@ REQUIRES = xpcom \
|
||||||
uconv \
|
uconv \
|
||||||
txtsvc \
|
txtsvc \
|
||||||
thebes \
|
thebes \
|
||||||
|
html5 \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CPPSRCS = \
|
CPPSRCS = \
|
||||||
|
@ -139,6 +140,7 @@ SHARED_LIBRARY_LIBS = \
|
||||||
$(DEPTH)/dom/src/threads/$(LIB_PREFIX)domthreads_s.$(LIB_SUFFIX) \
|
$(DEPTH)/dom/src/threads/$(LIB_PREFIX)domthreads_s.$(LIB_SUFFIX) \
|
||||||
$(DEPTH)/editor/libeditor/text/$(LIB_PREFIX)texteditor_s.$(LIB_SUFFIX) \
|
$(DEPTH)/editor/libeditor/text/$(LIB_PREFIX)texteditor_s.$(LIB_SUFFIX) \
|
||||||
$(DEPTH)/editor/libeditor/base/$(LIB_PREFIX)editorbase_s.$(LIB_SUFFIX) \
|
$(DEPTH)/editor/libeditor/base/$(LIB_PREFIX)editorbase_s.$(LIB_SUFFIX) \
|
||||||
|
$(DEPTH)/parser/html/$(LIB_PREFIX)html5p_s.$(LIB_SUFFIX) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
ifdef MOZ_MEDIA
|
ifdef MOZ_MEDIA
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
#include "nsXMLHttpRequest.h"
|
#include "nsXMLHttpRequest.h"
|
||||||
#include "nsDOMThreadService.h"
|
#include "nsDOMThreadService.h"
|
||||||
#include "nsHTMLDNSPrefetch.h"
|
#include "nsHTMLDNSPrefetch.h"
|
||||||
|
#include "nsHtml5Module.h"
|
||||||
#include "nsCrossSiteListenerProxy.h"
|
#include "nsCrossSiteListenerProxy.h"
|
||||||
#include "nsFocusManager.h"
|
#include "nsFocusManager.h"
|
||||||
|
|
||||||
|
@ -276,6 +277,8 @@ nsLayoutStatics::Initialize()
|
||||||
nsAudioStream::InitLibrary();
|
nsAudioStream::InitLibrary();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
nsHtml5Module::InitializeStatics();
|
||||||
|
|
||||||
nsCrossSiteListenerProxy::Startup();
|
nsCrossSiteListenerProxy::Startup();
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -363,6 +366,8 @@ nsLayoutStatics::Shutdown()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsXMLHttpRequest::ShutdownACCache();
|
nsXMLHttpRequest::ShutdownACCache();
|
||||||
|
|
||||||
|
nsHtml5Module::ReleaseStatics();
|
||||||
|
|
||||||
NS_ShutdownChainItemPool();
|
NS_ShutdownChainItemPool();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
test
|
test
|
||||||
<font color="green" color="red">test</font>
|
<font color="green" color="red">test</font><input type="checkbox" type="text" checked="checked">
|
||||||
<input type="checkbox" type="text" checked="checked">
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
<body>
|
<body>
|
||||||
<table>
|
<table>
|
||||||
test
|
test
|
||||||
<font color="green" color="red">test</font>
|
<font color="green" color="red">test</font><input type="checkbox" type="text" checked="checked">
|
||||||
<input type="checkbox" type="text" checked="checked">
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -11,5 +11,4 @@ img {
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body style="width: 150px; border: 1px solid black; white-space:pre;"><table><tbody><tr><td><img>
|
<body style="width: 150px; border: 1px solid black; white-space:pre;"><table><tbody><tr><td><img>
|
||||||
<span><img></span></td></tr></tbody></table></body>
|
<span><img></span></td></tr></tbody></table></body></html>
|
||||||
</html>
|
|
|
@ -5,7 +5,7 @@
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
window.frames[0].document.body.innerHTML =
|
window.frames[0].document.body.innerHTML =
|
||||||
"<img src='passouter.png' " +
|
"<img src='passouter.png' " +
|
||||||
"onload='window.parent.document.documentElement.className = ""'";
|
"onload='window.parent.document.documentElement.className = ""'>";
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
window.frames[0].document.body.innerHTML =
|
window.frames[0].document.body.innerHTML =
|
||||||
"<img src='passouter.png' " +
|
"<img src='passouter.png' " +
|
||||||
"onload='window.parent.document.documentElement.className = ""'";
|
"onload='window.parent.document.documentElement.className = ""'>";
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
window.frames[0].document.body.innerHTML =
|
window.frames[0].document.body.innerHTML =
|
||||||
"<img src='passouter.png' " +
|
"<img src='passouter.png' " +
|
||||||
"onload='window.parent.document.documentElement.className = ""'";
|
"onload='window.parent.document.documentElement.className = ""'>";
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
window.frames[0].document.body.innerHTML =
|
window.frames[0].document.body.innerHTML =
|
||||||
"<img src='passouter.png' " +
|
"<img src='passouter.png' " +
|
||||||
"onload='window.parent.document.documentElement.className = ""'";
|
"onload='window.parent.document.documentElement.className = ""'>";
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function boom()
|
function boom()
|
||||||
{
|
{
|
||||||
var table = document.getElementById("table");
|
|
||||||
var col1 = document.getElementById("col1");
|
var col1 = document.getElementById("col1");
|
||||||
|
var parent = col1.parentNode;
|
||||||
var next = col1.nextSibling;
|
var next = col1.nextSibling;
|
||||||
|
|
||||||
table.removeChild(col1);
|
parent.removeChild(col1);
|
||||||
reflow();
|
reflow();
|
||||||
table.insertBefore(col1, next);
|
parent.insertBefore(col1, next);
|
||||||
reflow();
|
reflow();
|
||||||
col1.removeAttribute("width");
|
col1.removeAttribute("width");
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,11 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function boom()
|
function boom()
|
||||||
{
|
{
|
||||||
var table = document.getElementById("table");
|
|
||||||
var col1 = document.createElement("col");
|
var col1 = document.createElement("col");
|
||||||
col1.setAttribute("width", "100");
|
col1.setAttribute("width", "100");
|
||||||
var next = document.getElementById("col2");
|
var next = document.getElementById("col2");
|
||||||
|
|
||||||
table.insertBefore(col1, next);
|
next.parentNode.insertBefore(col1, next);
|
||||||
reflow();
|
reflow();
|
||||||
col1.removeAttribute("width");
|
col1.removeAttribute("width");
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,5 +16,5 @@ function run() {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<body onload="setTimeout(run, 0)">
|
<body onload="setTimeout(run, 0)">
|
||||||
<iframe style="visibility:hidden;position:absolute;height:100%;width:100%" src="resize-detector-iframe.html"></iframe></p>
|
<iframe style="visibility:hidden;position:absolute;height:100%;width:100%" src="resize-detector-iframe.html"></iframe>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -4,9 +4,11 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var col = document.getElementsByTagName("COL")[0];
|
var col = document.getElementsByTagName("COL")[0];
|
||||||
table.removeChild(col);
|
col.parentNode.removeChild(col);
|
||||||
|
// HTML5 implies a colgroup around the cols,
|
||||||
|
// so this test case should really be XHTML
|
||||||
|
// in order to test bare col
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -4,9 +4,11 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var col = document.getElementsByTagName("COL")[1];
|
var col = document.getElementsByTagName("COL")[1];
|
||||||
table.removeChild(col);
|
col.parentNode.removeChild(col);
|
||||||
|
// HTML5 implies a colgroup around the cols,
|
||||||
|
// so this test case should really be XHTML
|
||||||
|
// in order to test bare col
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -4,9 +4,11 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var col = document.getElementsByTagName("COL")[2];
|
var col = document.getElementsByTagName("COL")[2];
|
||||||
table.removeChild(col);
|
col.parentNode.removeChild(col);
|
||||||
|
// HTML5 implies a colgroup around the cols,
|
||||||
|
// so this test case should really be XHTML
|
||||||
|
// in order to test bare col
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -4,11 +4,12 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var refCol = document.getElementsByTagName("COL")[0];
|
var refCol = document.getElementsByTagName("COL")[0];
|
||||||
var col = document.createElement("COL", null);
|
var col = document.createElement("COL", null);
|
||||||
col.width = 100;
|
col.width = 100;
|
||||||
table.insertBefore(col, refCol);
|
refCol.parentNode.insertBefore(col, refCol);
|
||||||
|
// HTML5 parser implies a colgroup around col, so this test
|
||||||
|
// case should really be XHTML
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -4,11 +4,12 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var refCol = document.getElementsByTagName("COL")[1];
|
var refCol = document.getElementsByTagName("COL")[1];
|
||||||
var col = document.createElement("COL", null);
|
var col = document.createElement("COL", null);
|
||||||
col.width = 200;
|
col.width = 200;
|
||||||
table.insertBefore(col, refCol);
|
refCol.parentNode.insertBefore(col, refCol);
|
||||||
|
// HTML5 parser implies a colgroup around col, so this test
|
||||||
|
// case should really be XHTML
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -4,11 +4,12 @@
|
||||||
<SCRIPT>
|
<SCRIPT>
|
||||||
|
|
||||||
function doIt() {
|
function doIt() {
|
||||||
var table = document.getElementsByTagName("TABLE")[0];
|
|
||||||
var refCol = document.getElementsByTagName("COL")[2];
|
var refCol = document.getElementsByTagName("COL")[2];
|
||||||
var col = document.createElement("COL", null);
|
var col = document.createElement("COL", null);
|
||||||
col.width = 150;
|
col.width = 150;
|
||||||
table.insertBefore(col, refCol);
|
refCol.parentNode.insertBefore(col, refCol);
|
||||||
|
// HTML5 parser implies a colgroup around col, so this test
|
||||||
|
// case should really be XHTML
|
||||||
}
|
}
|
||||||
</SCRIPT>
|
</SCRIPT>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
|
@ -14,5 +14,4 @@ very model of a modern major-general.
|
||||||
very model of a modern major-general.
|
very model of a modern major-general.
|
||||||
<p style="white-space:pre-line;">I am the
|
<p style="white-space:pre-line;">I am the
|
||||||
very model of a modern major-general.
|
very model of a modern major-general.
|
||||||
</body>
|
</body></html>
|
||||||
</html>
|
|
|
@ -2743,3 +2743,6 @@ pref("mozilla.widget.disable-native-theme", true);
|
||||||
|
|
||||||
// Enable/Disable the geolocation API for content
|
// Enable/Disable the geolocation API for content
|
||||||
pref("geo.enabled", true);
|
pref("geo.enabled", true);
|
||||||
|
|
||||||
|
// Enable/Disable HTML5 parser
|
||||||
|
pref("html5.enable", false);
|
||||||
|
|
|
@ -42,6 +42,7 @@ VPATH = @srcdir@
|
||||||
|
|
||||||
include $(DEPTH)/config/autoconf.mk
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
DIRS = expat htmlparser xml
|
MODULE = parser
|
||||||
|
DIRS = expat htmlparser html xml
|
||||||
|
|
||||||
include $(topsrcdir)/config/rules.mk
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (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/MPL/
|
||||||
|
#
|
||||||
|
# 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.org code.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# Netscape Communications Corporation.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
DEPTH = ../..
|
||||||
|
topsrcdir = @top_srcdir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
|
||||||
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
|
MODULE = html5
|
||||||
|
LIBRARY_NAME = html5p_s
|
||||||
|
LIBXUL_LIBRARY = 1
|
||||||
|
|
||||||
|
REQUIRES = \
|
||||||
|
gfx \
|
||||||
|
thebes \
|
||||||
|
locale \
|
||||||
|
js \
|
||||||
|
pref \
|
||||||
|
necko \
|
||||||
|
xpcom \
|
||||||
|
string \
|
||||||
|
htmlparser \
|
||||||
|
content \
|
||||||
|
layout \
|
||||||
|
widget \
|
||||||
|
dom \
|
||||||
|
uconv \
|
||||||
|
xpconnect \
|
||||||
|
util \
|
||||||
|
webshell \
|
||||||
|
docshell \
|
||||||
|
chardet \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
EXPORTS = \
|
||||||
|
nsHtml5Module.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CPPSRCS = \
|
||||||
|
nsHtml5Atoms.cpp \
|
||||||
|
nsHtml5Parser.cpp \
|
||||||
|
nsHtml5AttributeName.cpp \
|
||||||
|
nsHtml5ElementName.cpp \
|
||||||
|
nsHtml5HtmlAttributes.cpp \
|
||||||
|
nsHtml5StackNode.cpp \
|
||||||
|
nsHtml5UTF16Buffer.cpp \
|
||||||
|
nsHtml5NamedCharacters.cpp \
|
||||||
|
nsHtml5Tokenizer.cpp \
|
||||||
|
nsHtml5TreeBuilder.cpp \
|
||||||
|
nsHtml5Portability.cpp \
|
||||||
|
nsHtml5Module.cpp \
|
||||||
|
nsHtml5ReleasableAttributeName.cpp \
|
||||||
|
nsHtml5ReleasableElementName.cpp \
|
||||||
|
nsHtml5MetaScanner.cpp \
|
||||||
|
nsHtml5TreeOperation.cpp \
|
||||||
|
nsHtml5StateSnapshot.cpp \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
FORCE_STATIC_LIB = 1
|
||||||
|
|
||||||
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
|
||||||
|
INCLUDES += \
|
||||||
|
-I$(srcdir)/../../content/base/src \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,103 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef jArray_h__
|
||||||
|
#define jArray_h__
|
||||||
|
|
||||||
|
#define J_ARRAY_STATIC(T, L, arr) \
|
||||||
|
jArray<T,L>( ((T*)arr), (sizeof(arr)/sizeof(arr[0])) )
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
class jArray {
|
||||||
|
private:
|
||||||
|
T* arr;
|
||||||
|
public:
|
||||||
|
L length;
|
||||||
|
jArray(T* const a, L const len);
|
||||||
|
jArray(L const len);
|
||||||
|
jArray(const jArray<T,L>& other);
|
||||||
|
jArray();
|
||||||
|
operator T*() { return arr; }
|
||||||
|
T& operator[] (L const index) { return arr[index]; }
|
||||||
|
void release() { delete[] arr; arr = 0; length = 0; }
|
||||||
|
L binarySearch(T const elem);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
jArray<T,L>::jArray(T* const a, L const len)
|
||||||
|
: arr(a), length(len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
jArray<T,L>::jArray(L const len)
|
||||||
|
: arr(new T[len]), length(len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
jArray<T,L>::jArray(const jArray<T,L>& other)
|
||||||
|
: arr(other.arr), length(other.length)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
jArray<T,L>::jArray()
|
||||||
|
: arr(0), length(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class L>
|
||||||
|
L
|
||||||
|
jArray<T,L>::binarySearch(T const elem)
|
||||||
|
{
|
||||||
|
L lo = 0;
|
||||||
|
L hi = length - 1;
|
||||||
|
while (lo <= hi) {
|
||||||
|
L mid = (lo + hi) / 2;
|
||||||
|
if (arr[mid] > elem) {
|
||||||
|
hi = mid - 1;
|
||||||
|
} else if (arr[mid] < elem) {
|
||||||
|
lo = mid + 1;
|
||||||
|
} else {
|
||||||
|
return mid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // jArray_h__
|
|
@ -0,0 +1,88 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5ArrayCopy_h__
|
||||||
|
#define nsHtml5ArrayCopy_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
|
||||||
|
class nsString;
|
||||||
|
class nsHtml5StackNode;
|
||||||
|
class nsHtml5AttributeName;
|
||||||
|
|
||||||
|
// Unfortunately, these don't work as template functions because the arguments
|
||||||
|
// would need coercion from a template class, which complicates things.
|
||||||
|
class nsHtml5ArrayCopy {
|
||||||
|
public:
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(PRUnichar* source, PRInt32 sourceOffset, PRUnichar* target, PRInt32 targetOffset, PRInt32 length)
|
||||||
|
{
|
||||||
|
memcpy(&(target[targetOffset]), &(source[sourceOffset]), length * sizeof(PRUnichar));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(PRUnichar* source, PRUnichar* target, PRInt32 length)
|
||||||
|
{
|
||||||
|
memcpy(target, source, length * sizeof(PRUnichar));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(nsString** source, nsString** target, PRInt32 length)
|
||||||
|
{
|
||||||
|
memcpy(target, source, length * sizeof(nsString*));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(nsHtml5AttributeName** source, nsHtml5AttributeName** target, PRInt32 length)
|
||||||
|
{
|
||||||
|
memcpy(target, source, length * sizeof(nsHtml5AttributeName*));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(nsHtml5StackNode** source, nsHtml5StackNode** target, PRInt32 length)
|
||||||
|
{
|
||||||
|
memcpy(target, source, length * sizeof(nsHtml5StackNode*));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
arraycopy(nsHtml5StackNode** arr, PRInt32 sourceOffset, PRInt32 targetOffset, PRInt32 length)
|
||||||
|
{
|
||||||
|
memmove(&(arr[targetOffset]), &(arr[sourceOffset]), length * sizeof(nsHtml5StackNode*));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif // nsHtml5ArrayCopy_h__
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,63 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This class wraps up the creation (and destruction) of the standard
|
||||||
|
* set of atoms used by the HTML5 parser; the atoms are created when
|
||||||
|
* nsHtml5Module is loaded and they are destroyed when nsHtml5Module is
|
||||||
|
* unloaded.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsStaticAtom.h"
|
||||||
|
|
||||||
|
// define storage for all atoms
|
||||||
|
#define HTML5_ATOM(_name, _value) nsIAtom* nsHtml5Atoms::_name;
|
||||||
|
#include "nsHtml5AtomList.h"
|
||||||
|
#undef HTML5_ATOM
|
||||||
|
|
||||||
|
static const nsStaticAtom Html5Atoms_info[] = {
|
||||||
|
|
||||||
|
#define HTML5_ATOM(name_, value_) { value_, &nsHtml5Atoms::name_ },
|
||||||
|
#include "nsHtml5AtomList.h"
|
||||||
|
#undef HTML5_ATOM
|
||||||
|
};
|
||||||
|
|
||||||
|
void nsHtml5Atoms::AddRefAtoms()
|
||||||
|
{
|
||||||
|
NS_RegisterStaticAtoms(Html5Atoms_info, NS_ARRAY_LENGTH(Html5Atoms_info));
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This class wraps up the creation (and destruction) of the standard
|
||||||
|
* set of atoms used by gklayout; the atoms are created when gklayout
|
||||||
|
* is loaded and they are destroyed when gklayout is unloaded.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsHtml5Atoms_h___
|
||||||
|
#define nsHtml5Atoms_h___
|
||||||
|
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
|
||||||
|
class nsHtml5Atoms {
|
||||||
|
public:
|
||||||
|
static void AddRefAtoms();
|
||||||
|
/* Declare all atoms
|
||||||
|
The atom names and values are stored in nsGkAtomList.h and
|
||||||
|
are brought to you by the magic of C preprocessing
|
||||||
|
Add new atoms to nsGkAtomList and all support logic will be auto-generated
|
||||||
|
*/
|
||||||
|
#define HTML5_ATOM(_name, _value) static nsIAtom* _name;
|
||||||
|
#include "nsHtml5AtomList.h"
|
||||||
|
#undef HTML5_ATOM
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* nsHtml5Atoms_h___ */
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,68 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5ByteReadable_h__
|
||||||
|
#define nsHtml5ByteReadable_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A weak reference wrapper around a byte array.
|
||||||
|
*/
|
||||||
|
class nsHtml5ByteReadable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHtml5ByteReadable(const PRUint8* current, const PRUint8* end)
|
||||||
|
: current(current),
|
||||||
|
end(end)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PRInt32 read() {
|
||||||
|
if (current < end) {
|
||||||
|
return *(current++);
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const PRUint8* current;
|
||||||
|
const PRUint8* end;
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -0,0 +1,47 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5DocumentMode_h__
|
||||||
|
#define nsHtml5DocumentMode_h__
|
||||||
|
|
||||||
|
enum nsHtml5DocumentMode {
|
||||||
|
STANDARDS_MODE,
|
||||||
|
ALMOST_STANDARDS_MODE,
|
||||||
|
QUIRKS_MODE
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsHtml5DocumentMode_h__
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,875 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit ElementName.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsHtml5ElementName_h__
|
||||||
|
#define nsHtml5ElementName_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
class nsHtml5Parser;
|
||||||
|
|
||||||
|
class nsHtml5Tokenizer;
|
||||||
|
class nsHtml5TreeBuilder;
|
||||||
|
class nsHtml5MetaScanner;
|
||||||
|
class nsHtml5AttributeName;
|
||||||
|
class nsHtml5HtmlAttributes;
|
||||||
|
class nsHtml5UTF16Buffer;
|
||||||
|
class nsHtml5StateSnapshot;
|
||||||
|
class nsHtml5Portability;
|
||||||
|
|
||||||
|
|
||||||
|
class nsHtml5ElementName
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static nsHtml5ElementName* NULL_ELEMENT_NAME;
|
||||||
|
nsIAtom* name;
|
||||||
|
nsIAtom* camelCaseName;
|
||||||
|
PRInt32 group;
|
||||||
|
PRBool special;
|
||||||
|
PRBool scoping;
|
||||||
|
PRBool fosterParenting;
|
||||||
|
static nsHtml5ElementName* elementNameByBuffer(jArray<PRUnichar,PRInt32> buf, PRInt32 offset, PRInt32 length);
|
||||||
|
private:
|
||||||
|
static PRInt32 bufToHash(jArray<PRUnichar,PRInt32> buf, PRInt32 len);
|
||||||
|
nsHtml5ElementName(nsIAtom* name, nsIAtom* camelCaseName, PRInt32 group, PRBool special, PRBool scoping, PRBool fosterParenting);
|
||||||
|
protected:
|
||||||
|
nsHtml5ElementName(nsIAtom* name);
|
||||||
|
public:
|
||||||
|
virtual void release();
|
||||||
|
~nsHtml5ElementName();
|
||||||
|
static nsHtml5ElementName* A;
|
||||||
|
static nsHtml5ElementName* B;
|
||||||
|
static nsHtml5ElementName* G;
|
||||||
|
static nsHtml5ElementName* I;
|
||||||
|
static nsHtml5ElementName* P;
|
||||||
|
static nsHtml5ElementName* Q;
|
||||||
|
static nsHtml5ElementName* S;
|
||||||
|
static nsHtml5ElementName* U;
|
||||||
|
static nsHtml5ElementName* BR;
|
||||||
|
static nsHtml5ElementName* CI;
|
||||||
|
static nsHtml5ElementName* CN;
|
||||||
|
static nsHtml5ElementName* DD;
|
||||||
|
static nsHtml5ElementName* DL;
|
||||||
|
static nsHtml5ElementName* DT;
|
||||||
|
static nsHtml5ElementName* EM;
|
||||||
|
static nsHtml5ElementName* EQ;
|
||||||
|
static nsHtml5ElementName* FN;
|
||||||
|
static nsHtml5ElementName* H1;
|
||||||
|
static nsHtml5ElementName* H2;
|
||||||
|
static nsHtml5ElementName* H3;
|
||||||
|
static nsHtml5ElementName* H4;
|
||||||
|
static nsHtml5ElementName* H5;
|
||||||
|
static nsHtml5ElementName* H6;
|
||||||
|
static nsHtml5ElementName* GT;
|
||||||
|
static nsHtml5ElementName* HR;
|
||||||
|
static nsHtml5ElementName* IN;
|
||||||
|
static nsHtml5ElementName* LI;
|
||||||
|
static nsHtml5ElementName* LN;
|
||||||
|
static nsHtml5ElementName* LT;
|
||||||
|
static nsHtml5ElementName* MI;
|
||||||
|
static nsHtml5ElementName* MN;
|
||||||
|
static nsHtml5ElementName* MO;
|
||||||
|
static nsHtml5ElementName* MS;
|
||||||
|
static nsHtml5ElementName* OL;
|
||||||
|
static nsHtml5ElementName* OR;
|
||||||
|
static nsHtml5ElementName* PI;
|
||||||
|
static nsHtml5ElementName* RP;
|
||||||
|
static nsHtml5ElementName* RT;
|
||||||
|
static nsHtml5ElementName* TD;
|
||||||
|
static nsHtml5ElementName* TH;
|
||||||
|
static nsHtml5ElementName* TR;
|
||||||
|
static nsHtml5ElementName* TT;
|
||||||
|
static nsHtml5ElementName* UL;
|
||||||
|
static nsHtml5ElementName* AND;
|
||||||
|
static nsHtml5ElementName* ARG;
|
||||||
|
static nsHtml5ElementName* ABS;
|
||||||
|
static nsHtml5ElementName* BIG;
|
||||||
|
static nsHtml5ElementName* BDO;
|
||||||
|
static nsHtml5ElementName* CSC;
|
||||||
|
static nsHtml5ElementName* COL;
|
||||||
|
static nsHtml5ElementName* COS;
|
||||||
|
static nsHtml5ElementName* COT;
|
||||||
|
static nsHtml5ElementName* DEL;
|
||||||
|
static nsHtml5ElementName* DFN;
|
||||||
|
static nsHtml5ElementName* DIR;
|
||||||
|
static nsHtml5ElementName* DIV;
|
||||||
|
static nsHtml5ElementName* EXP;
|
||||||
|
static nsHtml5ElementName* GCD;
|
||||||
|
static nsHtml5ElementName* GEQ;
|
||||||
|
static nsHtml5ElementName* IMG;
|
||||||
|
static nsHtml5ElementName* INS;
|
||||||
|
static nsHtml5ElementName* INT;
|
||||||
|
static nsHtml5ElementName* KBD;
|
||||||
|
static nsHtml5ElementName* LOG;
|
||||||
|
static nsHtml5ElementName* LCM;
|
||||||
|
static nsHtml5ElementName* LEQ;
|
||||||
|
static nsHtml5ElementName* MTD;
|
||||||
|
static nsHtml5ElementName* MIN;
|
||||||
|
static nsHtml5ElementName* MAP;
|
||||||
|
static nsHtml5ElementName* MTR;
|
||||||
|
static nsHtml5ElementName* MAX;
|
||||||
|
static nsHtml5ElementName* NEQ;
|
||||||
|
static nsHtml5ElementName* NOT;
|
||||||
|
static nsHtml5ElementName* NAV;
|
||||||
|
static nsHtml5ElementName* PRE;
|
||||||
|
static nsHtml5ElementName* REM;
|
||||||
|
static nsHtml5ElementName* SUB;
|
||||||
|
static nsHtml5ElementName* SEC;
|
||||||
|
static nsHtml5ElementName* SVG;
|
||||||
|
static nsHtml5ElementName* SUM;
|
||||||
|
static nsHtml5ElementName* SIN;
|
||||||
|
static nsHtml5ElementName* SEP;
|
||||||
|
static nsHtml5ElementName* SUP;
|
||||||
|
static nsHtml5ElementName* SET;
|
||||||
|
static nsHtml5ElementName* TAN;
|
||||||
|
static nsHtml5ElementName* USE;
|
||||||
|
static nsHtml5ElementName* VAR;
|
||||||
|
static nsHtml5ElementName* WBR;
|
||||||
|
static nsHtml5ElementName* XMP;
|
||||||
|
static nsHtml5ElementName* XOR;
|
||||||
|
static nsHtml5ElementName* AREA;
|
||||||
|
static nsHtml5ElementName* ABBR;
|
||||||
|
static nsHtml5ElementName* BASE;
|
||||||
|
static nsHtml5ElementName* BVAR;
|
||||||
|
static nsHtml5ElementName* BODY;
|
||||||
|
static nsHtml5ElementName* CARD;
|
||||||
|
static nsHtml5ElementName* CODE;
|
||||||
|
static nsHtml5ElementName* CITE;
|
||||||
|
static nsHtml5ElementName* CSCH;
|
||||||
|
static nsHtml5ElementName* COSH;
|
||||||
|
static nsHtml5ElementName* COTH;
|
||||||
|
static nsHtml5ElementName* CURL;
|
||||||
|
static nsHtml5ElementName* DESC;
|
||||||
|
static nsHtml5ElementName* DIFF;
|
||||||
|
static nsHtml5ElementName* DEFS;
|
||||||
|
static nsHtml5ElementName* FORM;
|
||||||
|
static nsHtml5ElementName* FONT;
|
||||||
|
static nsHtml5ElementName* GRAD;
|
||||||
|
static nsHtml5ElementName* HEAD;
|
||||||
|
static nsHtml5ElementName* HTML;
|
||||||
|
static nsHtml5ElementName* LINE;
|
||||||
|
static nsHtml5ElementName* LINK;
|
||||||
|
static nsHtml5ElementName* LIST;
|
||||||
|
static nsHtml5ElementName* META;
|
||||||
|
static nsHtml5ElementName* MSUB;
|
||||||
|
static nsHtml5ElementName* MODE;
|
||||||
|
static nsHtml5ElementName* MATH;
|
||||||
|
static nsHtml5ElementName* MARK;
|
||||||
|
static nsHtml5ElementName* MASK;
|
||||||
|
static nsHtml5ElementName* MEAN;
|
||||||
|
static nsHtml5ElementName* MSUP;
|
||||||
|
static nsHtml5ElementName* MENU;
|
||||||
|
static nsHtml5ElementName* MROW;
|
||||||
|
static nsHtml5ElementName* NONE;
|
||||||
|
static nsHtml5ElementName* NOBR;
|
||||||
|
static nsHtml5ElementName* NEST;
|
||||||
|
static nsHtml5ElementName* PATH;
|
||||||
|
static nsHtml5ElementName* PLUS;
|
||||||
|
static nsHtml5ElementName* RULE;
|
||||||
|
static nsHtml5ElementName* REAL;
|
||||||
|
static nsHtml5ElementName* RELN;
|
||||||
|
static nsHtml5ElementName* RECT;
|
||||||
|
static nsHtml5ElementName* ROOT;
|
||||||
|
static nsHtml5ElementName* RUBY;
|
||||||
|
static nsHtml5ElementName* SECH;
|
||||||
|
static nsHtml5ElementName* SINH;
|
||||||
|
static nsHtml5ElementName* SPAN;
|
||||||
|
static nsHtml5ElementName* SAMP;
|
||||||
|
static nsHtml5ElementName* STOP;
|
||||||
|
static nsHtml5ElementName* SDEV;
|
||||||
|
static nsHtml5ElementName* TIME;
|
||||||
|
static nsHtml5ElementName* TRUE;
|
||||||
|
static nsHtml5ElementName* TREF;
|
||||||
|
static nsHtml5ElementName* TANH;
|
||||||
|
static nsHtml5ElementName* TEXT;
|
||||||
|
static nsHtml5ElementName* VIEW;
|
||||||
|
static nsHtml5ElementName* ASIDE;
|
||||||
|
static nsHtml5ElementName* AUDIO;
|
||||||
|
static nsHtml5ElementName* APPLY;
|
||||||
|
static nsHtml5ElementName* EMBED;
|
||||||
|
static nsHtml5ElementName* FRAME;
|
||||||
|
static nsHtml5ElementName* FALSE;
|
||||||
|
static nsHtml5ElementName* FLOOR;
|
||||||
|
static nsHtml5ElementName* GLYPH;
|
||||||
|
static nsHtml5ElementName* HKERN;
|
||||||
|
static nsHtml5ElementName* IMAGE;
|
||||||
|
static nsHtml5ElementName* IDENT;
|
||||||
|
static nsHtml5ElementName* INPUT;
|
||||||
|
static nsHtml5ElementName* LABEL;
|
||||||
|
static nsHtml5ElementName* LIMIT;
|
||||||
|
static nsHtml5ElementName* MFRAC;
|
||||||
|
static nsHtml5ElementName* MPATH;
|
||||||
|
static nsHtml5ElementName* METER;
|
||||||
|
static nsHtml5ElementName* MOVER;
|
||||||
|
static nsHtml5ElementName* MINUS;
|
||||||
|
static nsHtml5ElementName* MROOT;
|
||||||
|
static nsHtml5ElementName* MSQRT;
|
||||||
|
static nsHtml5ElementName* MTEXT;
|
||||||
|
static nsHtml5ElementName* NOTIN;
|
||||||
|
static nsHtml5ElementName* PIECE;
|
||||||
|
static nsHtml5ElementName* PARAM;
|
||||||
|
static nsHtml5ElementName* POWER;
|
||||||
|
static nsHtml5ElementName* REALS;
|
||||||
|
static nsHtml5ElementName* STYLE;
|
||||||
|
static nsHtml5ElementName* SMALL;
|
||||||
|
static nsHtml5ElementName* THEAD;
|
||||||
|
static nsHtml5ElementName* TABLE;
|
||||||
|
static nsHtml5ElementName* TITLE;
|
||||||
|
static nsHtml5ElementName* TSPAN;
|
||||||
|
static nsHtml5ElementName* TIMES;
|
||||||
|
static nsHtml5ElementName* TFOOT;
|
||||||
|
static nsHtml5ElementName* TBODY;
|
||||||
|
static nsHtml5ElementName* UNION;
|
||||||
|
static nsHtml5ElementName* VKERN;
|
||||||
|
static nsHtml5ElementName* VIDEO;
|
||||||
|
static nsHtml5ElementName* ARCSEC;
|
||||||
|
static nsHtml5ElementName* ARCCSC;
|
||||||
|
static nsHtml5ElementName* ARCTAN;
|
||||||
|
static nsHtml5ElementName* ARCSIN;
|
||||||
|
static nsHtml5ElementName* ARCCOS;
|
||||||
|
static nsHtml5ElementName* APPLET;
|
||||||
|
static nsHtml5ElementName* ARCCOT;
|
||||||
|
static nsHtml5ElementName* APPROX;
|
||||||
|
static nsHtml5ElementName* BUTTON;
|
||||||
|
static nsHtml5ElementName* CIRCLE;
|
||||||
|
static nsHtml5ElementName* CENTER;
|
||||||
|
static nsHtml5ElementName* CURSOR;
|
||||||
|
static nsHtml5ElementName* CANVAS;
|
||||||
|
static nsHtml5ElementName* DIVIDE;
|
||||||
|
static nsHtml5ElementName* DEGREE;
|
||||||
|
static nsHtml5ElementName* DIALOG;
|
||||||
|
static nsHtml5ElementName* DOMAIN;
|
||||||
|
static nsHtml5ElementName* EXISTS;
|
||||||
|
static nsHtml5ElementName* FETILE;
|
||||||
|
static nsHtml5ElementName* FIGURE;
|
||||||
|
static nsHtml5ElementName* FORALL;
|
||||||
|
static nsHtml5ElementName* FILTER;
|
||||||
|
static nsHtml5ElementName* FOOTER;
|
||||||
|
static nsHtml5ElementName* HEADER;
|
||||||
|
static nsHtml5ElementName* IFRAME;
|
||||||
|
static nsHtml5ElementName* KEYGEN;
|
||||||
|
static nsHtml5ElementName* LAMBDA;
|
||||||
|
static nsHtml5ElementName* LEGEND;
|
||||||
|
static nsHtml5ElementName* MSPACE;
|
||||||
|
static nsHtml5ElementName* MTABLE;
|
||||||
|
static nsHtml5ElementName* MSTYLE;
|
||||||
|
static nsHtml5ElementName* MGLYPH;
|
||||||
|
static nsHtml5ElementName* MEDIAN;
|
||||||
|
static nsHtml5ElementName* MUNDER;
|
||||||
|
static nsHtml5ElementName* MARKER;
|
||||||
|
static nsHtml5ElementName* MERROR;
|
||||||
|
static nsHtml5ElementName* MOMENT;
|
||||||
|
static nsHtml5ElementName* MATRIX;
|
||||||
|
static nsHtml5ElementName* OPTION;
|
||||||
|
static nsHtml5ElementName* OBJECT;
|
||||||
|
static nsHtml5ElementName* OUTPUT;
|
||||||
|
static nsHtml5ElementName* PRIMES;
|
||||||
|
static nsHtml5ElementName* SOURCE;
|
||||||
|
static nsHtml5ElementName* STRIKE;
|
||||||
|
static nsHtml5ElementName* STRONG;
|
||||||
|
static nsHtml5ElementName* SWITCH;
|
||||||
|
static nsHtml5ElementName* SYMBOL;
|
||||||
|
static nsHtml5ElementName* SPACER;
|
||||||
|
static nsHtml5ElementName* SELECT;
|
||||||
|
static nsHtml5ElementName* SUBSET;
|
||||||
|
static nsHtml5ElementName* SCRIPT;
|
||||||
|
static nsHtml5ElementName* TBREAK;
|
||||||
|
static nsHtml5ElementName* VECTOR;
|
||||||
|
static nsHtml5ElementName* ARTICLE;
|
||||||
|
static nsHtml5ElementName* ANIMATE;
|
||||||
|
static nsHtml5ElementName* ARCSECH;
|
||||||
|
static nsHtml5ElementName* ARCCSCH;
|
||||||
|
static nsHtml5ElementName* ARCTANH;
|
||||||
|
static nsHtml5ElementName* ARCSINH;
|
||||||
|
static nsHtml5ElementName* ARCCOSH;
|
||||||
|
static nsHtml5ElementName* ARCCOTH;
|
||||||
|
static nsHtml5ElementName* ACRONYM;
|
||||||
|
static nsHtml5ElementName* ADDRESS;
|
||||||
|
static nsHtml5ElementName* BGSOUND;
|
||||||
|
static nsHtml5ElementName* COMMAND;
|
||||||
|
static nsHtml5ElementName* COMPOSE;
|
||||||
|
static nsHtml5ElementName* CEILING;
|
||||||
|
static nsHtml5ElementName* CSYMBOL;
|
||||||
|
static nsHtml5ElementName* CAPTION;
|
||||||
|
static nsHtml5ElementName* DISCARD;
|
||||||
|
static nsHtml5ElementName* DECLARE;
|
||||||
|
static nsHtml5ElementName* DETAILS;
|
||||||
|
static nsHtml5ElementName* ELLIPSE;
|
||||||
|
static nsHtml5ElementName* FEFUNCA;
|
||||||
|
static nsHtml5ElementName* FEFUNCB;
|
||||||
|
static nsHtml5ElementName* FEBLEND;
|
||||||
|
static nsHtml5ElementName* FEFLOOD;
|
||||||
|
static nsHtml5ElementName* FEIMAGE;
|
||||||
|
static nsHtml5ElementName* FEMERGE;
|
||||||
|
static nsHtml5ElementName* FEFUNCG;
|
||||||
|
static nsHtml5ElementName* FEFUNCR;
|
||||||
|
static nsHtml5ElementName* HANDLER;
|
||||||
|
static nsHtml5ElementName* INVERSE;
|
||||||
|
static nsHtml5ElementName* IMPLIES;
|
||||||
|
static nsHtml5ElementName* ISINDEX;
|
||||||
|
static nsHtml5ElementName* LOGBASE;
|
||||||
|
static nsHtml5ElementName* LISTING;
|
||||||
|
static nsHtml5ElementName* MFENCED;
|
||||||
|
static nsHtml5ElementName* MPADDED;
|
||||||
|
static nsHtml5ElementName* MARQUEE;
|
||||||
|
static nsHtml5ElementName* MACTION;
|
||||||
|
static nsHtml5ElementName* MSUBSUP;
|
||||||
|
static nsHtml5ElementName* NOEMBED;
|
||||||
|
static nsHtml5ElementName* POLYGON;
|
||||||
|
static nsHtml5ElementName* PATTERN;
|
||||||
|
static nsHtml5ElementName* PRODUCT;
|
||||||
|
static nsHtml5ElementName* SETDIFF;
|
||||||
|
static nsHtml5ElementName* SECTION;
|
||||||
|
static nsHtml5ElementName* TENDSTO;
|
||||||
|
static nsHtml5ElementName* UPLIMIT;
|
||||||
|
static nsHtml5ElementName* ALTGLYPH;
|
||||||
|
static nsHtml5ElementName* BASEFONT;
|
||||||
|
static nsHtml5ElementName* CLIPPATH;
|
||||||
|
static nsHtml5ElementName* CODOMAIN;
|
||||||
|
static nsHtml5ElementName* COLGROUP;
|
||||||
|
static nsHtml5ElementName* DATAGRID;
|
||||||
|
static nsHtml5ElementName* EMPTYSET;
|
||||||
|
static nsHtml5ElementName* FACTOROF;
|
||||||
|
static nsHtml5ElementName* FIELDSET;
|
||||||
|
static nsHtml5ElementName* FRAMESET;
|
||||||
|
static nsHtml5ElementName* FEOFFSET;
|
||||||
|
static nsHtml5ElementName* GLYPHREF;
|
||||||
|
static nsHtml5ElementName* INTERVAL;
|
||||||
|
static nsHtml5ElementName* INTEGERS;
|
||||||
|
static nsHtml5ElementName* INFINITY;
|
||||||
|
static nsHtml5ElementName* LISTENER;
|
||||||
|
static nsHtml5ElementName* LOWLIMIT;
|
||||||
|
static nsHtml5ElementName* METADATA;
|
||||||
|
static nsHtml5ElementName* MENCLOSE;
|
||||||
|
static nsHtml5ElementName* MPHANTOM;
|
||||||
|
static nsHtml5ElementName* NOFRAMES;
|
||||||
|
static nsHtml5ElementName* NOSCRIPT;
|
||||||
|
static nsHtml5ElementName* OPTGROUP;
|
||||||
|
static nsHtml5ElementName* POLYLINE;
|
||||||
|
static nsHtml5ElementName* PREFETCH;
|
||||||
|
static nsHtml5ElementName* PROGRESS;
|
||||||
|
static nsHtml5ElementName* PRSUBSET;
|
||||||
|
static nsHtml5ElementName* QUOTIENT;
|
||||||
|
static nsHtml5ElementName* SELECTOR;
|
||||||
|
static nsHtml5ElementName* TEXTAREA;
|
||||||
|
static nsHtml5ElementName* TEXTPATH;
|
||||||
|
static nsHtml5ElementName* VARIANCE;
|
||||||
|
static nsHtml5ElementName* ANIMATION;
|
||||||
|
static nsHtml5ElementName* CONJUGATE;
|
||||||
|
static nsHtml5ElementName* CONDITION;
|
||||||
|
static nsHtml5ElementName* COMPLEXES;
|
||||||
|
static nsHtml5ElementName* FONT_FACE;
|
||||||
|
static nsHtml5ElementName* FACTORIAL;
|
||||||
|
static nsHtml5ElementName* INTERSECT;
|
||||||
|
static nsHtml5ElementName* IMAGINARY;
|
||||||
|
static nsHtml5ElementName* LAPLACIAN;
|
||||||
|
static nsHtml5ElementName* MATRIXROW;
|
||||||
|
static nsHtml5ElementName* NOTSUBSET;
|
||||||
|
static nsHtml5ElementName* OTHERWISE;
|
||||||
|
static nsHtml5ElementName* PIECEWISE;
|
||||||
|
static nsHtml5ElementName* PLAINTEXT;
|
||||||
|
static nsHtml5ElementName* RATIONALS;
|
||||||
|
static nsHtml5ElementName* SEMANTICS;
|
||||||
|
static nsHtml5ElementName* TRANSPOSE;
|
||||||
|
static nsHtml5ElementName* ANNOTATION;
|
||||||
|
static nsHtml5ElementName* BLOCKQUOTE;
|
||||||
|
static nsHtml5ElementName* DIVERGENCE;
|
||||||
|
static nsHtml5ElementName* EULERGAMMA;
|
||||||
|
static nsHtml5ElementName* EQUIVALENT;
|
||||||
|
static nsHtml5ElementName* IMAGINARYI;
|
||||||
|
static nsHtml5ElementName* MALIGNMARK;
|
||||||
|
static nsHtml5ElementName* MUNDEROVER;
|
||||||
|
static nsHtml5ElementName* MLABELEDTR;
|
||||||
|
static nsHtml5ElementName* NOTANUMBER;
|
||||||
|
static nsHtml5ElementName* SOLIDCOLOR;
|
||||||
|
static nsHtml5ElementName* ALTGLYPHDEF;
|
||||||
|
static nsHtml5ElementName* DETERMINANT;
|
||||||
|
static nsHtml5ElementName* EVENTSOURCE;
|
||||||
|
static nsHtml5ElementName* FEMERGENODE;
|
||||||
|
static nsHtml5ElementName* FECOMPOSITE;
|
||||||
|
static nsHtml5ElementName* FESPOTLIGHT;
|
||||||
|
static nsHtml5ElementName* MALIGNGROUP;
|
||||||
|
static nsHtml5ElementName* MPRESCRIPTS;
|
||||||
|
static nsHtml5ElementName* MOMENTABOUT;
|
||||||
|
static nsHtml5ElementName* NOTPRSUBSET;
|
||||||
|
static nsHtml5ElementName* PARTIALDIFF;
|
||||||
|
static nsHtml5ElementName* ALTGLYPHITEM;
|
||||||
|
static nsHtml5ElementName* ANIMATECOLOR;
|
||||||
|
static nsHtml5ElementName* DATATEMPLATE;
|
||||||
|
static nsHtml5ElementName* EXPONENTIALE;
|
||||||
|
static nsHtml5ElementName* FETURBULENCE;
|
||||||
|
static nsHtml5ElementName* FEPOINTLIGHT;
|
||||||
|
static nsHtml5ElementName* FEMORPHOLOGY;
|
||||||
|
static nsHtml5ElementName* OUTERPRODUCT;
|
||||||
|
static nsHtml5ElementName* ANIMATEMOTION;
|
||||||
|
static nsHtml5ElementName* COLOR_PROFILE;
|
||||||
|
static nsHtml5ElementName* FONT_FACE_SRC;
|
||||||
|
static nsHtml5ElementName* FONT_FACE_URI;
|
||||||
|
static nsHtml5ElementName* FOREIGNOBJECT;
|
||||||
|
static nsHtml5ElementName* FECOLORMATRIX;
|
||||||
|
static nsHtml5ElementName* MISSING_GLYPH;
|
||||||
|
static nsHtml5ElementName* MMULTISCRIPTS;
|
||||||
|
static nsHtml5ElementName* SCALARPRODUCT;
|
||||||
|
static nsHtml5ElementName* VECTORPRODUCT;
|
||||||
|
static nsHtml5ElementName* ANNOTATION_XML;
|
||||||
|
static nsHtml5ElementName* DEFINITION_SRC;
|
||||||
|
static nsHtml5ElementName* FONT_FACE_NAME;
|
||||||
|
static nsHtml5ElementName* FEGAUSSIANBLUR;
|
||||||
|
static nsHtml5ElementName* FEDISTANTLIGHT;
|
||||||
|
static nsHtml5ElementName* LINEARGRADIENT;
|
||||||
|
static nsHtml5ElementName* NATURALNUMBERS;
|
||||||
|
static nsHtml5ElementName* RADIALGRADIENT;
|
||||||
|
static nsHtml5ElementName* ANIMATETRANSFORM;
|
||||||
|
static nsHtml5ElementName* CARTESIANPRODUCT;
|
||||||
|
static nsHtml5ElementName* FONT_FACE_FORMAT;
|
||||||
|
static nsHtml5ElementName* FECONVOLVEMATRIX;
|
||||||
|
static nsHtml5ElementName* FEDIFFUSELIGHTING;
|
||||||
|
static nsHtml5ElementName* FEDISPLACEMENTMAP;
|
||||||
|
static nsHtml5ElementName* FESPECULARLIGHTING;
|
||||||
|
static nsHtml5ElementName* DOMAINOFAPPLICATION;
|
||||||
|
static nsHtml5ElementName* FECOMPONENTTRANSFER;
|
||||||
|
private:
|
||||||
|
static nsHtml5ElementName** ELEMENT_NAMES;
|
||||||
|
static jArray<PRInt32,PRInt32> ELEMENT_HASHES;
|
||||||
|
public:
|
||||||
|
static void initializeStatics();
|
||||||
|
static void releaseStatics();
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef nsHtml5ElementName_cpp__
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NULL_ELEMENT_NAME = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::A = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::B = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::G = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::I = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::P = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::Q = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::S = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::U = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EQ = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H1 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H2 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H3 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H4 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H5 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::H6 = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MO = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::UL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::AND = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ABS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BIG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BDO = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CSC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DEL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DFN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIV = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EXP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GCD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GEQ = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IMG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::KBD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LOG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LCM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LEQ = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MTD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MAP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MTR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MAX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NEQ = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NAV = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PRE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::REM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SUB = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SEC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SVG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SUM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SEP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::USE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VAR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::WBR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::XMP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::XOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::AREA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ABBR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BASE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BVAR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BODY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CARD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CODE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CITE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CSCH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COSH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COTH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CURL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DESC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIFF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DEFS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FORM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GRAD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HEAD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HTML = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LINE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LINK = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LIST = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::META = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSUB = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MODE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MATH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MARK = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MASK = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MEAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MENU = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MROW = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NONE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOBR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NEST = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PATH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PLUS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RULE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::REAL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RELN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RECT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ROOT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RUBY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SECH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SINH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SPAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SAMP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::STOP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SDEV = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TIME = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TRUE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TREF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TANH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TEXT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VIEW = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ASIDE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::AUDIO = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::APPLY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EMBED = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FRAME = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FALSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FLOOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GLYPH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HKERN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IMAGE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IDENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INPUT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LABEL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LIMIT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MFRAC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MPATH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::METER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MOVER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MINUS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MROOT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSQRT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MTEXT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOTIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PIECE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PARAM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::POWER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::REALS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::STYLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SMALL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::THEAD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TABLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TITLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TSPAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TIMES = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TFOOT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TBODY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::UNION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VKERN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VIDEO = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCSEC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCSC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCTAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCSIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCOS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::APPLET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCOT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::APPROX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BUTTON = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CIRCLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CENTER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CURSOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CANVAS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIVIDE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DEGREE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIALOG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DOMAIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EXISTS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FETILE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FIGURE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FORALL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FILTER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FOOTER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HEADER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IFRAME = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::KEYGEN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LAMBDA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LEGEND = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSPACE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MTABLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSTYLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MGLYPH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MEDIAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MUNDER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MARKER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MERROR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MOMENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MATRIX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OPTION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OBJECT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OUTPUT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PRIMES = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SOURCE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::STRIKE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::STRONG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SWITCH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SYMBOL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SPACER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SELECT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SUBSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SCRIPT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TBREAK = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VECTOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARTICLE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANIMATE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCSECH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCSCH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCTANH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCSINH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCOSH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ARCCOTH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ACRONYM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ADDRESS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BGSOUND = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COMMAND = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COMPOSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CEILING = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CSYMBOL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CAPTION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DISCARD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DECLARE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DETAILS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ELLIPSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEFUNCA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEFUNCB = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEBLEND = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEFLOOD = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEIMAGE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEMERGE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEFUNCG = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEFUNCR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::HANDLER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INVERSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IMPLIES = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ISINDEX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LOGBASE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LISTING = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MFENCED = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MPADDED = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MARQUEE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MACTION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MSUBSUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOEMBED = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::POLYGON = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PATTERN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PRODUCT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SETDIFF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SECTION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TENDSTO = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::UPLIMIT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ALTGLYPH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BASEFONT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CLIPPATH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CODOMAIN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COLGROUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DATAGRID = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EMPTYSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FACTOROF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FIELDSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FRAMESET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEOFFSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::GLYPHREF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INTERVAL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INTEGERS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INFINITY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LISTENER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LOWLIMIT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::METADATA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MENCLOSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MPHANTOM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOFRAMES = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOSCRIPT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OPTGROUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::POLYLINE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PREFETCH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PROGRESS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PRSUBSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::QUOTIENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SELECTOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TEXTAREA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TEXTPATH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VARIANCE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANIMATION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CONJUGATE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CONDITION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COMPLEXES = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT_FACE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FACTORIAL = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::INTERSECT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IMAGINARY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LAPLACIAN = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MATRIXROW = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOTSUBSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OTHERWISE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PIECEWISE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PLAINTEXT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RATIONALS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SEMANTICS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::TRANSPOSE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANNOTATION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::BLOCKQUOTE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DIVERGENCE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EULERGAMMA = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EQUIVALENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::IMAGINARYI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MALIGNMARK = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MUNDEROVER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MLABELEDTR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOTANUMBER = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SOLIDCOLOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ALTGLYPHDEF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DETERMINANT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EVENTSOURCE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEMERGENODE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FECOMPOSITE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FESPOTLIGHT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MALIGNGROUP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MPRESCRIPTS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MOMENTABOUT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NOTPRSUBSET = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::PARTIALDIFF = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ALTGLYPHITEM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANIMATECOLOR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DATATEMPLATE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::EXPONENTIALE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FETURBULENCE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEPOINTLIGHT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEMORPHOLOGY = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::OUTERPRODUCT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANIMATEMOTION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::COLOR_PROFILE = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT_FACE_SRC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT_FACE_URI = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FOREIGNOBJECT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FECOLORMATRIX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MISSING_GLYPH = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::MMULTISCRIPTS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::SCALARPRODUCT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::VECTORPRODUCT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANNOTATION_XML = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DEFINITION_SRC = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT_FACE_NAME = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEGAUSSIANBLUR = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEDISTANTLIGHT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::LINEARGRADIENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::NATURALNUMBERS = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::RADIALGRADIENT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::ANIMATETRANSFORM = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::CARTESIANPRODUCT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FONT_FACE_FORMAT = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FECONVOLVEMATRIX = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEDIFFUSELIGHTING = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FEDISPLACEMENTMAP = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FESPECULARLIGHTING = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::DOMAINOFAPPLICATION = nsnull;
|
||||||
|
nsHtml5ElementName* nsHtml5ElementName::FECOMPONENTTRANSFER = nsnull;
|
||||||
|
nsHtml5ElementName** nsHtml5ElementName::ELEMENT_NAMES = nsnull;
|
||||||
|
jArray<PRInt32,PRInt32> nsHtml5ElementName::ELEMENT_HASHES = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,237 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit HtmlAttributes.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define nsHtml5HtmlAttributes_cpp__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
#include "nsHtml5Tokenizer.h"
|
||||||
|
#include "nsHtml5TreeBuilder.h"
|
||||||
|
#include "nsHtml5MetaScanner.h"
|
||||||
|
#include "nsHtml5AttributeName.h"
|
||||||
|
#include "nsHtml5ElementName.h"
|
||||||
|
#include "nsHtml5StackNode.h"
|
||||||
|
#include "nsHtml5UTF16Buffer.h"
|
||||||
|
#include "nsHtml5StateSnapshot.h"
|
||||||
|
#include "nsHtml5Portability.h"
|
||||||
|
|
||||||
|
#include "nsHtml5HtmlAttributes.h"
|
||||||
|
|
||||||
|
|
||||||
|
nsHtml5HtmlAttributes::nsHtml5HtmlAttributes(PRInt32 mode)
|
||||||
|
: mode(mode),
|
||||||
|
length(0),
|
||||||
|
names(jArray<nsHtml5AttributeName*,PRInt32>(5)),
|
||||||
|
values(jArray<nsString*,PRInt32>(5))
|
||||||
|
{
|
||||||
|
MOZ_COUNT_CTOR(nsHtml5HtmlAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
nsHtml5HtmlAttributes::~nsHtml5HtmlAttributes()
|
||||||
|
{
|
||||||
|
MOZ_COUNT_DTOR(nsHtml5HtmlAttributes);
|
||||||
|
clear(0);
|
||||||
|
names.release();
|
||||||
|
values.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
PRInt32
|
||||||
|
nsHtml5HtmlAttributes::getIndex(nsHtml5AttributeName* name)
|
||||||
|
{
|
||||||
|
for (PRInt32 i = 0; i < length; i++) {
|
||||||
|
if (names[i] == name) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRInt32
|
||||||
|
nsHtml5HtmlAttributes::getLength()
|
||||||
|
{
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIAtom*
|
||||||
|
nsHtml5HtmlAttributes::getLocalName(PRInt32 index)
|
||||||
|
{
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index]->getLocal(mode);
|
||||||
|
} else {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nsHtml5AttributeName*
|
||||||
|
nsHtml5HtmlAttributes::getAttributeName(PRInt32 index)
|
||||||
|
{
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index];
|
||||||
|
} else {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PRInt32
|
||||||
|
nsHtml5HtmlAttributes::getURI(PRInt32 index)
|
||||||
|
{
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index]->getUri(mode);
|
||||||
|
} else {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIAtom*
|
||||||
|
nsHtml5HtmlAttributes::getPrefix(PRInt32 index)
|
||||||
|
{
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return names[index]->getPrefix(mode);
|
||||||
|
} else {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString*
|
||||||
|
nsHtml5HtmlAttributes::getValue(PRInt32 index)
|
||||||
|
{
|
||||||
|
if (index < length && index >= 0) {
|
||||||
|
return values[index];
|
||||||
|
} else {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString*
|
||||||
|
nsHtml5HtmlAttributes::getValue(nsHtml5AttributeName* name)
|
||||||
|
{
|
||||||
|
PRInt32 index = getIndex(name);
|
||||||
|
if (index == -1) {
|
||||||
|
return nsnull;
|
||||||
|
} else {
|
||||||
|
return getValue(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::addAttribute(nsHtml5AttributeName* name, nsString* value)
|
||||||
|
{
|
||||||
|
if (names.length == length) {
|
||||||
|
PRInt32 newLen = length << 1;
|
||||||
|
jArray<nsHtml5AttributeName*,PRInt32> newNames = jArray<nsHtml5AttributeName*,PRInt32>(newLen);
|
||||||
|
nsHtml5ArrayCopy::arraycopy(names, newNames, names.length);
|
||||||
|
names.release();
|
||||||
|
names = newNames;
|
||||||
|
jArray<nsString*,PRInt32> newValues = jArray<nsString*,PRInt32>(newLen);
|
||||||
|
nsHtml5ArrayCopy::arraycopy(values, newValues, values.length);
|
||||||
|
values.release();
|
||||||
|
values = newValues;
|
||||||
|
}
|
||||||
|
names[length] = name;
|
||||||
|
values[length] = value;
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::clear(PRInt32 m)
|
||||||
|
{
|
||||||
|
for (PRInt32 i = 0; i < length; i++) {
|
||||||
|
names[i]->release();
|
||||||
|
names[i] = nsnull;
|
||||||
|
nsHtml5Portability::releaseString(values[i]);
|
||||||
|
values[i] = nsnull;
|
||||||
|
}
|
||||||
|
length = 0;
|
||||||
|
mode = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::releaseValue(PRInt32 i)
|
||||||
|
{
|
||||||
|
nsHtml5Portability::releaseString(values[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::clearWithoutReleasingContents()
|
||||||
|
{
|
||||||
|
for (PRInt32 i = 0; i < length; i++) {
|
||||||
|
names[i] = nsnull;
|
||||||
|
values[i] = nsnull;
|
||||||
|
}
|
||||||
|
length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5HtmlAttributes::contains(nsHtml5AttributeName* name)
|
||||||
|
{
|
||||||
|
for (PRInt32 i = 0; i < length; i++) {
|
||||||
|
if (name->equalsAnother(names[i])) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::adjustForMath()
|
||||||
|
{
|
||||||
|
mode = NS_HTML5ATTRIBUTE_NAME_MATHML;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::adjustForSvg()
|
||||||
|
{
|
||||||
|
mode = NS_HTML5ATTRIBUTE_NAME_SVG;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::initializeStatics()
|
||||||
|
{
|
||||||
|
EMPTY_ATTRIBUTES = new nsHtml5HtmlAttributes(NS_HTML5ATTRIBUTE_NAME_HTML);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5HtmlAttributes::releaseStatics()
|
||||||
|
{
|
||||||
|
delete EMPTY_ATTRIBUTES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit HtmlAttributes.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsHtml5HtmlAttributes_h__
|
||||||
|
#define nsHtml5HtmlAttributes_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
class nsHtml5Parser;
|
||||||
|
|
||||||
|
class nsHtml5Tokenizer;
|
||||||
|
class nsHtml5TreeBuilder;
|
||||||
|
class nsHtml5MetaScanner;
|
||||||
|
class nsHtml5AttributeName;
|
||||||
|
class nsHtml5ElementName;
|
||||||
|
class nsHtml5UTF16Buffer;
|
||||||
|
class nsHtml5StateSnapshot;
|
||||||
|
class nsHtml5Portability;
|
||||||
|
|
||||||
|
|
||||||
|
class nsHtml5HtmlAttributes
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static nsHtml5HtmlAttributes* EMPTY_ATTRIBUTES;
|
||||||
|
private:
|
||||||
|
PRInt32 mode;
|
||||||
|
PRInt32 length;
|
||||||
|
jArray<nsHtml5AttributeName*,PRInt32> names;
|
||||||
|
jArray<nsString*,PRInt32> values;
|
||||||
|
public:
|
||||||
|
nsHtml5HtmlAttributes(PRInt32 mode);
|
||||||
|
~nsHtml5HtmlAttributes();
|
||||||
|
PRInt32 getIndex(nsHtml5AttributeName* name);
|
||||||
|
PRInt32 getLength();
|
||||||
|
nsIAtom* getLocalName(PRInt32 index);
|
||||||
|
nsHtml5AttributeName* getAttributeName(PRInt32 index);
|
||||||
|
PRInt32 getURI(PRInt32 index);
|
||||||
|
nsIAtom* getPrefix(PRInt32 index);
|
||||||
|
nsString* getValue(PRInt32 index);
|
||||||
|
nsString* getValue(nsHtml5AttributeName* name);
|
||||||
|
void addAttribute(nsHtml5AttributeName* name, nsString* value);
|
||||||
|
void clear(PRInt32 m);
|
||||||
|
void releaseValue(PRInt32 i);
|
||||||
|
void clearWithoutReleasingContents();
|
||||||
|
PRBool contains(nsHtml5AttributeName* name);
|
||||||
|
void adjustForMath();
|
||||||
|
void adjustForSvg();
|
||||||
|
static void initializeStatics();
|
||||||
|
static void releaseStatics();
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef nsHtml5HtmlAttributes_cpp__
|
||||||
|
nsHtml5HtmlAttributes* nsHtml5HtmlAttributes::EMPTY_ATTRIBUTES = nsnull;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,713 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit MetaScanner.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define nsHtml5MetaScanner_cpp__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
#include "nsHtml5Tokenizer.h"
|
||||||
|
#include "nsHtml5TreeBuilder.h"
|
||||||
|
#include "nsHtml5AttributeName.h"
|
||||||
|
#include "nsHtml5ElementName.h"
|
||||||
|
#include "nsHtml5HtmlAttributes.h"
|
||||||
|
#include "nsHtml5StackNode.h"
|
||||||
|
#include "nsHtml5UTF16Buffer.h"
|
||||||
|
#include "nsHtml5StateSnapshot.h"
|
||||||
|
#include "nsHtml5Portability.h"
|
||||||
|
|
||||||
|
#include "nsHtml5MetaScanner.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5MetaScanner::stateLoop(PRInt32 state)
|
||||||
|
{
|
||||||
|
PRInt32 c = -1;
|
||||||
|
PRBool reconsume = PR_FALSE;
|
||||||
|
stateloop: for (; ; ) {
|
||||||
|
switch(state) {
|
||||||
|
case NS_HTML5META_SCANNER_DATA: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '<': {
|
||||||
|
state = NS_HTML5META_SCANNER_TAG_OPEN;
|
||||||
|
goto dataloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dataloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_TAG_OPEN: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case 'm':
|
||||||
|
case 'M': {
|
||||||
|
metaState = NS_HTML5META_SCANNER_M;
|
||||||
|
state = NS_HTML5META_SCANNER_TAG_NAME;
|
||||||
|
goto tagopenloop_end;
|
||||||
|
}
|
||||||
|
case '!': {
|
||||||
|
state = NS_HTML5META_SCANNER_MARKUP_DECLARATION_OPEN;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '\?':
|
||||||
|
case '/': {
|
||||||
|
state = NS_HTML5META_SCANNER_SCAN_UNTIL_GT;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
|
||||||
|
metaState = NS_HTML5META_SCANNER_NO;
|
||||||
|
state = NS_HTML5META_SCANNER_TAG_NAME;
|
||||||
|
goto tagopenloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
reconsume = PR_TRUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tagopenloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_TAG_NAME: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME;
|
||||||
|
goto tagnameloop_end;
|
||||||
|
}
|
||||||
|
case '/': {
|
||||||
|
state = NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case 'e':
|
||||||
|
case 'E': {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_M) {
|
||||||
|
metaState = NS_HTML5META_SCANNER_E;
|
||||||
|
} else {
|
||||||
|
metaState = NS_HTML5META_SCANNER_NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case 't':
|
||||||
|
case 'T': {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_E) {
|
||||||
|
metaState = NS_HTML5META_SCANNER_T;
|
||||||
|
} else {
|
||||||
|
metaState = NS_HTML5META_SCANNER_NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case 'a':
|
||||||
|
case 'A': {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_T) {
|
||||||
|
metaState = NS_HTML5META_SCANNER_A;
|
||||||
|
} else {
|
||||||
|
metaState = NS_HTML5META_SCANNER_NO;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
metaState = NS_HTML5META_SCANNER_NO;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tagnameloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case '/': {
|
||||||
|
state = NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case 'c':
|
||||||
|
case 'C': {
|
||||||
|
contentIndex = 0;
|
||||||
|
charsetIndex = 0;
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_NAME;
|
||||||
|
goto beforeattributenameloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_NAME;
|
||||||
|
goto beforeattributenameloop_end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
beforeattributenameloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_ATTRIBUTE_NAME: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
state = NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_NAME;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '/': {
|
||||||
|
state = NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '=': {
|
||||||
|
strBufLen = 0;
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_VALUE;
|
||||||
|
goto attributenameloop_end;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_A) {
|
||||||
|
if (c >= 'A' && c <= 'Z') {
|
||||||
|
c += 0x20;
|
||||||
|
}
|
||||||
|
if (contentIndex == 6) {
|
||||||
|
contentIndex = -1;
|
||||||
|
} else if (contentIndex > -1 && contentIndex < 6 && (c == CONTENT[contentIndex + 1])) {
|
||||||
|
contentIndex++;
|
||||||
|
}
|
||||||
|
if (charsetIndex == 6) {
|
||||||
|
charsetIndex = -1;
|
||||||
|
} else if (charsetIndex > -1 && charsetIndex < 6 && (c == CHARSET[charsetIndex + 1])) {
|
||||||
|
charsetIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributenameloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_VALUE: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case '\"': {
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_DOUBLE_QUOTED;
|
||||||
|
goto beforeattributevalueloop_end;
|
||||||
|
}
|
||||||
|
case '\'': {
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_SINGLE_QUOTED;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (charsetIndex == 6 || contentIndex == 6) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_UNQUOTED;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
beforeattributevalueloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_DOUBLE_QUOTED: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '\"': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||||||
|
goto attributevaluedoublequotedloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributevaluedoublequotedloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_VALUE_QUOTED: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '/': {
|
||||||
|
state = NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG;
|
||||||
|
goto afterattributevaluequotedloop_end;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME;
|
||||||
|
reconsume = PR_TRUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
afterattributevaluequotedloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG: {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME;
|
||||||
|
reconsume = PR_TRUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_UNQUOTED: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_NAME: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
case '\n':
|
||||||
|
case '\f': {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case '/': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '=': {
|
||||||
|
state = NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_VALUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case 'c':
|
||||||
|
case 'C': {
|
||||||
|
contentIndex = 0;
|
||||||
|
charsetIndex = 0;
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_NAME;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
state = NS_HTML5META_SCANNER_ATTRIBUTE_NAME;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_MARKUP_DECLARATION_OPEN: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_MARKUP_DECLARATION_HYPHEN;
|
||||||
|
goto markupdeclarationopenloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_SCAN_UNTIL_GT;
|
||||||
|
reconsume = PR_TRUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
markupdeclarationopenloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_MARKUP_DECLARATION_HYPHEN: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT_START;
|
||||||
|
goto markupdeclarationhyphenloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_SCAN_UNTIL_GT;
|
||||||
|
reconsume = PR_TRUE;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
markupdeclarationhyphenloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_COMMENT_START: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT_START_DASH;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT;
|
||||||
|
goto commentstartloop_end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commentstartloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_COMMENT: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT_END_DASH;
|
||||||
|
goto commentloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commentloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_COMMENT_END_DASH: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT_END;
|
||||||
|
goto commentenddashloop_end;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commentenddashloop_end: ;
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_COMMENT_END: {
|
||||||
|
for (; ; ) {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_COMMENT_START_DASH: {
|
||||||
|
c = read();
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '-': {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT_END;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
state = NS_HTML5META_SCANNER_COMMENT;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_SINGLE_QUOTED: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '\'': {
|
||||||
|
if (tryCharset()) {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
state = NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (metaState == NS_HTML5META_SCANNER_A && (contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
addToBuffer(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case NS_HTML5META_SCANNER_SCAN_UNTIL_GT: {
|
||||||
|
for (; ; ) {
|
||||||
|
if (reconsume) {
|
||||||
|
reconsume = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
c = read();
|
||||||
|
}
|
||||||
|
switch(c) {
|
||||||
|
case -1: {
|
||||||
|
goto stateloop_end;
|
||||||
|
}
|
||||||
|
case '>': {
|
||||||
|
state = NS_HTML5META_SCANNER_DATA;
|
||||||
|
goto stateloop;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stateloop_end: ;
|
||||||
|
stateSave = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5MetaScanner::addToBuffer(PRInt32 c)
|
||||||
|
{
|
||||||
|
if (strBufLen == strBuf.length) {
|
||||||
|
jArray<PRUnichar,PRInt32> newBuf = jArray<PRUnichar,PRInt32>(strBuf.length + (strBuf.length << 1));
|
||||||
|
nsHtml5ArrayCopy::arraycopy(strBuf, newBuf, strBuf.length);
|
||||||
|
strBuf.release();
|
||||||
|
strBuf = newBuf;
|
||||||
|
}
|
||||||
|
strBuf[strBufLen++] = (PRUnichar) c;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5MetaScanner::tryCharset()
|
||||||
|
{
|
||||||
|
if (metaState != NS_HTML5META_SCANNER_A || !(contentIndex == 6 || charsetIndex == 6)) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
nsString* attVal = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen);
|
||||||
|
nsString* candidateEncoding;
|
||||||
|
if (contentIndex == 6) {
|
||||||
|
candidateEncoding = nsHtml5TreeBuilder::extractCharsetFromContent(attVal);
|
||||||
|
nsHtml5Portability::releaseString(attVal);
|
||||||
|
} else {
|
||||||
|
candidateEncoding = attVal;
|
||||||
|
}
|
||||||
|
if (!candidateEncoding) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
PRBool rv = tryCharset(candidateEncoding);
|
||||||
|
nsHtml5Portability::releaseString(candidateEncoding);
|
||||||
|
contentIndex = -1;
|
||||||
|
charsetIndex = -1;
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5MetaScanner::initializeStatics()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5MetaScanner::releaseStatics()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "nsHtml5MetaScannerCppSupplement.h"
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Henri Sivonen
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit MetaScanner.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsHtml5MetaScanner_h__
|
||||||
|
#define nsHtml5MetaScanner_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
class nsHtml5Parser;
|
||||||
|
|
||||||
|
class nsHtml5Tokenizer;
|
||||||
|
class nsHtml5TreeBuilder;
|
||||||
|
class nsHtml5AttributeName;
|
||||||
|
class nsHtml5ElementName;
|
||||||
|
class nsHtml5HtmlAttributes;
|
||||||
|
class nsHtml5UTF16Buffer;
|
||||||
|
class nsHtml5StateSnapshot;
|
||||||
|
class nsHtml5Portability;
|
||||||
|
|
||||||
|
|
||||||
|
class nsHtml5MetaScanner
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static PRUnichar CHARSET[];
|
||||||
|
static PRUnichar CONTENT[];
|
||||||
|
protected:
|
||||||
|
nsHtml5ByteReadable* readable;
|
||||||
|
private:
|
||||||
|
PRInt32 metaState;
|
||||||
|
PRInt32 contentIndex;
|
||||||
|
PRInt32 charsetIndex;
|
||||||
|
protected:
|
||||||
|
PRInt32 stateSave;
|
||||||
|
private:
|
||||||
|
PRInt32 strBufLen;
|
||||||
|
jArray<PRUnichar,PRInt32> strBuf;
|
||||||
|
protected:
|
||||||
|
void stateLoop(PRInt32 state);
|
||||||
|
private:
|
||||||
|
void addToBuffer(PRInt32 c);
|
||||||
|
PRBool tryCharset();
|
||||||
|
protected:
|
||||||
|
PRBool tryCharset(nsString* encoding);
|
||||||
|
public:
|
||||||
|
static void initializeStatics();
|
||||||
|
static void releaseStatics();
|
||||||
|
|
||||||
|
#include "nsHtml5MetaScannerHSupplement.h"
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef nsHtml5MetaScanner_cpp__
|
||||||
|
PRUnichar nsHtml5MetaScanner::CHARSET[] = { 'c', 'h', 'a', 'r', 's', 'e', 't' };
|
||||||
|
PRUnichar nsHtml5MetaScanner::CONTENT[] = { 'c', 'o', 'n', 't', 'e', 'n', 't' };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NS_HTML5META_SCANNER_NO 0
|
||||||
|
#define NS_HTML5META_SCANNER_M 1
|
||||||
|
#define NS_HTML5META_SCANNER_E 2
|
||||||
|
#define NS_HTML5META_SCANNER_T 3
|
||||||
|
#define NS_HTML5META_SCANNER_A 4
|
||||||
|
#define NS_HTML5META_SCANNER_DATA 0
|
||||||
|
#define NS_HTML5META_SCANNER_TAG_OPEN 1
|
||||||
|
#define NS_HTML5META_SCANNER_SCAN_UNTIL_GT 2
|
||||||
|
#define NS_HTML5META_SCANNER_TAG_NAME 3
|
||||||
|
#define NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_NAME 4
|
||||||
|
#define NS_HTML5META_SCANNER_ATTRIBUTE_NAME 5
|
||||||
|
#define NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_NAME 6
|
||||||
|
#define NS_HTML5META_SCANNER_BEFORE_ATTRIBUTE_VALUE 7
|
||||||
|
#define NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_DOUBLE_QUOTED 8
|
||||||
|
#define NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_SINGLE_QUOTED 9
|
||||||
|
#define NS_HTML5META_SCANNER_ATTRIBUTE_VALUE_UNQUOTED 10
|
||||||
|
#define NS_HTML5META_SCANNER_AFTER_ATTRIBUTE_VALUE_QUOTED 11
|
||||||
|
#define NS_HTML5META_SCANNER_MARKUP_DECLARATION_OPEN 13
|
||||||
|
#define NS_HTML5META_SCANNER_MARKUP_DECLARATION_HYPHEN 14
|
||||||
|
#define NS_HTML5META_SCANNER_COMMENT_START 15
|
||||||
|
#define NS_HTML5META_SCANNER_COMMENT_START_DASH 16
|
||||||
|
#define NS_HTML5META_SCANNER_COMMENT 17
|
||||||
|
#define NS_HTML5META_SCANNER_COMMENT_END_DASH 18
|
||||||
|
#define NS_HTML5META_SCANNER_COMMENT_END 19
|
||||||
|
#define NS_HTML5META_SCANNER_SELF_CLOSING_START_TAG 20
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "nsICharsetConverterManager.h"
|
||||||
|
#include "nsServiceManagerUtils.h"
|
||||||
|
#include "nsICharsetAlias.h"
|
||||||
|
#include "nsEncoderDecoderUtils.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
|
||||||
|
static NS_DEFINE_CID(kCharsetAliasCID, NS_CHARSETALIAS_CID);
|
||||||
|
|
||||||
|
nsHtml5MetaScanner::nsHtml5MetaScanner()
|
||||||
|
: readable(nsnull),
|
||||||
|
metaState(NS_HTML5META_SCANNER_NO),
|
||||||
|
contentIndex(-1),
|
||||||
|
charsetIndex(-1),
|
||||||
|
stateSave(NS_HTML5META_SCANNER_DATA),
|
||||||
|
strBufLen(0),
|
||||||
|
strBuf(jArray<PRUnichar,PRInt32>(36))
|
||||||
|
{
|
||||||
|
MOZ_COUNT_CTOR(nsHtml5MetaScanner);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsHtml5MetaScanner::~nsHtml5MetaScanner()
|
||||||
|
{
|
||||||
|
MOZ_COUNT_DTOR(nsHtml5MetaScanner);
|
||||||
|
strBuf.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5MetaScanner::sniff(nsHtml5ByteReadable* bytes, nsIUnicodeDecoder** decoder, nsACString& charset)
|
||||||
|
{
|
||||||
|
readable = bytes;
|
||||||
|
stateLoop(stateSave);
|
||||||
|
readable = nsnull;
|
||||||
|
if (mUnicodeDecoder) {
|
||||||
|
mUnicodeDecoder.forget(decoder);
|
||||||
|
charset.Assign(mCharset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5MetaScanner::tryCharset(nsString* charset)
|
||||||
|
{
|
||||||
|
nsresult res = NS_OK;
|
||||||
|
nsCOMPtr<nsICharsetConverterManager> convManager = do_GetService(NS_CHARSETCONVERTERMANAGER_CONTRACTID, &res);
|
||||||
|
if (NS_FAILED(res)) {
|
||||||
|
NS_ERROR("Could not get CharsetConverterManager service.");
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
nsCAutoString encoding;
|
||||||
|
CopyUTF16toUTF8(*charset, encoding);
|
||||||
|
// XXX spec says only UTF-16
|
||||||
|
if (encoding.LowerCaseEqualsASCII("utf-16") ||
|
||||||
|
encoding.LowerCaseEqualsASCII("utf-16be") ||
|
||||||
|
encoding.LowerCaseEqualsASCII("utf-16le") ||
|
||||||
|
encoding.LowerCaseEqualsASCII("utf-32") ||
|
||||||
|
encoding.LowerCaseEqualsASCII("utf-32be") ||
|
||||||
|
encoding.LowerCaseEqualsASCII("utf-32le")) {
|
||||||
|
mCharset.Assign("utf-8");
|
||||||
|
res = convManager->GetUnicodeDecoderRaw(mCharset.get(), getter_AddRefs(mUnicodeDecoder));
|
||||||
|
if (NS_FAILED(res)) {
|
||||||
|
NS_ERROR("Could not get decoder for UTF-8.");
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
nsCAutoString preferred;
|
||||||
|
nsCOMPtr<nsICharsetAlias> calias(do_GetService(kCharsetAliasCID, &res));
|
||||||
|
if (NS_FAILED(res)) {
|
||||||
|
NS_ERROR("Could not get CharsetAlias service.");
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
res = calias->GetPreferred(encoding, preferred);
|
||||||
|
if (NS_FAILED(res)) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
if (preferred.LowerCaseEqualsASCII("utf-16") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-16be") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-16le") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-32") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-32be") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-32le") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("utf-7") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("jis_x0212-1990") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("x-jis0208") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("x-imap4-modified-utf7") ||
|
||||||
|
preferred.LowerCaseEqualsASCII("x-user-defined")) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
res = convManager->GetUnicodeDecoderRaw(preferred.get(), getter_AddRefs(mUnicodeDecoder));
|
||||||
|
if (res == NS_ERROR_UCONV_NOCONV) {
|
||||||
|
return PR_FALSE;
|
||||||
|
} else if (NS_FAILED(res)) {
|
||||||
|
NS_ERROR("Getting an encoding decoder failed in a bad way.");
|
||||||
|
mUnicodeDecoder = nsnull;
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
NS_ASSERTION(mUnicodeDecoder, "Getter nsresult and object don't match.");
|
||||||
|
mCharset.Assign(preferred);
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsCOMPtr<nsIUnicodeDecoder> mUnicodeDecoder;
|
||||||
|
nsCString mCharset;
|
||||||
|
inline PRInt32 read() {
|
||||||
|
return readable->read();
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
void sniff(nsHtml5ByteReadable* bytes, nsIUnicodeDecoder** decoder, nsACString& charset);
|
||||||
|
nsHtml5MetaScanner();
|
||||||
|
~nsHtml5MetaScanner();
|
|
@ -0,0 +1,115 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "nsContentUtils.h"
|
||||||
|
#include "nsHtml5AttributeName.h"
|
||||||
|
#include "nsHtml5ElementName.h"
|
||||||
|
#include "nsHtml5HtmlAttributes.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Portability.h"
|
||||||
|
#include "nsHtml5StackNode.h"
|
||||||
|
#include "nsHtml5Tokenizer.h"
|
||||||
|
#include "nsHtml5TreeBuilder.h"
|
||||||
|
#include "nsHtml5UTF16Buffer.h"
|
||||||
|
#include "nsHtml5Module.h"
|
||||||
|
|
||||||
|
// static
|
||||||
|
PRBool nsHtml5Module::Enabled = PR_FALSE;
|
||||||
|
|
||||||
|
// static
|
||||||
|
void
|
||||||
|
nsHtml5Module::InitializeStatics()
|
||||||
|
{
|
||||||
|
nsContentUtils::AddBoolPrefVarCache("html5.enable", &Enabled);
|
||||||
|
nsHtml5Atoms::AddRefAtoms();
|
||||||
|
nsHtml5AttributeName::initializeStatics();
|
||||||
|
nsHtml5ElementName::initializeStatics();
|
||||||
|
nsHtml5HtmlAttributes::initializeStatics();
|
||||||
|
nsHtml5NamedCharacters::initializeStatics();
|
||||||
|
nsHtml5Portability::initializeStatics();
|
||||||
|
nsHtml5StackNode::initializeStatics();
|
||||||
|
nsHtml5Tokenizer::initializeStatics();
|
||||||
|
nsHtml5TreeBuilder::initializeStatics();
|
||||||
|
nsHtml5UTF16Buffer::initializeStatics();
|
||||||
|
#ifdef DEBUG
|
||||||
|
sNsHtml5ModuleInitialized = PR_TRUE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void
|
||||||
|
nsHtml5Module::ReleaseStatics()
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
sNsHtml5ModuleInitialized = PR_FALSE;
|
||||||
|
#endif
|
||||||
|
nsHtml5AttributeName::releaseStatics();
|
||||||
|
nsHtml5ElementName::releaseStatics();
|
||||||
|
nsHtml5HtmlAttributes::releaseStatics();
|
||||||
|
nsHtml5NamedCharacters::releaseStatics();
|
||||||
|
nsHtml5Portability::releaseStatics();
|
||||||
|
nsHtml5StackNode::releaseStatics();
|
||||||
|
nsHtml5Tokenizer::releaseStatics();
|
||||||
|
nsHtml5TreeBuilder::releaseStatics();
|
||||||
|
nsHtml5UTF16Buffer::releaseStatics();
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
already_AddRefed<nsIParser>
|
||||||
|
nsHtml5Module::NewHtml5Parser()
|
||||||
|
{
|
||||||
|
NS_ABORT_IF_FALSE(sNsHtml5ModuleInitialized, "nsHtml5Module not initialized.");
|
||||||
|
nsIParser* rv = static_cast<nsIParser*> (new nsHtml5Parser());
|
||||||
|
NS_ADDREF(rv);
|
||||||
|
for (PRInt32 i = 0; i < 1000; i++) {
|
||||||
|
NS_ADDREF(rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
nsresult
|
||||||
|
nsHtml5Module::Initialize(nsIParser* aParser, nsIDocument* aDoc, nsIURI* aURI, nsISupports* aContainer, nsIChannel* aChannel)
|
||||||
|
{
|
||||||
|
NS_ABORT_IF_FALSE(sNsHtml5ModuleInitialized, "nsHtml5Module not initialized.");
|
||||||
|
nsHtml5Parser* parser = static_cast<nsHtml5Parser*> (aParser);
|
||||||
|
return parser->Initialize(aDoc, aURI, aContainer, aChannel);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
PRBool nsHtml5Module::sNsHtml5ModuleInitialized = PR_FALSE;
|
||||||
|
#endif
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5Module_h__
|
||||||
|
#define nsHtml5Module_h__
|
||||||
|
|
||||||
|
#include "nsIParser.h"
|
||||||
|
|
||||||
|
class nsHtml5Module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void InitializeStatics();
|
||||||
|
static void ReleaseStatics();
|
||||||
|
static already_AddRefed<nsIParser> NewHtml5Parser();
|
||||||
|
static nsresult Initialize(nsIParser* aParser, nsIDocument* aDoc, nsIURI* aURI, nsISupports* aContainer, nsIChannel* aChannel);
|
||||||
|
static PRBool Enabled;
|
||||||
|
#ifdef DEBUG
|
||||||
|
private:
|
||||||
|
static PRBool sNsHtml5ModuleInitialized;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsHtml5Module_h__
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef nsHtml5NamedCharacters_h__
|
||||||
|
#define nsHtml5NamedCharacters_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nscore.h"
|
||||||
|
|
||||||
|
class nsHtml5NamedCharacters
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static jArray<jArray<PRUnichar,PRInt32>,PRInt32> NAMES;
|
||||||
|
static jArray<PRUnichar,PRInt32>* VALUES;
|
||||||
|
static PRUnichar** WINDOWS_1252;
|
||||||
|
static void initializeStatics();
|
||||||
|
static void releaseStatics();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsHtml5NamedCharacters_h__
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,666 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef NS_HTML5_PARSER__
|
||||||
|
#define NS_HTML5_PARSER__
|
||||||
|
|
||||||
|
#include "nsAutoPtr.h"
|
||||||
|
#include "nsTimer.h"
|
||||||
|
#include "nsIParser.h"
|
||||||
|
#include "nsDeque.h"
|
||||||
|
#include "nsIURL.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
#include "nsITokenizer.h"
|
||||||
|
#include "nsThreadUtils.h"
|
||||||
|
#include "nsIContentSink.h"
|
||||||
|
#include "nsIParserFilter.h"
|
||||||
|
#include "nsIRequest.h"
|
||||||
|
#include "nsIChannel.h"
|
||||||
|
#include "nsCOMArray.h"
|
||||||
|
#include "nsContentSink.h"
|
||||||
|
#include "nsIHTMLDocument.h"
|
||||||
|
#include "nsIUnicharStreamListener.h"
|
||||||
|
#include "nsCycleCollectionParticipant.h"
|
||||||
|
#include "nsAutoPtr.h"
|
||||||
|
#include "nsIInputStream.h"
|
||||||
|
#include "nsIUnicodeDecoder.h"
|
||||||
|
#include "nsICharsetDetectionObserver.h"
|
||||||
|
#include "nsDetectionConfident.h"
|
||||||
|
#include "nsHtml5UTF16Buffer.h"
|
||||||
|
#include "nsHtml5MetaScanner.h"
|
||||||
|
|
||||||
|
#define NS_HTML5_PARSER_READ_BUFFER_SIZE 1024
|
||||||
|
#define NS_HTML5_PARSER_SNIFFING_BUFFER_SIZE 512
|
||||||
|
|
||||||
|
enum eHtml5ParserLifecycle {
|
||||||
|
/**
|
||||||
|
* The parser has told the tokenizer to start yet.
|
||||||
|
*/
|
||||||
|
NOT_STARTED = 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser has started the tokenizer and the stream hasn't ended yet.
|
||||||
|
*/
|
||||||
|
PARSING = 1,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser hasn't told the tokenizer to emit EOF yet, but the network
|
||||||
|
* stream has been exhausted or document.close() called.
|
||||||
|
*/
|
||||||
|
STREAM_ENDING = 2,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser has told the tokenizer to emit EOF.
|
||||||
|
*/
|
||||||
|
TERMINATED = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eBomState {
|
||||||
|
/**
|
||||||
|
* BOM sniffing hasn't started.
|
||||||
|
*/
|
||||||
|
BOM_SNIFFING_NOT_STARTED = 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing is ongoing, and the first byte of an UTF-16LE BOM has been
|
||||||
|
* seen.
|
||||||
|
*/
|
||||||
|
SEEN_UTF_16_LE_FIRST_BYTE = 1,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing is ongoing, and the first byte of an UTF-16BE BOM has been
|
||||||
|
* seen.
|
||||||
|
*/
|
||||||
|
SEEN_UTF_16_BE_FIRST_BYTE = 2,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing is ongoing, and the first byte of an UTF-8 BOM has been
|
||||||
|
* seen.
|
||||||
|
*/
|
||||||
|
SEEN_UTF_8_FIRST_BYTE = 3,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing is ongoing, and the first and second bytes of an UTF-8 BOM
|
||||||
|
* have been seen.
|
||||||
|
*/
|
||||||
|
SEEN_UTF_8_SECOND_BYTE = 4,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing was started but is now over for whatever reason.
|
||||||
|
*/
|
||||||
|
BOM_SNIFFING_OVER = 5
|
||||||
|
};
|
||||||
|
|
||||||
|
class nsHtml5Parser : public nsIParser,
|
||||||
|
public nsIStreamListener,
|
||||||
|
public nsICharsetDetectionObserver,
|
||||||
|
public nsIContentSink,
|
||||||
|
public nsContentSink {
|
||||||
|
public:
|
||||||
|
NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
|
||||||
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsHtml5Parser, nsContentSink)
|
||||||
|
|
||||||
|
nsHtml5Parser();
|
||||||
|
virtual ~nsHtml5Parser();
|
||||||
|
|
||||||
|
/* Start nsIParser */
|
||||||
|
/**
|
||||||
|
* No-op for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) SetContentSink(nsIContentSink* aSink);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns |this| for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(nsIContentSink*) GetContentSink(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Always returns "view" for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) GetCommand(nsCString& aCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) SetCommand(const char* aCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) SetCommand(eParserCommands aParserCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call this method once you've created a parser, and want to instruct it
|
||||||
|
* about what charset to load
|
||||||
|
*
|
||||||
|
* @param aCharset the charset of a document
|
||||||
|
* @param aCharsetSource the source of the charset
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) SetDocumentCharset(const nsACString& aCharset, PRInt32 aSource);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) GetDocumentCharset(nsACString& aCharset, PRInt32& aSource)
|
||||||
|
{
|
||||||
|
aCharset = mCharset;
|
||||||
|
aSource = mCharsetSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) SetParserFilter(nsIParserFilter* aFilter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the channel associated with this parser
|
||||||
|
* @param aChannel out param that will contain the result
|
||||||
|
* @return NS_OK if successful or NS_NOT_AVAILABLE if not
|
||||||
|
*/
|
||||||
|
NS_IMETHOD GetChannel(nsIChannel** aChannel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return |this| for backwards compat.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD GetDTD(nsIDTD** aDTD);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unblocks parser and calls ContinueInterruptedParsing()
|
||||||
|
*/
|
||||||
|
NS_IMETHOD ContinueParsing();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If scripts are not executing, maybe flushes tree builder and parses
|
||||||
|
* until suspension.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD ContinueInterruptedParsing();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't call. For interface backwards compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) BlockParser();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unblocks the parser.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void) UnblockParser();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query whether the parser is enabled or not.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(PRBool) IsParserEnabled();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query whether the parser thinks it's done with parsing.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(PRBool) IsComplete();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set up request observer.
|
||||||
|
*
|
||||||
|
* @param aURL ignored (for interface compat only)
|
||||||
|
* @param aListener a listener to forward notifications to
|
||||||
|
* @param aKey the root context key (used for document.write)
|
||||||
|
* @param aMode ignored (for interface compat only)
|
||||||
|
*/
|
||||||
|
NS_IMETHOD Parse(nsIURI* aURL,
|
||||||
|
nsIRequestObserver* aListener = nsnull,
|
||||||
|
void* aKey = 0,
|
||||||
|
nsDTDMode aMode = eDTDMode_autodetect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* document.write and document.close
|
||||||
|
*
|
||||||
|
* @param aSourceBuffer the argument of document.write (empty for .close())
|
||||||
|
* @param aKey a key unique to the script element that caused this call
|
||||||
|
* @param aContentType ignored (for interface compat only)
|
||||||
|
* @param aLastCall true if .close() false if .write()
|
||||||
|
* @param aMode ignored (for interface compat only)
|
||||||
|
*/
|
||||||
|
NS_IMETHOD Parse(const nsAString& aSourceBuffer,
|
||||||
|
void* aKey,
|
||||||
|
const nsACString& aContentType,
|
||||||
|
PRBool aLastCall,
|
||||||
|
nsDTDMode aMode = eDTDMode_autodetect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the key passed to initial Parse()
|
||||||
|
*/
|
||||||
|
NS_IMETHOD_(void *) GetRootContextKey();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the parser prematurely
|
||||||
|
*/
|
||||||
|
NS_IMETHOD Terminate(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't call. For interface backwards compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer,
|
||||||
|
void* aKey,
|
||||||
|
nsTArray<nsString>& aTagStack,
|
||||||
|
PRBool aXMLMode,
|
||||||
|
const nsACString& aContentType,
|
||||||
|
nsDTDMode aMode = eDTDMode_autodetect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke the fragment parsing algorithm (innerHTML).
|
||||||
|
*
|
||||||
|
* @param aSourceBuffer the string being set as innerHTML
|
||||||
|
* @param aTargetNode the target container (must QI to nsIContent)
|
||||||
|
* @param aContextLocalName local name of context node
|
||||||
|
* @param aContextNamespace namespace of context node
|
||||||
|
* @param aQuirks true to make <table> not close <p>
|
||||||
|
*/
|
||||||
|
NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer,
|
||||||
|
nsISupports* aTargetNode,
|
||||||
|
nsIAtom* aContextLocalName,
|
||||||
|
PRInt32 aContextNamespace,
|
||||||
|
PRBool aQuirks);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls ParseUntilSuspend()
|
||||||
|
*/
|
||||||
|
NS_IMETHOD BuildModel(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes continue parsing events
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP CancelParsingEvents();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the state to initial values
|
||||||
|
*/
|
||||||
|
virtual void Reset();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True in fragment mode and during synchronous document.write
|
||||||
|
*/
|
||||||
|
virtual PRBool CanInterrupt();
|
||||||
|
|
||||||
|
/* End nsIParser */
|
||||||
|
//*********************************************
|
||||||
|
// These methods are callback methods used by
|
||||||
|
// net lib to let us know about our inputstream.
|
||||||
|
//*********************************************
|
||||||
|
// nsIRequestObserver methods:
|
||||||
|
NS_DECL_NSIREQUESTOBSERVER
|
||||||
|
// nsIStreamListener methods:
|
||||||
|
NS_DECL_NSISTREAMLISTENER
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when the continue parse event is triggered.
|
||||||
|
*/
|
||||||
|
void HandleParserContinueEvent(class nsHtml5ParserContinueEvent *);
|
||||||
|
|
||||||
|
// EncodingDeclarationHandler
|
||||||
|
/**
|
||||||
|
* Tree builder uses this to report a late <meta charset>
|
||||||
|
*/
|
||||||
|
void internalEncodingDeclaration(nsString* aEncoding);
|
||||||
|
|
||||||
|
// DocumentModeHandler
|
||||||
|
/**
|
||||||
|
* Tree builder uses this to report quirkiness of the document
|
||||||
|
*/
|
||||||
|
void documentMode(nsHtml5DocumentMode m);
|
||||||
|
|
||||||
|
// nsICharsetDetectionObserver
|
||||||
|
/**
|
||||||
|
* Chardet calls this to report the detection result
|
||||||
|
*/
|
||||||
|
NS_IMETHOD Notify(const char* aCharset, nsDetectionConfident aConf);
|
||||||
|
|
||||||
|
// nsIContentSink
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unimplemented. For interface compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD WillParse();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unimplemented. For interface compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD WillBuildModel(nsDTDMode aDTDMode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emits EOF.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD DidBuildModel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forwards to nsContentSink
|
||||||
|
*/
|
||||||
|
NS_IMETHOD WillInterrupt();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unimplemented. For interface compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD WillResume();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unimplemented. For interface compat only.
|
||||||
|
*/
|
||||||
|
NS_IMETHOD SetParser(nsIParser* aParser);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op for backwards compat.
|
||||||
|
*/
|
||||||
|
virtual void FlushPendingNotifications(mozFlushType aType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets mCharset
|
||||||
|
*/
|
||||||
|
NS_IMETHOD SetDocumentCharset(nsACString& aCharset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the document.
|
||||||
|
*/
|
||||||
|
virtual nsISupports *GetTarget();
|
||||||
|
|
||||||
|
// Not from an external interface
|
||||||
|
public:
|
||||||
|
// nsContentSink methods
|
||||||
|
virtual nsresult Initialize(nsIDocument* aDoc,
|
||||||
|
nsIURI* aURI,
|
||||||
|
nsISupports* aContainer,
|
||||||
|
nsIChannel* aChannel);
|
||||||
|
virtual nsresult ProcessBASETag(nsIContent* aContent);
|
||||||
|
virtual void UpdateChildCounts();
|
||||||
|
virtual nsresult FlushTags();
|
||||||
|
virtual void PostEvaluateScript(nsIScriptElement *aElement);
|
||||||
|
using nsContentSink::Notify;
|
||||||
|
// Non-inherited methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <meta charset> scan failed. Try chardet if applicable. After this, the
|
||||||
|
* the parser will have some encoding even if a last resolt fallback.
|
||||||
|
*
|
||||||
|
* @param aFromSegment The current network buffer or null if the sniffing
|
||||||
|
* buffer is being flushed due to network stream ending.
|
||||||
|
* @param aCount The number of bytes in aFromSegment (ignored if
|
||||||
|
* aFromSegment is null)
|
||||||
|
* @param aWriteCount Return value for how many bytes got read from the
|
||||||
|
* buffer.
|
||||||
|
* @param aCountToSniffingLimit The number of unfilled slots in
|
||||||
|
* mSniffingBuffer
|
||||||
|
*/
|
||||||
|
nsresult FinalizeSniffing(const PRUint8* aFromSegment,
|
||||||
|
PRUint32 aCount,
|
||||||
|
PRUint32* aWriteCount,
|
||||||
|
PRUint32 aCountToSniffingLimit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set up the Unicode decoder and write the sniffing buffer into it
|
||||||
|
* followed by the current network buffer.
|
||||||
|
*
|
||||||
|
* @param aFromSegment The current network buffer or null if the sniffing
|
||||||
|
* buffer is being flushed due to network stream ending.
|
||||||
|
* @param aCount The number of bytes in aFromSegment (ignored if
|
||||||
|
* aFromSegment is null)
|
||||||
|
* @param aWriteCount Return value for how many bytes got read from the
|
||||||
|
* buffer.
|
||||||
|
*/
|
||||||
|
nsresult SetupDecodingAndWriteSniffingBufferAndCurrentSegment(const PRUint8* aFromSegment,
|
||||||
|
PRUint32 aCount,
|
||||||
|
PRUint32* aWriteCount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the sniffing buffer into the Unicode decoder followed by the
|
||||||
|
* current network buffer.
|
||||||
|
*
|
||||||
|
* @param aFromSegment The current network buffer or null if the sniffing
|
||||||
|
* buffer is being flushed due to network stream ending.
|
||||||
|
* @param aCount The number of bytes in aFromSegment (ignored if
|
||||||
|
* aFromSegment is null)
|
||||||
|
* @param aWriteCount Return value for how many bytes got read from the
|
||||||
|
* buffer.
|
||||||
|
*/
|
||||||
|
nsresult WriteSniffingBufferAndCurrentSegment(const PRUint8* aFromSegment,
|
||||||
|
PRUint32 aCount,
|
||||||
|
PRUint32* aWriteCount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the Unicode decoder, mark the BOM as the source and
|
||||||
|
* drop the sniffer.
|
||||||
|
*
|
||||||
|
* @param aCharsetName The charset name to report to the outside (UTF-16
|
||||||
|
* or UTF-8)
|
||||||
|
* @param aDecoderCharsetName The actual name for the decoder's charset
|
||||||
|
* (UTF-16BE, UTF-16LE or UTF-8; the BOM has
|
||||||
|
* been swallowed)
|
||||||
|
*/
|
||||||
|
nsresult SetupDecodingFromBom(const char* aCharsetName,
|
||||||
|
const char* aDecoderCharsetName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True when there is a Unicode decoder already
|
||||||
|
*/
|
||||||
|
PRBool HasDecoder() {
|
||||||
|
return !!mUnicodeDecoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push bytes from network when there is no Unicode decoder yet
|
||||||
|
*/
|
||||||
|
nsresult SniffStreamBytes(const PRUint8* aFromSegment,
|
||||||
|
PRUint32 aCount,
|
||||||
|
PRUint32* aWriteCount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push bytes from network when there is a Unicode decoder already
|
||||||
|
*/
|
||||||
|
nsresult WriteStreamBytes(const PRUint8* aFromSegment,
|
||||||
|
PRUint32 aCount,
|
||||||
|
PRUint32* aWriteCount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request event loop spin as soon as the tokenizer returns
|
||||||
|
*/
|
||||||
|
void Suspend();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request execution of the script element when the tokenizer returns
|
||||||
|
*/
|
||||||
|
void SetScriptElement(nsIContent* aScript);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up style sheet load / parse
|
||||||
|
*/
|
||||||
|
void UpdateStyleSheet(nsIContent* aElement);
|
||||||
|
|
||||||
|
// Getters and setters for fields from nsContentSink
|
||||||
|
nsIDocument* GetDocument() {
|
||||||
|
return mDocument;
|
||||||
|
}
|
||||||
|
nsNodeInfoManager* GetNodeInfoManager() {
|
||||||
|
return mNodeInfoManager;
|
||||||
|
}
|
||||||
|
nsIDocShell* GetDocShell() {
|
||||||
|
return mDocShell;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* Runs mScriptElement
|
||||||
|
*/
|
||||||
|
void ExecuteScript();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Posts a continue event if there isn't one already
|
||||||
|
*/
|
||||||
|
void MaybePostContinueEvent();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renavigates to the document with a different charset
|
||||||
|
*/
|
||||||
|
nsresult PerformCharsetSwitch();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse until pending data is exhausted or tree builder suspends
|
||||||
|
*/
|
||||||
|
void ParseUntilSuspend();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// State variables
|
||||||
|
/**
|
||||||
|
* Call to PerformCharsetSwitch() needed
|
||||||
|
*/
|
||||||
|
PRBool mNeedsCharsetSwitch;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the last character tokenized was a carriage return (for CRLF)
|
||||||
|
*/
|
||||||
|
PRBool mLastWasCR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser is in the fragment mode
|
||||||
|
*/
|
||||||
|
PRBool mFragmentMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser is blocking on a script
|
||||||
|
*/
|
||||||
|
PRBool mBlocked;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event loop will spin ASAP
|
||||||
|
*/
|
||||||
|
PRBool mSuspending;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current point on parser life cycle
|
||||||
|
*/
|
||||||
|
eHtml5ParserLifecycle mLifeCycle;
|
||||||
|
|
||||||
|
// script execution
|
||||||
|
/**
|
||||||
|
* Script to run ASAP
|
||||||
|
*/
|
||||||
|
nsCOMPtr<nsIContent> mScriptElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
PRBool mUninterruptibleDocWrite;
|
||||||
|
|
||||||
|
// Gecko integration
|
||||||
|
void* mRootContextKey;
|
||||||
|
nsCOMPtr<nsIRequest> mRequest;
|
||||||
|
nsCOMPtr<nsIRequestObserver> mObserver;
|
||||||
|
nsIRunnable* mContinueEvent; // weak ref
|
||||||
|
|
||||||
|
// encoding-related stuff
|
||||||
|
/**
|
||||||
|
* The source (confidence) of the character encoding in use
|
||||||
|
*/
|
||||||
|
PRInt32 mCharsetSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The character encoding in use
|
||||||
|
*/
|
||||||
|
nsCString mCharset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The character encoding to which to switch in a late <meta> renavigation
|
||||||
|
*/
|
||||||
|
nsCString mPendingCharset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Unicode decoder
|
||||||
|
*/
|
||||||
|
nsCOMPtr<nsIUnicodeDecoder> mUnicodeDecoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The buffer for sniffing the character encoding
|
||||||
|
*/
|
||||||
|
nsAutoArrayPtr<PRUint8> mSniffingBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of meaningful bytes in mSniffingBuffer
|
||||||
|
*/
|
||||||
|
PRUint32 mSniffingLength;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BOM sniffing state
|
||||||
|
*/
|
||||||
|
eBomState mBomState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <meta> prescan implementation
|
||||||
|
*/
|
||||||
|
nsAutoPtr<nsHtml5MetaScanner> mMetaScanner;
|
||||||
|
|
||||||
|
// Portable parser objects
|
||||||
|
/**
|
||||||
|
* The first buffer in the pending UTF-16 buffer queue
|
||||||
|
*/
|
||||||
|
nsHtml5UTF16Buffer* mFirstBuffer; // manually managed strong ref
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last buffer in the pending UTF-16 buffer queue
|
||||||
|
*/
|
||||||
|
nsHtml5UTF16Buffer* mLastBuffer; // weak ref; always points to
|
||||||
|
// a buffer of the size NS_HTML5_PARSER_READ_BUFFER_SIZE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The HTML5 tree builder
|
||||||
|
*/
|
||||||
|
nsAutoPtr<nsHtml5TreeBuilder> mTreeBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The HTML5 tokenizer
|
||||||
|
*/
|
||||||
|
nsAutoPtr<nsHtml5Tokenizer> mTokenizer;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
/**
|
||||||
|
* For asserting stream life cycle
|
||||||
|
*/
|
||||||
|
eStreamState mStreamListenerState;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GATHER_DOCWRITE_STATISTICS
|
||||||
|
nsHtml5StateSnapshot* mSnapshot;
|
||||||
|
static PRUint32 sUnsafeDocWrites;
|
||||||
|
static PRUint32 sTokenSafeDocWrites;
|
||||||
|
static PRUint32 sTreeSafeDocWrites;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -0,0 +1,79 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5PendingNotification_h__
|
||||||
|
#define nsHtml5PendingNotification_h__
|
||||||
|
|
||||||
|
#include "nsNodeUtils.h"
|
||||||
|
|
||||||
|
class nsHtml5TreeBuilder;
|
||||||
|
|
||||||
|
class nsHtml5PendingNotification {
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHtml5PendingNotification(nsIContent* aParent)
|
||||||
|
: mParent(aParent),
|
||||||
|
mChildCount(aParent->GetChildCount())
|
||||||
|
{
|
||||||
|
MOZ_COUNT_CTOR(nsHtml5PendingNotification);
|
||||||
|
}
|
||||||
|
|
||||||
|
~nsHtml5PendingNotification() {
|
||||||
|
MOZ_COUNT_DTOR(nsHtml5PendingNotification);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Fire() {
|
||||||
|
nsNodeUtils::ContentAppended(mParent, mChildCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PRBool Contains(nsIContent* aNode) {
|
||||||
|
return !!(mParent == aNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* An element
|
||||||
|
*/
|
||||||
|
nsIContent* mParent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Child count at start of notification deferring
|
||||||
|
*/
|
||||||
|
PRUint32 mChildCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsHtml5PendingNotification_h__
|
|
@ -0,0 +1,193 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2008-2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5Portability.h"
|
||||||
|
|
||||||
|
nsIAtom*
|
||||||
|
nsHtml5Portability::newLocalNameFromBuffer(PRUnichar* buf, PRInt32 offset, PRInt32 length)
|
||||||
|
{
|
||||||
|
NS_ASSERTION(!offset, "The offset should always be zero here.");
|
||||||
|
return NS_NewAtom(nsDependentSubstring(buf, buf + length));
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString*
|
||||||
|
nsHtml5Portability::newStringFromBuffer(PRUnichar* buf, PRInt32 offset, PRInt32 length)
|
||||||
|
{
|
||||||
|
return new nsString(buf + offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString*
|
||||||
|
nsHtml5Portability::newEmptyString()
|
||||||
|
{
|
||||||
|
return new nsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString*
|
||||||
|
nsHtml5Portability::newStringFromLiteral(const char* literal)
|
||||||
|
{
|
||||||
|
nsString* rv = new nsString();
|
||||||
|
rv->AssignASCII(literal);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
jArray<PRUnichar,PRInt32>
|
||||||
|
nsHtml5Portability::newCharArrayFromLocal(nsIAtom* local)
|
||||||
|
{
|
||||||
|
nsAutoString temp;
|
||||||
|
local->ToString(temp);
|
||||||
|
PRInt32 len = temp.Length();
|
||||||
|
jArray<PRUnichar,PRInt32> rv = jArray<PRUnichar,PRInt32>(len);
|
||||||
|
memcpy(rv, temp.BeginReading(), len * sizeof(PRUnichar));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
jArray<PRUnichar,PRInt32>
|
||||||
|
nsHtml5Portability::newCharArrayFromString(nsString* string)
|
||||||
|
{
|
||||||
|
PRInt32 len = string->Length();
|
||||||
|
jArray<PRUnichar,PRInt32> rv = jArray<PRUnichar,PRInt32>(len);
|
||||||
|
memcpy(rv, string->BeginReading(), len * sizeof(PRUnichar));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::releaseString(nsString* str)
|
||||||
|
{
|
||||||
|
delete str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::retainLocal(nsIAtom* local)
|
||||||
|
{
|
||||||
|
NS_IF_ADDREF(local);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::releaseLocal(nsIAtom* local)
|
||||||
|
{
|
||||||
|
NS_IF_RELEASE(local);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::retainElement(nsIContent* element)
|
||||||
|
{
|
||||||
|
NS_IF_ADDREF(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::releaseElement(nsIContent* element)
|
||||||
|
{
|
||||||
|
NS_IF_RELEASE(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5Portability::localEqualsBuffer(nsIAtom* local, PRUnichar* buf, PRInt32 offset, PRInt32 length)
|
||||||
|
{
|
||||||
|
return local->Equals(nsDependentString(buf + offset, buf + offset + length));
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5Portability::lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string)
|
||||||
|
{
|
||||||
|
if (!string) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
const char* litPtr = lowerCaseLiteral;
|
||||||
|
const PRUnichar* strPtr = string->BeginReading();
|
||||||
|
const PRUnichar* end = string->EndReading();
|
||||||
|
PRUnichar litChar;
|
||||||
|
while (litChar = *litPtr) {
|
||||||
|
NS_ASSERTION(!(litChar >= 'A' && litChar <= 'Z'), "Literal isn't in lower case.");
|
||||||
|
if (strPtr = end) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
PRUnichar strChar = *strPtr;
|
||||||
|
if (strChar >= 'A' && strChar <= 'Z') {
|
||||||
|
strChar += 0x20;
|
||||||
|
}
|
||||||
|
if (litChar != strChar) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
++litPtr;
|
||||||
|
++strPtr;
|
||||||
|
}
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string)
|
||||||
|
{
|
||||||
|
if (!string) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
return string->LowerCaseEqualsASCII(lowerCaseLiteral);
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsHtml5Portability::literalEqualsString(const char* literal, nsString* string)
|
||||||
|
{
|
||||||
|
if (!string) {
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
||||||
|
return string->EqualsASCII(literal);
|
||||||
|
}
|
||||||
|
|
||||||
|
jArray<PRUnichar,PRInt32>
|
||||||
|
nsHtml5Portability::isIndexPrompt()
|
||||||
|
{
|
||||||
|
// Yeah, this whole method is uncool
|
||||||
|
char* literal = "This is a searchable index. Insert your search keywords here: ";
|
||||||
|
jArray<PRUnichar,PRInt32> rv = jArray<PRUnichar,PRInt32>(62);
|
||||||
|
for (PRInt32 i = 0; i < 62; ++i) {
|
||||||
|
rv[i] = literal[i];
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::initializeStatics()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5Portability::releaseStatics()
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008-2009 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS IS A GENERATED FILE. PLEASE DO NOT EDIT.
|
||||||
|
* Please edit Portability.java instead and regenerate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsHtml5Portability_h__
|
||||||
|
#define nsHtml5Portability_h__
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsTraceRefcnt.h"
|
||||||
|
#include "jArray.h"
|
||||||
|
#include "nsHtml5DocumentMode.h"
|
||||||
|
#include "nsHtml5ArrayCopy.h"
|
||||||
|
#include "nsHtml5NamedCharacters.h"
|
||||||
|
#include "nsHtml5Atoms.h"
|
||||||
|
#include "nsHtml5ByteReadable.h"
|
||||||
|
|
||||||
|
class nsHtml5Parser;
|
||||||
|
|
||||||
|
class nsHtml5Tokenizer;
|
||||||
|
class nsHtml5TreeBuilder;
|
||||||
|
class nsHtml5MetaScanner;
|
||||||
|
class nsHtml5AttributeName;
|
||||||
|
class nsHtml5ElementName;
|
||||||
|
class nsHtml5HtmlAttributes;
|
||||||
|
class nsHtml5UTF16Buffer;
|
||||||
|
class nsHtml5StateSnapshot;
|
||||||
|
|
||||||
|
|
||||||
|
class nsHtml5Portability
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static nsIAtom* newLocalNameFromBuffer(PRUnichar* buf, PRInt32 offset, PRInt32 length);
|
||||||
|
static nsString* newStringFromBuffer(PRUnichar* buf, PRInt32 offset, PRInt32 length);
|
||||||
|
static nsString* newEmptyString();
|
||||||
|
static nsString* newStringFromLiteral(const char* literal);
|
||||||
|
static jArray<PRUnichar,PRInt32> newCharArrayFromLocal(nsIAtom* local);
|
||||||
|
static jArray<PRUnichar,PRInt32> newCharArrayFromString(nsString* string);
|
||||||
|
static void releaseString(nsString* str);
|
||||||
|
static void retainLocal(nsIAtom* local);
|
||||||
|
static void releaseLocal(nsIAtom* local);
|
||||||
|
static void retainElement(nsIContent* elt);
|
||||||
|
static void releaseElement(nsIContent* elt);
|
||||||
|
static PRBool localEqualsBuffer(nsIAtom* local, PRUnichar* buf, PRInt32 offset, PRInt32 length);
|
||||||
|
static PRBool lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string);
|
||||||
|
static PRBool lowerCaseLiteralEqualsIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string);
|
||||||
|
static PRBool literalEqualsString(const char* literal, nsString* string);
|
||||||
|
static jArray<PRUnichar,PRInt32> isIndexPrompt();
|
||||||
|
static void initializeStatics();
|
||||||
|
static void releaseStatics();
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef nsHtml5Portability_cpp__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "nsHtml5ReleasableAttributeName.h"
|
||||||
|
|
||||||
|
nsHtml5ReleasableAttributeName::nsHtml5ReleasableAttributeName(PRInt32* uri, nsIAtom** local, nsIAtom** prefix)
|
||||||
|
: nsHtml5AttributeName(uri, local, prefix)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5ReleasableAttributeName::release()
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nsHtml5ReleasableAttributeName_h__
|
||||||
|
#define nsHtml5ReleasableAttributeName_h__
|
||||||
|
|
||||||
|
#include "nsHtml5AttributeName.h"
|
||||||
|
|
||||||
|
class nsHtml5ReleasableAttributeName : public nsHtml5AttributeName
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
nsHtml5ReleasableAttributeName(PRInt32* uri, nsIAtom** local, nsIAtom** prefix);
|
||||||
|
virtual void release();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsHtml5ReleasableAttributeName_h__
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (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/MPL/
|
||||||
|
*
|
||||||
|
* 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 HTML Parser C++ Translator code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Mozilla Foundation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Henri Sivonen <hsivonen@iki.fi>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "nsHtml5ReleasableElementName.h"
|
||||||
|
|
||||||
|
nsHtml5ReleasableElementName::nsHtml5ReleasableElementName(nsIAtom* name)
|
||||||
|
: nsHtml5ElementName(name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsHtml5ReleasableElementName::release()
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче