Пример #1
0
static ERL_NIF_TERM to_html_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
  ErlNifBinary  markdown_binary;
  ErlNifBinary  output_binary;
  char         *html;
  size_t        html_len;
  int           options = 0;

  if (argc != 1) {
    return enif_make_badarg(env);
  }

  if(!enif_inspect_binary(env, argv[0], &markdown_binary)){
    return enif_make_badarg(env);
  }

  if (markdown_binary.size <= 0){
    const char *empty_string = "";
    const int   empty_len    = strlen(empty_string);
    enif_alloc_binary(empty_len, &output_binary);
    strncpy((char*)output_binary.data, empty_string, empty_len);
    return enif_make_binary(env, &output_binary);
  }

  html = cmark_markdown_to_html((const char *)markdown_binary.data, markdown_binary.size, options);
  html_len = strlen(html);
  enif_release_binary(&markdown_binary);

  enif_alloc_binary(html_len, &output_binary);
  strncpy((char*)output_binary.data, html, html_len);

  return enif_make_binary(env, &output_binary);
};
Пример #2
0
static void
test_md_to_html(test_batch_runner *runner, const char *markdown,
		const char *expected_html, const char *msg)
{
	char *html = cmark_markdown_to_html(markdown, strlen(markdown));
	STR_EQ(runner, html, expected_html, msg);
	free(html);
}
Пример #3
0
MarkdownToHtml::MarkdownToHtmlResult
MarkdownToHtml::translateCommonMarkToHtml(MarkdownType type, const char *data,
                                             const int length, std::string &outHtml)
{
    char *result = cmark_markdown_to_html(data, length, CMARK_OPT_DEFAULT);
    outHtml.append(result);
    free(result);
    return SUCCESS;
}
Пример #4
0
Файл: main.c Проект: txdv/cmark
static void
line_endings(test_batch_runner *runner)
{
	// Test list with different line endings
	static const char list_with_endings[] =
		"- a\n- b\r\n- c\r- d";
	char *html = cmark_markdown_to_html(list_with_endings,
					    sizeof(list_with_endings) - 1,
		                            CMARK_OPT_DEFAULT);
	STR_EQ(runner, html, "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d</li>\n</ul>\n",
	       "list with different line endings");
	free(html);
}
Пример #5
0
Файл: main.c Проект: txdv/cmark
static void
utf8(test_batch_runner *runner)
{
	// Ranges
	test_char(runner, 1, "\x01", "valid utf8 01");
	test_char(runner, 1, "\x7F", "valid utf8 7F");
	test_char(runner, 0, "\x80", "invalid utf8 80");
	test_char(runner, 0, "\xBF", "invalid utf8 BF");
	test_char(runner, 0, "\xC0\x80", "invalid utf8 C080");
	test_char(runner, 0, "\xC1\xBF", "invalid utf8 C1BF");
	test_char(runner, 1, "\xC2\x80", "valid utf8 C280");
	test_char(runner, 1, "\xDF\xBF", "valid utf8 DFBF");
	test_char(runner, 0, "\xE0\x80\x80", "invalid utf8 E08080");
	test_char(runner, 0, "\xE0\x9F\xBF", "invalid utf8 E09FBF");
	test_char(runner, 1, "\xE0\xA0\x80", "valid utf8 E0A080");
	test_char(runner, 1, "\xED\x9F\xBF", "valid utf8 ED9FBF");
	test_char(runner, 0, "\xED\xA0\x80", "invalid utf8 EDA080");
	test_char(runner, 0, "\xED\xBF\xBF", "invalid utf8 EDBFBF");
	test_char(runner, 0, "\xF0\x80\x80\x80", "invalid utf8 F0808080");
	test_char(runner, 0, "\xF0\x8F\xBF\xBF", "invalid utf8 F08FBFBF");
	test_char(runner, 1, "\xF0\x90\x80\x80", "valid utf8 F0908080");
	test_char(runner, 1, "\xF4\x8F\xBF\xBF", "valid utf8 F48FBFBF");
	test_char(runner, 0, "\xF4\x90\x80\x80", "invalid utf8 F4908080");
	test_char(runner, 0, "\xF7\xBF\xBF\xBF", "invalid utf8 F7BFBFBF");
	test_char(runner, 0, "\xF8", "invalid utf8 F8");
	test_char(runner, 0, "\xFF", "invalid utf8 FF");

	// Incomplete byte sequences at end of input
	test_incomplete_char(runner, "\xE0\xA0", "invalid utf8 E0A0");
	test_incomplete_char(runner, "\xF0\x90\x80", "invalid utf8 F09080");

	// Invalid continuation bytes
	test_continuation_byte(runner, "\xC2\x80");
	test_continuation_byte(runner, "\xE0\xA0\x80");
	test_continuation_byte(runner, "\xF0\x90\x80\x80");

	// Test string containing null character
	static const char string_with_null[] = "((((\0))))";
	char *html = cmark_markdown_to_html(string_with_null,
					    sizeof(string_with_null) - 1,
		                            CMARK_OPT_DEFAULT);
	STR_EQ(runner, html, "<p>((((" UTF8_REPL "))))</p>\n",
	       "utf8 with U+0000");
	free(html);
}
Пример #6
0
static void
test_continuation_byte(test_batch_runner *runner, const char *utf8)
{
	int len = strlen(utf8);

	for (int pos = 1; pos < len; ++pos) {
		char buf[20];
		sprintf(buf, "((((%s))))", utf8);
		buf[4+pos] = '\x20';

		char expected[50];
		strcpy(expected, "<p>((((" UTF8_REPL "\x20");
		for (int i = pos + 1; i < len; ++i) {
			strcat(expected, UTF8_REPL);
		}
		strcat(expected, "))))</p>\n");

		char *html = cmark_markdown_to_html(buf, strlen(buf));
		STR_EQ(runner, html, expected,
		       "invalid utf8 continuation byte %d/%d", pos, len);
		free(html);
	}
}