// Like make_str, but parses entities. // Returns an inline sequence consisting of str and entity elements. static cmark_node *make_str_with_entities(cmark_chunk *content) { cmark_strbuf unescaped = GH_BUF_INIT; if (houdini_unescape_html(&unescaped, content->data, (size_t)content->len)) { return make_str(cmark_chunk_buf_detach(&unescaped)); } else { return make_str(*content); } }
// Like make_str, but parses entities. static cmark_node *make_str_with_entities(cmark_mem *mem, cmark_chunk *content) { cmark_strbuf unescaped = CMARK_BUF_INIT(mem); if (houdini_unescape_html(&unescaped, content->data, content->len)) { return make_str(mem, cmark_chunk_buf_detach(&unescaped)); } else { return make_str(mem, *content); } }
int main() { const char TEST_STRING[] = "This ♣ is & just "an example♦""; struct buf *buffer; buffer = bufnew(128); houdini_unescape_html(buffer, TEST_STRING, strlen(TEST_STRING)); printf("Result: %.*s\n", (int)buffer->size, buffer->data); bufrelease(buffer); return 0; }
void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, size_t size) { if (!houdini_unescape_html(ob, src, size)) cmark_strbuf_put(ob, src, size); }