UNPKG

2.64 kBJavaScriptView Raw
1(function (Prism) {
2
3 // https://cuelang.org/docs/references/spec/
4
5 // eslint-disable-next-line regexp/strict
6 var stringEscape = /\\(?:(?!\2)|\2(?:[^()\r\n]|\([^()]*\)))/.source;
7 // eslint-disable-next-line regexp/strict
8 var stringTypes = /"""(?:[^\\"]|"(?!""\2)|<esc>)*"""/.source +
9 // eslint-disable-next-line regexp/strict
10 '|' + /'''(?:[^\\']|'(?!''\2)|<esc>)*'''/.source +
11 // eslint-disable-next-line regexp/strict
12 '|' + /"(?:[^\\\r\n"]|"(?!\2)|<esc>)*"/.source +
13 // eslint-disable-next-line regexp/strict
14 '|' + /'(?:[^\\\r\n']|'(?!\2)|<esc>)*'/.source;
15 var stringLiteral = '(?:' + stringTypes.replace(/<esc>/g, stringEscape) + ')';
16
17 Prism.languages.cue = {
18 'comment': {
19 pattern: /\/\/.*/,
20 greedy: true
21 },
22 'string-literal': {
23 // eslint-disable-next-line regexp/strict
24 pattern: RegExp(/(^|[^#"'\\])(#*)/.source + stringLiteral + /(?!["'])\2/.source),
25 lookbehind: true,
26 greedy: true,
27 inside: {
28 // I'm using dirty hack here. We have to know the number hashes at the start of the string somehow,
29 // but we can't look back. So instead, we will use a lookahead, go to the end of the string, and
30 // capture the hashes at the end of the string.
31 'escape': {
32 pattern: /(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/,
33 greedy: true,
34 alias: 'string'
35 },
36 'interpolation': {
37 pattern: /(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/,
38 greedy: true,
39 inside: {
40 'punctuation': /^\\#*\(|\)$/,
41 'expression': {
42 pattern: /[\s\S]+/,
43 inside: null
44 }
45 }
46 },
47 'string': /[\s\S]+/
48 }
49 },
50
51 'keyword': {
52 pattern: /(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/,
53 lookbehind: true
54 },
55 'boolean': {
56 pattern: /(^|[^\w$])(?:false|true)(?![\w$])/,
57 lookbehind: true
58 },
59 'builtin': {
60 pattern: /(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/,
61 lookbehind: true
62 },
63
64 'attribute': {
65 pattern: /@[\w$]+(?=\s*\()/,
66 alias: 'function'
67 },
68 'function': {
69 pattern: /(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i,
70 lookbehind: true
71 },
72
73 'number': {
74 pattern: /(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/,
75 lookbehind: true
76 },
77
78 'operator': /\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/,
79 'punctuation': /[()[\]{},.:]/
80 };
81
82 Prism.languages.cue['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.cue;
83
84}(Prism));