@dangl/angular-material-shared 2.5.1-beta0012 → 2.5.1-beta0018

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 (241) hide show
  1. package/README.md +1 -7
  2. package/esm2022/lib/angular-material-shared.module.mjs +2 -2
  3. package/esm2022/lib/components/tiny-mce/tiny-mce.component.mjs +16 -19
  4. package/fesm2022/dangl-angular-material-shared.mjs +16 -19
  5. package/fesm2022/dangl-angular-material-shared.mjs.map +1 -1
  6. package/lib/components/tiny-mce/tiny-mce.component.d.ts +7 -8
  7. package/package.json +1 -1
  8. package/tinymce-assets/icons/default/icons.js +187 -171
  9. package/tinymce-assets/icons/default/icons.min.js +1 -1
  10. package/tinymce-assets/langs/it.js +1 -1
  11. package/tinymce-assets/plugins/accordion/index.js +7 -0
  12. package/tinymce-assets/plugins/accordion/plugin.js +1054 -0
  13. package/tinymce-assets/plugins/accordion/plugin.min.js +4 -0
  14. package/tinymce-assets/plugins/advlist/plugin.js +185 -187
  15. package/tinymce-assets/plugins/advlist/plugin.min.js +2 -7
  16. package/tinymce-assets/plugins/anchor/plugin.js +79 -81
  17. package/tinymce-assets/plugins/anchor/plugin.min.js +2 -7
  18. package/tinymce-assets/plugins/autolink/plugin.js +209 -194
  19. package/tinymce-assets/plugins/autolink/plugin.min.js +2 -7
  20. package/tinymce-assets/plugins/autoresize/plugin.js +110 -102
  21. package/tinymce-assets/plugins/autoresize/plugin.min.js +2 -7
  22. package/tinymce-assets/plugins/autosave/plugin.js +125 -104
  23. package/tinymce-assets/plugins/autosave/plugin.min.js +2 -7
  24. package/tinymce-assets/plugins/charmap/plugin.js +275 -313
  25. package/tinymce-assets/plugins/charmap/plugin.min.js +2 -7
  26. package/tinymce-assets/plugins/code/plugin.js +18 -24
  27. package/tinymce-assets/plugins/code/plugin.min.js +2 -7
  28. package/tinymce-assets/plugins/codesample/plugin.js +2075 -2074
  29. package/tinymce-assets/plugins/codesample/plugin.min.js +2 -7
  30. package/tinymce-assets/plugins/directionality/plugin.js +247 -305
  31. package/tinymce-assets/plugins/directionality/plugin.min.js +2 -7
  32. package/tinymce-assets/plugins/emoticons/js/emojiimages.js +1 -9424
  33. package/tinymce-assets/plugins/emoticons/js/emojiimages.min.js +1 -1
  34. package/tinymce-assets/plugins/emoticons/js/emojis.js +1 -9423
  35. package/tinymce-assets/plugins/emoticons/js/emojis.min.js +1 -1
  36. package/tinymce-assets/plugins/emoticons/plugin.js +334 -374
  37. package/tinymce-assets/plugins/emoticons/plugin.min.js +2 -7
  38. package/tinymce-assets/plugins/fullscreen/plugin.js +740 -837
  39. package/tinymce-assets/plugins/fullscreen/plugin.min.js +2 -7
  40. package/tinymce-assets/plugins/help/js/i18n/keynav/ar.js +90 -0
  41. package/tinymce-assets/plugins/help/js/i18n/keynav/bg_BG.js +90 -0
  42. package/tinymce-assets/plugins/help/js/i18n/keynav/ca.js +90 -0
  43. package/tinymce-assets/plugins/help/js/i18n/keynav/cs.js +90 -0
  44. package/tinymce-assets/plugins/help/js/i18n/keynav/da.js +90 -0
  45. package/tinymce-assets/plugins/help/js/i18n/keynav/de.js +90 -0
  46. package/tinymce-assets/plugins/help/js/i18n/keynav/el.js +90 -0
  47. package/tinymce-assets/plugins/help/js/i18n/keynav/en.js +90 -0
  48. package/tinymce-assets/plugins/help/js/i18n/keynav/es.js +90 -0
  49. package/tinymce-assets/plugins/help/js/i18n/keynav/eu.js +90 -0
  50. package/tinymce-assets/plugins/help/js/i18n/keynav/fa.js +90 -0
  51. package/tinymce-assets/plugins/help/js/i18n/keynav/fi.js +90 -0
  52. package/tinymce-assets/plugins/help/js/i18n/keynav/fr_FR.js +90 -0
  53. package/tinymce-assets/plugins/help/js/i18n/keynav/he_IL.js +90 -0
  54. package/tinymce-assets/plugins/help/js/i18n/keynav/hi.js +90 -0
  55. package/tinymce-assets/plugins/help/js/i18n/keynav/hr.js +90 -0
  56. package/tinymce-assets/plugins/help/js/i18n/keynav/hu_HU.js +90 -0
  57. package/tinymce-assets/plugins/help/js/i18n/keynav/id.js +90 -0
  58. package/tinymce-assets/plugins/help/js/i18n/keynav/it.js +90 -0
  59. package/tinymce-assets/plugins/help/js/i18n/keynav/ja.js +90 -0
  60. package/tinymce-assets/plugins/help/js/i18n/keynav/kk.js +90 -0
  61. package/tinymce-assets/plugins/help/js/i18n/keynav/ko_KR.js +90 -0
  62. package/tinymce-assets/plugins/help/js/i18n/keynav/ms.js +90 -0
  63. package/tinymce-assets/plugins/help/js/i18n/keynav/nb_NO.js +90 -0
  64. package/tinymce-assets/plugins/help/js/i18n/keynav/nl.js +90 -0
  65. package/tinymce-assets/plugins/help/js/i18n/keynav/pl.js +90 -0
  66. package/tinymce-assets/plugins/help/js/i18n/keynav/pt_BR.js +90 -0
  67. package/tinymce-assets/plugins/help/js/i18n/keynav/pt_PT.js +90 -0
  68. package/tinymce-assets/plugins/help/js/i18n/keynav/ro.js +90 -0
  69. package/tinymce-assets/plugins/help/js/i18n/keynav/ru.js +90 -0
  70. package/tinymce-assets/plugins/help/js/i18n/keynav/sk.js +90 -0
  71. package/tinymce-assets/plugins/help/js/i18n/keynav/sl_SI.js +90 -0
  72. package/tinymce-assets/plugins/help/js/i18n/keynav/sv_SE.js +90 -0
  73. package/tinymce-assets/plugins/help/js/i18n/keynav/th_TH.js +90 -0
  74. package/tinymce-assets/plugins/help/js/i18n/keynav/tr.js +90 -0
  75. package/tinymce-assets/plugins/help/js/i18n/keynav/uk.js +90 -0
  76. package/tinymce-assets/plugins/help/js/i18n/keynav/vi.js +90 -0
  77. package/tinymce-assets/plugins/help/js/i18n/keynav/zh_CN.js +84 -0
  78. package/tinymce-assets/plugins/help/js/i18n/keynav/zh_TW.js +90 -0
  79. package/tinymce-assets/plugins/help/plugin.js +411 -355
  80. package/tinymce-assets/plugins/help/plugin.min.js +2 -7
  81. package/tinymce-assets/plugins/image/plugin.js +876 -1037
  82. package/tinymce-assets/plugins/image/plugin.min.js +2 -7
  83. package/tinymce-assets/plugins/importcss/plugin.js +146 -144
  84. package/tinymce-assets/plugins/importcss/plugin.min.js +2 -7
  85. package/tinymce-assets/plugins/insertdatetime/plugin.js +93 -88
  86. package/tinymce-assets/plugins/insertdatetime/plugin.min.js +2 -7
  87. package/tinymce-assets/plugins/link/plugin.js +718 -768
  88. package/tinymce-assets/plugins/link/plugin.min.js +2 -7
  89. package/tinymce-assets/plugins/lists/plugin.js +1235 -1375
  90. package/tinymce-assets/plugins/lists/plugin.min.js +2 -7
  91. package/tinymce-assets/plugins/media/plugin.js +614 -756
  92. package/tinymce-assets/plugins/media/plugin.min.js +2 -7
  93. package/tinymce-assets/plugins/nonbreaking/plugin.js +71 -48
  94. package/tinymce-assets/plugins/nonbreaking/plugin.min.js +2 -7
  95. package/tinymce-assets/plugins/pagebreak/plugin.js +53 -40
  96. package/tinymce-assets/plugins/pagebreak/plugin.min.js +2 -7
  97. package/tinymce-assets/plugins/preview/plugin.js +36 -65
  98. package/tinymce-assets/plugins/preview/plugin.min.js +2 -7
  99. package/tinymce-assets/plugins/quickbars/plugin.js +304 -331
  100. package/tinymce-assets/plugins/quickbars/plugin.min.js +2 -7
  101. package/tinymce-assets/plugins/save/plugin.js +49 -50
  102. package/tinymce-assets/plugins/save/plugin.min.js +2 -7
  103. package/tinymce-assets/plugins/searchreplace/plugin.js +499 -571
  104. package/tinymce-assets/plugins/searchreplace/plugin.min.js +2 -7
  105. package/tinymce-assets/plugins/table/plugin.js +2572 -10617
  106. package/tinymce-assets/plugins/table/plugin.min.js +2 -7
  107. package/tinymce-assets/plugins/visualblocks/plugin.js +41 -46
  108. package/tinymce-assets/plugins/visualblocks/plugin.min.js +2 -7
  109. package/tinymce-assets/plugins/visualchars/plugin.js +346 -312
  110. package/tinymce-assets/plugins/visualchars/plugin.min.js +2 -7
  111. package/tinymce-assets/plugins/wordcount/plugin.js +159 -179
  112. package/tinymce-assets/plugins/wordcount/plugin.min.js +2 -7
  113. package/tinymce-assets/skins/content/dark/content.css +2 -8
  114. package/tinymce-assets/skins/content/dark/content.js +2 -0
  115. package/tinymce-assets/skins/content/dark/content.min.css +1 -7
  116. package/tinymce-assets/skins/content/default/content.css +0 -6
  117. package/tinymce-assets/skins/content/default/content.js +2 -0
  118. package/tinymce-assets/skins/content/default/content.min.css +0 -6
  119. package/tinymce-assets/skins/content/document/content.css +0 -6
  120. package/tinymce-assets/skins/content/document/content.js +2 -0
  121. package/tinymce-assets/skins/content/document/content.min.css +0 -6
  122. package/tinymce-assets/skins/content/tinymce-5/content.css +61 -0
  123. package/tinymce-assets/skins/content/tinymce-5/content.js +2 -0
  124. package/tinymce-assets/skins/content/tinymce-5/content.min.css +1 -0
  125. package/tinymce-assets/skins/content/tinymce-5-dark/content.css +66 -0
  126. package/tinymce-assets/skins/content/tinymce-5-dark/content.js +2 -0
  127. package/tinymce-assets/skins/content/tinymce-5-dark/content.min.css +1 -0
  128. package/tinymce-assets/skins/content/writer/content.css +0 -6
  129. package/tinymce-assets/skins/content/writer/content.js +2 -0
  130. package/tinymce-assets/skins/content/writer/content.min.css +0 -6
  131. package/tinymce-assets/skins/ui/oxide/content.css +73 -20
  132. package/tinymce-assets/skins/ui/oxide/content.inline.css +73 -20
  133. package/tinymce-assets/skins/ui/oxide/content.inline.js +2 -0
  134. package/tinymce-assets/skins/ui/oxide/content.inline.min.css +1 -7
  135. package/tinymce-assets/skins/ui/oxide/content.js +2 -0
  136. package/tinymce-assets/skins/ui/oxide/content.min.css +1 -7
  137. package/tinymce-assets/skins/ui/oxide/skin.css +1480 -435
  138. package/tinymce-assets/skins/ui/oxide/skin.js +2 -0
  139. package/tinymce-assets/skins/ui/oxide/skin.min.css +1 -7
  140. package/tinymce-assets/skins/ui/oxide/skin.shadowdom.css +1 -8
  141. package/tinymce-assets/skins/ui/oxide/skin.shadowdom.js +2 -0
  142. package/tinymce-assets/skins/ui/oxide/skin.shadowdom.min.css +1 -7
  143. package/tinymce-assets/skins/ui/oxide-dark/content.css +71 -19
  144. package/tinymce-assets/skins/ui/oxide-dark/content.inline.css +73 -20
  145. package/tinymce-assets/skins/ui/oxide-dark/content.inline.js +2 -0
  146. package/tinymce-assets/skins/ui/oxide-dark/content.inline.min.css +1 -7
  147. package/tinymce-assets/skins/ui/oxide-dark/content.js +2 -0
  148. package/tinymce-assets/skins/ui/oxide-dark/content.min.css +1 -7
  149. package/tinymce-assets/skins/ui/oxide-dark/skin.css +1498 -450
  150. package/tinymce-assets/skins/ui/oxide-dark/skin.js +2 -0
  151. package/tinymce-assets/skins/ui/oxide-dark/skin.min.css +1 -7
  152. package/tinymce-assets/skins/ui/oxide-dark/skin.shadowdom.css +1 -8
  153. package/tinymce-assets/skins/ui/oxide-dark/skin.shadowdom.js +2 -0
  154. package/tinymce-assets/skins/ui/oxide-dark/skin.shadowdom.min.css +1 -7
  155. package/tinymce-assets/skins/ui/tinymce-5/content.css +785 -0
  156. package/tinymce-assets/skins/ui/tinymce-5/content.inline.css +779 -0
  157. package/tinymce-assets/skins/ui/tinymce-5/content.inline.js +2 -0
  158. package/tinymce-assets/skins/ui/tinymce-5/content.inline.min.css +1 -0
  159. package/tinymce-assets/skins/ui/tinymce-5/content.js +2 -0
  160. package/tinymce-assets/skins/ui/tinymce-5/content.min.css +1 -0
  161. package/tinymce-assets/skins/ui/tinymce-5/skin.css +4185 -0
  162. package/tinymce-assets/skins/ui/tinymce-5/skin.js +2 -0
  163. package/tinymce-assets/skins/ui/tinymce-5/skin.min.css +1 -0
  164. package/tinymce-assets/skins/ui/tinymce-5/skin.shadowdom.css +30 -0
  165. package/tinymce-assets/skins/ui/tinymce-5/skin.shadowdom.js +2 -0
  166. package/tinymce-assets/skins/ui/tinymce-5/skin.shadowdom.min.css +1 -0
  167. package/tinymce-assets/skins/ui/tinymce-5-dark/content.css +766 -0
  168. package/tinymce-assets/skins/ui/tinymce-5-dark/content.inline.css +779 -0
  169. package/tinymce-assets/skins/ui/tinymce-5-dark/content.inline.js +2 -0
  170. package/tinymce-assets/skins/ui/tinymce-5-dark/content.inline.min.css +1 -0
  171. package/tinymce-assets/skins/ui/tinymce-5-dark/content.js +2 -0
  172. package/tinymce-assets/skins/ui/tinymce-5-dark/content.min.css +1 -0
  173. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.css +4185 -0
  174. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.js +2 -0
  175. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.min.css +1 -0
  176. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.shadowdom.css +30 -0
  177. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.shadowdom.js +2 -0
  178. package/tinymce-assets/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +1 -0
  179. package/tinymce-assets/themes/silver/theme.js +25226 -28188
  180. package/tinymce-assets/themes/silver/theme.min.js +2 -7
  181. package/tinymce-assets/plugins/bbcode/index.js +0 -7
  182. package/tinymce-assets/plugins/bbcode/plugin.js +0 -99
  183. package/tinymce-assets/plugins/bbcode/plugin.min.js +0 -9
  184. package/tinymce-assets/plugins/colorpicker/index.js +0 -7
  185. package/tinymce-assets/plugins/colorpicker/plugin.js +0 -21
  186. package/tinymce-assets/plugins/colorpicker/plugin.min.js +0 -9
  187. package/tinymce-assets/plugins/contextmenu/index.js +0 -7
  188. package/tinymce-assets/plugins/contextmenu/plugin.js +0 -21
  189. package/tinymce-assets/plugins/contextmenu/plugin.min.js +0 -9
  190. package/tinymce-assets/plugins/fullpage/index.js +0 -7
  191. package/tinymce-assets/plugins/fullpage/plugin.js +0 -544
  192. package/tinymce-assets/plugins/fullpage/plugin.min.js +0 -9
  193. package/tinymce-assets/plugins/hr/index.js +0 -7
  194. package/tinymce-assets/plugins/hr/plugin.js +0 -45
  195. package/tinymce-assets/plugins/hr/plugin.min.js +0 -9
  196. package/tinymce-assets/plugins/imagetools/index.js +0 -7
  197. package/tinymce-assets/plugins/imagetools/plugin.js +0 -1531
  198. package/tinymce-assets/plugins/imagetools/plugin.min.js +0 -9
  199. package/tinymce-assets/plugins/legacyoutput/index.js +0 -7
  200. package/tinymce-assets/plugins/legacyoutput/plugin.js +0 -199
  201. package/tinymce-assets/plugins/legacyoutput/plugin.min.js +0 -9
  202. package/tinymce-assets/plugins/noneditable/index.js +0 -7
  203. package/tinymce-assets/plugins/noneditable/plugin.js +0 -117
  204. package/tinymce-assets/plugins/noneditable/plugin.min.js +0 -9
  205. package/tinymce-assets/plugins/paste/index.js +0 -7
  206. package/tinymce-assets/plugins/paste/plugin.js +0 -1803
  207. package/tinymce-assets/plugins/paste/plugin.min.js +0 -9
  208. package/tinymce-assets/plugins/print/index.js +0 -7
  209. package/tinymce-assets/plugins/print/plugin.js +0 -52
  210. package/tinymce-assets/plugins/print/plugin.min.js +0 -9
  211. package/tinymce-assets/plugins/spellchecker/index.js +0 -7
  212. package/tinymce-assets/plugins/spellchecker/plugin.js +0 -730
  213. package/tinymce-assets/plugins/spellchecker/plugin.min.js +0 -9
  214. package/tinymce-assets/plugins/tabfocus/index.js +0 -7
  215. package/tinymce-assets/plugins/tabfocus/plugin.js +0 -130
  216. package/tinymce-assets/plugins/tabfocus/plugin.min.js +0 -9
  217. package/tinymce-assets/plugins/template/index.js +0 -7
  218. package/tinymce-assets/plugins/template/plugin.js +0 -591
  219. package/tinymce-assets/plugins/template/plugin.min.js +0 -9
  220. package/tinymce-assets/plugins/textcolor/index.js +0 -7
  221. package/tinymce-assets/plugins/textcolor/plugin.js +0 -21
  222. package/tinymce-assets/plugins/textcolor/plugin.min.js +0 -9
  223. package/tinymce-assets/plugins/textpattern/index.js +0 -7
  224. package/tinymce-assets/plugins/textpattern/plugin.js +0 -1374
  225. package/tinymce-assets/plugins/textpattern/plugin.min.js +0 -9
  226. package/tinymce-assets/plugins/toc/index.js +0 -7
  227. package/tinymce-assets/plugins/toc/plugin.js +0 -238
  228. package/tinymce-assets/plugins/toc/plugin.min.js +0 -9
  229. package/tinymce-assets/skins/ui/oxide/content.mobile.css +0 -29
  230. package/tinymce-assets/skins/ui/oxide/content.mobile.min.css +0 -7
  231. package/tinymce-assets/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  232. package/tinymce-assets/skins/ui/oxide/skin.mobile.css +0 -673
  233. package/tinymce-assets/skins/ui/oxide/skin.mobile.min.css +0 -7
  234. package/tinymce-assets/skins/ui/oxide-dark/content.mobile.css +0 -29
  235. package/tinymce-assets/skins/ui/oxide-dark/content.mobile.min.css +0 -7
  236. package/tinymce-assets/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  237. package/tinymce-assets/skins/ui/oxide-dark/skin.mobile.css +0 -673
  238. package/tinymce-assets/skins/ui/oxide-dark/skin.mobile.min.css +0 -7
  239. package/tinymce-assets/themes/mobile/index.js +0 -7
  240. package/tinymce-assets/themes/mobile/theme.js +0 -13130
  241. package/tinymce-assets/themes/mobile/theme.min.js +0 -9
@@ -1,2272 +1,2247 @@
1
1
  /**
2
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3
- * Licensed under the LGPL or a commercial license.
4
- * For LGPL see License.txt in the project root for license information.
5
- * For commercial licenses see https://www.tiny.cloud/
6
- *
7
- * Version: 5.10.9 (2023-11-15)
2
+ * TinyMCE version 7.0.1 (2024-04-10)
8
3
  */
4
+
9
5
  (function () {
10
6
  'use strict';
11
7
 
12
8
  var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
13
9
 
14
- var noop = function () {
10
+ const isNullable = a => a === null || a === undefined;
11
+ const isNonNullable = a => !isNullable(a);
12
+
13
+ const noop = () => {
15
14
  };
16
- var constant = function (value) {
17
- return function () {
15
+ const constant = value => {
16
+ return () => {
18
17
  return value;
19
18
  };
20
19
  };
21
- var identity = function (x) {
22
- return x;
23
- };
24
- var never = constant(false);
25
- var always = constant(true);
26
20
 
27
- var none = function () {
28
- return NONE;
29
- };
30
- var NONE = function () {
31
- var call = function (thunk) {
32
- return thunk();
33
- };
34
- var id = identity;
35
- var me = {
36
- fold: function (n, _s) {
37
- return n();
38
- },
39
- isSome: never,
40
- isNone: always,
41
- getOr: id,
42
- getOrThunk: call,
43
- getOrDie: function (msg) {
44
- throw new Error(msg || 'error: getOrDie called on none.');
45
- },
46
- getOrNull: constant(null),
47
- getOrUndefined: constant(undefined),
48
- or: id,
49
- orThunk: call,
50
- map: none,
51
- each: noop,
52
- bind: none,
53
- exists: never,
54
- forall: always,
55
- filter: function () {
56
- return none();
57
- },
58
- toArray: function () {
59
- return [];
60
- },
61
- toString: constant('none()')
62
- };
63
- return me;
64
- }();
65
- var some = function (a) {
66
- var constant_a = constant(a);
67
- var self = function () {
68
- return me;
69
- };
70
- var bind = function (f) {
71
- return f(a);
72
- };
73
- var me = {
74
- fold: function (n, s) {
75
- return s(a);
76
- },
77
- isSome: always,
78
- isNone: never,
79
- getOr: constant_a,
80
- getOrThunk: constant_a,
81
- getOrDie: constant_a,
82
- getOrNull: constant_a,
83
- getOrUndefined: constant_a,
84
- or: self,
85
- orThunk: self,
86
- map: function (f) {
87
- return some(f(a));
88
- },
89
- each: function (f) {
90
- f(a);
91
- },
92
- bind: bind,
93
- exists: bind,
94
- forall: bind,
95
- filter: function (f) {
96
- return f(a) ? me : NONE;
97
- },
98
- toArray: function () {
99
- return [a];
100
- },
101
- toString: function () {
102
- return 'some(' + a + ')';
21
+ class Optional {
22
+ constructor(tag, value) {
23
+ this.tag = tag;
24
+ this.value = value;
25
+ }
26
+ static some(value) {
27
+ return new Optional(true, value);
28
+ }
29
+ static none() {
30
+ return Optional.singletonNone;
31
+ }
32
+ fold(onNone, onSome) {
33
+ if (this.tag) {
34
+ return onSome(this.value);
35
+ } else {
36
+ return onNone();
103
37
  }
104
- };
105
- return me;
106
- };
107
- var from = function (value) {
108
- return value === null || value === undefined ? NONE : some(value);
109
- };
110
- var Optional = {
111
- some: some,
112
- none: none,
113
- from: from
114
- };
115
-
116
- var get$1 = function (xs, i) {
117
- return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();
118
- };
119
- var head = function (xs) {
120
- return get$1(xs, 0);
121
- };
38
+ }
39
+ isSome() {
40
+ return this.tag;
41
+ }
42
+ isNone() {
43
+ return !this.tag;
44
+ }
45
+ map(mapper) {
46
+ if (this.tag) {
47
+ return Optional.some(mapper(this.value));
48
+ } else {
49
+ return Optional.none();
50
+ }
51
+ }
52
+ bind(binder) {
53
+ if (this.tag) {
54
+ return binder(this.value);
55
+ } else {
56
+ return Optional.none();
57
+ }
58
+ }
59
+ exists(predicate) {
60
+ return this.tag && predicate(this.value);
61
+ }
62
+ forall(predicate) {
63
+ return !this.tag || predicate(this.value);
64
+ }
65
+ filter(predicate) {
66
+ if (!this.tag || predicate(this.value)) {
67
+ return this;
68
+ } else {
69
+ return Optional.none();
70
+ }
71
+ }
72
+ getOr(replacement) {
73
+ return this.tag ? this.value : replacement;
74
+ }
75
+ or(replacement) {
76
+ return this.tag ? this : replacement;
77
+ }
78
+ getOrThunk(thunk) {
79
+ return this.tag ? this.value : thunk();
80
+ }
81
+ orThunk(thunk) {
82
+ return this.tag ? this : thunk();
83
+ }
84
+ getOrDie(message) {
85
+ if (!this.tag) {
86
+ throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');
87
+ } else {
88
+ return this.value;
89
+ }
90
+ }
91
+ static from(value) {
92
+ return isNonNullable(value) ? Optional.some(value) : Optional.none();
93
+ }
94
+ getOrNull() {
95
+ return this.tag ? this.value : null;
96
+ }
97
+ getOrUndefined() {
98
+ return this.value;
99
+ }
100
+ each(worker) {
101
+ if (this.tag) {
102
+ worker(this.value);
103
+ }
104
+ }
105
+ toArray() {
106
+ return this.tag ? [this.value] : [];
107
+ }
108
+ toString() {
109
+ return this.tag ? `some(${ this.value })` : 'none()';
110
+ }
111
+ }
112
+ Optional.singletonNone = new Optional(false);
122
113
 
123
- var someIf = function (b, a) {
124
- return b ? Optional.some(a) : Optional.none();
125
- };
114
+ const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();
115
+ const head = xs => get$1(xs, 0);
126
116
 
127
117
  var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
128
118
 
129
- var isCodeSample = function (elm) {
130
- return elm && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1;
131
- };
132
- var trimArg = function (predicateFn) {
133
- return function (arg1, arg2) {
134
- return predicateFn(arg2);
135
- };
136
- };
137
-
138
- var Global = typeof window !== 'undefined' ? window : Function('return this;')();
119
+ const Global = typeof window !== 'undefined' ? window : Function('return this;')();
139
120
 
140
- var exports$1 = {}, module = { exports: exports$1 }, global = {};
141
- (function (define, exports, module, require) {
142
- var oldprism = window.Prism;
121
+ const prismjs = function (global, module, exports) {
122
+ const oldprism = window.Prism;
143
123
  window.Prism = { manual: true };
144
- (function (global, factory) {
145
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EphoxContactWrapper = factory());
146
- }(this, function () {
147
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
148
- var prismCore = { exports: {} };
149
- (function (module) {
150
- var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : {};
151
- var Prism = function (_self) {
152
- var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
153
- var uniqueId = 0;
154
- var plainTextGrammar = {};
155
- var _ = {
156
- manual: _self.Prism && _self.Prism.manual,
157
- disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
158
- util: {
159
- encode: function encode(tokens) {
160
- if (tokens instanceof Token) {
161
- return new Token(tokens.type, encode(tokens.content), tokens.alias);
162
- } else if (Array.isArray(tokens)) {
163
- return tokens.map(encode);
164
- } else {
165
- return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
166
- }
167
- },
168
- type: function (o) {
169
- return Object.prototype.toString.call(o).slice(8, -1);
170
- },
171
- objId: function (obj) {
172
- if (!obj['__id']) {
173
- Object.defineProperty(obj, '__id', { value: ++uniqueId });
174
- }
175
- return obj['__id'];
176
- },
177
- clone: function deepClone(o, visited) {
178
- visited = visited || {};
179
- var clone;
180
- var id;
181
- switch (_.util.type(o)) {
182
- case 'Object':
183
- id = _.util.objId(o);
184
- if (visited[id]) {
185
- return visited[id];
186
- }
187
- clone = {};
188
- visited[id] = clone;
189
- for (var key in o) {
190
- if (o.hasOwnProperty(key)) {
191
- clone[key] = deepClone(o[key], visited);
192
- }
193
- }
194
- return clone;
195
- case 'Array':
196
- id = _.util.objId(o);
197
- if (visited[id]) {
198
- return visited[id];
199
- }
200
- clone = [];
201
- visited[id] = clone;
202
- o.forEach(function (v, i) {
203
- clone[i] = deepClone(v, visited);
204
- });
205
- return clone;
206
- default:
207
- return o;
208
- }
209
- },
210
- getLanguage: function (element) {
211
- while (element) {
212
- var m = lang.exec(element.className);
213
- if (m) {
214
- return m[1].toLowerCase();
215
- }
216
- element = element.parentElement;
217
- }
218
- return 'none';
219
- },
220
- setLanguage: function (element, language) {
221
- element.className = element.className.replace(RegExp(lang.source, 'gi'), '');
222
- element.classList.add('language-' + language);
223
- },
224
- currentScript: function () {
225
- if (typeof document === 'undefined') {
226
- return null;
227
- }
228
- if ('currentScript' in document && 1 < 2) {
229
- return document.currentScript;
230
- }
231
- try {
232
- throw new Error();
233
- } catch (err) {
234
- var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
235
- if (src) {
236
- var scripts = document.getElementsByTagName('script');
237
- for (var i in scripts) {
238
- if (scripts[i].src == src) {
239
- return scripts[i];
240
- }
241
- }
242
- }
243
- return null;
244
- }
245
- },
246
- isActive: function (element, className, defaultActivation) {
247
- var no = 'no-' + className;
248
- while (element) {
249
- var classList = element.classList;
250
- if (classList.contains(className)) {
251
- return true;
252
- }
253
- if (classList.contains(no)) {
254
- return false;
255
- }
256
- element = element.parentElement;
257
- }
258
- return !!defaultActivation;
259
- }
260
- },
261
- languages: {
262
- plain: plainTextGrammar,
263
- plaintext: plainTextGrammar,
264
- text: plainTextGrammar,
265
- txt: plainTextGrammar,
266
- extend: function (id, redef) {
267
- var lang = _.util.clone(_.languages[id]);
268
- for (var key in redef) {
269
- lang[key] = redef[key];
270
- }
271
- return lang;
272
- },
273
- insertBefore: function (inside, before, insert, root) {
274
- root = root || _.languages;
275
- var grammar = root[inside];
276
- var ret = {};
277
- for (var token in grammar) {
278
- if (grammar.hasOwnProperty(token)) {
279
- if (token == before) {
280
- for (var newToken in insert) {
281
- if (insert.hasOwnProperty(newToken)) {
282
- ret[newToken] = insert[newToken];
283
- }
284
- }
285
- }
286
- if (!insert.hasOwnProperty(token)) {
287
- ret[token] = grammar[token];
288
- }
289
- }
290
- }
291
- var old = root[inside];
292
- root[inside] = ret;
293
- _.languages.DFS(_.languages, function (key, value) {
294
- if (value === old && key != inside) {
295
- this[key] = ret;
296
- }
297
- });
298
- return ret;
299
- },
300
- DFS: function DFS(o, callback, type, visited) {
301
- visited = visited || {};
302
- var objId = _.util.objId;
303
- for (var i in o) {
304
- if (o.hasOwnProperty(i)) {
305
- callback.call(o, i, o[i], type || i);
306
- var property = o[i];
307
- var propertyType = _.util.type(property);
308
- if (propertyType === 'Object' && !visited[objId(property)]) {
309
- visited[objId(property)] = true;
310
- DFS(property, callback, null, visited);
311
- } else if (propertyType === 'Array' && !visited[objId(property)]) {
312
- visited[objId(property)] = true;
313
- DFS(property, callback, i, visited);
314
- }
315
- }
316
- }
317
- }
318
- },
319
- plugins: {},
320
- highlightAll: function (async, callback) {
321
- _.highlightAllUnder(document, async, callback);
322
- },
323
- highlightAllUnder: function (container, async, callback) {
324
- var env = {
325
- callback: callback,
326
- container: container,
327
- selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
328
- };
329
- _.hooks.run('before-highlightall', env);
330
- env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));
331
- _.hooks.run('before-all-elements-highlight', env);
332
- for (var i = 0, element; element = env.elements[i++];) {
333
- _.highlightElement(element, async === true, env.callback);
334
- }
335
- },
336
- highlightElement: function (element, async, callback) {
337
- var language = _.util.getLanguage(element);
338
- var grammar = _.languages[language];
339
- _.util.setLanguage(element, language);
340
- var parent = element.parentElement;
341
- if (parent && parent.nodeName.toLowerCase() === 'pre') {
342
- _.util.setLanguage(parent, language);
343
- }
344
- var code = element.textContent;
345
- var env = {
346
- element: element,
347
- language: language,
348
- grammar: grammar,
349
- code: code
350
- };
351
- function insertHighlightedCode(highlightedCode) {
352
- env.highlightedCode = highlightedCode;
353
- _.hooks.run('before-insert', env);
354
- env.element.innerHTML = env.highlightedCode;
355
- _.hooks.run('after-highlight', env);
356
- _.hooks.run('complete', env);
357
- callback && callback.call(env.element);
358
- }
359
- _.hooks.run('before-sanity-check', env);
360
- parent = env.element.parentElement;
361
- if (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {
362
- parent.setAttribute('tabindex', '0');
363
- }
364
- if (!env.code) {
365
- _.hooks.run('complete', env);
366
- callback && callback.call(env.element);
367
- return;
368
- }
369
- _.hooks.run('before-highlight', env);
370
- if (!env.grammar) {
371
- insertHighlightedCode(_.util.encode(env.code));
372
- return;
373
- }
374
- if (async && _self.Worker) {
375
- var worker = new Worker(_.filename);
376
- worker.onmessage = function (evt) {
377
- insertHighlightedCode(evt.data);
378
- };
379
- worker.postMessage(JSON.stringify({
380
- language: env.language,
381
- code: env.code,
382
- immediateClose: true
383
- }));
384
- } else {
385
- insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
386
- }
387
- },
388
- highlight: function (text, grammar, language) {
389
- var env = {
390
- code: text,
391
- grammar: grammar,
392
- language: language
393
- };
394
- _.hooks.run('before-tokenize', env);
395
- if (!env.grammar) {
396
- throw new Error('The language "' + env.language + '" has no grammar.');
124
+ var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : {};
125
+ var Prism = function (_self) {
126
+ var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
127
+ var uniqueId = 0;
128
+ var plainTextGrammar = {};
129
+ var _ = {
130
+ manual: _self.Prism && _self.Prism.manual,
131
+ disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
132
+ util: {
133
+ encode: function encode(tokens) {
134
+ if (tokens instanceof Token) {
135
+ return new Token(tokens.type, encode(tokens.content), tokens.alias);
136
+ } else if (Array.isArray(tokens)) {
137
+ return tokens.map(encode);
138
+ } else {
139
+ return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
140
+ }
141
+ },
142
+ type: function (o) {
143
+ return Object.prototype.toString.call(o).slice(8, -1);
144
+ },
145
+ objId: function (obj) {
146
+ if (!obj['__id']) {
147
+ Object.defineProperty(obj, '__id', { value: ++uniqueId });
148
+ }
149
+ return obj['__id'];
150
+ },
151
+ clone: function deepClone(o, visited) {
152
+ visited = visited || {};
153
+ var clone;
154
+ var id;
155
+ switch (_.util.type(o)) {
156
+ case 'Object':
157
+ id = _.util.objId(o);
158
+ if (visited[id]) {
159
+ return visited[id];
397
160
  }
398
- env.tokens = _.tokenize(env.code, env.grammar);
399
- _.hooks.run('after-tokenize', env);
400
- return Token.stringify(_.util.encode(env.tokens), env.language);
401
- },
402
- tokenize: function (text, grammar) {
403
- var rest = grammar.rest;
404
- if (rest) {
405
- for (var token in rest) {
406
- grammar[token] = rest[token];
161
+ clone = {};
162
+ visited[id] = clone;
163
+ for (var key in o) {
164
+ if (o.hasOwnProperty(key)) {
165
+ clone[key] = deepClone(o[key], visited);
407
166
  }
408
- delete grammar.rest;
409
167
  }
410
- var tokenList = new LinkedList();
411
- addAfter(tokenList, tokenList.head, text);
412
- matchGrammar(text, tokenList, grammar, tokenList.head, 0);
413
- return toArray(tokenList);
414
- },
415
- hooks: {
416
- all: {},
417
- add: function (name, callback) {
418
- var hooks = _.hooks.all;
419
- hooks[name] = hooks[name] || [];
420
- hooks[name].push(callback);
421
- },
422
- run: function (name, env) {
423
- var callbacks = _.hooks.all[name];
424
- if (!callbacks || !callbacks.length) {
425
- return;
426
- }
427
- for (var i = 0, callback; callback = callbacks[i++];) {
428
- callback(env);
429
- }
168
+ return clone;
169
+ case 'Array':
170
+ id = _.util.objId(o);
171
+ if (visited[id]) {
172
+ return visited[id];
430
173
  }
431
- },
432
- Token: Token
433
- };
434
- _self.Prism = _;
435
- function Token(type, content, alias, matchedStr) {
436
- this.type = type;
437
- this.content = content;
438
- this.alias = alias;
439
- this.length = (matchedStr || '').length | 0;
440
- }
441
- Token.stringify = function stringify(o, language) {
442
- if (typeof o == 'string') {
443
- return o;
444
- }
445
- if (Array.isArray(o)) {
446
- var s = '';
447
- o.forEach(function (e) {
448
- s += stringify(e, language);
174
+ clone = [];
175
+ visited[id] = clone;
176
+ o.forEach(function (v, i) {
177
+ clone[i] = deepClone(v, visited);
449
178
  });
450
- return s;
179
+ return clone;
180
+ default:
181
+ return o;
451
182
  }
452
- var env = {
453
- type: o.type,
454
- content: stringify(o.content, language),
455
- tag: 'span',
456
- classes: [
457
- 'token',
458
- o.type
459
- ],
460
- attributes: {},
461
- language: language
462
- };
463
- var aliases = o.alias;
464
- if (aliases) {
465
- if (Array.isArray(aliases)) {
466
- Array.prototype.push.apply(env.classes, aliases);
467
- } else {
468
- env.classes.push(aliases);
183
+ },
184
+ getLanguage: function (element) {
185
+ while (element) {
186
+ var m = lang.exec(element.className);
187
+ if (m) {
188
+ return m[1].toLowerCase();
469
189
  }
190
+ element = element.parentElement;
470
191
  }
471
- _.hooks.run('wrap', env);
472
- var attributes = '';
473
- for (var name in env.attributes) {
474
- attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
192
+ return 'none';
193
+ },
194
+ setLanguage: function (element, language) {
195
+ element.className = element.className.replace(RegExp(lang, 'gi'), '');
196
+ element.classList.add('language-' + language);
197
+ },
198
+ currentScript: function () {
199
+ if (typeof document === 'undefined') {
200
+ return null;
475
201
  }
476
- return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>';
477
- };
478
- function matchPattern(pattern, pos, text, lookbehind) {
479
- pattern.lastIndex = pos;
480
- var match = pattern.exec(text);
481
- if (match && lookbehind && match[1]) {
482
- var lookbehindLength = match[1].length;
483
- match.index += lookbehindLength;
484
- match[0] = match[0].slice(lookbehindLength);
202
+ if ('currentScript' in document && 1 < 2) {
203
+ return document.currentScript;
204
+ }
205
+ try {
206
+ throw new Error();
207
+ } catch (err) {
208
+ var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
209
+ if (src) {
210
+ var scripts = document.getElementsByTagName('script');
211
+ for (var i in scripts) {
212
+ if (scripts[i].src == src) {
213
+ return scripts[i];
214
+ }
215
+ }
216
+ }
217
+ return null;
485
218
  }
486
- return match;
219
+ },
220
+ isActive: function (element, className, defaultActivation) {
221
+ var no = 'no-' + className;
222
+ while (element) {
223
+ var classList = element.classList;
224
+ if (classList.contains(className)) {
225
+ return true;
226
+ }
227
+ if (classList.contains(no)) {
228
+ return false;
229
+ }
230
+ element = element.parentElement;
231
+ }
232
+ return !!defaultActivation;
487
233
  }
488
- function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
234
+ },
235
+ languages: {
236
+ plain: plainTextGrammar,
237
+ plaintext: plainTextGrammar,
238
+ text: plainTextGrammar,
239
+ txt: plainTextGrammar,
240
+ extend: function (id, redef) {
241
+ var lang = _.util.clone(_.languages[id]);
242
+ for (var key in redef) {
243
+ lang[key] = redef[key];
244
+ }
245
+ return lang;
246
+ },
247
+ insertBefore: function (inside, before, insert, root) {
248
+ root = root || _.languages;
249
+ var grammar = root[inside];
250
+ var ret = {};
489
251
  for (var token in grammar) {
490
- if (!grammar.hasOwnProperty(token) || !grammar[token]) {
491
- continue;
492
- }
493
- var patterns = grammar[token];
494
- patterns = Array.isArray(patterns) ? patterns : [patterns];
495
- for (var j = 0; j < patterns.length; ++j) {
496
- if (rematch && rematch.cause == token + ',' + j) {
497
- return;
498
- }
499
- var patternObj = patterns[j];
500
- var inside = patternObj.inside;
501
- var lookbehind = !!patternObj.lookbehind;
502
- var greedy = !!patternObj.greedy;
503
- var alias = patternObj.alias;
504
- if (greedy && !patternObj.pattern.global) {
505
- var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
506
- patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');
507
- }
508
- var pattern = patternObj.pattern || patternObj;
509
- for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {
510
- if (rematch && pos >= rematch.reach) {
511
- break;
512
- }
513
- var str = currentNode.value;
514
- if (tokenList.length > text.length) {
515
- return;
516
- }
517
- if (str instanceof Token) {
518
- continue;
519
- }
520
- var removeCount = 1;
521
- var match;
522
- if (greedy) {
523
- match = matchPattern(pattern, pos, text, lookbehind);
524
- if (!match || match.index >= text.length) {
525
- break;
526
- }
527
- var from = match.index;
528
- var to = match.index + match[0].length;
529
- var p = pos;
530
- p += currentNode.value.length;
531
- while (from >= p) {
532
- currentNode = currentNode.next;
533
- p += currentNode.value.length;
534
- }
535
- p -= currentNode.value.length;
536
- pos = p;
537
- if (currentNode.value instanceof Token) {
538
- continue;
539
- }
540
- for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string'); k = k.next) {
541
- removeCount++;
542
- p += k.value.length;
543
- }
544
- removeCount--;
545
- str = text.slice(pos, p);
546
- match.index -= pos;
547
- } else {
548
- match = matchPattern(pattern, 0, str, lookbehind);
549
- if (!match) {
550
- continue;
551
- }
552
- }
553
- var from = match.index;
554
- var matchStr = match[0];
555
- var before = str.slice(0, from);
556
- var after = str.slice(from + matchStr.length);
557
- var reach = pos + str.length;
558
- if (rematch && reach > rematch.reach) {
559
- rematch.reach = reach;
560
- }
561
- var removeFrom = currentNode.prev;
562
- if (before) {
563
- removeFrom = addAfter(tokenList, removeFrom, before);
564
- pos += before.length;
565
- }
566
- removeRange(tokenList, removeFrom, removeCount);
567
- var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
568
- currentNode = addAfter(tokenList, removeFrom, wrapped);
569
- if (after) {
570
- addAfter(tokenList, currentNode, after);
571
- }
572
- if (removeCount > 1) {
573
- var nestedRematch = {
574
- cause: token + ',' + j,
575
- reach: reach
576
- };
577
- matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
578
- if (rematch && nestedRematch.reach > rematch.reach) {
579
- rematch.reach = nestedRematch.reach;
252
+ if (grammar.hasOwnProperty(token)) {
253
+ if (token == before) {
254
+ for (var newToken in insert) {
255
+ if (insert.hasOwnProperty(newToken)) {
256
+ ret[newToken] = insert[newToken];
580
257
  }
581
258
  }
582
259
  }
260
+ if (!insert.hasOwnProperty(token)) {
261
+ ret[token] = grammar[token];
262
+ }
263
+ }
264
+ }
265
+ var old = root[inside];
266
+ root[inside] = ret;
267
+ _.languages.DFS(_.languages, function (key, value) {
268
+ if (value === old && key != inside) {
269
+ this[key] = ret;
270
+ }
271
+ });
272
+ return ret;
273
+ },
274
+ DFS: function DFS(o, callback, type, visited) {
275
+ visited = visited || {};
276
+ var objId = _.util.objId;
277
+ for (var i in o) {
278
+ if (o.hasOwnProperty(i)) {
279
+ callback.call(o, i, o[i], type || i);
280
+ var property = o[i];
281
+ var propertyType = _.util.type(property);
282
+ if (propertyType === 'Object' && !visited[objId(property)]) {
283
+ visited[objId(property)] = true;
284
+ DFS(property, callback, null, visited);
285
+ } else if (propertyType === 'Array' && !visited[objId(property)]) {
286
+ visited[objId(property)] = true;
287
+ DFS(property, callback, i, visited);
288
+ }
583
289
  }
584
290
  }
585
291
  }
586
- function LinkedList() {
587
- var head = {
588
- value: null,
589
- prev: null,
590
- next: null
591
- };
592
- var tail = {
593
- value: null,
594
- prev: head,
595
- next: null
596
- };
597
- head.next = tail;
598
- this.head = head;
599
- this.tail = tail;
600
- this.length = 0;
292
+ },
293
+ plugins: {},
294
+ highlightAll: function (async, callback) {
295
+ _.highlightAllUnder(document, async, callback);
296
+ },
297
+ highlightAllUnder: function (container, async, callback) {
298
+ var env = {
299
+ callback: callback,
300
+ container: container,
301
+ selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
302
+ };
303
+ _.hooks.run('before-highlightall', env);
304
+ env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));
305
+ _.hooks.run('before-all-elements-highlight', env);
306
+ for (var i = 0, element; element = env.elements[i++];) {
307
+ _.highlightElement(element, async === true, env.callback);
601
308
  }
602
- function addAfter(list, node, value) {
603
- var next = node.next;
604
- var newNode = {
605
- value: value,
606
- prev: node,
607
- next: next
608
- };
609
- node.next = newNode;
610
- next.prev = newNode;
611
- list.length++;
612
- return newNode;
309
+ },
310
+ highlightElement: function (element, async, callback) {
311
+ var language = _.util.getLanguage(element);
312
+ var grammar = _.languages[language];
313
+ _.util.setLanguage(element, language);
314
+ var parent = element.parentElement;
315
+ if (parent && parent.nodeName.toLowerCase() === 'pre') {
316
+ _.util.setLanguage(parent, language);
613
317
  }
614
- function removeRange(list, node, count) {
615
- var next = node.next;
616
- for (var i = 0; i < count && next !== list.tail; i++) {
617
- next = next.next;
618
- }
619
- node.next = next;
620
- next.prev = node;
621
- list.length -= i;
318
+ var code = element.textContent;
319
+ var env = {
320
+ element: element,
321
+ language: language,
322
+ grammar: grammar,
323
+ code: code
324
+ };
325
+ function insertHighlightedCode(highlightedCode) {
326
+ env.highlightedCode = highlightedCode;
327
+ _.hooks.run('before-insert', env);
328
+ env.element.innerHTML = env.highlightedCode;
329
+ _.hooks.run('after-highlight', env);
330
+ _.hooks.run('complete', env);
331
+ callback && callback.call(env.element);
622
332
  }
623
- function toArray(list) {
624
- var array = [];
625
- var node = list.head.next;
626
- while (node !== list.tail) {
627
- array.push(node.value);
628
- node = node.next;
629
- }
630
- return array;
333
+ _.hooks.run('before-sanity-check', env);
334
+ parent = env.element.parentElement;
335
+ if (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {
336
+ parent.setAttribute('tabindex', '0');
631
337
  }
632
- if (!_self.document) {
633
- if (!_self.addEventListener) {
634
- return _;
635
- }
636
- if (!_.disableWorkerMessageHandler) {
637
- _self.addEventListener('message', function (evt) {
638
- var message = JSON.parse(evt.data);
639
- var lang = message.language;
640
- var code = message.code;
641
- var immediateClose = message.immediateClose;
642
- _self.postMessage(_.highlight(code, _.languages[lang], lang));
643
- if (immediateClose) {
644
- _self.close();
645
- }
646
- }, false);
647
- }
648
- return _;
338
+ if (!env.code) {
339
+ _.hooks.run('complete', env);
340
+ callback && callback.call(env.element);
341
+ return;
649
342
  }
650
- var script = _.util.currentScript();
651
- if (script) {
652
- _.filename = script.src;
653
- if (script.hasAttribute('data-manual')) {
654
- _.manual = true;
655
- }
343
+ _.hooks.run('before-highlight', env);
344
+ if (!env.grammar) {
345
+ insertHighlightedCode(_.util.encode(env.code));
346
+ return;
347
+ }
348
+ if (async && _self.Worker) {
349
+ var worker = new Worker(_.filename);
350
+ worker.onmessage = function (evt) {
351
+ insertHighlightedCode(evt.data);
352
+ };
353
+ worker.postMessage(JSON.stringify({
354
+ language: env.language,
355
+ code: env.code,
356
+ immediateClose: true
357
+ }));
358
+ } else {
359
+ insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
656
360
  }
657
- function highlightAutomaticallyCallback() {
658
- if (!_.manual) {
659
- _.highlightAll();
361
+ },
362
+ highlight: function (text, grammar, language) {
363
+ var env = {
364
+ code: text,
365
+ grammar: grammar,
366
+ language: language
367
+ };
368
+ _.hooks.run('before-tokenize', env);
369
+ if (!env.grammar) {
370
+ throw new Error('The language "' + env.language + '" has no grammar.');
371
+ }
372
+ env.tokens = _.tokenize(env.code, env.grammar);
373
+ _.hooks.run('after-tokenize', env);
374
+ return Token.stringify(_.util.encode(env.tokens), env.language);
375
+ },
376
+ tokenize: function (text, grammar) {
377
+ var rest = grammar.rest;
378
+ if (rest) {
379
+ for (var token in rest) {
380
+ grammar[token] = rest[token];
660
381
  }
382
+ delete grammar.rest;
661
383
  }
662
- if (!_.manual) {
663
- var readyState = document.readyState;
664
- if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {
665
- document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);
666
- } else {
667
- if (window.requestAnimationFrame) {
668
- window.requestAnimationFrame(highlightAutomaticallyCallback);
669
- } else {
670
- window.setTimeout(highlightAutomaticallyCallback, 16);
671
- }
384
+ var tokenList = new LinkedList();
385
+ addAfter(tokenList, tokenList.head, text);
386
+ matchGrammar(text, tokenList, grammar, tokenList.head, 0);
387
+ return toArray(tokenList);
388
+ },
389
+ hooks: {
390
+ all: {},
391
+ add: function (name, callback) {
392
+ var hooks = _.hooks.all;
393
+ hooks[name] = hooks[name] || [];
394
+ hooks[name].push(callback);
395
+ },
396
+ run: function (name, env) {
397
+ var callbacks = _.hooks.all[name];
398
+ if (!callbacks || !callbacks.length) {
399
+ return;
400
+ }
401
+ for (var i = 0, callback; callback = callbacks[i++];) {
402
+ callback(env);
672
403
  }
673
404
  }
674
- return _;
675
- }(_self);
676
- if (module.exports) {
677
- module.exports = Prism;
405
+ },
406
+ Token: Token
407
+ };
408
+ _self.Prism = _;
409
+ function Token(type, content, alias, matchedStr) {
410
+ this.type = type;
411
+ this.content = content;
412
+ this.alias = alias;
413
+ this.length = (matchedStr || '').length | 0;
414
+ }
415
+ Token.stringify = function stringify(o, language) {
416
+ if (typeof o == 'string') {
417
+ return o;
678
418
  }
679
- if (typeof commonjsGlobal !== 'undefined') {
680
- commonjsGlobal.Prism = Prism;
419
+ if (Array.isArray(o)) {
420
+ var s = '';
421
+ o.forEach(function (e) {
422
+ s += stringify(e, language);
423
+ });
424
+ return s;
681
425
  }
682
- }(prismCore));
683
- Prism.languages.clike = {
684
- 'comment': [
685
- {
686
- pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
687
- lookbehind: true,
688
- greedy: true
689
- },
690
- {
691
- pattern: /(^|[^\\:])\/\/.*/,
692
- lookbehind: true,
693
- greedy: true
426
+ var env = {
427
+ type: o.type,
428
+ content: stringify(o.content, language),
429
+ tag: 'span',
430
+ classes: [
431
+ 'token',
432
+ o.type
433
+ ],
434
+ attributes: {},
435
+ language: language
436
+ };
437
+ var aliases = o.alias;
438
+ if (aliases) {
439
+ if (Array.isArray(aliases)) {
440
+ Array.prototype.push.apply(env.classes, aliases);
441
+ } else {
442
+ env.classes.push(aliases);
694
443
  }
695
- ],
696
- 'string': {
697
- pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
698
- greedy: true
699
- },
700
- 'class-name': {
701
- pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
702
- lookbehind: true,
703
- inside: { 'punctuation': /[.\\]/ }
704
- },
705
- 'keyword': /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
706
- 'boolean': /\b(?:false|true)\b/,
707
- 'function': /\b\w+(?=\()/,
708
- 'number': /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
709
- 'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
710
- 'punctuation': /[{}[\];(),.:]/
444
+ }
445
+ _.hooks.run('wrap', env);
446
+ var attributes = '';
447
+ for (var name in env.attributes) {
448
+ attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
449
+ }
450
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>';
711
451
  };
712
- (function (Prism) {
713
- function getPlaceholder(language, index) {
714
- return '___' + language.toUpperCase() + index + '___';
452
+ function matchPattern(pattern, pos, text, lookbehind) {
453
+ pattern.lastIndex = pos;
454
+ var match = pattern.exec(text);
455
+ if (match && lookbehind && match[1]) {
456
+ var lookbehindLength = match[1].length;
457
+ match.index += lookbehindLength;
458
+ match[0] = match[0].slice(lookbehindLength);
715
459
  }
716
- Object.defineProperties(Prism.languages['markup-templating'] = {}, {
717
- buildPlaceholders: {
718
- value: function (env, language, placeholderPattern, replaceFilter) {
719
- if (env.language !== language) {
460
+ return match;
461
+ }
462
+ function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
463
+ for (var token in grammar) {
464
+ if (!grammar.hasOwnProperty(token) || !grammar[token]) {
465
+ continue;
466
+ }
467
+ var patterns = grammar[token];
468
+ patterns = Array.isArray(patterns) ? patterns : [patterns];
469
+ for (var j = 0; j < patterns.length; ++j) {
470
+ if (rematch && rematch.cause == token + ',' + j) {
471
+ return;
472
+ }
473
+ var patternObj = patterns[j];
474
+ var inside = patternObj.inside;
475
+ var lookbehind = !!patternObj.lookbehind;
476
+ var greedy = !!patternObj.greedy;
477
+ var alias = patternObj.alias;
478
+ if (greedy && !patternObj.pattern.global) {
479
+ var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
480
+ patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');
481
+ }
482
+ var pattern = patternObj.pattern || patternObj;
483
+ for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {
484
+ if (rematch && pos >= rematch.reach) {
485
+ break;
486
+ }
487
+ var str = currentNode.value;
488
+ if (tokenList.length > text.length) {
720
489
  return;
721
490
  }
722
- var tokenStack = env.tokenStack = [];
723
- env.code = env.code.replace(placeholderPattern, function (match) {
724
- if (typeof replaceFilter === 'function' && !replaceFilter(match)) {
725
- return match;
491
+ if (str instanceof Token) {
492
+ continue;
493
+ }
494
+ var removeCount = 1;
495
+ var match;
496
+ if (greedy) {
497
+ match = matchPattern(pattern, pos, text, lookbehind);
498
+ if (!match || match.index >= text.length) {
499
+ break;
726
500
  }
727
- var i = tokenStack.length;
728
- var placeholder;
729
- while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
730
- ++i;
501
+ var from = match.index;
502
+ var to = match.index + match[0].length;
503
+ var p = pos;
504
+ p += currentNode.value.length;
505
+ while (from >= p) {
506
+ currentNode = currentNode.next;
507
+ p += currentNode.value.length;
508
+ }
509
+ p -= currentNode.value.length;
510
+ pos = p;
511
+ if (currentNode.value instanceof Token) {
512
+ continue;
513
+ }
514
+ for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string'); k = k.next) {
515
+ removeCount++;
516
+ p += k.value.length;
517
+ }
518
+ removeCount--;
519
+ str = text.slice(pos, p);
520
+ match.index -= pos;
521
+ } else {
522
+ match = matchPattern(pattern, 0, str, lookbehind);
523
+ if (!match) {
524
+ continue;
731
525
  }
732
- tokenStack[i] = match;
733
- return placeholder;
734
- });
735
- env.grammar = Prism.languages.markup;
736
- }
737
- },
738
- tokenizePlaceholders: {
739
- value: function (env, language) {
740
- if (env.language !== language || !env.tokenStack) {
741
- return;
742
526
  }
743
- env.grammar = Prism.languages[language];
744
- var j = 0;
745
- var keys = Object.keys(env.tokenStack);
746
- function walkTokens(tokens) {
747
- for (var i = 0; i < tokens.length; i++) {
748
- if (j >= keys.length) {
749
- break;
750
- }
751
- var token = tokens[i];
752
- if (typeof token === 'string' || token.content && typeof token.content === 'string') {
753
- var k = keys[j];
754
- var t = env.tokenStack[k];
755
- var s = typeof token === 'string' ? token : token.content;
756
- var placeholder = getPlaceholder(language, k);
757
- var index = s.indexOf(placeholder);
758
- if (index > -1) {
759
- ++j;
760
- var before = s.substring(0, index);
761
- var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);
762
- var after = s.substring(index + placeholder.length);
763
- var replacement = [];
764
- if (before) {
765
- replacement.push.apply(replacement, walkTokens([before]));
766
- }
767
- replacement.push(middle);
768
- if (after) {
769
- replacement.push.apply(replacement, walkTokens([after]));
770
- }
771
- if (typeof token === 'string') {
772
- tokens.splice.apply(tokens, [
773
- i,
774
- 1
775
- ].concat(replacement));
776
- } else {
777
- token.content = replacement;
778
- }
779
- }
780
- } else if (token.content) {
781
- walkTokens(token.content);
782
- }
527
+ var from = match.index;
528
+ var matchStr = match[0];
529
+ var before = str.slice(0, from);
530
+ var after = str.slice(from + matchStr.length);
531
+ var reach = pos + str.length;
532
+ if (rematch && reach > rematch.reach) {
533
+ rematch.reach = reach;
534
+ }
535
+ var removeFrom = currentNode.prev;
536
+ if (before) {
537
+ removeFrom = addAfter(tokenList, removeFrom, before);
538
+ pos += before.length;
539
+ }
540
+ removeRange(tokenList, removeFrom, removeCount);
541
+ var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
542
+ currentNode = addAfter(tokenList, removeFrom, wrapped);
543
+ if (after) {
544
+ addAfter(tokenList, currentNode, after);
545
+ }
546
+ if (removeCount > 1) {
547
+ var nestedRematch = {
548
+ cause: token + ',' + j,
549
+ reach: reach
550
+ };
551
+ matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
552
+ if (rematch && nestedRematch.reach > rematch.reach) {
553
+ rematch.reach = nestedRematch.reach;
783
554
  }
784
- return tokens;
785
555
  }
786
- walkTokens(env.tokens);
787
556
  }
788
557
  }
789
- });
790
- }(Prism));
791
- Prism.languages.c = Prism.languages.extend('clike', {
792
- 'comment': {
793
- pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
558
+ }
559
+ }
560
+ function LinkedList() {
561
+ var head = {
562
+ value: null,
563
+ prev: null,
564
+ next: null
565
+ };
566
+ var tail = {
567
+ value: null,
568
+ prev: head,
569
+ next: null
570
+ };
571
+ head.next = tail;
572
+ this.head = head;
573
+ this.tail = tail;
574
+ this.length = 0;
575
+ }
576
+ function addAfter(list, node, value) {
577
+ var next = node.next;
578
+ var newNode = {
579
+ value: value,
580
+ prev: node,
581
+ next: next
582
+ };
583
+ node.next = newNode;
584
+ next.prev = newNode;
585
+ list.length++;
586
+ return newNode;
587
+ }
588
+ function removeRange(list, node, count) {
589
+ var next = node.next;
590
+ for (var i = 0; i < count && next !== list.tail; i++) {
591
+ next = next.next;
592
+ }
593
+ node.next = next;
594
+ next.prev = node;
595
+ list.length -= i;
596
+ }
597
+ function toArray(list) {
598
+ var array = [];
599
+ var node = list.head.next;
600
+ while (node !== list.tail) {
601
+ array.push(node.value);
602
+ node = node.next;
603
+ }
604
+ return array;
605
+ }
606
+ if (!_self.document) {
607
+ if (!_self.addEventListener) {
608
+ return _;
609
+ }
610
+ if (!_.disableWorkerMessageHandler) {
611
+ _self.addEventListener('message', function (evt) {
612
+ var message = JSON.parse(evt.data);
613
+ var lang = message.language;
614
+ var code = message.code;
615
+ var immediateClose = message.immediateClose;
616
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
617
+ if (immediateClose) {
618
+ _self.close();
619
+ }
620
+ }, false);
621
+ }
622
+ return _;
623
+ }
624
+ var script = _.util.currentScript();
625
+ if (script) {
626
+ _.filename = script.src;
627
+ if (script.hasAttribute('data-manual')) {
628
+ _.manual = true;
629
+ }
630
+ }
631
+ function highlightAutomaticallyCallback() {
632
+ if (!_.manual) {
633
+ _.highlightAll();
634
+ }
635
+ }
636
+ if (!_.manual) {
637
+ var readyState = document.readyState;
638
+ if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {
639
+ document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);
640
+ } else {
641
+ if (window.requestAnimationFrame) {
642
+ window.requestAnimationFrame(highlightAutomaticallyCallback);
643
+ } else {
644
+ window.setTimeout(highlightAutomaticallyCallback, 16);
645
+ }
646
+ }
647
+ }
648
+ return _;
649
+ }(_self);
650
+ if (typeof module !== 'undefined' && module.exports) {
651
+ module.exports = Prism;
652
+ }
653
+ if (typeof global !== 'undefined') {
654
+ global.Prism = Prism;
655
+ }
656
+ Prism.languages.clike = {
657
+ 'comment': [
658
+ {
659
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
660
+ lookbehind: true,
794
661
  greedy: true
795
662
  },
796
- 'string': {
797
- pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
798
- greedy: true
799
- },
800
- 'class-name': {
801
- pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
802
- lookbehind: true
803
- },
804
- 'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
805
- 'function': /\b[a-z_]\w*(?=\s*\()/i,
806
- 'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
807
- 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/
808
- });
809
- Prism.languages.insertBefore('c', 'string', {
810
- 'char': {
811
- pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,
663
+ {
664
+ pattern: /(^|[^\\:])\/\/.*/,
665
+ lookbehind: true,
812
666
  greedy: true
813
667
  }
814
- });
815
- Prism.languages.insertBefore('c', 'string', {
816
- 'macro': {
817
- pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
818
- lookbehind: true,
819
- greedy: true,
820
- alias: 'property',
821
- inside: {
822
- 'string': [
823
- {
824
- pattern: /^(#\s*include\s*)<[^>]+>/,
825
- lookbehind: true
826
- },
827
- Prism.languages.c['string']
828
- ],
829
- 'char': Prism.languages.c['char'],
830
- 'comment': Prism.languages.c['comment'],
831
- 'macro-name': [
832
- {
833
- pattern: /(^#\s*define\s+)\w+\b(?!\()/i,
834
- lookbehind: true
835
- },
836
- {
837
- pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
838
- lookbehind: true,
839
- alias: 'function'
840
- }
841
- ],
842
- 'directive': {
843
- pattern: /^(#\s*)[a-z]+/,
844
- lookbehind: true,
845
- alias: 'keyword'
846
- },
847
- 'directive-hash': /^#/,
848
- 'punctuation': /##|\\(?=[\r\n])/,
849
- 'expression': {
850
- pattern: /\S[\s\S]*/,
851
- inside: Prism.languages.c
668
+ ],
669
+ 'string': {
670
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
671
+ greedy: true
672
+ },
673
+ 'class-name': {
674
+ pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
675
+ lookbehind: true,
676
+ inside: { 'punctuation': /[.\\]/ }
677
+ },
678
+ 'keyword': /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
679
+ 'boolean': /\b(?:false|true)\b/,
680
+ 'function': /\b\w+(?=\()/,
681
+ 'number': /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
682
+ 'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
683
+ 'punctuation': /[{}[\];(),.:]/
684
+ };
685
+ (function (Prism) {
686
+ function getPlaceholder(language, index) {
687
+ return '___' + language.toUpperCase() + index + '___';
688
+ }
689
+ Object.defineProperties(Prism.languages['markup-templating'] = {}, {
690
+ buildPlaceholders: {
691
+ value: function (env, language, placeholderPattern, replaceFilter) {
692
+ if (env.language !== language) {
693
+ return;
852
694
  }
695
+ var tokenStack = env.tokenStack = [];
696
+ env.code = env.code.replace(placeholderPattern, function (match) {
697
+ if (typeof replaceFilter === 'function' && !replaceFilter(match)) {
698
+ return match;
699
+ }
700
+ var i = tokenStack.length;
701
+ var placeholder;
702
+ while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
703
+ ++i;
704
+ }
705
+ tokenStack[i] = match;
706
+ return placeholder;
707
+ });
708
+ env.grammar = Prism.languages.markup;
853
709
  }
854
- }
855
- });
856
- Prism.languages.insertBefore('c', 'function', { 'constant': /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/ });
857
- delete Prism.languages.c['boolean'];
858
- (function (Prism) {
859
- var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;
860
- var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function () {
861
- return keyword.source;
862
- });
863
- Prism.languages.cpp = Prism.languages.extend('c', {
864
- 'class-name': [
865
- {
866
- pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function () {
867
- return keyword.source;
868
- })),
869
- lookbehind: true
870
- },
871
- /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,
872
- /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,
873
- /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/
874
- ],
875
- 'keyword': keyword,
876
- 'number': {
877
- pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
878
- greedy: true
879
- },
880
- 'operator': />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
881
- 'boolean': /\b(?:false|true)\b/
882
- });
883
- Prism.languages.insertBefore('cpp', 'string', {
884
- 'module': {
885
- pattern: RegExp(/(\b(?:import|module)\s+)/.source + '(?:' + /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source + '|' + /<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g, function () {
886
- return modName;
887
- }) + ')'),
888
- lookbehind: true,
889
- greedy: true,
890
- inside: {
891
- 'string': /^[<"][\s\S]+/,
892
- 'operator': /:/,
893
- 'punctuation': /\./
710
+ },
711
+ tokenizePlaceholders: {
712
+ value: function (env, language) {
713
+ if (env.language !== language || !env.tokenStack) {
714
+ return;
894
715
  }
895
- },
896
- 'raw-string': {
897
- pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
898
- alias: 'string',
899
- greedy: true
900
- }
901
- });
902
- Prism.languages.insertBefore('cpp', 'keyword', {
903
- 'generic-function': {
904
- pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
905
- inside: {
906
- 'function': /^\w+/,
907
- 'generic': {
908
- pattern: /<[\s\S]+/,
909
- alias: 'class-name',
910
- inside: Prism.languages.cpp
716
+ env.grammar = Prism.languages[language];
717
+ var j = 0;
718
+ var keys = Object.keys(env.tokenStack);
719
+ function walkTokens(tokens) {
720
+ for (var i = 0; i < tokens.length; i++) {
721
+ if (j >= keys.length) {
722
+ break;
723
+ }
724
+ var token = tokens[i];
725
+ if (typeof token === 'string' || token.content && typeof token.content === 'string') {
726
+ var k = keys[j];
727
+ var t = env.tokenStack[k];
728
+ var s = typeof token === 'string' ? token : token.content;
729
+ var placeholder = getPlaceholder(language, k);
730
+ var index = s.indexOf(placeholder);
731
+ if (index > -1) {
732
+ ++j;
733
+ var before = s.substring(0, index);
734
+ var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);
735
+ var after = s.substring(index + placeholder.length);
736
+ var replacement = [];
737
+ if (before) {
738
+ replacement.push.apply(replacement, walkTokens([before]));
739
+ }
740
+ replacement.push(middle);
741
+ if (after) {
742
+ replacement.push.apply(replacement, walkTokens([after]));
743
+ }
744
+ if (typeof token === 'string') {
745
+ tokens.splice.apply(tokens, [
746
+ i,
747
+ 1
748
+ ].concat(replacement));
749
+ } else {
750
+ token.content = replacement;
751
+ }
752
+ }
753
+ } else if (token.content) {
754
+ walkTokens(token.content);
755
+ }
911
756
  }
757
+ return tokens;
912
758
  }
759
+ walkTokens(env.tokens);
913
760
  }
914
- });
915
- Prism.languages.insertBefore('cpp', 'operator', {
916
- 'double-colon': {
917
- pattern: /::/,
918
- alias: 'punctuation'
919
- }
920
- });
921
- Prism.languages.insertBefore('cpp', 'class-name', {
922
- 'base-clause': {
923
- pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
924
- lookbehind: true,
925
- greedy: true,
926
- inside: Prism.languages.extend('cpp', {})
927
- }
928
- });
929
- Prism.languages.insertBefore('inside', 'double-colon', { 'class-name': /\b[a-z_]\w*\b(?!\s*::)/i }, Prism.languages.cpp['base-clause']);
930
- }(Prism));
931
- (function (Prism) {
932
- function replace(pattern, replacements) {
933
- return pattern.replace(/<<(\d+)>>/g, function (m, index) {
934
- return '(?:' + replacements[+index] + ')';
935
- });
936
- }
937
- function re(pattern, replacements, flags) {
938
- return RegExp(replace(pattern, replacements), flags || '');
939
761
  }
940
- function nested(pattern, depthLog2) {
941
- for (var i = 0; i < depthLog2; i++) {
942
- pattern = pattern.replace(/<<self>>/g, function () {
943
- return '(?:' + pattern + ')';
944
- });
945
- }
946
- return pattern.replace(/<<self>>/g, '[^\\s\\S]');
947
- }
948
- var keywordKinds = {
949
- type: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void',
950
- typeDeclaration: 'class enum interface record struct',
951
- contextual: 'add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)',
952
- other: 'abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield'
953
- };
954
- function keywordsToPattern(words) {
955
- return '\\b(?:' + words.trim().replace(/ /g, '|') + ')\\b';
956
- }
957
- var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration);
958
- var keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other));
959
- var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other);
960
- var nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other);
961
- var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source, 2);
962
- var nestedRound = nested(/\((?:[^()]|<<self>>)*\)/.source, 2);
963
- var name = /@?\b[A-Za-z_]\w*\b/.source;
964
- var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [
965
- name,
966
- generic
967
- ]);
968
- var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [
969
- nonTypeKeywords,
970
- genericName
971
- ]);
972
- var array = /\[\s*(?:,\s*)*\]/.source;
973
- var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [
974
- identifier,
975
- array
976
- ]);
977
- var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [
978
- generic,
979
- nestedRound,
980
- array
981
- ]);
982
- var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]);
983
- var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [
984
- tuple,
985
- identifier,
986
- array
987
- ]);
988
- var typeInside = {
989
- 'keyword': keywords,
990
- 'punctuation': /[<>()?,.:[\]]/
991
- };
992
- var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source;
993
- var regularString = /"(?:\\.|[^\\"\r\n])*"/.source;
994
- var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;
995
- Prism.languages.csharp = Prism.languages.extend('clike', {
762
+ });
763
+ }(Prism));
764
+ Prism.languages.c = Prism.languages.extend('clike', {
765
+ 'comment': {
766
+ pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
767
+ greedy: true
768
+ },
769
+ 'string': {
770
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
771
+ greedy: true
772
+ },
773
+ 'class-name': {
774
+ pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
775
+ lookbehind: true
776
+ },
777
+ 'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
778
+ 'function': /\b[a-z_]\w*(?=\s*\()/i,
779
+ 'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
780
+ 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/
781
+ });
782
+ Prism.languages.insertBefore('c', 'string', {
783
+ 'char': {
784
+ pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,
785
+ greedy: true
786
+ }
787
+ });
788
+ Prism.languages.insertBefore('c', 'string', {
789
+ 'macro': {
790
+ pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
791
+ lookbehind: true,
792
+ greedy: true,
793
+ alias: 'property',
794
+ inside: {
996
795
  'string': [
997
796
  {
998
- pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]),
999
- lookbehind: true,
1000
- greedy: true
1001
- },
1002
- {
1003
- pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]),
1004
- lookbehind: true,
1005
- greedy: true
1006
- }
1007
- ],
1008
- 'class-name': [
1009
- {
1010
- pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]),
1011
- lookbehind: true,
1012
- inside: typeInside
1013
- },
1014
- {
1015
- pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [
1016
- name,
1017
- typeExpression
1018
- ]),
1019
- lookbehind: true,
1020
- inside: typeInside
1021
- },
1022
- {
1023
- pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]),
797
+ pattern: /^(#\s*include\s*)<[^>]+>/,
1024
798
  lookbehind: true
1025
799
  },
800
+ Prism.languages.c['string']
801
+ ],
802
+ 'char': Prism.languages.c['char'],
803
+ 'comment': Prism.languages.c['comment'],
804
+ 'macro-name': [
1026
805
  {
1027
- pattern: re(/(\b<<0>>\s+)<<1>>/.source, [
1028
- typeDeclarationKeywords,
1029
- genericName
1030
- ]),
1031
- lookbehind: true,
1032
- inside: typeInside
1033
- },
1034
- {
1035
- pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]),
1036
- lookbehind: true,
1037
- inside: typeInside
1038
- },
1039
- {
1040
- pattern: re(/(\bwhere\s+)<<0>>/.source, [name]),
806
+ pattern: /(^#\s*define\s+)\w+\b(?!\()/i,
1041
807
  lookbehind: true
1042
808
  },
1043
809
  {
1044
- pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]),
810
+ pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
1045
811
  lookbehind: true,
1046
- inside: typeInside
1047
- },
1048
- {
1049
- pattern: re(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [
1050
- typeExpression,
1051
- nonContextualKeywords,
1052
- name
1053
- ]),
1054
- inside: typeInside
812
+ alias: 'function'
1055
813
  }
1056
814
  ],
1057
- 'keyword': keywords,
1058
- 'number': /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,
1059
- 'operator': />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,
1060
- 'punctuation': /\?\.?|::|[{}[\];(),.:]/
1061
- });
1062
- Prism.languages.insertBefore('csharp', 'number', {
1063
- 'range': {
1064
- pattern: /\.\./,
1065
- alias: 'operator'
1066
- }
1067
- });
1068
- Prism.languages.insertBefore('csharp', 'punctuation', {
1069
- 'named-parameter': {
1070
- pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]),
815
+ 'directive': {
816
+ pattern: /^(#\s*)[a-z]+/,
1071
817
  lookbehind: true,
1072
- alias: 'punctuation'
818
+ alias: 'keyword'
819
+ },
820
+ 'directive-hash': /^#/,
821
+ 'punctuation': /##|\\(?=[\r\n])/,
822
+ 'expression': {
823
+ pattern: /\S[\s\S]*/,
824
+ inside: Prism.languages.c
1073
825
  }
826
+ }
827
+ }
828
+ });
829
+ Prism.languages.insertBefore('c', 'function', { 'constant': /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/ });
830
+ delete Prism.languages.c['boolean'];
831
+ (function (Prism) {
832
+ var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;
833
+ var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function () {
834
+ return keyword.source;
835
+ });
836
+ Prism.languages.cpp = Prism.languages.extend('c', {
837
+ 'class-name': [
838
+ {
839
+ pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function () {
840
+ return keyword.source;
841
+ })),
842
+ lookbehind: true
843
+ },
844
+ /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,
845
+ /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,
846
+ /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/
847
+ ],
848
+ 'keyword': keyword,
849
+ 'number': {
850
+ pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
851
+ greedy: true
852
+ },
853
+ 'operator': />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
854
+ 'boolean': /\b(?:false|true)\b/
855
+ });
856
+ Prism.languages.insertBefore('cpp', 'string', {
857
+ 'module': {
858
+ pattern: RegExp(/(\b(?:import|module)\s+)/.source + '(?:' + /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source + '|' + /<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g, function () {
859
+ return modName;
860
+ }) + ')'),
861
+ lookbehind: true,
862
+ greedy: true,
863
+ inside: {
864
+ 'string': /^[<"][\s\S]+/,
865
+ 'operator': /:/,
866
+ 'punctuation': /\./
867
+ }
868
+ },
869
+ 'raw-string': {
870
+ pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
871
+ alias: 'string',
872
+ greedy: true
873
+ }
874
+ });
875
+ Prism.languages.insertBefore('cpp', 'keyword', {
876
+ 'generic-function': {
877
+ pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
878
+ inside: {
879
+ 'function': /^\w+/,
880
+ 'generic': {
881
+ pattern: /<[\s\S]+/,
882
+ alias: 'class-name',
883
+ inside: Prism.languages.cpp
884
+ }
885
+ }
886
+ }
887
+ });
888
+ Prism.languages.insertBefore('cpp', 'operator', {
889
+ 'double-colon': {
890
+ pattern: /::/,
891
+ alias: 'punctuation'
892
+ }
893
+ });
894
+ Prism.languages.insertBefore('cpp', 'class-name', {
895
+ 'base-clause': {
896
+ pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
897
+ lookbehind: true,
898
+ greedy: true,
899
+ inside: Prism.languages.extend('cpp', {})
900
+ }
901
+ });
902
+ Prism.languages.insertBefore('inside', 'double-colon', { 'class-name': /\b[a-z_]\w*\b(?!\s*::)/i }, Prism.languages.cpp['base-clause']);
903
+ }(Prism));
904
+ (function (Prism) {
905
+ function replace(pattern, replacements) {
906
+ return pattern.replace(/<<(\d+)>>/g, function (m, index) {
907
+ return '(?:' + replacements[+index] + ')';
1074
908
  });
1075
- Prism.languages.insertBefore('csharp', 'class-name', {
1076
- 'namespace': {
1077
- pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]),
909
+ }
910
+ function re(pattern, replacements, flags) {
911
+ return RegExp(replace(pattern, replacements), flags || '');
912
+ }
913
+ function nested(pattern, depthLog2) {
914
+ for (var i = 0; i < depthLog2; i++) {
915
+ pattern = pattern.replace(/<<self>>/g, function () {
916
+ return '(?:' + pattern + ')';
917
+ });
918
+ }
919
+ return pattern.replace(/<<self>>/g, '[^\\s\\S]');
920
+ }
921
+ var keywordKinds = {
922
+ type: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void',
923
+ typeDeclaration: 'class enum interface record struct',
924
+ contextual: 'add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)',
925
+ other: 'abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield'
926
+ };
927
+ function keywordsToPattern(words) {
928
+ return '\\b(?:' + words.trim().replace(/ /g, '|') + ')\\b';
929
+ }
930
+ var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration);
931
+ var keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other));
932
+ var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other);
933
+ var nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other);
934
+ var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source, 2);
935
+ var nestedRound = nested(/\((?:[^()]|<<self>>)*\)/.source, 2);
936
+ var name = /@?\b[A-Za-z_]\w*\b/.source;
937
+ var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [
938
+ name,
939
+ generic
940
+ ]);
941
+ var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [
942
+ nonTypeKeywords,
943
+ genericName
944
+ ]);
945
+ var array = /\[\s*(?:,\s*)*\]/.source;
946
+ var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [
947
+ identifier,
948
+ array
949
+ ]);
950
+ var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [
951
+ generic,
952
+ nestedRound,
953
+ array
954
+ ]);
955
+ var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]);
956
+ var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [
957
+ tuple,
958
+ identifier,
959
+ array
960
+ ]);
961
+ var typeInside = {
962
+ 'keyword': keywords,
963
+ 'punctuation': /[<>()?,.:[\]]/
964
+ };
965
+ var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source;
966
+ var regularString = /"(?:\\.|[^\\"\r\n])*"/.source;
967
+ var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;
968
+ Prism.languages.csharp = Prism.languages.extend('clike', {
969
+ 'string': [
970
+ {
971
+ pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]),
1078
972
  lookbehind: true,
1079
- inside: { 'punctuation': /\./ }
973
+ greedy: true
1080
974
  },
1081
- 'type-expression': {
1082
- pattern: re(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source, [nestedRound]),
975
+ {
976
+ pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]),
977
+ lookbehind: true,
978
+ greedy: true
979
+ }
980
+ ],
981
+ 'class-name': [
982
+ {
983
+ pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]),
1083
984
  lookbehind: true,
1084
- alias: 'class-name',
1085
985
  inside: typeInside
1086
986
  },
1087
- 'return-type': {
1088
- pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [
1089
- typeExpression,
1090
- identifier
987
+ {
988
+ pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [
989
+ name,
990
+ typeExpression
1091
991
  ]),
1092
- inside: typeInside,
1093
- alias: 'class-name'
1094
- },
1095
- 'constructor-invocation': {
1096
- pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]),
1097
992
  lookbehind: true,
1098
- inside: typeInside,
1099
- alias: 'class-name'
993
+ inside: typeInside
1100
994
  },
1101
- 'generic-method': {
1102
- pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [
1103
- name,
1104
- generic
1105
- ]),
1106
- inside: {
1107
- 'function': re(/^<<0>>/.source, [name]),
1108
- 'generic': {
1109
- pattern: RegExp(generic),
1110
- alias: 'class-name',
1111
- inside: typeInside
1112
- }
1113
- }
995
+ {
996
+ pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]),
997
+ lookbehind: true
1114
998
  },
1115
- 'type-list': {
1116
- pattern: re(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source, [
999
+ {
1000
+ pattern: re(/(\b<<0>>\s+)<<1>>/.source, [
1117
1001
  typeDeclarationKeywords,
1118
- genericName,
1119
- name,
1120
- typeExpression,
1121
- keywords.source,
1122
- nestedRound,
1123
- /\bnew\s*\(\s*\)/.source
1002
+ genericName
1124
1003
  ]),
1125
1004
  lookbehind: true,
1126
- inside: {
1127
- 'record-arguments': {
1128
- pattern: re(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source, [
1129
- genericName,
1130
- nestedRound
1131
- ]),
1132
- lookbehind: true,
1133
- greedy: true,
1134
- inside: Prism.languages.csharp
1135
- },
1136
- 'keyword': keywords,
1137
- 'class-name': {
1138
- pattern: RegExp(typeExpression),
1139
- greedy: true,
1140
- inside: typeInside
1141
- },
1142
- 'punctuation': /[,()]/
1143
- }
1005
+ inside: typeInside
1144
1006
  },
1145
- 'preprocessor': {
1146
- pattern: /(^[\t ]*)#.*/m,
1007
+ {
1008
+ pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]),
1147
1009
  lookbehind: true,
1148
- alias: 'property',
1149
- inside: {
1150
- 'directive': {
1151
- pattern: /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,
1152
- lookbehind: true,
1153
- alias: 'keyword'
1154
- }
1155
- }
1156
- }
1157
- });
1158
- var regularStringOrCharacter = regularString + '|' + character;
1159
- var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]);
1160
- var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
1161
- var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source;
1162
- var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [
1163
- identifier,
1164
- roundExpression
1165
- ]);
1166
- Prism.languages.insertBefore('csharp', 'class-name', {
1167
- 'attribute': {
1168
- pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [
1169
- attrTarget,
1170
- attr
1171
- ]),
1010
+ inside: typeInside
1011
+ },
1012
+ {
1013
+ pattern: re(/(\bwhere\s+)<<0>>/.source, [name]),
1014
+ lookbehind: true
1015
+ },
1016
+ {
1017
+ pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]),
1172
1018
  lookbehind: true,
1173
- greedy: true,
1174
- inside: {
1175
- 'target': {
1176
- pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]),
1177
- alias: 'keyword'
1178
- },
1179
- 'attribute-arguments': {
1180
- pattern: re(/\(<<0>>*\)/.source, [roundExpression]),
1181
- inside: Prism.languages.csharp
1182
- },
1183
- 'class-name': {
1184
- pattern: RegExp(identifier),
1185
- inside: { 'punctuation': /\./ }
1186
- },
1187
- 'punctuation': /[:,]/
1019
+ inside: typeInside
1020
+ },
1021
+ {
1022
+ pattern: re(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [
1023
+ typeExpression,
1024
+ nonContextualKeywords,
1025
+ name
1026
+ ]),
1027
+ inside: typeInside
1028
+ }
1029
+ ],
1030
+ 'keyword': keywords,
1031
+ 'number': /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,
1032
+ 'operator': />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,
1033
+ 'punctuation': /\?\.?|::|[{}[\];(),.:]/
1034
+ });
1035
+ Prism.languages.insertBefore('csharp', 'number', {
1036
+ 'range': {
1037
+ pattern: /\.\./,
1038
+ alias: 'operator'
1039
+ }
1040
+ });
1041
+ Prism.languages.insertBefore('csharp', 'punctuation', {
1042
+ 'named-parameter': {
1043
+ pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]),
1044
+ lookbehind: true,
1045
+ alias: 'punctuation'
1046
+ }
1047
+ });
1048
+ Prism.languages.insertBefore('csharp', 'class-name', {
1049
+ 'namespace': {
1050
+ pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]),
1051
+ lookbehind: true,
1052
+ inside: { 'punctuation': /\./ }
1053
+ },
1054
+ 'type-expression': {
1055
+ pattern: re(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source, [nestedRound]),
1056
+ lookbehind: true,
1057
+ alias: 'class-name',
1058
+ inside: typeInside
1059
+ },
1060
+ 'return-type': {
1061
+ pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [
1062
+ typeExpression,
1063
+ identifier
1064
+ ]),
1065
+ inside: typeInside,
1066
+ alias: 'class-name'
1067
+ },
1068
+ 'constructor-invocation': {
1069
+ pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]),
1070
+ lookbehind: true,
1071
+ inside: typeInside,
1072
+ alias: 'class-name'
1073
+ },
1074
+ 'generic-method': {
1075
+ pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [
1076
+ name,
1077
+ generic
1078
+ ]),
1079
+ inside: {
1080
+ 'function': re(/^<<0>>/.source, [name]),
1081
+ 'generic': {
1082
+ pattern: RegExp(generic),
1083
+ alias: 'class-name',
1084
+ inside: typeInside
1188
1085
  }
1189
1086
  }
1190
- });
1191
- var formatString = /:[^}\r\n]+/.source;
1192
- var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
1193
- var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
1194
- mInterpolationRound,
1195
- formatString
1196
- ]);
1197
- var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source, [regularStringOrCharacter]), 2);
1198
- var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
1199
- sInterpolationRound,
1200
- formatString
1201
- ]);
1202
- function createInterpolationInside(interpolation, interpolationRound) {
1203
- return {
1204
- 'interpolation': {
1205
- pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]),
1087
+ },
1088
+ 'type-list': {
1089
+ pattern: re(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source, [
1090
+ typeDeclarationKeywords,
1091
+ genericName,
1092
+ name,
1093
+ typeExpression,
1094
+ keywords.source,
1095
+ nestedRound,
1096
+ /\bnew\s*\(\s*\)/.source
1097
+ ]),
1098
+ lookbehind: true,
1099
+ inside: {
1100
+ 'record-arguments': {
1101
+ pattern: re(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source, [
1102
+ genericName,
1103
+ nestedRound
1104
+ ]),
1206
1105
  lookbehind: true,
1207
- inside: {
1208
- 'format-string': {
1209
- pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [
1210
- interpolationRound,
1211
- formatString
1212
- ]),
1213
- lookbehind: true,
1214
- inside: { 'punctuation': /^:/ }
1215
- },
1216
- 'punctuation': /^\{|\}$/,
1217
- 'expression': {
1218
- pattern: /[\s\S]+/,
1219
- alias: 'language-csharp',
1220
- inside: Prism.languages.csharp
1221
- }
1222
- }
1106
+ greedy: true,
1107
+ inside: Prism.languages.csharp
1223
1108
  },
1224
- 'string': /[\s\S]+/
1225
- };
1226
- }
1227
- Prism.languages.insertBefore('csharp', 'string', {
1228
- 'interpolation-string': [
1229
- {
1230
- pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]),
1231
- lookbehind: true,
1109
+ 'keyword': keywords,
1110
+ 'class-name': {
1111
+ pattern: RegExp(typeExpression),
1232
1112
  greedy: true,
1233
- inside: createInterpolationInside(mInterpolation, mInterpolationRound)
1113
+ inside: typeInside
1234
1114
  },
1235
- {
1236
- pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]),
1115
+ 'punctuation': /[,()]/
1116
+ }
1117
+ },
1118
+ 'preprocessor': {
1119
+ pattern: /(^[\t ]*)#.*/m,
1120
+ lookbehind: true,
1121
+ alias: 'property',
1122
+ inside: {
1123
+ 'directive': {
1124
+ pattern: /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,
1237
1125
  lookbehind: true,
1238
- greedy: true,
1239
- inside: createInterpolationInside(sInterpolation, sInterpolationRound)
1126
+ alias: 'keyword'
1240
1127
  }
1241
- ],
1242
- 'char': {
1243
- pattern: RegExp(character),
1244
- greedy: true
1245
1128
  }
1246
- });
1247
- Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp;
1248
- }(Prism));
1249
- (function (Prism) {
1250
- var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
1251
- Prism.languages.css = {
1252
- 'comment': /\/\*[\s\S]*?\*\//,
1253
- 'atrule': {
1254
- pattern: RegExp('@[\\w-](?:' + /[^;{\s"']|\s+(?!\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\s*\{))/.source),
1129
+ }
1130
+ });
1131
+ var regularStringOrCharacter = regularString + '|' + character;
1132
+ var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]);
1133
+ var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
1134
+ var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source;
1135
+ var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [
1136
+ identifier,
1137
+ roundExpression
1138
+ ]);
1139
+ Prism.languages.insertBefore('csharp', 'class-name', {
1140
+ 'attribute': {
1141
+ pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [
1142
+ attrTarget,
1143
+ attr
1144
+ ]),
1145
+ lookbehind: true,
1146
+ greedy: true,
1147
+ inside: {
1148
+ 'target': {
1149
+ pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]),
1150
+ alias: 'keyword'
1151
+ },
1152
+ 'attribute-arguments': {
1153
+ pattern: re(/\(<<0>>*\)/.source, [roundExpression]),
1154
+ inside: Prism.languages.csharp
1155
+ },
1156
+ 'class-name': {
1157
+ pattern: RegExp(identifier),
1158
+ inside: { 'punctuation': /\./ }
1159
+ },
1160
+ 'punctuation': /[:,]/
1161
+ }
1162
+ }
1163
+ });
1164
+ var formatString = /:[^}\r\n]+/.source;
1165
+ var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
1166
+ var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
1167
+ mInterpolationRound,
1168
+ formatString
1169
+ ]);
1170
+ var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source, [regularStringOrCharacter]), 2);
1171
+ var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
1172
+ sInterpolationRound,
1173
+ formatString
1174
+ ]);
1175
+ function createInterpolationInside(interpolation, interpolationRound) {
1176
+ return {
1177
+ 'interpolation': {
1178
+ pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]),
1179
+ lookbehind: true,
1255
1180
  inside: {
1256
- 'rule': /^@[\w-]+/,
1257
- 'selector-function-argument': {
1258
- pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
1181
+ 'format-string': {
1182
+ pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [
1183
+ interpolationRound,
1184
+ formatString
1185
+ ]),
1259
1186
  lookbehind: true,
1260
- alias: 'selector'
1187
+ inside: { 'punctuation': /^:/ }
1261
1188
  },
1262
- 'keyword': {
1263
- pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
1264
- lookbehind: true
1189
+ 'punctuation': /^\{|\}$/,
1190
+ 'expression': {
1191
+ pattern: /[\s\S]+/,
1192
+ alias: 'language-csharp',
1193
+ inside: Prism.languages.csharp
1265
1194
  }
1266
1195
  }
1267
1196
  },
1268
- 'url': {
1269
- pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'),
1197
+ 'string': /[\s\S]+/
1198
+ };
1199
+ }
1200
+ Prism.languages.insertBefore('csharp', 'string', {
1201
+ 'interpolation-string': [
1202
+ {
1203
+ pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]),
1204
+ lookbehind: true,
1270
1205
  greedy: true,
1271
- inside: {
1272
- 'function': /^url/i,
1273
- 'punctuation': /^\(|\)$/,
1274
- 'string': {
1275
- pattern: RegExp('^' + string.source + '$'),
1276
- alias: 'url'
1277
- }
1278
- }
1279
- },
1280
- 'selector': {
1281
- pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + string.source + ')*(?=\\s*\\{)'),
1282
- lookbehind: true
1283
- },
1284
- 'string': {
1285
- pattern: string,
1286
- greedy: true
1206
+ inside: createInterpolationInside(mInterpolation, mInterpolationRound)
1287
1207
  },
1288
- 'property': {
1289
- pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
1290
- lookbehind: true
1291
- },
1292
- 'important': /!important\b/i,
1293
- 'function': {
1294
- pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
1295
- lookbehind: true
1296
- },
1297
- 'punctuation': /[(){};:,]/
1298
- };
1299
- Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
1300
- var markup = Prism.languages.markup;
1301
- if (markup) {
1302
- markup.tag.addInlined('style', 'css');
1303
- markup.tag.addAttribute('style', 'css');
1208
+ {
1209
+ pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]),
1210
+ lookbehind: true,
1211
+ greedy: true,
1212
+ inside: createInterpolationInside(sInterpolation, sInterpolationRound)
1213
+ }
1214
+ ],
1215
+ 'char': {
1216
+ pattern: RegExp(character),
1217
+ greedy: true
1304
1218
  }
1305
- }(Prism));
1306
- (function (Prism) {
1307
- var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/;
1308
- var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
1309
- var className = {
1310
- pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
1311
- lookbehind: true,
1219
+ });
1220
+ Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp;
1221
+ }(Prism));
1222
+ (function (Prism) {
1223
+ var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
1224
+ Prism.languages.css = {
1225
+ 'comment': /\/\*[\s\S]*?\*\//,
1226
+ 'atrule': {
1227
+ pattern: RegExp('@[\\w-](?:' + /[^;{\s"']|\s+(?!\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\s*\{))/.source),
1312
1228
  inside: {
1313
- 'namespace': {
1314
- pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
1315
- inside: { 'punctuation': /\./ }
1316
- },
1317
- 'punctuation': /\./
1318
- }
1319
- };
1320
- Prism.languages.java = Prism.languages.extend('clike', {
1321
- 'string': {
1322
- pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,
1323
- lookbehind: true,
1324
- greedy: true
1325
- },
1326
- 'class-name': [
1327
- className,
1328
- {
1329
- pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),
1229
+ 'rule': /^@[\w-]+/,
1230
+ 'selector-function-argument': {
1231
+ pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
1330
1232
  lookbehind: true,
1331
- inside: className.inside
1233
+ alias: 'selector'
1332
1234
  },
1333
- {
1334
- pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source),
1335
- lookbehind: true,
1336
- inside: className.inside
1337
- }
1338
- ],
1339
- 'keyword': keywords,
1340
- 'function': [
1341
- Prism.languages.clike.function,
1342
- {
1343
- pattern: /(::\s*)[a-z_]\w*/,
1235
+ 'keyword': {
1236
+ pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
1344
1237
  lookbehind: true
1345
1238
  }
1346
- ],
1347
- 'number': /\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
1348
- 'operator': {
1349
- pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
1350
- lookbehind: true
1351
- },
1352
- 'constant': /\b[A-Z][A-Z_\d]+\b/
1353
- });
1354
- Prism.languages.insertBefore('java', 'string', {
1355
- 'triple-quoted-string': {
1356
- pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,
1357
- greedy: true,
1358
- alias: 'string'
1359
- },
1360
- 'char': {
1361
- pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/,
1362
- greedy: true
1363
1239
  }
1364
- });
1365
- Prism.languages.insertBefore('java', 'class-name', {
1366
- 'annotation': {
1367
- pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/,
1368
- lookbehind: true,
1369
- alias: 'punctuation'
1370
- },
1371
- 'generics': {
1372
- pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,
1373
- inside: {
1374
- 'class-name': className,
1375
- 'keyword': keywords,
1376
- 'punctuation': /[<>(),.:]/,
1377
- 'operator': /[?&|]/
1378
- }
1379
- },
1380
- 'import': [
1381
- {
1382
- pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source),
1383
- lookbehind: true,
1384
- inside: {
1385
- 'namespace': className.inside.namespace,
1386
- 'punctuation': /\./,
1387
- 'operator': /\*/,
1388
- 'class-name': /\w+/
1389
- }
1390
- },
1391
- {
1392
- pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source),
1393
- lookbehind: true,
1394
- alias: 'static',
1395
- inside: {
1396
- 'namespace': className.inside.namespace,
1397
- 'static': /\b\w+$/,
1398
- 'punctuation': /\./,
1399
- 'operator': /\*/,
1400
- 'class-name': /\w+/
1401
- }
1240
+ },
1241
+ 'url': {
1242
+ pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'),
1243
+ greedy: true,
1244
+ inside: {
1245
+ 'function': /^url/i,
1246
+ 'punctuation': /^\(|\)$/,
1247
+ 'string': {
1248
+ pattern: RegExp('^' + string.source + '$'),
1249
+ alias: 'url'
1402
1250
  }
1403
- ],
1251
+ }
1252
+ },
1253
+ 'selector': {
1254
+ pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + string.source + ')*(?=\\s*\\{)'),
1255
+ lookbehind: true
1256
+ },
1257
+ 'string': {
1258
+ pattern: string,
1259
+ greedy: true
1260
+ },
1261
+ 'property': {
1262
+ pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
1263
+ lookbehind: true
1264
+ },
1265
+ 'important': /!important\b/i,
1266
+ 'function': {
1267
+ pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
1268
+ lookbehind: true
1269
+ },
1270
+ 'punctuation': /[(){};:,]/
1271
+ };
1272
+ Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
1273
+ var markup = Prism.languages.markup;
1274
+ if (markup) {
1275
+ markup.tag.addInlined('style', 'css');
1276
+ markup.tag.addAttribute('style', 'css');
1277
+ }
1278
+ }(Prism));
1279
+ (function (Prism) {
1280
+ var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/;
1281
+ var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
1282
+ var className = {
1283
+ pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
1284
+ lookbehind: true,
1285
+ inside: {
1404
1286
  'namespace': {
1405
- pattern: RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g, function () {
1406
- return keywords.source;
1407
- })),
1408
- lookbehind: true,
1287
+ pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
1409
1288
  inside: { 'punctuation': /\./ }
1410
- }
1411
- });
1412
- }(Prism));
1413
- Prism.languages.javascript = Prism.languages.extend('clike', {
1289
+ },
1290
+ 'punctuation': /\./
1291
+ }
1292
+ };
1293
+ Prism.languages.java = Prism.languages.extend('clike', {
1294
+ 'string': {
1295
+ pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,
1296
+ lookbehind: true,
1297
+ greedy: true
1298
+ },
1414
1299
  'class-name': [
1415
- Prism.languages.clike['class-name'],
1300
+ className,
1416
1301
  {
1417
- pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
1418
- lookbehind: true
1302
+ pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),
1303
+ lookbehind: true,
1304
+ inside: className.inside
1305
+ },
1306
+ {
1307
+ pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source),
1308
+ lookbehind: true,
1309
+ inside: className.inside
1419
1310
  }
1420
1311
  ],
1421
- 'keyword': [
1422
- {
1423
- pattern: /((?:^|\})\s*)catch\b/,
1424
- lookbehind: true
1425
- },
1312
+ 'keyword': keywords,
1313
+ 'function': [
1314
+ Prism.languages.clike.function,
1426
1315
  {
1427
- pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
1316
+ pattern: /(::\s*)[a-z_]\w*/,
1428
1317
  lookbehind: true
1429
1318
  }
1430
1319
  ],
1431
- 'function': /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
1432
- 'number': {
1433
- pattern: RegExp(/(^|[^\w$])/.source + '(?:' + (/NaN|Infinity/.source + '|' + /0[bB][01]+(?:_[01]+)*n?/.source + '|' + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + '|' + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + '|' + /\d+(?:_\d+)*n/.source + '|' + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ')' + /(?![\w$])/.source),
1320
+ 'number': /\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
1321
+ 'operator': {
1322
+ pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
1434
1323
  lookbehind: true
1435
1324
  },
1436
- 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
1325
+ 'constant': /\b[A-Z][A-Z_\d]+\b/
1437
1326
  });
1438
- Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;
1439
- Prism.languages.insertBefore('javascript', 'keyword', {
1440
- 'regex': {
1441
- pattern: RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + /\//.source + '(?:' + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + '|' + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ')' + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),
1442
- lookbehind: true,
1327
+ Prism.languages.insertBefore('java', 'string', {
1328
+ 'triple-quoted-string': {
1329
+ pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,
1443
1330
  greedy: true,
1331
+ alias: 'string'
1332
+ },
1333
+ 'char': {
1334
+ pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/,
1335
+ greedy: true
1336
+ }
1337
+ });
1338
+ Prism.languages.insertBefore('java', 'class-name', {
1339
+ 'annotation': {
1340
+ pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/,
1341
+ lookbehind: true,
1342
+ alias: 'punctuation'
1343
+ },
1344
+ 'generics': {
1345
+ pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,
1444
1346
  inside: {
1445
- 'regex-source': {
1446
- pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
1447
- lookbehind: true,
1448
- alias: 'language-regex',
1449
- inside: Prism.languages.regex
1450
- },
1451
- 'regex-delimiter': /^\/|\/$/,
1452
- 'regex-flags': /^[a-z]+$/
1347
+ 'class-name': className,
1348
+ 'keyword': keywords,
1349
+ 'punctuation': /[<>(),.:]/,
1350
+ 'operator': /[?&|]/
1453
1351
  }
1454
1352
  },
1455
- 'function-variable': {
1456
- pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
1457
- alias: 'function'
1458
- },
1459
- 'parameter': [
1353
+ 'import': [
1460
1354
  {
1461
- pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
1355
+ pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source),
1462
1356
  lookbehind: true,
1463
- inside: Prism.languages.javascript
1357
+ inside: {
1358
+ 'namespace': className.inside.namespace,
1359
+ 'punctuation': /\./,
1360
+ 'operator': /\*/,
1361
+ 'class-name': /\w+/
1362
+ }
1464
1363
  },
1465
1364
  {
1466
- pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
1365
+ pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source),
1366
+ lookbehind: true,
1367
+ alias: 'static',
1368
+ inside: {
1369
+ 'namespace': className.inside.namespace,
1370
+ 'static': /\b\w+$/,
1371
+ 'punctuation': /\./,
1372
+ 'operator': /\*/,
1373
+ 'class-name': /\w+/
1374
+ }
1375
+ }
1376
+ ],
1377
+ 'namespace': {
1378
+ pattern: RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g, function () {
1379
+ return keywords.source;
1380
+ })),
1381
+ lookbehind: true,
1382
+ inside: { 'punctuation': /\./ }
1383
+ }
1384
+ });
1385
+ }(Prism));
1386
+ Prism.languages.javascript = Prism.languages.extend('clike', {
1387
+ 'class-name': [
1388
+ Prism.languages.clike['class-name'],
1389
+ {
1390
+ pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
1391
+ lookbehind: true
1392
+ }
1393
+ ],
1394
+ 'keyword': [
1395
+ {
1396
+ pattern: /((?:^|\})\s*)catch\b/,
1397
+ lookbehind: true
1398
+ },
1399
+ {
1400
+ pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
1401
+ lookbehind: true
1402
+ }
1403
+ ],
1404
+ 'function': /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
1405
+ 'number': {
1406
+ pattern: RegExp(/(^|[^\w$])/.source + '(?:' + (/NaN|Infinity/.source + '|' + /0[bB][01]+(?:_[01]+)*n?/.source + '|' + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + '|' + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + '|' + /\d+(?:_\d+)*n/.source + '|' + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ')' + /(?![\w$])/.source),
1407
+ lookbehind: true
1408
+ },
1409
+ 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
1410
+ });
1411
+ Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;
1412
+ Prism.languages.insertBefore('javascript', 'keyword', {
1413
+ 'regex': {
1414
+ pattern: RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + /\//.source + '(?:' + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + '|' + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ')' + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),
1415
+ lookbehind: true,
1416
+ greedy: true,
1417
+ inside: {
1418
+ 'regex-source': {
1419
+ pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
1420
+ lookbehind: true,
1421
+ alias: 'language-regex',
1422
+ inside: Prism.languages.regex
1423
+ },
1424
+ 'regex-delimiter': /^\/|\/$/,
1425
+ 'regex-flags': /^[a-z]+$/
1426
+ }
1427
+ },
1428
+ 'function-variable': {
1429
+ pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
1430
+ alias: 'function'
1431
+ },
1432
+ 'parameter': [
1433
+ {
1434
+ pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
1435
+ lookbehind: true,
1436
+ inside: Prism.languages.javascript
1437
+ },
1438
+ {
1439
+ pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
1440
+ lookbehind: true,
1441
+ inside: Prism.languages.javascript
1442
+ },
1443
+ {
1444
+ pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
1445
+ lookbehind: true,
1446
+ inside: Prism.languages.javascript
1447
+ },
1448
+ {
1449
+ pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
1450
+ lookbehind: true,
1451
+ inside: Prism.languages.javascript
1452
+ }
1453
+ ],
1454
+ 'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/
1455
+ });
1456
+ Prism.languages.insertBefore('javascript', 'string', {
1457
+ 'hashbang': {
1458
+ pattern: /^#!.*/,
1459
+ greedy: true,
1460
+ alias: 'comment'
1461
+ },
1462
+ 'template-string': {
1463
+ pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
1464
+ greedy: true,
1465
+ inside: {
1466
+ 'template-punctuation': {
1467
+ pattern: /^`|`$/,
1468
+ alias: 'string'
1469
+ },
1470
+ 'interpolation': {
1471
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
1467
1472
  lookbehind: true,
1468
- inside: Prism.languages.javascript
1473
+ inside: {
1474
+ 'interpolation-punctuation': {
1475
+ pattern: /^\$\{|\}$/,
1476
+ alias: 'punctuation'
1477
+ },
1478
+ rest: Prism.languages.javascript
1479
+ }
1480
+ },
1481
+ 'string': /[\s\S]+/
1482
+ }
1483
+ },
1484
+ 'string-property': {
1485
+ pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
1486
+ lookbehind: true,
1487
+ greedy: true,
1488
+ alias: 'property'
1489
+ }
1490
+ });
1491
+ Prism.languages.insertBefore('javascript', 'operator', {
1492
+ 'literal-property': {
1493
+ pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
1494
+ lookbehind: true,
1495
+ alias: 'property'
1496
+ }
1497
+ });
1498
+ if (Prism.languages.markup) {
1499
+ Prism.languages.markup.tag.addInlined('script', 'javascript');
1500
+ Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, 'javascript');
1501
+ }
1502
+ Prism.languages.js = Prism.languages.javascript;
1503
+ Prism.languages.markup = {
1504
+ 'comment': {
1505
+ pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
1506
+ greedy: true
1507
+ },
1508
+ 'prolog': {
1509
+ pattern: /<\?[\s\S]+?\?>/,
1510
+ greedy: true
1511
+ },
1512
+ 'doctype': {
1513
+ pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
1514
+ greedy: true,
1515
+ inside: {
1516
+ 'internal-subset': {
1517
+ pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
1518
+ lookbehind: true,
1519
+ greedy: true,
1520
+ inside: null
1521
+ },
1522
+ 'string': {
1523
+ pattern: /"[^"]*"|'[^']*'/,
1524
+ greedy: true
1525
+ },
1526
+ 'punctuation': /^<!|>$|[[\]]/,
1527
+ 'doctype-tag': /^DOCTYPE/i,
1528
+ 'name': /[^\s<>'"]+/
1529
+ }
1530
+ },
1531
+ 'cdata': {
1532
+ pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1533
+ greedy: true
1534
+ },
1535
+ 'tag': {
1536
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
1537
+ greedy: true,
1538
+ inside: {
1539
+ 'tag': {
1540
+ pattern: /^<\/?[^\s>\/]+/,
1541
+ inside: {
1542
+ 'punctuation': /^<\/?/,
1543
+ 'namespace': /^[^\s>\/:]+:/
1544
+ }
1469
1545
  },
1470
- {
1471
- pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
1472
- lookbehind: true,
1473
- inside: Prism.languages.javascript
1546
+ 'special-attr': [],
1547
+ 'attr-value': {
1548
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
1549
+ inside: {
1550
+ 'punctuation': [
1551
+ {
1552
+ pattern: /^=/,
1553
+ alias: 'attr-equals'
1554
+ },
1555
+ {
1556
+ pattern: /^(\s*)["']|["']$/,
1557
+ lookbehind: true
1558
+ }
1559
+ ]
1560
+ }
1474
1561
  },
1475
- {
1476
- pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
1477
- lookbehind: true,
1478
- inside: Prism.languages.javascript
1562
+ 'punctuation': /\/?>/,
1563
+ 'attr-name': {
1564
+ pattern: /[^\s>\/]+/,
1565
+ inside: { 'namespace': /^[^\s>\/:]+:/ }
1479
1566
  }
1480
- ],
1481
- 'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/
1482
- });
1483
- Prism.languages.insertBefore('javascript', 'string', {
1484
- 'hashbang': {
1485
- pattern: /^#!.*/,
1486
- greedy: true,
1487
- alias: 'comment'
1567
+ }
1568
+ },
1569
+ 'entity': [
1570
+ {
1571
+ pattern: /&[\da-z]{1,8};/i,
1572
+ alias: 'named-entity'
1488
1573
  },
1489
- 'template-string': {
1490
- pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
1491
- greedy: true,
1492
- inside: {
1493
- 'template-punctuation': {
1494
- pattern: /^`|`$/,
1495
- alias: 'string'
1496
- },
1497
- 'interpolation': {
1498
- pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
1499
- lookbehind: true,
1500
- inside: {
1501
- 'interpolation-punctuation': {
1502
- pattern: /^\$\{|\}$/,
1503
- alias: 'punctuation'
1504
- },
1505
- rest: Prism.languages.javascript
1506
- }
1507
- },
1508
- 'string': /[\s\S]+/
1574
+ /&#x?[\da-f]{1,8};/i
1575
+ ]
1576
+ };
1577
+ Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity'];
1578
+ Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
1579
+ Prism.hooks.add('wrap', function (env) {
1580
+ if (env.type === 'entity') {
1581
+ env.attributes['title'] = env.content.replace(/&amp;/, '&');
1582
+ }
1583
+ });
1584
+ Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
1585
+ value: function addInlined(tagName, lang) {
1586
+ var includedCdataInside = {};
1587
+ includedCdataInside['language-' + lang] = {
1588
+ pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
1589
+ lookbehind: true,
1590
+ inside: Prism.languages[lang]
1591
+ };
1592
+ includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
1593
+ var inside = {
1594
+ 'included-cdata': {
1595
+ pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1596
+ inside: includedCdataInside
1509
1597
  }
1510
- },
1511
- 'string-property': {
1512
- pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
1598
+ };
1599
+ inside['language-' + lang] = {
1600
+ pattern: /[\s\S]+/,
1601
+ inside: Prism.languages[lang]
1602
+ };
1603
+ var def = {};
1604
+ def[tagName] = {
1605
+ pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () {
1606
+ return tagName;
1607
+ }), 'i'),
1513
1608
  lookbehind: true,
1514
1609
  greedy: true,
1515
- alias: 'property'
1516
- }
1517
- });
1518
- Prism.languages.insertBefore('javascript', 'operator', {
1519
- 'literal-property': {
1520
- pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
1521
- lookbehind: true,
1522
- alias: 'property'
1523
- }
1524
- });
1525
- if (Prism.languages.markup) {
1526
- Prism.languages.markup.tag.addInlined('script', 'javascript');
1527
- Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, 'javascript');
1610
+ inside: inside
1611
+ };
1612
+ Prism.languages.insertBefore('markup', 'cdata', def);
1528
1613
  }
1529
- Prism.languages.js = Prism.languages.javascript;
1530
- Prism.languages.markup = {
1531
- 'comment': {
1532
- pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
1533
- greedy: true
1534
- },
1535
- 'prolog': {
1536
- pattern: /<\?[\s\S]+?\?>/,
1537
- greedy: true
1538
- },
1539
- 'doctype': {
1540
- pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
1541
- greedy: true,
1542
- inside: {
1543
- 'internal-subset': {
1544
- pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
1545
- lookbehind: true,
1546
- greedy: true,
1547
- inside: null
1548
- },
1549
- 'string': {
1550
- pattern: /"[^"]*"|'[^']*'/,
1551
- greedy: true
1552
- },
1553
- 'punctuation': /^<!|>$|[[\]]/,
1554
- 'doctype-tag': /^DOCTYPE/i,
1555
- 'name': /[^\s<>'"]+/
1556
- }
1557
- },
1558
- 'cdata': {
1559
- pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1560
- greedy: true
1561
- },
1562
- 'tag': {
1563
- pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
1564
- greedy: true,
1614
+ });
1615
+ Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
1616
+ value: function (attrName, lang) {
1617
+ Prism.languages.markup.tag.inside['special-attr'].push({
1618
+ pattern: RegExp(/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, 'i'),
1619
+ lookbehind: true,
1565
1620
  inside: {
1566
- 'tag': {
1567
- pattern: /^<\/?[^\s>\/]+/,
1568
- inside: {
1569
- 'punctuation': /^<\/?/,
1570
- 'namespace': /^[^\s>\/:]+:/
1571
- }
1572
- },
1573
- 'special-attr': [],
1621
+ 'attr-name': /^[^\s=]+/,
1574
1622
  'attr-value': {
1575
- pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
1623
+ pattern: /=[\s\S]+/,
1576
1624
  inside: {
1625
+ 'value': {
1626
+ pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
1627
+ lookbehind: true,
1628
+ alias: [
1629
+ lang,
1630
+ 'language-' + lang
1631
+ ],
1632
+ inside: Prism.languages[lang]
1633
+ },
1577
1634
  'punctuation': [
1578
1635
  {
1579
1636
  pattern: /^=/,
1580
1637
  alias: 'attr-equals'
1581
1638
  },
1582
- {
1583
- pattern: /^(\s*)["']|["']$/,
1584
- lookbehind: true
1585
- }
1639
+ /"|'/
1586
1640
  ]
1587
1641
  }
1588
- },
1589
- 'punctuation': /\/?>/,
1590
- 'attr-name': {
1591
- pattern: /[^\s>\/]+/,
1592
- inside: { 'namespace': /^[^\s>\/:]+:/ }
1593
1642
  }
1594
1643
  }
1644
+ });
1645
+ }
1646
+ });
1647
+ Prism.languages.html = Prism.languages.markup;
1648
+ Prism.languages.mathml = Prism.languages.markup;
1649
+ Prism.languages.svg = Prism.languages.markup;
1650
+ Prism.languages.xml = Prism.languages.extend('markup', {});
1651
+ Prism.languages.ssml = Prism.languages.xml;
1652
+ Prism.languages.atom = Prism.languages.xml;
1653
+ Prism.languages.rss = Prism.languages.xml;
1654
+ (function (Prism) {
1655
+ var comment = /\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/;
1656
+ var constant = [
1657
+ {
1658
+ pattern: /\b(?:false|true)\b/i,
1659
+ alias: 'boolean'
1660
+ },
1661
+ {
1662
+ pattern: /(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,
1663
+ greedy: true,
1664
+ lookbehind: true
1665
+ },
1666
+ {
1667
+ pattern: /(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,
1668
+ greedy: true,
1669
+ lookbehind: true
1670
+ },
1671
+ /\b(?:null)\b/i,
1672
+ /\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/
1673
+ ];
1674
+ var number = /\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i;
1675
+ var operator = /<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/;
1676
+ var punctuation = /[{}\[\](),:;]/;
1677
+ Prism.languages.php = {
1678
+ 'delimiter': {
1679
+ pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i,
1680
+ alias: 'important'
1681
+ },
1682
+ 'comment': comment,
1683
+ 'variable': /\$+(?:\w+\b|(?=\{))/,
1684
+ 'package': {
1685
+ pattern: /(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1686
+ lookbehind: true,
1687
+ inside: { 'punctuation': /\\/ }
1688
+ },
1689
+ 'class-name-definition': {
1690
+ pattern: /(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,
1691
+ lookbehind: true,
1692
+ alias: 'class-name'
1693
+ },
1694
+ 'function-definition': {
1695
+ pattern: /(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,
1696
+ lookbehind: true,
1697
+ alias: 'function'
1595
1698
  },
1596
- 'entity': [
1699
+ 'keyword': [
1597
1700
  {
1598
- pattern: /&[\da-z]{1,8};/i,
1599
- alias: 'named-entity'
1701
+ pattern: /(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,
1702
+ alias: 'type-casting',
1703
+ greedy: true,
1704
+ lookbehind: true
1600
1705
  },
1601
- /&#x?[\da-f]{1,8};/i
1602
- ]
1603
- };
1604
- Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity'];
1605
- Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
1606
- Prism.hooks.add('wrap', function (env) {
1607
- if (env.type === 'entity') {
1608
- env.attributes['title'] = env.content.replace(/&amp;/, '&');
1609
- }
1610
- });
1611
- Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
1612
- value: function addInlined(tagName, lang) {
1613
- var includedCdataInside = {};
1614
- includedCdataInside['language-' + lang] = {
1615
- pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
1616
- lookbehind: true,
1617
- inside: Prism.languages[lang]
1618
- };
1619
- includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
1620
- var inside = {
1621
- 'included-cdata': {
1622
- pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1623
- inside: includedCdataInside
1624
- }
1625
- };
1626
- inside['language-' + lang] = {
1627
- pattern: /[\s\S]+/,
1628
- inside: Prism.languages[lang]
1629
- };
1630
- var def = {};
1631
- def[tagName] = {
1632
- pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () {
1633
- return tagName;
1634
- }), 'i'),
1635
- lookbehind: true,
1706
+ {
1707
+ pattern: /([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,
1708
+ alias: 'type-hint',
1636
1709
  greedy: true,
1637
- inside: inside
1638
- };
1639
- Prism.languages.insertBefore('markup', 'cdata', def);
1640
- }
1641
- });
1642
- Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
1643
- value: function (attrName, lang) {
1644
- Prism.languages.markup.tag.inside['special-attr'].push({
1645
- pattern: RegExp(/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, 'i'),
1646
- lookbehind: true,
1647
- inside: {
1648
- 'attr-name': /^[^\s=]+/,
1649
- 'attr-value': {
1650
- pattern: /=[\s\S]+/,
1651
- inside: {
1652
- 'value': {
1653
- pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
1654
- lookbehind: true,
1655
- alias: [
1656
- lang,
1657
- 'language-' + lang
1658
- ],
1659
- inside: Prism.languages[lang]
1660
- },
1661
- 'punctuation': [
1662
- {
1663
- pattern: /^=/,
1664
- alias: 'attr-equals'
1665
- },
1666
- /"|'/
1667
- ]
1668
- }
1669
- }
1670
- }
1671
- });
1672
- }
1673
- });
1674
- Prism.languages.html = Prism.languages.markup;
1675
- Prism.languages.mathml = Prism.languages.markup;
1676
- Prism.languages.svg = Prism.languages.markup;
1677
- Prism.languages.xml = Prism.languages.extend('markup', {});
1678
- Prism.languages.ssml = Prism.languages.xml;
1679
- Prism.languages.atom = Prism.languages.xml;
1680
- Prism.languages.rss = Prism.languages.xml;
1681
- (function (Prism) {
1682
- var comment = /\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/;
1683
- var constant = [
1710
+ lookbehind: true
1711
+ },
1712
+ {
1713
+ pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,
1714
+ alias: 'return-type',
1715
+ greedy: true,
1716
+ lookbehind: true
1717
+ },
1718
+ {
1719
+ pattern: /\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,
1720
+ alias: 'type-declaration',
1721
+ greedy: true
1722
+ },
1684
1723
  {
1685
- pattern: /\b(?:false|true)\b/i,
1686
- alias: 'boolean'
1724
+ pattern: /(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,
1725
+ alias: 'type-declaration',
1726
+ greedy: true,
1727
+ lookbehind: true
1728
+ },
1729
+ {
1730
+ pattern: /\b(?:parent|self|static)(?=\s*::)/i,
1731
+ alias: 'static-context',
1732
+ greedy: true
1733
+ },
1734
+ {
1735
+ pattern: /(\byield\s+)from\b/i,
1736
+ lookbehind: true
1687
1737
  },
1738
+ /\bclass\b/i,
1688
1739
  {
1689
- pattern: /(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,
1740
+ pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,
1741
+ lookbehind: true
1742
+ }
1743
+ ],
1744
+ 'argument-name': {
1745
+ pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,
1746
+ lookbehind: true
1747
+ },
1748
+ 'class-name': [
1749
+ {
1750
+ pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,
1690
1751
  greedy: true,
1691
1752
  lookbehind: true
1692
1753
  },
1693
1754
  {
1694
- pattern: /(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,
1755
+ pattern: /(\|\s*)\b[a-z_]\w*(?!\\)\b/i,
1695
1756
  greedy: true,
1696
1757
  lookbehind: true
1697
1758
  },
1698
- /\b(?:null)\b/i,
1699
- /\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/
1700
- ];
1701
- var number = /\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i;
1702
- var operator = /<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/;
1703
- var punctuation = /[{}\[\](),:;]/;
1704
- Prism.languages.php = {
1705
- 'delimiter': {
1706
- pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i,
1707
- alias: 'important'
1759
+ {
1760
+ pattern: /\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,
1761
+ greedy: true
1708
1762
  },
1709
- 'comment': comment,
1710
- 'variable': /\$+(?:\w+\b|(?=\{))/,
1711
- 'package': {
1712
- pattern: /(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1763
+ {
1764
+ pattern: /(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,
1765
+ alias: 'class-name-fully-qualified',
1766
+ greedy: true,
1713
1767
  lookbehind: true,
1714
1768
  inside: { 'punctuation': /\\/ }
1715
1769
  },
1716
- 'class-name-definition': {
1717
- pattern: /(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,
1718
- lookbehind: true,
1719
- alias: 'class-name'
1770
+ {
1771
+ pattern: /(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,
1772
+ alias: 'class-name-fully-qualified',
1773
+ greedy: true,
1774
+ inside: { 'punctuation': /\\/ }
1720
1775
  },
1721
- 'function-definition': {
1722
- pattern: /(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,
1776
+ {
1777
+ pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1778
+ alias: 'class-name-fully-qualified',
1779
+ greedy: true,
1723
1780
  lookbehind: true,
1724
- alias: 'function'
1781
+ inside: { 'punctuation': /\\/ }
1725
1782
  },
1726
- 'keyword': [
1727
- {
1728
- pattern: /(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,
1729
- alias: 'type-casting',
1730
- greedy: true,
1731
- lookbehind: true
1732
- },
1733
- {
1734
- pattern: /([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,
1735
- alias: 'type-hint',
1736
- greedy: true,
1737
- lookbehind: true
1738
- },
1739
- {
1740
- pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,
1741
- alias: 'return-type',
1742
- greedy: true,
1743
- lookbehind: true
1744
- },
1745
- {
1746
- pattern: /\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,
1747
- alias: 'type-declaration',
1748
- greedy: true
1749
- },
1750
- {
1751
- pattern: /(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,
1752
- alias: 'type-declaration',
1753
- greedy: true,
1754
- lookbehind: true
1755
- },
1756
- {
1757
- pattern: /\b(?:parent|self|static)(?=\s*::)/i,
1758
- alias: 'static-context',
1759
- greedy: true
1760
- },
1761
- {
1762
- pattern: /(\byield\s+)from\b/i,
1763
- lookbehind: true
1764
- },
1765
- /\bclass\b/i,
1766
- {
1767
- pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,
1768
- lookbehind: true
1769
- }
1770
- ],
1771
- 'argument-name': {
1772
- pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,
1773
- lookbehind: true
1783
+ {
1784
+ pattern: /\b[a-z_]\w*(?=\s*\$)/i,
1785
+ alias: 'type-declaration',
1786
+ greedy: true
1774
1787
  },
1775
- 'class-name': [
1776
- {
1777
- pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,
1778
- greedy: true,
1779
- lookbehind: true
1780
- },
1781
- {
1782
- pattern: /(\|\s*)\b[a-z_]\w*(?!\\)\b/i,
1783
- greedy: true,
1784
- lookbehind: true
1785
- },
1786
- {
1787
- pattern: /\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,
1788
- greedy: true
1789
- },
1790
- {
1791
- pattern: /(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,
1792
- alias: 'class-name-fully-qualified',
1793
- greedy: true,
1794
- lookbehind: true,
1795
- inside: { 'punctuation': /\\/ }
1796
- },
1797
- {
1798
- pattern: /(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,
1799
- alias: 'class-name-fully-qualified',
1800
- greedy: true,
1801
- inside: { 'punctuation': /\\/ }
1802
- },
1803
- {
1804
- pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1805
- alias: 'class-name-fully-qualified',
1806
- greedy: true,
1807
- lookbehind: true,
1808
- inside: { 'punctuation': /\\/ }
1809
- },
1810
- {
1811
- pattern: /\b[a-z_]\w*(?=\s*\$)/i,
1812
- alias: 'type-declaration',
1813
- greedy: true
1814
- },
1815
- {
1816
- pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
1817
- alias: [
1818
- 'class-name-fully-qualified',
1819
- 'type-declaration'
1820
- ],
1821
- greedy: true,
1822
- inside: { 'punctuation': /\\/ }
1823
- },
1824
- {
1825
- pattern: /\b[a-z_]\w*(?=\s*::)/i,
1826
- alias: 'static-context',
1827
- greedy: true
1828
- },
1829
- {
1830
- pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,
1831
- alias: [
1832
- 'class-name-fully-qualified',
1833
- 'static-context'
1834
- ],
1835
- greedy: true,
1836
- inside: { 'punctuation': /\\/ }
1837
- },
1838
- {
1839
- pattern: /([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,
1840
- alias: 'type-hint',
1841
- greedy: true,
1842
- lookbehind: true
1843
- },
1844
- {
1845
- pattern: /([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
1846
- alias: [
1847
- 'class-name-fully-qualified',
1848
- 'type-hint'
1849
- ],
1850
- greedy: true,
1851
- lookbehind: true,
1852
- inside: { 'punctuation': /\\/ }
1853
- },
1854
- {
1855
- pattern: /(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,
1856
- alias: 'return-type',
1857
- greedy: true,
1858
- lookbehind: true
1859
- },
1860
- {
1861
- pattern: /(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1862
- alias: [
1863
- 'class-name-fully-qualified',
1864
- 'return-type'
1865
- ],
1866
- greedy: true,
1867
- lookbehind: true,
1868
- inside: { 'punctuation': /\\/ }
1869
- }
1870
- ],
1871
- 'constant': constant,
1872
- 'function': {
1873
- pattern: /(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,
1874
- lookbehind: true,
1788
+ {
1789
+ pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
1790
+ alias: [
1791
+ 'class-name-fully-qualified',
1792
+ 'type-declaration'
1793
+ ],
1794
+ greedy: true,
1875
1795
  inside: { 'punctuation': /\\/ }
1876
1796
  },
1877
- 'property': {
1878
- pattern: /(->\s*)\w+/,
1879
- lookbehind: true
1797
+ {
1798
+ pattern: /\b[a-z_]\w*(?=\s*::)/i,
1799
+ alias: 'static-context',
1800
+ greedy: true
1880
1801
  },
1881
- 'number': number,
1882
- 'operator': operator,
1883
- 'punctuation': punctuation
1884
- };
1885
- var string_interpolation = {
1886
- pattern: /\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,
1887
- lookbehind: true,
1888
- inside: Prism.languages.php
1889
- };
1890
- var string = [
1891
1802
  {
1892
- pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,
1893
- alias: 'nowdoc-string',
1803
+ pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,
1804
+ alias: [
1805
+ 'class-name-fully-qualified',
1806
+ 'static-context'
1807
+ ],
1894
1808
  greedy: true,
1895
- inside: {
1896
- 'delimiter': {
1897
- pattern: /^<<<'[^']+'|[a-z_]\w*;$/i,
1898
- alias: 'symbol',
1899
- inside: { 'punctuation': /^<<<'?|[';]$/ }
1900
- }
1901
- }
1809
+ inside: { 'punctuation': /\\/ }
1902
1810
  },
1903
1811
  {
1904
- pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,
1905
- alias: 'heredoc-string',
1812
+ pattern: /([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,
1813
+ alias: 'type-hint',
1906
1814
  greedy: true,
1907
- inside: {
1908
- 'delimiter': {
1909
- pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,
1910
- alias: 'symbol',
1911
- inside: { 'punctuation': /^<<<"?|[";]$/ }
1912
- },
1913
- 'interpolation': string_interpolation
1914
- }
1815
+ lookbehind: true
1915
1816
  },
1916
1817
  {
1917
- pattern: /`(?:\\[\s\S]|[^\\`])*`/,
1918
- alias: 'backtick-quoted-string',
1919
- greedy: true
1818
+ pattern: /([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
1819
+ alias: [
1820
+ 'class-name-fully-qualified',
1821
+ 'type-hint'
1822
+ ],
1823
+ greedy: true,
1824
+ lookbehind: true,
1825
+ inside: { 'punctuation': /\\/ }
1920
1826
  },
1921
1827
  {
1922
- pattern: /'(?:\\[\s\S]|[^\\'])*'/,
1923
- alias: 'single-quoted-string',
1924
- greedy: true
1828
+ pattern: /(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,
1829
+ alias: 'return-type',
1830
+ greedy: true,
1831
+ lookbehind: true
1925
1832
  },
1926
1833
  {
1927
- pattern: /"(?:\\[\s\S]|[^\\"])*"/,
1928
- alias: 'double-quoted-string',
1834
+ pattern: /(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
1835
+ alias: [
1836
+ 'class-name-fully-qualified',
1837
+ 'return-type'
1838
+ ],
1929
1839
  greedy: true,
1930
- inside: { 'interpolation': string_interpolation }
1840
+ lookbehind: true,
1841
+ inside: { 'punctuation': /\\/ }
1931
1842
  }
1932
- ];
1933
- Prism.languages.insertBefore('php', 'variable', {
1934
- 'string': string,
1935
- 'attribute': {
1936
- pattern: /#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,
1937
- greedy: true,
1938
- inside: {
1939
- 'attribute-content': {
1940
- pattern: /^(#\[)[\s\S]+(?=\]$)/,
1941
- lookbehind: true,
1942
- inside: {
1943
- 'comment': comment,
1944
- 'string': string,
1945
- 'attribute-class-name': [
1946
- {
1947
- pattern: /([^:]|^)\b[a-z_]\w*(?!\\)\b/i,
1948
- alias: 'class-name',
1949
- greedy: true,
1950
- lookbehind: true
1951
- },
1952
- {
1953
- pattern: /([^:]|^)(?:\\?\b[a-z_]\w*)+/i,
1954
- alias: [
1955
- 'class-name',
1956
- 'class-name-fully-qualified'
1957
- ],
1958
- greedy: true,
1959
- lookbehind: true,
1960
- inside: { 'punctuation': /\\/ }
1961
- }
1962
- ],
1963
- 'constant': constant,
1964
- 'number': number,
1965
- 'operator': operator,
1966
- 'punctuation': punctuation
1967
- }
1968
- },
1969
- 'delimiter': {
1970
- pattern: /^#\[|\]$/,
1971
- alias: 'punctuation'
1972
- }
1843
+ ],
1844
+ 'constant': constant,
1845
+ 'function': {
1846
+ pattern: /(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,
1847
+ lookbehind: true,
1848
+ inside: { 'punctuation': /\\/ }
1849
+ },
1850
+ 'property': {
1851
+ pattern: /(->\s*)\w+/,
1852
+ lookbehind: true
1853
+ },
1854
+ 'number': number,
1855
+ 'operator': operator,
1856
+ 'punctuation': punctuation
1857
+ };
1858
+ var string_interpolation = {
1859
+ pattern: /\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,
1860
+ lookbehind: true,
1861
+ inside: Prism.languages.php
1862
+ };
1863
+ var string = [
1864
+ {
1865
+ pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,
1866
+ alias: 'nowdoc-string',
1867
+ greedy: true,
1868
+ inside: {
1869
+ 'delimiter': {
1870
+ pattern: /^<<<'[^']+'|[a-z_]\w*;$/i,
1871
+ alias: 'symbol',
1872
+ inside: { 'punctuation': /^<<<'?|[';]$/ }
1973
1873
  }
1974
1874
  }
1975
- });
1976
- Prism.hooks.add('before-tokenize', function (env) {
1977
- if (!/<\?/.test(env.code)) {
1978
- return;
1875
+ },
1876
+ {
1877
+ pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,
1878
+ alias: 'heredoc-string',
1879
+ greedy: true,
1880
+ inside: {
1881
+ 'delimiter': {
1882
+ pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,
1883
+ alias: 'symbol',
1884
+ inside: { 'punctuation': /^<<<"?|[";]$/ }
1885
+ },
1886
+ 'interpolation': string_interpolation
1979
1887
  }
1980
- var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;
1981
- Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern);
1982
- });
1983
- Prism.hooks.add('after-tokenize', function (env) {
1984
- Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php');
1985
- });
1986
- }(Prism));
1987
- Prism.languages.python = {
1988
- 'comment': {
1989
- pattern: /(^|[^\\])#.*/,
1990
- lookbehind: true,
1888
+ },
1889
+ {
1890
+ pattern: /`(?:\\[\s\S]|[^\\`])*`/,
1891
+ alias: 'backtick-quoted-string',
1892
+ greedy: true
1893
+ },
1894
+ {
1895
+ pattern: /'(?:\\[\s\S]|[^\\'])*'/,
1896
+ alias: 'single-quoted-string',
1991
1897
  greedy: true
1992
1898
  },
1993
- 'string-interpolation': {
1994
- pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
1899
+ {
1900
+ pattern: /"(?:\\[\s\S]|[^\\"])*"/,
1901
+ alias: 'double-quoted-string',
1902
+ greedy: true,
1903
+ inside: { 'interpolation': string_interpolation }
1904
+ }
1905
+ ];
1906
+ Prism.languages.insertBefore('php', 'variable', {
1907
+ 'string': string,
1908
+ 'attribute': {
1909
+ pattern: /#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,
1995
1910
  greedy: true,
1996
1911
  inside: {
1997
- 'interpolation': {
1998
- pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
1912
+ 'attribute-content': {
1913
+ pattern: /^(#\[)[\s\S]+(?=\]$)/,
1999
1914
  lookbehind: true,
2000
1915
  inside: {
2001
- 'format-spec': {
2002
- pattern: /(:)[^:(){}]+(?=\}$)/,
2003
- lookbehind: true
2004
- },
2005
- 'conversion-option': {
2006
- pattern: /![sra](?=[:}]$)/,
2007
- alias: 'punctuation'
2008
- },
2009
- rest: null
1916
+ 'comment': comment,
1917
+ 'string': string,
1918
+ 'attribute-class-name': [
1919
+ {
1920
+ pattern: /([^:]|^)\b[a-z_]\w*(?!\\)\b/i,
1921
+ alias: 'class-name',
1922
+ greedy: true,
1923
+ lookbehind: true
1924
+ },
1925
+ {
1926
+ pattern: /([^:]|^)(?:\\?\b[a-z_]\w*)+/i,
1927
+ alias: [
1928
+ 'class-name',
1929
+ 'class-name-fully-qualified'
1930
+ ],
1931
+ greedy: true,
1932
+ lookbehind: true,
1933
+ inside: { 'punctuation': /\\/ }
1934
+ }
1935
+ ],
1936
+ 'constant': constant,
1937
+ 'number': number,
1938
+ 'operator': operator,
1939
+ 'punctuation': punctuation
2010
1940
  }
2011
1941
  },
2012
- 'string': /[\s\S]+/
1942
+ 'delimiter': {
1943
+ pattern: /^#\[|\]$/,
1944
+ alias: 'punctuation'
1945
+ }
2013
1946
  }
2014
- },
2015
- 'triple-quoted-string': {
2016
- pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
2017
- greedy: true,
2018
- alias: 'string'
2019
- },
2020
- 'string': {
2021
- pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
1947
+ }
1948
+ });
1949
+ Prism.hooks.add('before-tokenize', function (env) {
1950
+ if (!/<\?/.test(env.code)) {
1951
+ return;
1952
+ }
1953
+ var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;
1954
+ Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern);
1955
+ });
1956
+ Prism.hooks.add('after-tokenize', function (env) {
1957
+ Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php');
1958
+ });
1959
+ }(Prism));
1960
+ Prism.languages.python = {
1961
+ 'comment': {
1962
+ pattern: /(^|[^\\])#.*/,
1963
+ lookbehind: true,
1964
+ greedy: true
1965
+ },
1966
+ 'string-interpolation': {
1967
+ pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
1968
+ greedy: true,
1969
+ inside: {
1970
+ 'interpolation': {
1971
+ pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
1972
+ lookbehind: true,
1973
+ inside: {
1974
+ 'format-spec': {
1975
+ pattern: /(:)[^:(){}]+(?=\}$)/,
1976
+ lookbehind: true
1977
+ },
1978
+ 'conversion-option': {
1979
+ pattern: /![sra](?=[:}]$)/,
1980
+ alias: 'punctuation'
1981
+ },
1982
+ rest: null
1983
+ }
1984
+ },
1985
+ 'string': /[\s\S]+/
1986
+ }
1987
+ },
1988
+ 'triple-quoted-string': {
1989
+ pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
1990
+ greedy: true,
1991
+ alias: 'string'
1992
+ },
1993
+ 'string': {
1994
+ pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
1995
+ greedy: true
1996
+ },
1997
+ 'function': {
1998
+ pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
1999
+ lookbehind: true
2000
+ },
2001
+ 'class-name': {
2002
+ pattern: /(\bclass\s+)\w+/i,
2003
+ lookbehind: true
2004
+ },
2005
+ 'decorator': {
2006
+ pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
2007
+ lookbehind: true,
2008
+ alias: [
2009
+ 'annotation',
2010
+ 'punctuation'
2011
+ ],
2012
+ inside: { 'punctuation': /\./ }
2013
+ },
2014
+ 'keyword': /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
2015
+ 'builtin': /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
2016
+ 'boolean': /\b(?:False|None|True)\b/,
2017
+ 'number': /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
2018
+ 'operator': /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
2019
+ 'punctuation': /[{}[\];(),.:]/
2020
+ };
2021
+ Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;
2022
+ Prism.languages.py = Prism.languages.python;
2023
+ (function (Prism) {
2024
+ Prism.languages.ruby = Prism.languages.extend('clike', {
2025
+ 'comment': {
2026
+ pattern: /#.*|^=begin\s[\s\S]*?^=end/m,
2022
2027
  greedy: true
2023
2028
  },
2024
- 'function': {
2025
- pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
2026
- lookbehind: true
2027
- },
2028
2029
  'class-name': {
2029
- pattern: /(\bclass\s+)\w+/i,
2030
- lookbehind: true
2031
- },
2032
- 'decorator': {
2033
- pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
2030
+ pattern: /(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,
2034
2031
  lookbehind: true,
2035
- alias: [
2036
- 'annotation',
2037
- 'punctuation'
2038
- ],
2039
- inside: { 'punctuation': /\./ }
2032
+ inside: { 'punctuation': /[.\\]/ }
2040
2033
  },
2041
- 'keyword': /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
2042
- 'builtin': /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
2043
- 'boolean': /\b(?:False|None|True)\b/,
2044
- 'number': /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
2045
- 'operator': /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
2046
- 'punctuation': /[{}[\];(),.:]/
2034
+ 'keyword': /\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,
2035
+ 'operator': /\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,
2036
+ 'punctuation': /[(){}[\].,;]/
2037
+ });
2038
+ Prism.languages.insertBefore('ruby', 'operator', {
2039
+ 'double-colon': {
2040
+ pattern: /::/,
2041
+ alias: 'punctuation'
2042
+ }
2043
+ });
2044
+ var interpolation = {
2045
+ pattern: /((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,
2046
+ lookbehind: true,
2047
+ inside: {
2048
+ 'content': {
2049
+ pattern: /^(#\{)[\s\S]+(?=\}$)/,
2050
+ lookbehind: true,
2051
+ inside: Prism.languages.ruby
2052
+ },
2053
+ 'delimiter': {
2054
+ pattern: /^#\{|\}$/,
2055
+ alias: 'punctuation'
2056
+ }
2057
+ }
2047
2058
  };
2048
- Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;
2049
- Prism.languages.py = Prism.languages.python;
2050
- (function (Prism) {
2051
- Prism.languages.ruby = Prism.languages.extend('clike', {
2052
- 'comment': {
2053
- pattern: /#.*|^=begin\s[\s\S]*?^=end/m,
2054
- greedy: true
2059
+ delete Prism.languages.ruby.function;
2060
+ var percentExpression = '(?:' + [
2061
+ /([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
2062
+ /\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,
2063
+ /\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,
2064
+ /\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,
2065
+ /<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source
2066
+ ].join('|') + ')';
2067
+ var symbolName = /(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;
2068
+ Prism.languages.insertBefore('ruby', 'keyword', {
2069
+ 'regex-literal': [
2070
+ {
2071
+ pattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),
2072
+ greedy: true,
2073
+ inside: {
2074
+ 'interpolation': interpolation,
2075
+ 'regex': /[\s\S]+/
2076
+ }
2055
2077
  },
2056
- 'class-name': {
2057
- pattern: /(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,
2078
+ {
2079
+ pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,
2058
2080
  lookbehind: true,
2059
- inside: { 'punctuation': /[.\\]/ }
2081
+ greedy: true,
2082
+ inside: {
2083
+ 'interpolation': interpolation,
2084
+ 'regex': /[\s\S]+/
2085
+ }
2086
+ }
2087
+ ],
2088
+ 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,
2089
+ 'symbol': [
2090
+ {
2091
+ pattern: RegExp(/(^|[^:]):/.source + symbolName),
2092
+ lookbehind: true,
2093
+ greedy: true
2060
2094
  },
2061
- 'keyword': /\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,
2062
- 'operator': /\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,
2063
- 'punctuation': /[(){}[\].,;]/
2064
- });
2065
- Prism.languages.insertBefore('ruby', 'operator', {
2066
- 'double-colon': {
2067
- pattern: /::/,
2068
- alias: 'punctuation'
2095
+ {
2096
+ pattern: RegExp(/([\r\n{(,][ \t]*)/.source + symbolName + /(?=:(?!:))/.source),
2097
+ lookbehind: true,
2098
+ greedy: true
2069
2099
  }
2070
- });
2071
- var interpolation = {
2072
- pattern: /((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,
2100
+ ],
2101
+ 'method-definition': {
2102
+ pattern: /(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,
2073
2103
  lookbehind: true,
2074
2104
  inside: {
2075
- 'content': {
2076
- pattern: /^(#\{)[\s\S]+(?=\}$)/,
2077
- lookbehind: true,
2078
- inside: Prism.languages.ruby
2079
- },
2080
- 'delimiter': {
2081
- pattern: /^#\{|\}$/,
2082
- alias: 'punctuation'
2083
- }
2105
+ 'function': /\b\w+$/,
2106
+ 'keyword': /^self\b/,
2107
+ 'class-name': /^\w+/,
2108
+ 'punctuation': /\./
2084
2109
  }
2085
- };
2086
- delete Prism.languages.ruby.function;
2087
- var percentExpression = '(?:' + [
2088
- /([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
2089
- /\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,
2090
- /\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,
2091
- /\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,
2092
- /<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source
2093
- ].join('|') + ')';
2094
- var symbolName = /(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;
2095
- Prism.languages.insertBefore('ruby', 'keyword', {
2096
- 'regex-literal': [
2097
- {
2098
- pattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),
2099
- greedy: true,
2100
- inside: {
2101
- 'interpolation': interpolation,
2102
- 'regex': /[\s\S]+/
2103
- }
2104
- },
2105
- {
2106
- pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,
2107
- lookbehind: true,
2108
- greedy: true,
2109
- inside: {
2110
- 'interpolation': interpolation,
2111
- 'regex': /[\s\S]+/
2112
- }
2110
+ }
2111
+ });
2112
+ Prism.languages.insertBefore('ruby', 'string', {
2113
+ 'string-literal': [
2114
+ {
2115
+ pattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),
2116
+ greedy: true,
2117
+ inside: {
2118
+ 'interpolation': interpolation,
2119
+ 'string': /[\s\S]+/
2113
2120
  }
2114
- ],
2115
- 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,
2116
- 'symbol': [
2117
- {
2118
- pattern: RegExp(/(^|[^:]):/.source + symbolName),
2119
- lookbehind: true,
2120
- greedy: true
2121
- },
2122
- {
2123
- pattern: RegExp(/([\r\n{(,][ \t]*)/.source + symbolName + /(?=:(?!:))/.source),
2124
- lookbehind: true,
2125
- greedy: true
2121
+ },
2122
+ {
2123
+ pattern: /("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,
2124
+ greedy: true,
2125
+ inside: {
2126
+ 'interpolation': interpolation,
2127
+ 'string': /[\s\S]+/
2126
2128
  }
2127
- ],
2128
- 'method-definition': {
2129
- pattern: /(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,
2130
- lookbehind: true,
2129
+ },
2130
+ {
2131
+ pattern: /<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
2132
+ alias: 'heredoc-string',
2133
+ greedy: true,
2134
+ inside: {
2135
+ 'delimiter': {
2136
+ pattern: /^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,
2137
+ inside: {
2138
+ 'symbol': /\b\w+/,
2139
+ 'punctuation': /^<<[-~]?/
2140
+ }
2141
+ },
2142
+ 'interpolation': interpolation,
2143
+ 'string': /[\s\S]+/
2144
+ }
2145
+ },
2146
+ {
2147
+ pattern: /<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
2148
+ alias: 'heredoc-string',
2149
+ greedy: true,
2131
2150
  inside: {
2132
- 'function': /\b\w+$/,
2133
- 'keyword': /^self\b/,
2134
- 'class-name': /^\w+/,
2135
- 'punctuation': /\./
2151
+ 'delimiter': {
2152
+ pattern: /^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,
2153
+ inside: {
2154
+ 'symbol': /\b\w+/,
2155
+ 'punctuation': /^<<[-~]?'|'$/
2156
+ }
2157
+ },
2158
+ 'string': /[\s\S]+/
2136
2159
  }
2137
2160
  }
2138
- });
2139
- Prism.languages.insertBefore('ruby', 'string', {
2140
- 'string-literal': [
2141
- {
2142
- pattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),
2143
- greedy: true,
2144
- inside: {
2145
- 'interpolation': interpolation,
2146
- 'string': /[\s\S]+/
2147
- }
2148
- },
2149
- {
2150
- pattern: /("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,
2151
- greedy: true,
2152
- inside: {
2153
- 'interpolation': interpolation,
2154
- 'string': /[\s\S]+/
2155
- }
2156
- },
2157
- {
2158
- pattern: /<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
2159
- alias: 'heredoc-string',
2160
- greedy: true,
2161
- inside: {
2162
- 'delimiter': {
2163
- pattern: /^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,
2164
- inside: {
2165
- 'symbol': /\b\w+/,
2166
- 'punctuation': /^<<[-~]?/
2167
- }
2168
- },
2169
- 'interpolation': interpolation,
2170
- 'string': /[\s\S]+/
2171
- }
2172
- },
2173
- {
2174
- pattern: /<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
2175
- alias: 'heredoc-string',
2176
- greedy: true,
2177
- inside: {
2178
- 'delimiter': {
2179
- pattern: /^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,
2180
- inside: {
2181
- 'symbol': /\b\w+/,
2182
- 'punctuation': /^<<[-~]?'|'$/
2183
- }
2184
- },
2185
- 'string': /[\s\S]+/
2161
+ ],
2162
+ 'command-literal': [
2163
+ {
2164
+ pattern: RegExp(/%x/.source + percentExpression),
2165
+ greedy: true,
2166
+ inside: {
2167
+ 'interpolation': interpolation,
2168
+ 'command': {
2169
+ pattern: /[\s\S]+/,
2170
+ alias: 'string'
2186
2171
  }
2187
2172
  }
2188
- ],
2189
- 'command-literal': [
2190
- {
2191
- pattern: RegExp(/%x/.source + percentExpression),
2192
- greedy: true,
2193
- inside: {
2194
- 'interpolation': interpolation,
2195
- 'command': {
2196
- pattern: /[\s\S]+/,
2197
- alias: 'string'
2198
- }
2199
- }
2200
- },
2201
- {
2202
- pattern: /`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,
2203
- greedy: true,
2204
- inside: {
2205
- 'interpolation': interpolation,
2206
- 'command': {
2207
- pattern: /[\s\S]+/,
2208
- alias: 'string'
2209
- }
2173
+ },
2174
+ {
2175
+ pattern: /`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,
2176
+ greedy: true,
2177
+ inside: {
2178
+ 'interpolation': interpolation,
2179
+ 'command': {
2180
+ pattern: /[\s\S]+/,
2181
+ alias: 'string'
2210
2182
  }
2211
2183
  }
2212
- ]
2213
- });
2214
- delete Prism.languages.ruby.string;
2215
- Prism.languages.insertBefore('ruby', 'number', {
2216
- 'builtin': /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,
2217
- 'constant': /\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/
2218
- });
2219
- Prism.languages.rb = Prism.languages.ruby;
2220
- }(Prism));
2221
- var Prism$1 = prismCore.exports;
2222
- var prismjs = { boltExport: Prism$1 };
2223
- return prismjs;
2224
- }));
2225
- var prism = window.Prism;
2184
+ }
2185
+ ]
2186
+ });
2187
+ delete Prism.languages.ruby.string;
2188
+ Prism.languages.insertBefore('ruby', 'number', {
2189
+ 'builtin': /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,
2190
+ 'constant': /\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/
2191
+ });
2192
+ Prism.languages.rb = Prism.languages.ruby;
2193
+ }(Prism));
2226
2194
  window.Prism = oldprism;
2227
- return prism;
2228
- }(undefined, exports$1, module));
2229
- var Prism$1 = module.exports.boltExport;
2195
+ return Prism;
2196
+ }(undefined, undefined);
2230
2197
 
2231
- var getLanguages$1 = function (editor) {
2232
- return editor.getParam('codesample_languages');
2233
- };
2234
- var useGlobalPrismJS = function (editor) {
2235
- return editor.getParam('codesample_global_prismjs', false, 'boolean');
2198
+ const option = name => editor => editor.options.get(name);
2199
+ const register$2 = editor => {
2200
+ const registerOption = editor.options.register;
2201
+ registerOption('codesample_languages', { processor: 'object[]' });
2202
+ registerOption('codesample_global_prismjs', {
2203
+ processor: 'boolean',
2204
+ default: false
2205
+ });
2236
2206
  };
2207
+ const getLanguages$1 = option('codesample_languages');
2208
+ const useGlobalPrismJS = option('codesample_global_prismjs');
2209
+
2210
+ const get = editor => Global.Prism && useGlobalPrismJS(editor) ? Global.Prism : prismjs;
2237
2211
 
2238
- var get = function (editor) {
2239
- return Global.Prism && useGlobalPrismJS(editor) ? Global.Prism : Prism$1;
2212
+ const isCodeSample = elm => {
2213
+ return isNonNullable(elm) && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1;
2240
2214
  };
2241
2215
 
2242
- var getSelectedCodeSample = function (editor) {
2243
- var node = editor.selection ? editor.selection.getNode() : null;
2244
- return someIf(isCodeSample(node), node);
2216
+ const getSelectedCodeSample = editor => {
2217
+ const node = editor.selection ? editor.selection.getNode() : null;
2218
+ return isCodeSample(node) ? Optional.some(node) : Optional.none();
2245
2219
  };
2246
- var insertCodeSample = function (editor, language, code) {
2247
- editor.undoManager.transact(function () {
2248
- var node = getSelectedCodeSample(editor);
2220
+ const insertCodeSample = (editor, language, code) => {
2221
+ const dom = editor.dom;
2222
+ editor.undoManager.transact(() => {
2223
+ const node = getSelectedCodeSample(editor);
2249
2224
  code = global$1.DOM.encode(code);
2250
- return node.fold(function () {
2225
+ return node.fold(() => {
2251
2226
  editor.insertContent('<pre id="__new" class="language-' + language + '">' + code + '</pre>');
2252
- editor.selection.select(editor.$('#__new').removeAttr('id')[0]);
2253
- }, function (n) {
2254
- editor.dom.setAttrib(n, 'class', 'language-' + language);
2227
+ const newPre = dom.select('#__new')[0];
2228
+ dom.setAttrib(newPre, 'id', null);
2229
+ editor.selection.select(newPre);
2230
+ }, n => {
2231
+ dom.setAttrib(n, 'class', 'language-' + language);
2255
2232
  n.innerHTML = code;
2256
2233
  get(editor).highlightElement(n);
2257
2234
  editor.selection.select(n);
2258
2235
  });
2259
2236
  });
2260
2237
  };
2261
- var getCurrentCode = function (editor) {
2262
- var node = getSelectedCodeSample(editor);
2263
- return node.fold(constant(''), function (n) {
2264
- return n.textContent;
2265
- });
2238
+ const getCurrentCode = editor => {
2239
+ const node = getSelectedCodeSample(editor);
2240
+ return node.bind(n => Optional.from(n.textContent)).getOr('');
2266
2241
  };
2267
2242
 
2268
- var getLanguages = function (editor) {
2269
- var defaultLanguages = [
2243
+ const getLanguages = editor => {
2244
+ const defaultLanguages = [
2270
2245
  {
2271
2246
  text: 'HTML/XML',
2272
2247
  value: 'markup'
@@ -2308,26 +2283,22 @@
2308
2283
  value: 'cpp'
2309
2284
  }
2310
2285
  ];
2311
- var customLanguages = getLanguages$1(editor);
2286
+ const customLanguages = getLanguages$1(editor);
2312
2287
  return customLanguages ? customLanguages : defaultLanguages;
2313
2288
  };
2314
- var getCurrentLanguage = function (editor, fallback) {
2315
- var node = getSelectedCodeSample(editor);
2316
- return node.fold(function () {
2317
- return fallback;
2318
- }, function (n) {
2319
- var matches = n.className.match(/language-(\w+)/);
2289
+ const getCurrentLanguage = (editor, fallback) => {
2290
+ const node = getSelectedCodeSample(editor);
2291
+ return node.fold(() => fallback, n => {
2292
+ const matches = n.className.match(/language-(\w+)/);
2320
2293
  return matches ? matches[1] : fallback;
2321
2294
  });
2322
2295
  };
2323
2296
 
2324
- var open = function (editor) {
2325
- var languages = getLanguages(editor);
2326
- var defaultLanguage = head(languages).fold(constant(''), function (l) {
2327
- return l.value;
2328
- });
2329
- var currentLanguage = getCurrentLanguage(editor, defaultLanguage);
2330
- var currentCode = getCurrentCode(editor);
2297
+ const open = editor => {
2298
+ const languages = getLanguages(editor);
2299
+ const defaultLanguage = head(languages).fold(constant(''), l => l.value);
2300
+ const currentLanguage = getCurrentLanguage(editor, defaultLanguage);
2301
+ const currentCode = getCurrentCode(editor);
2331
2302
  editor.windowManager.open({
2332
2303
  title: 'Insert/Edit Code Sample',
2333
2304
  size: 'large',
@@ -2335,7 +2306,7 @@
2335
2306
  type: 'panel',
2336
2307
  items: [
2337
2308
  {
2338
- type: 'selectbox',
2309
+ type: 'listbox',
2339
2310
  name: 'language',
2340
2311
  label: 'Language',
2341
2312
  items: languages
@@ -2364,17 +2335,17 @@
2364
2335
  language: currentLanguage,
2365
2336
  code: currentCode
2366
2337
  },
2367
- onSubmit: function (api) {
2368
- var data = api.getData();
2338
+ onSubmit: api => {
2339
+ const data = api.getData();
2369
2340
  insertCodeSample(editor, data.language, data.code);
2370
2341
  api.close();
2371
2342
  }
2372
2343
  });
2373
2344
  };
2374
2345
 
2375
- var register$1 = function (editor) {
2376
- editor.addCommand('codesample', function () {
2377
- var node = editor.selection.getNode();
2346
+ const register$1 = editor => {
2347
+ editor.addCommand('codesample', () => {
2348
+ const node = editor.selection.getNode();
2378
2349
  if (editor.selection.isCollapsed() || isCodeSample(node)) {
2379
2350
  open(editor);
2380
2351
  } else {
@@ -2383,80 +2354,110 @@
2383
2354
  });
2384
2355
  };
2385
2356
 
2386
- var setup = function (editor) {
2387
- var $ = editor.$;
2388
- editor.on('PreProcess', function (e) {
2389
- $('pre[contenteditable=false]', e.node).filter(trimArg(isCodeSample)).each(function (idx, elm) {
2390
- var $elm = $(elm), code = elm.textContent;
2391
- $elm.attr('class', $.trim($elm.attr('class')));
2392
- $elm.removeAttr('contentEditable');
2393
- $elm.empty().append($('<code></code>').each(function () {
2394
- this.textContent = code;
2395
- }));
2357
+ const blank = r => s => s.replace(r, '');
2358
+ const trim = blank(/^\s+|\s+$/g);
2359
+
2360
+ var global = tinymce.util.Tools.resolve('tinymce.util.Tools');
2361
+
2362
+ const setup = editor => {
2363
+ editor.on('PreProcess', e => {
2364
+ const dom = editor.dom;
2365
+ const pres = dom.select('pre[contenteditable=false]', e.node);
2366
+ global.each(global.grep(pres, isCodeSample), elm => {
2367
+ const code = elm.textContent;
2368
+ dom.setAttrib(elm, 'class', trim(dom.getAttrib(elm, 'class')));
2369
+ dom.setAttrib(elm, 'contentEditable', null);
2370
+ dom.setAttrib(elm, 'data-mce-highlighted', null);
2371
+ let child;
2372
+ while (child = elm.firstChild) {
2373
+ elm.removeChild(child);
2374
+ }
2375
+ const codeElm = dom.add(elm, 'code');
2376
+ codeElm.textContent = code;
2396
2377
  });
2397
2378
  });
2398
- editor.on('SetContent', function () {
2399
- var unprocessedCodeSamples = $('pre').filter(trimArg(isCodeSample)).filter(function (idx, elm) {
2400
- return elm.contentEditable !== 'false';
2379
+ editor.on('SetContent', () => {
2380
+ const dom = editor.dom;
2381
+ const unprocessedCodeSamples = global.grep(dom.select('pre'), elm => {
2382
+ return isCodeSample(elm) && dom.getAttrib(elm, 'data-mce-highlighted') !== 'true';
2401
2383
  });
2402
2384
  if (unprocessedCodeSamples.length) {
2403
- editor.undoManager.transact(function () {
2404
- unprocessedCodeSamples.each(function (idx, elm) {
2405
- $(elm).find('br').each(function (idx, elm) {
2406
- elm.parentNode.replaceChild(editor.getDoc().createTextNode('\n'), elm);
2385
+ editor.undoManager.transact(() => {
2386
+ global.each(unprocessedCodeSamples, elm => {
2387
+ var _a;
2388
+ global.each(dom.select('br', elm), elm => {
2389
+ dom.replace(editor.getDoc().createTextNode('\n'), elm);
2407
2390
  });
2408
- elm.contentEditable = 'false';
2409
- elm.innerHTML = editor.dom.encode(elm.textContent);
2391
+ elm.innerHTML = dom.encode((_a = elm.textContent) !== null && _a !== void 0 ? _a : '');
2410
2392
  get(editor).highlightElement(elm);
2411
- elm.className = $.trim(elm.className);
2393
+ dom.setAttrib(elm, 'data-mce-highlighted', true);
2394
+ elm.className = trim(elm.className);
2412
2395
  });
2413
2396
  });
2414
2397
  }
2415
2398
  });
2399
+ editor.on('PreInit', () => {
2400
+ editor.parser.addNodeFilter('pre', nodes => {
2401
+ var _a;
2402
+ for (let i = 0, l = nodes.length; i < l; i++) {
2403
+ const node = nodes[i];
2404
+ const isCodeSample = ((_a = node.attr('class')) !== null && _a !== void 0 ? _a : '').indexOf('language-') !== -1;
2405
+ if (isCodeSample) {
2406
+ node.attr('contenteditable', 'false');
2407
+ node.attr('data-mce-highlighted', 'false');
2408
+ }
2409
+ }
2410
+ });
2411
+ });
2416
2412
  };
2417
2413
 
2418
- var isCodeSampleSelection = function (editor) {
2419
- var node = editor.selection.getStart();
2414
+ const onSetupEditable = (editor, onChanged = noop) => api => {
2415
+ const nodeChanged = () => {
2416
+ api.setEnabled(editor.selection.isEditable());
2417
+ onChanged(api);
2418
+ };
2419
+ editor.on('NodeChange', nodeChanged);
2420
+ nodeChanged();
2421
+ return () => {
2422
+ editor.off('NodeChange', nodeChanged);
2423
+ };
2424
+ };
2425
+ const isCodeSampleSelection = editor => {
2426
+ const node = editor.selection.getStart();
2420
2427
  return editor.dom.is(node, 'pre[class*="language-"]');
2421
2428
  };
2422
- var register = function (editor) {
2423
- var onAction = function () {
2424
- return editor.execCommand('codesample');
2425
- };
2429
+ const register = editor => {
2430
+ const onAction = () => editor.execCommand('codesample');
2426
2431
  editor.ui.registry.addToggleButton('codesample', {
2427
2432
  icon: 'code-sample',
2428
2433
  tooltip: 'Insert/edit code sample',
2429
- onAction: onAction,
2430
- onSetup: function (api) {
2431
- var nodeChangeHandler = function () {
2432
- api.setActive(isCodeSampleSelection(editor));
2433
- };
2434
- editor.on('NodeChange', nodeChangeHandler);
2435
- return function () {
2436
- return editor.off('NodeChange', nodeChangeHandler);
2437
- };
2438
- }
2434
+ onAction,
2435
+ onSetup: onSetupEditable(editor, api => {
2436
+ api.setActive(isCodeSampleSelection(editor));
2437
+ })
2439
2438
  });
2440
2439
  editor.ui.registry.addMenuItem('codesample', {
2441
2440
  text: 'Code sample...',
2442
2441
  icon: 'code-sample',
2443
- onAction: onAction
2442
+ onAction,
2443
+ onSetup: onSetupEditable(editor)
2444
2444
  });
2445
2445
  };
2446
2446
 
2447
- function Plugin () {
2448
- global$2.add('codesample', function (editor) {
2447
+ var Plugin = () => {
2448
+ global$2.add('codesample', editor => {
2449
+ register$2(editor);
2449
2450
  setup(editor);
2450
2451
  register(editor);
2451
2452
  register$1(editor);
2452
- editor.on('dblclick', function (ev) {
2453
+ editor.on('dblclick', ev => {
2453
2454
  if (isCodeSample(ev.target)) {
2454
2455
  open(editor);
2455
2456
  }
2456
2457
  });
2457
2458
  });
2458
- }
2459
+ };
2459
2460
 
2460
2461
  Plugin();
2461
2462
 
2462
- }());
2463
+ })();