001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: Compile.java 468647 2006-10-28 06:59:33Z minchau $ 020 */ 021 022 package org.apache.xalan.xsltc.cmdline; 023 024 import java.io.File; 025 import java.net.URL; 026 import java.util.Vector; 027 028 import org.apache.xalan.xsltc.cmdline.getopt.GetOpt; 029 import org.apache.xalan.xsltc.cmdline.getopt.GetOptsException; 030 import org.apache.xalan.xsltc.compiler.XSLTC; 031 import org.apache.xalan.xsltc.compiler.util.ErrorMsg; 032 033 /** 034 * @author Jacek Ambroziak 035 * @author Santiago Pericas-Geertsen 036 * @author G. Todd Miller 037 * @author Morten Jorgensen 038 */ 039 public final class Compile { 040 041 // Versioning numbers for the compiler -v option output 042 private static int VERSION_MAJOR = 1; 043 private static int VERSION_MINOR = 4; 044 private static int VERSION_DELTA = 0; 045 046 047 public static void printUsage() { 048 StringBuffer vers = new StringBuffer("XSLTC version " + 049 VERSION_MAJOR + "." + VERSION_MINOR + 050 ((VERSION_DELTA > 0) ? ("."+VERSION_DELTA) : (""))); 051 System.err.println(vers + "\n" + 052 new ErrorMsg(ErrorMsg.COMPILE_USAGE_STR)); 053 } 054 055 /** 056 * This method implements the command line compiler. See the USAGE_STRING 057 * constant for a description. It may make sense to move the command-line 058 * handling to a separate package (ie. make one xsltc.cmdline.Compiler 059 * class that contains this main() method and one xsltc.cmdline.Transform 060 * class that contains the DefaultRun stuff). 061 */ 062 public static void main(String[] args) { 063 try { 064 boolean inputIsURL = false; 065 boolean useStdIn = false; 066 boolean classNameSet = false; 067 final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhsinv"); 068 if (args.length < 1) printUsage(); 069 070 final XSLTC xsltc = new XSLTC(); 071 xsltc.init(); 072 073 int c; 074 while ((c = getopt.getNextOption()) != -1) { 075 switch(c) { 076 case 'i': 077 useStdIn = true; 078 break; 079 case 'o': 080 xsltc.setClassName(getopt.getOptionArg()); 081 classNameSet = true; 082 break; 083 case 'd': 084 xsltc.setDestDirectory(getopt.getOptionArg()); 085 break; 086 case 'p': 087 xsltc.setPackageName(getopt.getOptionArg()); 088 break; 089 case 'j': 090 xsltc.setJarFileName(getopt.getOptionArg()); 091 break; 092 case 'x': 093 xsltc.setDebug(true); 094 break; 095 case 'u': 096 inputIsURL = true; 097 break; 098 case 'n': 099 xsltc.setTemplateInlining(true); // used to be 'false' 100 break; 101 case 'v': 102 // fall through to case h 103 case 'h': 104 default: 105 printUsage(); 106 break; 107 } 108 } 109 110 boolean compileOK; 111 112 if (useStdIn) { 113 if (!classNameSet) { 114 System.err.println(new ErrorMsg(ErrorMsg.COMPILE_STDIN_ERR)); 115 } 116 compileOK = xsltc.compile(System.in, xsltc.getClassName()); 117 } 118 else { 119 // Generate a vector containg URLs for all stylesheets specified 120 final String[] stylesheetNames = getopt.getCmdArgs(); 121 final Vector stylesheetVector = new Vector(); 122 for (int i = 0; i < stylesheetNames.length; i++) { 123 final String name = stylesheetNames[i]; 124 URL url; 125 if (inputIsURL) 126 url = new URL(name); 127 else 128 url = (new File(name)).toURL(); 129 stylesheetVector.addElement(url); 130 } 131 compileOK = xsltc.compile(stylesheetVector); 132 } 133 134 // Compile the stylesheet and output class/jar file(s) 135 if (compileOK) { 136 xsltc.printWarnings(); 137 if (xsltc.getJarFileName() != null) xsltc.outputToJar(); 138 } 139 else { 140 xsltc.printWarnings(); 141 xsltc.printErrors(); 142 } 143 } 144 catch (GetOptsException ex) { 145 System.err.println(ex); 146 printUsage(); // exits with code '-1' 147 } 148 catch (Exception e) { 149 e.printStackTrace(); 150 } 151 } 152 153 }