parser/htmlparser/src/CParserContext.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     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"
    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 } 
    39 CParserContext::~CParserContext()
    40 {
    41   // It's ok to simply ingore the PrevContext.
    42   MOZ_COUNT_DTOR(CParserContext);
    43 }
    45 void
    46 CParserContext::SetMimeType(const nsACString& aMimeType)
    47 {
    48   mMimeType.Assign(aMimeType);
    50   mDocType = ePlainText;
    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 }
    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;
    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   }
    82   aTokenizer = mTokenizer;
    84   return result;
    85 }

mercurial