@cherry-markdown/cherry-markdown-dev 0.9.0-dev.202504110650.834443a → 0.9.0-dev.202504160300.d23d141

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +2 -2
  2. package/dist/addons/advance/cherry-table-echarts-plugin.js +1 -1
  3. package/dist/addons/cherry-code-block-mermaid-plugin.js +1 -1
  4. package/dist/cherry-markdown.core.common.js +1 -1
  5. package/dist/cherry-markdown.core.js +1 -1
  6. package/dist/cherry-markdown.engine.core.common.js +1 -1
  7. package/dist/cherry-markdown.engine.core.esm.js +1 -1
  8. package/dist/cherry-markdown.engine.core.js +1 -1
  9. package/dist/cherry-markdown.esm.js +1 -1
  10. package/dist/cherry-markdown.js +1 -1
  11. package/dist/cherry-markdown.min.js +1 -1
  12. package/dist/fonts/ch-icon.eot +0 -0
  13. package/dist/fonts/ch-icon.ttf +0 -0
  14. package/dist/fonts/ch-icon.woff +0 -0
  15. package/dist/fonts/ch-icon.woff2 +0 -0
  16. package/package.json +1 -3
  17. package/src/Cherry.config.js +0 -634
  18. package/src/Cherry.js +0 -1104
  19. package/src/CherryStatic.js +0 -70
  20. package/src/Editor.js +0 -748
  21. package/src/Engine.js +0 -402
  22. package/src/Event.js +0 -140
  23. package/src/Factory.js +0 -180
  24. package/src/Logger.js +0 -31
  25. package/src/Previewer.js +0 -1192
  26. package/src/Sanitizer.js +0 -4
  27. package/src/Sanitizer.node.js +0 -7
  28. package/src/UrlCache.js +0 -98
  29. package/src/addons/advance/cherry-table-echarts-plugin.js +0 -170
  30. package/src/addons/cherry-code-block-mermaid-plugin.js +0 -158
  31. package/src/addons/cherry-code-block-plantuml-plugin.js +0 -106
  32. package/src/core/HookCenter.js +0 -297
  33. package/src/core/HooksConfig.js +0 -105
  34. package/src/core/ParagraphBase.js +0 -332
  35. package/src/core/SentenceBase.js +0 -65
  36. package/src/core/SyntaxBase.js +0 -194
  37. package/src/core/hooks/AutoLink.js +0 -232
  38. package/src/core/hooks/BackgroundColor.js +0 -46
  39. package/src/core/hooks/Blockquote.js +0 -70
  40. package/src/core/hooks/Br.js +0 -85
  41. package/src/core/hooks/CodeBlock.js +0 -456
  42. package/src/core/hooks/Color.js +0 -46
  43. package/src/core/hooks/CommentReference.js +0 -96
  44. package/src/core/hooks/Detail.js +0 -108
  45. package/src/core/hooks/Emoji.config.js +0 -1825
  46. package/src/core/hooks/Emoji.js +0 -119
  47. package/src/core/hooks/Emphasis.js +0 -113
  48. package/src/core/hooks/Footnote.js +0 -125
  49. package/src/core/hooks/FrontMatter.js +0 -51
  50. package/src/core/hooks/Header.js +0 -234
  51. package/src/core/hooks/HighLight.js +0 -37
  52. package/src/core/hooks/Hr.js +0 -52
  53. package/src/core/hooks/HtmlBlock.js +0 -199
  54. package/src/core/hooks/Image.js +0 -174
  55. package/src/core/hooks/InlineCode.js +0 -48
  56. package/src/core/hooks/InlineMath.js +0 -108
  57. package/src/core/hooks/Link.js +0 -160
  58. package/src/core/hooks/List.js +0 -264
  59. package/src/core/hooks/MathBlock.js +0 -104
  60. package/src/core/hooks/Panel.js +0 -145
  61. package/src/core/hooks/Paragraph.js +0 -84
  62. package/src/core/hooks/Ruby.js +0 -34
  63. package/src/core/hooks/Size.js +0 -51
  64. package/src/core/hooks/Strikethrough.js +0 -54
  65. package/src/core/hooks/Sub.js +0 -47
  66. package/src/core/hooks/SuggestList.js +0 -333
  67. package/src/core/hooks/Suggester.js +0 -707
  68. package/src/core/hooks/Sup.js +0 -47
  69. package/src/core/hooks/Table.js +0 -275
  70. package/src/core/hooks/Toc.js +0 -292
  71. package/src/core/hooks/Transfer.js +0 -47
  72. package/src/core/hooks/Underline.js +0 -37
  73. package/src/index.core.js +0 -29
  74. package/src/index.engine.core.js +0 -68
  75. package/src/index.engine.js +0 -28
  76. package/src/index.js +0 -32
  77. package/src/libs/mermaidAPI.8.4.8.js +0 -1
  78. package/src/libs/mermaidAPI.8.5.2.js +0 -42
  79. package/src/libs/rawdeflate.js +0 -1663
  80. package/src/locales/en_US.js +0 -139
  81. package/src/locales/index.js +0 -25
  82. package/src/locales/ru_RU.js +0 -139
  83. package/src/locales/zh_CN.js +0 -142
  84. package/src/sass/base.scss +0 -26
  85. package/src/sass/bubble_formula.scss +0 -166
  86. package/src/sass/ch-icon.scss +0 -118
  87. package/src/sass/cherry.scss +0 -1116
  88. package/src/sass/components/bubble.scss +0 -173
  89. package/src/sass/components/shortcut_key_config.scss +0 -108
  90. package/src/sass/formula_utils_bubble.scss +0 -82
  91. package/src/sass/icon_template.scss +0 -24
  92. package/src/sass/icons/uEA03-list.svg +0 -19
  93. package/src/sass/icons/uEA04-check.svg +0 -14
  94. package/src/sass/icons/uEA09-square.svg +0 -10
  95. package/src/sass/icons/uEA0A-bold.svg +0 -20
  96. package/src/sass/icons/uEA0B-code.svg +0 -18
  97. package/src/sass/icons/uEA0C-color.svg +0 -13
  98. package/src/sass/icons/uEA0D-header.svg +0 -8
  99. package/src/sass/icons/uEA0E-image.svg +0 -15
  100. package/src/sass/icons/uEA0F-italic.svg +0 -8
  101. package/src/sass/icons/uEA10-link.svg +0 -16
  102. package/src/sass/icons/uEA11-ol.svg +0 -21
  103. package/src/sass/icons/uEA12-size.svg +0 -11
  104. package/src/sass/icons/uEA13-strike.svg +0 -16
  105. package/src/sass/icons/uEA14-table.svg +0 -12
  106. package/src/sass/icons/uEA15-ul.svg +0 -17
  107. package/src/sass/icons/uEA16-underline.svg +0 -13
  108. package/src/sass/icons/uEA17-word.svg +0 -16
  109. package/src/sass/icons/uEA18-blockquote.svg +0 -11
  110. package/src/sass/icons/uEA19-font.svg +0 -10
  111. package/src/sass/icons/uEA1F-insertClass.svg +0 -39
  112. package/src/sass/icons/uEA20-insertFlow.svg +0 -8
  113. package/src/sass/icons/uEA21-insertFormula.svg +0 -23
  114. package/src/sass/icons/uEA22-insertGantt.svg +0 -13
  115. package/src/sass/icons/uEA23-insertGraph.svg +0 -13
  116. package/src/sass/icons/uEA24-insertPie.svg +0 -19
  117. package/src/sass/icons/uEA25-insertSeq.svg +0 -20
  118. package/src/sass/icons/uEA26-insertState.svg +0 -35
  119. package/src/sass/icons/uEA27-line.svg +0 -11
  120. package/src/sass/icons/uEA28-preview.svg +0 -18
  121. package/src/sass/icons/uEA29-previewClose.svg +0 -24
  122. package/src/sass/icons/uEA2A-toc.svg +0 -24
  123. package/src/sass/icons/uEA2D-sub.svg +0 -15
  124. package/src/sass/icons/uEA2E-sup.svg +0 -15
  125. package/src/sass/icons/uEA2F-h1.svg +0 -16
  126. package/src/sass/icons/uEA30-h2.svg +0 -20
  127. package/src/sass/icons/uEA31-h3.svg +0 -23
  128. package/src/sass/icons/uEA32-h4.svg +0 -16
  129. package/src/sass/icons/uEA33-h5.svg +0 -20
  130. package/src/sass/icons/uEA34-h6.svg +0 -17
  131. package/src/sass/icons/uEA35-video.svg +0 -20
  132. package/src/sass/icons/uEA36-insert.svg +0 -25
  133. package/src/sass/icons/uEA37-little_table.svg +0 -30
  134. package/src/sass/icons/uEA38-pdf.svg +0 -27
  135. package/src/sass/icons/uEA39-checklist.svg +0 -22
  136. package/src/sass/icons/uEA40-close.svg +0 -12
  137. package/src/sass/icons/uEA41-fullscreen.svg +0 -81
  138. package/src/sass/icons/uEA42-minscreen.svg +0 -77
  139. package/src/sass/icons/uEA43-insertChart.svg +0 -23
  140. package/src/sass/icons/uEA44-question.svg +0 -25
  141. package/src/sass/icons/uEA45-settings.svg +0 -32
  142. package/src/sass/icons/uEA46-ok.svg +0 -7
  143. package/src/sass/icons/uEA47-br.svg +0 -22
  144. package/src/sass/icons/uEA48-normal.svg +0 -15
  145. package/src/sass/icons/uEA49-undo.svg +0 -19
  146. package/src/sass/icons/uEA50-redo.svg +0 -21
  147. package/src/sass/icons/uEA51-copy.svg +0 -6
  148. package/src/sass/icons/uEA52-phone.svg +0 -5
  149. package/src/sass/icons/uEA53-cherry-table-delete.svg +0 -17
  150. package/src/sass/icons/uEA54-cherry-table-insert-bottom.svg +0 -16
  151. package/src/sass/icons/uEA55-cherry-table-insert-left.svg +0 -15
  152. package/src/sass/icons/uEA56-cherry-table-insert-right.svg +0 -16
  153. package/src/sass/icons/uEA57-cherry-table-insert-top.svg +0 -16
  154. package/src/sass/icons/uEA58-sort-s.svg +0 -13
  155. package/src/sass/icons/uEA59-pinyin.svg +0 -1
  156. package/src/sass/icons/uEA5A-create.svg +0 -24
  157. package/src/sass/icons/uEA5B-download.svg +0 -34
  158. package/src/sass/icons/uEA5C-edit.svg +0 -3
  159. package/src/sass/icons/uEA5D-export.svg +0 -53
  160. package/src/sass/icons/uEA5E-folder-open.svg +0 -3
  161. package/src/sass/icons/uEA5F-folder.svg +0 -3
  162. package/src/sass/icons/uEA60-help.svg +0 -5
  163. package/src/sass/icons/uEA61-pen-fill.svg +0 -13
  164. package/src/sass/icons/uEA62-pen.svg +0 -3
  165. package/src/sass/icons/uEA64-tips.svg +0 -5
  166. package/src/sass/icons/uEA65-warn.svg +0 -5
  167. package/src/sass/icons/uEA66-mistake.svg +0 -4
  168. package/src/sass/icons/uEA67-success.svg +0 -4
  169. package/src/sass/icons/uEA68-danger.svg +0 -4
  170. package/src/sass/icons/uEA69-info.svg +0 -5
  171. package/src/sass/icons/uEA6A-primary.svg +0 -5
  172. package/src/sass/icons/uEA6B-warning.svg +0 -5
  173. package/src/sass/icons/uEA6C-justify.svg +0 -19
  174. package/src/sass/icons/uEA6D-justifyCenter.svg +0 -19
  175. package/src/sass/icons/uEA6E-justifyLeft.svg +0 -19
  176. package/src/sass/icons/uEA6F-justifyRight.svg +0 -19
  177. package/src/sass/icons/uEA70-chevronsLeft.svg +0 -1
  178. package/src/sass/icons/uEA71-chevronsRight.svg +0 -1
  179. package/src/sass/icons/uEA72-trendingUp.svg +0 -1
  180. package/src/sass/icons/uEA74-codeBlock.svg +0 -1
  181. package/src/sass/icons/uEA75-expand.svg +0 -3
  182. package/src/sass/icons/uEA76-unExpand.svg +0 -3
  183. package/src/sass/icons/uEA77-swap-vert.svg +0 -1
  184. package/src/sass/icons/uEA78-swap.svg +0 -1
  185. package/src/sass/icons/uEA79-keyboard.svg +0 -1
  186. package/src/sass/icons/uEA7A-command.svg +0 -1
  187. package/src/sass/icons/uEA7B-search.svg +0 -1
  188. package/src/sass/index.scss +0 -3
  189. package/src/sass/markdown.scss +0 -668
  190. package/src/sass/markdown_pure.scss +0 -9
  191. package/src/sass/prettyprint/prettyprint.scss +0 -118
  192. package/src/sass/previewer.scss +0 -179
  193. package/src/sass/print.scss +0 -13
  194. package/src/sass/prism/coy.scss +0 -220
  195. package/src/sass/prism/dark.scss +0 -132
  196. package/src/sass/prism/default.scss +0 -143
  197. package/src/sass/prism/funky.scss +0 -133
  198. package/src/sass/prism/okaidia.scss +0 -126
  199. package/src/sass/prism/one-dark.scss +0 -440
  200. package/src/sass/prism/one-light.scss +0 -428
  201. package/src/sass/prism/solarized-light.scss +0 -153
  202. package/src/sass/prism/tomorrow-night.scss +0 -125
  203. package/src/sass/prism/twilight.scss +0 -202
  204. package/src/sass/prism/vs-dark.scss +0 -275
  205. package/src/sass/prism/vs-light.scss +0 -168
  206. package/src/sass/themes/blue.scss +0 -411
  207. package/src/sass/themes/dark.scss +0 -517
  208. package/src/sass/themes/default.scss +0 -255
  209. package/src/sass/themes/green.scss +0 -395
  210. package/src/sass/themes/light.scss +0 -368
  211. package/src/sass/themes/red.scss +0 -397
  212. package/src/sass/themes/violet.scss +0 -410
  213. package/src/sass/variable.scss +0 -84
  214. package/src/toolbars/Bubble.js +0 -234
  215. package/src/toolbars/BubbleFormula.js +0 -298
  216. package/src/toolbars/BubbleTable.js +0 -147
  217. package/src/toolbars/FloatMenu.js +0 -131
  218. package/src/toolbars/HiddenToolbar.js +0 -36
  219. package/src/toolbars/HookCenter.js +0 -231
  220. package/src/toolbars/MenuBase.js +0 -569
  221. package/src/toolbars/PreviewerBubble.js +0 -608
  222. package/src/toolbars/ShortcutKeyConfigPanel.js +0 -345
  223. package/src/toolbars/Sidebar.js +0 -36
  224. package/src/toolbars/Toc.js +0 -242
  225. package/src/toolbars/Toolbar.js +0 -449
  226. package/src/toolbars/ToolbarRight.js +0 -37
  227. package/src/toolbars/hooks/Audio.js +0 -79
  228. package/src/toolbars/hooks/BarTable.js +0 -41
  229. package/src/toolbars/hooks/Bold.js +0 -73
  230. package/src/toolbars/hooks/Br.js +0 -34
  231. package/src/toolbars/hooks/ChangeLocale.js +0 -62
  232. package/src/toolbars/hooks/ChatGpt.js +0 -182
  233. package/src/toolbars/hooks/CheckList.js +0 -41
  234. package/src/toolbars/hooks/Code.js +0 -49
  235. package/src/toolbars/hooks/CodeTheme.js +0 -66
  236. package/src/toolbars/hooks/Color.js +0 -298
  237. package/src/toolbars/hooks/Copy.js +0 -141
  238. package/src/toolbars/hooks/Detail.js +0 -69
  239. package/src/toolbars/hooks/DrawIo.js +0 -57
  240. package/src/toolbars/hooks/Export.js +0 -49
  241. package/src/toolbars/hooks/File.js +0 -79
  242. package/src/toolbars/hooks/Formula.js +0 -69
  243. package/src/toolbars/hooks/FullScreen.js +0 -50
  244. package/src/toolbars/hooks/Graph.js +0 -263
  245. package/src/toolbars/hooks/H1.js +0 -71
  246. package/src/toolbars/hooks/H2.js +0 -71
  247. package/src/toolbars/hooks/H3.js +0 -71
  248. package/src/toolbars/hooks/Header.js +0 -118
  249. package/src/toolbars/hooks/Hr.js +0 -35
  250. package/src/toolbars/hooks/Image.js +0 -91
  251. package/src/toolbars/hooks/InlineCode.js +0 -53
  252. package/src/toolbars/hooks/Insert.js +0 -193
  253. package/src/toolbars/hooks/Italic.js +0 -72
  254. package/src/toolbars/hooks/Justify.js +0 -49
  255. package/src/toolbars/hooks/LineTable.js +0 -41
  256. package/src/toolbars/hooks/Link.js +0 -49
  257. package/src/toolbars/hooks/List.js +0 -55
  258. package/src/toolbars/hooks/MobilePreview.js +0 -44
  259. package/src/toolbars/hooks/Ol.js +0 -41
  260. package/src/toolbars/hooks/Panel.js +0 -140
  261. package/src/toolbars/hooks/Pdf.js +0 -78
  262. package/src/toolbars/hooks/Publish.js +0 -123
  263. package/src/toolbars/hooks/QuickTable.js +0 -43
  264. package/src/toolbars/hooks/Quote.js +0 -45
  265. package/src/toolbars/hooks/Redo.js +0 -33
  266. package/src/toolbars/hooks/Ruby.js +0 -59
  267. package/src/toolbars/hooks/Search.js +0 -53
  268. package/src/toolbars/hooks/Settings.js +0 -220
  269. package/src/toolbars/hooks/ShortcutKey.js +0 -62
  270. package/src/toolbars/hooks/Size.js +0 -118
  271. package/src/toolbars/hooks/Split.js +0 -37
  272. package/src/toolbars/hooks/Strikethrough.js +0 -71
  273. package/src/toolbars/hooks/Sub.js +0 -58
  274. package/src/toolbars/hooks/Sup.js +0 -58
  275. package/src/toolbars/hooks/SwitchModel.js +0 -56
  276. package/src/toolbars/hooks/Table.js +0 -56
  277. package/src/toolbars/hooks/Theme.js +0 -62
  278. package/src/toolbars/hooks/Toc.js +0 -35
  279. package/src/toolbars/hooks/TogglePreview.js +0 -91
  280. package/src/toolbars/hooks/Ul.js +0 -41
  281. package/src/toolbars/hooks/Underline.js +0 -68
  282. package/src/toolbars/hooks/Undo.js +0 -30
  283. package/src/toolbars/hooks/Video.js +0 -79
  284. package/src/toolbars/hooks/Word.js +0 -78
  285. package/src/toolbars/hooks/WordCount.js +0 -106
  286. package/src/utils/autoindent.js +0 -58
  287. package/src/utils/cm-search-replace.js +0 -794
  288. package/src/utils/code-preview-language-setting.js +0 -180
  289. package/src/utils/codeBlockContentHandler.js +0 -400
  290. package/src/utils/config.js +0 -174
  291. package/src/utils/copy.js +0 -55
  292. package/src/utils/dialog.js +0 -214
  293. package/src/utils/dom.js +0 -163
  294. package/src/utils/downloadUtil.js +0 -23
  295. package/src/utils/env.js +0 -22
  296. package/src/utils/error.js +0 -61
  297. package/src/utils/event.js +0 -38
  298. package/src/utils/export.js +0 -166
  299. package/src/utils/file.js +0 -164
  300. package/src/utils/formulaUtilsHandler.js +0 -232
  301. package/src/utils/htmlparser.js +0 -976
  302. package/src/utils/image.js +0 -99
  303. package/src/utils/imgSizeHandler.js +0 -279
  304. package/src/utils/lazyLoadImg.js +0 -327
  305. package/src/utils/lineFeed.js +0 -49
  306. package/src/utils/listContentHandler.js +0 -227
  307. package/src/utils/lookbehind-replace.js +0 -81
  308. package/src/utils/mathjax.js +0 -89
  309. package/src/utils/myersDiff.js +0 -211
  310. package/src/utils/pasteHelper.js +0 -253
  311. package/src/utils/platformTransform.js +0 -71
  312. package/src/utils/recount-pos.js +0 -59
  313. package/src/utils/regexp.js +0 -295
  314. package/src/utils/sanitize.js +0 -477
  315. package/src/utils/selection.js +0 -50
  316. package/src/utils/shortcutKey.js +0 -291
  317. package/src/utils/svgUtils.js +0 -96
  318. package/src/utils/tableContentHandler.js +0 -876
  319. package/test/core/CommonMark.spec.ts +0 -62
  320. package/test/core/hooks/AutoLink.spec.ts +0 -28
  321. package/test/core/hooks/List.spec.ts +0 -79
  322. package/test/core/hooks/__snapshots__/List.spec.ts.snap +0 -11
  323. package/test/example.md +0 -778
  324. package/test/node.js +0 -10
  325. package/test/suites/commonmark.spec.json +0 -5218
  326. package/test/tsconfig.test.json +0 -6
  327. package/test/utils/regexp.spec.ts +0 -28
@@ -1,297 +0,0 @@
1
- /**
2
- * Copyright (C) 2021 THL A29 Limited, a Tencent company.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import SyntaxBase from './SyntaxBase';
17
- import ParagraphBase from './ParagraphBase';
18
- import { $expectTarget } from '@/utils/error';
19
- import Logger from '@/Logger';
20
-
21
- /**
22
- * @typedef {import('~types/cherry').CherryOptions} CherryOptions
23
- * @typedef {import('~types/cherry').CherryEngineOptions} CherryEngineOptions
24
- * @typedef {import('~types/cherry').CustomSyntaxRegConfig} CustomSyntaxRegConfig
25
- * @typedef { (SyntaxBase | ParagraphBase) & { Cherry$$CUSTOM: true } } CustomSyntax
26
- * @typedef { (typeof SyntaxBase | typeof ParagraphBase) & { Cherry$$CUSTOM: true } } CustomSyntaxClass
27
- */
28
-
29
- const WARN_DUPLICATED = -1;
30
- const WARN_NOT_A_VALID_HOOK = -2;
31
-
32
- /**
33
- * 处理报错信息,在dev模式下才会输出报错信息
34
- * @param {number} type
35
- * @param {any} objClass
36
- * @param {number} index
37
- */
38
- function processWarning(type, objClass, index) {
39
- if (type === WARN_DUPLICATED) {
40
- Logger.warn(
41
- `Duplicate hook name [${objClass.HOOK_NAME}] found, hook [${objClass.toString()}] ${
42
- isNaN(index) ? '' : `at index [${index}] `
43
- }will not take effect.`,
44
- );
45
- } else if (type === WARN_NOT_A_VALID_HOOK) {
46
- Logger.warn(
47
- `Hook [${objClass.toString()}] ${
48
- isNaN(index) ? '' : `at index [${index}] `
49
- }is not a valid hook, and will not take effect.`,
50
- );
51
- }
52
- }
53
-
54
- /**
55
- * 是否一个合法的 HookClass
56
- * @param {any} HookClass
57
- * @returns { HookClass is (typeof SyntaxBase | typeof ParagraphBase) }
58
- */
59
- function isHookValid(HookClass) {
60
- return isProtoOfSyntaxBase(HookClass) || isProtoOfParagraphBase(HookClass);
61
- }
62
-
63
- /**
64
- * 传入的类是否 SyntaxBase 的子类
65
- * @param {any} value
66
- * @returns { value is typeof SyntaxBase }
67
- */
68
- function isProtoOfSyntaxBase(value) {
69
- return Object.prototype.isPrototypeOf.call(SyntaxBase, value);
70
- }
71
-
72
- /**
73
- * 传入的类是否 ParagraphBase 的子类
74
- * @param {any} value
75
- * @returns { value is typeof ParagraphBase }
76
- */
77
- function isProtoOfParagraphBase(value) {
78
- return Object.prototype.isPrototypeOf.call(ParagraphBase, value);
79
- }
80
-
81
- /**
82
- * 是否一个配置型的自定义语法
83
- * @param {any} value
84
- * @returns { value is CustomSyntaxRegConfig }
85
- */
86
- function isCustomSyntaxConfig(value) {
87
- const syntaxClass = /** @type {any} */ (/** @type {CustomSyntaxRegConfig} */ (value)?.syntaxClass);
88
- return isProtoOfSyntaxBase(syntaxClass) || isProtoOfParagraphBase(syntaxClass);
89
- }
90
-
91
- /**
92
- * 是否一个已注册的自定义语法hook类
93
- * @param {any} value
94
- * @returns { value is CustomSyntaxClass }
95
- */
96
- function isRegisteredCustomSyntaxClass(value) {
97
- return isHookValid(value) && /** @type {CustomSyntaxClass} */ (value)?.Cherry$$CUSTOM === true;
98
- }
99
-
100
- /**
101
- * 语法注册中心
102
- */
103
- export default class HookCenter {
104
- /**
105
- *
106
- * @param {(typeof SyntaxBase)[]} hooksConfig
107
- * @param {CherryOptions} editorConfig
108
- */
109
- constructor(hooksConfig, editorConfig, cherry) {
110
- this.$locale = cherry.locale;
111
- this.$cherry = cherry;
112
- /**
113
- * @property
114
- * @type {Record<import('./SyntaxBase').HookType, SyntaxBase[]>} hookList hook 名称 -> hook 类型的映射
115
- */
116
- this.hookList = /** @type {any} */ ({});
117
-
118
- /**
119
- * @property
120
- * @type {Record<string, { type: import('./SyntaxBase').HookType }>} hookNameList hook 名称 -> hook 类型的映射
121
- */
122
- this.hookNameList = {};
123
-
124
- $expectTarget(hooksConfig, Array);
125
- this.registerInternalHooks(hooksConfig, editorConfig);
126
- this.registerCustomHooks(editorConfig.engine.customSyntax, editorConfig);
127
- }
128
-
129
- /**
130
- * 注册系统默认的语法hook
131
- * @param {any[]} hooksConfig 在hookconfig.js里定义的配置
132
- * @param {CherryOptions} editorConfig 编辑器配置
133
- */
134
- registerInternalHooks(hooksConfig, editorConfig) {
135
- hooksConfig.forEach(
136
- /**
137
- *
138
- * @param {typeof SyntaxBase} HookClass
139
- * @param {number} index
140
- */
141
- (HookClass, index) => {
142
- const result = this.register(HookClass, editorConfig);
143
- processWarning(result, HookClass, index);
144
- },
145
- );
146
- }
147
-
148
- /**
149
- * 注册第三方的语法hook
150
- * @param {CherryEngineOptions['customSyntax']} customHooks 用户传入的配置
151
- * @param {CherryOptions} editorConfig 编辑器配置
152
- */
153
- registerCustomHooks(customHooks, editorConfig) {
154
- if (!customHooks) {
155
- return;
156
- }
157
- const hookNames = Object.keys(customHooks);
158
- hookNames.forEach((hookName) => {
159
- /** @type {number} */
160
- let result;
161
- /** @type {typeof SyntaxBase} */
162
- let HookClass;
163
- const customHookConfig = {};
164
- const hookClassOrConfig = customHooks[hookName];
165
- if (isProtoOfSyntaxBase(hookClassOrConfig)) {
166
- HookClass = hookClassOrConfig;
167
- } else if (isCustomSyntaxConfig(hookClassOrConfig)) {
168
- HookClass = hookClassOrConfig.syntaxClass;
169
- customHookConfig.force = Boolean(hookClassOrConfig.force);
170
- if (hookClassOrConfig.before) {
171
- customHookConfig.before = hookClassOrConfig.before;
172
- } else if (hookClassOrConfig.after) {
173
- customHookConfig.after = hookClassOrConfig.after;
174
- }
175
- } else {
176
- return;
177
- }
178
- if (isHookValid(HookClass)) {
179
- // 自定义Hook标识
180
- Object.defineProperty(HookClass, 'Cherry$$CUSTOM', {
181
- enumerable: false,
182
- configurable: false,
183
- writable: false,
184
- value: true,
185
- });
186
- result = this.register(HookClass, editorConfig, customHookConfig);
187
- } else {
188
- result = WARN_NOT_A_VALID_HOOK;
189
- }
190
- processWarning(result, HookClass, undefined);
191
- });
192
- }
193
-
194
- getHookList() {
195
- return this.hookList;
196
- }
197
-
198
- getHookNameList() {
199
- return this.hookNameList;
200
- }
201
-
202
- /**
203
- *
204
- * @param {((...args: any[]) => any) | typeof SyntaxBase} HookClass
205
- * @param {CherryOptions} editorConfig
206
- * @param {Omit<CustomSyntaxRegConfig, 'syntaxClass'>} [customHookConfig]
207
- * @returns
208
- */
209
- register(HookClass, editorConfig, customHookConfig) {
210
- // filter Configs Here
211
- const { externals, engine } = editorConfig;
212
- const { syntax } = engine;
213
- const { $cherry } = this;
214
-
215
- /** @type {SyntaxBase | CustomSyntax} */
216
- let instance;
217
-
218
- /** @type {string} */
219
- let hookName;
220
-
221
- // 首先校验Hook是否合法
222
- if (!isHookValid(HookClass)) {
223
- // 可能是一个function hook
224
- if (typeof HookClass === 'function') {
225
- const funcHook = HookClass;
226
- instance = funcHook(editorConfig);
227
- if (!instance || !isHookValid(instance.constructor)) {
228
- return WARN_NOT_A_VALID_HOOK;
229
- }
230
- hookName = instance.getName();
231
- } else {
232
- return WARN_NOT_A_VALID_HOOK;
233
- }
234
- } else {
235
- hookName = HookClass.HOOK_NAME;
236
- // TODO: 需要考虑自定义 hook 配置的传入方式
237
- const config = syntax?.[hookName] || {};
238
- instance = new HookClass({ externals, config, globalConfig: engine.global, cherry: $cherry });
239
- instance.afterInit(() => {
240
- instance.setLocale(this.$locale);
241
- });
242
- }
243
- // TODO: 待校验是否需要跳过禁用的自定义 hook
244
- // Skip Disabled Internal Hooks
245
- if (syntax[hookName] === false && !isRegisteredCustomSyntaxClass(HookClass)) {
246
- return;
247
- }
248
- // 下面处理的都是 CustomSyntax
249
- const hookType = instance.getType();
250
- if (this.hookNameList[hookName]) {
251
- // 内置 hook 重名
252
- if (!isRegisteredCustomSyntaxClass(HookClass)) {
253
- return WARN_DUPLICATED;
254
- }
255
- // 自定义 hook 重名且没有开启覆盖的选项
256
- if (!customHookConfig.force) {
257
- return WARN_DUPLICATED;
258
- }
259
- // 强制覆盖以前的Hook,所以需要移除
260
- const duplicateHookType = this.hookNameList[hookName].type;
261
- this.hookList[duplicateHookType] = this.hookList[duplicateHookType].filter((hook) => hook.getName() !== hookName);
262
- }
263
- this.hookNameList[hookName] = { type: hookType };
264
- this.hookList[hookType] = this.hookList[hookType] || [];
265
- // 内置Hook直接push到结尾
266
- if (!isRegisteredCustomSyntaxClass(HookClass)) {
267
- this.hookList[hookType].push(instance);
268
- return;
269
- }
270
- // 插入自定义Hook
271
- let insertIndex = -1;
272
- if (customHookConfig.before) {
273
- insertIndex = this.hookList[hookType].findIndex((hook) => hook.getName() === customHookConfig.before);
274
- if (insertIndex === -1) {
275
- Logger.warn(
276
- `Cannot find hook named [${customHookConfig.before}],
277
- custom hook [${hookName}] will append to the end of the hooks.`,
278
- );
279
- }
280
- } else if (customHookConfig.after) {
281
- insertIndex = this.hookList[hookType].findIndex((hook) => hook.getName() === customHookConfig.after);
282
- insertIndex === -1
283
- ? Logger.warn(
284
- `Cannot find hook named [${customHookConfig.after}],
285
- custom hook [${hookName}] will append to the end of the hooks.`,
286
- )
287
- : (insertIndex += 1); // 统一处理往前插入的逻辑,所以要插入某Hook之后,索引需要加一
288
- }
289
- // 无需插入或目标索引为数组结尾
290
- if (insertIndex < 0 || insertIndex >= this.hookList[hookType].length) {
291
- this.hookList[hookType].push(instance);
292
- } else {
293
- this.hookList[hookType].splice(insertIndex, 0, instance);
294
- }
295
- // console.log(this.hookList[hookType]);
296
- }
297
- }
@@ -1,105 +0,0 @@
1
- /**
2
- * Copyright (C) 2021 THL A29 Limited, a Tencent company.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- // import Bold from './hooks/Bold';
17
- // import Italic from './hooks/Italic';
18
- // import Underline from './hooks/Underline';
19
- import Color from './hooks/Color';
20
- import BackgroundColor from './hooks/BackgroundColor';
21
- import Size from './hooks/Size';
22
- import Strikethrough from './hooks/Strikethrough';
23
- import Sup from './hooks/Sup';
24
- import Sub from './hooks/Sub';
25
- import InlineCode from './hooks/InlineCode';
26
- import CodeBlock from './hooks/CodeBlock';
27
- import Link from './hooks/Link';
28
- import Emphasis from './hooks/Emphasis';
29
- import Paragraph from './hooks/Paragraph';
30
- import Header from './hooks/Header';
31
- import Transfer from './hooks/Transfer';
32
- import Table from './hooks/Table';
33
- import Br from './hooks/Br';
34
- import Hr from './hooks/Hr';
35
- import Image from './hooks/Image';
36
- import List from './hooks/List';
37
- import Blockquote from './hooks/Blockquote';
38
- import AutoLink from './hooks/AutoLink';
39
- import MathBlock from './hooks/MathBlock';
40
- import InlineMath from './hooks/InlineMath';
41
- import Toc from './hooks/Toc';
42
- import Footnote from './hooks/Footnote';
43
- import CommentReference from './hooks/CommentReference';
44
- import HtmlBlock from './hooks/HtmlBlock';
45
- import Emoji from './hooks/Emoji';
46
- import Underline from './hooks/Underline';
47
- import HighLight from './hooks/HighLight';
48
- import Suggester from './hooks/Suggester';
49
- import Ruby from './hooks/Ruby';
50
- import Panel from './hooks/Panel';
51
- import Detail from './hooks/Detail';
52
- import FrontMatter from './hooks/FrontMatter';
53
- /**
54
- * 引擎各语法的配置
55
- * 主要决定支持哪些语法,以及各语法的执行顺序
56
- */
57
- const hooksConfig = [
58
- // 段落级 Hook
59
- // 引擎会按当前排序顺序执行beforeMake、makeHtml方法
60
- // 引擎会按当前排序逆序执行afterMake方法
61
- FrontMatter,
62
- CodeBlock,
63
- InlineCode,
64
- /**
65
- * 理论上行内公式(InlineMath)应该在段落公式(MathBlock)的后面,否则行内公式会破坏段落公式的渲染
66
- * 但实际交换顺序后,发现没啥问题,还顺带解决了[这个issue #1090](https://github.com/Tencent/cherry-markdown/issues/1090)的问题
67
- * 没问题的原因是对于段落公式(比如$$(a+b)^2=a^2+2ab+b^2$$),行内公式的确会命中,会识别出来两个'$$',所以无事发生
68
- */
69
- InlineMath,
70
- MathBlock,
71
- HtmlBlock,
72
- Footnote,
73
- CommentReference,
74
- Transfer,
75
- Br,
76
- Table,
77
- Blockquote,
78
- Toc,
79
- Header, // 处理标题, 传入strict属性严格要求ATX风格标题#后带空格
80
- Hr,
81
- List,
82
- Detail,
83
- Panel,
84
- Paragraph, // 普通段落
85
-
86
- // 行内Hook
87
- // 引擎会按当前顺序执行makeHtml方法
88
- Emoji,
89
- Image,
90
- Link,
91
- AutoLink,
92
- Emphasis,
93
- BackgroundColor,
94
- Color,
95
- Size,
96
- Sub,
97
- Sup,
98
- Ruby,
99
- Strikethrough,
100
- Underline,
101
- HighLight,
102
- Suggester,
103
- ];
104
-
105
- export default hooksConfig;