changelog
- 【refactor】resourceOperation 重构为 resource_manager,大幅提升性能,有效避免潜在 BUG,重构原因见下文
- 【refactor】移除插件 help,将功能迁移到 preferences 中
- 【feat】支持 AI Docs,用户可以通过 DeepWiki 向 AI 提问 typora_plugin 的相关技术细节
- 【feat】【core \ dialog-form】支持 hint 组件,支持 listener,优化内部接口
- 【feat】【preferences】使用上述 hint 组件,为复杂配置选项添加说明文案
- 【chg】【updater】【templater】优化 UI,用户交互更友好
- 【chg】【window_tab】配置选项 JETBRAINS_DRAG_STYLE 替换为 DRAG_STYLE
- 【chg】优化 bin 目录中的安装/卸载脚本
- 【chg】【echarts】【fence_enhance】优化代码
- 【chg】【help】调整右键菜单选项
- 【chore】新增 build 目录,快速构建插件依赖(为了保证插件独立性,typora_plugin 采用分布式依赖)
- 【doc】优化 readme 文案
【refactor】【search_multi】重构 searcher,将 markdownIt 替换为 mdast,提供更多组件支持,实现更优雅(大文件解析性能下降 8x,无奈放弃了)
与 AI 做朋友
此版本后,如有使用上的问题,可以向 AI 提问:
很多人没有意识到 markdown 的图片语法 我看了 CommonMark 的 Spec:
我试了试手头的 Markdown 编辑器,发现存在以下几种方法:
为了处理此问题,我之前设计的方案是 回退匹配+检测。逻辑太复杂了,需要回流检测,性能不好。具体做法如下:对于文本 首先贪婪匹配到 若不存在,则回退匹配为 递归处理上述逻辑
经过尝试,我发现 Typora 采用了上述的第四种方法,依照 Typora 的外部表现特征,设计如下文法,并依照此文法做了一个简易的递归向下解析器,在文法层面就去除了二义性,无需回流检测,简单、优雅、高效。
吐槽:本来无需文法解析器,使用递归正则表达式即可完成匹配,辣鸡 JavaScript,不支持递归正则,不如 Python 的一根毛。
resourceOperation 重构原因

是 存在二义性 的。核心问题就是 uri 可能出现小括号。比如:.png)123)
,图片路径究竟是 ./img(
还是 ./img().png
还是 ./img().png)123
?
[link](\(foo\))
<>
包裹,如 .png>)
.png)123)456
.png)123)
,此时 uri 为 ./image(1).png)123
,检测是否存在此文件
.png)
<MarkdownImage> ::= ''
<AltContent> ::= <CharExclCloseBracket> <AltContent> | ε
<UriContent> ::= <UriItem> <UriContent> | ε
<UriItem> ::= <CharExclParens> | '(' <UriContent> ')'
<CharExclCloseBracket> ::= [^\[\]\n]
<CharExclParens> ::= [^\(\)\n]