@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
package/src/Engine.js DELETED
@@ -1,402 +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 HookCenter from './core/HookCenter';
17
- import hooksConfig from './core/HooksConfig';
18
- import NestedError, { $expectTarget, $expectInherit, $expectInstance } from './utils/error';
19
- import CryptoJS from 'crypto-js';
20
- import SyntaxBase from './core/SyntaxBase';
21
- import ParagraphBase from './core/ParagraphBase';
22
- import { PUNCTUATION, longTextReg, imgBase64Reg, imgDrawioXmlReg } from './utils/regexp';
23
- import { escapeHTMLSpecialChar } from './utils/sanitize';
24
- import Logger from './Logger';
25
- import { configureMathJax } from './utils/mathjax';
26
- import UrlCache from './UrlCache';
27
- import htmlParser from './utils/htmlparser';
28
- import { isBrowser } from './utils/env';
29
-
30
- export default class Engine {
31
- /**
32
- *
33
- * @param {Partial<import('./Cherry').CherryOptions>} markdownParams 初始化Cherry时传入的选项
34
- * @param {import('./Cherry').default} cherry Cherry实例
35
- */
36
- constructor(markdownParams, cherry) {
37
- this.$cherry = cherry;
38
- // Deprecated
39
- Object.defineProperty(this, '_cherry', {
40
- get() {
41
- Logger.warn('`_engine._cherry` is deprecated. Use `$engine.$cherry` instead.');
42
- return this.$cherry;
43
- },
44
- });
45
- this.initMath(markdownParams);
46
- this.$configInit(markdownParams);
47
- this.hookCenter = new HookCenter(hooksConfig, markdownParams, cherry);
48
- this.hooks = this.hookCenter.getHookList();
49
- this.hashCache = {};
50
- this.hashStrMap = {};
51
- this.cachedBigData = {};
52
- this.markdownParams = markdownParams;
53
- this.currentStrMd5 = [];
54
- this.globalConfig = markdownParams.engine.global;
55
- this.htmlWhiteListAppend = this.globalConfig.htmlWhiteList;
56
- this.htmlBlackList = this.globalConfig.htmlBlackList;
57
- this.urlProcessorMap = {};
58
- }
59
-
60
- /**
61
- * 重新生成html
62
- * 这是为urlProcessor支持异步回调函数而实现的重新生成html的方法
63
- * 该方法会清空所有缓存,所以降低了该方法的执行频率,1s内最多执行一次
64
- */
65
- reMakeHtml() {
66
- if (this.timer) {
67
- clearTimeout(this.timer);
68
- this.timer = null;
69
- }
70
- this.timer = setTimeout(() => {
71
- this.$cherry.lastMarkdownText = '';
72
- this.hashCache = {};
73
- const markdownText = this.$cherry.editor.editor.getValue();
74
- const html = this.makeHtml(markdownText);
75
- this.$cherry.previewer.refresh(html);
76
- this.$cherry.$event.emit('afterChange', {
77
- markdownText,
78
- html,
79
- });
80
- }, 1000);
81
- }
82
-
83
- urlProcessor(url, srcType) {
84
- const key = `${srcType}_${url}`;
85
- if (this.urlProcessorMap[key]) {
86
- return this.urlProcessorMap[key];
87
- }
88
- const ret = this.$cherry.options.callback.urlProcessor(url, srcType, (/** @type {string} */ newUrl) => {
89
- if (newUrl) {
90
- if (!this.urlProcessorMap[key]) {
91
- this.urlProcessorMap[key] = newUrl;
92
- this.reMakeHtml();
93
- }
94
- } else {
95
- delete this.urlProcessorMap[key];
96
- }
97
- return;
98
- });
99
- if (ret) {
100
- return ret;
101
- }
102
- return url;
103
- }
104
-
105
- initMath(opts) {
106
- // 无论MathJax还是Katex,都可以先进行MathJax配置
107
- const { externals, engine } = opts;
108
- const { syntax } = engine;
109
- const { plugins } = syntax.mathBlock;
110
- // 未开启公式
111
- if (
112
- !isBrowser() ||
113
- (!syntax.mathBlock.src && !syntax.inlineMath.src && !syntax.mathBlock.engine && !syntax.inlineMath.engine)
114
- ) {
115
- return;
116
- }
117
- // 已经加载过MathJax
118
- if (externals.MathJax || window.MathJax) {
119
- return;
120
- }
121
- configureMathJax(plugins);
122
- // 等待MathJax各种插件加载
123
- const script = document.createElement('script');
124
- script.src = syntax.mathBlock.src ? syntax.mathBlock.src : syntax.inlineMath.src;
125
- script.async = true;
126
- if (script.src) document.head.appendChild(script);
127
- }
128
-
129
- $configInit(params) {
130
- if (params.hooksConfig && $expectTarget(params.hooksConfig.hooksList, Array)) {
131
- for (let key = 0; key < params.hooksConfig.hooksList.length; key++) {
132
- const hook = params.hooksConfig.hooksList[key];
133
- try {
134
- if (hook.getType() === 'sentence') {
135
- $expectInherit(hook, SyntaxBase);
136
- }
137
-
138
- if (hook.getType() === 'paragraph') {
139
- $expectInherit(hook, ParagraphBase);
140
- }
141
- $expectInstance(hook);
142
- hooksConfig.push(hook);
143
- } catch (e) {
144
- throw new Error('the hook does not correctly inherit');
145
- }
146
- }
147
- }
148
- }
149
-
150
- $beforeMakeHtml(str) {
151
- let $str = str.replace(/~/g, '~T');
152
- $str = $str.replace(/\$/g, '~D');
153
- $str = $str.replace(/\r\n/g, '\n'); // DOS to Unix
154
- $str = $str.replace(/\r/g, '\n'); // Mac to Unix
155
- if (
156
- // @ts-ignore
157
- this.$cherry.options.engine.syntax.fontEmphasis.selfClosing ||
158
- this.$cherry.options.engine.global.flowSessionContext
159
- ) {
160
- // 自动补全最后一行的加粗、斜体语法
161
- if (/(^|\n)[^\n]*\*{1,3}[^\n]+$/.test($str) && $str.match(/(^|\n)([^\n]+)$/)) {
162
- const lastLineStr = $str.match(/(^|\n)([^\n]+)$/)[2].split(/(\*{1,3})/g);
163
- const emphasis = [];
164
- for (let i = 0; i < lastLineStr.length; i++) {
165
- // 判断是否命中无序列表语法(用* 也可表示无序列表)
166
- if (i === 1 && lastLineStr[i] === '*' && lastLineStr[i + 1] && /^\s+/.test(lastLineStr[i + 1])) {
167
- continue;
168
- }
169
- if (/\*{1,3}/.test(lastLineStr[i])) {
170
- const current = lastLineStr[i];
171
- if (emphasis.length <= 0) {
172
- emphasis.push(current);
173
- } else {
174
- if (emphasis[emphasis.length - 1] === current) {
175
- emphasis.pop();
176
- } else {
177
- emphasis.push(current);
178
- }
179
- }
180
- }
181
- }
182
- // 只剩一个未配对的,表示最后没有*
183
- if (emphasis.length === 1) {
184
- $str = $str.replace(/(\*{1,3})(\s*)([^*\n]+?)$/, '$1$2$3$2$1');
185
- }
186
- // 剩两个未配对的,表示最后有未配对的*
187
- if (emphasis.length === 2) {
188
- $str = $str.replace(/(\*{1,3})(\s*)([^*\n]+?)\*{0,2}$/, '$1$2$3$2$1');
189
- }
190
- }
191
- }
192
- // 避免正则性能问题,如/.+\n/.test(' '.repeat(99999)), 回溯次数过多
193
- // 参考文章:http://www.alloyteam.com/2019/07/13574/
194
- if ($str[$str.length - 1] !== '\n') {
195
- $str += '\n';
196
- }
197
- $str = this.$fireHookAction($str, 'sentence', 'beforeMakeHtml');
198
- $str = this.$fireHookAction($str, 'paragraph', 'beforeMakeHtml');
199
- return $str;
200
- }
201
-
202
- $afterMakeHtml(str) {
203
- let $str = this.$fireHookAction(str, 'paragraph', 'afterMakeHtml');
204
- // str = this._fireHookAction(str, 'sentence', 'afterMakeHtml');
205
- $str = $str.replace(/~D/g, '$');
206
- $str = $str.replace(/~T/g, '~');
207
- $str = $str.replace(/\\<\//g, '\\ </');
208
- $str = $str
209
- .replace(new RegExp(`\\\\(${PUNCTUATION})`, 'g'), (match, escapeChar) => {
210
- if (escapeChar === '&') {
211
- // & 字符需要特殊处理
212
- return match;
213
- }
214
- return escapeHTMLSpecialChar(escapeChar);
215
- })
216
- .replace(/\\&(?!(amp|lt|gt|quot|apos);)/, () => '&amp;');
217
- $str = $str.replace(/\\ <\//g, '\\</');
218
- $str = $str.replace(/id="safe_(?=.*?")/g, 'id="'); // transform header id to avoid being sanitized
219
- $str = UrlCache.restoreAll($str);
220
- return $str;
221
- }
222
-
223
- $dealSentenceByCache(md) {
224
- return this.$checkCache(md, (str) => this.$dealSentence(str));
225
- }
226
-
227
- $dealSentence(md) {
228
- return this.$fireHookAction(md, 'sentence', 'makeHtml', this.$dealSentenceByCache.bind(this));
229
- }
230
-
231
- $fireHookAction(md, type, action, actionArgs) {
232
- let $md = md;
233
- const method = action === 'afterMakeHtml' ? 'reduceRight' : 'reduce';
234
- if (!this.hooks && !this.hooks[type] && !this.hooks[type][method]) {
235
- return $md;
236
- }
237
- try {
238
- $md = this.hooks[type][method]((newMd, oneHook) => {
239
- if (!oneHook.$engine) {
240
- oneHook.$engine = this;
241
- // Deprecated
242
- Object.defineProperty(oneHook, '_engine', {
243
- get() {
244
- Logger.warn('`this._engine` is deprecated. Use `this.$engine` instead.');
245
- return this.$engine;
246
- },
247
- });
248
- }
249
-
250
- if (!oneHook[action]) {
251
- return newMd;
252
- }
253
- return oneHook[action](newMd, actionArgs, this.markdownParams);
254
- }, $md);
255
- } catch (e) {
256
- throw new NestedError(e);
257
- }
258
- return $md;
259
- }
260
-
261
- /**
262
- * @deprecated 已废弃,推荐使用 .hash()
263
- */
264
- md5(str) {
265
- return this.hash(str);
266
- }
267
-
268
- /**
269
- * 计算哈希值
270
- * @param {String} str 被计算的字符串
271
- * @returns {String} 哈希值
272
- */
273
- hash(str) {
274
- if (!this.hashStrMap[str]) {
275
- this.hashStrMap[str] = CryptoJS.SHA256(str).toString();
276
- }
277
- return this.hashStrMap[str];
278
- }
279
-
280
- $checkCache(str, func) {
281
- const sign = this.hash(str);
282
- if (typeof this.hashCache[sign] === 'undefined') {
283
- this.hashCache[sign] = func(str);
284
- if (BUILD_ENV !== 'production') {
285
- // 生产环境屏蔽
286
- Logger.log('markdown引擎渲染了:', str);
287
- }
288
- }
289
- return { sign, html: this.hashCache[sign] };
290
- }
291
-
292
- $dealParagraph(md) {
293
- return this.$fireHookAction(md, 'paragraph', 'makeHtml', this.$dealSentenceByCache.bind(this));
294
- }
295
-
296
- // 缓存大文本数据,用以提升渲染性能
297
- $cacheBigData(md) {
298
- let $md = md.replace(imgBase64Reg, (whole, m1, m2) => {
299
- const cacheKey = `bigDataBegin${this.hash(m2)}bigDataEnd`;
300
- this.cachedBigData[cacheKey] = m2;
301
- return `${m1}${cacheKey})`;
302
- });
303
- $md = $md.replace(imgDrawioXmlReg, (whole, m1, m2) => {
304
- const cacheKey = `bigDataBegin${this.hash(m2)}bigDataEnd`;
305
- this.cachedBigData[cacheKey] = m2;
306
- return `${m1}${cacheKey}}`;
307
- });
308
- $md = $md.replace(longTextReg, (whole, m1, m2) => {
309
- const cacheKey = `bigDataBegin${this.hash(m2)}bigDataEnd`;
310
- this.cachedBigData[cacheKey] = m2;
311
- return `${m1}${cacheKey}}`;
312
- });
313
- return $md;
314
- }
315
-
316
- $deCacheBigData(md) {
317
- return md.replace(/bigDataBegin[^\n]+?bigDataEnd/g, (whole) => {
318
- return this.cachedBigData[whole];
319
- });
320
- }
321
-
322
- /**
323
- * 流式输出场景时,在最后增加一个光标占位
324
- * @param {string} md 内容
325
- * @returns {string}
326
- */
327
- $setFlowSessionCursorCache(md) {
328
- if (this.$cherry.options.engine.global.flowSessionContext && this.$cherry.options.engine.global.flowSessionCursor) {
329
- return `${md}CHERRY_FLOW_SESSION_CURSOR`;
330
- }
331
- return md;
332
- }
333
-
334
- /**
335
- * 流式输出场景时,把最后的光标占位替换为配置的dom元素,并在一段时间后删除该元素
336
- * @param {string} md 内容
337
- * @returns {string}
338
- */
339
- $clearFlowSessionCursorCache(md) {
340
- if (this.$cherry.options.engine.global.flowSessionCursor) {
341
- if (this.clearCursorTimer) {
342
- clearTimeout(this.clearCursorTimer);
343
- }
344
- this.clearCursorTimer = setTimeout(() => {
345
- this.$cherry.clearFlowSessionCursor();
346
- }, 2560);
347
- return md.replace(/CHERRY_FLOW_SESSION_CURSOR/g, this.$cherry.options.engine.global.flowSessionCursor);
348
- }
349
- return md;
350
- }
351
-
352
- /**
353
- * @param {string} md md字符串
354
- * @param {'string'|'object'} returnType 返回格式,string:返回html字符串,object:返回结构化数据
355
- * @returns {string|HTMLCollection} 获取html
356
- */
357
- makeHtml(md, returnType = 'string') {
358
- let $md = this.$setFlowSessionCursorCache(md);
359
- $md = this.$cacheBigData($md);
360
- $md = this.$beforeMakeHtml($md);
361
- $md = this.$dealParagraph($md);
362
- $md = this.$afterMakeHtml($md);
363
- this.$fireHookAction($md, 'paragraph', '$cleanCache');
364
- $md = this.$deCacheBigData($md);
365
- $md = this.$clearFlowSessionCursorCache($md);
366
- if (returnType === 'object') {
367
- let ret = null;
368
- if (typeof window.DOMParser !== 'undefined') {
369
- const parser = new DOMParser();
370
- const doc = parser.parseFromString($md, 'text/html');
371
- ret = doc.querySelector('body').children;
372
- } else {
373
- const tmpDiv = document.createElement('div');
374
- tmpDiv.innerHTML = $md;
375
- ret = tmpDiv.children;
376
- }
377
- return ret;
378
- }
379
- return $md;
380
- }
381
-
382
- makeHtmlForBlockquote(md) {
383
- let $md = md;
384
- $md = this.$dealParagraph($md);
385
- $md = this.$fireHookAction($md, 'paragraph', 'afterMakeHtml');
386
- return $md;
387
- }
388
-
389
- mounted() {
390
- this.$fireHookAction('', 'sentence', 'mounted');
391
- this.$fireHookAction('', 'paragraph', 'mounted');
392
- // UrlCache.clear();
393
- }
394
-
395
- /**
396
- * @param {string} html html字符串
397
- * @returns {string} 获取markdown
398
- */
399
- makeMarkdown(html) {
400
- return htmlParser.run(html);
401
- }
402
- }
package/src/Event.js DELETED
@@ -1,140 +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 mitt from 'mitt';
17
-
18
- /**
19
- * 事件管理
20
- */
21
- export default class Event {
22
- constructor(instanceId) {
23
- this.instanceId = instanceId;
24
- }
25
- /**
26
- * 事件列表
27
- * @property
28
- */
29
- Events = {
30
- previewerClose: 'previewerClose',
31
- previewerOpen: 'previewerOpen',
32
- editorClose: 'editorClose',
33
- editorOpen: 'editorOpen',
34
- toolbarHide: 'toolbarHide',
35
- toolbarShow: 'toolbarShow',
36
- cleanAllSubMenus: 'cleanAllSubMenus', // 清除所有子菜单弹窗
37
- afterChange: 'afterChange', // 编辑器内容变化
38
- afterInit: 'afterInit', // 编辑器初始化完成
39
- focus: 'focus', // 焦点
40
- blur: 'blur', // 失焦
41
- selectionChange: 'selectionChange', // 选区内容改变时触发
42
- afterChangeLocale: 'afterChangeLocale', // 语言改变
43
- changeMainTheme: 'changeMainTheme', // 变更主题
44
- changeCodeBlockTheme: 'changeCodeBlockTheme', // 变更代码块主题
45
- };
46
-
47
- /**
48
- * @property
49
- * @private
50
- * @type {import('mitt').Emitter}
51
- */
52
- emitter = mitt();
53
-
54
- setInstanceId(instanceId) {
55
- this.instanceId = instanceId;
56
- }
57
-
58
- getInstanceId() {
59
- return this.instanceId;
60
- }
61
-
62
- clearAll() {
63
- this.emitter.all.clear();
64
- }
65
-
66
- bindCallbacksByOptions(options) {
67
- if (options.callback.afterChange) {
68
- this.on(this.Events.afterChange, (msg) => {
69
- options.callback.afterChange(msg.markdownText, msg.html);
70
- });
71
- }
72
- if (options.callback.afterInit) {
73
- this.on(this.Events.afterInit, (msg) => {
74
- options.callback.afterInit(msg.markdownText, msg.html);
75
- });
76
- }
77
- if (options.event.afterChange) {
78
- this.on(this.Events.afterChange, (msg) => {
79
- options.event.afterChange(msg.markdownText, msg.html);
80
- });
81
- }
82
- if (options.event.afterInit) {
83
- this.on(this.Events.afterInit, (msg) => {
84
- options.event.afterInit(msg.markdownText, msg.html);
85
- });
86
- }
87
- if (options.event.focus) {
88
- this.on(this.Events.focus, (event) => {
89
- options.event.focus(event);
90
- });
91
- }
92
- if (options.event.blur) {
93
- this.on(this.Events.blur, (event) => {
94
- options.event.blur(event);
95
- });
96
- }
97
- if (options.event.selectionChange) {
98
- this.on(this.Events.selectionChange, (event) => {
99
- options.event.selectionChange(event);
100
- });
101
- }
102
- if (options.event.afterChangeLocale) {
103
- this.on(this.Events.afterChangeLocale, (locale) => {
104
- options.event.afterChangeLocale(locale);
105
- });
106
- }
107
- if (options.event.changeMainTheme) {
108
- this.on(this.Events.changeMainTheme, (theme) => {
109
- options.event.changeMainTheme(theme);
110
- });
111
- }
112
- if (options.event.changeCodeBlockTheme) {
113
- this.on(this.Events.changeCodeBlockTheme, (theme) => {
114
- options.event.changeCodeBlockTheme(theme);
115
- });
116
- }
117
- }
118
-
119
- /**
120
- * 注册监听事件
121
- * @param {string} event 要注册监听的事件
122
- * @param {(event: any) => void} handler 事件回调
123
- */
124
- on(event, handler) {
125
- this.emitter.on(`${this.instanceId}:${event}`, handler);
126
- }
127
-
128
- off(event, handler) {
129
- this.emitter.off(`${this.instanceId}:${event}`, handler);
130
- }
131
-
132
- /**
133
- * 触发事件
134
- * @param {string} event 要触发的事件
135
- * @param {object} msg 消息体
136
- */
137
- emit(event, msg) {
138
- this.emitter.emit(`${this.instanceId}:${event}`, msg);
139
- }
140
- }