Removed mDoctypeText from nsExpatDriver. This |could| improve Ts/Txul time slightly. b=102345, r=heikki, sr=jst

This commit is contained in:
harishd%netscape.com 2002-01-24 22:15:58 +00:00
Родитель cfb87cef22
Коммит a1ce884f46
11 изменённых файлов: 72 добавлений и 80 удалений

Просмотреть файл

@ -1425,7 +1425,9 @@ nsXMLContentSink::HandleComment(const PRUnichar *aName)
return result;
}
NS_IMETHODIMP nsXMLContentSink::HandleCDataSection(const PRUnichar *aData, PRUint32 aLength)
NS_IMETHODIMP
nsXMLContentSink::HandleCDataSection(const PRUnichar *aData,
PRUint32 aLength)
{
FlushText();
@ -1456,7 +1458,8 @@ NS_IMETHODIMP nsXMLContentSink::HandleCDataSection(const PRUnichar *aData, PRUin
}
NS_IMETHODIMP
nsXMLContentSink::HandleDoctypeDecl(const PRUnichar *aDoctype)
nsXMLContentSink::HandleDoctypeDecl(const PRUnichar *aDoctype,
PRUint32 aLength)
{
nsresult rv = NS_OK;
@ -1464,12 +1467,8 @@ nsXMLContentSink::HandleDoctypeDecl(const PRUnichar *aDoctype)
if (!doc)
return NS_OK;
nsAutoString docTypeStr(aDoctype);
nsAutoString str, name, publicId, systemId;
if (Substring(docTypeStr, 0, 9).Equals(NS_LITERAL_STRING("<!DOCTYPE"))) {
docTypeStr.Right(str, docTypeStr.Length()-9);
}
nsAutoString str(aDoctype, aLength);
nsAutoString name, publicId, systemId;
GetDocTypeToken(str, name, PR_FALSE);
@ -1484,8 +1483,7 @@ nsXMLContentSink::HandleDoctypeDecl(const PRUnichar *aDoctype)
GetDocTypeToken(str, systemId, PR_TRUE);
}
// The rest is the internal subset (minus whitespace and the trailing >)
str.Truncate(str.Length()-1); // Delete the trailing >
// The rest is the internal subset (minus whitespace)
str.Trim(kWhitespace);
nsCOMPtr<nsIDOMDocumentType> oldDocType;

Просмотреть файл

@ -1025,7 +1025,7 @@ XULContentSinkImpl::HandleCDataSection(const PRUnichar *aData, PRUint32 aLength)
}
NS_IMETHODIMP
XULContentSinkImpl::HandleDoctypeDecl(const PRUnichar *aDoctype)
XULContentSinkImpl::HandleDoctypeDecl(const PRUnichar *aDoctype, PRUint32 aLength)
{
return NS_OK;
}

Просмотреть файл

@ -54,7 +54,8 @@ interface nsIExpatSink : nsISupports
void HandleCDataSection(in wstring aData,
in unsigned long aLength);
void HandleDoctypeDecl(in wstring aDoctype);
void HandleDoctypeDecl(in wstring aDoctype,
in unsigned long aLength);
void HandleCharacterData(in wstring aData,
in unsigned long aLength);

Просмотреть файл

@ -51,6 +51,7 @@
#include "prmem.h"
#include "nsTextFormatter.h"
static const PRUint32 kNotInDoctype = PRUint32(-1);
static const char* kDTDDirectory = "dtd/";
/***************************** EXPAT CALL BACKS *******************************/
@ -235,11 +236,12 @@ NS_NewExpatDriver(nsIDTD** aResult) {
nsExpatDriver::nsExpatDriver()
:mExpatParser(0),
mSink(0),
mInDoctype(0),
mBuffer(0),
mInCData(0),
mBytesParsed(0),
mBytePosition(0),
mInternalState(NS_OK)
mInternalState(NS_OK),
mDoctypePos(-1)
{
NS_INIT_REFCNT();
}
@ -305,13 +307,7 @@ nsExpatDriver::HandleComment(const PRUnichar *aValue)
{
NS_ASSERTION(mSink, "content sink not found!");
if (mInDoctype) {
// We do not want comments popping out of the doctype...
mDoctypeText.Append(NS_LITERAL_STRING("<!--"));
mDoctypeText.Append(aValue);
mDoctypeText.Append(NS_LITERAL_STRING("-->"));
}
else if (mSink){
if (mSink && mDoctypePos == kNotInDoctype){
mInternalState = mSink->HandleComment(aValue);
}
@ -341,10 +337,7 @@ nsExpatDriver::HandleDefault(const PRUnichar *aValue,
{
NS_ASSERTION(mSink, "content sink not found!");
if (mInDoctype) {
mDoctypeText.Append(aValue, aLength);
}
else if (mSink) {
if (mSink && mDoctypePos == kNotInDoctype) {
static const PRUnichar newline[] = {'\n','\0'};
for (PRUint32 i = 0; i < aLength && NS_SUCCEEDED(mInternalState); i++) {
if (aValue[i] == '\n' || aValue[i] == '\r') {
@ -380,8 +373,7 @@ nsExpatDriver::HandleEndCdataSection()
nsresult
nsExpatDriver::HandleStartDoctypeDecl()
{
mInDoctype = PR_TRUE;
mDoctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
mDoctypePos = XML_GetCurrentByteIndex(mExpatParser);
return NS_OK;
}
@ -390,14 +382,15 @@ nsExpatDriver::HandleEndDoctypeDecl()
{
NS_ASSERTION(mSink, "content sink not found!");
mInDoctype = PR_FALSE;
mDoctypeText.Append(PRUnichar('>'));
const PRUnichar* doctypeStart = mBuffer + ( mDoctypePos - mBytesParsed ) / 2;
const PRUnichar* doctypeEnd = mBuffer + ( XML_GetCurrentByteIndex(mExpatParser) - mBytesParsed ) / 2;
if(mSink) {
mInternalState = mSink->HandleDoctypeDecl(mDoctypeText.get());
mInternalState = mSink->HandleDoctypeDecl(doctypeStart, doctypeEnd - doctypeStart);
}
mDoctypeText.Truncate();
mDoctypePos = kNotInDoctype;
return NS_OK;
}
@ -730,9 +723,9 @@ nsExpatDriver::ConsumeToken(nsScanner& aScanner,
while (start != end) {
PRUint32 fragLength = PRUint32(start.size_forward());
const PRUnichar* expatBuffer = start.get();
mBuffer = start.get();
mInternalState = ParseBuffer((const char *)expatBuffer,
mInternalState = ParseBuffer((const char *)mBuffer,
fragLength * sizeof(PRUnichar),
aFlushTokens);

Просмотреть файл

@ -84,14 +84,17 @@ protected:
XML_Parser mExpatParser;
nsIExpatSink* mSink;
const PRUnichar* mBuffer; // weak
nsString mLastLine;
nsString mDoctypeText;
nsString mCDataText;
PRPackedBool mInDoctype;
PRPackedBool mInCData;
PRUint32 mBytesParsed;
PRInt32 mBytePosition;
nsresult mInternalState;
PRUint32 mBytesParsed;
PRUint32 mDoctypePos;
};
nsresult NS_NewExpatDriver(nsIDTD** aDriver);

Просмотреть файл

@ -1877,7 +1877,7 @@ nsresult nsParser::ResumeParse(PRBool allowIteration, PRBool aIsFinalChunk, PRBo
DidBuildModel(mStreamStatus);
mInternalState = result;
}
break;
return NS_OK;
}
else if(((NS_OK==result) && (theTokenizerResult==kEOF)) || (result==NS_ERROR_HTMLPARSER_INTERRUPTED)){

Просмотреть файл

@ -54,7 +54,8 @@ interface nsIExpatSink : nsISupports
void HandleCDataSection(in wstring aData,
in unsigned long aLength);
void HandleDoctypeDecl(in wstring aDoctype);
void HandleDoctypeDecl(in wstring aDoctype,
in unsigned long aLength);
void HandleCharacterData(in wstring aData,
in unsigned long aLength);

Просмотреть файл

@ -51,6 +51,7 @@
#include "prmem.h"
#include "nsTextFormatter.h"
static const PRUint32 kNotInDoctype = PRUint32(-1);
static const char* kDTDDirectory = "dtd/";
/***************************** EXPAT CALL BACKS *******************************/
@ -235,11 +236,12 @@ NS_NewExpatDriver(nsIDTD** aResult) {
nsExpatDriver::nsExpatDriver()
:mExpatParser(0),
mSink(0),
mInDoctype(0),
mBuffer(0),
mInCData(0),
mBytesParsed(0),
mBytePosition(0),
mInternalState(NS_OK)
mInternalState(NS_OK),
mDoctypePos(-1)
{
NS_INIT_REFCNT();
}
@ -305,13 +307,7 @@ nsExpatDriver::HandleComment(const PRUnichar *aValue)
{
NS_ASSERTION(mSink, "content sink not found!");
if (mInDoctype) {
// We do not want comments popping out of the doctype...
mDoctypeText.Append(NS_LITERAL_STRING("<!--"));
mDoctypeText.Append(aValue);
mDoctypeText.Append(NS_LITERAL_STRING("-->"));
}
else if (mSink){
if (mSink && mDoctypePos == kNotInDoctype){
mInternalState = mSink->HandleComment(aValue);
}
@ -341,10 +337,7 @@ nsExpatDriver::HandleDefault(const PRUnichar *aValue,
{
NS_ASSERTION(mSink, "content sink not found!");
if (mInDoctype) {
mDoctypeText.Append(aValue, aLength);
}
else if (mSink) {
if (mSink && mDoctypePos == kNotInDoctype) {
static const PRUnichar newline[] = {'\n','\0'};
for (PRUint32 i = 0; i < aLength && NS_SUCCEEDED(mInternalState); i++) {
if (aValue[i] == '\n' || aValue[i] == '\r') {
@ -380,8 +373,7 @@ nsExpatDriver::HandleEndCdataSection()
nsresult
nsExpatDriver::HandleStartDoctypeDecl()
{
mInDoctype = PR_TRUE;
mDoctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
mDoctypePos = XML_GetCurrentByteIndex(mExpatParser);
return NS_OK;
}
@ -390,14 +382,15 @@ nsExpatDriver::HandleEndDoctypeDecl()
{
NS_ASSERTION(mSink, "content sink not found!");
mInDoctype = PR_FALSE;
mDoctypeText.Append(PRUnichar('>'));
const PRUnichar* doctypeStart = mBuffer + ( mDoctypePos - mBytesParsed ) / 2;
const PRUnichar* doctypeEnd = mBuffer + ( XML_GetCurrentByteIndex(mExpatParser) - mBytesParsed ) / 2;
if(mSink) {
mInternalState = mSink->HandleDoctypeDecl(mDoctypeText.get());
mInternalState = mSink->HandleDoctypeDecl(doctypeStart, doctypeEnd - doctypeStart);
}
mDoctypeText.Truncate();
mDoctypePos = kNotInDoctype;
return NS_OK;
}
@ -730,9 +723,9 @@ nsExpatDriver::ConsumeToken(nsScanner& aScanner,
while (start != end) {
PRUint32 fragLength = PRUint32(start.size_forward());
const PRUnichar* expatBuffer = start.get();
mBuffer = start.get();
mInternalState = ParseBuffer((const char *)expatBuffer,
mInternalState = ParseBuffer((const char *)mBuffer,
fragLength * sizeof(PRUnichar),
aFlushTokens);

Просмотреть файл

@ -84,14 +84,17 @@ protected:
XML_Parser mExpatParser;
nsIExpatSink* mSink;
const PRUnichar* mBuffer; // weak
nsString mLastLine;
nsString mDoctypeText;
nsString mCDataText;
PRPackedBool mInDoctype;
PRPackedBool mInCData;
PRUint32 mBytesParsed;
PRInt32 mBytePosition;
nsresult mInternalState;
PRUint32 mBytesParsed;
PRUint32 mDoctypePos;
};
nsresult NS_NewExpatDriver(nsIDTD** aDriver);

Просмотреть файл

@ -1877,7 +1877,7 @@ nsresult nsParser::ResumeParse(PRBool allowIteration, PRBool aIsFinalChunk, PRBo
DidBuildModel(mStreamStatus);
mInternalState = result;
}
break;
return NS_OK;
}
else if(((NS_OK==result) && (theTokenizerResult==kEOF)) || (result==NS_ERROR_HTMLPARSER_INTERRUPTED)){

Просмотреть файл

@ -603,7 +603,7 @@ RDFContentSinkImpl::HandleCDataSection(const PRUnichar *aData,
}
NS_IMETHODIMP
RDFContentSinkImpl::HandleDoctypeDecl(const PRUnichar *aDoctype)
RDFContentSinkImpl::HandleDoctypeDecl(const PRUnichar *aDoctype, PRUint32 aLength)
{
return NS_OK;
}