1
+ 'use strict' ;
2
+
3
+ // http://codemirror.net/mode/index.html
4
+ // https://github.com/adobe/brackets/blob/master/src/language/languages.json
5
+ // https://github.com/git/hello-world
6
+
7
+ var fs = require ( 'fs' ) ;
8
+ var rimraf = require ( 'rimraf' ) . sync ;
9
+ var Zip = require ( 'node-zip' ) ;
10
+
11
+ var languages = {
12
+ 'apl' : {
13
+ name : 'APL' ,
14
+ mode : 'apl' ,
15
+ fileExtensions : [ 'apl' ] ,
16
+ lineComment : [ '⍝' ]
17
+ } ,
18
+ 'cobol' : {
19
+ name : 'COBOL' ,
20
+ mode : 'cobol' ,
21
+ fileExtensions : [ 'cbl' ]
22
+ } ,
23
+ 'commonlisp' : {
24
+ name : 'Common Lisp' ,
25
+ mode : 'commonlisp' ,
26
+ fileExtensions : [ 'clisp' , 'lisp' ] ,
27
+ lineComment : [ ';' , ';;' ]
28
+ } ,
29
+ 'd' : {
30
+ name : 'D' ,
31
+ mode : 'd' ,
32
+ fileExtensions : [ 'd' ] ,
33
+ lineComment : [ '//' ] ,
34
+ blockComment : [ '/*' , '*/' ]
35
+ } ,
36
+ 'dtd' : {
37
+ name : 'DTD' ,
38
+ mode : 'dtd' ,
39
+ fileExtensions : [ 'dtd' ] ,
40
+ blockComment : [ '<!--' , '-->' ]
41
+ } ,
42
+ 'ecl' : {
43
+ name : 'ECL' ,
44
+ mode : 'ecl' ,
45
+ fileExtensions : [ 'ecl' ] ,
46
+ lineComment : [ '//' ] ,
47
+ blockComment : [ '/*' , '*/' ]
48
+ } ,
49
+ 'eiffel' : {
50
+ name : 'Eiffel' ,
51
+ mode : 'eiffel' ,
52
+ fileExtensions : [ 'e' , 'eiff' ] ,
53
+ lineComment : [ '--' ]
54
+ } ,
55
+ 'erlang' : {
56
+ name : 'Erlang' ,
57
+ mode : 'erlang' ,
58
+ fileExtensions : [ 'erl' , 'escript' ] ,
59
+ lineComment : [ '%%' ]
60
+ } ,
61
+ 'fortran' : {
62
+ name : 'FORTRAN' ,
63
+ mode : 'fortran' ,
64
+ fileExtensions : [ 'f90' , 'f77' ] ,
65
+ lineComment : [ '!' ]
66
+ } ,
67
+ 'haskell' : {
68
+ name : 'Haskell' ,
69
+ mode : 'haskell' ,
70
+ fileExtensions : [ 'hs' ] ,
71
+ lineComment : [ '--' ]
72
+ } ,
73
+ 'haxe' : {
74
+ name : 'Haxe' ,
75
+ mode : 'haxe' ,
76
+ fileExtensions : [ 'hx' ] ,
77
+ lineComment : [ '//' ] ,
78
+ blockComment : [ '/*' , '*/' ]
79
+ } ,
80
+ 'http' : {
81
+ name : 'HTTP' ,
82
+ mode : 'http' ,
83
+ fileExtensions : [ 'http' ]
84
+ }
85
+ } ;
86
+
87
+ function plugin ( name , mode ) {
88
+ return 'define(function (require, exports, module) {\n' +
89
+ ' "use strict";\n' +
90
+ ' var LanguageManager = brackets.getModule("language/LanguageManager");\n' +
91
+ ' LanguageManager.defineLanguage(' + JSON . stringify ( name ) + ', ' +
92
+ JSON . stringify ( mode ) + ');\n' +
93
+ '});' ;
94
+ }
95
+ function pkg ( name , mode ) {
96
+ var extensions = mode . fileExtensions . map ( function ( e ) { return '.' + e } ) . join ( ', ' ) ;
97
+ return JSON . stringify ( {
98
+ name : name ,
99
+ title : mode . name + ' Syntax Highlighter' ,
100
+ description : 'Add syntax highlighting support for the ' + mode . name + ' language (' + extensions + ').' ,
101
+ homepage : 'https://github.com/ForbesLindesay/brackets-language-extensions' ,
102
+ version : '1.0.0' ,
103
+ author : 'Forbes Lindesay (http://www.forbeslindesay.co.uk)' ,
104
+ license : 'MIT' ,
105
+ engines : {
106
+ 'brackets' : '>=0.24.0'
107
+ }
108
+ } , null , ' ' ) ;
109
+ }
110
+
111
+ rimraf ( __dirname + '/output' ) ;
112
+ fs . mkdirSync ( __dirname + '/output' ) ;
113
+ Object . keys ( languages ) . forEach ( function ( name ) {
114
+ var zip = new Zip ( ) ;
115
+ zip . file ( 'main.js' , plugin ( name , languages [ name ] ) ) ;
116
+ zip . file ( 'package.json' , pkg ( name , languages [ name ] ) ) ;
117
+ var data = new Buffer ( zip . generate ( { base64 : false , compression : 'DEFLATE' } ) , 'binary' ) ;
118
+ fs . writeFileSync ( __dirname + '/output/' + name + '.zip' , data ) ;
119
+ } ) ;
0 commit comments