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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/*
* msvc-generate.js - string transformation
*
* Copyright (C) 2008-2012 Alon Bar-Lev <alon.barlev@gmail.com>
*
* BSD License
* ============
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o Neither the name of the Alon Bar-Lev nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
var ForReading = 1;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var input = "nul";
var output = "nul";
var files = new Array();
var env = new Array();
function initialize() {
for (var i=0;i<WScript.Arguments.length;i++) {
var arg = WScript.Arguments(i);
if (arg.match(/^--input=(.*)$/)) {
input=RegExp.$1;
}
else if (arg.match(/^--output=(.*)$/)) {
output=RegExp.$1;
}
else if (arg.match(/^--config=(.*)$/)) {
files.push(RegExp.$1);
}
else if (arg.match(/^--var=([^=]*)=(.*)$/)) {
env[RegExp.$1] = RegExp.$2;
}
}
}
function process_config(vars, file) {
try {
var fin = fso.OpenTextFile(file, ForReading);
while (!fin.AtEndOfStream) {
var content = fin.ReadLine();
if (content.match(/^[ \t]*define\(\[(.*)\],[ \t]*\[(.*)\]\)[ \t]*/)) {
vars[RegExp.$1] = RegExp.$2;
}
}
}
catch(e) {
throw new Error(1, "Cannot process '" + file + "'.");
}
}
function process_file(vars, input, output) {
var fin = fso.OpenTextFile(input, ForReading);
var fout = fso.CreateTextFile(output);
var content = fin.ReadAll();
for (var i in vars) {
content = content.replace(new RegExp("@"+i+"@", "g"), vars[i]);
}
fout.Write(content);
}
function build_vars() {
var vars = new Array();
for (var f in files) {
process_config(vars, files[f]);
}
for (var e in env) {
vars[e] = env[e];
}
return vars;
}
function main() {
try {
initialize();
var vars = build_vars();
process_file(
vars,
input,
output
);
WScript.Quit(0);
}
catch(e) {
WScript.Echo("ERROR: when procssing " + output + ": " + e.description);
WScript.Quit(1);
}
}
main();
|