123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- * 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();
|