parser/htmlparser/src/CParserContext.cpp

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:83ffdfdb3ca6
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
8 #include "nsIAtom.h"
9 #include "CParserContext.h"
10 #include "nsToken.h"
11 #include "prenv.h"
12 #include "nsIHTMLContentSink.h"
13 #include "nsHTMLTokenizer.h"
14 #include "nsMimeTypes.h"
15 #include "nsHTMLTokenizer.h"
16
17 CParserContext::CParserContext(CParserContext* aPrevContext,
18 nsScanner* aScanner,
19 void *aKey,
20 eParserCommands aCommand,
21 nsIRequestObserver* aListener,
22 eAutoDetectResult aStatus,
23 bool aCopyUnused)
24 : mListener(aListener),
25 mKey(aKey),
26 mPrevContext(aPrevContext),
27 mScanner(aScanner),
28 mDTDMode(eDTDMode_unknown),
29 mStreamListenerState(eNone),
30 mContextType(eCTNone),
31 mAutoDetectStatus(aStatus),
32 mParserCommand(aCommand),
33 mMultipart(true),
34 mCopyUnused(aCopyUnused)
35 {
36 MOZ_COUNT_CTOR(CParserContext);
37 }
38
39 CParserContext::~CParserContext()
40 {
41 // It's ok to simply ingore the PrevContext.
42 MOZ_COUNT_DTOR(CParserContext);
43 }
44
45 void
46 CParserContext::SetMimeType(const nsACString& aMimeType)
47 {
48 mMimeType.Assign(aMimeType);
49
50 mDocType = ePlainText;
51
52 if (mMimeType.EqualsLiteral(TEXT_HTML))
53 mDocType = eHTML_Strict;
54 else if (mMimeType.EqualsLiteral(TEXT_XML) ||
55 mMimeType.EqualsLiteral(APPLICATION_XML) ||
56 mMimeType.EqualsLiteral(APPLICATION_XHTML_XML) ||
57 mMimeType.EqualsLiteral(TEXT_XUL) ||
58 mMimeType.EqualsLiteral(IMAGE_SVG_XML) ||
59 mMimeType.EqualsLiteral(APPLICATION_MATHML_XML) ||
60 mMimeType.EqualsLiteral(APPLICATION_RDF_XML) ||
61 mMimeType.EqualsLiteral(TEXT_RDF))
62 mDocType = eXML;
63 }
64
65 nsresult
66 CParserContext::GetTokenizer(nsIDTD* aDTD,
67 nsIContentSink* aSink,
68 nsITokenizer*& aTokenizer)
69 {
70 nsresult result = NS_OK;
71 int32_t type = aDTD ? aDTD->GetType() : NS_IPARSER_FLAG_HTML;
72
73 if (!mTokenizer) {
74 if (type == NS_IPARSER_FLAG_HTML || mParserCommand == eViewSource) {
75 mTokenizer = new nsHTMLTokenizer;
76 }
77 else if (type == NS_IPARSER_FLAG_XML) {
78 mTokenizer = do_QueryInterface(aDTD, &result);
79 }
80 }
81
82 aTokenizer = mTokenizer;
83
84 return result;
85 }

mercurial