@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,477 +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
- const escapeMap = {
17
- '<': '&lt;',
18
- '>': '&gt;',
19
- '&': '&amp;',
20
- '"': '&quot;',
21
- "'": '&#x27;',
22
- };
23
-
24
- const unescapeMap = {
25
- lt: '<',
26
- gt: '>',
27
- amp: '&',
28
- quot: '"',
29
- apos: "'",
30
- };
31
-
32
- // refs: https://www.freeformatter.com/html-entities.html
33
- const ASCIICharacters = {
34
- 34: '&quot;',
35
- 38: '&amp;',
36
- 39: '&apos;',
37
- 60: '&lt;',
38
- 62: '&gt;',
39
- };
40
-
41
- const ISO88591Characters = {
42
- 192: '&Agrave;',
43
- 193: '&Aacute;',
44
- 194: '&Acirc;',
45
- 195: '&Atilde;',
46
- 196: '&Auml;',
47
- 197: '&Aring;',
48
- 198: '&AElig;',
49
- 199: '&Ccedil;',
50
- 200: '&Egrave;',
51
- 201: '&Eacute;',
52
- 202: '&Ecirc;',
53
- 203: '&Euml;',
54
- 204: '&Igrave;',
55
- 205: '&Iacute;',
56
- 206: '&Icirc;',
57
- 207: '&Iuml;',
58
- 208: '&ETH;',
59
- 209: '&Ntilde;',
60
- 210: '&Ograve;',
61
- 211: '&Oacute;',
62
- 212: '&Ocirc;',
63
- 213: '&Otilde;',
64
- 214: '&Ouml;',
65
- 216: '&Oslash;',
66
- 217: '&Ugrave;',
67
- 218: '&Uacute;',
68
- 219: '&Ucirc;',
69
- 220: '&Uuml;',
70
- 221: '&Yacute;',
71
- 222: '&THORN;',
72
- 223: '&szlig;',
73
- 224: '&agrave;',
74
- 225: '&aacute;',
75
- 226: '&acirc;',
76
- 227: '&atilde;',
77
- 228: '&auml;',
78
- 229: '&aring;',
79
- 230: '&aelig;',
80
- 231: '&ccedil;',
81
- 232: '&egrave;',
82
- 233: '&eacute;',
83
- 234: '&ecirc;',
84
- 235: '&euml;',
85
- 236: '&igrave;',
86
- 237: '&iacute;',
87
- 238: '&icirc;',
88
- 239: '&iuml;',
89
- 240: '&eth;',
90
- 241: '&ntilde;',
91
- 242: '&ograve;',
92
- 243: '&oacute;',
93
- 244: '&ocirc;',
94
- 245: '&otilde;',
95
- 246: '&ouml;',
96
- 248: '&oslash;',
97
- 249: '&ugrave;',
98
- 250: '&uacute;',
99
- 251: '&ucirc;',
100
- 252: '&uuml;',
101
- 253: '&yacute;',
102
- 254: '&thorn;',
103
- 255: '&yuml;',
104
- };
105
-
106
- const ISO88591Symbols = {
107
- 160: '&nbsp;',
108
- 161: '&iexcl;',
109
- 162: '&cent;',
110
- 163: '&pound;',
111
- 164: '&curren;',
112
- 165: '&yen;',
113
- 166: '&brvbar;',
114
- 167: '&sect;',
115
- 168: '&uml;',
116
- 169: '&copy;',
117
- 170: '&ordf;',
118
- 171: '&laquo;',
119
- 172: '&not;',
120
- 173: '&shy;',
121
- 174: '&reg;',
122
- 175: '&macr;',
123
- 176: '&deg;',
124
- 177: '&plusmn;',
125
- 178: '&sup2;',
126
- 179: '&sup3;',
127
- 180: '&acute;',
128
- 181: '&micro;',
129
- 182: '&para;',
130
- 184: '&cedil;',
131
- 185: '&sup1;',
132
- 186: '&ordm;',
133
- 187: '&raquo;',
134
- 188: '&frac14;',
135
- 189: '&frac12;',
136
- 190: '&frac34;',
137
- 191: '&iquest;',
138
- 215: '&times;',
139
- 247: '&divide;',
140
- };
141
-
142
- const MathSymbols = {
143
- 8704: '&forall;',
144
- 8706: '&part;',
145
- 8707: '&exist;',
146
- 8709: '&empty;',
147
- 8711: '&nabla;',
148
- 8712: '&isin;',
149
- 8713: '&notin;',
150
- 8715: '&ni;',
151
- 8719: '&prod;',
152
- 8721: '&sum;',
153
- 8722: '&minus;',
154
- 8727: '&lowast;',
155
- 8730: '&radic;',
156
- 8733: '&prop;',
157
- 8734: '&infin;',
158
- 8736: '&ang;',
159
- 8743: '&and;',
160
- 8744: '&or;',
161
- 8745: '&cap;',
162
- 8746: '&cup;',
163
- 8747: '&int;',
164
- 8756: '&there4;',
165
- 8764: '&sim;',
166
- 8773: '&cong;',
167
- 8776: '&asymp;',
168
- 8800: '&ne;',
169
- 8801: '&equiv;',
170
- 8804: '&le;',
171
- 8805: '&ge;',
172
- 8834: '&sub;',
173
- 8835: '&sup;',
174
- 8836: '&nsub;',
175
- 8838: '&sube;',
176
- 8839: '&supe;',
177
- 8853: '&oplus;',
178
- 8855: '&otimes;',
179
- 8869: '&perp;',
180
- 8901: '&sdot;',
181
- };
182
-
183
- const GreekLetters = {
184
- 913: '&Alpha;',
185
- 914: '&Beta;',
186
- 915: '&Gamma;',
187
- 916: '&Delta;',
188
- 917: '&Epsilon;',
189
- 918: '&Zeta;',
190
- 919: '&Eta;',
191
- 920: '&Theta;',
192
- 921: '&Iota;',
193
- 922: '&Kappa;',
194
- 923: '&Lambda;',
195
- 924: '&Mu;',
196
- 925: '&Nu;',
197
- 926: '&Xi;',
198
- 927: '&Omicron;',
199
- 928: '&Pi;',
200
- 929: '&Rho;',
201
- 931: '&Sigma;',
202
- 932: '&Tau;',
203
- 933: '&Upsilon;',
204
- 934: '&Phi;',
205
- 935: '&Chi;',
206
- 936: '&Psi;',
207
- 937: '&Omega;',
208
- 945: '&alpha;',
209
- 946: '&beta;',
210
- 947: '&gamma;',
211
- 948: '&delta;',
212
- 949: '&epsilon;',
213
- 950: '&zeta;',
214
- 951: '&eta;',
215
- 952: '&theta;',
216
- 953: '&iota;',
217
- 954: '&kappa;',
218
- 955: '&lambda;',
219
- 956: '&mu;',
220
- 957: '&nu;',
221
- 958: '&xi;',
222
- 959: '&omicron;',
223
- 960: '&pi;',
224
- 961: '&rho;',
225
- 962: '&sigmaf;',
226
- 963: '&sigma;',
227
- 964: '&tau;',
228
- 965: '&upsilon;',
229
- 966: '&phi;',
230
- 967: '&chi;',
231
- 968: '&psi;',
232
- 969: '&omega;',
233
- 977: '&thetasym;',
234
- 978: '&upsih;',
235
- 982: '&piv;',
236
- };
237
-
238
- const MiscellaneousHTMLEntities = {
239
- 338: '&OElig;',
240
- 339: '&oelig;',
241
- 352: '&Scaron;',
242
- 353: '&scaron;',
243
- 376: '&Yuml;',
244
- 402: '&fnof;',
245
- 710: '&circ;',
246
- 732: '&tilde;',
247
- 8194: '&ensp;',
248
- 8195: '&emsp;',
249
- 8201: '&thinsp;',
250
- 8204: '&zwnj;',
251
- 8205: '&zwj;',
252
- 8206: '&lrm;',
253
- 8207: '&rlm;',
254
- 8211: '&ndash;',
255
- 8212: '&mdash;',
256
- 8216: '&lsquo;',
257
- 8217: '&rsquo;',
258
- 8218: '&sbquo;',
259
- 8220: '&ldquo;',
260
- 8221: '&rdquo;',
261
- 8222: '&bdquo;',
262
- 8224: '&dagger;',
263
- 8225: '&Dagger;',
264
- 8226: '&bull;',
265
- 8230: '&hellip;',
266
- 8240: '&permil;',
267
- 8242: '&prime;',
268
- 8243: '&Prime;',
269
- 8249: '&lsaquo;',
270
- 8250: '&rsaquo;',
271
- 8254: '&oline;',
272
- 8364: '&euro;',
273
- 8482: '&trade;',
274
- 8592: '&larr;',
275
- 8593: '&uarr;',
276
- 8594: '&rarr;',
277
- 8595: '&darr;',
278
- 8596: '&harr;',
279
- 8629: '&crarr;',
280
- 8968: '&lceil;',
281
- 8969: '&rceil;',
282
- 8970: '&lfloor;',
283
- 8971: '&rfloor;',
284
- 9674: '&loz;',
285
- 9824: '&spades;',
286
- 9827: '&clubs;',
287
- 9829: '&hearts;',
288
- 9830: '&diams;',
289
- };
290
-
291
- // TODO: 使用whatwg的entities.json
292
- const htmlEntitiesMap = {
293
- ...ASCIICharacters,
294
- ...ISO88591Characters,
295
- ...ISO88591Symbols,
296
- ...MathSymbols,
297
- ...GreekLetters,
298
- ...MiscellaneousHTMLEntities,
299
- };
300
-
301
- const htmlEntitiesCodePoint = Object.keys(htmlEntitiesMap);
302
-
303
- const htmlEntitiesWithoutSemicolon = htmlEntitiesCodePoint.map((code) =>
304
- htmlEntitiesMap[code].replace(/^&(\w+);$/g, (match, name) => name.toLowerCase()),
305
- );
306
-
307
- /**
308
- * 非字符串类型与长度为0的字符串都认为是空串
309
- * @param {any} str 需要判断的字符串
310
- * @returns {boolean}
311
- */
312
- const isEmptyString = (str) => typeof str !== 'string' || str.length <= 0;
313
-
314
- const isValidStringCodePoint = (codePoint) => {
315
- try {
316
- const string = String.fromCodePoint(codePoint);
317
- return !isEmptyString(string); // 如果转换的为空串,说明CodePoint不合法
318
- } catch (e) {
319
- // 转换出错,也是不合法的CodePoint
320
- return false;
321
- }
322
- };
323
-
324
- export function escapeHTMLEntitiesWithoutSemicolon(content) {
325
- if (typeof content !== 'string') {
326
- return '';
327
- }
328
- // 先处理字符实体
329
- const namedRegex = /&(\w+);?/g;
330
- let escaped = content.replace(namedRegex, (match, name) => {
331
- // 不在合法列表里的全部转义,无分号的情况也转义
332
- if (match.indexOf(';') === -1 || htmlEntitiesWithoutSemicolon.indexOf(name.toLowerCase()) === -1) {
333
- return match.replace(/&/g, '&amp;');
334
- }
335
- return match;
336
- });
337
- // 处理十进制数字实体,需要防止误匹配16进制
338
- const numericRegex = /&#(?!x)(\d*);?/gi;
339
- escaped = escaped.replace(numericRegex, (match, decimalCodePoint) => {
340
- // 不在合法列表里的全部转义,无分号的情况也转义
341
- // 且位数不能大于7,否则可能导致溢出: https://spec.commonmark.org/0.29/#decimal-numeric-character
342
- if (
343
- isEmptyString(decimalCodePoint) ||
344
- match.indexOf(';') === -1 ||
345
- decimalCodePoint.lenth > 7 ||
346
- // Object.keys(htmlEntitiesMap).indexOf(+decimalCodePoint) === -1 ||
347
- !isValidStringCodePoint(decimalCodePoint)
348
- ) {
349
- return match.replace(/&/g, '&amp;');
350
- }
351
- return match;
352
- });
353
- // 处理十六进制数字实体
354
- const hexRegex = /&#x([0-9a-f]*);?/gi;
355
- escaped = escaped.replace(hexRegex, (match, hexCodePoint) => {
356
- if (isEmptyString(hexCodePoint)) {
357
- return match.replace(/&/g, '&amp;');
358
- }
359
- const hexCode = `0x${hexCodePoint}`;
360
- const decimalCodePoint = parseInt(hexCode, 16);
361
- // parseInt非数字、不在合法列表里、无分号的情况全部转义
362
- // 且位数不能大于6: https://spec.commonmark.org/0.29/#hexadecimal-numeric-character
363
- if (
364
- isNaN(decimalCodePoint) ||
365
- match.indexOf(';') === -1 ||
366
- hexCodePoint.lenth > 6 ||
367
- // Object.keys(htmlEntitiesMap).indexOf(decimalCodePoint) === -1
368
- !isValidStringCodePoint(hexCode)
369
- ) {
370
- return match.replace(/&/g, '&amp;');
371
- }
372
- return match;
373
- });
374
- return escaped;
375
- }
376
-
377
- export const blockNames = [
378
- 'h1|h2|h3|h4|h5|h6',
379
- 'ul|ol|li|dd|dl|dt',
380
- 'table|thead|tbody|tfoot|col|colgroup|th|td|tr',
381
- 'div|article|section|footer|aside|details|summary|code|audio|video|canvas|figure',
382
- 'address|center|cite|p|pre|blockquote|marquee|caption|figcaption|track|source|output|svg',
383
- ].join('|');
384
- export const inlineNames = [
385
- 'span|a|link|b|s|i|del|u|em|strong|sup|sub|kbd',
386
- 'nav|font|bdi|samp|map|area|small|time|bdo|var|wbr|meter|dfn',
387
- 'ruby|rt|rp|mark|q|progress|input|textarea|select|ins',
388
- ].join('|');
389
- export const inlineBlock = 'br|img|hr';
390
- export const whiteList = new RegExp(`^(${blockNames}|${inlineNames}|${inlineBlock})( |$|/)`, 'i');
391
-
392
- export function escapeHTMLSpecialChar(content, enableQuote) {
393
- if (typeof content !== 'string') {
394
- return '';
395
- }
396
- if (enableQuote) {
397
- return content.replace(/[<>&]/g, (char) => escapeMap[char] || char);
398
- }
399
- return content.replace(/[<>&"']/g, (char) => escapeMap[char] || char);
400
- }
401
-
402
- export function unescapeHTMLSpecialChar(content) {
403
- if (typeof content !== 'string') {
404
- return '';
405
- }
406
- return content.replace(/&(\w+);?/g, (escaped, name) => unescapeMap[name] || escaped);
407
- }
408
-
409
- export function escapeHTMLSpecialCharOnce(content, enableQuote) {
410
- if (typeof content !== 'string') {
411
- return '';
412
- }
413
- let str = convertHTMLNumberToName(content);
414
- str = unescapeHTMLSpecialChar(str);
415
- return escapeHTMLSpecialChar(str, enableQuote);
416
- }
417
-
418
- export function convertHTMLNumberToName(html) {
419
- const entities = /&#(\d+);?/g;
420
- return html.replace(entities, (match, codePoint) => htmlEntitiesMap[codePoint] || match);
421
- }
422
-
423
- export function unescapeHTMLNumberEntities(html) {
424
- const entities = /&#(\d+);?/g;
425
- return html.replace(entities, (match, codePoint) => {
426
- try {
427
- const escaped = String.fromCodePoint(codePoint);
428
- return escaped;
429
- } catch (e) {
430
- return match;
431
- }
432
- });
433
- }
434
-
435
- export function unescapeHTMLHexEntities(html) {
436
- const entities = /&#x([0-9a-f]+);?/gi;
437
- return html.replace(entities, (match, codePoint) => {
438
- const hexCode = parseInt(`0x${codePoint}`, 16);
439
- try {
440
- const escaped = String.fromCodePoint(hexCode);
441
- return escaped;
442
- } catch (e) {
443
- return match;
444
- }
445
- });
446
- }
447
-
448
- export function isValidScheme(url) {
449
- const regex = /^\s*([\w\W]+?)(?=:)/i;
450
- const match = unescapeHTMLHexEntities(unescapeHTMLNumberEntities(url)).match(regex);
451
- if (!match) {
452
- return true;
453
- }
454
- const SCHEME_BLACKLIST = ['javascript', 'data'];
455
- const scheme = match[1].replace(/[\s]/g, ''); // 协议中间可能会出现空白字符绕过检查
456
- if (SCHEME_BLACKLIST.indexOf(scheme.toLowerCase()) !== -1) {
457
- return false;
458
- }
459
- return true;
460
- }
461
-
462
- /**
463
- * ref: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
464
- * RFC3986 encodeURIComponent
465
- * @param {string} str
466
- */
467
- export function encodeURIComponentRFC3986(str) {
468
- return encodeURIComponent(str).replace(/[!'()*]/g, (char) => `%${char.charCodeAt(0).toString(16)}`);
469
- }
470
-
471
- /**
472
- * ref: https://stackoverflow.com/questions/9245333/should-encodeuri-ever-be-used
473
- * @param {string} str
474
- */
475
- export function encodeURIOnce(str) {
476
- return encodeURI(str).replace(/%25/g, '%');
477
- }
@@ -1,50 +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
-
17
- /**
18
- * 获取用户选中的文本内容,如果没有选中文本,则返回光标所在的位置的内容
19
- * @param {Object} cm Codemirror实例
20
- * @param {string} selection 当前选中的文本内容
21
- * @param {string} type 'line': 当没有选择文本时,获取光标所在行的内容; 'word': 当没有选择文本时,获取光标所在单词的内容
22
- * @param {boolean} focus true;强行选中光标处的内容,否则只获取选中的内容
23
- * @returns {string}
24
- */
25
- export function getSelection(cm, selection, type = 'word', focus = false) {
26
- // 多光标模式下不做处理
27
- if (cm.getSelections().length > 1) {
28
- return selection;
29
- }
30
- if (selection && !focus) {
31
- return selection;
32
- }
33
- // 获取光标所在行的内容,同时选中所在行
34
- if (type === 'line') {
35
- const { anchor, head } = cm.listSelections()[0];
36
- // 如果begin在end的后面
37
- if ((anchor.line === head.line && anchor.ch > head.ch) || anchor.line > head.line) {
38
- cm.setSelection({ line: head.line, ch: 0 }, { line: anchor.line, ch: cm.getLine(anchor.line).length });
39
- } else {
40
- cm.setSelection({ line: anchor.line, ch: 0 }, { line: head.line, ch: cm.getLine(head.line).length });
41
- }
42
- return cm.getSelection();
43
- }
44
- // 获取光标所在单词的内容,同时选中所在单词
45
- if (type === 'word') {
46
- const { anchor: begin, head: end } = cm.findWordAt(cm.getCursor());
47
- cm.setSelection(begin, end);
48
- return cm.getSelection();
49
- }
50
- }