diff --git a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp index eb0ebf59d8a..3c22bf54ea6 100644 --- a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp @@ -331,7 +331,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& PRUnichar ch; result=aScanner.Peek(ch); if(NS_OK==result) { - if(nsString::IsAlpha(ch)) { + if(nsString::IsAlpha(ch)||(kGreaterThan==ch)) { result=ConsumeEndTag(aChar,aToken,aScanner); } else result=ConsumeComment(aChar,aToken,aScanner); @@ -413,9 +413,19 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken, result=aScanner.SkipWhitespace(); if(NS_SUCCEEDED(result)) { result=aScanner.Peek(aChar); - if(NS_SUCCEEDED(result) && (aChar==kGreaterThan)) { //you just ate the '>' - aScanner.GetChar(aChar); //skip the '>' - done=PR_TRUE; + if(NS_SUCCEEDED(result)) { + if(aChar==kGreaterThan) { //you just ate the '>' + aScanner.GetChar(aChar); //skip the '>' + done=PR_TRUE; + } + else if(aChar==kLessThan) { + eHTMLTags theEndTag = (eHTMLTags)aToken->GetTypeID(); + if(result==NS_OK&&(gHTMLElements[theEndTag].mSkipTarget)){ + CToken* theEndToken=theRecycler->CreateTokenOfType(eToken_end,theEndTag); + AddToken(theEndToken,NS_OK,mTokenDeque,theRecycler); + } + done=PR_TRUE; + } }//if } }//if diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp index 2e976824717..f10edc02ac8 100644 --- a/mozilla/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp @@ -1228,7 +1228,7 @@ nsresult CAttributeToken::Consume(PRUnichar aChar, nsScanner& aScanner) { else { //If you're here, handle an unquoted key. //Don't forget to reduce entities inline! - static nsAutoString terminals("\b\t\n\r \"=>"); + static nsAutoString terminals("\b\t\n\r \"<=>"); result=aScanner.ReadUntil(mTextKey,terminals,PR_TRUE,PR_FALSE); } diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp index eb0ebf59d8a..3c22bf54ea6 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp @@ -331,7 +331,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& PRUnichar ch; result=aScanner.Peek(ch); if(NS_OK==result) { - if(nsString::IsAlpha(ch)) { + if(nsString::IsAlpha(ch)||(kGreaterThan==ch)) { result=ConsumeEndTag(aChar,aToken,aScanner); } else result=ConsumeComment(aChar,aToken,aScanner); @@ -413,9 +413,19 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken, result=aScanner.SkipWhitespace(); if(NS_SUCCEEDED(result)) { result=aScanner.Peek(aChar); - if(NS_SUCCEEDED(result) && (aChar==kGreaterThan)) { //you just ate the '>' - aScanner.GetChar(aChar); //skip the '>' - done=PR_TRUE; + if(NS_SUCCEEDED(result)) { + if(aChar==kGreaterThan) { //you just ate the '>' + aScanner.GetChar(aChar); //skip the '>' + done=PR_TRUE; + } + else if(aChar==kLessThan) { + eHTMLTags theEndTag = (eHTMLTags)aToken->GetTypeID(); + if(result==NS_OK&&(gHTMLElements[theEndTag].mSkipTarget)){ + CToken* theEndToken=theRecycler->CreateTokenOfType(eToken_end,theEndTag); + AddToken(theEndToken,NS_OK,mTokenDeque,theRecycler); + } + done=PR_TRUE; + } }//if } }//if diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp index 2e976824717..f10edc02ac8 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp @@ -1228,7 +1228,7 @@ nsresult CAttributeToken::Consume(PRUnichar aChar, nsScanner& aScanner) { else { //If you're here, handle an unquoted key. //Don't forget to reduce entities inline! - static nsAutoString terminals("\b\t\n\r \"=>"); + static nsAutoString terminals("\b\t\n\r \"<=>"); result=aScanner.ReadUntil(mTextKey,terminals,PR_TRUE,PR_FALSE); }