1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 /** 7 * MODULE NOTES: 8 * @update gess 4/1/98 9 * 10 */ 11 12 #ifndef __CParserContext 13 #define __CParserContext 14 15 #include "nsIParser.h" 16 #include "nsIURL.h" 17 #include "nsIDTD.h" 18 #include "nsIStreamListener.h" 19 #include "nsIRequest.h" 20 #include "nsScanner.h" 21 #include "nsString.h" 22 #include "nsCOMPtr.h" 23 #include "nsAutoPtr.h" 24 25 /** 26 * Note that the parser is given FULL access to all 27 * data in a parsercontext. Hey, that what it's for! 28 */ 29 30 class CParserContext { 31 public: 32 enum eContextType { eCTNone, eCTURL, eCTString, eCTStream }; 33 34 CParserContext(CParserContext* aPrevContext, nsScanner* aScanner, 35 void* aKey = 0, eParserCommands aCommand = eViewNormal, 36 nsIRequestObserver* aListener = 0, 37 eAutoDetectResult aStatus = eUnknownDetect, 38 bool aCopyUnused = false); 39 40 ~CParserContext(); 41 42 nsresult GetTokenizer(nsIDTD* aDTD, nsIContentSink* aSink, 43 nsITokenizer*& aTokenizer); 44 void SetMimeType(const nsACString& aMimeType); 45 46 nsCOMPtr<nsIRequest> 47 mRequest; // provided by necko to differnciate different input streams 48 // why is mRequest strongly referenced? see bug 102376. 49 nsCOMPtr<nsIRequestObserver> mListener; 50 void* const mKey; 51 nsCOMPtr<nsITokenizer> mTokenizer; 52 CParserContext* const mPrevContext; 53 nsAutoPtr<nsScanner> mScanner; 54 55 nsCString mMimeType; 56 nsDTDMode mDTDMode; 57 58 eParserDocType mDocType; 59 eStreamState mStreamListenerState; 60 eContextType mContextType; 61 eAutoDetectResult mAutoDetectStatus; 62 eParserCommands mParserCommand; 63 64 bool mMultipart; 65 bool mCopyUnused; 66 }; 67 68 #endif 69