|
|
@@ -0,0 +1,341 @@ |
|
|
|
// Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
// contributor license agreements. See the NOTICE file distributed with
|
|
|
|
// this work for additional information regarding copyright ownership.
|
|
|
|
// The ASF licenses this file to You under the Apache License, Version 2.0
|
|
|
|
// (the "License"); you may not use this file except in compliance with
|
|
|
|
// the License. You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
// $Id$ -->
|
|
|
|
|
|
|
|
// jscript to run FOP, adapted from the Jakarta-Ant project.
|
|
|
|
|
|
|
|
// rpm_mode is irrelevant on Windows
|
|
|
|
// var rpm_mode=true;
|
|
|
|
var fop_exec_args = "";
|
|
|
|
var no_config=false;
|
|
|
|
var fop_exec_debug=false;
|
|
|
|
var debug=false;
|
|
|
|
var keep_open=false;
|
|
|
|
var show_help=false;
|
|
|
|
|
|
|
|
var config_wanted = new Array("FOP_HOME", "CLASSPATH", "FOP_HYPHENATION_PATH", "FOP_OPTS", "JAVA_OPTS", "LOGCHOICE", "LOGLEVEL");
|
|
|
|
|
|
|
|
// parse command-line arguments
|
|
|
|
function read_args() {
|
|
|
|
var args = WScript.Arguments;
|
|
|
|
var named = new ActiveXObject("Scripting.Dictionary");
|
|
|
|
for (i = 0; i < args.length; i++) {
|
|
|
|
switch(args(i)) {
|
|
|
|
case "--debug":
|
|
|
|
debug=true;
|
|
|
|
break;
|
|
|
|
case "--execdebug":
|
|
|
|
fop_exec_debug=true;
|
|
|
|
break;
|
|
|
|
case "--keepopen":
|
|
|
|
keep_open=true;
|
|
|
|
break;
|
|
|
|
case "--noconfig":
|
|
|
|
no_config=true;
|
|
|
|
break;
|
|
|
|
case "-h":
|
|
|
|
case "--help":
|
|
|
|
case "--h":
|
|
|
|
case "-help":
|
|
|
|
show_help=true;
|
|
|
|
// fop_exec_args=fop_exec_args + " -h";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
fop_exec_args=fop_exec_args + " " + args(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("debug: " + debug);
|
|
|
|
WScript.Echo("execdebug: " + fop_exec_debug);
|
|
|
|
WScript.Echo("keepopen: " + keep_open);
|
|
|
|
WScript.Echo("noconfig: " + no_config);
|
|
|
|
WScript.Echo("help: " + show_help);
|
|
|
|
WScript.Echo("fop arguments: " + fop_exec_args);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var help_text="Usage:\n"
|
|
|
|
+ WScript.ScriptFullName + " [script options] [FOP options]\n"
|
|
|
|
+ "Script Options:\n"
|
|
|
|
+ " --help, -h print this message and FOP help\n"
|
|
|
|
+ " --debug print debugging information for this launch script\n"
|
|
|
|
+ " --execdebug print FOP exec line generated by this launch script\n"
|
|
|
|
+ " --keepopen keep FOP's command window open\n"
|
|
|
|
+ " --noconfig suppress reading of configuration file and registry";
|
|
|
|
|
|
|
|
function read_environment() {
|
|
|
|
for (i in config_wanted) {
|
|
|
|
if (!config.Exists(config_wanted[i])) {
|
|
|
|
var env_var_string = "%" + config_wanted[i] + "%";
|
|
|
|
var env_var = shell.ExpandEnvironmentStrings(env_var_string);
|
|
|
|
if (env_var != "" && env_var != env_var_string) {
|
|
|
|
config.Add(config_wanted[i], env_var);
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo(config_wanted[i] + " env: "
|
|
|
|
+ config.Item(config_wanted[i]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function read_desktop(dtname) {
|
|
|
|
if (fs.FolderExists(dtname)) {
|
|
|
|
var fopname = fs.GetFolder(dtname).ParentFolder.Path
|
|
|
|
+ "\\Application Data\\Fop";
|
|
|
|
if (fs.FolderExists(fopname)) {
|
|
|
|
var fop_conf_name = fs.GetFolder(fopname).Path + "\\fop.conf";
|
|
|
|
if (fs.FileExists(fop_conf_name)) {
|
|
|
|
// source fop_conf_file
|
|
|
|
var conf_file = fs.openTextFile(fs.GetFile(fop_conf_name));
|
|
|
|
var conf_lines = new ActiveXObject("Scripting.Dictionary");
|
|
|
|
while (!conf_file.AtEndOfStream) {
|
|
|
|
var line = conf_file.ReadLine();
|
|
|
|
var m = line.match(/(.+?)=(.+)/);
|
|
|
|
if (m != null) {
|
|
|
|
conf_lines.Add(m[1], m[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (j in config_wanted) {
|
|
|
|
if (!config.Exists(config_wanted[j])
|
|
|
|
&& conf_lines.Exists(config_wanted[j])) {
|
|
|
|
config.Add(config_wanted[j], conf_lines.Item(config_wanted[j]));
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo(config_wanted[j] + " " + dts[i] + ": "
|
|
|
|
+ config.Item(config_wanted[i]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function read_registry(section) {
|
|
|
|
for (j in config_wanted) {
|
|
|
|
if (!config.Exists(config_wanted[j])) {
|
|
|
|
var reg_var;
|
|
|
|
try {
|
|
|
|
reg_var = shell.RegRead(section + "\\Software\\Fop\\"
|
|
|
|
+ config_wanted[j]);
|
|
|
|
config.Add(config_wanted[j], reg_var);
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo(config_wanted[j] + " " + rks[i] + ": "
|
|
|
|
+ config.Item(config_wanted[j]));
|
|
|
|
}
|
|
|
|
} catch(e) {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// construct FOP_HOME from the script folder
|
|
|
|
function get_fop_home() {
|
|
|
|
if (!config.Exists("FOP_HOME")
|
|
|
|
|| !fs.FolderExists(config.Item("FOP_HOME"))) {
|
|
|
|
var fop_home = WScript.ScriptFullName;
|
|
|
|
fop_home = fop_home.substring(0, fop_home.length
|
|
|
|
- WScript.ScriptName.length - 1);
|
|
|
|
if (config.Exists("FOP_HOME")) {
|
|
|
|
config.Remove("FOP_HOME");
|
|
|
|
}
|
|
|
|
config.Add("FOP_HOME", fop_home);
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("FOP_HOME dyn: " + config.Item("FOP_HOME"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_java_cmd() {
|
|
|
|
var java_home = shell.ExpandEnvironmentStrings("%JAVA_HOME%");
|
|
|
|
javacmd = "java";
|
|
|
|
if (java_home != "" && typeof(java_home) != "undefined"
|
|
|
|
&& fs.FolderExists(java_home)) {
|
|
|
|
var javacmd_candidate = java_home + "\\bin\\java.exe";
|
|
|
|
if (fs.FileExists(javacmd_candidate)) {
|
|
|
|
javacmd = javacmd_candidate;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("java command: " + javacmd);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_local_classpath() {
|
|
|
|
if (config.Exists("CLASSPATH")) {
|
|
|
|
local_classpath = config.Item("CLASSPATH");
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("local classpath: " + local_classpath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// add fop.jar, fop-sandbox and fop-hyph.jar, which reside in $FOP_HOME/build
|
|
|
|
var lcp = local_classpath;
|
|
|
|
local_classpath = config.Item("FOP_HOME") + "\\build\\fop.jar;"
|
|
|
|
+ config.Item("FOP_HOME") + "\\build\\fop-sandbox.jar;"
|
|
|
|
+ config.Item("FOP_HOME") + "\\build\\fop-hyph.jar";
|
|
|
|
if (lcp != "") {
|
|
|
|
local_classpath += ";" + lcp;
|
|
|
|
}
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("local classpath: " + local_classpath);
|
|
|
|
}
|
|
|
|
|
|
|
|
// add in the dependency .jar files, which reside in $FOP_HOME/lib
|
|
|
|
var libdir_name = config.Item("FOP_HOME") + "\\lib";
|
|
|
|
var dirlibs;
|
|
|
|
if (fs.FolderExists(libdir_name)) {
|
|
|
|
dirlibs = fs.GetFolder(libdir_name).Files;
|
|
|
|
var e = new Enumerator(dirlibs);
|
|
|
|
for (; !e.atEnd(); e.moveNext()) {
|
|
|
|
if (e.item().Name.match("\.jar$")) {
|
|
|
|
local_classpath = libdir_name + "\\" + e.item().Name + ";" + local_classpath;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("local classpath: " + local_classpath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// add in user-defined hyphenation JARs
|
|
|
|
if (config.Exists("FOP_HYPHENATION_PATH")) {
|
|
|
|
local_classpath += ";" + config.Item("FOP_HYPHENATION_PATH");
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("local classpath: " + local_classpath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Execute fop via shell.Exec
|
|
|
|
function fop_exec() {
|
|
|
|
var fop_exec_command = "\"" + javacmd + "\" "
|
|
|
|
+ (config.Exists("JAVA_OPTS")?config.Item("JAVA_OPTS") + " ":"")
|
|
|
|
+ (config.Exists("LOGCHOICE")?config.Item("LOGCHOICE") + " ":"")
|
|
|
|
+ (config.Exists("LOGLEVEL")?config.Item("LOGLEVEL") + " ":"")
|
|
|
|
"-classpath \"" + local_classpath + "\" "
|
|
|
|
+ (config.Exists("FOP_OPTS")?config.Item("FOP_OPTS"):"")
|
|
|
|
+ "org.apache.fop.cli.Main " + fop_exec_args;
|
|
|
|
if (debug || fop_exec_debug) {
|
|
|
|
WScript.Echo(fop_exec_command);
|
|
|
|
}
|
|
|
|
|
|
|
|
var fop_run = shell.Exec(fop_exec_command);
|
|
|
|
while (true) {
|
|
|
|
while (!fop_run.StdOut.AtEndOfStream) {
|
|
|
|
WScript.Echo(fop_run.StdOut.ReadLine());
|
|
|
|
}
|
|
|
|
while (!fop_run.StdErr.AtEndOfStream) {
|
|
|
|
WScript.Echo(fop_run.StdErr.ReadLine());
|
|
|
|
}
|
|
|
|
if (fop_run.Status == 1) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
WScript.Sleep(100);
|
|
|
|
}
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("exit status: " + fop_run.ExitCode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Execute fop via shell.Run
|
|
|
|
function fop_run() {
|
|
|
|
var fop_exec_command = "cmd /" + (keep_open?"K":"C") + " \""
|
|
|
|
+ "\"" + javacmd + "\" "
|
|
|
|
+ (config.Exists("JAVA_OPTS")?config.Item("JAVA_OPTS") + " ":"")
|
|
|
|
+ (config.Exists("LOGCHOICE")?config.Item("LOGCHOICE") + " ":"")
|
|
|
|
+ (config.Exists("LOGLEVEL")?config.Item("LOGLEVEL") + " ":"")
|
|
|
|
+ "-classpath \"" + local_classpath + "\" "
|
|
|
|
+ (config.Exists("FOP_OPTS")?config.Item("FOP_OPTS") + " ":"")
|
|
|
|
+ "org.apache.fop.cli.Main " + fop_exec_args + "\"";
|
|
|
|
if (debug || fop_exec_debug) {
|
|
|
|
WScript.Echo(fop_exec_command);
|
|
|
|
}
|
|
|
|
var exit_code = shell.Run(fop_exec_command, 1, 1);
|
|
|
|
if (debug) {
|
|
|
|
WScript.Echo("exit status: " + exit_code);
|
|
|
|
} else {
|
|
|
|
if (exit_code != 0) {
|
|
|
|
WScript.Echo("A FOP error occurred (FOP exit status: " + exit_code + ")\n"
|
|
|
|
+ "Use option --keepopen to see FOP's output\n"
|
|
|
|
+ "(that is two dashes)");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_log_choice() {
|
|
|
|
// The default commons logger for JDK1.4 is JDK1.4Logger.
|
|
|
|
// To use a different logger, uncomment the one desired below
|
|
|
|
if (!config.Exists("LOGCHOICE")) {
|
|
|
|
// config.Add("LOGCHOICE","\"-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog\"");
|
|
|
|
// config.Add("LOGCHOICE","\"-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog\"");
|
|
|
|
// config.Add("LOGCHOICE","\"-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger\"");
|
|
|
|
if (debug && config.Exists("LOGCHOICE")) {
|
|
|
|
WScript.Echo("LOGCHOICE script: " + config.Item("LOGCHOICE"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_log_level() {
|
|
|
|
// Logging levels
|
|
|
|
// Below option is only if you are using SimpleLog instead of the default JDK1.4 Logger.
|
|
|
|
// To set logging levels for JDK 1.4 Logger, edit the %JAVA_HOME%/JRE/LIB/logging.properties
|
|
|
|
// file instead.
|
|
|
|
// Possible SimpleLog values: "trace", "debug", "info" (default), "warn", "error", or "fatal".
|
|
|
|
if (!config.Exists("LOGLEVEL")) {
|
|
|
|
// config.Add("LOGLEVEL","\"-Dorg.apache.commons.logging.simplelog.defaultlog=INFO\"");
|
|
|
|
if (debug && config.Exists("LOGLEVEL")) {
|
|
|
|
WScript.Echo("LOGLEVEL script: " + config.Item("LOGLEVEL"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var shell = WScript.CreateObject("WScript.Shell");
|
|
|
|
var fs = WScript.CreateObject("Scripting.FileSystemObject");
|
|
|
|
|
|
|
|
// configuration
|
|
|
|
var config = new ActiveXObject("Scripting.Dictionary");
|
|
|
|
|
|
|
|
read_args();
|
|
|
|
read_environment();
|
|
|
|
if (!no_config) {
|
|
|
|
// read user and system-wide fop configurations
|
|
|
|
var spec = shell.SpecialFolders;
|
|
|
|
var dts = new Array("Desktop", "AllUsersDesktop");
|
|
|
|
for (i in dts) {
|
|
|
|
read_desktop(spec(dts[i]));
|
|
|
|
}
|
|
|
|
// read user and system-wide registry
|
|
|
|
var rks = new Array("HKCU", "HKLM");
|
|
|
|
for (i in rks) {
|
|
|
|
read_registry(rks[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
get_fop_home();
|
|
|
|
get_log_choice();
|
|
|
|
get_log_level();
|
|
|
|
var javacmd = "";
|
|
|
|
get_java_cmd();
|
|
|
|
var local_classpath = "";
|
|
|
|
get_local_classpath();
|
|
|
|
|
|
|
|
// Show script help if requested
|
|
|
|
if (show_help) {
|
|
|
|
// fop_exec_args = "";
|
|
|
|
keep_open = true;
|
|
|
|
WScript.Echo(help_text);
|
|
|
|
}
|
|
|
|
|
|
|
|
// fop_exec();
|
|
|
|
fop_run();
|