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("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("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