如何处理 markdown 到 jsx 解析的显式中断?

问题描述 投票:0回答:1

我找了好久,好像没有人提到这个问题。

我们使用TipTap / ProseMirror作为文本编辑器,以及prosemirror-markdown的默认序列化器/解析器利用反斜杠前面的换行符

\\n
)来表示软中断,我认为双空格可能存在类似的问题-换行符之前(
  \n
),据我所知,这是markdown中的显式中断(常见标记?)

在每周下载量超过 500 万次的 markdown-to-jsx 中,我似乎无法确定为什么它不识别换行符之前的反斜杠。似乎只需要单个换行符(

\n
)。

问题在于反斜杠是在解析后的 jsx 中呈现的。我认为前面的空格也是如此。

我错过了什么吗?我正在摆弄

forceBlock: true
forceInline: true
但我不知道这些是否相关,并且我的文本已经在段落中呈现,只是反斜杠换行符没有表示为
<br>

markdown prose-mirror markdown-to-jsx prosemirror-markdown
1个回答
0
投票

好吧,所以我认为这是 markdown-to-jsx 的一个错误,我在这里提交了它。

值得庆幸的是,换行符前面的双空格似乎可以被正确识别并解析为

<br>
标签。

因此,对于我们来说,目前来说,它可以调整 prosemirror-markdown 序列化器函数以实现硬中断(其中,hardBreak 是来自

doc.type.schema
的节点名称)

export const markdownSerializer = new MarkdownSerializer({
  ...defaultMarkdownSerializer.nodes,
  // hardBreak: defaultMarkdownSerializer.nodes.hard_break,
  hardBreak(state, node, parent, index) {
    for (let i = index + 1; i < parent.childCount; i++)
      if (parent.child(i).type != node.type) {
        state.write("  \n"); // <-- this line is different, the default is "\\\n"
        return;
      }
  },
  {
    ...defaultMarkdownSerializer.marks,
  },
  {
    ...defaultMarkdownSerializer.options,
  }
});

希望这对其他人有帮助。

这似乎是在 html、prosemirror 和 markdown 之间进行转换的最安全的选择(对于许多换行问题之一)。

© www.soinside.com 2019 - 2024. All rights reserved.