@@ -9,16 +9,59 @@ var chalk = require("chalk"),
9
9
temp = require ( "temp" ) . track ( ) ,
10
10
_ = require ( "underscore" ) ,
11
11
cson = require ( "cson" ) ,
12
- plist = require ( "plist" ) ;
12
+ plist = require ( "plist" ) ,
13
+ path = require ( "path" ) ;
14
+
15
+
16
+ function readGrammarFile ( filename ) {
17
+ function read ( filename , vars ) {
18
+ var yamlSource = fs . readFileSync ( filename , 'utf8' ) ;
19
+
20
+ if ( vars ) {
21
+ yamlSource = yamlSource . replace (
22
+ / \$ \{ ( \w + ) \} / g,
23
+ function ( all , name ) {
24
+ if ( name && vars [ name ] ) {
25
+ return vars [ name ] ;
26
+ } else {
27
+ return all ;
28
+ }
29
+ } ) ;
30
+ }
31
+
32
+ var schema = yaml . safeLoad ( yamlSource ) ;
33
+
34
+ if ( schema . repository
35
+ && schema . repository . $apply
36
+ && schema . repository . $apply instanceof Array )
37
+ {
38
+ var specs = schema . repository . $apply ;
39
+ for ( var i = 0 ; i < specs . length ; i ++ ) {
40
+ var spec = specs [ i ] ;
41
+
42
+ var inner = read ( path . join ( path . dirname ( filename ) ,
43
+ spec . file ) ,
44
+ spec . vars ) ;
45
+
46
+ _ . extend ( schema . repository , inner . repository ) ;
47
+ }
48
+
49
+ delete schema . repository . $apply ;
50
+ }
51
+
52
+ return schema ;
53
+ }
54
+
55
+ return read ( filename ) ;
56
+ }
13
57
14
58
15
59
function compileGrammar ( grammarFile , additionalGrammars ) {
16
60
function _compile ( filename , registry ) {
17
61
var tmp = temp . openSync ( ) ;
18
62
19
63
try {
20
- var yamlSource = fs . readFileSync ( filename , 'utf8' ) ,
21
- yamlSchema = yaml . safeLoad ( yamlSource ) ;
64
+ var yamlSchema = readGrammarFile ( filename ) ;
22
65
23
66
fs . writeSync ( tmp . fd , JSON . stringify ( yamlSchema ) ) ;
24
67
fs . closeSync ( tmp . fd ) ;
@@ -227,8 +270,7 @@ function test(testFiles, grammarFile, options) {
227
270
228
271
229
272
function buildCson ( inName , outName ) {
230
- var yamlSource = fs . readFileSync ( inName , 'utf8' ) ,
231
- yamlSchema = yaml . safeLoad ( yamlSource ) ,
273
+ var yamlSchema = readGrammarFile ( inName ) ,
232
274
csonSource = cson . createCSONString ( yamlSchema , { indent : 2 } ) ;
233
275
234
276
csonSource = '# AUTOGENERATED FROM ' + inName + '\n' + csonSource ;
@@ -237,8 +279,7 @@ function buildCson(inName, outName) {
237
279
238
280
239
281
function buildPList ( inName , outName ) {
240
- var yamlSource = fs . readFileSync ( inName , 'utf8' ) ,
241
- yamlSchema = yaml . safeLoad ( yamlSource ) ,
282
+ var yamlSchema = readGrammarFile ( inName ) ,
242
283
plistSource = plist . build ( yamlSchema ) ;
243
284
244
285
plistSource = '<!-- AUTOGENERATED FROM ' + inName + ' -->\n' +
0 commit comments