XML-Hash-XS
view release on metacpan or search on metacpan
src/xh_dom.h view on Meta::CPAN
xh_char_t *content;
size_t content_len;
STRLEN str_len;
xh_char_t ch;
if (value == NULL) {
content = XH_EMPTY_STRING;
content_len = 0;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
content_len = str_len;
}
if (ctx->opts.trim && content_len) {
content = xh_str_trim(content, &content_len);
ch = content[content_len];
content[content_len] = '\0';
xmlNodeAddContentLen(rootNode, BAD_CAST content, content_len);
content[content_len] = ch;
}
else {
xmlNodeAddContentLen(rootNode, BAD_CAST content, content_len);
}
}
XH_INLINE void
xh_dom_new_comment(xh_h2x_ctx_t *ctx, xmlNodePtr rootNode, SV *value)
{
xh_char_t *content;
size_t content_len;
STRLEN str_len;
xh_char_t ch;
if (value == NULL) {
content = XH_EMPTY_STRING;
content_len = 0;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
content_len = str_len;
}
if (ctx->opts.trim && content_len) {
content = xh_str_trim(content, &content_len);
ch = content[content_len];
content[content_len] = '\0';
(void) xmlAddChild(rootNode, xmlNewDocComment(rootNode->doc, BAD_CAST content));
content[content_len] = ch;
}
else {
(void) xmlAddChild(rootNode, xmlNewDocComment(rootNode->doc, BAD_CAST content));
}
}
XH_INLINE void
xh_dom_new_cdata(xh_h2x_ctx_t *ctx, xmlNodePtr rootNode, SV *value)
{
xh_char_t *content;
size_t content_len;
STRLEN str_len;
if (value == NULL) {
content = XH_EMPTY_STRING;
content_len = 0;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
content_len = str_len;
}
if (ctx->opts.trim && content_len) {
content = xh_str_trim(content, &content_len);
}
(void) xmlAddChild(rootNode, xmlNewCDataBlock(rootNode->doc, BAD_CAST content, content_len));
}
XH_INLINE void
xh_dom_new_attribute(xh_h2x_ctx_t *XH_UNUSED(ctx), xmlNodePtr rootNode, xh_char_t *name, size_t name_len, SV *value)
{
xh_char_t *content;
STRLEN str_len;
xh_char_t *tmp;
if (value == NULL) {
content = NULL;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
}
tmp = NULL;
if (name[0] >= '1' && name[0] <= '9') {
tmp = malloc(name_len + 1);
if (tmp == NULL) {
croak("Memory allocation error");
}
(void) xh_strcpy(&tmp[1], name);
name = tmp;
name[0] = '_';
}
(void) xmlSetProp(rootNode, BAD_CAST name, BAD_CAST content);
if (tmp != NULL) {
free(tmp);
}
}
#endif
#endif /* _XH_DOM_H_ */
( run in 0.585 second using v1.01-cache-2.11-cpan-39bf76dae61 )