diff --git a/mozilla/parser/htmlparser/public/nsIParser.h b/mozilla/parser/htmlparser/public/nsIParser.h index 54bc74c24b5..fd0ce6a67a7 100644 --- a/mozilla/parser/htmlparser/public/nsIParser.h +++ b/mozilla/parser/htmlparser/public/nsIParser.h @@ -50,7 +50,6 @@ #include "nsISupports.h" #include "nsIStreamListener.h" #include "nsIDTD.h" -#include "nsIInputStream.h" #include "nsStringGlue.h" #include "nsVoidArray.h" @@ -228,10 +227,6 @@ class nsIParser : public nsISupports { nsIRequestObserver* aListener = nsnull, void* aKey = 0, nsDTDMode aMode = eDTDMode_autodetect) = 0; - NS_IMETHOD Parse(nsIInputStream* aStream, - const nsACString& aMimeType, - void* aKey = 0, - nsDTDMode aMode = eDTDMode_autodetect) = 0; NS_IMETHOD Parse(const nsAString& aSourceBuffer, void* aKey, const nsACString& aMimeType, diff --git a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp index 412509a008c..2d615f140e9 100644 --- a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp +++ b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp @@ -1177,7 +1177,7 @@ nsExpatDriver::ConsumeToken(nsScanner& aScanner, PRBool& aFlushTokens) ("Remaining in expat's buffer: %i, remaining in scanner: %i.", mExpatBuffered, Distance(currentExpatPosition, end))); - return NS_SUCCEEDED(mInternalState) ? aScanner.FillBuffer() : NS_OK; + return NS_SUCCEEDED(mInternalState) ? kEOF : NS_OK; } NS_IMETHODIMP diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index b160f2253b4..d60ac6697e1 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -1280,43 +1280,6 @@ nsParser::Parse(nsIURI* aURL, return result; } - -/** - * Cause parser to parse input from given stream - */ -NS_IMETHODIMP -nsParser::Parse(nsIInputStream* aStream, - const nsACString& aMimeType, - void* aKey, - nsDTDMode aMode) -{ - nsresult result = NS_ERROR_OUT_OF_MEMORY; - - // Ok, time to create our tokenizer and begin the process - nsAutoString theUnknownFilename(NS_LITERAL_STRING("unknown")); - - nsScanner* theScanner = new nsScanner(theUnknownFilename, aStream, mCharset, - mCharsetSource); - - CParserContext* pc = new CParserContext(theScanner, aKey, mCommand, 0); - if (pc && theScanner) { - PushContext(*pc); - pc->SetMimeType(aMimeType); - pc->mStreamListenerState = eOnStart; - pc->mMultipart = PR_FALSE; - pc->mContextType = CParserContext::eCTStream; - pc->mDTDMode = aMode; - mParserContext->mScanner->FillBuffer(); - result = ResumeParse(); - pc = PopContext(); - delete pc; - } else { - result = mInternalState = NS_ERROR_HTMLPARSER_BADCONTEXT; - } - - return result; -} - /** * Call this method if all you want to do is parse 1 string full of HTML text. * In particular, this method should be called by the DOM when it has an HTML diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h index f3913fc9f9e..bfd23009e44 100644 --- a/mozilla/parser/htmlparser/src/nsParser.h +++ b/mozilla/parser/htmlparser/src/nsParser.h @@ -199,17 +199,6 @@ class nsParser : public nsIParser, void* aKey = 0, nsDTDMode aMode = eDTDMode_autodetect); - /** - * Cause parser to parse input from given stream - * @update gess5/11/98 - * @param aStream is the i/o source - * @return TRUE if all went well -- FALSE otherwise - */ - NS_IMETHOD Parse(nsIInputStream* aStream, - const nsACString& aMimeType, - void* aKey = 0, - nsDTDMode aMode = eDTDMode_autodetect); - /** * @update gess5/11/98 * @param anHTMLString contains a string-full of real HTML diff --git a/mozilla/parser/htmlparser/src/nsScanner.cpp b/mozilla/parser/htmlparser/src/nsScanner.cpp index e2fb44cabed..766005a5864 100644 --- a/mozilla/parser/htmlparser/src/nsScanner.cpp +++ b/mozilla/parser/htmlparser/src/nsScanner.cpp @@ -94,7 +94,6 @@ nsScanner::nsScanner(const nsAString& anHTMLString, const nsACString& aCharset, { MOZ_COUNT_CTOR(nsScanner); - mTotalRead = anHTMLString.Length(); mSlidingBuffer = nsnull; mCountRemaining = 0; mFirstNonWhitespacePosition = -1; @@ -121,6 +120,7 @@ nsScanner::nsScanner(nsString& aFilename,PRBool aCreateStream, : mFilename(aFilename), mParser(nsnull) { MOZ_COUNT_CTOR(nsScanner); + NS_ASSERTION(!aCreateStream, "This is always true."); mSlidingBuffer = nsnull; @@ -136,59 +136,12 @@ nsScanner::nsScanner(nsString& aFilename,PRBool aCreateStream, mIncremental = PR_TRUE; mFirstNonWhitespacePosition = -1; mCountRemaining = 0; - mTotalRead=0; - if(aCreateStream) { - nsCOMPtr file; - nsCOMPtr fileStream; - - NS_NewLocalFile(aFilename, PR_TRUE, getter_AddRefs(file)); - if (file) - NS_NewLocalFileInputStream(getter_AddRefs(mInputStream), file); - - } //if mUnicodeDecoder = 0; mCharsetSource = kCharsetUninitialized; SetDocumentCharset(aCharset, aSource); } -/** - * Use this constructor if you want i/o to be stream based. - * - * @update gess 5/12/98 - * @param aStream -- - * @param assumeOwnership -- - * @param aFilename -- - * @return - */ -nsScanner::nsScanner(const nsAString& aFilename, nsIInputStream* aStream, - const nsACString& aCharset, PRInt32 aSource) - : mFilename(aFilename), mParser(nsnull) -{ - MOZ_COUNT_CTOR(nsScanner); - - mSlidingBuffer = nsnull; - - // XXX This is a big hack. We need to initialize the iterators to something. - // What matters is that mCurrentPosition == mEndPosition, so that our methods - // believe that we are at EOF (see bug 182067). We null out mCurrentPosition - // so that we have some hope of catching null pointer dereferences associated - // with this hack. --darin - memset(&mCurrentPosition, 0, sizeof(mCurrentPosition)); - mMarkPosition = mCurrentPosition; - mEndPosition = mCurrentPosition; - - mIncremental = PR_FALSE; - mFirstNonWhitespacePosition = -1; - mCountRemaining = 0; - mTotalRead=0; - mInputStream=aStream; - mUnicodeDecoder = 0; - mCharsetSource = kCharsetUninitialized; - SetDocumentCharset(aCharset, aSource); -} - - nsresult nsScanner::SetDocumentCharset(const nsACString& aCharset , PRInt32 aSource) { nsresult res = NS_OK; @@ -251,11 +204,6 @@ nsScanner::~nsScanner() { MOZ_COUNT_DTOR(nsScanner); - if(mInputStream) { - mInputStream->Close(); - mInputStream = 0; - } - NS_IF_RELEASE(mUnicodeDecoder); } @@ -313,7 +261,6 @@ PRBool nsScanner::UngetReadable(const nsAString& aBuffer) { PRUint32 length = aBuffer.Length(); mCountRemaining += length; // Ref. bug 117441 - mTotalRead += length; return PR_TRUE; } @@ -325,7 +272,6 @@ PRBool nsScanner::UngetReadable(const nsAString& aBuffer) { * @return error code */ nsresult nsScanner::Append(const nsAString& aBuffer) { - mTotalRead += aBuffer.Length(); AppendToBuffer(aBuffer); return NS_OK; } @@ -342,7 +288,7 @@ nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen, { nsresult res=NS_OK; PRUnichar *unichars, *start; - if(mUnicodeDecoder) { + if (mUnicodeDecoder) { PRInt32 unicharBufLen = 0; mUnicodeDecoder->GetMaxLength(aBuffer, aLen, &unicharBufLen); nsScannerString::Buffer* buffer = nsScannerString::AllocBuffer(unicharBufLen + 1); @@ -389,7 +335,6 @@ nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen, buffer->SetDataLength(totalChars); AppendToBuffer(buffer, aRequest); - mTotalRead += totalChars; // Don't propagate return code of unicode decoder // since it doesn't reflect on our success or failure @@ -397,47 +342,13 @@ nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen, res = NS_OK; } else { - AppendASCIItoBuffer(aBuffer, aLen, aRequest); - mTotalRead+=aLen; + NS_WARNING("No decoder found."); + res = NS_ERROR_FAILURE; } return res; } - -/** - * Grab data from underlying stream. - * - * @update gess4/3/98 - * @return error code - */ -nsresult nsScanner::FillBuffer(void) { - nsresult result=NS_OK; - - if(!mInputStream) { - result=kEOF; - } - else { - PRUint32 numread=0; - char buf[kBufsize+1]; - buf[kBufsize]=0; - - // XXX use ReadSegments to avoid extra buffer copy? --darin - - result = mInputStream->Read(buf, kBufsize, &numread); - if (0 == numread) { - return kEOF; - } - - if((0 0) { + if (mCountRemaining <= aOffset) + return kEOF; + + nsScannerIterator pos = mCurrentPosition; + pos.advance(aOffset); + aChar=*pos; + } + else { + aChar=*mCurrentPosition; } - if(NS_OK == result){ - if (aOffset) { - while ((NS_OK == result) && (mCountRemaining <= aOffset)) { - result = FillBuffer(); - } - - if (NS_OK == result) { - nsScannerIterator pos = mCurrentPosition; - pos.advance(aOffset); - aChar=*pos; - } - } - else { - aChar=*mCurrentPosition; - } - } - - return result; + return NS_OK; } nsresult nsScanner::Peek(nsAString& aStr, PRInt32 aNumChars, PRInt32 aOffset) { - if (!mSlidingBuffer) { + if (!mSlidingBuffer || mCurrentPosition == mEndPosition) { return kEOF; } - if (mCurrentPosition == mEndPosition) { - return FillBuffer(); - } - nsScannerIterator start, end; start = mCurrentPosition; @@ -591,7 +481,7 @@ nsresult nsScanner::SkipWhitespace(PRInt32& aNewlinesSkipped) { if (skipped) { SetPosition(current); if (current == mEndPosition) { - result = FillBuffer(); + result = kEOF; } } @@ -628,68 +518,6 @@ nsresult nsScanner::SkipOver(PRUnichar aSkipChar){ } -/** - * Skip over chars as long as they're in aSkipSet - * - * @update gess 3/25/98 - * @param aSkipSet is an ordered string. - * @return error code - */ -nsresult nsScanner::SkipOver(nsString& aSkipSet){ - - if (!mSlidingBuffer) { - return kEOF; - } - - PRUnichar theChar=0; - nsresult result=NS_OK; - - while(NS_OK==result) { - result=Peek(theChar); - if(NS_OK == result) { - PRInt32 pos=aSkipSet.FindChar(theChar); - if(kNotFound==pos) { - break; - } - GetChar(theChar); - } - else break; - } //while - return result; - -} - - -/** - * Skip over chars until they're in aValidSet - * - * @update gess 3/25/98 - * @param aValid set is an ordered string that - * contains chars you're looking for - * @return error code - */ -nsresult nsScanner::SkipTo(nsString& aValidSet){ - if (!mSlidingBuffer) { - return kEOF; - } - - PRUnichar ch=0; - nsresult result=NS_OK; - - while(NS_OK==result) { - result=Peek(ch); - if(NS_OK == result) { - PRInt32 pos=aValidSet.FindChar(ch); - if(kNotFound!=pos) { - break; - } - GetChar(ch); - } - else break; - } //while - return result; -} - #if 0 void DoErrTest(nsString& aString) { PRInt32 pos=aString.FindChar(0); @@ -708,19 +536,6 @@ void DoErrTest(nsCString& aString) { } #endif -/** - * Skip over chars as long as they're in aValidSet - * - * @update gess 3/25/98 - * @param aValidSet is an ordered string containing the - * characters you want to skip - * @return error code - */ -nsresult nsScanner::SkipPast(nsString& aValidSet){ - NS_NOTYETIMPLEMENTED("Error: SkipPast not yet implemented."); - return NS_OK; -} - /** * Consume characters until you run into space, a '<', a '>', or a '/'. * @@ -780,7 +595,7 @@ nsresult nsScanner::ReadTagIdentifier(nsScannerSharedSubstring& aString) { SetPosition(current); if (current == end) { - result = FillBuffer(); + result = kEOF; } //DoErrTest(aString); @@ -840,7 +655,7 @@ nsresult nsScanner::ReadEntityIdentifier(nsString& aString) { SetPosition(current); if (current == end) { AppendUnicodeTo(origin, current, aString); - return FillBuffer(); + return kEOF; } //DoErrTest(aString); @@ -889,7 +704,7 @@ nsresult nsScanner::ReadNumber(nsString& aString,PRInt32 aBase) { SetPosition(current); if (current == end) { AppendUnicodeTo(origin, current, aString); - return FillBuffer(); + return kEOF; } //DoErrTest(aString); @@ -967,7 +782,7 @@ nsresult nsScanner::ReadWhitespace(nsScannerSharedSubstring& aString, SetPosition(current); if (current == end) { AppendUnicodeTo(origin, current, aString); - result = FillBuffer(); + result = kEOF; } aHaveCR = haveCR; @@ -1026,69 +841,12 @@ nsresult nsScanner::ReadWhitespace(nsScannerIterator& aStart, if (current == end) { aStart = origin; aEnd = current; - result = FillBuffer(); + result = kEOF; } return result; } -/** - * Consume chars as long as they are in the - * given validSet of input chars. - * - * @update gess 3/25/98 - * @param aString will contain the result of this method - * @param aValidSet is an ordered string that contains the - * valid characters - * @return error code - */ -nsresult nsScanner::ReadWhile(nsString& aString, - nsString& aValidSet, - PRBool addTerminal){ - - if (!mSlidingBuffer) { - return kEOF; - } - - PRUnichar theChar=0; - nsresult result=Peek(theChar); - nsScannerIterator origin, current, end; - - origin = mCurrentPosition; - current = origin; - end = mEndPosition; - - while(current != end) { - - theChar=*current; - if (theChar == '\0') { - ReplaceCharacter(current, sInvalid); - theChar = sInvalid; - } - if(theChar) { - PRInt32 pos=aValidSet.FindChar(theChar); - if(kNotFound==pos) { - if(addTerminal) - ++current; - AppendUnicodeTo(origin, current, aString); - break; - } - } - ++current; - } - - SetPosition(current); - if (current == end) { - AppendUnicodeTo(origin, current, aString); - return FillBuffer(); - } - - //DoErrTest(aString); - - return result; - -} - /** * Consume characters until you encounter one contained in given * input set. @@ -1156,7 +914,7 @@ nsresult nsScanner::ReadUntil(nsAString& aString, // current = mEndPosition SetPosition(current); AppendUnicodeTo(origin, current, aString); - return FillBuffer(); + return kEOF; } nsresult nsScanner::ReadUntil(nsScannerSharedSubstring& aString, @@ -1216,7 +974,7 @@ nsresult nsScanner::ReadUntil(nsScannerSharedSubstring& aString, // current = mEndPosition SetPosition(current); AppendUnicodeTo(origin, current, aString); - return FillBuffer(); + return kEOF; } nsresult nsScanner::ReadUntil(nsScannerIterator& aStart, @@ -1277,7 +1035,7 @@ nsresult nsScanner::ReadUntil(nsScannerIterator& aStart, SetPosition(current); aStart = origin; aEnd = current; - return FillBuffer(); + return kEOF; } /** @@ -1328,7 +1086,7 @@ nsresult nsScanner::ReadUntil(nsAString& aString, // current = mEndPosition AppendUnicodeTo(origin, current, aString); SetPosition(current); - return FillBuffer(); + return kEOF; } @@ -1425,19 +1183,6 @@ void nsScanner::AppendToBuffer(nsScannerString::Buffer* aBuf, } } -void nsScanner::AppendASCIItoBuffer(const char* aData, PRUint32 aLen, - nsIRequest *aRequest) -{ - nsScannerString::Buffer* buf = nsScannerString::AllocBuffer(aLen); - if (buf) - { - LossyConvertEncoding converter(buf->DataStart()); - converter.write(aData, aLen); - converter.write_terminator(); - AppendToBuffer(buf, aRequest); - } -} - /** * call this to copy bytes out of the scanner that have not yet been consumed * by the tokenization process. diff --git a/mozilla/parser/htmlparser/src/nsScanner.h b/mozilla/parser/htmlparser/src/nsScanner.h index a4ae637fafe..dcfcdc505a7 100644 --- a/mozilla/parser/htmlparser/src/nsScanner.h +++ b/mozilla/parser/htmlparser/src/nsScanner.h @@ -43,8 +43,8 @@ * The scanner is a low-level service class that knows * how to consume characters out of an (internal) stream. * This class also offers a series of utility methods - * that most tokenizers want, such as readUntil(), - * readWhile() and SkipWhitespace(). + * that most tokenizers want, such as readUntil() + * and SkipWhitespace(). */ @@ -57,7 +57,6 @@ #include "prtypes.h" #include "nsIUnicodeDecoder.h" #include "nsScannerString.h" -#include "nsIInputStream.h" class nsParser; @@ -99,18 +98,6 @@ class nsScanner { */ nsScanner(nsString& aFilename,PRBool aCreateStream, const nsACString& aCharset, PRInt32 aSource); - /** - * Use this constructor if you want i/o to be stream based. - * - * @update ftang 3/02/99 - * @param aCharset charset - * @param aCharsetSource - where the charset info came from - * @param aMode represents the parser mode (nav, other) - * @return - */ - nsScanner(const nsAString& aFilename, nsIInputStream* aStream, const nsACString& aCharset, PRInt32 aSource); - - ~nsScanner(); /** @@ -134,15 +121,6 @@ class nsScanner { nsresult Peek(nsAString& aStr, PRInt32 aNumChars, PRInt32 aOffset = 0); - /** - * Skip over chars as long as they're in aSkipSet - * - * @update gess 3/25/98 - * @param set of chars to be skipped - * @return error code - */ - nsresult SkipOver(nsString& SkipChars); - /** * Skip over chars as long as they equal given char * @@ -152,24 +130,6 @@ class nsScanner { */ nsresult SkipOver(PRUnichar aSkipChar); - /** - * Skip over chars until they're in aValidSet - * - * @update gess 3/25/98 - * @param aValid set contains chars you're looking for - * @return error code - */ - nsresult SkipTo(nsString& aValidSet); - - /** - * Skip over chars as long as they're in aSequence - * - * @update gess 3/25/98 - * @param contains sequence to be skipped - * @return error code - */ - nsresult SkipPast(nsString& aSequence); - /** * Skip whitespace on scanner input stream * @@ -238,18 +198,6 @@ class nsScanner { const nsReadEndCondition& aEndCondition, PRBool addTerminal); - - /** - * Consume characters while they're members of anInputSet - * - * @update gess 3/25/98 - * @param aString receives new data from stream - * @param anInputSet contains valid chars - * @param addTerminal tells us whether to append terminal to aString - * @return error code - */ - nsresult ReadWhile(nsString& aString,nsString& anInputSet,PRBool addTerminal); - /** * Records current offset position in input stream. This allows us * to back up to this point if the need should arise, such as when @@ -367,28 +315,14 @@ class nsScanner { mParser = aParser; } - - /** - * Fill internal buffer with new data, returns an error if - * no new data is read. - * - * @update gess4/3/98 - */ - nsresult FillBuffer(void); - protected: - enum {eBufferSizeThreshold=0x1000}; //4K - void AppendToBuffer(nsScannerString::Buffer *, nsIRequest *aRequest); void AppendToBuffer(const nsAString& aStr) { AppendToBuffer(nsScannerString::AllocBufferFromString(aStr), nsnull); } - void AppendASCIItoBuffer(const char* aData, PRUint32 aLen, - nsIRequest *aRequest); - nsCOMPtr mInputStream; nsScannerString* mSlidingBuffer; nsScannerIterator mCurrentPosition; // The position we will next read from in the scanner buffer nsScannerIterator mMarkPosition; // The position last marked (we may rewind to here) @@ -396,7 +330,6 @@ class nsScanner { nsString mFilename; PRUint32 mCountRemaining; // The number of bytes still to be read // from the scanner buffer - PRUint32 mTotalRead; PRPackedBool mIncremental; PRInt32 mFirstNonWhitespacePosition; PRInt32 mCharsetSource;