static VALUE rb_redcarpet_md_render(VALUE self, VALUE text) { VALUE rb_rndr; struct buf *output_buf; struct sd_markdown *markdown; Check_Type(text, T_STRING); check_utf8_encoding(text); rb_rndr = rb_iv_get(self, "@renderer"); Data_Get_Struct(self, struct sd_markdown, markdown); if (rb_respond_to(rb_rndr, rb_intern("preprocess"))) text = rb_funcall(rb_rndr, rb_intern("preprocess"), 1, text); /* initialize buffers */ output_buf = bufnew(128); /* render the magic */ sd_markdown_render( output_buf, RSTRING_PTR(text), RSTRING_LEN(text), markdown); /* build the Ruby string */ text = redcarpet_str_new(output_buf->data, output_buf->size); bufrelease(output_buf); if (rb_respond_to(rb_rndr, rb_intern("postprocess"))) text = rb_funcall(rb_rndr, rb_intern("postprocess"), 1, text); return text; }
/** * Generic template */ static VALUE rb_eu__generic(VALUE str, houdini_cb do_escape) { gh_buf buf = GH_BUF_INIT; if (NIL_P(str)) return eu_new_str("", 0); Check_Type(str, T_STRING); check_utf8_encoding(str); if (do_escape(&buf, (const uint8_t *)RSTRING_PTR(str), RSTRING_LEN(str))) { VALUE result = eu_new_str(buf.ptr, buf.size); gh_buf_free(&buf); return result; } return str; }
static VALUE rb_eu_escape_html_as_html_safe(VALUE self, VALUE str) { VALUE result; int secure = g_html_secure; gh_buf buf = GH_BUF_INIT; Check_Type(str, T_STRING); check_utf8_encoding(str); if (houdini_escape_html0(&buf, (const uint8_t *)RSTRING_PTR(str), RSTRING_LEN(str), secure)) { result = new_html_safe_string(buf.ptr, buf.size); gh_buf_free(&buf); } else { result = new_html_safe_string(RSTRING_PTR(str), RSTRING_LEN(str)); } rb_ivar_set(result, ID_at_html_safe, Qtrue); return result; }
static VALUE rb_eu_escape_html(int argc, VALUE *argv, VALUE self) { VALUE str, rb_secure; gh_buf buf = GH_BUF_INIT; int secure = g_html_secure; if (rb_scan_args(argc, argv, "11", &str, &rb_secure) == 2) { if (rb_secure == Qfalse) { secure = 0; } } Check_Type(str, T_STRING); check_utf8_encoding(str); if (houdini_escape_html0(&buf, (const uint8_t *)RSTRING_PTR(str), RSTRING_LEN(str), secure)) { VALUE result = eu_new_str(buf.ptr, buf.size); gh_buf_free(&buf); return result; } return str; }