SEXP rmd_render_smartypants(SEXP Sfile, SEXP Soutput, SEXP Stext) { struct buf *ib, *ob; SEXP ret_val = R_NilValue; Rboolean success; ib = bufnew(READ_UNIT); if (!ib) error("Out of memory!"); success = rmd_input_to_buf(Sfile, Stext, ib); if (!success) { bufrelease(ib); error("Input error!"); } ob = bufnew(OUTPUT_UNIT); if (!ob) error("Out of memory!"); sdhtml_smartypants(ob,ib->data,ib->size); success = rmd_buf_to_output(ob,Soutput,&ret_val); bufrelease(ib); bufrelease(ob); if (!success) error("Output error!"); return ret_val; }
static VALUE rb_redcarpet_smartypants_render(VALUE self, VALUE text) { VALUE result; struct buf *output_buf; Check_Type(text, T_STRING); output_buf = bufnew(128); sdhtml_smartypants(output_buf, RSTRING_PTR(text), RSTRING_LEN(text)); result = redcarpet_str_new(output_buf->data, output_buf->size, rb_enc_get(text)); bufrelease(output_buf); return result; }
void tdRenderer::render(QByteArray ba) { bufreset(m_buffer); QWebElement element = m_body.findFirst(".__tmp__"); const char *data = ba.data(); uint beg = 0; size_t e = ba.size(); int prevsize = 0; int pos = m_fframe; while (beg < e) { const char *offs = data + beg; int n = td_markdown_render(m_buffer, (const uint8_t *) offs, e - beg, m_markdown); QByteArray bytes((const char *) m_buffer->data + prevsize, m_buffer->size - prevsize); m_sizes.insert(pos, n); m_indices.insert(pos++, m_index); if (m_pants) { bufreset(m_tmpbuffer); sdhtml_smartypants(m_tmpbuffer, (const uint8_t *) bytes.constData(), bytes.size()); QByteArray pants((const char *) m_tmpbuffer->data, m_tmpbuffer->size); element.appendInside(pants); } else { element.appendInside(bytes); } QWebElementCollection children = element.findAll("*"); QString klassName = "__" % QString::number(m_index++) % "__"; QWebElementCollection::const_iterator i = children.constBegin(); for (; i != children.constEnd(); ++i) { QWebElement e = *i; e.addClass(klassName); if (!e.parent().hasClass(klassName)) element.prependOutside(e.takeFromDocument()); } if (m_body.findFirst("." % klassName).isNull()) element.prependOutside("<span class=\"" % klassName % "\"></span>"); beg += n; prevsize = m_buffer->size; } element.takeFromDocument(); }
int main(int argc, char **argv) { struct buf *ib, *ob; size_t ret; FILE *in = stdin; /* opening the file if given from the command line */ if (argc > 1) { in = fopen(argv[1], "r"); if (!in) { fprintf(stderr, "Unable to open input file \"%s\": %s\n", argv[0], strerror(errno)); return 1; } } /* reading everything */ ib = bufnew(READ_UNIT); bufgrow(ib, READ_UNIT); while ((ret = fread(ib->data + ib->size, 1, ib->asize - ib->size, in)) > 0) { ib->size += ret; bufgrow(ib, ib->size + READ_UNIT); } if (in != stdin) fclose(in); /* performing markdown parsing */ ob = bufnew(OUTPUT_UNIT); sdhtml_smartypants(ob, ib->data, ib->size); /* writing the result to stdout */ (void)fwrite(ob->data, 1, ob->size, stdout); /* cleanup */ bufrelease(ib); bufrelease(ob); return 0; }
static Rboolean render_to_html(struct buf *ib, struct buf *ob, SEXP Soptions, SEXP Sextensions) { struct sd_callbacks callbacks; struct html_renderopt renderopt; unsigned int exts=0, options=0; struct sd_markdown *markdown; struct buf *htmlbuf; Rboolean toc = FALSE, smarty = FALSE; /* Marshal extensions */ if (isString(Sextensions)) { int i; for (i = 0; i < LENGTH(Sextensions); i++) { if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "NO_INTRA_EMPHASIS") == 0) exts |= MKDEXT_NO_INTRA_EMPHASIS; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "TABLES") == 0) exts |= MKDEXT_TABLES; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "FENCED_CODE") == 0) exts |= MKDEXT_FENCED_CODE; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "AUTOLINK") == 0) exts |= MKDEXT_AUTOLINK; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "STRIKETHROUGH") == 0) exts |= MKDEXT_STRIKETHROUGH; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "LAX_SPACING") == 0) exts |= MKDEXT_LAX_SPACING; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "SPACE_HEADERS") == 0) exts |= MKDEXT_SPACE_HEADERS; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "SUPERSCRIPT") == 0) exts |= MKDEXT_SUPERSCRIPT; else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)), "LATEX_MATH") == 0) exts |= MKDEXT_LATEX_MATH; } } /* Marshal HTML options */ if (isString(Soptions)) { int i; for (i = 0; i < LENGTH(Soptions); i++) { if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SKIP_HTML") == 0) options |= HTML_SKIP_HTML; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SKIP_STYLE") == 0) options |= HTML_SKIP_STYLE; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SKIP_IMAGES") == 0) options |= HTML_SKIP_IMAGES; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SKIP_LINKS") == 0) options |= HTML_SKIP_LINKS; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SAFELINK") == 0) options |= HTML_SAFELINK; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "TOC") == 0) { options |= HTML_TOC; toc = TRUE; } else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "HARD_WRAP") == 0) options |= HTML_HARD_WRAP; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "USE_XHTML") == 0) options |= HTML_USE_XHTML; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "ESCAPE") == 0) options |= HTML_ESCAPE; else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)), "SMARTYPANTS") == 0) smarty = TRUE; } } htmlbuf = bufnew(OUTPUT_UNIT); if (!htmlbuf) { RMD_WARNING_NOMEM; return FALSE; } if (toc==TRUE) { struct buf *tocbuf = bufnew(OUTPUT_UNIT); if (!tocbuf) { RMD_WARNING_NOMEM; return FALSE; } sdhtml_toc_renderer(&callbacks, &renderopt); markdown = sd_markdown_new(exts,16,&callbacks,(void *)&renderopt); if (!markdown) { RMD_WARNING_NOMEM; return FALSE; } sd_markdown_render(tocbuf, ib->data, ib->size, markdown); sd_markdown_free(markdown); bufputs(htmlbuf,"<div id=\"toc\">\n"); bufputs(htmlbuf,"<div id=\"toc_header\">Table of Contents</div>\n"); bufput(htmlbuf,tocbuf->data,tocbuf->size); bufputs(htmlbuf,"</div>\n"); bufputs(htmlbuf,"\n"); bufrelease(tocbuf); } sdhtml_renderer(&callbacks, &renderopt, options); markdown = sd_markdown_new(exts,16,&callbacks,(void *)&renderopt); if (!markdown) { RMD_WARNING_NOMEM; return FALSE; } sd_markdown_render(htmlbuf, ib->data, ib->size, markdown); sd_markdown_free(markdown); if (smarty==TRUE) { struct buf *smartybuf = bufnew(OUTPUT_UNIT); if (!smartybuf) { RMD_WARNING_NOMEM; return FALSE; } sdhtml_smartypants(smartybuf,htmlbuf->data,htmlbuf->size); bufrelease(htmlbuf); htmlbuf = smartybuf; } bufput(ob,htmlbuf->data,htmlbuf->size); bufrelease(htmlbuf); return TRUE; }