-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild.coffee
More file actions
74 lines (64 loc) · 2.55 KB
/
Copy pathbuild.coffee
File metadata and controls
74 lines (64 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env coffee
path = require 'path'
fs = require 'fs'
__dir = path.dirname fs.realpathSync(__filename)
srcDir = path.join(__dir, 'src')
{CoffeeScript} = require path.join(__dir, 'lib/coffee-script')
visitDir = (directory) ->
result = []
for name in fs.readdirSync directory
fullname = path.join directory, name
stat = fs.statSync fullname
if stat.isDirectory()
for child in visitDir fullname
result.push child
else
result.push fullname
return result
walk = (root) ->
for name in visitDir root
name[root.length...]
preprocess = (relname, source) ->
lines = ["sys.defModule '#{relname}', (exports, require, fs) ->"]
for line in source.split '\n'
lines.push ' ' + line
lines.push ' return exports'
return lines.join '\n'
if require.main is module
code = ['(function(){']
code.push(
fs.readFileSync(path.join(__dir, 'lib/tessellate.js'), encoding:'utf-8')
)
code.push CoffeeScript.compile(
fs.readFileSync(path.join(__dir, 'lib/require.coffee'), encoding:'utf-8')
header:false, bare:true
).trim()
for name in walk srcDir
fullname = path.join srcDir, name
extension = name.split('.').pop()
switch extension
when 'coffee'
name = name[...name.length - '.coffee'.length]
console.log 'compiling', name
source = fs.readFileSync fullname, encoding:'utf-8'
source = preprocess name, source
js = CoffeeScript.compile(source, header:false, bare:true).trim()
code.push js
when 'jpg', 'jpeg', 'png', 'webp', 'gif'
console.log 'including', name
code.push "sys.defFile('#{name}');"
when 'shader', 'glsl', 'fragment', 'vertex'
console.log 'including', name
text = fs.readFileSync fullname, 'utf-8'
text = "#file #{name}\n#{text}"
js = CoffeeScript.compile('sys.defFile "' + name + '", """' + text + '"""', header:false, bare:true).trim()
code.push js
else
console.log 'including', name
text = fs.readFileSync fullname, 'utf-8'
js = CoffeeScript.compile('sys.defFile "' + name + '", """' + text + '"""', header:false, bare:true).trim()
code.push js
code.push 'sys.main();'
code.push '})();'
code = code.join('\n')
fs.writeFileSync(path.join(__dir, 'WebGLTextureOverlay.js'), code)