forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			86 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=2 sw=2 et tw=80: */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| 
 | |
| #include "nsIAtom.h"
 | |
| #include "CParserContext.h"
 | |
| #include "nsToken.h"
 | |
| #include "prenv.h"  
 | |
| #include "nsIHTMLContentSink.h"
 | |
| #include "nsHTMLTokenizer.h"
 | |
| #include "nsMimeTypes.h"
 | |
| #include "nsHTMLTokenizer.h"
 | |
| 
 | |
| CParserContext::CParserContext(CParserContext* aPrevContext,
 | |
|                                nsScanner* aScanner, 
 | |
|                                void *aKey, 
 | |
|                                eParserCommands aCommand,
 | |
|                                nsIRequestObserver* aListener, 
 | |
|                                eAutoDetectResult aStatus, 
 | |
|                                bool aCopyUnused)
 | |
|   : mListener(aListener),
 | |
|     mKey(aKey),
 | |
|     mPrevContext(aPrevContext),
 | |
|     mScanner(aScanner),
 | |
|     mDTDMode(eDTDMode_unknown),
 | |
|     mStreamListenerState(eNone),
 | |
|     mContextType(eCTNone),
 | |
|     mAutoDetectStatus(aStatus),
 | |
|     mParserCommand(aCommand),
 | |
|     mMultipart(true),
 | |
|     mCopyUnused(aCopyUnused)
 | |
| { 
 | |
|   MOZ_COUNT_CTOR(CParserContext); 
 | |
| } 
 | |
| 
 | |
| CParserContext::~CParserContext()
 | |
| {
 | |
|   // It's ok to simply ingore the PrevContext.
 | |
|   MOZ_COUNT_DTOR(CParserContext);
 | |
| }
 | |
| 
 | |
| void
 | |
| CParserContext::SetMimeType(const nsACString& aMimeType)
 | |
| {
 | |
|   mMimeType.Assign(aMimeType);
 | |
| 
 | |
|   mDocType = ePlainText;
 | |
| 
 | |
|   if (mMimeType.EqualsLiteral(TEXT_HTML))
 | |
|     mDocType = eHTML_Strict;
 | |
|   else if (mMimeType.EqualsLiteral(TEXT_XML)              ||
 | |
|            mMimeType.EqualsLiteral(APPLICATION_XML)       ||
 | |
|            mMimeType.EqualsLiteral(APPLICATION_XHTML_XML) ||
 | |
|            mMimeType.EqualsLiteral(TEXT_XUL)              ||
 | |
|            mMimeType.EqualsLiteral(IMAGE_SVG_XML)         ||
 | |
|            mMimeType.EqualsLiteral(APPLICATION_MATHML_XML) ||
 | |
|            mMimeType.EqualsLiteral(APPLICATION_RDF_XML)   ||
 | |
|            mMimeType.EqualsLiteral(APPLICATION_WAPXHTML_XML) ||
 | |
|            mMimeType.EqualsLiteral(TEXT_RDF))
 | |
|     mDocType = eXML;
 | |
| }
 | |
| 
 | |
| nsresult
 | |
| CParserContext::GetTokenizer(nsIDTD* aDTD,
 | |
|                              nsIContentSink* aSink,
 | |
|                              nsITokenizer*& aTokenizer)
 | |
| {
 | |
|   nsresult result = NS_OK;
 | |
|   int32_t type = aDTD ? aDTD->GetType() : NS_IPARSER_FLAG_HTML;
 | |
| 
 | |
|   if (!mTokenizer) {
 | |
|     if (type == NS_IPARSER_FLAG_HTML || mParserCommand == eViewSource) {
 | |
|       mTokenizer = new nsHTMLTokenizer;
 | |
|     }
 | |
|     else if (type == NS_IPARSER_FLAG_XML) {
 | |
|       mTokenizer = do_QueryInterface(aDTD, &result);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   aTokenizer = mTokenizer;
 | |
| 
 | |
|   return result;
 | |
| }
 | 
