XPCOM'ing the parser. Use repository to get a parser now.

This commit is contained in:
spider%netscape.com 1998-07-30 22:42:27 +00:00
Родитель 49a5ed2701
Коммит 5b4bd4898e
32 изменённых файлов: 742 добавлений и 74 удалений

Просмотреть файл

@ -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);
} }