-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.wren
80 lines (74 loc) · 1.78 KB
/
build.wren
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
75
76
77
78
79
80
import "io" for File, FileFlags
var libs = [
{
"path": "lib/debug.wren",
"tag": "// Debug patch.",
"var": "__debug"
},
{
"path": "lib/tuple.wren",
"tag": "// Tuple lib.",
"var": "__tuple"
},
{
"path": "lib/syntax.wren",
"tag": "// Syntax lib.",
"var": "__syntax"
},
{
"path": "lib/coroutine.wren",
"tag": "// Coroutine lib.",
"var": "__coroutine"
},
{
"path": "lib/string.wren",
"tag": "// String lib.",
"var": "__string"
},
{
"path": "lib/utf8.wren",
"tag": "// Utf8 lib.",
"var": "__utf8"
},
{
"path": "lib/table.wren",
"tag": "// Table lib.",
"var": "__table"
},
{
"path": "lib/math.wren",
"tag": "// Math lib.",
"var": "__math"
}
]
var embed = Fn.new { | src, lib |
var code = File.read(lib["path"])
code = code.replace("\\\"", "__squote__").replace("\"", "\\\"").replace("__squote__", "\\\\\\\"") // Escapes.
code = code.replace("\t", " ") // Indent with space.
var lns = code.split("\r\n")
if (lns[lns.count - 1] == "") {
lns = lns.take(lns.count - 1)
}
code = "\t\t\t" + lib["var"] + " = \"\" +\r\n"
code = code + lns.map(Fn.new { | ln | "\t\t\t\t\"" + ln + "\\r\\n\"" }).join(" +\r\n")
var begin = src.indexOf(lib["tag"])
var end = src.indexOf(lib["tag"], begin + 1)
var head = src.take(begin + lib["tag"].count).join("") + "\r\n"
var tail = " " + src.skip(end).join("")
return head + code + tail
}
// Embeds './lib/*.wren' into './b95.wren'.
var src = File.read("b95.wren")
libs.each(
Fn.new { | lib |
var n = "\"" + lib["path"] + "\""
System.print("Embed library %(n).")
src = embed.call(src, lib)
}
)
File.openWithFlags(
"b95.wren", FileFlags.writeOnly | FileFlags.create | FileFlags.truncate,
Fn.new { | file |
file.writeBytes(src)
}
)