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