From 8b6ba84a4711324f4ef1962bfd571bbc91c0d7ab Mon Sep 17 00:00:00 2001 From: "mrbkap%gmail.com" Date: Thu, 26 Jan 2006 19:07:41 +0000 Subject: [PATCH] bug 324738: Remove some unnecessary complexity from the parser and hardcode DTDs. r=sicking sr=jst git-svn-id: svn://10.0.0.236/trunk@188251 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/document/src/nsHTMLDocument.cpp | 6 - mozilla/mailnews/base/util/nsMsgDBFolder.cpp | 4 - .../compose/src/nsMsgComposeService.cpp | 17 +- .../src/nsBayesianFilter.cpp | 5 - mozilla/mailnews/mime/src/mimemoz2.cpp | 9 - mozilla/parser/htmlparser/public/nsIDTD.h | 31 +-- mozilla/parser/htmlparser/public/nsIParser.h | 17 +- mozilla/parser/htmlparser/src/CNavDTD.cpp | 44 ---- mozilla/parser/htmlparser/src/CNavDTD.h | 6 - .../parser/htmlparser/src/nsExpatDriver.cpp | 41 ---- mozilla/parser/htmlparser/src/nsExpatDriver.h | 2 - mozilla/parser/htmlparser/src/nsParser.cpp | 225 ++---------------- mozilla/parser/htmlparser/src/nsParser.h | 2 - .../htmlparser/src/nsViewSourceHTML.cpp | 53 +---- .../parser/htmlparser/src/nsViewSourceHTML.h | 10 - .../htmlparser/tests/html/TestParser.cpp | 14 +- .../htmlparser/tests/logparse/logparse.cpp | 3 - .../htmlparser/tests/outsinks/Convert.cpp | 14 +- 18 files changed, 38 insertions(+), 465 deletions(-) diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 621af96b1a5..b339f3391f8 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -2064,12 +2064,6 @@ nsHTMLDocument::OpenCommon(const nsACString& aContentType, PRBool aReplace) channel); NS_ENSURE_SUCCESS(rv, rv); - static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); - nsCOMPtr theDTD(do_CreateInstance(kNavDTDCID)); - if(theDTD) { - mParser->RegisterDTD(theDTD); - } - mParser->SetContentSink(sink); } diff --git a/mozilla/mailnews/base/util/nsMsgDBFolder.cpp b/mozilla/mailnews/base/util/nsMsgDBFolder.cpp index 7b67e80bdc0..e081f3430c5 100644 --- a/mozilla/mailnews/base/util/nsMsgDBFolder.cpp +++ b/mozilla/mailnews/base/util/nsMsgDBFolder.cpp @@ -99,7 +99,6 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kCollationFactoryCID, NS_COLLATIONFACTORY_CID); static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); static NS_DEFINE_CID(kParserCID, NS_PARSER_CID); -static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); nsIAtom* nsMsgDBFolder::mFolderLoadedAtom=nsnull; nsIAtom* nsMsgDBFolder::mDeleteOrMoveMsgCompletedAtom=nsnull; @@ -5210,10 +5209,7 @@ nsresult nsMsgDBFolder::GetMsgPreviewTextFromStream(nsIMsgDBHdr *msgHdr, nsIInpu textSink->Initialize(&bodyText, flags, 80); parser->SetContentSink(sink); - nsCOMPtr dtd = do_CreateInstance(kNavDTDCID,&rv); - NS_ENSURE_SUCCESS(rv, rv); - parser->RegisterDTD(dtd); nsAutoString msgBodyStr; // need to do an appropriate conversion here. msgBodyStr.AssignWithConversion(msgBody); diff --git a/mozilla/mailnews/compose/src/nsMsgComposeService.cpp b/mozilla/mailnews/compose/src/nsMsgComposeService.cpp index 86a0e1139ae..3efc26fab5a 100644 --- a/mozilla/mailnews/compose/src/nsMsgComposeService.cpp +++ b/mozilla/mailnews/compose/src/nsMsgComposeService.cpp @@ -104,7 +104,6 @@ #endif static NS_DEFINE_CID(kParserCID, NS_PARSER_CID); -static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); // #ifdef NS_DEBUG @@ -579,17 +578,13 @@ NS_IMETHODIMP nsMsgComposeService::GetParamsForMailto(nsIURI * aURI, nsIMsgCompo sanSink->Initialize(&sanitizedBody, 0, NS_ConvertASCIItoUTF16(allowedTags)); parser->SetContentSink(sink); - nsCOMPtr dtd = do_CreateInstance(kNavDTDCID); - if (dtd) + rv = parser->Parse(rawBody, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); + if (NS_FAILED(rv)) { - parser->RegisterDTD(dtd); - - rv = parser->Parse(rawBody, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); - if (NS_FAILED(rv)) - // Something went horribly wrong with parsing for html format - // in the body. Set composeHTMLFormat to PR_FALSE so we show the - // plain text mail compose. - composeHTMLFormat = PR_FALSE; + // Something went horribly wrong with parsing for html format + // in the body. Set composeHTMLFormat to PR_FALSE so we show the + // plain text mail compose. + composeHTMLFormat = PR_FALSE; } } } diff --git a/mozilla/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp b/mozilla/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp index 411b06f1392..2cc8da232d1 100644 --- a/mozilla/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp +++ b/mozilla/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp @@ -85,7 +85,6 @@ static PRLogModuleInfo *BayesianFilterLogModule = nsnull; static NS_DEFINE_CID(kParserCID, NS_PARSER_CID); -static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); #define kDefaultJunkThreshold .99 // we override this value via a pref static const char* kBayesianFilterTokenDelimiters = " \t\n\r\f."; @@ -559,10 +558,6 @@ nsresult Tokenizer::stripHTML(const nsAString& inString, nsAString& outString) textSink->Initialize(&outString, flags, 80); parser->SetContentSink(sink); - nsCOMPtr dtd = do_CreateInstance(kNavDTDCID,&rv); - NS_ENSURE_SUCCESS(rv, rv); - - parser->RegisterDTD(dtd); return parser->Parse(inString, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); } diff --git a/mozilla/mailnews/mime/src/mimemoz2.cpp b/mozilla/mailnews/mime/src/mimemoz2.cpp index f9f178bd80f..031965665f3 100644 --- a/mozilla/mailnews/mime/src/mimemoz2.cpp +++ b/mozilla/mailnews/mime/src/mimemoz2.cpp @@ -104,7 +104,6 @@ static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); // static NS_DEFINE_CID(kParserCID, NS_PARSER_CID); -static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); // #ifdef HAVE_MIME_DATA_SLOT @@ -2188,10 +2187,6 @@ HTML2Plaintext(const nsString& inString, nsString& outString, textSink->Initialize(&outString, flags, wrapCol); parser->SetContentSink(sink); - nsCOMPtr dtd = do_CreateInstance(kNavDTDCID); - NS_ENSURE_TRUE(dtd, NS_ERROR_FAILURE); - - parser->RegisterDTD(dtd); rv = parser->Parse(inString, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); @@ -2252,10 +2247,6 @@ HTMLSanitize(const nsString& inString, nsString& outString, sanSink->Initialize(&outString, flags, allowedTags); parser->SetContentSink(sink); - nsCOMPtr dtd = do_CreateInstance(kNavDTDCID); - NS_ENSURE_TRUE(dtd, NS_ERROR_FAILURE); - - parser->RegisterDTD(dtd); rv = parser->Parse(inString, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); diff --git a/mozilla/parser/htmlparser/public/nsIDTD.h b/mozilla/parser/htmlparser/public/nsIDTD.h index abf9dda9c9e..1ebc8f8c0a0 100644 --- a/mozilla/parser/htmlparser/public/nsIDTD.h +++ b/mozilla/parser/htmlparser/public/nsIDTD.h @@ -59,8 +59,8 @@ #include "nsITokenizer.h" #define NS_IDTD_IID \ -{ 0xab54d8ec, 0xc31c, 0x434b, \ - { 0xa7, 0x64, 0xb4, 0xe9, 0xcd, 0x60, 0xc5, 0xc1 } } +{ 0xcc374204, 0xcea2, 0x41a2, \ + { 0xb2, 0x7f, 0x83, 0x75, 0xe2, 0xcf, 0x97, 0xcf } } enum eAutoDetectResult { @@ -92,30 +92,6 @@ public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_IDTD_IID) - - NS_IMETHOD_(const nsIID&) GetMostDerivedIID(void) const = 0; - - /** - * Call this method if you want the DTD to construct a clone of itself. - * @update gess7/23/98 - * @param - * @return - */ - NS_IMETHOD CreateNewInstance(nsIDTD** aInstancePtrResult) = 0; - - /** - * This method is called to determine if the given DTD can parse - * a document in a given source-type. - * NOTE: Parsing always assumes that the end result will involve - * storing the result in the main content model. - * @param aParserContext -- the context for this document (knows - * the content type, document type, parser command, etc). - * @return eUnknownDetect if you don't know how to parse it, - * eValidDetect if you do, but someone may have a better idea, - * ePrimaryDetect if you think you know best - */ - NS_IMETHOD_(eAutoDetectResult) CanParse(CParserContext& aParserContext) = 0; - NS_IMETHOD WillBuildModel(const CParserContext& aParserContext, nsITokenizer* aTokenizer, nsIContentSink* aSink) = 0; @@ -207,9 +183,6 @@ public: NS_DEFINE_STATIC_IID_ACCESSOR(nsIDTD, NS_IDTD_IID) #define NS_DECL_NSIDTD \ - NS_IMETHOD_(const nsIID&) GetMostDerivedIID(void) const;\ - NS_IMETHOD CreateNewInstance(nsIDTD** aInstancePtrResult);\ - NS_IMETHOD_(eAutoDetectResult) CanParse(CParserContext& aParserContext);\ NS_IMETHOD WillBuildModel( const CParserContext& aParserContext, nsITokenizer* aTokenizer, nsIContentSink* aSink);\ NS_IMETHOD DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParser* aParser,nsIContentSink* aSink);\ NS_IMETHOD BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsITokenObserver* anObserver,nsIContentSink* aSink);\ diff --git a/mozilla/parser/htmlparser/public/nsIParser.h b/mozilla/parser/htmlparser/public/nsIParser.h index bfb57dd2d39..05d2fa5e77f 100644 --- a/mozilla/parser/htmlparser/public/nsIParser.h +++ b/mozilla/parser/htmlparser/public/nsIParser.h @@ -54,10 +54,11 @@ #include "nsStringGlue.h" #include "nsVoidArray.h" -// {6BE162F1-0A2E-4517-B3C5-EF5302DD2FEF} +// {26C4ABBE-A462-4110-A0A6-244BF39AE7D4} #define NS_IPARSER_IID \ -{ 0x6be162f1, 0xa2e, 0x4517, \ -{ 0xb3, 0xc5, 0xef, 0x53, 0x2, 0xdd, 0x2f, 0xef } } +{ 0x26c4abbe, 0xa462, 0x4110, \ + { 0xa0, 0xa6, 0x24, 0x4b, 0xf3, 0x9a, 0xe7, 0xd4 } } + // {41421C60-310A-11d4-816F-000064657374} #define NS_IDEBUG_DUMP_CONTENT_IID \ @@ -135,16 +136,6 @@ class nsIParser : public nsISupports { NS_DECLARE_STATIC_IID_ACCESSOR(NS_IPARSER_IID) - /** - * Call this method if you have a DTD that you want to share with the parser. - * Registered DTD's get remembered until the system shuts down. - * - * @update gess 3/25/98 - * @param aDTD -- ptr DTD that you're publishing the services of - */ - NS_IMETHOD RegisterDTD(nsIDTD* aDTD)=0; - - /** * Select given content sink into parser for parser output * @update gess5/11/98 diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index 0d9c0d51350..a46d3e35e6c 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -114,7 +114,6 @@ static const char kInvalidTagStackPos[] = "Error: invalid tag stack position"; NS_DTD_FLAG_HAD_FRAMESET) NS_IMPL_ISUPPORTS2(CNavDTD, nsIDTD, CNavDTD) -NS_DEFINE_STATIC_IID_ACCESSOR(CNavDTD, NS_INAVHTML_DTD_IID) CNavDTD::CNavDTD() : mMisplacedContent(0), @@ -134,14 +133,6 @@ CNavDTD::CNavDTD() { } -const nsIID& -CNavDTD::GetMostDerivedIID() const -{ - static nsIID kClassIID = NS_GET_IID(CNavDTD); - return kClassIID; -} - - #ifdef NS_DEBUG static nsLoggingSink* @@ -194,41 +185,6 @@ CNavDTD::~CNavDTD() NS_IF_RELEASE(mSink); } -nsresult -CNavDTD::CreateNewInstance(nsIDTD** aInstancePtrResult) -{ - nsresult result = NS_NewNavHTMLDTD(aInstancePtrResult); - NS_ENSURE_SUCCESS(result, result); - - CNavDTD* dtd = NS_STATIC_CAST(CNavDTD*, *aInstancePtrResult); - - dtd->mDTDMode = mDTDMode; - dtd->mParserCommand = mParserCommand; - dtd->mDocType = mDocType; - - return result; -} - -NS_IMETHODIMP_(eAutoDetectResult) -CNavDTD::CanParse(CParserContext& aParserContext) -{ - NS_ASSERTION(!aParserContext.mMimeType.IsEmpty(), - "How'd we get here with an unknown type?"); - - if (aParserContext.mParserCommand != eViewSource && - aParserContext.mDocType != eXML) { - // This means that we're - // 1) Looking at a type the parser claimed to know how to handle (so XML - // or HTML or a plaintext type) - // 2) Not looking at XML - // - // Therefore, we want to handle this data with this DTD - return ePrimaryDetect; - } - - return eUnknownDetect; -} - nsresult CNavDTD::WillBuildModel(const CParserContext& aParserContext, nsITokenizer* aTokenizer, diff --git a/mozilla/parser/htmlparser/src/CNavDTD.h b/mozilla/parser/htmlparser/src/CNavDTD.h index e58db1cca79..cbd9a74c4a1 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.h +++ b/mozilla/parser/htmlparser/src/CNavDTD.h @@ -413,12 +413,6 @@ protected: PRUint16 mFlags; }; -inline nsresult NS_NewNavHTMLDTD(nsIDTD** aInstancePtrResult) -{ - NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); - return CallCreateInstance(kNavDTDCID, aInstancePtrResult); -} - #endif diff --git a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp index 72289ac5358..26861fd4126 100644 --- a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp +++ b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp @@ -319,19 +319,6 @@ NS_IMPL_ISUPPORTS2(nsExpatDriver, nsITokenizer, nsIDTD) -nsresult -NS_NewExpatDriver(nsIDTD** aResult) -{ - *aResult = new nsExpatDriver(); - if (!*aResult) { - return NS_ERROR_OUT_OF_MEMORY; - } - - NS_ADDREF(*aResult); - - return NS_OK; -} - nsExpatDriver::nsExpatDriver() : mExpatParser(nsnull), mInCData(PR_FALSE), @@ -963,12 +950,6 @@ nsExpatDriver::ParseBuffer(const char* aBuffer, return NS_OK; } -NS_IMETHODIMP -nsExpatDriver::CreateNewInstance(nsIDTD** aInstancePtrResult) -{ - return NS_NewExpatDriver(aInstancePtrResult); -} - NS_IMETHODIMP nsExpatDriver::ConsumeToken(nsScanner& aScanner, PRBool& aFlushTokens) @@ -1009,22 +990,6 @@ nsExpatDriver::ConsumeToken(nsScanner& aScanner, return NS_OK; } -NS_IMETHODIMP_(eAutoDetectResult) -nsExpatDriver::CanParse(CParserContext& aParserContext) -{ - NS_ASSERTION(!aParserContext.mMimeType.IsEmpty(), - "How'd we get here with an unknown type?"); - - if (eViewSource != aParserContext.mParserCommand && - aParserContext.mDocType == eXML) { - // The parser context already looked at the MIME type for us - - return ePrimaryDetect; - } - - return eUnknownDetect; -} - NS_IMETHODIMP nsExpatDriver::WillBuildModel(const CParserContext& aParserContext, nsITokenizer* aTokenizer, @@ -1139,12 +1104,6 @@ nsExpatDriver::DidTokenize(PRBool aIsFinalChunk) NS_OK; } -NS_IMETHODIMP_(const nsIID&) -nsExpatDriver::GetMostDerivedIID(void) const -{ - return NS_GET_IID(nsIDTD); -} - NS_IMETHODIMP_(void) nsExpatDriver::Terminate() { diff --git a/mozilla/parser/htmlparser/src/nsExpatDriver.h b/mozilla/parser/htmlparser/src/nsExpatDriver.h index b4ca5367cd7..345f31dfce5 100644 --- a/mozilla/parser/htmlparser/src/nsExpatDriver.h +++ b/mozilla/parser/htmlparser/src/nsExpatDriver.h @@ -118,6 +118,4 @@ private: nsString mURISpec; }; -nsresult NS_NewExpatDriver(nsIDTD** aDriver); - #endif diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index 40b19410365..c7814a3b26e 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -85,97 +85,6 @@ static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); nsCOMArray *nsParser::sParserDataListeners; -class CDTDDeallocator: public nsDequeFunctor -{ -public: - virtual void* operator()(void* anObject) - { - nsIDTD* aDTD = (nsIDTD*)anObject; - NS_RELEASE(aDTD); - return 0; - } -}; - -//------------------------------------------------------------------- - -class CDTDFinder: public nsDequeFunctor -{ -public: - CDTDFinder(nsIDTD* aDTD) - : mTargetDTD(aDTD) - { - } - - virtual ~CDTDFinder() - { - } - - virtual void* operator()(void* anObject) - { - nsIDTD* theDTD = (nsIDTD*)anObject; - if (theDTD->GetMostDerivedIID().Equals(mTargetDTD->GetMostDerivedIID())) { - return anObject; - } - return 0; - } - - nsIDTD* mTargetDTD; -}; - -//------------------------------------------------------------------- - -class CSharedParserObjects -{ -public: - CSharedParserObjects() - : mDTDDeque(0), - mHasViewSourceDTD(PR_FALSE), - mHasXMLDTD(PR_FALSE) - { - } - - ~CSharedParserObjects() - { - CDTDDeallocator theDeallocator; - mDTDDeque.ForEach(theDeallocator); // Release all the DTDs - } - - nsresult Init() - { - // Note: To cut down on startup time/overhead, we defer the construction - // of non-html DTD's. - nsIDTD* theDTD = nsnull; - nsresult rv = NS_NewNavHTMLDTD(&theDTD); - - NS_ASSERTION(theDTD, "Failed to create DTD"); - NS_ENSURE_SUCCESS(rv, rv); - - mDTDDeque.Push(theDTD); - mHasViewSourceDTD = PR_FALSE; - mHasXMLDTD = PR_FALSE; - return NS_OK; - } - - nsresult RegisterDTD(nsIDTD* aDTD) - { - NS_ENSURE_ARG_POINTER(aDTD); - nsCOMPtr dtd(aDTD); - CDTDFinder theFinder(dtd); - if (!mDTDDeque.FirstThat(theFinder)) { - nsIDTD* theDTD; - nsresult rv = dtd->CreateNewInstance(&theDTD); - NS_ENSURE_SUCCESS(rv, rv); - mDTDDeque.Push(theDTD); - } - return NS_OK; - } - - nsDeque mDTDDeque; - PRBool mHasViewSourceDTD; //this allows us to defer construction of this object. - PRBool mHasXMLDTD; //also defer XML dtd construction -}; - - //-------------- Begin ParseContinue Event Definition ------------------------ /* The parser can be explicitly interrupted by passing a return value of @@ -261,35 +170,6 @@ struct nsParserContinueEvent : public PLEvent //-------------- End ParseContinue Event Definition ------------------------ - -static CSharedParserObjects* gSharedParserObjects = nsnull; - - -//------------------------------------------------------------------------- - -static nsresult -GetSharedObjects(CSharedParserObjects** aSharedParserObjects) -{ - if (!gSharedParserObjects) { - gSharedParserObjects = new CSharedParserObjects(); - NS_ENSURE_TRUE(gSharedParserObjects, NS_ERROR_OUT_OF_MEMORY); - nsresult rv = gSharedParserObjects->Init(); - NS_ENSURE_SUCCESS(rv, rv); - } - *aSharedParserObjects = gSharedParserObjects; - return NS_OK; -} - -static void -FreeSharedObjects() -{ - if (gSharedParserObjects) { - delete gSharedParserObjects; - gSharedParserObjects = nsnull; - } -} - - /** * This gets called when the htmlparser module is initialized. */ @@ -350,8 +230,6 @@ nsParser::Init() // static void nsParser::Shutdown() { - FreeSharedObjects(); - delete sParserDataListeners; sParserDataListeners = nsnull; } @@ -557,21 +435,6 @@ nsParser::GetContentSink() return mSink; } -/** - * Call this method when you want to - * register your dynamic DTD's with the parser. - * - * @param aDTD is the object to be registered. - */ -NS_IMETHODIMP -nsParser::RegisterDTD(nsIDTD* aDTD) -{ - CSharedParserObjects* sharedObjects; - nsresult rv = GetSharedObjects(&sharedObjects); - NS_ENSURE_SUCCESS(rv, rv); - return sharedObjects->RegisterDTD(aDTD); -} - /** * Retrieve parsemode from topmost parser context * @@ -1007,76 +870,32 @@ DetermineParseMode(const nsString& aBuffer, nsDTDMode& aParseMode, } static nsresult -FindSuitableDTD(CParserContext& aParserContext, PRBool* aReturn) +FindSuitableDTD(CParserContext& aParserContext) { - *aReturn = PR_FALSE; - // Let's start by trying the defaultDTD, if one exists... - if (aParserContext.mDTD) { - eAutoDetectResult canParse = aParserContext.mDTD->CanParse(aParserContext); - if (canParse != eUnknownDetect && canParse != eInvalidDetect) { - *aReturn = PR_TRUE; + NS_ASSERTION(!aParserContext.mDTD, "Already found a DTD"); - return NS_OK; - } - } + // We always find a DTD. + aParserContext.mAutoDetectStatus = ePrimaryDetect; - CSharedParserObjects* sharedObjects; - nsresult rv = GetSharedObjects(&sharedObjects); - NS_ENSURE_SUCCESS(rv, rv); - - aParserContext.mAutoDetectStatus = eUnknownDetect; - PRInt32 theDTDIndex = 0; - nsIDTD* theBestDTD = 0; - nsIDTD* theDTD = 0; - PRBool thePrimaryFound = PR_FALSE; - - while ((theDTDIndex <= sharedObjects->mDTDDeque.GetSize()) && - (aParserContext.mAutoDetectStatus != ePrimaryDetect)){ - theDTD = NS_STATIC_CAST(nsIDTD*, sharedObjects->mDTDDeque.ObjectAt(theDTDIndex++)); - if (theDTD) { - // Store detect status in temp ( theResult ) to avoid bugs such as - // 36233, 36754, 36491, 36323. Basically, we should avoid calling DTD's - // WillBuildModel() multiple times, i.e., we shouldn't leave auto-detect-status - // unknown. - eAutoDetectResult theResult = theDTD->CanParse(aParserContext); - if (eValidDetect == theResult){ - aParserContext.mAutoDetectStatus = eValidDetect; - theBestDTD = theDTD; - } else if (ePrimaryDetect == theResult) { - theBestDTD = theDTD; - thePrimaryFound = PR_TRUE; - aParserContext.mAutoDetectStatus = ePrimaryDetect; - } - } - - if (theDTDIndex == sharedObjects->mDTDDeque.GetSize() && !thePrimaryFound) { - if (!sharedObjects->mHasXMLDTD) { - rv = NS_NewExpatDriver(&theDTD); // Do this to view XML files... - NS_ENSURE_SUCCESS(rv, rv); - - sharedObjects->mDTDDeque.Push(theDTD); - sharedObjects->mHasXMLDTD = PR_TRUE; - } #ifdef MOZ_VIEW_SOURCE - else if (!sharedObjects->mHasViewSourceDTD) { - rv = NS_NewViewSourceHTML(&theDTD); - NS_ENSURE_SUCCESS(rv, rv); - - sharedObjects->mDTDDeque.Push(theDTD); - sharedObjects->mHasViewSourceDTD = PR_TRUE; - } + // Quick check for view source. + if (aParserContext.mParserCommand == eViewSource) { + aParserContext.mDTD = new CViewSourceHTML(); + return aParserContext.mDTD ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + } #endif - } + + // Now see if we're parsing HTML (which, as far as we're concerned, simply + // means "not XML"). + if (aParserContext.mDocType != eXML) { + aParserContext.mDTD = new CNavDTD(); + return aParserContext.mDTD ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } - if (theBestDTD) { - rv = theBestDTD->CreateNewInstance(getter_AddRefs(aParserContext.mDTD)); - NS_ENSURE_SUCCESS(rv, rv); - - *aReturn = PR_TRUE; - } - - return rv; + // If we're here, then we'd better be parsing XML. + NS_ASSERTION(aParserContext.mDocType == eXML, "What are you trying to send me, here?"); + aParserContext.mDTD = new nsExpatDriver(); + return aParserContext.mDTD ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_IMETHODIMP @@ -1125,13 +944,9 @@ nsParser::WillBuildModel(nsString& aFilename) mParserContext->mDocType, mParserContext->mMimeType); } - PRBool found; - nsresult rv = FindSuitableDTD(*mParserContext, &found); + nsresult rv = FindSuitableDTD(*mParserContext); NS_ENSURE_SUCCESS(rv, rv); - if (!found) - return rv; - nsITokenizer* tokenizer; rv = mParserContext->GetTokenizer(mParserContext->mDTD->GetType(), mSink, tokenizer); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h index 179f40679b7..101f63ce857 100644 --- a/mozilla/parser/htmlparser/src/nsParser.h +++ b/mozilla/parser/htmlparser/src/nsParser.h @@ -178,8 +178,6 @@ class nsParser : public nsIParser, NS_IMETHOD_(void) SetParserFilter(nsIParserFilter* aFilter); - - NS_IMETHOD RegisterDTD(nsIDTD* aDTD); /** * Retrieve the scanner from the topmost parser context diff --git a/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp b/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp index 3d704f759bd..83f16d95795 100644 --- a/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp +++ b/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp @@ -92,7 +92,6 @@ Stopwatch vsTimer; #endif -static NS_DEFINE_IID(kClassIID, NS_VIEWSOURCE_HTML_IID); // Define this to dump the viewsource stuff to a file //#define DUMP_TO_FILE @@ -131,9 +130,6 @@ nsresult CViewSourceHTML::QueryInterface(const nsIID& aIID, void** aInstancePtr) else if(aIID.Equals(NS_GET_IID(nsIDTD))) { //do IParser base class... *aInstancePtr = (nsIDTD*)(this); } - else if(aIID.Equals(kClassIID)) { //do this class... - *aInstancePtr = (CViewSourceHTML*)(this); - } else { *aInstancePtr=0; return NS_NOINTERFACE; @@ -158,7 +154,8 @@ nsresult NS_NewViewSourceHTML(nsIDTD** aInstancePtrResult) return NS_ERROR_OUT_OF_MEMORY; } - return it->QueryInterface(kClassIID, (void **) aInstancePtrResult); + NS_ADDREF(*aInstancePtrResult = it); + return NS_OK; } @@ -349,52 +346,6 @@ CViewSourceHTML::~CViewSourceHTML(){ mParser=0; //just to prove we destructed... } -/** - * - * @update gess1/8/99 - * @param - * @return - */ -const nsIID& CViewSourceHTML::GetMostDerivedIID(void) const{ - return kClassIID; -} - -/** - * Call this method if you want the DTD to construct a fresh - * instance of itself. - * @update gess7/23/98 - * @param - * @return - */ -nsresult CViewSourceHTML::CreateNewInstance(nsIDTD** aInstancePtrResult){ - return NS_NewViewSourceHTML(aInstancePtrResult); -} - -/** - * This method is called to determine if the given DTD can parse - * a document in a given source-type. - * NOTE: Parsing always assumes that the end result will involve - * storing the result in the main content model. - * @update gess6/24/98 - * @param - * @return TRUE if this DTD can satisfy the request; FALSE otherwise. - */ -NS_IMETHODIMP_(eAutoDetectResult) -CViewSourceHTML::CanParse(CParserContext& aParserContext) -{ - if (eViewSource == aParserContext.mParserCommand) { - if (aParserContext.mDocType == ePlainText) { - return eValidDetect; - } - - // We claim to parse XML... now _that_ is funny. - return ePrimaryDetect; - } - - return eUnknownDetect; -} - - /** * The parser uses a code sandwich to wrap the parsing process. Before * the process begins, WillBuildModel() is called. Afterwards the parser diff --git a/mozilla/parser/htmlparser/src/nsViewSourceHTML.h b/mozilla/parser/htmlparser/src/nsViewSourceHTML.h index ee62944cf14..f995521a9f4 100644 --- a/mozilla/parser/htmlparser/src/nsViewSourceHTML.h +++ b/mozilla/parser/htmlparser/src/nsViewSourceHTML.h @@ -52,11 +52,6 @@ #include "nsDTDUtils.h" #include "nsParserNode.h" -#define NS_VIEWSOURCE_HTML_IID \ - {0xb6003010, 0x7932, 0x11d2, \ - {0x80, 0x1b, 0x0, 0x60, 0x8, 0xbf, 0xc4, 0x89 }} - - class nsIParserNode; class nsParser; class nsITokenizer; @@ -117,9 +112,4 @@ protected: PRUint32 mTokenCount; }; -extern nsresult NS_NewViewSourceHTML(nsIDTD** aInstancePtrResult); - #endif - - - diff --git a/mozilla/parser/htmlparser/tests/html/TestParser.cpp b/mozilla/parser/htmlparser/tests/html/TestParser.cpp index 0f6e9c72376..cbcaaa7ba30 100644 --- a/mozilla/parser/htmlparser/tests/html/TestParser.cpp +++ b/mozilla/parser/htmlparser/tests/html/TestParser.cpp @@ -47,7 +47,6 @@ // Class IID's static NS_DEFINE_CID(kParserCID, NS_PARSER_CID); static NS_DEFINE_CID(kLoggingSinkCID, NS_LOGGING_SINK_CID); -static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); //---------------------------------------------------------------------- @@ -69,13 +68,7 @@ nsresult ParseData(char* anInputStream,char* anOutputStream) { printf("\nUnable to create a sink\n"); return result; } - // Create a dtd - nsCOMPtr dtd(do_CreateInstance(kNavDTDCID, &result)); - if(NS_FAILED(result)) { - printf("Unable to create a dtd\n"); - return result; - } - + PRFileDesc* in = PR_Open(anInputStream, PR_RDONLY, 0777); if (!in) { printf("\nUnable to open input file - %s\n", anInputStream); @@ -104,8 +97,7 @@ nsresult ParseData(char* anInputStream,char* anOutputStream) { } sink->SetOutputStream(out); - parser->RegisterDTD(dtd); - parser->SetContentSink(sink); + parser->SetContentSink(sink); result = parser->Parse(stream, 0, NS_LITERAL_CSTRING("text/html"), PR_FALSE, PR_TRUE); PR_Close(in); @@ -120,7 +112,7 @@ nsresult ParseData(char* anInputStream,char* anOutputStream) { int main(int argc, char** argv) { if (argc < 3) { - printf("\nUsage: \n"); + printf("\nUsage: \n"); return -1; } diff --git a/mozilla/parser/htmlparser/tests/logparse/logparse.cpp b/mozilla/parser/htmlparser/tests/logparse/logparse.cpp index b75e6c42312..740288d5306 100644 --- a/mozilla/parser/htmlparser/tests/logparse/logparse.cpp +++ b/mozilla/parser/htmlparser/tests/logparse/logparse.cpp @@ -99,9 +99,6 @@ nsresult GenerateBaselineFile(const char* aSourceFilename,const char* aBaselineF sink->SetOutputStream(outputfile); // Parse the document, having the sink write the data to fp - nsIDTD* dtd = nsnull; - NS_NewNavHTMLDTD(&dtd); - parser->RegisterDTD(dtd); parser->SetContentSink(sink); rv = parser->Parse(inputURI, 0, PR_FALSE, 0, eDTDMode_unknown); diff --git a/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp b/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp index de5731d0348..bbbc546782b 100644 --- a/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp +++ b/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp @@ -169,23 +169,11 @@ HTML2text(nsString& inString, nsString& inType, nsString& outType, #endif /* USE_SERIALIZER */ parser->SetContentSink(sink); - nsCOMPtr dtd; - if (inType.EqualsLiteral("text/html")) { - static NS_DEFINE_CID(kNavDTDCID, NS_CNAVDTD_CID); - dtd = do_CreateInstance(kNavDTDCID, &rv); - } - else + if (!inType.EqualsLiteral("text/html")) { printf("Don't know how to deal with non-html input!\n"); return NS_ERROR_NOT_IMPLEMENTED; } - if (NS_FAILED(rv)) - { - printf("Couldn't create new HTML DTD: 0x%x\n", rv); - return rv; - } - - parser->RegisterDTD(dtd); rv = parser->Parse(inString, 0, NS_LossyConvertUCS2toASCII(inType), PR_FALSE, PR_TRUE); if (NS_FAILED(rv))