我找了好久,好像没有人提到这个问题。
我们使用TipTap / ProseMirror作为文本编辑器,以及prosemirror-markdown的默认序列化器/解析器利用反斜杠前面的换行符(
\\n
)来表示软中断,我认为双空格可能存在类似的问题-换行符之前( \n
),据我所知,这是markdown中的显式中断(常见标记?)
在每周下载量超过 500 万次的 markdown-to-jsx 中,我似乎无法确定为什么它不识别换行符之前的反斜杠。似乎只需要单个换行符(
\n
)。
问题在于反斜杠是在解析后的 jsx 中呈现的。我认为前面的空格也是如此。
我错过了什么吗?我正在摆弄
forceBlock: true
和 forceInline: true
但我不知道这些是否相关,并且我的文本已经在段落中呈现,只是反斜杠换行符没有表示为 <br>
好吧,所以我认为这是 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 之间进行转换的最安全的选择(对于许多换行问题之一)。