diff --git a/htmlparser/public/nsHTMLTokens.h b/htmlparser/public/nsHTMLTokens.h
index 2a2d89d6bbe..f546acf1e58 100644
--- a/htmlparser/public/nsHTMLTokens.h
+++ b/htmlparser/public/nsHTMLTokens.h
@@ -97,10 +97,14 @@ const PRUnichar* GetTagName(PRInt32 aTag);
*/
class CHTMLToken : public CToken {
public:
- virtual ~CHTMLToken();
- CHTMLToken(eHTMLTags aTag);
- virtual const PRUint16 GetContainerInfo() { return NS_HTMLTOKENS_UNKNOWNFORM; }
- virtual void SetContainerInfo(PRUint16 aInfo) { }
+ virtual ~CHTMLToken();
+
+ CHTMLToken(eHTMLTags aTag);
+
+ virtual eContainerInfo GetContainerInfo(void) const {return eFormUnknown;}
+ virtual void SetContainerInfo(eContainerInfo aInfo) { }
+
+protected:
};
/**
@@ -113,36 +117,47 @@ class CStartToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CStartToken(eHTMLTags aTag=eHTMLTag_unknown);
- CStartToken(const nsAString& aString);
- CStartToken(const nsAString& aName,eHTMLTags aTag);
+ CStartToken(eHTMLTags aTag=eHTMLTag_unknown);
+ CStartToken(const nsAString& aString);
+ CStartToken(const nsAString& aName,eHTMLTags aTag);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual PRInt32 GetTypeID(void);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue();
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
- virtual void SetAttributeCount(PRInt16 aCount) { mAttrCount = aCount; }
- virtual PRInt16 GetAttributeCount(void) { return mAttrCount; }
- virtual void SetEmpty(PRBool aValue);
- virtual PRBool IsEmpty(void) { return mFlags & NS_HTMLTOKENS_EMPTYTOKEN; }
- //the following info is used to set well-formedness state on start tags...
- virtual void SetContainerInfo(PRUint16 aInfo);
- virtual const PRUint16 GetContainerInfo() { return mFlags; }
- virtual PRBool IsWellFormed(void) const { return mFlags & NS_HTMLTOKENS_WELLFORMED; }
-
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual PRInt32 GetTypeID(void);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+
+ virtual PRBool IsEmpty(void);
+ virtual void SetEmpty(PRBool aValue);
#ifdef DEBUG
- virtual void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
+ virtual const nsAString& GetStringValue();
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
- nsString mTextValue;
- nsString mTrailingContent;
+ //the following info is used to set well-formedness state on start tags...
+ virtual eContainerInfo GetContainerInfo(void) const {return mContainerInfo;}
+ virtual void SetContainerInfo(eContainerInfo aContainerInfo) {mContainerInfo=aContainerInfo;}
+ virtual PRBool IsWellFormed(void) const {return PRBool(eWellFormed==mContainerInfo);}
+
+
+ /*
+ * Get and set the ID attribute atom for this element.
+ * See http://www.w3.org/TR/1998/REC-xml-19980210#sec-attribute-types
+ * for the definition of an ID attribute.
+ *
+ */
+ virtual nsresult GetIDAttributeAtom(nsIAtom** aResult);
+ virtual nsresult SetIDAttributeAtom(nsIAtom* aID);
+
+ nsString mTextValue;
+ nsString mTrailingContent;
protected:
- PRInt16 mAttrCount;
+ eContainerInfo mContainerInfo;
+ nsCOMPtr mIDAttributeAtom;
+ PRPackedBool mEmpty;
#ifdef DEBUG
- PRPackedBool mAttributed;
+ PRPackedBool mAttributed;
#endif
};
@@ -158,22 +173,22 @@ class CEndToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CEndToken(eHTMLTags aTag);
- CEndToken(const nsAString& aString);
- CEndToken(const nsAString& aName,eHTMLTags aTag);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual PRInt32 GetTypeID(void);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue();
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
+ CEndToken(eHTMLTags aTag);
+ CEndToken(const nsAString& aString);
+ CEndToken(const nsAString& aName,eHTMLTags aTag);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual PRInt32 GetTypeID(void);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
#ifdef DEBUG
- virtual void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
+ virtual const nsAString& GetStringValue();
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -189,19 +204,18 @@ class CCommentToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CCommentToken();
- CCommentToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CCommentToken();
+ CCommentToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
- virtual void AppendSourceTo(nsAString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+
+ nsresult ConsumeStrictComment(nsScanner& aScanner);
+ nsresult ConsumeQuirksComment(nsScanner& aScanner);
protected:
- nsresult ConsumeStrictComment(nsScanner& aScanner);
- nsresult ConsumeQuirksComment(nsScanner& aScanner);
-
nsSlidingSubstring mComment; // does not include MDO & MDC
nsSlidingSubstring mCommentDecl; // includes MDO & MDC
};
@@ -220,22 +234,21 @@ class CEntityToken : public CHTMLToken {
public:
CEntityToken();
CEntityToken(const nsAString& aString);
-
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const nsAString& GetStringValue(void);
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
-
- PRInt32 TranslateToUnicodeStr(nsString& aString);
- static nsresult ConsumeEntity(PRUnichar aChar,nsString& aString,nsScanner& aScanner);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ PRInt32 TranslateToUnicodeStr(nsString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ static nsresult ConsumeEntity(PRUnichar aChar,nsString& aString,nsScanner& aScanner);
+ static PRInt32 TranslateToUnicodeStr(PRInt32 aValue,nsString& aString);
#ifdef DEBUG
- virtual void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
+ virtual const nsAString& GetStringValue(void);
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -250,16 +263,15 @@ class CWhitespaceToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CWhitespaceToken();
- CWhitespaceToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CWhitespaceToken();
+ CWhitespaceToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
/**
@@ -273,23 +285,21 @@ class CTextToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CTextToken();
- CTextToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CTextToken();
+ CTextToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ nsresult ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScanner& aScanner,
+ nsString& aEndTagName,PRInt32 aMode,PRBool& aFlushTokens);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual PRInt32 GetTextLength(void);
+ virtual void CopyTo(nsAString& aStr);
virtual const nsAString& GetStringValue(void);
-
- nsresult ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScanner& aScanner,
- nsString& aEndTagName,PRInt32 aMode,PRBool& aFlushTokens);
- PRInt32 GetTextLength(void);
- void CopyTo(nsAString& aStr);
- void Bind(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
- void Bind(const nsAString& aStr);
+ virtual void Bind(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
+ virtual void Bind(const nsAString& aStr);
protected:
- nsSlidingSubstring mTextValue;
+ nsSlidingSubstring mTextValue;
};
@@ -312,7 +322,7 @@ public:
virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -328,13 +338,13 @@ class CMarkupDeclToken : public CHTMLToken {
public:
CMarkupDeclToken();
CMarkupDeclToken(const nsAString& aString);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
protected:
- nsSlidingSubstring mTextValue;
+ nsSlidingSubstring mTextValue;
};
@@ -350,32 +360,32 @@ class CAttributeToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CAttributeToken();
- CAttributeToken(const nsAString& aString);
- CAttributeToken(const nsAString& aKey, const nsAString& aString);
- ~CAttributeToken() {}
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
-
- const nsAString& GetKey(void) {return mTextKey;}
- void SetKey(const nsAString& aKey);
- void BindKey(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
- const nsAString& GetValue(void) {return mTextValue;}
- void SanitizeKey();
+ CAttributeToken();
+ CAttributeToken(const nsAString& aString);
+ CAttributeToken(const nsAString& aKey, const nsAString& aString);
+ ~CAttributeToken() {}
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetKey(void) {return mTextKey;}
+ virtual void SetKey(const nsAString& aKey);
+ virtual void BindKey(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
+ virtual const nsAString& GetValue(void) {return mTextValue;}
+ virtual void SanitizeKey();
#ifdef DEBUG
- virtual void DebugDumpToken(nsOutputStream& out);
- void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpToken(nsOutputStream& out);
+#endif
+ virtual const nsAString& GetStringValue(void);
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+#ifdef DEBUG
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
- PRPackedBool mHasEqualWithoutValue;
+ PRPackedBool mHasEqualWithoutValue;
protected:
#ifdef DEBUG
- PRPackedBool mLastAttribute;
+ PRPackedBool mLastAttribute;
#endif
nsAutoString mTextValue;
nsSlidingSubstring mTextKey;
@@ -392,15 +402,14 @@ class CNewlineToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CNewlineToken();
+ CNewlineToken();
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetStringValue(void);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
-
- static void AllocNewline();
- static void FreeNewline();
+ static void AllocNewline();
+ static void FreeNewline();
};
@@ -421,10 +430,10 @@ class CScriptToken: public CHTMLToken {
CScriptToken(const nsAString& aString);
virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
+ virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -444,10 +453,10 @@ class CStyleToken: public CHTMLToken {
CStyleToken(const nsAString& aString);
virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
+ virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -505,16 +514,16 @@ class CDoctypeDeclToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
- CDoctypeDeclToken(const nsAString& aString,eHTMLTags aTag=eHTMLTag_unknown);
+ CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
+ CDoctypeDeclToken(const nsAString& aString,eHTMLTags aTag=eHTMLTag_unknown);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetStringValue(void);
+ virtual void SetStringValue(const nsAString& aStr);
- nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- const char* GetClassName(void);
- PRInt32 GetTokenType(void);
- void SetStringValue(const nsAString& aStr);
- const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
#endif
diff --git a/htmlparser/public/nsToken.h b/htmlparser/public/nsToken.h
index 1ead1f00e38..985e13519bb 100644
--- a/htmlparser/public/nsToken.h
+++ b/htmlparser/public/nsToken.h
@@ -75,17 +75,18 @@
#include "nsFileSpec.h"
#include "nsFixedSizeAllocator.h"
-#define NS_HTMLTOKENS_UNKNOWNFORM 0x00000001
-#define NS_HTMLTOKENS_WELLFORMED 0x00000002
-#define NS_HTMLTOKENS_MALFORMED 0x00000004
-#define NS_HTMLTOKENS_EMPTYTOKEN 0x00000008
-
#define NS_HTMLTOKENS_NOT_AN_ENTITY \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_HTMLPARSER,2000)
class nsScanner;
class nsTokenAllocator;
+enum eContainerInfo {
+ eWellFormed,
+ eMalformed,
+ eFormUnknown
+};
+
/**
* Implement the SizeOf() method; leaf classes derived from CToken
* must declare this.
@@ -182,7 +183,7 @@ class CToken {
* @update gess5/11/98
* @return reference to string containing string value
*/
- virtual void GetSource(nsAString& anOutputString);
+ virtual void GetSource(nsString& anOutputString);
/** @update harishd 03/23/00
* @return reference to string containing string value
@@ -210,8 +211,6 @@ class CToken {
*/
virtual PRInt16 GetAttributeCount(void);
- virtual void SetAttributeCount(PRInt16 aValue) { }
-
/**
* Causes token to consume data from given scanner.
* Note that behavior varies wildly between CToken subclasses.
@@ -236,14 +235,6 @@ class CToken {
* @param out is the output stream where token should write itself
*/
virtual void DebugDumpSource(nsOutputStream& out);
-
- /**
- * Getter which retrieves the class name for this token
- * This method is only used for debug purposes.
- * @update gess5/11/98
- * @return const char* containing class name
- */
- virtual const char* GetClassName(void);
#endif
/**
@@ -253,6 +244,15 @@ class CToken {
*/
virtual PRInt32 GetTokenType(void);
+ /**
+ * Getter which retrieves the class name for this token
+ * This method is only used for debug purposes.
+ * @update gess5/11/98
+ * @return const char* containing class name
+ */
+ virtual const char* GetClassName(void);
+
+
/**
* For tokens who care, this can tell us whether the token is
* well formed or not.
@@ -289,6 +289,8 @@ class CToken {
mLineNumber = mLineNumber == 0 ? aLineNumber : mLineNumber;
}
+ void SetAttributeCount(PRInt16 aValue) { mAttrCount = aValue; }
+
/**
* perform self test.
* @update gess5/11/98
@@ -305,11 +307,11 @@ protected:
*/
virtual size_t SizeOf() const = 0;
- PRInt32 mTypeID;
- PRInt32 mUseCount;
- PRInt32 mNewlineCount;
- PRInt32 mLineNumber;
- PRUint16 mFlags;
+ PRInt32 mTypeID;
+ PRInt32 mUseCount;
+ PRInt32 mNewlineCount;
+ PRInt32 mLineNumber;
+ PRInt16 mAttrCount;
};
diff --git a/htmlparser/src/nsHTMLTokenizer.cpp b/htmlparser/src/nsHTMLTokenizer.cpp
index 589cbb5db7f..134cf545032 100644
--- a/htmlparser/src/nsHTMLTokenizer.cpp
+++ b/htmlparser/src/nsHTMLTokenizer.cpp
@@ -354,15 +354,15 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
//*** start by finding the first start tag that hasn't been reviewed.
- while (mTokenScanPos > 0) {
+ while(mTokenScanPos>0) {
theRootToken=(CHTMLToken*)mTokenDeque.ObjectAt(mTokenScanPos);
- if ( theRootToken) {
+ if(theRootToken) {
eHTMLTokenTypes theType=eHTMLTokenTypes(theRootToken->GetTokenType());
- if (eToken_start == theType) {
- if (theRootToken->GetContainerInfo() & NS_HTMLTOKENS_UNKNOWNFORM) {
+ if(eToken_start==theType) {
+ if(eFormUnknown==theRootToken->GetContainerInfo()) {
break;
}
- }
+ }
}
mTokenScanPos--;
}
@@ -414,16 +414,16 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
if(theTag==theLastToken->GetTypeID()) {
theStack.Pop(); //yank it for real
theStackDepth--;
- theLastToken->SetContainerInfo(NS_HTMLTOKENS_WELLFORMED);
+ theLastToken->SetContainerInfo(eWellFormed);
//in addition, let's look above this container to see if we can find
//any tags that are already marked malformed. If so, pop them too!
theLastToken= NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
- while (theLastToken) {
- if (theRootToken->GetContainerInfo() & NS_HTMLTOKENS_MALFORMED) {
+ while(theLastToken) {
+ if(eMalformed==theRootToken->GetContainerInfo()) {
theStack.Pop(); //yank the malformed token for real.
- theLastToken = NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
+ theLastToken= NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
continue;
}
break;
@@ -434,11 +434,11 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
//be malformed. If the tag is a block, we don't really care (but we'll
//mark it anyway). If it's an inline we DO care, especially if the
//inline tried to contain a block (that's when RS handling kicks in).
- if (theTagIsInline) {
- PRInt32 theIndex = FindLastIndexOfTag(theTag,theStack);
- if (kNotFound != theIndex) {
- theToken = (CHTMLToken*)theStack.ObjectAt(theIndex);
- theToken->SetContainerInfo(NS_HTMLTOKENS_MALFORMED);
+ if(theTagIsInline) {
+ PRInt32 theIndex=FindLastIndexOfTag(theTag,theStack);
+ if(kNotFound!=theIndex) {
+ theToken=(CHTMLToken*)theStack.ObjectAt(theIndex);
+ theToken->SetContainerInfo(eMalformed);
}
//otherwise we ignore an out-of-place end tag.
}
diff --git a/htmlparser/src/nsHTMLTokens.cpp b/htmlparser/src/nsHTMLTokens.cpp
index 8545909ccfa..6d007e6cbb2 100644
--- a/htmlparser/src/nsHTMLTokens.cpp
+++ b/htmlparser/src/nsHTMLTokens.cpp
@@ -90,29 +90,51 @@ CHTMLToken::~CHTMLToken() {
* @param
* @return
*/
-CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag)
-{
+CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
-CStartToken::CStartToken(const nsAString& aName) : CHTMLToken(eHTMLTag_unknown)
-{
+CStartToken::CStartToken(const nsAString& aName) : CHTMLToken(eHTMLTag_unknown) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
mTextValue.Assign(aName);
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
-CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTag)
-{
+CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTag) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
mTextValue.Assign(aName);
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
+nsresult CStartToken::GetIDAttributeAtom(nsIAtom** aResult)
+{
+ NS_ENSURE_ARG_POINTER(aResult);
+ *aResult = mIDAttributeAtom;
+ NS_IF_ADDREF(*aResult);
+
+ return NS_OK;
+}
+
+
+nsresult CStartToken::SetIDAttributeAtom(nsIAtom* aID)
+{
+ NS_ENSURE_ARG(aID);
+ mIDAttributeAtom = aID;
+
+ return NS_OK;
+}
+
+
/*
* This method returns the typeid (the tag type) for this token.
*
@@ -120,9 +142,7 @@ CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTa
* @param
* @return
*/
-PRInt32
-CStartToken::GetTypeID()
-{
+PRInt32 CStartToken::GetTypeID(){
if(eHTMLTag_unknown==mTypeID) {
mTypeID = nsHTMLTags::LookupTag(mTextValue);
}
@@ -136,9 +156,7 @@ CStartToken::GetTypeID()
* @param
* @return
*/
-const char*
-CStartToken::GetClassName(void)
-{
+const char* CStartToken::GetClassName(void) {
return "start";
}
@@ -149,29 +167,10 @@ CStartToken::GetClassName(void)
* @param
* @return
*/
-PRInt32 CStartToken::GetTokenType(void)
-{
+PRInt32 CStartToken::GetTokenType(void) {
return eToken_start;
}
-void CStartToken::SetContainerInfo(PRUint16 aInfo)
-{
- if (aInfo & NS_HTMLTOKENS_UNKNOWNFORM) {
- mFlags &= ~(NS_HTMLTOKENS_MALFORMED | NS_HTMLTOKENS_WELLFORMED);
- mFlags |= NS_HTMLTOKENS_UNKNOWNFORM;
- }
- else if (aInfo & NS_HTMLTOKENS_WELLFORMED) {
- mFlags &= ~(NS_HTMLTOKENS_UNKNOWNFORM | NS_HTMLTOKENS_MALFORMED);
- mFlags |= NS_HTMLTOKENS_WELLFORMED;
- }
- else if (aInfo & NS_HTMLTOKENS_MALFORMED) {
- mFlags &= ~(NS_HTMLTOKENS_UNKNOWNFORM | NS_HTMLTOKENS_WELLFORMED);
- mFlags |= NS_HTMLTOKENS_MALFORMED;
- }
- else {
- NS_WARNING("invalid container info!");
- }
-}
/*
*
*
@@ -179,16 +178,22 @@ void CStartToken::SetContainerInfo(PRUint16 aInfo)
* @param
* @return
*/
-void CStartToken::SetEmpty(PRBool aValue)
-{
- if (aValue) {
- mFlags |= NS_HTMLTOKENS_EMPTYTOKEN;
- }
- else {
- mFlags &= ~NS_HTMLTOKENS_EMPTYTOKEN;
- }
+void CStartToken::SetEmpty(PRBool aValue) {
+ mEmpty=aValue;
}
+/*
+ *
+ *
+ * @update gess 3/25/98
+ * @param
+ * @return
+ */
+PRBool CStartToken::IsEmpty(void) {
+ return mEmpty;
+}
+
+
/*
* Consume the identifier portion of the start tag
*
@@ -263,7 +268,7 @@ const nsAString& CStartToken::GetStringValue()
* @param anOutputString will recieve the result
* @return nada
*/
-void CStartToken::GetSource(nsAString& anOutputString){
+void CStartToken::GetSource(nsString& anOutputString){
anOutputString.Append(PRUnichar('<'));
/*
* Watch out for Bug 15204
@@ -367,9 +372,7 @@ nsresult CEndToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag)
* @param
* @return eHTMLTag id of this endtag
*/
-PRInt32
-CEndToken::GetTypeID()
-{
+PRInt32 CEndToken::GetTypeID(){
if(eHTMLTag_unknown==mTypeID) {
mTypeID = nsHTMLTags::LookupTag(mTextValue);
switch(mTypeID) {
@@ -436,7 +439,7 @@ const nsAString& CEndToken::GetStringValue()
* @param anOutputString will recieve the result
* @return nada
*/
-void CEndToken::GetSource(nsAString& anOutputString){
+void CEndToken::GetSource(nsString& anOutputString){
anOutputString.Append(NS_LITERAL_STRING(""));
if(mTextValue.Length()>0)
anOutputString.Append(mTextValue);
@@ -1521,7 +1524,7 @@ const nsAString& CAttributeToken::GetStringValue(void)
* @param anOutputString will recieve the result
* @return nada
*/
-void CAttributeToken::GetSource(nsAString& anOutputString){
+void CAttributeToken::GetSource(nsString& anOutputString){
anOutputString.Truncate();
AppendSourceTo(anOutputString);
}
@@ -2223,7 +2226,7 @@ const nsAString& CEntityToken::GetStringValue(void)
* @param anOutputString will recieve the result
* @return nada
*/
-void CEntityToken::GetSource(nsAString& anOutputString){
+void CEntityToken::GetSource(nsString& anOutputString){
anOutputString.Append(NS_LITERAL_STRING("&"));
anOutputString+=mTextValue;
//anOutputString+=";";
diff --git a/htmlparser/src/nsToken.cpp b/htmlparser/src/nsToken.cpp
index 2aee2fc8b14..2eedff1650b 100644
--- a/htmlparser/src/nsToken.cpp
+++ b/htmlparser/src/nsToken.cpp
@@ -59,23 +59,22 @@ int CToken::GetTokenCount(){return TokenCount-DelTokenCount;}
*
* @update gess 7/21/98
*/
-CToken::CToken(PRInt32 aTag)
-: mNewlineCount(0),
- mLineNumber(0),
- mTypeID(aTag),
- mUseCount(1),
- mFlags(NS_HTMLTOKENS_UNKNOWNFORM)
- // Note that the use count starts with 1 instead of 0. This
- // is because of the assumption that any token created is in
- // use and therefore does not require an explicit addref, or
- // rather IF_HOLD. This will make sure that tokens created
- // on the stack do not accidently hit the arena recycler.
-{
+CToken::CToken(PRInt32 aTag) {
// Tokens are allocated through the arena ( not heap allocated..yay ).
// We, therefore, don't need this macro anymore..
#ifdef MATCH_CTOR_DTOR
MOZ_COUNT_CTOR(CToken);
#endif
+ mAttrCount=0;
+ mNewlineCount=0;
+ mLineNumber = 0;
+ mTypeID=aTag;
+ // Note that the use count starts with 1 instead of 0. This
+ // is because of the assumption that any token created is in
+ // use and therefore does not require an explicit addref, or
+ // rather IF_HOLD. This, also, will make sure that tokens created
+ // on the stack do not accidently hit the arena recycler.
+ mUseCount=1;
#ifdef NS_DEBUG
++TokenCount;
@@ -128,7 +127,7 @@ void CToken::DebugDumpToken(nsOutputStream& anOutputStream) {
for(i=0;i mIDAttributeAtom;
+ PRPackedBool mEmpty;
#ifdef DEBUG
- PRPackedBool mAttributed;
+ PRPackedBool mAttributed;
#endif
};
@@ -158,22 +173,22 @@ class CEndToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CEndToken(eHTMLTags aTag);
- CEndToken(const nsAString& aString);
- CEndToken(const nsAString& aName,eHTMLTags aTag);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual PRInt32 GetTypeID(void);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue();
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
+ CEndToken(eHTMLTags aTag);
+ CEndToken(const nsAString& aString);
+ CEndToken(const nsAString& aName,eHTMLTags aTag);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual PRInt32 GetTypeID(void);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
#ifdef DEBUG
- virtual void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
+ virtual const nsAString& GetStringValue();
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -189,19 +204,18 @@ class CCommentToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CCommentToken();
- CCommentToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CCommentToken();
+ CCommentToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
- virtual void AppendSourceTo(nsAString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+
+ nsresult ConsumeStrictComment(nsScanner& aScanner);
+ nsresult ConsumeQuirksComment(nsScanner& aScanner);
protected:
- nsresult ConsumeStrictComment(nsScanner& aScanner);
- nsresult ConsumeQuirksComment(nsScanner& aScanner);
-
nsSlidingSubstring mComment; // does not include MDO & MDC
nsSlidingSubstring mCommentDecl; // includes MDO & MDC
};
@@ -220,22 +234,21 @@ class CEntityToken : public CHTMLToken {
public:
CEntityToken();
CEntityToken(const nsAString& aString);
-
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const nsAString& GetStringValue(void);
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
-
- PRInt32 TranslateToUnicodeStr(nsString& aString);
- static nsresult ConsumeEntity(PRUnichar aChar,nsString& aString,nsScanner& aScanner);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ PRInt32 TranslateToUnicodeStr(nsString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ static nsresult ConsumeEntity(PRUnichar aChar,nsString& aString,nsScanner& aScanner);
+ static PRInt32 TranslateToUnicodeStr(PRInt32 aValue,nsString& aString);
#ifdef DEBUG
- virtual void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
+ virtual const nsAString& GetStringValue(void);
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -250,16 +263,15 @@ class CWhitespaceToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CWhitespaceToken();
- CWhitespaceToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CWhitespaceToken();
+ CWhitespaceToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
/**
@@ -273,23 +285,21 @@ class CTextToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CTextToken();
- CTextToken(const nsAString& aString);
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ CTextToken();
+ CTextToken(const nsAString& aString);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ nsresult ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScanner& aScanner,
+ nsString& aEndTagName,PRInt32 aMode,PRBool& aFlushTokens);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual PRInt32 GetTextLength(void);
+ virtual void CopyTo(nsAString& aStr);
virtual const nsAString& GetStringValue(void);
-
- nsresult ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScanner& aScanner,
- nsString& aEndTagName,PRInt32 aMode,PRBool& aFlushTokens);
- PRInt32 GetTextLength(void);
- void CopyTo(nsAString& aStr);
- void Bind(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
- void Bind(const nsAString& aStr);
+ virtual void Bind(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
+ virtual void Bind(const nsAString& aStr);
protected:
- nsSlidingSubstring mTextValue;
+ nsSlidingSubstring mTextValue;
};
@@ -312,7 +322,7 @@ public:
virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -328,13 +338,13 @@ class CMarkupDeclToken : public CHTMLToken {
public:
CMarkupDeclToken();
CMarkupDeclToken(const nsAString& aString);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
virtual const nsAString& GetStringValue(void);
protected:
- nsSlidingSubstring mTextValue;
+ nsSlidingSubstring mTextValue;
};
@@ -350,32 +360,32 @@ class CAttributeToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CAttributeToken();
- CAttributeToken(const nsAString& aString);
- CAttributeToken(const nsAString& aKey, const nsAString& aString);
- ~CAttributeToken() {}
-
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
- virtual void GetSource(nsAString& anOutputString);
- virtual void AppendSourceTo(nsAString& anOutputString);
-
- const nsAString& GetKey(void) {return mTextKey;}
- void SetKey(const nsAString& aKey);
- void BindKey(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
- const nsAString& GetValue(void) {return mTextValue;}
- void SanitizeKey();
+ CAttributeToken();
+ CAttributeToken(const nsAString& aString);
+ CAttributeToken(const nsAString& aKey, const nsAString& aString);
+ ~CAttributeToken() {}
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetKey(void) {return mTextKey;}
+ virtual void SetKey(const nsAString& aKey);
+ virtual void BindKey(nsScanner* aScanner, nsReadingIterator& aStart, nsReadingIterator& aEnd);
+ virtual const nsAString& GetValue(void) {return mTextValue;}
+ virtual void SanitizeKey();
#ifdef DEBUG
- virtual void DebugDumpToken(nsOutputStream& out);
- void DebugDumpSource(nsOutputStream& out);
+ virtual void DebugDumpToken(nsOutputStream& out);
+#endif
+ virtual const nsAString& GetStringValue(void);
+ virtual void GetSource(nsString& anOutputString);
+ virtual void AppendSourceTo(nsAString& anOutputString);
+#ifdef DEBUG
+ virtual void DebugDumpSource(nsOutputStream& out);
#endif
- PRPackedBool mHasEqualWithoutValue;
+ PRPackedBool mHasEqualWithoutValue;
protected:
#ifdef DEBUG
- PRPackedBool mLastAttribute;
+ PRPackedBool mLastAttribute;
#endif
nsAutoString mTextValue;
nsSlidingSubstring mTextKey;
@@ -392,15 +402,14 @@ class CNewlineToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CNewlineToken();
+ CNewlineToken();
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetStringValue(void);
- virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- virtual const char* GetClassName(void);
- virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
-
- static void AllocNewline();
- static void FreeNewline();
+ static void AllocNewline();
+ static void FreeNewline();
};
@@ -421,10 +430,10 @@ class CScriptToken: public CHTMLToken {
CScriptToken(const nsAString& aString);
virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
+ virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -444,10 +453,10 @@ class CStyleToken: public CHTMLToken {
CStyleToken(const nsAString& aString);
virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void);
- virtual const nsAString& GetStringValue(void);
+ virtual const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
@@ -505,16 +514,16 @@ class CDoctypeDeclToken: public CHTMLToken {
CTOKEN_IMPL_SIZEOF
public:
- CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
- CDoctypeDeclToken(const nsAString& aString,eHTMLTags aTag=eHTMLTag_unknown);
+ CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
+ CDoctypeDeclToken(const nsAString& aString,eHTMLTags aTag=eHTMLTag_unknown);
+ virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
+ virtual const char* GetClassName(void);
+ virtual PRInt32 GetTokenType(void);
+ virtual const nsAString& GetStringValue(void);
+ virtual void SetStringValue(const nsAString& aStr);
- nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
- const char* GetClassName(void);
- PRInt32 GetTokenType(void);
- void SetStringValue(const nsAString& aStr);
- const nsAString& GetStringValue(void);
protected:
- nsString mTextValue;
+ nsString mTextValue;
};
#endif
diff --git a/parser/htmlparser/public/nsToken.h b/parser/htmlparser/public/nsToken.h
index 1ead1f00e38..985e13519bb 100644
--- a/parser/htmlparser/public/nsToken.h
+++ b/parser/htmlparser/public/nsToken.h
@@ -75,17 +75,18 @@
#include "nsFileSpec.h"
#include "nsFixedSizeAllocator.h"
-#define NS_HTMLTOKENS_UNKNOWNFORM 0x00000001
-#define NS_HTMLTOKENS_WELLFORMED 0x00000002
-#define NS_HTMLTOKENS_MALFORMED 0x00000004
-#define NS_HTMLTOKENS_EMPTYTOKEN 0x00000008
-
#define NS_HTMLTOKENS_NOT_AN_ENTITY \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_HTMLPARSER,2000)
class nsScanner;
class nsTokenAllocator;
+enum eContainerInfo {
+ eWellFormed,
+ eMalformed,
+ eFormUnknown
+};
+
/**
* Implement the SizeOf() method; leaf classes derived from CToken
* must declare this.
@@ -182,7 +183,7 @@ class CToken {
* @update gess5/11/98
* @return reference to string containing string value
*/
- virtual void GetSource(nsAString& anOutputString);
+ virtual void GetSource(nsString& anOutputString);
/** @update harishd 03/23/00
* @return reference to string containing string value
@@ -210,8 +211,6 @@ class CToken {
*/
virtual PRInt16 GetAttributeCount(void);
- virtual void SetAttributeCount(PRInt16 aValue) { }
-
/**
* Causes token to consume data from given scanner.
* Note that behavior varies wildly between CToken subclasses.
@@ -236,14 +235,6 @@ class CToken {
* @param out is the output stream where token should write itself
*/
virtual void DebugDumpSource(nsOutputStream& out);
-
- /**
- * Getter which retrieves the class name for this token
- * This method is only used for debug purposes.
- * @update gess5/11/98
- * @return const char* containing class name
- */
- virtual const char* GetClassName(void);
#endif
/**
@@ -253,6 +244,15 @@ class CToken {
*/
virtual PRInt32 GetTokenType(void);
+ /**
+ * Getter which retrieves the class name for this token
+ * This method is only used for debug purposes.
+ * @update gess5/11/98
+ * @return const char* containing class name
+ */
+ virtual const char* GetClassName(void);
+
+
/**
* For tokens who care, this can tell us whether the token is
* well formed or not.
@@ -289,6 +289,8 @@ class CToken {
mLineNumber = mLineNumber == 0 ? aLineNumber : mLineNumber;
}
+ void SetAttributeCount(PRInt16 aValue) { mAttrCount = aValue; }
+
/**
* perform self test.
* @update gess5/11/98
@@ -305,11 +307,11 @@ protected:
*/
virtual size_t SizeOf() const = 0;
- PRInt32 mTypeID;
- PRInt32 mUseCount;
- PRInt32 mNewlineCount;
- PRInt32 mLineNumber;
- PRUint16 mFlags;
+ PRInt32 mTypeID;
+ PRInt32 mUseCount;
+ PRInt32 mNewlineCount;
+ PRInt32 mLineNumber;
+ PRInt16 mAttrCount;
};
diff --git a/parser/htmlparser/src/nsHTMLTokenizer.cpp b/parser/htmlparser/src/nsHTMLTokenizer.cpp
index 589cbb5db7f..134cf545032 100644
--- a/parser/htmlparser/src/nsHTMLTokenizer.cpp
+++ b/parser/htmlparser/src/nsHTMLTokenizer.cpp
@@ -354,15 +354,15 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
//*** start by finding the first start tag that hasn't been reviewed.
- while (mTokenScanPos > 0) {
+ while(mTokenScanPos>0) {
theRootToken=(CHTMLToken*)mTokenDeque.ObjectAt(mTokenScanPos);
- if ( theRootToken) {
+ if(theRootToken) {
eHTMLTokenTypes theType=eHTMLTokenTypes(theRootToken->GetTokenType());
- if (eToken_start == theType) {
- if (theRootToken->GetContainerInfo() & NS_HTMLTOKENS_UNKNOWNFORM) {
+ if(eToken_start==theType) {
+ if(eFormUnknown==theRootToken->GetContainerInfo()) {
break;
}
- }
+ }
}
mTokenScanPos--;
}
@@ -414,16 +414,16 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
if(theTag==theLastToken->GetTypeID()) {
theStack.Pop(); //yank it for real
theStackDepth--;
- theLastToken->SetContainerInfo(NS_HTMLTOKENS_WELLFORMED);
+ theLastToken->SetContainerInfo(eWellFormed);
//in addition, let's look above this container to see if we can find
//any tags that are already marked malformed. If so, pop them too!
theLastToken= NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
- while (theLastToken) {
- if (theRootToken->GetContainerInfo() & NS_HTMLTOKENS_MALFORMED) {
+ while(theLastToken) {
+ if(eMalformed==theRootToken->GetContainerInfo()) {
theStack.Pop(); //yank the malformed token for real.
- theLastToken = NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
+ theLastToken= NS_STATIC_CAST(CHTMLToken*, theStack.Peek());
continue;
}
break;
@@ -434,11 +434,11 @@ nsresult nsHTMLTokenizer::ScanDocStructure(PRBool aFinalChunk) {
//be malformed. If the tag is a block, we don't really care (but we'll
//mark it anyway). If it's an inline we DO care, especially if the
//inline tried to contain a block (that's when RS handling kicks in).
- if (theTagIsInline) {
- PRInt32 theIndex = FindLastIndexOfTag(theTag,theStack);
- if (kNotFound != theIndex) {
- theToken = (CHTMLToken*)theStack.ObjectAt(theIndex);
- theToken->SetContainerInfo(NS_HTMLTOKENS_MALFORMED);
+ if(theTagIsInline) {
+ PRInt32 theIndex=FindLastIndexOfTag(theTag,theStack);
+ if(kNotFound!=theIndex) {
+ theToken=(CHTMLToken*)theStack.ObjectAt(theIndex);
+ theToken->SetContainerInfo(eMalformed);
}
//otherwise we ignore an out-of-place end tag.
}
diff --git a/parser/htmlparser/src/nsHTMLTokens.cpp b/parser/htmlparser/src/nsHTMLTokens.cpp
index 8545909ccfa..6d007e6cbb2 100644
--- a/parser/htmlparser/src/nsHTMLTokens.cpp
+++ b/parser/htmlparser/src/nsHTMLTokens.cpp
@@ -90,29 +90,51 @@ CHTMLToken::~CHTMLToken() {
* @param
* @return
*/
-CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag)
-{
+CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
-CStartToken::CStartToken(const nsAString& aName) : CHTMLToken(eHTMLTag_unknown)
-{
+CStartToken::CStartToken(const nsAString& aName) : CHTMLToken(eHTMLTag_unknown) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
mTextValue.Assign(aName);
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
-CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTag)
-{
+CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTag) {
+ mEmpty=PR_FALSE;
+ mContainerInfo=eFormUnknown;
mTextValue.Assign(aName);
#ifdef DEBUG
mAttributed = PR_FALSE;
#endif
}
+nsresult CStartToken::GetIDAttributeAtom(nsIAtom** aResult)
+{
+ NS_ENSURE_ARG_POINTER(aResult);
+ *aResult = mIDAttributeAtom;
+ NS_IF_ADDREF(*aResult);
+
+ return NS_OK;
+}
+
+
+nsresult CStartToken::SetIDAttributeAtom(nsIAtom* aID)
+{
+ NS_ENSURE_ARG(aID);
+ mIDAttributeAtom = aID;
+
+ return NS_OK;
+}
+
+
/*
* This method returns the typeid (the tag type) for this token.
*
@@ -120,9 +142,7 @@ CStartToken::CStartToken(const nsAString& aName,eHTMLTags aTag) : CHTMLToken(aTa
* @param
* @return
*/
-PRInt32
-CStartToken::GetTypeID()
-{
+PRInt32 CStartToken::GetTypeID(){
if(eHTMLTag_unknown==mTypeID) {
mTypeID = nsHTMLTags::LookupTag(mTextValue);
}
@@ -136,9 +156,7 @@ CStartToken::GetTypeID()
* @param
* @return
*/
-const char*
-CStartToken::GetClassName(void)
-{
+const char* CStartToken::GetClassName(void) {
return "start";
}
@@ -149,29 +167,10 @@ CStartToken::GetClassName(void)
* @param
* @return
*/
-PRInt32 CStartToken::GetTokenType(void)
-{
+PRInt32 CStartToken::GetTokenType(void) {
return eToken_start;
}
-void CStartToken::SetContainerInfo(PRUint16 aInfo)
-{
- if (aInfo & NS_HTMLTOKENS_UNKNOWNFORM) {
- mFlags &= ~(NS_HTMLTOKENS_MALFORMED | NS_HTMLTOKENS_WELLFORMED);
- mFlags |= NS_HTMLTOKENS_UNKNOWNFORM;
- }
- else if (aInfo & NS_HTMLTOKENS_WELLFORMED) {
- mFlags &= ~(NS_HTMLTOKENS_UNKNOWNFORM | NS_HTMLTOKENS_MALFORMED);
- mFlags |= NS_HTMLTOKENS_WELLFORMED;
- }
- else if (aInfo & NS_HTMLTOKENS_MALFORMED) {
- mFlags &= ~(NS_HTMLTOKENS_UNKNOWNFORM | NS_HTMLTOKENS_WELLFORMED);
- mFlags |= NS_HTMLTOKENS_MALFORMED;
- }
- else {
- NS_WARNING("invalid container info!");
- }
-}
/*
*
*
@@ -179,16 +178,22 @@ void CStartToken::SetContainerInfo(PRUint16 aInfo)
* @param
* @return
*/
-void CStartToken::SetEmpty(PRBool aValue)
-{
- if (aValue) {
- mFlags |= NS_HTMLTOKENS_EMPTYTOKEN;
- }
- else {
- mFlags &= ~NS_HTMLTOKENS_EMPTYTOKEN;
- }
+void CStartToken::SetEmpty(PRBool aValue) {
+ mEmpty=aValue;
}
+/*
+ *
+ *
+ * @update gess 3/25/98
+ * @param
+ * @return
+ */
+PRBool CStartToken::IsEmpty(void) {
+ return mEmpty;
+}
+
+
/*
* Consume the identifier portion of the start tag
*
@@ -263,7 +268,7 @@ const nsAString& CStartToken::GetStringValue()
* @param anOutputString will recieve the result
* @return nada
*/
-void CStartToken::GetSource(nsAString& anOutputString){
+void CStartToken::GetSource(nsString& anOutputString){
anOutputString.Append(PRUnichar('<'));
/*
* Watch out for Bug 15204
@@ -367,9 +372,7 @@ nsresult CEndToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag)
* @param
* @return eHTMLTag id of this endtag
*/
-PRInt32
-CEndToken::GetTypeID()
-{
+PRInt32 CEndToken::GetTypeID(){
if(eHTMLTag_unknown==mTypeID) {
mTypeID = nsHTMLTags::LookupTag(mTextValue);
switch(mTypeID) {
@@ -436,7 +439,7 @@ const nsAString& CEndToken::GetStringValue()
* @param anOutputString will recieve the result
* @return nada
*/
-void CEndToken::GetSource(nsAString& anOutputString){
+void CEndToken::GetSource(nsString& anOutputString){
anOutputString.Append(NS_LITERAL_STRING(""));
if(mTextValue.Length()>0)
anOutputString.Append(mTextValue);
@@ -1521,7 +1524,7 @@ const nsAString& CAttributeToken::GetStringValue(void)
* @param anOutputString will recieve the result
* @return nada
*/
-void CAttributeToken::GetSource(nsAString& anOutputString){
+void CAttributeToken::GetSource(nsString& anOutputString){
anOutputString.Truncate();
AppendSourceTo(anOutputString);
}
@@ -2223,7 +2226,7 @@ const nsAString& CEntityToken::GetStringValue(void)
* @param anOutputString will recieve the result
* @return nada
*/
-void CEntityToken::GetSource(nsAString& anOutputString){
+void CEntityToken::GetSource(nsString& anOutputString){
anOutputString.Append(NS_LITERAL_STRING("&"));
anOutputString+=mTextValue;
//anOutputString+=";";
diff --git a/parser/htmlparser/src/nsToken.cpp b/parser/htmlparser/src/nsToken.cpp
index 2aee2fc8b14..2eedff1650b 100644
--- a/parser/htmlparser/src/nsToken.cpp
+++ b/parser/htmlparser/src/nsToken.cpp
@@ -59,23 +59,22 @@ int CToken::GetTokenCount(){return TokenCount-DelTokenCount;}
*
* @update gess 7/21/98
*/
-CToken::CToken(PRInt32 aTag)
-: mNewlineCount(0),
- mLineNumber(0),
- mTypeID(aTag),
- mUseCount(1),
- mFlags(NS_HTMLTOKENS_UNKNOWNFORM)
- // Note that the use count starts with 1 instead of 0. This
- // is because of the assumption that any token created is in
- // use and therefore does not require an explicit addref, or
- // rather IF_HOLD. This will make sure that tokens created
- // on the stack do not accidently hit the arena recycler.
-{
+CToken::CToken(PRInt32 aTag) {
// Tokens are allocated through the arena ( not heap allocated..yay ).
// We, therefore, don't need this macro anymore..
#ifdef MATCH_CTOR_DTOR
MOZ_COUNT_CTOR(CToken);
#endif
+ mAttrCount=0;
+ mNewlineCount=0;
+ mLineNumber = 0;
+ mTypeID=aTag;
+ // Note that the use count starts with 1 instead of 0. This
+ // is because of the assumption that any token created is in
+ // use and therefore does not require an explicit addref, or
+ // rather IF_HOLD. This, also, will make sure that tokens created
+ // on the stack do not accidently hit the arena recycler.
+ mUseCount=1;
#ifdef NS_DEBUG
++TokenCount;
@@ -128,7 +127,7 @@ void CToken::DebugDumpToken(nsOutputStream& anOutputStream) {
for(i=0;i