Chandra
view release on metacpan or search on metacpan
xs/element.xs view on Meta::CPAN
: &PL_sv_undef;
PUTBACK;
FREETMPS;
LEAVE;
} else {
child = newSVsv(*csvp);
}
av_push(children, child);
}
}
}
}
}
RETVAL = self_rv;
}
OUTPUT:
RETVAL
SV *
add_child(self, child)
SV *self
SV *child
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **ch_svp = hv_fetchs(hv, "children", 0);
AV *children = (AV *)SvRV(*ch_svp);
if (SvROK(child) && SvTYPE(SvRV(child)) == SVt_PVHV &&
!sv_isobject(child)) {
/* Hashref â create new Element */
int count;
SV *new_child;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpvs("Chandra::Element")));
XPUSHs(child);
PUTBACK;
count = call_method("new", G_SCALAR);
SPAGAIN;
new_child = (count > 0) ? SvREFCNT_inc(POPs) : &PL_sv_undef;
PUTBACK;
FREETMPS;
LEAVE;
av_push(children, new_child);
RETVAL = SvREFCNT_inc(new_child);
} else {
av_push(children, SvREFCNT_inc(child));
RETVAL = SvREFCNT_inc(child);
}
}
OUTPUT:
RETVAL
void
children(self)
SV *self
PPCODE:
{
HV *hv = (HV *)SvRV(self);
SV **ch_svp = hv_fetchs(hv, "children", 0);
if (ch_svp && *ch_svp && SvROK(*ch_svp) &&
SvTYPE(SvRV(*ch_svp)) == SVt_PVAV) {
AV *children = (AV *)SvRV(*ch_svp);
SSize_t i, len = av_len(children) + 1;
if (GIMME_V == G_SCALAR) {
XPUSHs(sv_2mortal(newSViv(len)));
} else {
EXTEND(SP, len);
for (i = 0; i < len; i++) {
SV **csvp = av_fetch(children, i, 0);
if (csvp && *csvp)
PUSHs(*csvp);
}
}
} else if (GIMME_V == G_SCALAR) {
XPUSHs(sv_2mortal(newSViv(0)));
}
}
SV *
tag(self)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **svp = hv_fetchs(hv, "tag", 0);
RETVAL = (svp && *svp) ? SvREFCNT_inc(*svp) : newSVpvs("div");
}
OUTPUT:
RETVAL
SV *
id(self, ...)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **svp;
if (items > 1 && SvOK(ST(1))) {
(void)hv_stores(hv, "id", newSVsv(ST(1)));
}
svp = hv_fetchs(hv, "id", 0);
RETVAL = (svp && *svp) ? SvREFCNT_inc(*svp) : newSV(0);
}
OUTPUT:
RETVAL
SV *
class(self, ...)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **svp;
if (items > 1 && SvOK(ST(1))) {
(void)hv_stores(hv, "class", newSVsv(ST(1)));
}
xs/element.xs view on Meta::CPAN
if (items > 1 && SvOK(ST(1))) {
(void)hv_stores(hv, "style", newSVsv(ST(1)));
}
svp = hv_fetchs(hv, "style", 0);
RETVAL = (svp && *svp) ? SvREFCNT_inc(*svp) : newSV(0);
}
OUTPUT:
RETVAL
SV *
attribute(self, key, ...)
SV *self
SV *key
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **attrs_svp = hv_fetchs(hv, "attributes", 0);
HV *attrs = (HV *)SvRV(*attrs_svp);
STRLEN klen;
const char *kstr = SvPV(key, klen);
SV **vsvp;
if (items > 2 && SvOK(ST(2))) {
(void)hv_store(attrs, kstr, (I32)klen, newSVsv(ST(2)), 0);
}
vsvp = hv_fetch(attrs, kstr, (I32)klen, 0);
RETVAL = (vsvp && *vsvp) ? SvREFCNT_inc(*vsvp) : newSV(0);
}
OUTPUT:
RETVAL
SV *
get_element_by_id(self, target_id)
SV *self
const char *target_id
CODE:
{
SV *found = _elem_find_by_id(aTHX_ self, target_id);
RETVAL = found ? SvREFCNT_inc(found) : &PL_sv_undef;
}
OUTPUT:
RETVAL
SV *
get_element_by_tag(self, target_tag)
SV *self
const char *target_tag
CODE:
{
SV *found = _elem_find_by_tag(aTHX_ self, target_tag);
RETVAL = found ? SvREFCNT_inc(found) : &PL_sv_undef;
}
OUTPUT:
RETVAL
void
get_elements_by_class(self, target_class)
SV *self
const char *target_class
PPCODE:
{
AV *results = newAV();
STRLEN tlen = strlen(target_class);
SSize_t i, len;
_elem_collect_by_class(aTHX_ self, target_class, tlen, results);
len = av_len(results) + 1;
EXTEND(SP, len);
for (i = 0; i < len; i++) {
SV **svp = av_fetch(results, i, 0);
if (svp && *svp)
PUSHs(*svp);
}
SvREFCNT_dec((SV *)results);
}
SV *
render(self)
SV *self
CODE:
RETVAL = _elem_render(aTHX_ self);
OUTPUT:
RETVAL
SV *
handlers(...)
CODE:
{
HV *h;
PERL_UNUSED_VAR(items);
h = _elem_get_handlers(aTHX);
RETVAL = newRV_inc((SV *)h);
}
OUTPUT:
RETVAL
SV *
get_handler(self_or_class, hid)
SV *self_or_class
SV *hid
CODE:
{
HV *h;
STRLEN hlen;
const char *hstr;
SV **svp;
PERL_UNUSED_VAR(self_or_class);
h = _elem_get_handlers(aTHX);
hstr = SvPV(hid, hlen);
svp = hv_fetch(h, hstr, (I32)hlen, 0);
if (svp && *svp) {
RETVAL = SvREFCNT_inc(*svp);
} else {
RETVAL = &PL_sv_undef;
}
}
OUTPUT:
RETVAL
( run in 1.026 second using v1.01-cache-2.11-cpan-71847e10f99 )