【问题标题】:Parsing markdown with C discount library使用 C 折扣库解析 markdown
【发布时间】:2014-12-21 05:06:20
【问题描述】:

我正在编写一个降价编辑器 (C++/Qt),并且为此目的使用了折扣库。

文档:http://www.pell.portland.or.us/~orc/Code/discount/

我编写了将 HTML 转换为 markdown 的代码。

#include <mkdio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    FILE *out;
    out = fopen("/home/abdeljalil/test.html","w");
    const char* mkdown= "__hello__";
    MMIOT *doc;
    int flags = MKD_TOC|MKD_SAFELINK|MKD_EXTRA_FOOTNOTE;
    doc = mkd_string(mkdown,strlen(mkdown),flags);
    mkd_compile(doc,flags);
    mkd_generatehtml(doc,out);
    mkd_cleanup(doc);
}

使用输出文件是一种有效的方法吗? (每次在编辑器中更改降价时,我都会更新 GUI) 我可以将 HTML 直接写入字符串而不是文件吗? (找不到这样的功能) 代码优化还有什么注意事项吗?

【问题讨论】:

  • “我正在使用折扣库” - 这在短期内可能看起来像是节省了,但是当涉及到软件库时......不要使用便宜的品牌。从长远来看,您会付出代价。
  • 使用 Geicode 在 15 分钟内节省 15 行代码

标签: c++ c markdown discount


【解决方案1】:

Markdown 有点臭名昭著,因为它有点被黑客攻击、不标准和矛盾。任何尝试编写 Markdown 到可视化系统的人(包括我自己)都可以告诉您它是多么令人费解/令人抓狂。我不知道“折扣”,但请参阅 CommonMark.org 了解以前 StackOverflow-Jeff 和其他人的一些当前状态。

在每次编辑时对文档进行完整的重新格式化(进入空闲状态以免阻止用户输入)以生成降价预览对于中等大小的文档可能是可以的。没有看过 StackOverflow JavaScript,但它可能正是这样做的。

您的图书馆文档说:

markdown 库中有 17 个公共函数,分为三类:

这些函数是基于文件的。据我所知,您不会找到任何独立于平台的便利层,允许您传递std::stringstream 或以其他方式作为C 流FILE *

cstdio streams vs iostream streams?

不过,您可以查看 fmemopen 以避免创建文件并写入缓冲区:

http://www.gnu.org/software/libc/manual/html_node/String-Streams.html

所以也许调查一下。

Finding the size of a file created by fmemopen

更一般地说,我可能会建议从头开始在 Qt 编辑器中包装一个基于 C 的随机 FILE 流 Markdown 库是有点愚蠢的差事。要么拥抱一个现有的项目,比如CuteMarkEd,要么嵌入一个 JavaScript 引擎来运行常见的 markdown 代码,或者......。

【讨论】:

  • @Abdeljalil 另外,考虑StackEdit 和嵌入WebKit 之类的东西。我并不是在开玩笑说不要乱搞“折扣”图书馆。这可能没有未来;您不妨接受一些多人使用的东西,这些东西没有硬编码为原始 C 中的 17 个函数接口,面对看起来比看起来更难的规范,这种接口不太可能被维护。
猜你喜欢
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 2021-06-15
  • 2018-02-26
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多