XML-SAX-ExpatXS
view release on metacpan or search on metacpan
hv_store(thing, "Target", 6, newUTF8SVpv((char*)target, 0), TargetHash);
if (data)
hv_store(thing, "Data", 4, newUTF8SVpv((char*)data, 0), DataHash);
ENTER;
SAVETMPS;
PUSHMARK(sp);
EXTEND(sp, 3);
PUSHs(cbv->self_sv);
PUSHs(sv_2mortal(newRV_noinc((SV*)thing)));
PUTBACK;
perl_call_method("processing_instruction", G_DISCARD);
FREETMPS;
LEAVE;
} /* End processingInstruction */
static void
commenthandle(void *userData, const char *string)
{
dSP;
CallbackVector * cbv = (CallbackVector*) userData;
HV *thing = newHV();
xse_characters(userData, cbv->chrbuffer);
hv_store(thing, "Data", 4, newUTF8SVpv((char*)string, 0), DataHash);
ENTER;
SAVETMPS;
PUSHMARK(sp);
EXTEND(sp, 1);
/* PUSHs(cbv->self_sv); */
PUSHs(sv_2mortal(newRV_noinc((SV*)thing)));
PUTBACK;
perl_call_sv(cbv->comment_sv, G_DISCARD);
/* perl_call_method("comment", G_DISCARD); */
FREETMPS;
LEAVE;
} /* End commenthandler */
static void
startCdata(void *userData)
{
dSP;
CallbackVector* cbv = (CallbackVector*) userData;
xse_characters(userData, cbv->chrbuffer);
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(cbv->self_sv);
PUTBACK;
perl_call_method("start_cdata", G_DISCARD);
FREETMPS;
LEAVE;
} /* End startCdata */
static void
endCdata(void *userData)
{
dSP;
CallbackVector* cbv = (CallbackVector*) userData;
xse_characters(userData, cbv->chrbuffer);
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(cbv->self_sv);
PUTBACK;
perl_call_method("end_cdata", G_DISCARD);
FREETMPS;
LEAVE;
} /* End endCdata */
static void
nsStart(void *userdata, const XML_Char *prefix, const XML_Char *uri){
dSP;
CallbackVector* cbv = (CallbackVector*) userdata;
HV *nsatt = newHV();
xse_characters(userdata, cbv->chrbuffer);
if (cbv->feat_locator) XML_DefaultCurrent(cbv->p);
/* NS declarations are reported as common attributes or not */
if (cbv->feat_nsatts) {
char *keyname;
keyname = (char *) mymalloc(prefix ? (strlen(prefix) + 37) : 37);
if (!cbv->atts_ready) {
cbv->atts = newHV();
cbv->atts_ready = 1;
}
if (prefix) {
char *a_name;
a_name = (char *) mymalloc(strlen(prefix) + 7);
strcpy(a_name, "xmlns:");
strcat(a_name, prefix);
strcpy(keyname, (cbv->feat_perlxmlns || cbv->feat_xmlns)
? "{http://www.w3.org/2000/xmlns/}" : "{}");
hv_store(nsatt, "Name", 4, newUTF8SVpv(a_name, strlen(a_name)), NameHash);
hv_store(nsatt, "Prefix", 6, newUTF8SVpv("xmlns", 5), PrefixHash);
hv_store(nsatt, "LocalName", 9,
newUTF8SVpv((char*)prefix, strlen(prefix)), LocalNameHash);
hv_store(nsatt, "NamespaceURI", 12, (cbv->feat_perlxmlns || cbv->feat_xmlns) ?
newUTF8SVpv("http://www.w3.org/2000/xmlns/", 29)
: SvREFCNT_inc(empty_sv), NamespaceURIHash);
myfree(a_name);
} else {
strcpy(keyname, cbv->feat_xmlns ? "{http://www.w3.org/2000/xmlns/}" : "{}");
hv_store(nsatt, "Name", 4, newUTF8SVpv("xmlns", 5), NameHash);
hv_store(nsatt, "Prefix", 6, SvREFCNT_inc(empty_sv), PrefixHash);
hv_store(nsatt, "LocalName", 9, newUTF8SVpv("xmlns", 5), LocalNameHash);
hv_store(nsatt, "NamespaceURI", 12, cbv->feat_xmlns ?
newUTF8SVpv("http://www.w3.org/2000/xmlns/", 29)
: SvREFCNT_inc(empty_sv), NamespaceURIHash);
}
strcat(keyname, prefix ? prefix : "xmlns");
hv_store(nsatt, "Value", 5,
( run in 1.601 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )