// Smoke-тест Фазы 0: проверяет, что третьест-сторонние библиотеки // (cmark-gfm, libgit2) собраны, слинкованы и работают. #include #include #include #include #include #include #include #include static std::string render_md(const std::string &markdown) { cmark_gfm_core_extensions_ensure_registered(); cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); for (const char *name : {"table", "strikethrough", "autolink", "tasklist"}) { if (cmark_syntax_extension *ext = cmark_find_syntax_extension(name)) cmark_parser_attach_syntax_extension(parser, ext); } cmark_parser_feed(parser, markdown.data(), markdown.size()); cmark_node *doc = cmark_parser_finish(parser); char *html = cmark_render_html(doc, CMARK_OPT_DEFAULT, cmark_parser_get_syntax_extensions(parser)); std::string out = html ? html : ""; free(html); cmark_node_free(doc); cmark_parser_free(parser); return out; } int main() { // --- libgit2 --- int maj = 0, min = 0, rev = 0; git_libgit2_version(&maj, &min, &rev); std::printf("libgit2 %d.%d.%d\n", maj, min, rev); if (maj == 0 && min == 0) { std::fprintf(stderr, "FAIL: libgit2 не подключен\n"); return 1; } // --- cmark-gfm --- std::printf("cmark-gfm %s\n", cmark_version_string()); if (std::strlen(cmark_version_string()) == 0) { std::fprintf(stderr, "FAIL: cmark-gfm не подключен\n"); return 1; } // --- рендер Markdown (CommonMark + GFM: таблица, задача, заголовок) --- const char *md = "# Заголовок\n\n| A | B |\n|---|---|\n| 1 | 2 |\n\n- [ ] задача"; std::string html = render_md(md); std::printf("html: %s\n", html.c_str()); bool ok = html.find("

") != std::string::npos && html.find("