зеркало из https://github.com/mozilla/pjs.git
XPCOM'ing the parser. Use repository to get a parser now.
This commit is contained in:
Родитель
49a5ed2701
Коммит
5b4bd4898e
|
@ -40,6 +40,8 @@
|
||||||
#include "nsIScriptGlobalObject.h"
|
#include "nsIScriptGlobalObject.h"
|
||||||
#include "nsContentList.h"
|
#include "nsContentList.h"
|
||||||
#include "nsINetService.h"
|
#include "nsINetService.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
//#define rickgdebug 1
|
//#define rickgdebug 1
|
||||||
#ifdef rickgdebug
|
#ifdef rickgdebug
|
||||||
|
@ -142,7 +144,14 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
|
||||||
mDocumentURL = aURL;
|
mDocumentURL = aURL;
|
||||||
NS_ADDREF(aURL);
|
NS_ADDREF(aURL);
|
||||||
|
|
||||||
rv = NS_NewParser(&mParser);
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&mParser);
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
if (NS_OK == rv) {
|
||||||
nsIHTMLContentSink* sink;
|
nsIHTMLContentSink* sink;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include "nsIURL.h"
|
#include "nsIURL.h"
|
||||||
#include "nsIStreamListener.h"
|
#include "nsIStreamListener.h"
|
||||||
#include "nsIDTDDebug.h"
|
#include "nsIDTDDebug.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
static NS_DEFINE_IID(kIRobotSinkObserverIID, NS_IROBOTSINKOBSERVER_IID);
|
static NS_DEFINE_IID(kIRobotSinkObserverIID, NS_IROBOTSINKOBSERVER_IID);
|
||||||
|
|
||||||
|
@ -210,7 +212,15 @@ extern "C" NS_EXPORT int DebugRobot(
|
||||||
delete urlName;
|
delete urlName;
|
||||||
|
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
rv = NS_NewParser(&parser);
|
|
||||||
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
if (NS_OK != rv) {
|
if (NS_OK != rv) {
|
||||||
printf("can't make parser\n");
|
printf("can't make parser\n");
|
||||||
NS_RELEASE(myObserver);
|
NS_RELEASE(myObserver);
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
#include "nsVoidArray.h"
|
#include "nsVoidArray.h"
|
||||||
#include "nsIWebShell.h"
|
#include "nsIWebShell.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define PARSER_DLL "raptorhtmlpars.dll"
|
||||||
|
#else
|
||||||
|
#define PARSER_DLL "libraptorhtmlpars.so"
|
||||||
|
#endif
|
||||||
|
|
||||||
extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList, nsIWebShell * ww);
|
extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList, nsIWebShell * ww);
|
||||||
|
|
||||||
|
@ -12,6 +20,10 @@ int main(int argc, char **argv)
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
gWorkList->AppendElement(new nsString(argv[i]));
|
gWorkList->AppendElement(new nsString(argv[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
NSRepository::RegisterFactory(kCParserCID, PARSER_DLL, PR_FALSE, PR_FALSE);
|
||||||
|
|
||||||
return DebugRobot(gWorkList, nsnull);
|
return DebugRobot(gWorkList, nsnull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ CPPSRCS = \
|
||||||
prstrm.cpp \
|
prstrm.cpp \
|
||||||
nsHTMLContentSinkStream.cpp \
|
nsHTMLContentSinkStream.cpp \
|
||||||
nsXIFDTD.cpp \
|
nsXIFDTD.cpp \
|
||||||
|
nsParserFactory.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXPORTS = \
|
EXPORTS = \
|
||||||
|
@ -59,6 +60,7 @@ EXPORTS = \
|
||||||
nsValidDTD.h \
|
nsValidDTD.h \
|
||||||
CRtfDTD.h \
|
CRtfDTD.h \
|
||||||
nsXIFDTD.h \
|
nsXIFDTD.h \
|
||||||
|
nsParserCIID.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXTRA_EXPORTS = \
|
EXTRA_EXPORTS = \
|
||||||
|
|
|
@ -28,6 +28,14 @@
|
||||||
#include "nsHTMLDelegate.h"
|
#include "nsHTMLDelegate.h"
|
||||||
#include "nsIParser.h"
|
#include "nsIParser.h"
|
||||||
#include "nsHTMLContentSink.h"
|
#include "nsHTMLContentSink.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define PARSER_DLL "raptorhtmlpars.dll"
|
||||||
|
#else
|
||||||
|
#define PARSER_DLL "libraptorhtmlpars.so"
|
||||||
|
#endif
|
||||||
|
|
||||||
ofstream filelist("filelist.out");
|
ofstream filelist("filelist.out");
|
||||||
|
|
||||||
|
@ -99,8 +107,15 @@ void parseFile (const char* aFilename,int size)
|
||||||
strcat(filename,".tokens");
|
strcat(filename,".tokens");
|
||||||
{
|
{
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
nsresult rv = NS_NewParser(&parser);
|
|
||||||
nsresult r=NS_NewParser(&parser);
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
nsresult rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
CHTMLContentSink theSink;
|
CHTMLContentSink theSink;
|
||||||
parser->setContentSink(&theSink);
|
parser->setContentSink(&theSink);
|
||||||
parser->parse(aFilename);
|
parser->parse(aFilename);
|
||||||
|
@ -180,6 +195,10 @@ int main(int argc, char* argv [])
|
||||||
if(argc==2)
|
if(argc==2)
|
||||||
strcpy(buffer,argv[1]);
|
strcpy(buffer,argv[1]);
|
||||||
else _getcwd(buffer,_MAX_PATH);
|
else _getcwd(buffer,_MAX_PATH);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
NSRepository::RegisterFactory(kCParserCID, PARSER_DLL, PR_FALSE, PR_FALSE);
|
||||||
|
|
||||||
walkDirectoryTree(buffer);
|
walkDirectoryTree(buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ CPPSRCS= \
|
||||||
nsWellFormed.cpp \
|
nsWellFormed.cpp \
|
||||||
nsXIFDTD.cpp \
|
nsXIFDTD.cpp \
|
||||||
prstrm.cpp \
|
prstrm.cpp \
|
||||||
|
nsParserFactory.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CPP_OBJS= \
|
CPP_OBJS= \
|
||||||
|
@ -63,6 +64,7 @@ CPP_OBJS= \
|
||||||
.\$(OBJDIR)\nsWellFormedDTD.obj \
|
.\$(OBJDIR)\nsWellFormedDTD.obj \
|
||||||
.\$(OBJDIR)\nsXIFDTD.obj \
|
.\$(OBJDIR)\nsXIFDTD.obj \
|
||||||
.\$(OBJDIR)\prstrm.obj \
|
.\$(OBJDIR)\prstrm.obj \
|
||||||
|
.\$(OBJDIR)\nsParserFactory.obj \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXPORTS= \
|
EXPORTS= \
|
||||||
|
@ -83,6 +85,7 @@ EXPORTS= \
|
||||||
COtherDTD.h \
|
COtherDTD.h \
|
||||||
nsIDTD.h \
|
nsIDTD.h \
|
||||||
nsXIFDTD.h \
|
nsXIFDTD.h \
|
||||||
|
nsParserCIID.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXTRA_EXPORTS= \
|
EXTRA_EXPORTS= \
|
||||||
|
|
|
@ -106,6 +106,4 @@ class nsIParser : public nsISupports {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,7 +48,6 @@ class nsIParserFilter : public nsISupports {
|
||||||
NS_IMETHOD ProcessTokens( /* dont know what goes here yet */ void ) = 0;
|
NS_IMETHOD ProcessTokens( /* dont know what goes here yet */ void ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern nsresult NS_NewParserFilter(nsIParserFilter** aInstancePtrResult);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,10 +36,19 @@
|
||||||
#ifndef NS_IPARSERNODE__
|
#ifndef NS_IPARSERNODE__
|
||||||
#define NS_IPARSERNODE__
|
#define NS_IPARSERNODE__
|
||||||
|
|
||||||
|
#include "nshtmlpars.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
#include "prtypes.h"
|
#include "prtypes.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include "nsDebug.h"
|
#include "nsDebug.h"
|
||||||
|
|
||||||
|
class CToken;
|
||||||
|
|
||||||
|
// 6e59f160-2717-11d2-9246-00805f8a7ab6
|
||||||
|
#define NS_IPARSER_NODE_IID \
|
||||||
|
{0x6e59f160, 0x2717, 0x11d1, \
|
||||||
|
{0x92, 0x46, 0x00, 0x80, 0x5f, 0x8a, 0x7a, 0xb6}}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parser nodes are the unit of exchange between the
|
* Parser nodes are the unit of exchange between the
|
||||||
* parser and the content sink. Nodes offer access to
|
* parser and the content sink. Nodes offer access to
|
||||||
|
@ -48,7 +57,7 @@
|
||||||
*
|
*
|
||||||
* @update gess 3/25/98
|
* @update gess 3/25/98
|
||||||
*/
|
*/
|
||||||
class nsIParserNode {
|
class nsIParserNode : public nsISupports {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -130,6 +139,10 @@ class nsIParserNode {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern NS_HTMLPARS nsresult NS_NewParserNode(nsIParserNode** aInstancePtrResult,
|
||||||
|
CToken* aToken,
|
||||||
|
PRInt32 aLineNumber);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,26 +50,6 @@ static nsString kEmptyString("unknown");
|
||||||
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
|
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is defined in nsIParser. It is used to
|
|
||||||
* cause the COM-like construction of an nsParser.
|
|
||||||
*
|
|
||||||
* @update gess 3/25/98
|
|
||||||
* @param nsIParser** ptr to newly instantiated parser
|
|
||||||
* @return NS_xxx error result
|
|
||||||
*/
|
|
||||||
NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult)
|
|
||||||
{
|
|
||||||
nsParser *it = new nsParser();
|
|
||||||
|
|
||||||
if (it == 0) {
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
return it->QueryInterface(kIParserIID, (void **) aInstancePtrResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
class CTokenDeallocator: public nsDequeFunctor{
|
class CTokenDeallocator: public nsDequeFunctor{
|
||||||
public:
|
public:
|
||||||
virtual void* operator()(void* anObject) {
|
virtual void* operator()(void* anObject) {
|
||||||
|
|
|
@ -61,11 +61,7 @@
|
||||||
#include "nsParserTypes.h"
|
#include "nsParserTypes.h"
|
||||||
#include "nsIURL.h"
|
#include "nsIURL.h"
|
||||||
#include "CParserContext.h"
|
#include "CParserContext.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
#define NS_PARSER_IID \
|
|
||||||
{0x2ce606b0, 0xbee6, 0x11d1, \
|
|
||||||
{0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}}
|
|
||||||
|
|
||||||
|
|
||||||
class IContentSink;
|
class IContentSink;
|
||||||
class nsIHTMLContentSink;
|
class nsIHTMLContentSink;
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsParserCIID_h__
|
||||||
|
#define nsParserCIID_h__
|
||||||
|
|
||||||
|
#include "nsISupports.h"
|
||||||
|
#include "nsIFactory.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
|
||||||
|
#define NS_PARSER_IID \
|
||||||
|
{0x2ce606b0, 0xbee6, 0x11d1, \
|
||||||
|
{0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}}
|
||||||
|
|
||||||
|
// XXX: This object should not be exposed outside of the parser.
|
||||||
|
// Remove when CNavDTD subclasses do not need access
|
||||||
|
#define NS_PARSER_NODE_IID \
|
||||||
|
{0x9039c670, 0x2717, 0x11d2, \
|
||||||
|
{0x92, 0x46, 0x00, 0x80, 0x5f, 0x8a, 0x7a, 0xb6}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,160 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nscore.h"
|
||||||
|
#include "nsIFactory.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#include "nsParser.h"
|
||||||
|
#include "nsParserNode.h"
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParser, NS_PARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserNode, NS_PARSER_NODE_IID);
|
||||||
|
|
||||||
|
class nsParserFactory : public nsIFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// nsISupports methods
|
||||||
|
NS_IMETHOD QueryInterface(const nsIID &aIID,
|
||||||
|
void **aResult);
|
||||||
|
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
||||||
|
NS_IMETHOD_(nsrefcnt) Release(void);
|
||||||
|
|
||||||
|
// nsIFactory methods
|
||||||
|
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult);
|
||||||
|
|
||||||
|
NS_IMETHOD LockFactory(PRBool aLock);
|
||||||
|
|
||||||
|
nsParserFactory(const nsCID &aClass);
|
||||||
|
~nsParserFactory();
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsrefcnt mRefCnt;
|
||||||
|
nsCID mClassID;
|
||||||
|
};
|
||||||
|
|
||||||
|
nsParserFactory::nsParserFactory(const nsCID &aClass)
|
||||||
|
{
|
||||||
|
mRefCnt = 0;
|
||||||
|
mClassID = aClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsParserFactory::~nsParserFactory()
|
||||||
|
{
|
||||||
|
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::QueryInterface(const nsIID &aIID,
|
||||||
|
void **aResult)
|
||||||
|
{
|
||||||
|
if (aResult == NULL) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always NULL result, in case of failure
|
||||||
|
*aResult = NULL;
|
||||||
|
|
||||||
|
if (aIID.Equals(kISupportsIID)) {
|
||||||
|
*aResult = (void *)(nsISupports*)this;
|
||||||
|
} else if (aIID.Equals(kIFactoryIID)) {
|
||||||
|
*aResult = (void *)(nsIFactory*)this;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*aResult == NULL) {
|
||||||
|
return NS_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddRef(); // Increase reference count for caller
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsrefcnt nsParserFactory::AddRef()
|
||||||
|
{
|
||||||
|
return ++mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsrefcnt nsParserFactory::Release()
|
||||||
|
{
|
||||||
|
if (--mRefCnt == 0) {
|
||||||
|
delete this;
|
||||||
|
return 0; // Don't access mRefCnt after deleting!
|
||||||
|
}
|
||||||
|
return mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult)
|
||||||
|
{
|
||||||
|
if (aResult == NULL) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aResult = NULL;
|
||||||
|
|
||||||
|
nsISupports *inst = nsnull;
|
||||||
|
|
||||||
|
if (mClassID.Equals(kCParser)) {
|
||||||
|
inst = (nsISupports *)(nsIParser *)new nsParser();
|
||||||
|
}
|
||||||
|
else if (mClassID.Equals(kCParserNode)) {
|
||||||
|
inst = (nsISupports *)(nsIParserNode *)new nsCParserNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inst == NULL) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult res = inst->QueryInterface(aIID, aResult);
|
||||||
|
|
||||||
|
if (res != NS_OK) {
|
||||||
|
// We didn't get the right interface, so clean up
|
||||||
|
delete inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::LockFactory(PRBool aLock)
|
||||||
|
{
|
||||||
|
// Not implemented in simplest case.
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the proper factory to the caller
|
||||||
|
extern "C" NS_EXPORT nsresult NSGetFactory(const nsCID &aClass, nsIFactory **aFactory)
|
||||||
|
{
|
||||||
|
if (nsnull == aFactory) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aFactory = new nsParserFactory(aClass);
|
||||||
|
|
||||||
|
if (nsnull == aFactory) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (*aFactory)->QueryInterface(kIFactoryIID, (void**)aFactory);
|
||||||
|
}
|
||||||
|
|
|
@ -20,9 +20,33 @@
|
||||||
#include "nsParserNode.h"
|
#include "nsParserNode.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "nsHTMLTokens.h"
|
#include "nsHTMLTokens.h"
|
||||||
|
#include "nshtmlpars.h"
|
||||||
|
|
||||||
const nsAutoString nsCParserNode::mEmptyString("");
|
const nsAutoString nsCParserNode::mEmptyString("");
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kClassIID, NS_PARSER_NODE_IID);
|
||||||
|
static NS_DEFINE_IID(kIParserNodeIID, NS_IPARSER_NODE_IID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is defined in nsIParser. It is used to
|
||||||
|
* cause the COM-like construction of an nsParser.
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param nsIParser** ptr to newly instantiated parser
|
||||||
|
* @return NS_xxx error result
|
||||||
|
*/
|
||||||
|
NS_HTMLPARS nsresult NS_NewParserNode(nsIParserNode** aInstancePtrResult,CToken* aToken,PRInt32 aLineNumber)
|
||||||
|
{
|
||||||
|
nsCParserNode *it = new nsCParserNode(aToken,aLineNumber);
|
||||||
|
|
||||||
|
if (it == 0) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return it->QueryInterface(kIParserNodeIID, (void **) aInstancePtrResult);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
*
|
*
|
||||||
|
@ -31,7 +55,7 @@ const nsAutoString nsCParserNode::mEmptyString("");
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode() {
|
nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode() {
|
||||||
NS_PRECONDITION(0!=aToken, "Null Token");
|
NS_INIT_REFCNT();
|
||||||
mAttributeCount=0;
|
mAttributeCount=0;
|
||||||
mLineNumber=aLineNumber;
|
mLineNumber=aLineNumber;
|
||||||
mToken=aToken;
|
mToken=aToken;
|
||||||
|
@ -49,6 +73,57 @@ nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode(
|
||||||
nsCParserNode::~nsCParserNode() {
|
nsCParserNode::~nsCParserNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMPL_ADDREF(nsCParserNode)
|
||||||
|
NS_IMPL_RELEASE(nsCParserNode)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
nsresult nsCParserNode::Init(CToken* aToken,PRInt32 aLineNumber)
|
||||||
|
{
|
||||||
|
mLineNumber=aLineNumber;
|
||||||
|
mToken=aToken;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method gets called as part of our COM-like interfaces.
|
||||||
|
* Its purpose is to create an interface to parser object
|
||||||
|
* of some type.
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param nsIID id of object to discover
|
||||||
|
* @param aInstancePtr ptr to newly discovered interface
|
||||||
|
* @return NS_xxx result code
|
||||||
|
*/
|
||||||
|
nsresult nsCParserNode::QueryInterface(const nsIID& aIID, void** aInstancePtr)
|
||||||
|
{
|
||||||
|
if (NULL == aInstancePtr) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aIID.Equals(kISupportsIID)) { //do IUnknown...
|
||||||
|
*aInstancePtr = (nsIParserNode*)(this);
|
||||||
|
}
|
||||||
|
else if(aIID.Equals(kIParserNodeIID)) { //do IParser base class...
|
||||||
|
*aInstancePtr = (nsIParserNode*)(this);
|
||||||
|
}
|
||||||
|
else if(aIID.Equals(kClassIID)) { //do this class...
|
||||||
|
*aInstancePtr = (nsCParserNode*)(this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*aInstancePtr=0;
|
||||||
|
return NS_NOINTERFACE;
|
||||||
|
}
|
||||||
|
((nsISupports*) *aInstancePtr)->AddRef();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causes the given attribute to be added to internal
|
* Causes the given attribute to be added to internal
|
||||||
|
|
|
@ -39,20 +39,22 @@
|
||||||
#include "nsIParserNode.h"
|
#include "nsIParserNode.h"
|
||||||
#include "nsToken.h"
|
#include "nsToken.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
//class nsParser;
|
|
||||||
|
|
||||||
class nsCParserNode : public nsIParserNode {
|
class nsCParserNode : public nsIParserNode {
|
||||||
enum {eMaxAttr=20};
|
enum {eMaxAttr=20};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
* @update gess5/11/98
|
* @update gess5/11/98
|
||||||
* @param aToken is the token this node "refers" to
|
* @param aToken is the token this node "refers" to
|
||||||
*/
|
*/
|
||||||
nsCParserNode(CToken* aToken,PRInt32 aLineNumber=1);
|
nsCParserNode(CToken* aToken=nsnull,PRInt32 aLineNumber=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destructor
|
* Destructor
|
||||||
|
@ -60,6 +62,12 @@ class nsCParserNode : public nsIParserNode {
|
||||||
*/
|
*/
|
||||||
virtual ~nsCParserNode();
|
virtual ~nsCParserNode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init
|
||||||
|
* @update gess5/11/98
|
||||||
|
*/
|
||||||
|
virtual nsresult Init(CToken* aToken=nsnull,PRInt32 aLineNumber=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the name of the node
|
* Retrieve the name of the node
|
||||||
* @update gess5/11/98
|
* @update gess5/11/98
|
||||||
|
|
|
@ -40,6 +40,8 @@
|
||||||
#include "nsIScriptGlobalObject.h"
|
#include "nsIScriptGlobalObject.h"
|
||||||
#include "nsContentList.h"
|
#include "nsContentList.h"
|
||||||
#include "nsINetService.h"
|
#include "nsINetService.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
//#define rickgdebug 1
|
//#define rickgdebug 1
|
||||||
#ifdef rickgdebug
|
#ifdef rickgdebug
|
||||||
|
@ -142,7 +144,14 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
|
||||||
mDocumentURL = aURL;
|
mDocumentURL = aURL;
|
||||||
NS_ADDREF(aURL);
|
NS_ADDREF(aURL);
|
||||||
|
|
||||||
rv = NS_NewParser(&mParser);
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&mParser);
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
if (NS_OK == rv) {
|
||||||
nsIHTMLContentSink* sink;
|
nsIHTMLContentSink* sink;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include "nsIURL.h"
|
#include "nsIURL.h"
|
||||||
#include "nsIStreamListener.h"
|
#include "nsIStreamListener.h"
|
||||||
#include "nsIDTDDebug.h"
|
#include "nsIDTDDebug.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
static NS_DEFINE_IID(kIRobotSinkObserverIID, NS_IROBOTSINKOBSERVER_IID);
|
static NS_DEFINE_IID(kIRobotSinkObserverIID, NS_IROBOTSINKOBSERVER_IID);
|
||||||
|
|
||||||
|
@ -210,7 +212,15 @@ extern "C" NS_EXPORT int DebugRobot(
|
||||||
delete urlName;
|
delete urlName;
|
||||||
|
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
rv = NS_NewParser(&parser);
|
|
||||||
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
if (NS_OK != rv) {
|
if (NS_OK != rv) {
|
||||||
printf("can't make parser\n");
|
printf("can't make parser\n");
|
||||||
NS_RELEASE(myObserver);
|
NS_RELEASE(myObserver);
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
#include "nsVoidArray.h"
|
#include "nsVoidArray.h"
|
||||||
#include "nsIWebShell.h"
|
#include "nsIWebShell.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define PARSER_DLL "raptorhtmlpars.dll"
|
||||||
|
#else
|
||||||
|
#define PARSER_DLL "libraptorhtmlpars.so"
|
||||||
|
#endif
|
||||||
|
|
||||||
extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList, nsIWebShell * ww);
|
extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList, nsIWebShell * ww);
|
||||||
|
|
||||||
|
@ -12,6 +20,10 @@ int main(int argc, char **argv)
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
gWorkList->AppendElement(new nsString(argv[i]));
|
gWorkList->AppendElement(new nsString(argv[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
NSRepository::RegisterFactory(kCParserCID, PARSER_DLL, PR_FALSE, PR_FALSE);
|
||||||
|
|
||||||
return DebugRobot(gWorkList, nsnull);
|
return DebugRobot(gWorkList, nsnull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ CPPSRCS = \
|
||||||
prstrm.cpp \
|
prstrm.cpp \
|
||||||
nsHTMLContentSinkStream.cpp \
|
nsHTMLContentSinkStream.cpp \
|
||||||
nsXIFDTD.cpp \
|
nsXIFDTD.cpp \
|
||||||
|
nsParserFactory.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXPORTS = \
|
EXPORTS = \
|
||||||
|
@ -59,6 +60,7 @@ EXPORTS = \
|
||||||
nsValidDTD.h \
|
nsValidDTD.h \
|
||||||
CRtfDTD.h \
|
CRtfDTD.h \
|
||||||
nsXIFDTD.h \
|
nsXIFDTD.h \
|
||||||
|
nsParserCIID.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXTRA_EXPORTS = \
|
EXTRA_EXPORTS = \
|
||||||
|
|
|
@ -28,6 +28,14 @@
|
||||||
#include "nsHTMLDelegate.h"
|
#include "nsHTMLDelegate.h"
|
||||||
#include "nsIParser.h"
|
#include "nsIParser.h"
|
||||||
#include "nsHTMLContentSink.h"
|
#include "nsHTMLContentSink.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define PARSER_DLL "raptorhtmlpars.dll"
|
||||||
|
#else
|
||||||
|
#define PARSER_DLL "libraptorhtmlpars.so"
|
||||||
|
#endif
|
||||||
|
|
||||||
ofstream filelist("filelist.out");
|
ofstream filelist("filelist.out");
|
||||||
|
|
||||||
|
@ -99,8 +107,15 @@ void parseFile (const char* aFilename,int size)
|
||||||
strcat(filename,".tokens");
|
strcat(filename,".tokens");
|
||||||
{
|
{
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
nsresult rv = NS_NewParser(&parser);
|
|
||||||
nsresult r=NS_NewParser(&parser);
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
nsresult rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
CHTMLContentSink theSink;
|
CHTMLContentSink theSink;
|
||||||
parser->setContentSink(&theSink);
|
parser->setContentSink(&theSink);
|
||||||
parser->parse(aFilename);
|
parser->parse(aFilename);
|
||||||
|
@ -180,6 +195,10 @@ int main(int argc, char* argv [])
|
||||||
if(argc==2)
|
if(argc==2)
|
||||||
strcpy(buffer,argv[1]);
|
strcpy(buffer,argv[1]);
|
||||||
else _getcwd(buffer,_MAX_PATH);
|
else _getcwd(buffer,_MAX_PATH);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
NSRepository::RegisterFactory(kCParserCID, PARSER_DLL, PR_FALSE, PR_FALSE);
|
||||||
|
|
||||||
walkDirectoryTree(buffer);
|
walkDirectoryTree(buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ CPPSRCS= \
|
||||||
nsWellFormed.cpp \
|
nsWellFormed.cpp \
|
||||||
nsXIFDTD.cpp \
|
nsXIFDTD.cpp \
|
||||||
prstrm.cpp \
|
prstrm.cpp \
|
||||||
|
nsParserFactory.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CPP_OBJS= \
|
CPP_OBJS= \
|
||||||
|
@ -63,6 +64,7 @@ CPP_OBJS= \
|
||||||
.\$(OBJDIR)\nsWellFormedDTD.obj \
|
.\$(OBJDIR)\nsWellFormedDTD.obj \
|
||||||
.\$(OBJDIR)\nsXIFDTD.obj \
|
.\$(OBJDIR)\nsXIFDTD.obj \
|
||||||
.\$(OBJDIR)\prstrm.obj \
|
.\$(OBJDIR)\prstrm.obj \
|
||||||
|
.\$(OBJDIR)\nsParserFactory.obj \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXPORTS= \
|
EXPORTS= \
|
||||||
|
@ -83,6 +85,7 @@ EXPORTS= \
|
||||||
COtherDTD.h \
|
COtherDTD.h \
|
||||||
nsIDTD.h \
|
nsIDTD.h \
|
||||||
nsXIFDTD.h \
|
nsXIFDTD.h \
|
||||||
|
nsParserCIID.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXTRA_EXPORTS= \
|
EXTRA_EXPORTS= \
|
||||||
|
|
|
@ -106,6 +106,4 @@ class nsIParser : public nsISupports {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,7 +48,6 @@ class nsIParserFilter : public nsISupports {
|
||||||
NS_IMETHOD ProcessTokens( /* dont know what goes here yet */ void ) = 0;
|
NS_IMETHOD ProcessTokens( /* dont know what goes here yet */ void ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern nsresult NS_NewParserFilter(nsIParserFilter** aInstancePtrResult);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,10 +36,19 @@
|
||||||
#ifndef NS_IPARSERNODE__
|
#ifndef NS_IPARSERNODE__
|
||||||
#define NS_IPARSERNODE__
|
#define NS_IPARSERNODE__
|
||||||
|
|
||||||
|
#include "nshtmlpars.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
#include "prtypes.h"
|
#include "prtypes.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include "nsDebug.h"
|
#include "nsDebug.h"
|
||||||
|
|
||||||
|
class CToken;
|
||||||
|
|
||||||
|
// 6e59f160-2717-11d2-9246-00805f8a7ab6
|
||||||
|
#define NS_IPARSER_NODE_IID \
|
||||||
|
{0x6e59f160, 0x2717, 0x11d1, \
|
||||||
|
{0x92, 0x46, 0x00, 0x80, 0x5f, 0x8a, 0x7a, 0xb6}}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parser nodes are the unit of exchange between the
|
* Parser nodes are the unit of exchange between the
|
||||||
* parser and the content sink. Nodes offer access to
|
* parser and the content sink. Nodes offer access to
|
||||||
|
@ -48,7 +57,7 @@
|
||||||
*
|
*
|
||||||
* @update gess 3/25/98
|
* @update gess 3/25/98
|
||||||
*/
|
*/
|
||||||
class nsIParserNode {
|
class nsIParserNode : public nsISupports {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -130,6 +139,10 @@ class nsIParserNode {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern NS_HTMLPARS nsresult NS_NewParserNode(nsIParserNode** aInstancePtrResult,
|
||||||
|
CToken* aToken,
|
||||||
|
PRInt32 aLineNumber);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,26 +50,6 @@ static nsString kEmptyString("unknown");
|
||||||
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
|
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is defined in nsIParser. It is used to
|
|
||||||
* cause the COM-like construction of an nsParser.
|
|
||||||
*
|
|
||||||
* @update gess 3/25/98
|
|
||||||
* @param nsIParser** ptr to newly instantiated parser
|
|
||||||
* @return NS_xxx error result
|
|
||||||
*/
|
|
||||||
NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult)
|
|
||||||
{
|
|
||||||
nsParser *it = new nsParser();
|
|
||||||
|
|
||||||
if (it == 0) {
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
return it->QueryInterface(kIParserIID, (void **) aInstancePtrResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
class CTokenDeallocator: public nsDequeFunctor{
|
class CTokenDeallocator: public nsDequeFunctor{
|
||||||
public:
|
public:
|
||||||
virtual void* operator()(void* anObject) {
|
virtual void* operator()(void* anObject) {
|
||||||
|
|
|
@ -61,11 +61,7 @@
|
||||||
#include "nsParserTypes.h"
|
#include "nsParserTypes.h"
|
||||||
#include "nsIURL.h"
|
#include "nsIURL.h"
|
||||||
#include "CParserContext.h"
|
#include "CParserContext.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
#define NS_PARSER_IID \
|
|
||||||
{0x2ce606b0, 0xbee6, 0x11d1, \
|
|
||||||
{0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}}
|
|
||||||
|
|
||||||
|
|
||||||
class IContentSink;
|
class IContentSink;
|
||||||
class nsIHTMLContentSink;
|
class nsIHTMLContentSink;
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsParserCIID_h__
|
||||||
|
#define nsParserCIID_h__
|
||||||
|
|
||||||
|
#include "nsISupports.h"
|
||||||
|
#include "nsIFactory.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
|
||||||
|
#define NS_PARSER_IID \
|
||||||
|
{0x2ce606b0, 0xbee6, 0x11d1, \
|
||||||
|
{0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}}
|
||||||
|
|
||||||
|
// XXX: This object should not be exposed outside of the parser.
|
||||||
|
// Remove when CNavDTD subclasses do not need access
|
||||||
|
#define NS_PARSER_NODE_IID \
|
||||||
|
{0x9039c670, 0x2717, 0x11d2, \
|
||||||
|
{0x92, 0x46, 0x00, 0x80, 0x5f, 0x8a, 0x7a, 0xb6}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,160 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nscore.h"
|
||||||
|
#include "nsIFactory.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
|
#include "nsParser.h"
|
||||||
|
#include "nsParserNode.h"
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kCParser, NS_PARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserNode, NS_PARSER_NODE_IID);
|
||||||
|
|
||||||
|
class nsParserFactory : public nsIFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// nsISupports methods
|
||||||
|
NS_IMETHOD QueryInterface(const nsIID &aIID,
|
||||||
|
void **aResult);
|
||||||
|
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
||||||
|
NS_IMETHOD_(nsrefcnt) Release(void);
|
||||||
|
|
||||||
|
// nsIFactory methods
|
||||||
|
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult);
|
||||||
|
|
||||||
|
NS_IMETHOD LockFactory(PRBool aLock);
|
||||||
|
|
||||||
|
nsParserFactory(const nsCID &aClass);
|
||||||
|
~nsParserFactory();
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsrefcnt mRefCnt;
|
||||||
|
nsCID mClassID;
|
||||||
|
};
|
||||||
|
|
||||||
|
nsParserFactory::nsParserFactory(const nsCID &aClass)
|
||||||
|
{
|
||||||
|
mRefCnt = 0;
|
||||||
|
mClassID = aClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsParserFactory::~nsParserFactory()
|
||||||
|
{
|
||||||
|
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::QueryInterface(const nsIID &aIID,
|
||||||
|
void **aResult)
|
||||||
|
{
|
||||||
|
if (aResult == NULL) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always NULL result, in case of failure
|
||||||
|
*aResult = NULL;
|
||||||
|
|
||||||
|
if (aIID.Equals(kISupportsIID)) {
|
||||||
|
*aResult = (void *)(nsISupports*)this;
|
||||||
|
} else if (aIID.Equals(kIFactoryIID)) {
|
||||||
|
*aResult = (void *)(nsIFactory*)this;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*aResult == NULL) {
|
||||||
|
return NS_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddRef(); // Increase reference count for caller
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsrefcnt nsParserFactory::AddRef()
|
||||||
|
{
|
||||||
|
return ++mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsrefcnt nsParserFactory::Release()
|
||||||
|
{
|
||||||
|
if (--mRefCnt == 0) {
|
||||||
|
delete this;
|
||||||
|
return 0; // Don't access mRefCnt after deleting!
|
||||||
|
}
|
||||||
|
return mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult)
|
||||||
|
{
|
||||||
|
if (aResult == NULL) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aResult = NULL;
|
||||||
|
|
||||||
|
nsISupports *inst = nsnull;
|
||||||
|
|
||||||
|
if (mClassID.Equals(kCParser)) {
|
||||||
|
inst = (nsISupports *)(nsIParser *)new nsParser();
|
||||||
|
}
|
||||||
|
else if (mClassID.Equals(kCParserNode)) {
|
||||||
|
inst = (nsISupports *)(nsIParserNode *)new nsCParserNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inst == NULL) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult res = inst->QueryInterface(aIID, aResult);
|
||||||
|
|
||||||
|
if (res != NS_OK) {
|
||||||
|
// We didn't get the right interface, so clean up
|
||||||
|
delete inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsParserFactory::LockFactory(PRBool aLock)
|
||||||
|
{
|
||||||
|
// Not implemented in simplest case.
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the proper factory to the caller
|
||||||
|
extern "C" NS_EXPORT nsresult NSGetFactory(const nsCID &aClass, nsIFactory **aFactory)
|
||||||
|
{
|
||||||
|
if (nsnull == aFactory) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aFactory = new nsParserFactory(aClass);
|
||||||
|
|
||||||
|
if (nsnull == aFactory) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (*aFactory)->QueryInterface(kIFactoryIID, (void**)aFactory);
|
||||||
|
}
|
||||||
|
|
|
@ -20,9 +20,33 @@
|
||||||
#include "nsParserNode.h"
|
#include "nsParserNode.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "nsHTMLTokens.h"
|
#include "nsHTMLTokens.h"
|
||||||
|
#include "nshtmlpars.h"
|
||||||
|
|
||||||
const nsAutoString nsCParserNode::mEmptyString("");
|
const nsAutoString nsCParserNode::mEmptyString("");
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kClassIID, NS_PARSER_NODE_IID);
|
||||||
|
static NS_DEFINE_IID(kIParserNodeIID, NS_IPARSER_NODE_IID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is defined in nsIParser. It is used to
|
||||||
|
* cause the COM-like construction of an nsParser.
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param nsIParser** ptr to newly instantiated parser
|
||||||
|
* @return NS_xxx error result
|
||||||
|
*/
|
||||||
|
NS_HTMLPARS nsresult NS_NewParserNode(nsIParserNode** aInstancePtrResult,CToken* aToken,PRInt32 aLineNumber)
|
||||||
|
{
|
||||||
|
nsCParserNode *it = new nsCParserNode(aToken,aLineNumber);
|
||||||
|
|
||||||
|
if (it == 0) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return it->QueryInterface(kIParserNodeIID, (void **) aInstancePtrResult);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
*
|
*
|
||||||
|
@ -31,7 +55,7 @@ const nsAutoString nsCParserNode::mEmptyString("");
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode() {
|
nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode() {
|
||||||
NS_PRECONDITION(0!=aToken, "Null Token");
|
NS_INIT_REFCNT();
|
||||||
mAttributeCount=0;
|
mAttributeCount=0;
|
||||||
mLineNumber=aLineNumber;
|
mLineNumber=aLineNumber;
|
||||||
mToken=aToken;
|
mToken=aToken;
|
||||||
|
@ -49,6 +73,57 @@ nsCParserNode::nsCParserNode(CToken* aToken,PRInt32 aLineNumber): nsIParserNode(
|
||||||
nsCParserNode::~nsCParserNode() {
|
nsCParserNode::~nsCParserNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMPL_ADDREF(nsCParserNode)
|
||||||
|
NS_IMPL_RELEASE(nsCParserNode)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
nsresult nsCParserNode::Init(CToken* aToken,PRInt32 aLineNumber)
|
||||||
|
{
|
||||||
|
mLineNumber=aLineNumber;
|
||||||
|
mToken=aToken;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method gets called as part of our COM-like interfaces.
|
||||||
|
* Its purpose is to create an interface to parser object
|
||||||
|
* of some type.
|
||||||
|
*
|
||||||
|
* @update gess 3/25/98
|
||||||
|
* @param nsIID id of object to discover
|
||||||
|
* @param aInstancePtr ptr to newly discovered interface
|
||||||
|
* @return NS_xxx result code
|
||||||
|
*/
|
||||||
|
nsresult nsCParserNode::QueryInterface(const nsIID& aIID, void** aInstancePtr)
|
||||||
|
{
|
||||||
|
if (NULL == aInstancePtr) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aIID.Equals(kISupportsIID)) { //do IUnknown...
|
||||||
|
*aInstancePtr = (nsIParserNode*)(this);
|
||||||
|
}
|
||||||
|
else if(aIID.Equals(kIParserNodeIID)) { //do IParser base class...
|
||||||
|
*aInstancePtr = (nsIParserNode*)(this);
|
||||||
|
}
|
||||||
|
else if(aIID.Equals(kClassIID)) { //do this class...
|
||||||
|
*aInstancePtr = (nsCParserNode*)(this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*aInstancePtr=0;
|
||||||
|
return NS_NOINTERFACE;
|
||||||
|
}
|
||||||
|
((nsISupports*) *aInstancePtr)->AddRef();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causes the given attribute to be added to internal
|
* Causes the given attribute to be added to internal
|
||||||
|
|
|
@ -39,20 +39,22 @@
|
||||||
#include "nsIParserNode.h"
|
#include "nsIParserNode.h"
|
||||||
#include "nsToken.h"
|
#include "nsToken.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
//class nsParser;
|
|
||||||
|
|
||||||
class nsCParserNode : public nsIParserNode {
|
class nsCParserNode : public nsIParserNode {
|
||||||
enum {eMaxAttr=20};
|
enum {eMaxAttr=20};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
* @update gess5/11/98
|
* @update gess5/11/98
|
||||||
* @param aToken is the token this node "refers" to
|
* @param aToken is the token this node "refers" to
|
||||||
*/
|
*/
|
||||||
nsCParserNode(CToken* aToken,PRInt32 aLineNumber=1);
|
nsCParserNode(CToken* aToken=nsnull,PRInt32 aLineNumber=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destructor
|
* Destructor
|
||||||
|
@ -60,6 +62,12 @@ class nsCParserNode : public nsIParserNode {
|
||||||
*/
|
*/
|
||||||
virtual ~nsCParserNode();
|
virtual ~nsCParserNode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init
|
||||||
|
* @update gess5/11/98
|
||||||
|
*/
|
||||||
|
virtual nsresult Init(CToken* aToken=nsnull,PRInt32 aLineNumber=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the name of the node
|
* Retrieve the name of the node
|
||||||
* @update gess5/11/98
|
* @update gess5/11/98
|
||||||
|
|
|
@ -40,6 +40,8 @@
|
||||||
#include "nsWidgetsCID.h"
|
#include "nsWidgetsCID.h"
|
||||||
#include "nsViewerApp.h"
|
#include "nsViewerApp.h"
|
||||||
#include "prprf.h"
|
#include "prprf.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
#include "resources.h"
|
#include "resources.h"
|
||||||
|
|
||||||
|
@ -1295,7 +1297,15 @@ nsBrowserWindow::DoDebugSave()
|
||||||
doc->CreateXIF(buffer,PR_FALSE);
|
doc->CreateXIF(buffer,PR_FALSE);
|
||||||
|
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
nsresult rv = NS_NewParser(&parser);
|
|
||||||
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
nsresult rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
if (NS_OK == rv) {
|
||||||
nsIHTMLContentSink* sink = nsnull;
|
nsIHTMLContentSink* sink = nsnull;
|
||||||
|
|
||||||
|
@ -1346,7 +1356,15 @@ nsBrowserWindow::DoCopy()
|
||||||
doc->CreateXIF(buffer,PR_TRUE);
|
doc->CreateXIF(buffer,PR_TRUE);
|
||||||
|
|
||||||
nsIParser* parser;
|
nsIParser* parser;
|
||||||
nsresult rv = NS_NewParser(&parser);
|
|
||||||
|
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
|
nsresult rv = NSRepository::CreateInstance(kCParserCID,
|
||||||
|
nsnull,
|
||||||
|
kCParserIID,
|
||||||
|
(void **)&parser);
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
if (NS_OK == rv) {
|
||||||
nsIHTMLContentSink* sink = nsnull;
|
nsIHTMLContentSink* sink = nsnull;
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
#include "nsIDocumentLoader.h"
|
#include "nsIDocumentLoader.h"
|
||||||
#include "nsIThrobber.h"
|
#include "nsIThrobber.h"
|
||||||
|
|
||||||
|
#include "nsParserCIID.h"
|
||||||
|
|
||||||
#ifdef XP_PC
|
#ifdef XP_PC
|
||||||
#define WIDGET_DLL "raptorwidget.dll"
|
#define WIDGET_DLL "raptorwidget.dll"
|
||||||
#define GFXWIN_DLL "raptorgfxwin.dll"
|
#define GFXWIN_DLL "raptorgfxwin.dll"
|
||||||
|
@ -42,6 +44,7 @@
|
||||||
#define WEB_DLL "raptorweb.dll"
|
#define WEB_DLL "raptorweb.dll"
|
||||||
#define PLUGIN_DLL "raptorplugin.dll"
|
#define PLUGIN_DLL "raptorplugin.dll"
|
||||||
#define PREF_DLL "xppref32.dll"
|
#define PREF_DLL "xppref32.dll"
|
||||||
|
#define PARSER_DLL "raptorhtmlpars.dll"
|
||||||
#else
|
#else
|
||||||
#define WIDGET_DLL "libwidgetunix.so"
|
#define WIDGET_DLL "libwidgetunix.so"
|
||||||
#define GFXWIN_DLL "libgfxunix.so"
|
#define GFXWIN_DLL "libgfxunix.so"
|
||||||
|
@ -49,6 +52,7 @@
|
||||||
#define WEB_DLL "libraptorwebwidget.so"
|
#define WEB_DLL "libraptorwebwidget.so"
|
||||||
#define PLUGIN_DLL "raptorplugin.so"
|
#define PLUGIN_DLL "raptorplugin.so"
|
||||||
#define PREF_DLL "libpref.so"
|
#define PREF_DLL "libpref.so"
|
||||||
|
#define PARSER_DLL "libraptorhtmlpars.so"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Class ID's
|
// Class ID's
|
||||||
|
@ -78,6 +82,7 @@ static NS_DEFINE_IID(kWebShellCID, NS_WEB_SHELL_CID);
|
||||||
static NS_DEFINE_IID(kCDocumentLoaderCID, NS_DOCUMENTLOADER_CID);
|
static NS_DEFINE_IID(kCDocumentLoaderCID, NS_DOCUMENTLOADER_CID);
|
||||||
static NS_DEFINE_IID(kThrobberCID, NS_THROBBER_CID);
|
static NS_DEFINE_IID(kThrobberCID, NS_THROBBER_CID);
|
||||||
static NS_DEFINE_IID(kCPluginHostCID, NS_PLUGIN_HOST_CID);
|
static NS_DEFINE_IID(kCPluginHostCID, NS_PLUGIN_HOST_CID);
|
||||||
|
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
NS_SetupRegistry()
|
NS_SetupRegistry()
|
||||||
|
@ -108,4 +113,5 @@ NS_SetupRegistry()
|
||||||
NSRepository::RegisterFactory(kThrobberCID, WEB_DLL, PR_FALSE, PR_FALSE);
|
NSRepository::RegisterFactory(kThrobberCID, WEB_DLL, PR_FALSE, PR_FALSE);
|
||||||
NSRepository::RegisterFactory(kPrefCID, PREF_DLL, PR_FALSE, PR_FALSE);
|
NSRepository::RegisterFactory(kPrefCID, PREF_DLL, PR_FALSE, PR_FALSE);
|
||||||
NSRepository::RegisterFactory(kCPluginHostCID, PLUGIN_DLL, PR_FALSE, PR_FALSE);
|
NSRepository::RegisterFactory(kCPluginHostCID, PLUGIN_DLL, PR_FALSE, PR_FALSE);
|
||||||
|
NSRepository::RegisterFactory(kCParserCID, PARSER_DLL, PR_FALSE, PR_FALSE);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче