1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function yaml(hljs) {
|
11 | const LITERALS = 'true false yes no null';
|
12 |
|
13 |
|
14 | const URI_CHARACTERS = '[\\w#;/?:@&=+$,.~*\'()[\\]]+';
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | const KEY = {
|
21 | className: 'attr',
|
22 | variants: [
|
23 | {
|
24 | begin: '\\w[\\w :\\/.-]*:(?=[ \t]|$)'
|
25 | },
|
26 | {
|
27 | begin: '"\\w[\\w :\\/.-]*":(?=[ \t]|$)'
|
28 | },
|
29 | {
|
30 | begin: '\'\\w[\\w :\\/.-]*\':(?=[ \t]|$)'
|
31 | }
|
32 | ]
|
33 | };
|
34 |
|
35 | const TEMPLATE_VARIABLES = {
|
36 | className: 'template-variable',
|
37 | variants: [
|
38 | {
|
39 | begin: /\{\{/,
|
40 | end: /\}\}/
|
41 | },
|
42 | {
|
43 | begin: /%\{/,
|
44 | end: /\}/
|
45 | }
|
46 | ]
|
47 | };
|
48 | const STRING = {
|
49 | className: 'string',
|
50 | relevance: 0,
|
51 | variants: [
|
52 | {
|
53 | begin: /'/,
|
54 | end: /'/
|
55 | },
|
56 | {
|
57 | begin: /"/,
|
58 | end: /"/
|
59 | },
|
60 | {
|
61 | begin: /\S+/
|
62 | }
|
63 | ],
|
64 | contains: [
|
65 | hljs.BACKSLASH_ESCAPE,
|
66 | TEMPLATE_VARIABLES
|
67 | ]
|
68 | };
|
69 |
|
70 |
|
71 |
|
72 | const CONTAINER_STRING = hljs.inherit(STRING, {
|
73 | variants: [
|
74 | {
|
75 | begin: /'/,
|
76 | end: /'/
|
77 | },
|
78 | {
|
79 | begin: /"/,
|
80 | end: /"/
|
81 | },
|
82 | {
|
83 | begin: /[^\s,{}[\]]+/
|
84 | }
|
85 | ]
|
86 | });
|
87 |
|
88 | const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';
|
89 | const TIME_RE = '([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?';
|
90 | const FRACTION_RE = '(\\.[0-9]*)?';
|
91 | const ZONE_RE = '([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';
|
92 | const TIMESTAMP = {
|
93 | className: 'number',
|
94 | begin: '\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\b'
|
95 | };
|
96 |
|
97 | const VALUE_CONTAINER = {
|
98 | end: ',',
|
99 | endsWithParent: true,
|
100 | excludeEnd: true,
|
101 | keywords: LITERALS,
|
102 | relevance: 0
|
103 | };
|
104 | const OBJECT = {
|
105 | begin: /\{/,
|
106 | end: /\}/,
|
107 | contains: [ VALUE_CONTAINER ],
|
108 | illegal: '\\n',
|
109 | relevance: 0
|
110 | };
|
111 | const ARRAY = {
|
112 | begin: '\\[',
|
113 | end: '\\]',
|
114 | contains: [ VALUE_CONTAINER ],
|
115 | illegal: '\\n',
|
116 | relevance: 0
|
117 | };
|
118 |
|
119 | const MODES = [
|
120 | KEY,
|
121 | {
|
122 | className: 'meta',
|
123 | begin: '^---\\s*$',
|
124 | relevance: 10
|
125 | },
|
126 | {
|
127 |
|
128 |
|
129 |
|
130 |
|
131 | className: 'string',
|
132 | begin: '[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*'
|
133 | },
|
134 | {
|
135 | begin: '<%[%=-]?',
|
136 | end: '[%-]?%>',
|
137 | subLanguage: 'ruby',
|
138 | excludeBegin: true,
|
139 | excludeEnd: true,
|
140 | relevance: 0
|
141 | },
|
142 | {
|
143 | className: 'type',
|
144 | begin: '!\\w+!' + URI_CHARACTERS
|
145 | },
|
146 |
|
147 | {
|
148 | className: 'type',
|
149 | begin: '!<' + URI_CHARACTERS + ">"
|
150 | },
|
151 | {
|
152 | className: 'type',
|
153 | begin: '!' + URI_CHARACTERS
|
154 | },
|
155 | {
|
156 | className: 'type',
|
157 | begin: '!!' + URI_CHARACTERS
|
158 | },
|
159 | {
|
160 | className: 'meta',
|
161 | begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'
|
162 | },
|
163 | {
|
164 | className: 'meta',
|
165 | begin: '\\*' + hljs.UNDERSCORE_IDENT_RE + '$'
|
166 | },
|
167 | {
|
168 | className: 'bullet',
|
169 |
|
170 | begin: '-(?=[ ]|$)',
|
171 | relevance: 0
|
172 | },
|
173 | hljs.HASH_COMMENT_MODE,
|
174 | {
|
175 | beginKeywords: LITERALS,
|
176 | keywords: {
|
177 | literal: LITERALS
|
178 | }
|
179 | },
|
180 | TIMESTAMP,
|
181 |
|
182 |
|
183 | {
|
184 | className: 'number',
|
185 | begin: hljs.C_NUMBER_RE + '\\b',
|
186 | relevance: 0
|
187 | },
|
188 | OBJECT,
|
189 | ARRAY,
|
190 | STRING
|
191 | ];
|
192 |
|
193 | const VALUE_MODES = [ ...MODES ];
|
194 | VALUE_MODES.pop();
|
195 | VALUE_MODES.push(CONTAINER_STRING);
|
196 | VALUE_CONTAINER.contains = VALUE_MODES;
|
197 |
|
198 | return {
|
199 | name: 'YAML',
|
200 | case_insensitive: true,
|
201 | aliases: [ 'yml' ],
|
202 | contains: MODES
|
203 | };
|
204 | }
|
205 |
|
206 | export { yaml as default };
|