HTML-Parser
view release on metacpan or search on metacpan
SvREADONLY_on(sv);
hv_stores(hv, "_hparser_xs_state", newRV_noinc(sv));
void
parse(self, chunk)
SV* self;
SV* chunk
PREINIT:
PSTATE* p_state = get_pstate_hv(aTHX_ self);
PPCODE:
(void)sv_2mortal(SvREFCNT_inc(SvRV(self)));
if (p_state->parsing)
croak("Parse loop not allowed");
p_state->parsing = 1;
if (SvROK(chunk) && SvTYPE(SvRV(chunk)) == SVt_PVCV) {
SV* generator = chunk;
STRLEN len;
do {
int count;
PUSHMARK(SP);
}
else {
PUSHs(self);
}
void
eof(self)
SV* self;
PREINIT:
PSTATE* p_state = get_pstate_hv(aTHX_ self);
PPCODE:
if (p_state->parsing)
p_state->eof = 1;
else {
p_state->parsing = 1;
parse(aTHX_ p_state, 0, self); /* flush */
SPAGAIN;
p_state->parsing = 0;
}
PUSHs(self);
void
handler(pstate, eventname,...)
PSTATE* pstate
SV* eventname
PREINIT:
STRLEN name_len;
char *name = SvPV(eventname, name_len);
int event = -1;
int i;
struct p_handler *h;
PPCODE:
/* map event name string to event_id */
for (i = 0; i < EVENT_COUNT; i++) {
if (strEQ(name, event_id_str[i])) {
event = i;
break;
}
}
if (event < 0)
croak("No handler for %s events", name);
}
MODULE = HTML::Parser PACKAGE = HTML::Entities
void
decode_entities(...)
PREINIT:
int i;
HV *entity2char = get_hv("HTML::Entities::entity2char", 0);
PPCODE:
if (GIMME_V == G_SCALAR && items > 1)
items = 1;
for (i = 0; i < items; i++) {
if (GIMME_V != G_VOID)
ST(i) = sv_2mortal(newSVsv(ST(i)));
else {
#ifdef SV_CHECK_THINKFIRST
SV_CHECK_THINKFIRST(ST(i));
#endif
if (SvREADONLY(ST(i)))
( run in 0.991 second using v1.01-cache-2.11-cpan-5511b514fd6 )