XML-Hash-XS
view release on metacpan or search on metacpan
src/xh_xml.h view on Meta::CPAN
XH_WRITER_RESIZE_BUFFER(writer, buf, content_len * 5)
}
XH_BUFFER_WRITE_ESCAPE_STRING(buf, content, content_len);
if (writer->indent) {
XH_BUFFER_WRITE_CHAR(buf, '\n')
}
}
XH_INLINE void
xh_xml_write_comment(xh_writer_t *writer, SV *value)
{
size_t indent_len;
xh_perl_buffer_t *buf;
xh_char_t *content;
size_t content_len;
STRLEN str_len;
buf = &writer->main_buf;
if (value == NULL) {
content = XH_EMPTY_STRING;
content_len = 0;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
content_len = str_len;
}
if (writer->trim && content_len) {
content = xh_str_trim(content, &content_len);
}
if (writer->indent) {
indent_len = writer->indent_count * writer->indent;
if (indent_len > sizeof(indent_string)) {
indent_len = sizeof(indent_string);
}
/* "<!--" + "-->" */
XH_WRITER_RESIZE_BUFFER(writer, buf, indent_len + content_len + 7)
XH_BUFFER_WRITE_LONG_STRING(buf, indent_string, indent_len);
}
else {
/* "<!--" + "-->" */
XH_WRITER_RESIZE_BUFFER(writer, buf, content_len + 7)
}
XH_BUFFER_WRITE_CHAR4(buf, "<!--")
XH_BUFFER_WRITE_LONG_STRING(buf, content, content_len);
XH_BUFFER_WRITE_CHAR3(buf, "-->")
if (writer->indent) {
XH_BUFFER_WRITE_CHAR(buf, '\n')
}
}
XH_INLINE void
xh_xml_write_cdata(xh_writer_t *writer, SV *value)
{
size_t indent_len;
xh_perl_buffer_t *buf;
xh_char_t *content;
size_t content_len;
STRLEN str_len;
buf = &writer->main_buf;
if (value == NULL) {
content = XH_EMPTY_STRING;
content_len = 0;
}
else {
content = XH_CHAR_CAST SvPV(value, str_len);
content_len = str_len;
}
if (writer->trim && content_len) {
content = xh_str_trim(content, &content_len);
}
if (writer->indent) {
indent_len = writer->indent_count * writer->indent;
if (indent_len > sizeof(indent_string)) {
indent_len = sizeof(indent_string);
}
/* "<![CDATA[" + "]]>" */
XH_WRITER_RESIZE_BUFFER(writer, buf, indent_len + content_len + 12)
XH_BUFFER_WRITE_LONG_STRING(buf, indent_string, indent_len);
}
else {
/* "<![CDATA[" + "]]>" */
XH_WRITER_RESIZE_BUFFER(writer, buf, content_len + 12)
}
XH_BUFFER_WRITE_CHAR9(buf, "<![CDATA[")
XH_BUFFER_WRITE_LONG_STRING(buf, content, content_len);
XH_BUFFER_WRITE_CHAR3(buf, "]]>")
if (writer->indent) {
XH_BUFFER_WRITE_CHAR(buf, '\n')
}
}
XH_INLINE void
xh_xml_write_start_tag(xh_writer_t *writer, xh_char_t *name, size_t name_len)
{
size_t indent_len;
xh_perl_buffer_t *buf;
buf = &writer->main_buf;
if (writer->indent) {
indent_len = writer->indent_count * writer->indent;
if (indent_len > sizeof(indent_string)) {
indent_len = sizeof(indent_string);
}
( run in 2.303 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )