CParserContext.cpp (1980B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=2 sw=2 et tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "nsAtom.h" 8 #include "CParserContext.h" 9 #include "prenv.h" 10 #include "nsMimeTypes.h" 11 12 CParserContext::CParserContext(nsIURI* aURI, eParserCommands aCommand) 13 : mScanner(aURI), 14 mDTDMode(eDTDMode_autodetect), 15 mDocType(eUnknown), 16 mStreamListenerState(eNone), 17 mParserCommand(aCommand), 18 mMultipart(true), 19 mCopyUnused(false) { 20 MOZ_COUNT_CTOR(CParserContext); 21 } 22 23 CParserContext::CParserContext(const nsAString& aBuffer, 24 eParserCommands aCommand, bool aLastBuffer) 25 : mScanner(aBuffer, !aLastBuffer), 26 mMimeType("application/xml"_ns), 27 mDTDMode(eDTDMode_full_standards), 28 mDocType(eXML), 29 mStreamListenerState(aLastBuffer ? eOnStop : eOnDataAvail), 30 mParserCommand(aCommand), 31 mMultipart(!aLastBuffer), 32 mCopyUnused(aLastBuffer) { 33 MOZ_COUNT_CTOR(CParserContext); 34 } 35 36 CParserContext::~CParserContext() { 37 // It's ok to simply ingore the PrevContext. 38 MOZ_COUNT_DTOR(CParserContext); 39 } 40 41 void CParserContext::SetMimeType(const nsACString& aMimeType) { 42 mMimeType.Assign(aMimeType); 43 44 mDocType = eUnknown; 45 46 if (mMimeType.EqualsLiteral(TEXT_HTML)) 47 mDocType = eHTML_Strict; 48 else if (mMimeType.EqualsLiteral(TEXT_XML) || 49 mMimeType.EqualsLiteral(APPLICATION_XML) || 50 mMimeType.EqualsLiteral(APPLICATION_XHTML_XML) || 51 mMimeType.EqualsLiteral(IMAGE_SVG_XML) || 52 mMimeType.EqualsLiteral(APPLICATION_MATHML_XML) || 53 mMimeType.EqualsLiteral(APPLICATION_RDF_XML) || 54 mMimeType.EqualsLiteral(APPLICATION_WAPXHTML_XML) || 55 mMimeType.EqualsLiteral(TEXT_RDF)) 56 mDocType = eXML; 57 }