|
1 | | -import { insertBefore } from '../util/language-util.js'; |
2 | 1 | import clike from './clike.js'; |
3 | 2 |
|
4 | 3 | /** @type {import('../types.d.ts').LanguageProto<'vala'>} */ |
5 | 4 | export default { |
6 | 5 | id: 'vala', |
7 | 6 | base: clike, |
8 | | - grammar ({ base }) { |
9 | | - insertBefore(base, 'string', { |
10 | | - 'raw-string': { |
11 | | - pattern: /"""[\s\S]*?"""/, |
12 | | - greedy: true, |
13 | | - alias: 'string', |
14 | | - }, |
15 | | - 'template-string': { |
16 | | - pattern: /@"[\s\S]*?"/, |
17 | | - greedy: true, |
18 | | - inside: { |
19 | | - 'interpolation': { |
20 | | - pattern: /\$(?:\([^)]*\)|[a-zA-Z]\w*)/, |
21 | | - inside: /** @type {Grammar} */ ({ |
22 | | - 'delimiter': { |
23 | | - pattern: /^\$\(?|\)$/, |
24 | | - alias: 'punctuation', |
25 | | - }, |
26 | | - $rest: /** @type {Grammar['$rest']} */ ('vala'), |
27 | | - }), |
28 | | - }, |
29 | | - 'string': /[\s\S]+/, |
30 | | - }, |
31 | | - }, |
32 | | - }); |
33 | | - |
34 | | - insertBefore(base, 'keyword', { |
35 | | - 'regex': { |
36 | | - pattern: |
37 | | - /\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/, |
38 | | - greedy: true, |
39 | | - inside: { |
40 | | - 'regex-source': { |
41 | | - pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, |
42 | | - lookbehind: true, |
43 | | - alias: 'language-regex', |
44 | | - inside: 'regex', |
45 | | - }, |
46 | | - 'regex-delimiter': /^\//, |
47 | | - 'regex-flags': /^[a-z]+$/, |
48 | | - }, |
49 | | - }, |
50 | | - }); |
51 | | - |
| 7 | + grammar () { |
52 | 8 | return { |
53 | 9 | // Classes copied from csharp |
54 | 10 | 'class-name': [ |
@@ -93,10 +49,48 @@ export default { |
93 | 49 | 'operator': /\+\+|--|&&|\|\||<<=?|>>=?|=>|->|~|[+\-*\/%&^|=!<>]=?|\?\??|\.\.\./, |
94 | 50 | 'punctuation': /[{}[\];(),.:]/, |
95 | 51 | 'constant': /\b[A-Z0-9_]+\b/, |
| 52 | + $insert: { |
| 53 | + 'raw-string': { |
| 54 | + $before: 'string', |
| 55 | + pattern: /"""[\s\S]*?"""/, |
| 56 | + greedy: true, |
| 57 | + alias: 'string', |
| 58 | + }, |
| 59 | + 'template-string': { |
| 60 | + $before: 'string', |
| 61 | + pattern: /@"[\s\S]*?"/, |
| 62 | + greedy: true, |
| 63 | + inside: { |
| 64 | + 'interpolation': { |
| 65 | + pattern: /\$(?:\([^)]*\)|[a-zA-Z]\w*)/, |
| 66 | + inside: { |
| 67 | + 'delimiter': { |
| 68 | + pattern: /^\$\(?|\)$/, |
| 69 | + alias: 'punctuation', |
| 70 | + }, |
| 71 | + $rest: 'vala', |
| 72 | + }, |
| 73 | + }, |
| 74 | + 'string': /[\s\S]+/, |
| 75 | + }, |
| 76 | + }, |
| 77 | + 'regex': { |
| 78 | + $before: 'keyword', |
| 79 | + pattern: |
| 80 | + /\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/, |
| 81 | + greedy: true, |
| 82 | + inside: { |
| 83 | + 'regex-source': { |
| 84 | + pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, |
| 85 | + lookbehind: true, |
| 86 | + alias: 'language-regex', |
| 87 | + inside: 'regex', |
| 88 | + }, |
| 89 | + 'regex-delimiter': /^\//, |
| 90 | + 'regex-flags': /^[a-z]+$/, |
| 91 | + }, |
| 92 | + }, |
| 93 | + }, |
96 | 94 | }; |
97 | 95 | }, |
98 | 96 | }; |
99 | | - |
100 | | -/** |
101 | | - * @typedef {import('../types.d.ts').Grammar} Grammar |
102 | | - */ |
0 commit comments