static VALUE rb_rdiscount_toc_content(int argc, VALUE *argv, VALUE self) { char *res; int szres; int flags = rb_rdiscount__get_flags(self); /* grab char pointer to markdown input text */ VALUE text = rb_funcall(self, rb_intern("text"), 0); Check_Type(text, T_STRING); /* allocate a ruby string buffer and wrap it in a stream */ VALUE buf = rb_str_buf_new(4096); MMIOT *doc = mkd_string(RSTRING_PTR(text), RSTRING_LEN(text), flags); if ( mkd_compile(doc, flags) ) { szres = mkd_toc(doc, &res); if ( szres != EOF ) { rb_str_cat(buf, res, szres); rb_str_cat(buf, "\n", 1); } } mkd_cleanup(doc); return buf; }
/* {{{ proto string MarkdownDocument::getToc() */ PHP_METHOD(markdowndoc, getToc) { discount_object *dobj; char *data = NULL; int status; if (zend_parse_parameters_none() == FAILURE) { RETURN_FALSE; } if ((dobj = markdowndoc_get_object(getThis(), 1 TSRMLS_CC)) == NULL) { RETURN_FALSE; } status = mkd_toc(dobj->markdoc, &data); if (status < 0) { /* no doc->ctx, shouldn't happen */ zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Call to library function mkd_toc() failed (should not happen!)"); RETURN_FALSE; } /* status == 0 can indicate either empty string or no MKD_TOC, we * must use data to disambiguate */ if (data == NULL) { RETURN_FALSE; /* no MKD_TOC */ } /* empty string included in general case */ RETURN_STRINGL(data, status, 0); }
/* write an header index */ int mkd_generatetoc(Document *p, FILE *out) { char *buf = 0; int sz = mkd_toc(p, &buf); int ret = EOF; if ( sz > 0 ) ret = fwrite(buf, sz, 1, out); if ( buf ) free(buf); return ret; }
QString DiscountMarkdownConverter::renderAsTableOfContents(MarkdownDocument *document) { QString toc; if (document) { DiscountMarkdownDocument *doc = dynamic_cast<DiscountMarkdownDocument*>(document); if (doc && doc->document()) { // generate table of contents char *out; mkd_toc(doc->document(), &out); toc = QString::fromUtf8(out); } } return toc; }