1- import { insertBefore } from '../util/language-util.js' ;
21import ruby from './ruby.js' ;
32
43/** @type {import('../types.d.ts').LanguageProto<'haml'> } */
@@ -13,7 +12,43 @@ export default {
1312 code |
1413 */
1514
16- const haml = {
15+ const filter_pattern =
16+ '((?:^|\\r?\\n|\\r)([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+' ;
17+
18+ // Non exhaustive list of available filters and associated languages
19+ const filters = [
20+ 'css' ,
21+ { filter : 'coffee' , language : 'coffeescript' } ,
22+ 'erb' ,
23+ 'javascript' ,
24+ 'less' ,
25+ 'markdown' ,
26+ 'ruby' ,
27+ 'scss' ,
28+ 'textile' ,
29+ ] ;
30+
31+ const all_filters = /** @type {import('../types.d.ts').GrammarTokens } */ ( { } ) ;
32+ for ( const f of filters ) {
33+ const { filter, language } = typeof f === 'string' ? { filter : f , language : f } : f ;
34+ all_filters [ 'filter-' + filter ] = {
35+ pattern : RegExp ( filter_pattern . replace ( '{{filter_name}}' , ( ) => filter ) ) ,
36+ lookbehind : true ,
37+ inside : {
38+ 'filter-name' : {
39+ pattern : / ^ : [ \w - ] + / ,
40+ alias : 'symbol' ,
41+ } ,
42+ 'text' : {
43+ pattern : / [ \s \S ] + / ,
44+ alias : [ language , 'language-' + language ] ,
45+ inside : language ,
46+ } ,
47+ } ,
48+ } ;
49+ }
50+
51+ return {
1752 // Multiline stuff should appear before the rest
1853
1954 'multiline-comment' : {
@@ -115,47 +150,9 @@ export default {
115150 pattern : / ( (?: ^ | \r ? \n | \r ) [ \t ] * ) [ ~ = \- & ! ] + / ,
116151 lookbehind : true ,
117152 } ,
153+ $insertBefore : {
154+ 'filter' : all_filters ,
155+ } ,
118156 } ;
119-
120- const filter_pattern =
121- '((?:^|\\r?\\n|\\r)([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+' ;
122-
123- // Non exhaustive list of available filters and associated languages
124- const filters = [
125- 'css' ,
126- { filter : 'coffee' , language : 'coffeescript' } ,
127- 'erb' ,
128- 'javascript' ,
129- 'less' ,
130- 'markdown' ,
131- 'ruby' ,
132- 'scss' ,
133- 'textile' ,
134- ] ;
135-
136- /** @type {import('../types.d.ts').Grammar } */
137- const all_filters = { } ;
138- for ( const f of filters ) {
139- const { filter, language } = typeof f === 'string' ? { filter : f , language : f } : f ;
140- all_filters [ 'filter-' + filter ] = {
141- pattern : RegExp ( filter_pattern . replace ( '{{filter_name}}' , ( ) => filter ) ) ,
142- lookbehind : true ,
143- inside : {
144- 'filter-name' : {
145- pattern : / ^ : [ \w - ] + / ,
146- alias : 'symbol' ,
147- } ,
148- 'text' : {
149- pattern : / [ \s \S ] + / ,
150- alias : [ language , 'language-' + language ] ,
151- inside : language ,
152- } ,
153- } ,
154- } ;
155- }
156-
157- insertBefore ( haml , 'filter' , all_filters ) ;
158-
159- return haml ;
160157 } ,
161158} ;
0 commit comments