Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

导出 Markdown 行级元素改进 #6472

Closed
88250 opened this issue Nov 3, 2022 · 10 comments
Closed

导出 Markdown 行级元素改进 #6472

88250 opened this issue Nov 3, 2022 · 10 comments
Assignees
Milestone

Comments

@88250
Copy link
Member

88250 commented Nov 3, 2022

    > 1. 这个是符合 Markdown 语法的,不解析
  1. 行级备注没有 Markdown 语法支持
  1. 那么就是markdown导出与数据库中markdown字段的内容错误:
    输入 foo bar 后划选 foo 并设置为加粗, 导出为 markdown 文档时对应的文本为 **foo **bar, 数据库中对应的字段也为 **foo **bar

Originally posted by @Zuoqiu-Yingyi in #6470 (comment)

@88250 88250 self-assigned this Nov 3, 2022
@88250 88250 added this to the 2.4.10 milestone Nov 3, 2022
@Zuoqiu-Yingyi
Copy link
Contributor

Zuoqiu-Yingyi commented Nov 3, 2022

@88250 刚刚又发现了新的相关问题
如下markdown代码粘贴为纯文本/使用 API 更新

123**\-\-\-\-\> 1**{: style="color: red;"}

能够正常显示, 但是导出内容非常奇怪:

123**-****-****-****-****> 1**

数据库 markdown 字段内容也非常奇怪:

123**-**{: style="color:red;"}**-**{: style="color:red;"}**-**{: style="color:red;"}**-**{: style="color:red;"}**> 1**{: style="color:red;"}

期望导出内容为:

123**\-\-\-\-\> 1**

期望数据库中 markdown 字段内容为:

123**\-\-\-\-\> 1**{: style="color: red;"}

@Zuoqiu-Yingyi
Copy link
Contributor

Zuoqiu-Yingyi commented Nov 3, 2022

相关问题2
如下markdown代码粘贴为纯文本/使用 API 更新

\-\-\-\>

能够正常显示:
image
之后划选并设置为粗体会暴露第一个 \ 符号:
image
导出内容:

**\--->**

数据库 markdown 字段内容:

**\--->**

期望导出内容为:

**\-\-\-\>**

期望数据库中 markdown 字段内容为:

**\-\-\-\>**

@88250
Copy link
Member Author

88250 commented Nov 3, 2022

以上两个问题我使用 粘贴为纯文本 测试正常:

issue

导出 Markdown 也正常:

123----> 1

**--->**


使用 API 时测试也是符合预期的(还有点 bug,这个 issue 会修复):

image

导出后:

image

出现 ** 这样看似不正常的结果是因为加颜色以后使用粗体,并将粗体平铺以后的结果。

@88250
Copy link
Member Author

88250 commented Nov 3, 2022

呃,有个问题搞不定,就是转义符 \ 后平铺的结果即使加入零宽空格也无法完全符合 Markdown 规范,因为 ** 匹配的规则,导致夹在中间的 ** 并不会成对匹配。

#6473 中使用新模式主要是为了插入,但是解决不了完全符合 Markdown 规范的导出结果,所以暂时不考虑了。

@Zuoqiu-Yingyi
Copy link
Contributor

以上两个问题我使用 粘贴为纯文本 测试正常:

哦哦, 我没有描述清楚, 应该是使用纯文本复制, 然后使用 Ctrl + V 粘贴, 如下图所示
思源笔记-bug反馈-42

@Zuoqiu-Yingyi
Copy link
Contributor

因为 ** 匹配的规则,导致夹在中间的 ** 并不会成对匹配。

这里能举个实例嘛, 我不太清楚是什么情景❓

@88250
Copy link
Member Author

88250 commented Nov 4, 2022

以上两个问题我使用 粘贴为纯文本 测试正常:

哦哦, 我没有描述清楚, 应该是使用纯文本复制, 然后使用 Ctrl + V 粘贴, 如下图所示 思源笔记-bug反馈-42

这个结果没问题的。

@Zuoqiu-Yingyi
Copy link
Contributor

这个结果没问题的。

该结果的导出与数据库内容也是正常的嘛, 如果是正常的, 可能刚刚顺手修复了

@88250
Copy link
Member Author

88250 commented Nov 4, 2022

因为 ** 匹配的规则,导致夹在中间的 ** 并不会成对匹配。

这里能举个实例嘛, 我不太清楚是什么情景❓

就是目前这个例子,TextMark 结构中不存在嵌套节点结构,并且也不存在转义符节点(Backslash),所以 Strong 中的每个 Backslash 节点会被展开平铺,这样的话就会导致形成首尾相接的 **,为了符合标准 Markdown 语法,我们在首尾相接的情况时插入了零宽空格来区隔两个 Strong,但是如果这样的连续情况出现多次,就会变成 **foo**|**bar**|**baz**(其中 | 表示零宽空格),变成这个结构以后最左侧 ** 和最右侧 ** 实际上就又闭合成了整个 Strong(或者例子中的部分闭合),这样就不符合原始语义了。

这个问题要解决的话需要修改 Lute 将嵌套结构转换为平铺结构那里的算法,或者在导出 Markdown 时将 AST 结构 TextMark->IAL->TextMark->IAL 根据相同 TextMark 类型 IAL 值进行去重合并,变为一个 TextMark 节点,这样就直接渲染为 **foobarbaz** 了,后面的方案可能比较简单一些。

这个问题目前影响不大,改起来比较复杂,所以暂时先不动了,你如果有空的话可以帮忙试下。

@Zuoqiu-Yingyi
Copy link
Contributor

这个问题要解决的话需要修改 Lute 将嵌套结构转换为平铺结构那里的算法,或者在导出 Markdown 时将 AST 结构 TextMark->IAL->TextMark->IAL 根据相同 TextMark 类型 IAL 值进行去重合并,变为一个 TextMark 节点,这样就直接渲染为 **foobarbaz** 了,后面的方案可能比较简单一些。

嗯嗯, 那么先暂时搁置吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants