2003-04-09 01:23:34 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2001-09-26 04:40:45 +04:00
|
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
2004-04-23 17:24:28 +04:00
|
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
1998-04-14 00:24:54 +04:00
|
|
|
*
|
2004-04-23 17:24:28 +04:00
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
2001-09-26 04:40:45 +04:00
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
1998-04-14 00:24:54 +04:00
|
|
|
*
|
1999-11-06 06:43:54 +03:00
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
2004-04-23 17:24:28 +04:00
|
|
|
* The Initial Developer of the Original Code is
|
2001-09-26 04:40:45 +04:00
|
|
|
* Netscape Communications Corporation.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
2004-04-23 17:24:28 +04:00
|
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
2001-09-26 04:40:45 +04:00
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
2004-04-23 17:24:28 +04:00
|
|
|
* use your version of this file under the terms of the MPL, indicate your
|
2001-09-26 04:40:45 +04:00
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
2004-04-23 17:24:28 +04:00
|
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
1999-11-06 06:43:54 +03:00
|
|
|
*
|
2001-09-26 04:40:45 +04:00
|
|
|
* ***** END LICENSE BLOCK ***** */
|
1998-05-22 00:38:32 +04:00
|
|
|
|
1998-04-14 00:24:54 +04:00
|
|
|
/**
|
|
|
|
* MODULE NOTES:
|
|
|
|
* @update gess 4/1/98
|
|
|
|
*
|
|
|
|
* This class does two primary jobs:
|
|
|
|
* 1) It iterates the tokens provided during the
|
|
|
|
* tokenization process, identifing where elements
|
|
|
|
* begin and end (doing validation and normalization).
|
|
|
|
* 2) It controls and coordinates with an instance of
|
|
|
|
* the IContentSink interface, to coordinate the
|
|
|
|
* the production of the content model.
|
|
|
|
*
|
|
|
|
* The basic operation of this class assumes that an HTML
|
|
|
|
* document is non-normalized. Therefore, we don't process
|
|
|
|
* the document in a normalized way. Don't bother to look
|
|
|
|
* for methods like: doHead() or doBody().
|
|
|
|
*
|
|
|
|
* Instead, in order to be backward compatible, we must
|
|
|
|
* scan the set of tokens and perform this basic set of
|
|
|
|
* operations:
|
|
|
|
* 1) Determine the token type (easy, since the tokens know)
|
|
|
|
* 2) Determine the appropriate section of the HTML document
|
|
|
|
* each token belongs in (HTML,HEAD,BODY,FRAMESET).
|
|
|
|
* 3) Insert content into our document (via the sink) into
|
|
|
|
* the correct section.
|
|
|
|
* 4) In the case of tags that belong in the BODY, we must
|
|
|
|
* ensure that our underlying document state reflects
|
|
|
|
* the appropriate context for our tag.
|
|
|
|
*
|
|
|
|
* For example,if we see a <TR>, we must ensure our
|
|
|
|
* document contains a table into which the row can
|
|
|
|
* be placed. This may result in "implicit containers"
|
|
|
|
* created to ensure a well-formed document.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
1998-06-19 05:00:27 +04:00
|
|
|
#ifndef NS_PARSER__
|
|
|
|
#define NS_PARSER__
|
1998-04-14 00:24:54 +04:00
|
|
|
|
|
|
|
#include "nsIParser.h"
|
|
|
|
#include "nsDeque.h"
|
|
|
|
#include "nsParserNode.h"
|
1998-05-15 02:19:08 +04:00
|
|
|
#include "nsIURL.h"
|
1998-07-14 01:13:09 +04:00
|
|
|
#include "CParserContext.h"
|
1998-07-31 02:42:27 +04:00
|
|
|
#include "nsParserCIID.h"
|
1999-01-26 04:24:31 +03:00
|
|
|
#include "nsITokenizer.h"
|
1999-04-05 10:55:49 +04:00
|
|
|
#include "nsHTMLTags.h"
|
1999-07-17 01:07:54 +04:00
|
|
|
#include "nsDTDUtils.h"
|
1999-11-10 06:41:09 +03:00
|
|
|
#include "nsTimer.h"
|
2001-06-21 06:06:23 +04:00
|
|
|
#include "nsIEventQueue.h"
|
2003-04-09 01:23:34 +04:00
|
|
|
#include "nsIContentSink.h"
|
|
|
|
#include "nsIParserFilter.h"
|
2004-11-02 22:52:32 +03:00
|
|
|
#include "nsCOMArray.h"
|
|
|
|
#include "nsIUnicharStreamListener.h"
|
1998-04-14 00:24:54 +04:00
|
|
|
|
1998-04-23 03:56:57 +04:00
|
|
|
class nsIDTD;
|
1999-01-09 04:09:02 +03:00
|
|
|
class nsScanner;
|
1999-06-21 04:33:51 +04:00
|
|
|
class nsIProgressEventSink;
|
1999-04-05 10:55:49 +04:00
|
|
|
|
2003-08-02 23:50:46 +04:00
|
|
|
#ifdef _MSC_VER
|
1999-01-26 04:24:31 +03:00
|
|
|
#pragma warning( disable : 4275 )
|
1999-02-04 01:58:49 +03:00
|
|
|
#endif
|
|
|
|
|
1999-01-26 04:24:31 +03:00
|
|
|
|
Checking in for bug 50742, this change removes the use of XIF in mozilla and replaces the XIF converter with a HTML (and XML) serializer.
Contextual information added to HTML copy and intelligence added to HTML paste in the editor (fixes bugs 47014, 50568 and 46554, and partly (at least) fixes bug 53188).
Code written by vidur, jfrancis, jst, akkana. Tested by jfrancis, akkana, vidur, jst, kin. Reviwed (and super reviewed) by waterson, vidur, kin, jfrancis, jst
2000-10-07 14:57:30 +04:00
|
|
|
class nsParser : public nsIParser,
|
|
|
|
public nsIStreamListener{
|
1999-10-28 11:53:21 +04:00
|
|
|
|
|
|
|
|
1998-04-25 23:45:14 +04:00
|
|
|
public:
|
1999-10-28 11:53:21 +04:00
|
|
|
friend class CTokenHandler;
|
2004-11-02 22:52:32 +03:00
|
|
|
/**
|
|
|
|
* Called on module init
|
|
|
|
*/
|
|
|
|
static nsresult Init();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called on module shutdown
|
|
|
|
*/
|
|
|
|
static void Shutdown();
|
1998-04-14 00:24:54 +04:00
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* default constructor
|
|
|
|
* @update gess5/11/98
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
nsParser();
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Destructor
|
|
|
|
* @update gess5/11/98
|
|
|
|
*/
|
1998-07-14 01:42:45 +04:00
|
|
|
virtual ~nsParser();
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Select given content sink into parser for parser output
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @param aSink is the new sink to be used by parser
|
|
|
|
* @return old sink, or NULL
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(void) SetContentSink(nsIContentSink* aSink);
|
1998-11-26 05:55:59 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* retrive the sink set into the parser
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @param aSink is the new sink to be used by parser
|
|
|
|
* @return old sink, or NULL
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(nsIContentSink*) GetContentSink(void);
|
1998-06-18 03:13:28 +04:00
|
|
|
|
1998-11-11 14:55:32 +03:00
|
|
|
/**
|
|
|
|
* Call this method once you've created a parser, and want to instruct it
|
2003-04-09 01:23:34 +04:00
|
|
|
* about the command which caused the parser to be constructed. For example,
|
1998-11-11 14:55:32 +03:00
|
|
|
* this allows us to select a DTD which can do, say, view-source.
|
|
|
|
*
|
|
|
|
* @update gess 3/25/98
|
2003-04-09 01:23:34 +04:00
|
|
|
* @param aCommand -- ptrs to string that contains command
|
|
|
|
* @return nada
|
1998-11-11 14:55:32 +03:00
|
|
|
*/
|
2004-07-18 01:45:37 +04:00
|
|
|
NS_IMETHOD_(void) GetCommand(nsCString& aCommand);
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(void) SetCommand(const char* aCommand);
|
|
|
|
NS_IMETHOD_(void) SetCommand(eParserCommands aParserCommand);
|
1998-11-11 14:55:32 +03:00
|
|
|
|
1999-04-26 21:49:45 +04:00
|
|
|
/**
|
|
|
|
* Call this method once you've created a parser, and want to instruct it
|
|
|
|
* about what charset to load
|
|
|
|
*
|
|
|
|
* @update ftang 4/23/99
|
2003-04-09 01:23:34 +04:00
|
|
|
* @param aCharset- the charset of a document
|
|
|
|
* @param aCharsetSource- the source of the charset
|
1999-04-26 21:49:45 +04:00
|
|
|
* @return nada
|
|
|
|
*/
|
2003-06-17 20:40:34 +04:00
|
|
|
NS_IMETHOD_(void) SetDocumentCharset(const nsACString& aCharset, PRInt32 aSource);
|
1999-04-26 21:49:45 +04:00
|
|
|
|
2003-06-17 20:40:34 +04:00
|
|
|
NS_IMETHOD_(void) GetDocumentCharset(nsACString& aCharset, PRInt32& aSource)
|
1999-05-18 05:30:21 +04:00
|
|
|
{
|
2002-01-09 04:37:50 +03:00
|
|
|
aCharset = mCharset;
|
|
|
|
aSource = mCharsetSource;
|
1999-05-18 05:30:21 +04:00
|
|
|
}
|
|
|
|
|
1999-04-26 21:49:45 +04:00
|
|
|
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(void) SetParserFilter(nsIParserFilter* aFilter);
|
1998-06-18 03:13:28 +04:00
|
|
|
|
2002-12-06 04:54:39 +03:00
|
|
|
NS_IMETHOD RegisterDTD(nsIDTD* aDTD);
|
1998-07-02 12:14:22 +04:00
|
|
|
|
1998-06-18 03:13:28 +04:00
|
|
|
/**
|
1998-08-12 12:53:55 +04:00
|
|
|
* Retrieve the scanner from the topmost parser context
|
1998-06-18 03:13:28 +04:00
|
|
|
*
|
1998-08-12 12:53:55 +04:00
|
|
|
* @update gess 6/9/98
|
|
|
|
* @return ptr to scanner
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(nsDTDMode) GetParseMode(void);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
/**
|
1998-07-14 01:13:09 +04:00
|
|
|
* Cause parser to parse input from given URL
|
1998-05-12 04:59:32 +04:00
|
|
|
* @update gess5/11/98
|
|
|
|
* @param aURL is a descriptor for source document
|
1998-06-01 23:51:52 +04:00
|
|
|
* @param aListener is a listener to forward notifications to
|
1998-05-12 04:59:32 +04:00
|
|
|
* @return TRUE if all went well -- FALSE otherwise
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD Parse(nsIURI* aURL,
|
|
|
|
nsIRequestObserver* aListener = nsnull,
|
|
|
|
PRBool aEnableVerify = PR_FALSE,
|
|
|
|
void* aKey = 0,
|
|
|
|
nsDTDMode aMode = eDTDMode_autodetect);
|
1998-07-14 01:13:09 +04:00
|
|
|
|
1998-07-10 09:35:23 +04:00
|
|
|
/**
|
|
|
|
* Cause parser to parse input from given stream
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @param aStream is the i/o source
|
|
|
|
* @return TRUE if all went well -- FALSE otherwise
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD Parse(nsIInputStream* aStream,
|
|
|
|
const nsACString& aMimeType,
|
|
|
|
PRBool aEnableVerify = PR_FALSE,
|
|
|
|
void* aKey = 0,
|
|
|
|
nsDTDMode aMode = eDTDMode_autodetect);
|
1998-07-10 09:35:23 +04:00
|
|
|
|
1998-05-15 02:19:08 +04:00
|
|
|
/**
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @param anHTMLString contains a string-full of real HTML
|
|
|
|
* @param appendTokens tells us whether we should insert tokens inline, or append them.
|
|
|
|
* @return TRUE if all went well -- FALSE otherwise
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD Parse(const nsAString& aSourceBuffer,
|
|
|
|
void* aKey,
|
|
|
|
const nsACString& aContentType,
|
|
|
|
PRBool aEnableVerify,
|
|
|
|
PRBool aLastCall,
|
|
|
|
nsDTDMode aMode = eDTDMode_autodetect);
|
|
|
|
|
2004-10-01 02:27:45 +04:00
|
|
|
/**
|
|
|
|
* This method needs documentation
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer,
|
|
|
|
void* aKey,
|
|
|
|
nsVoidArray& aTagStack,
|
2004-10-01 02:27:45 +04:00
|
|
|
PRBool aXMLMode,
|
2003-04-09 01:23:34 +04:00
|
|
|
const nsACString& aContentType,
|
|
|
|
nsDTDMode aMode = eDTDMode_autodetect);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
1999-04-05 10:55:49 +04:00
|
|
|
|
2003-04-09 01:23:34 +04:00
|
|
|
/**
|
|
|
|
* This method gets called when the tokens have been consumed, and it's time
|
|
|
|
* to build the model via the content sink.
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @return YES if model building went well -- NO otherwise.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD BuildModel(void);
|
1998-09-02 11:12:49 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Call this when you want control whether or not the parser will parse
|
|
|
|
* and tokenize input (TRUE), or whether it just caches input to be
|
|
|
|
* parsed later (FALSE).
|
|
|
|
*
|
|
|
|
* @update gess 9/1/98
|
|
|
|
* @param aState determines whether we parse/tokenize or just cache.
|
|
|
|
* @return current state
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD ContinueParsing();
|
|
|
|
NS_IMETHOD_(void) BlockParser();
|
|
|
|
NS_IMETHOD_(void) UnblockParser();
|
|
|
|
NS_IMETHOD Terminate(void);
|
1998-09-02 11:12:49 +04:00
|
|
|
|
1999-04-14 02:22:51 +04:00
|
|
|
/**
|
|
|
|
* Call this to query whether the parser is enabled or not.
|
|
|
|
*
|
|
|
|
* @update vidur 4/12/99
|
|
|
|
* @return current state
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(PRBool) IsParserEnabled();
|
1999-02-01 07:24:37 +03:00
|
|
|
|
2001-06-21 06:06:23 +04:00
|
|
|
/**
|
|
|
|
* Call this to query whether the parser thinks it's done with parsing.
|
|
|
|
*
|
|
|
|
* @update rickg 5/12/01
|
|
|
|
* @return complete state
|
|
|
|
*/
|
2003-04-09 01:23:34 +04:00
|
|
|
NS_IMETHOD_(PRBool) IsComplete();
|
2001-06-21 06:06:23 +04:00
|
|
|
|
1999-02-01 07:24:37 +03:00
|
|
|
/**
|
|
|
|
* This rather arcane method (hack) is used as a signal between the
|
|
|
|
* DTD and the parser. It allows the DTD to tell the parser that content
|
|
|
|
* that comes through (parser::parser(string)) but not consumed should
|
|
|
|
* propagate into the next string based parse call.
|
|
|
|
*
|
|
|
|
* @update gess 9/1/98
|
|
|
|
* @param aState determines whether we propagate unused string content.
|
|
|
|
* @return current state
|
|
|
|
*/
|
|
|
|
void SetUnusedInput(nsString& aBuffer);
|
|
|
|
|
1998-05-12 04:59:32 +04:00
|
|
|
/**
|
|
|
|
* This method gets called (automatically) during incremental parsing
|
|
|
|
* @update gess5/11/98
|
|
|
|
* @return TRUE if all went well, otherwise FALSE
|
|
|
|
*/
|
2002-01-04 00:25:33 +03:00
|
|
|
virtual nsresult ResumeParse(PRBool allowIteration = PR_TRUE,
|
|
|
|
PRBool aIsFinalChunk = PR_FALSE,
|
|
|
|
PRBool aCanInterrupt = PR_TRUE);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
1998-06-18 03:13:28 +04:00
|
|
|
//*********************************************
|
1998-05-15 02:19:08 +04:00
|
|
|
// These methods are callback methods used by
|
|
|
|
// net lib to let us know about our inputstream.
|
|
|
|
//*********************************************
|
2001-04-10 10:01:08 +04:00
|
|
|
// nsIRequestObserver methods:
|
|
|
|
NS_DECL_NSIREQUESTOBSERVER
|
1999-08-22 17:26:18 +04:00
|
|
|
|
1999-06-21 04:33:51 +04:00
|
|
|
// nsIStreamListener methods:
|
1999-08-22 17:26:18 +04:00
|
|
|
NS_DECL_NSISTREAMLISTENER
|
|
|
|
|
1999-01-26 04:24:31 +03:00
|
|
|
void PushContext(CParserContext& aContext);
|
|
|
|
CParserContext* PopContext();
|
|
|
|
CParserContext* PeekContext() {return mParserContext;}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @update gess 1/22/99
|
|
|
|
* @param
|
|
|
|
* @return
|
|
|
|
*/
|
2002-04-11 02:16:46 +04:00
|
|
|
nsresult GetTokenizer(nsITokenizer*& aTokenizer);
|
1999-01-26 04:24:31 +03:00
|
|
|
|
2001-08-22 04:38:46 +04:00
|
|
|
/**
|
|
|
|
* Get the channel associated with this parser
|
|
|
|
* @update harishd,gagan 07/17/01
|
|
|
|
* @param aChannel out param that will contain the result
|
|
|
|
* @return NS_OK if successful
|
|
|
|
*/
|
|
|
|
NS_IMETHOD GetChannel(nsIChannel** aChannel);
|
|
|
|
|
1999-10-01 02:01:48 +04:00
|
|
|
/**
|
|
|
|
* Get the DTD associated with this parser
|
|
|
|
* @update vidur 9/29/99
|
|
|
|
* @param aDTD out param that will contain the result
|
|
|
|
* @return NS_OK if successful, NS_ERROR_FAILURE for runtime error
|
|
|
|
*/
|
|
|
|
NS_IMETHOD GetDTD(nsIDTD** aDTD);
|
2001-09-29 03:08:17 +04:00
|
|
|
|
2001-06-30 02:56:58 +04:00
|
|
|
/**
|
|
|
|
* Detects the existence of a META tag with charset information in
|
|
|
|
* the given buffer.
|
|
|
|
*/
|
|
|
|
PRBool DetectMetaTag(const char* aBytes,
|
|
|
|
PRInt32 aLen,
|
2003-06-17 20:40:34 +04:00
|
|
|
nsCString& oCharset,
|
2001-12-26 06:17:59 +03:00
|
|
|
PRInt32& oCharsetSource);
|
2001-06-30 02:56:58 +04:00
|
|
|
|
2003-06-17 20:40:34 +04:00
|
|
|
void SetSinkCharset(nsACString& aCharset);
|
2001-06-30 02:56:58 +04:00
|
|
|
|
2001-06-21 06:06:23 +04:00
|
|
|
/**
|
|
|
|
* Removes continue parsing events
|
|
|
|
* @update kmcclusk 5/18/98
|
|
|
|
*/
|
|
|
|
|
|
|
|
NS_IMETHODIMP CancelParsingEvents();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates whether the parser is in a state where it
|
|
|
|
* can be interrupted.
|
|
|
|
* @return PR_TRUE if parser can be interrupted, PR_FALSE if it can not be interrupted.
|
|
|
|
* @update kmcclusk 5/18/98
|
|
|
|
*/
|
|
|
|
PRBool CanInterrupt(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set to parser state to indicate whether parsing tokens can be interrupted
|
|
|
|
* @param aCanInterrupt PR_TRUE if parser can be interrupted, PR_FALSE if it can not be interrupted.
|
|
|
|
* @update kmcclusk 5/18/98
|
|
|
|
*/
|
|
|
|
void SetCanInterrupt(PRBool aCanInterrupt);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This is called when the final chunk has been
|
|
|
|
* passed to the parser and the content sink has
|
|
|
|
* interrupted token processing. It schedules
|
|
|
|
* a ParserContinue PL_Event which will ask the parser
|
|
|
|
* to HandleParserContinueEvent when it is handled.
|
|
|
|
* @update kmcclusk6/1/2001
|
|
|
|
*/
|
|
|
|
nsresult PostContinueEvent();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fired when the continue parse event is triggered.
|
|
|
|
* @update kmcclusk 5/18/98
|
|
|
|
*/
|
|
|
|
void HandleParserContinueEvent(void);
|
|
|
|
|
2004-11-02 22:52:32 +03:00
|
|
|
/**
|
|
|
|
* Called by top-level scanners when data from necko is added to
|
|
|
|
* the scanner.
|
|
|
|
*/
|
|
|
|
nsresult DataAdded(const nsSubstring& aData);
|
|
|
|
|
|
|
|
static nsCOMArray<nsIUnicharStreamListener> *sParserDataListeners;
|
|
|
|
|
1998-05-12 04:59:32 +04:00
|
|
|
protected:
|
|
|
|
|
|
|
|
/**
|
1998-05-22 00:38:32 +04:00
|
|
|
*
|
|
|
|
* @update gess5/18/98
|
|
|
|
* @param
|
|
|
|
* @return
|
1998-05-12 04:59:32 +04:00
|
|
|
*/
|
2000-03-11 11:08:24 +03:00
|
|
|
nsresult WillBuildModel(nsString& aFilename);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
/**
|
1998-05-22 00:38:32 +04:00
|
|
|
*
|
|
|
|
* @update gess5/18/98
|
|
|
|
* @param
|
|
|
|
* @return
|
1998-05-12 04:59:32 +04:00
|
|
|
*/
|
1999-01-09 04:09:02 +03:00
|
|
|
nsresult DidBuildModel(nsresult anErrorCode);
|
1998-07-30 03:43:20 +04:00
|
|
|
|
1998-06-18 03:13:28 +04:00
|
|
|
private:
|
1998-05-12 04:59:32 +04:00
|
|
|
|
1998-06-18 03:13:28 +04:00
|
|
|
/*******************************************
|
|
|
|
These are the tokenization methods...
|
|
|
|
*******************************************/
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
/**
|
1998-06-18 03:13:28 +04:00
|
|
|
* Part of the code sandwich, this gets called right before
|
|
|
|
* the tokenization process begins. The main reason for
|
|
|
|
* this call is to allow the delegate to do initialization.
|
|
|
|
*
|
|
|
|
* @update gess 3/25/98
|
|
|
|
* @param
|
|
|
|
* @return TRUE if it's ok to proceed
|
1998-05-12 04:59:32 +04:00
|
|
|
*/
|
1999-07-15 12:23:37 +04:00
|
|
|
PRBool WillTokenize(PRBool aIsFinalChunk = PR_FALSE);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
1998-07-14 01:13:09 +04:00
|
|
|
|
1998-05-12 04:59:32 +04:00
|
|
|
/**
|
1998-06-18 03:13:28 +04:00
|
|
|
* This is the primary control routine. It iteratively
|
|
|
|
* consumes tokens until an error occurs or you run out
|
|
|
|
* of data.
|
|
|
|
*
|
|
|
|
* @update gess 3/25/98
|
|
|
|
* @return error code
|
1998-05-12 04:59:32 +04:00
|
|
|
*/
|
1999-07-15 12:23:37 +04:00
|
|
|
nsresult Tokenize(PRBool aIsFinalChunk = PR_FALSE);
|
1998-05-12 04:59:32 +04:00
|
|
|
|
|
|
|
/**
|
1998-06-18 03:13:28 +04:00
|
|
|
* This is the tail-end of the code sandwich for the
|
|
|
|
* tokenization process. It gets called once tokenziation
|
|
|
|
* has completed.
|
|
|
|
*
|
|
|
|
* @update gess 3/25/98
|
|
|
|
* @param
|
|
|
|
* @return TRUE if all went well
|
1998-05-12 04:59:32 +04:00
|
|
|
*/
|
1999-07-15 12:23:37 +04:00
|
|
|
PRBool DidTokenize(PRBool aIsFinalChunk = PR_FALSE);
|
2001-06-21 06:06:23 +04:00
|
|
|
|
|
|
|
|
1998-05-15 02:19:08 +04:00
|
|
|
protected:
|
1998-05-12 04:59:32 +04:00
|
|
|
//*********************************************
|
|
|
|
// And now, some data members...
|
|
|
|
//*********************************************
|
1998-11-21 10:48:49 +03:00
|
|
|
|
2002-01-09 04:37:50 +03:00
|
|
|
|
2003-04-09 01:23:34 +04:00
|
|
|
nsCOMPtr<nsIEventQueue> mEventQueue;
|
|
|
|
CParserContext* mParserContext;
|
|
|
|
nsCOMPtr<nsIRequestObserver> mObserver;
|
|
|
|
nsCOMPtr<nsIContentSink> mSink;
|
2001-06-21 06:06:23 +04:00
|
|
|
|
2003-04-09 01:23:34 +04:00
|
|
|
nsCOMPtr<nsIParserFilter> mParserFilter;
|
|
|
|
nsTokenAllocator mTokenAllocator;
|
2002-01-09 04:37:50 +03:00
|
|
|
|
2000-03-25 06:35:50 +03:00
|
|
|
eParserCommands mCommand;
|
2002-01-09 04:37:50 +03:00
|
|
|
nsresult mInternalState;
|
1998-12-11 20:02:37 +03:00
|
|
|
PRInt32 mStreamStatus;
|
2002-01-09 04:37:50 +03:00
|
|
|
PRInt32 mCharsetSource;
|
2002-02-15 02:45:20 +03:00
|
|
|
|
|
|
|
PRUint16 mFlags;
|
2002-01-09 04:37:50 +03:00
|
|
|
|
1999-02-01 07:24:37 +03:00
|
|
|
nsString mUnusedInput;
|
2003-06-17 20:40:34 +04:00
|
|
|
nsCString mCharset;
|
2004-07-18 01:45:37 +04:00
|
|
|
nsCString mCommandStr;
|
2002-02-15 02:45:20 +03:00
|
|
|
|
|
|
|
|
2001-06-21 06:06:23 +04:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
1999-11-12 00:35:34 +03:00
|
|
|
MOZ_TIMER_DECLARE(mParseTime)
|
|
|
|
MOZ_TIMER_DECLARE(mDTDTime)
|
|
|
|
MOZ_TIMER_DECLARE(mTokenizeTime)
|
1998-04-14 00:24:54 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|