r=heikki, sr=brendan
The XML parser is designed to receive extern "C" functions, so that is what we should be passing
This commit is contained in:
mkaply%us.ibm.com 2001-03-30 14:28:06 +00:00
parent 1119ecc891
commit 3a11baeffe
8 changed files with 376 additions and 250 deletions

View File

@ -310,12 +310,12 @@ nsresult nsExpatDTD::Terminate(nsIParser* aParser)
*/
void nsExpatDTD::SetupExpatCallbacks(void) {
if (mExpatParser) {
XML_SetElementHandler(mExpatParser, HandleStartElement, HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, HandleProcessingInstruction);
XML_SetElementHandler(mExpatParser, DTD_HandleStartElement, DTD_HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, DTD_HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, DTD_HandleProcessingInstruction);
// XML_SetDefaultHandler(mExpatParser, NULL);
// XML_SetUnparsedEntityDeclHandler(mExpatParser, NULL);
XML_SetNotationDeclHandler(mExpatParser, HandleNotationDecl);
XML_SetNotationDeclHandler(mExpatParser, DTD_HandleNotationDecl);
// XML_SetExternalEntityRefHandler(mExpatParser, NULL);
// XML_SetUnknownEncodingHandler(mExpatParser, NULL, NULL);
}
@ -536,64 +536,64 @@ nsresult nsExpatDTD::ParseXMLBuffer(const char *buffer){
/* Expat Callback Functions start here */
/***************************************/
void nsExpatDTD::HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts)
void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleStartElement() not yet implemented.");
}
void nsExpatDTD::HandleEndElement(void *userData, const XML_Char *name)
void DTD_HandleEndElement(void *userData, const XML_Char *name)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleEndElement() not yet implemented.");
}
void nsExpatDTD::HandleCharacterData(void *userData, const XML_Char *s, int len)
void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleCharacterData() not yet implemented.");
}
void nsExpatDTD::HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleProcessingInstruction() not yet implemented.");
}
void nsExpatDTD::HandleDefault(void *userData, const XML_Char *s, int len)
void DTD_HandleDefault(void *userData, const XML_Char *s, int len)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleDefault() not yet implemented.");
}
void nsExpatDTD::HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName)
void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleUnparsedEntityDecl() not yet implemented.");
}
void nsExpatDTD::HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleNotationDecl() not yet implemented.");
}
void nsExpatDTD::HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleExternalEntityRef() not yet implemented.");
}
void nsExpatDTD::HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info)
void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleUnknownEncoding() not yet implemented.");
}

View File

@ -18,12 +18,7 @@
* Rights Reserved.
*
* Contributor(s):
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
* described herein are Copyright (c) International Business Machines Corporation, 2000.
* Modifications to Mozilla code or documentation identified per MPL Section 3.3
*
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
* IBM Corp.
*/
/**
@ -56,7 +51,39 @@ class nsIDTDDebug;
class nsIParserNode;
class nsParser;
#ifdef __cplusplus
extern "C" {
#endif
/* The callback handlers that get called from the expat parser */
void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
void DTD_HandleEndElement(void *userData, const XML_Char *name);
void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len);
void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
void DTD_HandleDefault(void *userData, const XML_Char *s, int len);
void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
#ifdef __cplusplus
}
#endif
class nsExpatDTD : public nsIDTD {
@ -256,30 +283,30 @@ protected:
void SetupExpatCallbacks(void);
/* The callback handlers that get called from the expat parser */
static void PR_CALLBACK HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
static void PR_CALLBACK HandleEndElement(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleCharacterData(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleProcessingInstruction(void *userData,
friend void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
friend void DTD_HandleEndElement(void *userData, const XML_Char *name);
friend void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len);
friend void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
static void PR_CALLBACK HandleDefault(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleUnparsedEntityDecl(void *userData,
friend void DTD_HandleDefault(void *userData, const XML_Char *s, int len);
friend void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
static void PR_CALLBACK HandleNotationDecl(void *userData,
friend void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static void PR_CALLBACK HandleExternalEntityRef(XML_Parser parser,
friend void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static void PR_CALLBACK HandleUnknownEncoding(void *encodingHandlerData,
friend void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);

View File

@ -146,19 +146,19 @@ NS_IMPL_RELEASE(nsExpatTokenizer)
void nsExpatTokenizer::SetupExpatParser(void) {
if (mExpatParser) {
// Set up the callbacks
XML_SetElementHandler(mExpatParser, HandleStartElement, HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, HandleProcessingInstruction);
XML_SetDefaultHandlerExpand(mExpatParser, HandleDefault);
XML_SetUnparsedEntityDeclHandler(mExpatParser, HandleUnparsedEntityDecl);
XML_SetNotationDeclHandler(mExpatParser, HandleNotationDecl);
XML_SetExternalEntityRefHandler(mExpatParser, HandleExternalEntityRef);
XML_SetCommentHandler(mExpatParser, HandleComment);
XML_SetUnknownEncodingHandler(mExpatParser, HandleUnknownEncoding, NULL);
XML_SetCdataSectionHandler(mExpatParser, HandleStartCdataSection,
HandleEndCdataSection);
XML_SetElementHandler(mExpatParser, Tokenizer_HandleStartElement, Tokenizer_HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, Tokenizer_HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, Tokenizer_HandleProcessingInstruction);
XML_SetDefaultHandlerExpand(mExpatParser, Tokenizer_HandleDefault);
XML_SetUnparsedEntityDeclHandler(mExpatParser, Tokenizer_HandleUnparsedEntityDecl);
XML_SetNotationDeclHandler(mExpatParser, Tokenizer_HandleNotationDecl);
XML_SetExternalEntityRefHandler(mExpatParser, Tokenizer_HandleExternalEntityRef);
XML_SetCommentHandler(mExpatParser, Tokenizer_HandleComment);
XML_SetUnknownEncodingHandler(mExpatParser, Tokenizer_HandleUnknownEncoding, NULL);
XML_SetCdataSectionHandler(mExpatParser, Tokenizer_HandleStartCdataSection,
Tokenizer_HandleEndCdataSection);
XML_SetDoctypeDeclHandler(mExpatParser, HandleStartDoctypeDecl, HandleEndDoctypeDecl);
XML_SetDoctypeDeclHandler(mExpatParser, Tokenizer_HandleStartDoctypeDecl, Tokenizer_HandleEndDoctypeDecl);
// Set up the user data.
XML_SetUserData(mExpatParser, (void*) mState);
@ -519,7 +519,7 @@ void nsExpatTokenizer::FrontloadMisplacedContent(nsDeque& aDeque){
/* Expat Callback Functions start here */
/***************************************/
void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts) {
void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts) {
XMLParserState* state = (XMLParserState*) userData;
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_unknown, nsLiteralString((PRUnichar*)name));
if(theToken) {
@ -531,7 +531,7 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
startToken->SetIDAttributeAtom(attributeAtom);
}
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
// For each attribute on this element, create and add attribute tokens to the token queue
int theAttrCount=0;
@ -555,7 +555,7 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
}
}
CToken* theTok=(CToken*)theAttrToken;
AddToken(theTok, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theTok, NS_OK, state->tokenDeque, state->tokenAllocator);
atts += 2;
}
theToken->SetAttributeCount(theAttrCount);
@ -565,18 +565,18 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
}
}
void nsExpatTokenizer::HandleEndElement(void *userData, const XML_Char *name) {
void Tokenizer_HandleEndElement(void *userData, const XML_Char *name) {
XMLParserState* state = (XMLParserState*) userData;
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_end,eHTMLTag_unknown, nsLiteralString((PRUnichar *) name));
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
}
}
void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, int len) {
void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len) {
XMLParserState* state = (XMLParserState*) userData;
if (state->incdata) {
@ -615,7 +615,7 @@ void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, in
}
if(newToken) {
AddToken(newToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(newToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else {
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
@ -623,7 +623,7 @@ void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, in
}
}
void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
void Tokenizer_HandleComment(void *userData, const XML_Char *name) {
XMLParserState* state = (XMLParserState*) userData;
if (state->indoctype) {
// We do not want comments popping out of the doctype...
@ -633,7 +633,7 @@ void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
} else {
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_comment, eHTMLTag_unknown, nsLiteralString((PRUnichar*)name));
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
@ -641,13 +641,13 @@ void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
}
}
void nsExpatTokenizer::HandleStartCdataSection(void *userData) {
void Tokenizer_HandleStartCdataSection(void *userData) {
XMLParserState* state = (XMLParserState*) userData;
state->incdata = PR_TRUE;
}
void nsExpatTokenizer::HandleEndCdataSection(void *userData) {
void Tokenizer_HandleEndCdataSection(void *userData) {
XMLParserState* state = (XMLParserState*) userData;
CToken* cdataToken = state->tokenAllocator->CreateTokenOfType(eToken_cdatasection,
eHTMLTag_unknown,
@ -655,15 +655,15 @@ void nsExpatTokenizer::HandleEndCdataSection(void *userData) {
// We've reached the end of the current CDATA section. Push the current
// CDATA token onto the token queue
AddToken(cdataToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(cdataToken, NS_OK, state->tokenDeque, state->tokenAllocator);
state->incdata = PR_FALSE;
state->cdataText.Truncate();
}
void nsExpatTokenizer::HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
{
XMLParserState* state = (XMLParserState*) userData;
nsAutoString theString;
@ -677,14 +677,14 @@ void nsExpatTokenizer::HandleProcessingInstruction(void *userData,
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_instruction,eHTMLTag_unknown, theString);
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
}
}
void nsExpatTokenizer::HandleDefault(void *userData, const XML_Char *s, int len) {
void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len) {
XMLParserState* state = (XMLParserState*) userData;
if (state->indoctype) {
state->doctypeText.Append((PRUnichar*)s, len);
@ -696,18 +696,18 @@ void nsExpatTokenizer::HandleDefault(void *userData, const XML_Char *s, int len)
while ((offset = str.FindChar('\n', PR_FALSE, offset + 1)) != -1) {
newLine = state->tokenAllocator->CreateTokenOfType(eToken_newline, eHTMLTag_unknown);
AddToken(newLine, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(newLine, NS_OK, state->tokenDeque, state->tokenAllocator);
}
}
}
void nsExpatTokenizer::HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName) {
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleUnparsedEntityDecl() not yet implemented.");
void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName) {
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleUnparsedEntityDecl() not yet implemented.");
}
@ -832,19 +832,19 @@ nsresult nsExpatTokenizer::LoadStream(nsIInputStream* in,
return res;
}
void nsExpatTokenizer::HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId){
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleNotationDecl() not yet implemented.");
void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId){
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleNotationDecl() not yet implemented.");
}
int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
int result = PR_TRUE;
@ -855,12 +855,12 @@ int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
nsAutoString baseURL( (const PRUnichar*) base );
nsAutoString absURL;
nsresult rv = OpenInputStream(urlSpec, baseURL, getter_AddRefs(in), &absURL);
nsresult rv = nsExpatTokenizer::OpenInputStream(urlSpec, baseURL, getter_AddRefs(in), &absURL);
if (NS_SUCCEEDED(rv) && nsnull != in) {
PRUint32 retLen = 0;
PRUnichar *uniBuf = nsnull;
rv = LoadStream(in, uniBuf, retLen);
rv = nsExpatTokenizer::LoadStream(in, uniBuf, retLen);
// Pass the buffer to expat for parsing
if (NS_SUCCEEDED(rv) && nsnull != uniBuf) {
@ -882,37 +882,37 @@ int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
}
#else /* ! XML_DTD */
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleExternalEntityRef() not yet implemented.");
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleExternalEntityRef() not yet implemented.");
#endif /* XML_DTD */
return result;
}
int nsExpatTokenizer::HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info) {
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleUnknownEncoding() not yet implemented.");
int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info) {
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleUnknownEncoding() not yet implemented.");
int result=0;
return result;
}
void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName)
void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName)
{
XMLParserState* state = (XMLParserState*) userData;
state->indoctype = PR_TRUE;
state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
}
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)
void Tokenizer_HandleEndDoctypeDecl(void *userData)
{
XMLParserState* state = (XMLParserState*) userData;
state->doctypeText.AppendWithConversion(">");
CToken* token = state->tokenAllocator->CreateTokenOfType(eToken_doctypeDecl, eHTMLTag_unknown, state->doctypeText);
if (token) {
AddToken(token, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(token, NS_OK, state->tokenDeque, state->tokenAllocator);
}
state->indoctype = PR_FALSE;
state->doctypeText.Truncate();

View File

@ -18,12 +18,7 @@
* Rights Reserved.
*
* Contributor(s):
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
* described herein are Copyright (c) International Business Machines Corporation, 2000.
* Modifications to Mozilla code or documentation identified per MPL Section 3.3
*
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
* IBM Corp.
*/
@ -64,6 +59,46 @@ typedef struct _XMLParserState XMLParserState;
#pragma warning( disable : 4275 )
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* The callback handlers that get called from the expat parser */
void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
void Tokenizer_HandleEndElement(void *userData, const XML_Char *name);
void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len);
void Tokenizer_HandleComment(void *userData, const XML_Char *name);
void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len);
void Tokenizer_HandleStartCdataSection(void *userData);
void Tokenizer_HandleEndCdataSection(void *userData);
void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName);
void Tokenizer_HandleEndDoctypeDecl(void *userData);
#ifdef __cplusplus
}
#endif
CLASS_EXPORT_HTMLPARS nsExpatTokenizer : public nsHTMLTokenizer {
public:
nsExpatTokenizer(nsString* aURL = nsnull);
@ -116,38 +151,38 @@ protected:
PRUint32 &retLen);
/* The callback handlers that get called from the expat parser */
static void PR_CALLBACK HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
static void PR_CALLBACK HandleEndElement(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleCharacterData(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleComment(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleProcessingInstruction(void *userData,
friend void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
friend void Tokenizer_HandleEndElement(void *userData, const XML_Char *name);
friend void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len);
friend void Tokenizer_HandleComment(void *userData, const XML_Char *name);
friend void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
static void PR_CALLBACK HandleDefault(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleStartCdataSection(void *userData);
static void PR_CALLBACK HandleEndCdataSection(void *userData);
static void PR_CALLBACK HandleUnparsedEntityDecl(void *userData,
friend void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len);
friend void Tokenizer_HandleStartCdataSection(void *userData);
friend void Tokenizer_HandleEndCdataSection(void *userData);
friend void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
static void PR_CALLBACK HandleNotationDecl(void *userData,
friend void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static int PR_CALLBACK HandleExternalEntityRef(XML_Parser parser,
friend int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static int PR_CALLBACK HandleUnknownEncoding(void *encodingHandlerData,
friend int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
static void PR_CALLBACK HandleStartDoctypeDecl(void *userData,
friend void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName);
static void PR_CALLBACK HandleEndDoctypeDecl(void *userData);
friend void Tokenizer_HandleEndDoctypeDecl(void *userData);
XML_Parser mExpatParser;
PRUint32 mBytesParsed;
@ -155,6 +190,7 @@ protected:
XMLParserState* mState;
};
extern NS_HTMLPARS nsresult NS_New_Expat_Tokenizer(nsITokenizer** aInstancePtrResult);
#endif

View File

@ -310,12 +310,12 @@ nsresult nsExpatDTD::Terminate(nsIParser* aParser)
*/
void nsExpatDTD::SetupExpatCallbacks(void) {
if (mExpatParser) {
XML_SetElementHandler(mExpatParser, HandleStartElement, HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, HandleProcessingInstruction);
XML_SetElementHandler(mExpatParser, DTD_HandleStartElement, DTD_HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, DTD_HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, DTD_HandleProcessingInstruction);
// XML_SetDefaultHandler(mExpatParser, NULL);
// XML_SetUnparsedEntityDeclHandler(mExpatParser, NULL);
XML_SetNotationDeclHandler(mExpatParser, HandleNotationDecl);
XML_SetNotationDeclHandler(mExpatParser, DTD_HandleNotationDecl);
// XML_SetExternalEntityRefHandler(mExpatParser, NULL);
// XML_SetUnknownEncodingHandler(mExpatParser, NULL, NULL);
}
@ -536,64 +536,64 @@ nsresult nsExpatDTD::ParseXMLBuffer(const char *buffer){
/* Expat Callback Functions start here */
/***************************************/
void nsExpatDTD::HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts)
void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleStartElement() not yet implemented.");
}
void nsExpatDTD::HandleEndElement(void *userData, const XML_Char *name)
void DTD_HandleEndElement(void *userData, const XML_Char *name)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleEndElement() not yet implemented.");
}
void nsExpatDTD::HandleCharacterData(void *userData, const XML_Char *s, int len)
void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleCharacterData() not yet implemented.");
}
void nsExpatDTD::HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleProcessingInstruction() not yet implemented.");
}
void nsExpatDTD::HandleDefault(void *userData, const XML_Char *s, int len)
void DTD_HandleDefault(void *userData, const XML_Char *s, int len)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleDefault() not yet implemented.");
}
void nsExpatDTD::HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName)
void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleUnparsedEntityDecl() not yet implemented.");
}
void nsExpatDTD::HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleNotationDecl() not yet implemented.");
}
void nsExpatDTD::HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleExternalEntityRef() not yet implemented.");
}
void nsExpatDTD::HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info)
void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info)
{
NS_NOTYETIMPLEMENTED("Error: nsExpatDTD::HandleUnknownEncoding() not yet implemented.");
}

View File

@ -18,12 +18,7 @@
* Rights Reserved.
*
* Contributor(s):
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
* described herein are Copyright (c) International Business Machines Corporation, 2000.
* Modifications to Mozilla code or documentation identified per MPL Section 3.3
*
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
* IBM Corp.
*/
/**
@ -56,7 +51,39 @@ class nsIDTDDebug;
class nsIParserNode;
class nsParser;
#ifdef __cplusplus
extern "C" {
#endif
/* The callback handlers that get called from the expat parser */
void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
void DTD_HandleEndElement(void *userData, const XML_Char *name);
void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len);
void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
void DTD_HandleDefault(void *userData, const XML_Char *s, int len);
void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
#ifdef __cplusplus
}
#endif
class nsExpatDTD : public nsIDTD {
@ -256,30 +283,30 @@ protected:
void SetupExpatCallbacks(void);
/* The callback handlers that get called from the expat parser */
static void PR_CALLBACK HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
static void PR_CALLBACK HandleEndElement(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleCharacterData(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleProcessingInstruction(void *userData,
friend void DTD_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
friend void DTD_HandleEndElement(void *userData, const XML_Char *name);
friend void DTD_HandleCharacterData(void *userData, const XML_Char *s, int len);
friend void DTD_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
static void PR_CALLBACK HandleDefault(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleUnparsedEntityDecl(void *userData,
friend void DTD_HandleDefault(void *userData, const XML_Char *s, int len);
friend void DTD_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
static void PR_CALLBACK HandleNotationDecl(void *userData,
friend void DTD_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static void PR_CALLBACK HandleExternalEntityRef(XML_Parser parser,
friend void DTD_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static void PR_CALLBACK HandleUnknownEncoding(void *encodingHandlerData,
friend void DTD_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);

View File

@ -146,19 +146,19 @@ NS_IMPL_RELEASE(nsExpatTokenizer)
void nsExpatTokenizer::SetupExpatParser(void) {
if (mExpatParser) {
// Set up the callbacks
XML_SetElementHandler(mExpatParser, HandleStartElement, HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, HandleProcessingInstruction);
XML_SetDefaultHandlerExpand(mExpatParser, HandleDefault);
XML_SetUnparsedEntityDeclHandler(mExpatParser, HandleUnparsedEntityDecl);
XML_SetNotationDeclHandler(mExpatParser, HandleNotationDecl);
XML_SetExternalEntityRefHandler(mExpatParser, HandleExternalEntityRef);
XML_SetCommentHandler(mExpatParser, HandleComment);
XML_SetUnknownEncodingHandler(mExpatParser, HandleUnknownEncoding, NULL);
XML_SetCdataSectionHandler(mExpatParser, HandleStartCdataSection,
HandleEndCdataSection);
XML_SetElementHandler(mExpatParser, Tokenizer_HandleStartElement, Tokenizer_HandleEndElement);
XML_SetCharacterDataHandler(mExpatParser, Tokenizer_HandleCharacterData);
XML_SetProcessingInstructionHandler(mExpatParser, Tokenizer_HandleProcessingInstruction);
XML_SetDefaultHandlerExpand(mExpatParser, Tokenizer_HandleDefault);
XML_SetUnparsedEntityDeclHandler(mExpatParser, Tokenizer_HandleUnparsedEntityDecl);
XML_SetNotationDeclHandler(mExpatParser, Tokenizer_HandleNotationDecl);
XML_SetExternalEntityRefHandler(mExpatParser, Tokenizer_HandleExternalEntityRef);
XML_SetCommentHandler(mExpatParser, Tokenizer_HandleComment);
XML_SetUnknownEncodingHandler(mExpatParser, Tokenizer_HandleUnknownEncoding, NULL);
XML_SetCdataSectionHandler(mExpatParser, Tokenizer_HandleStartCdataSection,
Tokenizer_HandleEndCdataSection);
XML_SetDoctypeDeclHandler(mExpatParser, HandleStartDoctypeDecl, HandleEndDoctypeDecl);
XML_SetDoctypeDeclHandler(mExpatParser, Tokenizer_HandleStartDoctypeDecl, Tokenizer_HandleEndDoctypeDecl);
// Set up the user data.
XML_SetUserData(mExpatParser, (void*) mState);
@ -519,7 +519,7 @@ void nsExpatTokenizer::FrontloadMisplacedContent(nsDeque& aDeque){
/* Expat Callback Functions start here */
/***************************************/
void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts) {
void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts) {
XMLParserState* state = (XMLParserState*) userData;
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_unknown, nsLiteralString((PRUnichar*)name));
if(theToken) {
@ -531,7 +531,7 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
startToken->SetIDAttributeAtom(attributeAtom);
}
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
// For each attribute on this element, create and add attribute tokens to the token queue
int theAttrCount=0;
@ -555,7 +555,7 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
}
}
CToken* theTok=(CToken*)theAttrToken;
AddToken(theTok, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theTok, NS_OK, state->tokenDeque, state->tokenAllocator);
atts += 2;
}
theToken->SetAttributeCount(theAttrCount);
@ -565,18 +565,18 @@ void nsExpatTokenizer::HandleStartElement(void *userData, const XML_Char *name,
}
}
void nsExpatTokenizer::HandleEndElement(void *userData, const XML_Char *name) {
void Tokenizer_HandleEndElement(void *userData, const XML_Char *name) {
XMLParserState* state = (XMLParserState*) userData;
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_end,eHTMLTag_unknown, nsLiteralString((PRUnichar *) name));
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
}
}
void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, int len) {
void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len) {
XMLParserState* state = (XMLParserState*) userData;
if (state->incdata) {
@ -615,7 +615,7 @@ void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, in
}
if(newToken) {
AddToken(newToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(newToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else {
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
@ -623,7 +623,7 @@ void nsExpatTokenizer::HandleCharacterData(void *userData, const XML_Char *s, in
}
}
void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
void Tokenizer_HandleComment(void *userData, const XML_Char *name) {
XMLParserState* state = (XMLParserState*) userData;
if (state->indoctype) {
// We do not want comments popping out of the doctype...
@ -633,7 +633,7 @@ void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
} else {
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_comment, eHTMLTag_unknown, nsLiteralString((PRUnichar*)name));
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
@ -641,13 +641,13 @@ void nsExpatTokenizer::HandleComment(void *userData, const XML_Char *name) {
}
}
void nsExpatTokenizer::HandleStartCdataSection(void *userData) {
void Tokenizer_HandleStartCdataSection(void *userData) {
XMLParserState* state = (XMLParserState*) userData;
state->incdata = PR_TRUE;
}
void nsExpatTokenizer::HandleEndCdataSection(void *userData) {
void Tokenizer_HandleEndCdataSection(void *userData) {
XMLParserState* state = (XMLParserState*) userData;
CToken* cdataToken = state->tokenAllocator->CreateTokenOfType(eToken_cdatasection,
eHTMLTag_unknown,
@ -655,15 +655,15 @@ void nsExpatTokenizer::HandleEndCdataSection(void *userData) {
// We've reached the end of the current CDATA section. Push the current
// CDATA token onto the token queue
AddToken(cdataToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(cdataToken, NS_OK, state->tokenDeque, state->tokenAllocator);
state->incdata = PR_FALSE;
state->cdataText.Truncate();
}
void nsExpatTokenizer::HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data)
{
XMLParserState* state = (XMLParserState*) userData;
nsAutoString theString;
@ -677,14 +677,14 @@ void nsExpatTokenizer::HandleProcessingInstruction(void *userData,
CToken* theToken = state->tokenAllocator->CreateTokenOfType(eToken_instruction,eHTMLTag_unknown, theString);
if(theToken) {
AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(theToken, NS_OK, state->tokenDeque, state->tokenAllocator);
}
else{
//THROW A HUGE ERROR IF WE CANT CREATE A TOKEN!
}
}
void nsExpatTokenizer::HandleDefault(void *userData, const XML_Char *s, int len) {
void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len) {
XMLParserState* state = (XMLParserState*) userData;
if (state->indoctype) {
state->doctypeText.Append((PRUnichar*)s, len);
@ -696,18 +696,18 @@ void nsExpatTokenizer::HandleDefault(void *userData, const XML_Char *s, int len)
while ((offset = str.FindChar('\n', PR_FALSE, offset + 1)) != -1) {
newLine = state->tokenAllocator->CreateTokenOfType(eToken_newline, eHTMLTag_unknown);
AddToken(newLine, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(newLine, NS_OK, state->tokenDeque, state->tokenAllocator);
}
}
}
void nsExpatTokenizer::HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName) {
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleUnparsedEntityDecl() not yet implemented.");
void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName) {
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleUnparsedEntityDecl() not yet implemented.");
}
@ -832,19 +832,19 @@ nsresult nsExpatTokenizer::LoadStream(nsIInputStream* in,
return res;
}
void nsExpatTokenizer::HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId){
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleNotationDecl() not yet implemented.");
void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId){
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleNotationDecl() not yet implemented.");
}
int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId)
{
int result = PR_TRUE;
@ -855,12 +855,12 @@ int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
nsAutoString baseURL( (const PRUnichar*) base );
nsAutoString absURL;
nsresult rv = OpenInputStream(urlSpec, baseURL, getter_AddRefs(in), &absURL);
nsresult rv = nsExpatTokenizer::OpenInputStream(urlSpec, baseURL, getter_AddRefs(in), &absURL);
if (NS_SUCCEEDED(rv) && nsnull != in) {
PRUint32 retLen = 0;
PRUnichar *uniBuf = nsnull;
rv = LoadStream(in, uniBuf, retLen);
rv = nsExpatTokenizer::LoadStream(in, uniBuf, retLen);
// Pass the buffer to expat for parsing
if (NS_SUCCEEDED(rv) && nsnull != uniBuf) {
@ -882,37 +882,37 @@ int nsExpatTokenizer::HandleExternalEntityRef(XML_Parser parser,
}
#else /* ! XML_DTD */
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleExternalEntityRef() not yet implemented.");
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleExternalEntityRef() not yet implemented.");
#endif /* XML_DTD */
return result;
}
int nsExpatTokenizer::HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info) {
NS_NOTYETIMPLEMENTED("Error: nsExpatTokenizer::HandleUnknownEncoding() not yet implemented.");
int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info) {
NS_NOTYETIMPLEMENTED("Error: Tokenizer_HandleUnknownEncoding() not yet implemented.");
int result=0;
return result;
}
void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName)
void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName)
{
XMLParserState* state = (XMLParserState*) userData;
state->indoctype = PR_TRUE;
state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
}
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)
void Tokenizer_HandleEndDoctypeDecl(void *userData)
{
XMLParserState* state = (XMLParserState*) userData;
state->doctypeText.AppendWithConversion(">");
CToken* token = state->tokenAllocator->CreateTokenOfType(eToken_doctypeDecl, eHTMLTag_unknown, state->doctypeText);
if (token) {
AddToken(token, NS_OK, state->tokenDeque, state->tokenAllocator);
nsExpatTokenizer::AddToken(token, NS_OK, state->tokenDeque, state->tokenAllocator);
}
state->indoctype = PR_FALSE;
state->doctypeText.Truncate();

View File

@ -18,12 +18,7 @@
* Rights Reserved.
*
* Contributor(s):
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
* described herein are Copyright (c) International Business Machines Corporation, 2000.
* Modifications to Mozilla code or documentation identified per MPL Section 3.3
*
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
* IBM Corp.
*/
@ -64,6 +59,46 @@ typedef struct _XMLParserState XMLParserState;
#pragma warning( disable : 4275 )
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* The callback handlers that get called from the expat parser */
void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
void Tokenizer_HandleEndElement(void *userData, const XML_Char *name);
void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len);
void Tokenizer_HandleComment(void *userData, const XML_Char *name);
void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len);
void Tokenizer_HandleStartCdataSection(void *userData);
void Tokenizer_HandleEndCdataSection(void *userData);
void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName);
void Tokenizer_HandleEndDoctypeDecl(void *userData);
#ifdef __cplusplus
}
#endif
CLASS_EXPORT_HTMLPARS nsExpatTokenizer : public nsHTMLTokenizer {
public:
nsExpatTokenizer(nsString* aURL = nsnull);
@ -116,38 +151,38 @@ protected:
PRUint32 &retLen);
/* The callback handlers that get called from the expat parser */
static void PR_CALLBACK HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
static void PR_CALLBACK HandleEndElement(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleCharacterData(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleComment(void *userData, const XML_Char *name);
static void PR_CALLBACK HandleProcessingInstruction(void *userData,
friend void Tokenizer_HandleStartElement(void *userData, const XML_Char *name, const XML_Char **atts);
friend void Tokenizer_HandleEndElement(void *userData, const XML_Char *name);
friend void Tokenizer_HandleCharacterData(void *userData, const XML_Char *s, int len);
friend void Tokenizer_HandleComment(void *userData, const XML_Char *name);
friend void Tokenizer_HandleProcessingInstruction(void *userData,
const XML_Char *target,
const XML_Char *data);
static void PR_CALLBACK HandleDefault(void *userData, const XML_Char *s, int len);
static void PR_CALLBACK HandleStartCdataSection(void *userData);
static void PR_CALLBACK HandleEndCdataSection(void *userData);
static void PR_CALLBACK HandleUnparsedEntityDecl(void *userData,
friend void Tokenizer_HandleDefault(void *userData, const XML_Char *s, int len);
friend void Tokenizer_HandleStartCdataSection(void *userData);
friend void Tokenizer_HandleEndCdataSection(void *userData);
friend void Tokenizer_HandleUnparsedEntityDecl(void *userData,
const XML_Char *entityName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId,
const XML_Char *notationName);
static void PR_CALLBACK HandleNotationDecl(void *userData,
friend void Tokenizer_HandleNotationDecl(void *userData,
const XML_Char *notationName,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static int PR_CALLBACK HandleExternalEntityRef(XML_Parser parser,
friend int Tokenizer_HandleExternalEntityRef(XML_Parser parser,
const XML_Char *openEntityNames,
const XML_Char *base,
const XML_Char *systemId,
const XML_Char *publicId);
static int PR_CALLBACK HandleUnknownEncoding(void *encodingHandlerData,
friend int Tokenizer_HandleUnknownEncoding(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info);
static void PR_CALLBACK HandleStartDoctypeDecl(void *userData,
friend void Tokenizer_HandleStartDoctypeDecl(void *userData,
const XML_Char *doctypeName);
static void PR_CALLBACK HandleEndDoctypeDecl(void *userData);
friend void Tokenizer_HandleEndDoctypeDecl(void *userData);
XML_Parser mExpatParser;
PRUint32 mBytesParsed;
@ -155,6 +190,7 @@ protected:
XMLParserState* mState;
};
extern NS_HTMLPARS nsresult NS_New_Expat_Tokenizer(nsITokenizer** aInstancePtrResult);
#endif