Dart Markdown 包,如何处理新行

Dart Markdown package, how to handle new lines

我正在尝试制作一个所见即所得的内部工具。我们决定用 contentEditable 来实现这个特性。但是,我们将数据以降价保存到我们的数据库中。所以我必须能够从 html 解析到 md 并返回。对于 html 到 md 我使用 package html2md 并且相反我使用 Markdown package.

我一直遇到的问题是,当你给我的编辑器写信时,像

HEY



After many lines some text

它在 md

中产生这个
HEY







After many lines some text

值得注意的是,它使用了 2 个空格和 2 个 LF 字符(或者至少我认为是这样,但我可能有点不对。)我通过这样解析解决了这个问题

markdownToHtml(data.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;'), inlineSyntaxes: [TextSyntax(String.fromCharCodes([32,32,10,10]),sub: "<div><br></div>")],inlineOnly: true );

内联唯一参数是必要的,因为如果没有它,文本语法由于某种原因无法应用。然而,当我试图实现无序列表的解析时,这个内联才把我咬了一口,这些列表被解析为块。所以我需要一种方法来正确解析这些空行,而无需仅使用内联。

class EmptyLineBlockSyntax extends BlockSyntax{
  RegExp get pattern => RegExp(r'^(?:[ \t][ \t]+)$');

  const EmptyLineBlockSyntax();

  Node parse(BlockParser parser) {
    parser.encounteredBlankLine = true;
    parser.advance();

    return Element('p',[Element.empty('br')]);
  }
}

return markdownToHtml(data.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;'),  blockSyntaxes: [EmptyLineBlockSyntax()]);