XML-LibXML
view release on metacpan or search on metacpan
perl-libxml-sax.c view on Meta::CPAN
dSP;
int len = xmlStrlen( ch );
if (sax->joinchars)
{
PSaxCharactersFlush(ctxt, sax->charbuf);
}
ENTER;
SAVETMPS;
PUSHMARK(SP) ;
XPUSHs(handler);
element = PmmGenCharDataSV(aTHX_ sax, ch, len);
rv = newRV_noinc((SV*)element);
XPUSHs(rv);
PUTBACK;
call_method( "comment", G_SCALAR | G_EVAL | G_DISCARD );
sv_2mortal(rv);
if (SvTRUE(ERRSV)) {
croak_obj;
}
FREETMPS ;
LEAVE ;
}
CLEAR_SERROR_HANDLER
return 1;
}
int
PSaxCDATABlock(void *ctx, const xmlChar * ch, int len) {
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)ctx;
PmmSAXVectorPtr sax = (PmmSAXVectorPtr)ctxt->_private;
dTHX;
HV* element;
SV * handler = sax->handler;
SV * rv = NULL;
PmmUpdateLocator(ctx);
if ( ch != NULL && handler != NULL ) {
dSP;
if (sax->joinchars)
{
PSaxCharactersFlush(ctxt, sax->charbuf);
}
ENTER;
SAVETMPS;
PUSHMARK(SP) ;
XPUSHs(handler);
PUTBACK;
call_method( "start_cdata", G_SCALAR | G_EVAL | G_DISCARD );
if (SvTRUE(ERRSV)) {
croak_obj;
}
SPAGAIN;
PUSHMARK(SP) ;
XPUSHs(handler);
element = PmmGenCharDataSV(aTHX_ sax, ch, len);
rv = newRV_noinc((SV*)element);
XPUSHs(rv);
PUTBACK;
call_method( "characters", G_SCALAR | G_EVAL | G_DISCARD);
if (SvTRUE(ERRSV)) {
croak_obj;
}
SPAGAIN;
PUSHMARK(SP) ;
XPUSHs(handler);
PUTBACK;
call_method( "end_cdata", G_SCALAR | G_EVAL | G_DISCARD );
sv_2mortal(rv);
if (SvTRUE(ERRSV)) {
croak_obj;
}
FREETMPS ;
LEAVE ;
}
CLEAR_SERROR_HANDLER
return 1;
}
int
PSaxProcessingInstruction( void * ctx, const xmlChar * target, const xmlChar * data )
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)ctx;
PmmSAXVectorPtr sax = (PmmSAXVectorPtr)ctxt->_private;
dTHX;
SV * handler = sax->handler;
SV * element;
SV * rv = NULL;
PmmUpdateLocator(ctx);
if ( handler != NULL ) {
dSP;
if (sax->joinchars)
{
PSaxCharactersFlush(ctxt, sax->charbuf);
}
ENTER;
SAVETMPS;
PUSHMARK(SP) ;
XPUSHs(handler);
element = (SV*)PmmGenPISV(aTHX_ sax, (const xmlChar *)target, data);
rv = newRV_noinc((SV*)element);
XPUSHs(rv);
PUTBACK;
call_method( "processing_instruction", G_SCALAR | G_EVAL | G_DISCARD );
sv_2mortal(rv);
if (SvTRUE(ERRSV)) {
croak_obj;
}
FREETMPS ;
LEAVE ;
}
CLEAR_SERROR_HANDLER
return 1;
}
perl-libxml-sax.c view on Meta::CPAN
svMessage = NEWSV(0,512);
va_start(args, msg);
sv_vsetpvfn(svMessage, msg, xmlStrlen((const xmlChar *)msg), &args, NULL, 0, NULL);
va_end(args);
ENTER;
SAVETMPS;
PUSHMARK(SP) ;
XPUSHs(sax->parser);
if (SvOK(sax->saved_error)) {
sv_catsv( sax->saved_error, svMessage );
} else {
sv_setsv( sax->saved_error, svMessage );
}
XPUSHs(sv_2mortal(svMessage));
XPUSHs(sv_2mortal(newSViv(ctxt->input->line)));
XPUSHs(sv_2mortal(newSViv(ctxt->input->col)));
PUTBACK;
call_pv( "XML::LibXML::_SAXParser::fatal_error", G_SCALAR | G_EVAL | G_DISCARD );
if (SvTRUE(ERRSV)) {
croak_obj;
}
FREETMPS ;
LEAVE ;
CLEAR_SERROR_HANDLER
return 1;
}
/* NOTE:
* end document is not handled by the parser itself! use
* XML::LibXML::SAX instead!
*/
xmlSAXHandlerPtr
PSaxGetHandler()
{
xmlSAXHandlerPtr retval = (xmlSAXHandlerPtr)xmlMalloc(sizeof(xmlSAXHandler));
memset(retval, 0, sizeof(xmlSAXHandler));
retval->setDocumentLocator = (setDocumentLocatorSAXFunc)&PSaxSetDocumentLocator;
retval->startDocument = (startDocumentSAXFunc)&PSaxStartDocument;
/* libxml2 will not handle perls returnvalue correctly, so we have
* to end the document ourselfes
*/
retval->endDocument = NULL; /* (endDocumentSAXFunc)&PSaxEndDocument; */
retval->startElement = (startElementSAXFunc)&PSaxStartElement;
retval->endElement = (endElementSAXFunc)&PSaxEndElement;
retval->characters = (charactersSAXFunc)&PSaxCharacters;
retval->ignorableWhitespace = (ignorableWhitespaceSAXFunc)&PSaxCharacters;
retval->comment = (commentSAXFunc)&PSaxComment;
retval->cdataBlock = (cdataBlockSAXFunc)&PSaxCDATABlock;
retval->processingInstruction = (processingInstructionSAXFunc)&PSaxProcessingInstruction;
/* warning functions should be internal */
retval->warning = (warningSAXFunc)&PmmSaxWarning;
retval->error = (errorSAXFunc)&PmmSaxError;
retval->fatalError = (fatalErrorSAXFunc)&PmmSaxFatalError;
retval->externalSubset = (externalSubsetSAXFunc)&PSaxExternalSubset;
/*
retval->internalSubset = (internalSubsetSAXFunc)&PSaxInternalSubset;
retval->elementDecl = (elementDeclSAXFunc)&PSaxElementDecl;
retval->entityDecl = (entityDeclSAXFunc)&PSaxEntityDecl;
retval->notationDecl = (notationDeclSAXFunc)&PSaxNotationDecl;
retval->attributeDecl = (attributeDeclSAXFunc)&PSaxAttributeDecl;
retval->unparsedEntityDecl = (unparsedEntityDeclSAXFunc)&PSaxUnparsedEntityDecl;
*/
return retval;
}
( run in 1.132 second using v1.01-cache-2.11-cpan-39bf76dae61 )