Пример #1
0
static void
rndr_hrule(struct hoedown_buffer *ob, void *opaque)
{
	struct hoedown_html_renderopt *options = opaque;
	if (ob->size) hoedown_buffer_putc(ob, '\n');
	hoedown_buffer_puts(ob, USE_XHTML(options) ? "<hr/>\n" : "<hr>\n");
}
Пример #2
0
JNIEXPORT jstring JNICALL Java_com_commonsware_cwac_anddown_AndDown_markdownToHtml
  (JNIEnv *env, jobject o, jstring raw) {
  struct hoedown_buffer *ib, *ob;
  jstring result;
  hoedown_renderer *renderer;
  hoedown_markdown *markdown;
  const char* str;

  str = (*env)->GetStringUTFChars(env, raw, NULL);

  ib = hoedown_buffer_new(INPUT_UNIT);
  hoedown_buffer_puts(ib, str);
  ob = hoedown_buffer_new(OUTPUT_UNIT);

  (*env)->ReleaseStringUTFChars(env, raw, str);

  renderer = hoedown_html_renderer_new(0, 0);
  markdown = hoedown_markdown_new(0, 16, renderer);

  hoedown_markdown_render(ob, ib->data, ib->size, markdown);
  hoedown_markdown_free(markdown);

  result=(*env)->NewStringUTF(env, hoedown_buffer_cstr(ob));

  /* cleanup */
  hoedown_buffer_free(ib);
  hoedown_buffer_free(ob);

  return(result);
}
Пример #3
0
static void
rndr_hrule(hoedown_buffer *ob, const hoedown_renderer_data *data)
{
	hoedown_html_renderer_state *state = data->opaque;
	if (ob->size) hoedown_buffer_putc(ob, '\n');
	hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n");
}
void mdRenderer::render(const QString markdownText)
{
    if(markdownText.isEmpty())
    {
        html ="";
        return;
    }

    QByteArray utf8Data = markdownText.toUtf8();
    hoedown_buffer *doc = hoedown_buffer_new(utf8Data.length());
    hoedown_buffer_puts(doc, utf8Data.data());
    hoedown_buffer *out = hoedown_buffer_new(64);

    hoedown_renderer *renderer = hoedown_html_renderer_new(0, 16);
    hoedown_markdown *markdown = hoedown_markdown_new(0, 16, renderer);

    hoedown_markdown_render(out, doc->data, doc->size, markdown);

    hoedown_markdown_free(markdown);
    hoedown_html_renderer_free(renderer);

    html = QString::fromUtf8(hoedown_buffer_cstr(out));

    hoedown_buffer_free(out);

    html="<!DOCTYPE html> <html> <head> <style type=\"text/css\">"+
            style+
            "</style>"+
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"+
            "</head> <body>"+
            html+
            "</body> </html>";
}
Пример #5
0
static int
rndr_linebreak(struct hoedown_buffer *ob, void *opaque)
{
	struct hoedown_html_renderopt *options = opaque;
	hoedown_buffer_puts(ob, USE_XHTML(options) ? "<br/>\n" : "<br>\n");
	return 1;
}
Пример #6
0
static int
rndr_linebreak(hoedown_buffer *ob, void *opaque)
{
	hoedown_html_renderer_state *state = opaque;
	hoedown_buffer_puts(ob, USE_XHTML(state) ? "<br/>\n" : "<br>\n");
	return 1;
}
Пример #7
0
void
hoedown_escape_html(hoedown_buffer *ob, const uint8_t *data, size_t size, int secure)
{
	size_t i = 0, mark;

	while (1) {
		mark = i;
		while (i < size && HTML_ESCAPE_TABLE[data[i]] == 0) i++;

		/* Optimization for cases where there's nothing to escape */
		if (mark == 0 && i >= size) {
			hoedown_buffer_put(ob, data, size);
			return;
		}

		if (likely(i > mark))
			hoedown_buffer_put(ob, data + mark, i - mark);

		if (i >= size) break;

		/* The forward slash is only escaped in secure mode */
		if (!secure && data[i] == '/') {
			hoedown_buffer_putc(ob, '/');
		} else {
			hoedown_buffer_puts(ob, HTML_ESCAPES[HTML_ESCAPE_TABLE[data[i]]]);
		}

		i++;
	}
}
Пример #8
0
static void
rndr_hrule(hoedown_buffer *ob, void *opaque)
{
	hoedown_html_renderer_state *state = opaque;
	if (ob->size) hoedown_buffer_putc(ob, '\n');
	hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n");
}
Пример #9
0
static void
rndr_header(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *attr, int level, const hoedown_renderer_data *data)
{
	hoedown_header_type header_type = hoedown_document_header_type(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	switch (header_type) {
		case HOEDOWN_HEADER_ATX:
			hoedown_buffer_puts(ob, "HOEDOWN_HEADER_ATX");
			break;
		case HOEDOWN_HEADER_SETEXT:
			hoedown_buffer_puts(ob, "HOEDOWN_HEADER_SETEXT");
			break;
		default:
			break;
	}
	hoedown_buffer_putc(ob, ' ');
}
Пример #10
0
static int
rndr_linebreak(hoedown_buffer *ob, const hoedown_renderer_data *data)
{
	hoedown_html_renderer_state *state = data->opaque;
	hoedown_buffer_puts(ob, USE_XHTML(state) ? "<br/>\n" : "<br>\n");
	return 1;
}
Пример #11
0
static void
rndr_test_link_attributes(hoedown_buffer *ob, const hoedown_buffer *url, const hoedown_renderer_data *data)
{
    hoedown_buffer_puts(ob, " data-url=\"");
    hoedown_buffer_put(ob, url->data, url->size);
    hoedown_buffer_putc(ob, '\"');
}
Пример #12
0
static void
rndr_blockcode(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_buffer *lang, const hoedown_buffer *attr, const hoedown_renderer_data *data)
{
	uint8_t c = hoedown_document_fencedcode_char(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	if (c) hoedown_buffer_putc(ob, c);
	else hoedown_buffer_puts(ob, "unfenced blockcode");
	hoedown_buffer_putc(ob, ' ');
}
Пример #13
0
static int
rndr_link(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *attr, const hoedown_renderer_data *data)
{
	const hoedown_buffer *id;
	hoedown_link_type link_type;

	id = hoedown_document_link_id(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	hoedown_buffer_puts(ob, "id: ");
	if (id) hoedown_buffer_put(ob, id->data, id->size);
	else hoedown_buffer_puts(ob, "no id");

	hoedown_buffer_putc(ob, ' ');

	link_type = hoedown_document_link_type(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	switch (link_type) {
		case HOEDOWN_LINK_INLINE:
			hoedown_buffer_puts(ob, "HOEDOWN_LINK_INLINE");
			break;
		case HOEDOWN_LINK_REFERENCE:
			hoedown_buffer_puts(ob, "HOEDOWN_LINK_REFERENCE");
			break;
		case HOEDOWN_LINK_EMPTY_REFERENCE:
			hoedown_buffer_puts(ob, "HOEDOWN_LINK_EMPTY_REFERENCE");
			break;
		case HOEDOWN_LINK_SHORTCUT:
			hoedown_buffer_puts(ob, "HOEDOWN_LINK_SHORTCUT");
			break;
		default:
			break;
	}

	return 1;
}
Пример #14
0
static int
rndr_footnote_ref(hoedown_buffer *ob, unsigned int num, const hoedown_renderer_data *data)
{
	const hoedown_buffer *id;

	id = hoedown_document_link_id(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	if (id) {
		hoedown_buffer_puts(ob, "id: ");
		hoedown_buffer_put(ob, id->data, id->size);
	}
	hoedown_buffer_putc(ob, ' ');
	return 1;
}
Пример #15
0
static void
rndr_footnote_def(hoedown_buffer *ob, const hoedown_buffer *content, unsigned int num, const hoedown_renderer_data *data)
{
	const hoedown_buffer *id;

	id = hoedown_document_footnote_id(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	if (id) {
		hoedown_buffer_puts(ob, "id: ");
		hoedown_buffer_put(ob, id->data, id->size);
	}
	hoedown_buffer_putc(ob, ' ');
	if (content) hoedown_buffer_put(ob, content->data, content->size);
}
Пример #16
0
static void
rndr_paragraph(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data)
{
	int list_depth, blockquote_depth;

	list_depth = hoedown_document_list_depth(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	blockquote_depth = hoedown_document_blockquote_depth(((hoedown_context_test_renderer_state*) data->opaque)->doc);
	hoedown_buffer_printf(ob, "list depth: %d blockquote depth: %d ", list_depth, blockquote_depth);
	if (content) {
		hoedown_buffer_puts(ob, "paragraph: ");
		hoedown_buffer_put(ob, content->data, content->size);
	}
	hoedown_buffer_putc(ob, '\n');
}
MarkdownDocument *HoedownMarkdownConverter::createDocument(const QString &text, ConverterOptions options)
{
    hoedown_buffer *doc = 0;

    if (text.length() > 0) {
        QString markdownText(text);

        QByteArray utf8Data = markdownText.toUtf8();
        doc = hoedown_buffer_new(utf8Data.length());
        hoedown_buffer_puts(doc, utf8Data.data());
    }

    return new HoedownMarkdownDocument(doc, translateConverterOptions(options));
}
Пример #18
0
static void
rndr_footnotes(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data)
{
	hoedown_html_renderer_state *state = data->opaque;

	if (ob->size) hoedown_buffer_putc(ob, '\n');
	HOEDOWN_BUFPUTSL(ob, "<div class=\"footnotes\">\n");
	hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n");
	HOEDOWN_BUFPUTSL(ob, "<ol>\n");

	if (content) hoedown_buffer_put(ob, content->data, content->size);

	HOEDOWN_BUFPUTSL(ob, "\n</ol>\n</div>\n");
}
Пример #19
0
static void
rndr_footnotes(struct hoedown_buffer *ob, const struct hoedown_buffer *text, void *opaque)
{
	struct hoedown_html_renderopt *options = opaque;

	if (ob->size) hoedown_buffer_putc(ob, '\n');
	BUFPUTSL(ob, "<div class=\"footnotes\">\n");
	hoedown_buffer_puts(ob, USE_XHTML(options) ? "<hr/>\n" : "<hr>\n");
	BUFPUTSL(ob, "<ol>\n");
	
	if (text)
		hoedown_buffer_put(ob, text->data, text->size);
	
	BUFPUTSL(ob, "\n</ol>\n</div>\n");
}
Пример #20
0
static int
rndr_image(struct hoedown_buffer *ob, const struct hoedown_buffer *link, const struct hoedown_buffer *title, const struct hoedown_buffer *alt, void *opaque)
{
	struct hoedown_html_renderopt *options = opaque;
	if (!link || !link->size) return 0;

	BUFPUTSL(ob, "<img src=\"");
	escape_href(ob, link->data, link->size);
	BUFPUTSL(ob, "\" alt=\"");

	if (alt && alt->size)
		escape_html(ob, alt->data, alt->size);

	if (title && title->size) {
		BUFPUTSL(ob, "\" title=\"");
		escape_html(ob, title->data, title->size); }

	hoedown_buffer_puts(ob, USE_XHTML(options) ? "\"/>" : "\">");
	return 1;
}
Пример #21
0
static int
rndr_image(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, void *opaque)
{
	hoedown_html_renderer_state *state = opaque;
	if (!link || !link->size) return 0;

	HOEDOWN_BUFPUTSL(ob, "<img src=\"");
	escape_href(ob, link->data, link->size);
	HOEDOWN_BUFPUTSL(ob, "\" alt=\"");

	if (alt && alt->size)
		escape_html(ob, alt->data, alt->size);

	if (title && title->size) {
		HOEDOWN_BUFPUTSL(ob, "\" title=\"");
		escape_html(ob, title->data, title->size); }

	hoedown_buffer_puts(ob, USE_XHTML(state) ? "\"/>" : "\">");
	return 1;
}
Пример #22
0
void
hoedown_escape_html(struct hoedown_buffer *ob, const uint8_t *src, size_t size, int secure)
{
	size_t i = 0, org, esc = 0;

	while (i < size) {
		org = i;
		while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
			i++;

		if (i > org) {
			if (org == 0) {
				if (i >= size) {
					hoedown_buffer_put(ob, src, size);
					return;
				}

				hoedown_buffer_grow(ob, ESCAPE_GROW_FACTOR(size));
			}

			hoedown_buffer_put(ob, src + org, i - org);
		}

		/* escaping */
		if (i >= size)
			break;

		/* The forward slash is only escaped in secure mode */
		if (src[i] == '/' && !secure) {
			hoedown_buffer_putc(ob, '/');
		} else {
			hoedown_buffer_puts(ob, HTML_ESCAPES[esc]);
		}

		i++;
	}
}