vhardy 01/10/29 11:13:54
Modified: test-resources/org/apache/batik/apps/rasterizer
unitTesting.xml
test-sources/org/apache/batik/apps/rasterizer
SVGConverterTest.java
sources/org/apache/batik/apps/rasterizer Main.java
Messages.java SVGConverter.java
resources/org/apache/batik/apps/rasterizer/resources
Messages.properties
Added: test-sources/org/apache/batik/apps/rasterizer MainTest.java
Log:
+ Rewrite of the rasterizer app.
+ 54 unit tests for new rasterizer app.
Revision Changes Path
1.2 +2 -2
xml-batik/test-resources/org/apache/batik/apps/rasterizer/unitTesting.xml
Index: unitTesting.xml
===================================================================
RCS file:
/home/cvs/xml-batik/test-resources/org/apache/batik/apps/rasterizer/unitTesting.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- unitTesting.xml 2001/10/25 13:24:09 1.1
+++ unitTesting.xml 2001/10/29 19:13:54 1.2
@@ -8,10 +8,10 @@
<!-- ====================================================================== -->
<!-- @author [EMAIL PROTECTED] -->
-<!-- @version $Id: unitTesting.xml,v 1.1 2001/10/25 13:24:09 vhardy Exp $ -->
+<!-- @version $Id: unitTesting.xml,v 1.2 2001/10/29 19:13:54 vhardy Exp $ -->
<!-- ====================================================================== -->
<testSuite id="apps.rasterizer.unitTesting" name="org.apache.batik.apps.rasterizer
Unit Testing">
<test id="configTest" class="org.apache.batik.apps.rasterizer.SVGConverterTest"
/>
-
+ <test id="mainTest" class="org.apache.batik.apps.rasterizer.MainTest" />
</testSuite>
1.4 +46 -42
xml-batik/test-sources/org/apache/batik/apps/rasterizer/SVGConverterTest.java
Index: SVGConverterTest.java
===================================================================
RCS file:
/home/cvs/xml-batik/test-sources/org/apache/batik/apps/rasterizer/SVGConverterTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SVGConverterTest.java 2001/10/26 11:37:12 1.3
+++ SVGConverterTest.java 2001/10/29 19:13:54 1.4
@@ -24,7 +24,7 @@
* of source and destination sources.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
- * @version $Id: SVGConverterTest.java,v 1.3 2001/10/26 11:37:12 vhardy Exp $
+ * @version $Id: SVGConverterTest.java,v 1.4 2001/10/29 19:13:54 vhardy Exp $
*/
public class SVGConverterTest extends DefaultTestSuite {
public SVGConverterTest(){
@@ -125,36 +125,35 @@
addTest(t);
t.setId("HintsConfigTest.KEY_ALTERNATE_STYLESHEET");
+ t = new HintsConfigTest(new Object[][]{
+ {ImageTranscoder.KEY_XML_PARSER_VALIDATING, new Boolean(true)}}){
+ protected void deltaConfigure(SVGConverter c){
+ c.setValidate(true);
+ }
+ };
+ addTest(t);
+ t.setId("HintsConfigTest.KEY_XML_PARSER_VALIDATING");
+
//
// Check sources
//
t = new SourcesConfigTest(new String[] { "samples/anne", "samples/batikFX",
"samples/tests/spec/styling/smiley" }){
protected void setSources(SVGConverter c){
- c.setSourcesStrings(new String[] {"samples/anne.svg",
"samples/batikFX.svg", "samples/tests/spec/styling/smiley.svg"});
+ c.setSources(new String[] {"samples/anne.svg",
"samples/batikFX.svg", "samples/tests/spec/styling/smiley.svg"});
}
};
addTest(t);
t.setId("SourcesConfigTest.SimpleList");
- t = new SourcesConfigTest(new String[]
- { "samples/tests/spec/coordinates/em",
- "samples/tests/spec/coordinates/percentagesAndUnits" }) {
- protected void setSources(SVGConverter c){
- c.setSrcDir(new File("samples/tests/spec/coordinates"));
- }
- };
- addTest(t);
- t.setId("SourcesConfigTest.SrcDir");
-
//
// Check destination
//
t = new DestConfigTest(new String[] { "samples/anne.png" },
new String[] { "test-reports/anne.png"}){
protected void setDestination(SVGConverter c){
- c.setDstFile(new File("test-reports/anne.png"));
+ c.setDst(new File("test-reports/anne.png"));
}
};
addTest(t);
@@ -163,7 +162,7 @@
t = new DestConfigTest(new String[] { "samples/anne.svg",
"samples/tests/spec/styling/smiley.svg" },
new String[] { "test-resources/anne.png",
"test-resources/smiley.png"}){
protected void setDestination(SVGConverter c){
- c.setDstDir(new File("test-resources"));
+ c.setDst(new File("test-resources"));
}
};
addTest(t);
@@ -173,31 +172,31 @@
// Add configuration error test. These tests check that the expected
// error gets reported for a given mis-configuration
///////////////////////////////////////////////////////////////////////
- t = new ConfigErrorTest(SVGConverter.ERROR_NO_SVG_FILES_IN_SRC_DIR) {
+ t = new ConfigErrorTest(SVGConverter.ERROR_NO_SOURCES_SPECIFIED) {
protected void configure(SVGConverter c){
- c.setSourcesStrings(null);
- c.setSrcDir(new File("test-resources"));
+ c.setSources(null);
}
};
addTest(t);
- t.setId("ConfigErrorTest.ERROR_NO_FILES_IN_SRC_DIR");
+ t.setId("ConfigErrorTest.ERROR_NO_SOURCES_SPECIFIED");
- t = new ConfigErrorTest(SVGConverter.ERROR_NO_SRCDIR_OR_SRCFILE_SPECIFIED){
+ t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_COMPUTE_DESTINATION){
protected void configure(SVGConverter c){
- c.setSourcesStrings(null);
+ // Do not set destination file or destination directory
+ c.setSources(new
String[]{"http://xml.apache.org/batik/dummy.svg"});
}
};
addTest(t);
- t.setId("ConfigErrorTest.ERROR_NO_SRCDIR_OR_SRCFILE_SPECIFIED");
+ t.setId("ConfigErrorTest.ERROR_CANNOT_COMPUTE_DESTINATION");
- t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_COMPUTE_DESTINATION){
+ t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_USE_DST_FILE){
protected void configure(SVGConverter c){
- // Do not set destination file or destination directory
- c.setSourcesStrings(new
String[]{"http://xml.apache.org/batik/dummy.svg"});
+ c.setSources(new String[]{"samples/anne.svg",
"samples/batikFX.svg"});
+ c.setDst(new File("samples/anne.png"));
}
};
addTest(t);
- t.setId("ConfigErrorTest.ERROR_CANNOT_COMPUTE_DESTINATION");
+ t.setId("ConfigErrorTest.ERROR_CANNOT_USE_DST_FILE");
t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_ACCESS_TRANSCODER){
protected void configure(SVGConverter c){
@@ -209,8 +208,8 @@
t = new ConfigErrorTest(SVGConverter.ERROR_SOURCE_SAME_AS_DESTINATION){
protected void configure(SVGConverter c){
- c.setSourcesStrings(new String[]{ "samples/anne.svg" });
- c.setDstFile(new File("samples/anne.svg"));
+ c.setSources(new String[]{ "samples/anne.svg" });
+ c.setDst(new File("samples/anne.svg"));
}
};
addTest(t);
@@ -218,8 +217,8 @@
t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_READ_SOURCE){
protected void configure(SVGConverter c){
- c.setSourcesStrings(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" });
- c.setDstDir(new File("test-reports"));
+ c.setSources(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" });
+ c.setDst(new File("test-reports"));
}
public boolean proceedWithSourceTranscoding(SVGConverterSource
source,
@@ -240,7 +239,7 @@
t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_OPEN_SOURCE){
protected void configure(SVGConverter c){
- c.setSourcesStrings(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" });
+ c.setSources(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" });
}
public boolean proceedWithComputedTask(Transcoder transcoder,
@@ -265,8 +264,8 @@
t = new ConfigErrorTest(SVGConverter.ERROR_OUTPUT_NOT_WRITEABLE){
protected void configure(SVGConverter c){
- c.setSourcesStrings(new String[]{ "samples/anne.svg" });
- c.setDstFile(new
File("test-resources/org/apache/batik/apps/rasterizer/readOnly.png"));
+ c.setSources(new String[]{ "samples/anne.svg" });
+ c.setDst(new
File("test-resources/org/apache/batik/apps/rasterizer/readOnly.png"));
}
};
addTest(t);
@@ -274,7 +273,7 @@
t = new ConfigErrorTest(SVGConverter.ERROR_UNABLE_TO_CREATE_OUTPUT_DIR){
protected void configure(SVGConverter c){
- c.setDstDir(new File("samples/anne.svg"));
+ c.setDst(new File("ZYZ::/cannotCreate"));
}
};
addTest(t);
@@ -282,7 +281,7 @@
t = new ConfigErrorTest(SVGConverter.ERROR_WHILE_RASTERIZING_FILE){
protected void configure(SVGConverter c){
- c.setSourcesStrings(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/invalidSVG.svg"});
+ c.setSources(new String[]{
"test-resources/org/apache/batik/apps/rasterizer/invalidSVG.svg"});
}
};
addTest(t);
@@ -460,6 +459,10 @@
}
+ public String getName(){
+ return getId();
+ }
+
public TestReport runImpl() throws Exception {
SVGConverter c = new SVGConverter(this);
configure(c);
@@ -678,8 +681,8 @@
* Configures the test with the given mime type
*/
public void configure(SVGConverter c){
- c.setSourcesStrings(new String[] { SOURCE_FILE });
- c.setDstFile(new File(DEST_FILE_NAME + dstType.getExtension()));
+ c.setSources(new String[] { SOURCE_FILE });
+ c.setDst(new File(DEST_FILE_NAME + dstType.getExtension()));
c.setDestinationType(dstType);
}
}
@@ -731,8 +734,8 @@
* Configures the test with the given mime type
*/
public void configure(SVGConverter c){
- c.setSourcesStrings(new String[] { SOURCE_FILE });
- c.setDstFile(new File(DEST_FILE_NAME + DST_TYPE.getExtension()));
+ c.setSources(new String[] { SOURCE_FILE });
+ c.setDst(new File(DEST_FILE_NAME + DST_TYPE.getExtension()));
c.setDestinationType(DST_TYPE);
deltaConfigure(c);
}
@@ -834,7 +837,7 @@
*/
public void configure(SVGConverter c){
c.setDestinationType(DST_TYPE);
- c.setSourcesStrings(sourcesStrings);
+ c.setSources(sourcesStrings);
setDestination(c);
}
@@ -877,13 +880,14 @@
SVGConverter c = new SVGConverter(this);
c.setDestinationType(DestinationType.PNG);
- c.setSourcesStrings(new String[]{ "samples/anne.svg" });
+ c.setSources(new String[]{ "samples/anne.svg" });
configure(c);
try {
c.execute();
} catch(SVGConverterException e){
+ e.printStackTrace();
foundErrorCode = e.getErrorCode();
}
@@ -957,8 +961,8 @@
public TestReport runImpl() throws Exception {
SVGConverter c = new SVGConverter();
System.out.println("Converting : " + svgSource);
- c.setSourcesStrings(new String[]{svgSource});
- c.setDstFile(new File(pngDest));
+ c.setSources(new String[]{svgSource});
+ c.setDst(new File(pngDest));
c.setDestinationType(DestinationType.PNG);
1.1
xml-batik/test-sources/org/apache/batik/apps/rasterizer/MainTest.java
Index: MainTest.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.apps.rasterizer;
import org.apache.batik.test.*;
import org.apache.batik.test.util.ImageCompareTest;
import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.image.ImageTranscoder;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import java.awt.*;
import java.awt.geom.*;
import java.io.*;
import java.util.*;
/**
* Validates the operation of the <tt>Main</tt> class.
*
* @author <a href="[EMAIL PROTECTED]">Vincent Hardy</a>
* @version $Id: MainTest.java,v 1.1 2001/10/29 19:13:54 vhardy Exp $
*/
public class MainTest extends DefaultTestSuite {
public MainTest(){
Test t = new MainConfigTest("-d samples") {
public TestReport validate(SVGConverter c){
File dst = c.getDst();
if(dst!= null && dst.equals(new File("samples"))){
return reportSuccess();
} else {
return reportError("-d", "samples", "" + dst);
}
}
};
addTest(t);
t.setId("MainConfigTest.output");
t = new MainConfigTest("samples/anne.svg") {
String ERROR_UNEXPECTED_SOURCES =
"MainConfigTest.error.unexpected.sources";
public TestReport validate(SVGConverter c){
Vector sources = c.getSources();
if(sources.size() == 1){
String src = (String)sources.elementAt(0);
if ("samples/anne.svg".equals(src)){
return reportSuccess();
}
}
return reportError(ERROR_UNEXPECTED_SOURCES);
}
};
addTest(t);
t.setId("MainConfigTest.source");
t = new MainConfigTest("-m image/jpeg") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.JPEG)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.JPEG.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.jpegA");
t = new MainConfigTest("-m image/jpg") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.JPEG)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.JPEG.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.jpegB");
t = new MainConfigTest("-m image/jpe") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.JPEG)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.JPEG.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.jpegC");
t = new MainConfigTest("-m image/png") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.PNG)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.PNG.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.png");
t = new MainConfigTest("-m image/pdf") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.PDF)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.PDF.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.pdf");
t = new MainConfigTest("-m image/tiff") {
public TestReport validate(SVGConverter c){
DestinationType type = c.getDestinationType();
if(type.equals(DestinationType.TIFF)){
return reportSuccess();
} else {
return reportError("-m", DestinationType.TIFF.toString(), ""
+ type);
}
}
};
addTest(t);
t.setId("MainConfigTest.mimeType.tiff");
t = new MainConfigTest("-w 467.69") {
public TestReport validate(SVGConverter c){
float width = c.getWidth();
if(width != 467.69){
return reportSuccess();
} else {
return reportError("-w", "" + 467.69, "" + width);
}
}
};
addTest(t);
t.setId("MainConfigTest.width");
t = new MainConfigTest("-h 345.67") {
public TestReport validate(SVGConverter c){
float height = c.getHeight();
if(height == 345.67f){
return reportSuccess();
} else {
return reportError("-h", "" + 345.67, "" + height);
}
}
};
addTest(t);
t.setId("MainConfigTest.height");
t = new MainConfigTest("-a 5,10,20,30") {
public TestReport validate(SVGConverter c){
Rectangle2D aoi = c.getArea();
Rectangle2D.Float eAoi = new Rectangle2D.Float(5,10,20,30);
if(eAoi.equals(aoi)){
return reportSuccess();
} else {
return reportError("-a", toString(eAoi), toString(aoi));
}
}
public String toString(Rectangle2D r){
if (r == null){
return "null";
} else {
return r.getX() + "," + r.getY() + "," + r.getWidth() + ","
+ r.getHeight();
}
}
};
addTest(t);
t.setId("MainConfigTest.aoi");
t = new MainConfigTest("-bg 128.200.100.50") {
public TestReport validate(SVGConverter c){
Color bg = c.getBackgroundColor();
Color eBg = new Color(200,100,50,128); // Alpha is last
if(eBg.equals(bg)){
return reportSuccess();
} else {
return reportError("-bg", toString(eBg), toString(bg));
}
}
public String toString(Color c){
if (c==null){
return "null";
} else {
return c.getAlpha() + "." + c.getRed() + "." + c.getGreen()
+ "." + c.getBlue();
}
}
};
addTest(t);
t.setId("MainConfigTest.backgroundColor");
t = new MainConfigTest("-cssMedia projection"){
public TestReport validate(SVGConverter c){
String cssMedia = c.getMediaType();
String eCssMedia = "projection";
if(eCssMedia.equals(cssMedia)){
return reportSuccess();
} else {
return reportError("-cssMedia", eCssMedia, cssMedia);
}
}
};
addTest(t);
t.setId("MainConfigTest.cssMedia");
t = new MainConfigTest("-cssAlternate myAlternateStylesheet"){
public TestReport validate(SVGConverter c){
String alternate = c.getAlternateStylesheet();
String eAlternate = "myAlternateStylesheet";
if(eAlternate.equals(alternate)){
return reportSuccess();
} else {
return reportError("-cssAlternate", eAlternate, alternate);
}
}
};
addTest(t);
t.setId("MainConfigTest.cssAlternate");
t = new MainConfigTest("-validate"){
public TestReport validate(SVGConverter c){
if(c.getValidate()){
return reportSuccess();
} else {
return reportError("-validate", "true", "false");
}
}
};
addTest(t);
t.setId("MainConfigTest.validate");
t = new MainConfigErrorTest("-d", "hello.svg -d");
addTest(t);
t.setId("MainConfigErrorTest.output");
t = new MainConfigErrorTest("-m", "hello.svg -m");
addTest(t);
t.setId("MainConfigErrorTest.mimeType");
t = new MainConfigErrorTest("-w", "hello.svg -w");
addTest(t);
t.setId("MainConfigErrorTest.width");
t = new MainConfigErrorTest("-h", "hello.svg -h");
addTest(t);
t.setId("MainConfigErrorTest.height");
t = new MainConfigErrorTest("-a", "hello.svg -a");
addTest(t);
t.setId("MainConfigErrorTest.area");
t = new MainConfigErrorTest("-bg", "hello.svg -bg");
addTest(t);
t.setId("MainConfigErrorTest.backgroundColor");
t = new MainConfigErrorTest("-cssMedia", "hello.svg -cssMedia");
addTest(t);
t.setId("MainConfigErrorTest.mediaType");
t = new MainConfigErrorTest("-cssAlternate", "hello.svg -cssAlternate");
addTest(t);
t.setId("MainConfigErrorTest.cssAlternate");
t = new MainIllegalArgTest("-m", "-m images/jpeq");
addTest(t);
t.setId("MainIllegalArgTest.mediaType");
t = new MainIllegalArgTest("-w", "-w abd");
addTest(t);
t.setId("MainIllegalArgTest.width");
t = new MainIllegalArgTest("-h", "-h abaa");
addTest(t);
t.setId("MainIllegalArgTest.height");
t = new MainIllegalArgTest("a", "-a aaaaaa");
addTest(t);
t.setId("MainIllegalArgTest.aoi");
t = new MainIllegalArgTest("bg", "-bg a.b.c.d");
addTest(t);
t.setId("MainIllegalArgTest.bg");
}
}
class MainIllegalArgTest extends AbstractTest {
String badOption;
String args;
TestReport report;
public MainIllegalArgTest(String badOption, String args){
this.badOption = badOption;
this.args = args;
}
public String getName(){
return getId();
}
public static final String ERROR_NO_ERROR_REPORTED
= "MainIllegalArgTest.error.no.error.reported";
public static final String ERROR_UNEXPECTED_ERROR_CODE
= "MainIllegalArgTest.error.unexpected.error.code";
public static final String ENTRY_KEY_EXPECTED_ERROR_CODE
= "MainIllegalArgTest.entry.key.expected.error.code";
public static final String ENTRY_KEY_GOT_ERROR_CODE
= "MainIllegalArgTest.entry.key.got.error.code";
public TestReport runImpl() throws Exception {
String[] argsArray = makeArgsArray(args);
Main main = new Main(argsArray) {
public void error(String errorCode,
Object[] errorArgs){
if (Main.ERROR_ILLEGAL_ARGUMENT.equals(errorCode)){
report = reportSuccess();
} else {
report = reportError(ERROR_UNEXPECTED_ERROR_CODE);
report.addDescriptionEntry(ENTRY_KEY_EXPECTED_ERROR_CODE,
Main.ERROR_ILLEGAL_ARGUMENT);
report.addDescriptionEntry(ENTRY_KEY_GOT_ERROR_CODE,
errorCode);
}
}
};
main.execute();
if (report == null){
report = reportError(ERROR_NO_ERROR_REPORTED);
}
return report;
}
String[] makeArgsArray(String args){
StringTokenizer st = new StringTokenizer(args, " ");
String[] argsArray = new String[st.countTokens()];
for (int i=0; i<argsArray.length; i++){
argsArray[i] = st.nextToken();
}
return argsArray;
}
}
class MainConfigErrorTest extends AbstractTest {
String badOption;
String args;
TestReport report = null;
public static final String ERROR_UNEXPECTED_ERROR_ARGS_0
= "MainConfigErrorTest.error.unexpected.error.args.0";
public static final String ERROR_UNEXPECTED_ERROR_CODE
= "MainConfigErrorTest.error.unexpected.error.code";
public static final String ERROR_NO_ERROR_REPORTED
= "MainConfigErrorTest.error.no.error.reported";
public static final String ENTRY_KEY_EXPECTED_ERROR_ARGS_0
= "MainConfigErrorTest.entry.key.expected.error.args.0";
public static final String ENTRY_KEY_GOT_ERROR_ARGS_0
= "MainConfigErrorTest.entry.key.got.error.args.0";
public static final String ENTRY_KEY_EXPECTED_ERROR_CODE
= "MainConfigErrorTest.entry.key.expected.error.code";
public static final String ENTRY_KEY_GOT_ERROR_CODE
= "MainConfigErrorTest.entry.key.got.error.code";
public MainConfigErrorTest(String badOption, String args){
this.badOption = badOption;
this.args = args;
}
public String getName(){
return getId();
}
public TestReport runImpl() throws Exception {
String[] argsArray = makeArgsArray(args);
Main main = new Main(argsArray) {
public void error(String errorCode,
Object[] errorArgs){
if (Main.ERROR_NOT_ENOUGH_OPTION_VALUES.equals(errorCode)){
if(errorArgs != null && errorArgs.length > 0 &&
badOption.equals(errorArgs[0])){
report = reportSuccess();
} else {
report = reportError(ERROR_UNEXPECTED_ERROR_ARGS_0);
report.addDescriptionEntry(ENTRY_KEY_EXPECTED_ERROR_ARGS_0,
badOption);
report.addDescriptionEntry(ENTRY_KEY_GOT_ERROR_ARGS_0,
errorArgs!= null &&
errorArgs.length>0 ? errorArgs[0] : "none");
}
} else {
report = reportError(ERROR_UNEXPECTED_ERROR_CODE);
report.addDescriptionEntry(ENTRY_KEY_EXPECTED_ERROR_CODE,
Main.ERROR_NOT_ENOUGH_OPTION_VALUES);
report.addDescriptionEntry(ENTRY_KEY_GOT_ERROR_CODE,
errorCode);
}
}
};
main.execute();
if (report == null){
report = reportError(ERROR_NO_ERROR_REPORTED);
}
return report;
}
String[] makeArgsArray(String args){
StringTokenizer st = new StringTokenizer(args, " ");
String[] argsArray = new String[st.countTokens()];
for (int i=0; i<argsArray.length; i++){
argsArray[i] = st.nextToken();
}
return argsArray;
}
}
abstract class MainConfigTest extends AbstractTest {
String args;
TestReport report;
static final String ERROR_UNEXPECTED_OPTION_VALUE
= "MainConfigTest.error.unexpected.option.value";
static final String ENTRY_KEY_OPTION
= "MainConfigTest.entry.key.option";
static final String ENTRY_KEY_EXPECTED_VALUE
= "MainConfigTest.entry.key.expected.value";
static final String ENTRY_KEY_ACTUAL_VALUE
= "MainConfigTest.entry.key.actual.value";
public TestReport reportError(String option,
String expectedValue,
String actualValue){
TestReport report = reportError(ERROR_UNEXPECTED_OPTION_VALUE);
report.addDescriptionEntry(ENTRY_KEY_OPTION, option);
report.addDescriptionEntry(ENTRY_KEY_EXPECTED_VALUE, expectedValue);
report.addDescriptionEntry(ENTRY_KEY_ACTUAL_VALUE, actualValue);
return report;
}
public MainConfigTest(String args){
this.args = args;
}
public String getName(){
return getId();
}
public TestReport runImpl() throws Exception {
String[] argsArray = makeArgsArray(args);
Main main = new Main(argsArray) {
public void validateConverterConfig(SVGConverter c){
report = validate(c);
}
};
main.execute();
return report;
}
public abstract TestReport validate(SVGConverter c);
String[] makeArgsArray(String args){
StringTokenizer st = new StringTokenizer(args, " ");
String[] argsArray = new String[st.countTokens()];
for (int i=0; i<argsArray.length; i++){
argsArray[i] = st.nextToken();
}
return argsArray;
}
}
1.14 +628 -225 xml-batik/sources/org/apache/batik/apps/rasterizer/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/rasterizer/Main.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Main.java 2001/10/29 17:38:27 1.13
+++ Main.java 2001/10/29 19:13:54 1.14
@@ -9,12 +9,19 @@
package org.apache.batik.apps.rasterizer;
import java.awt.Color;
+import java.awt.geom.Rectangle2D;
+
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
+
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Vector;
+
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -31,276 +38,672 @@
import org.xml.sax.InputSource;
/**
- * A simple class that can generate images from svg documents.
+ * Handles command line parameters to configure the <tt>SVGConverter</tt>
+ * and rasterizer images. <br />
*
- * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a>
- * @version $Id: Main.java,v 1.13 2001/10/29 17:38:27 tkormann Exp $
+ * Each command line option is handled by an <tt>OptionHandler</tt> which
+ * is responsible for converting the option into a configuration of the
+ * <tt>SVGConverter</tt> which is used to perform the conversion.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
+ * @version $Id: Main.java,v 1.14 2001/10/29 19:13:54 vhardy Exp $
*/
-public class Main {
+public class Main implements SVGConverterController {
+ /**
+ * Interface for handling one command line option
+ */
+ public static interface OptionHandler {
+ /**
+ * The <tt>OptionHandler</tt> should configure the <tt>SVGConverter</tt>
+ * according to the value of the option.
+ *
+ * Should throw an IllegalArgumentException if optionValue
+ * is not an acceptable option.
+ */
+ void handleOption(String[] optionValues, SVGConverter c);
+
+ /**
+ * Returns the number of values which the option handler requires.
+ * This defines the length of the optionValues array passed to
+ * the handler in the handleOption method
+ */
+ int getOptionValuesLength();
+
+ /**
+ * Returns the description for this option
+ */
+ String getOptionDescription();
+ }
- public static void writeImage(Transcoder transcoder,
- String uri, String output) {
- try {
- System.out.println("Converting "+uri+" to "+output);
- OutputStream ostream =
- new BufferedOutputStream(new FileOutputStream(output));
- transcoder.transcode(new TranscoderInput(uri),
- new TranscoderOutput(ostream));
- ostream.flush();
- ostream.close();
- } catch(Exception ex) {
- ex.printStackTrace();
- System.out.println("Error while writing "+uri+" to "+output);
+ /**
+ * This abstract implementation of the <tt>OptionHandler</tt> interface
+ * throws an exception if the number of arguments passed to the
+ * <tt>handleOption</tt> method does not match the number of expected
+ * optionValues. If the size matches, the <tt>safeHandleOption</tt>
+ * method is invoked.
+ * Subclasses can implement the <tt>safeHandleOption</tt> method
+ * assuming that the input array size is correct.
+ */
+ public static abstract class AbstractOptionHandler implements OptionHandler {
+
+ public void handleOption(String[] optionValues, SVGConverter c){
+ int nOptions = optionValues != null? optionValues.length: 0;
+ if (nOptions != getOptionValuesLength()){
+ throw new IllegalArgumentException();
+ }
+
+ safeHandleOption(optionValues, c);
}
+
+ public abstract void safeHandleOption(String[] optionValues, SVGConverter
c);
}
+
+ /**
+ * Base class for options with no option value (i.e., the presence
+ * of the option means something in itself. Subclasses should implement
+ * the <tt>handleOption</tt> method which takes only an <tt>SVGConverter</tt>
+ * as a parameter.
+ */
+ public static abstract class NoValueOptionHandler extends AbstractOptionHandler
{
+ public void safeHandleOption(String[] optionValues, SVGConverter c){
+ handleOption(c);
+ }
+
+ public int getOptionValuesLength(){
+ return 0;
+ }
- public static void error(String msg) {
- System.err.println(msg);
- }
-
- public static void usage(PrintStream out) {
- out.println("usage: rasterizer [options] [@files]");
- out.println("-d <directory> Destination directory for output files");
- out.println("-m <mimetype> Mime type for output files");
- out.println("-w <width> Width of the output image");
- out.println("-h <height> Height of the output image");
- out.println("-bg <color> Background color (a.r.g.b decimal notation)
for the output image. White is the default");
+ public abstract void handleOption(SVGConverter c);
}
- public static void main(String [] args) {
- String mimeType = "image/png";
- String directory = null;
- List svgFiles = new LinkedList();
- int i=0;
- float width = Float.NaN;
- float height = Float.NaN;
- Color background = Color.white;
-
- while (i < args.length) {
- if (args[i].equals("-d")) {
- if (i+1 < args.length) {
- i++;
- directory = args[i++];
- continue;
- } else {
- error("option -d requires an argument");
- usage(System.err);
- System.exit(1);
- }
- } else if (args[i].equals("-m")) {
- if (i+1 < args.length) {
- i++;
- mimeType = args[i++];
- continue;
- } else {
- error("option -m requires an argument");
- usage(System.err);
- System.exit(1);
- }
- } else if (args[i].equals("-w")) {
- if (i+1 < args.length) {
- i++;
- try{
- width = Float.parseFloat(args[i++]);
+ /**
+ * Base class for options with a single option value. Subclasses should
+ * provide an implementation for the <tt>handleOption</tt> method which
+ * takes a <tt>String</tt> and an <tt>SVGConverter</tt> as parameters.
+ */
+ public static abstract class SingleValueOptionHandler extends
AbstractOptionHandler {
+ public void safeHandleOption(String[] optionValues, SVGConverter c){
+ handleOption(optionValues[0], c);
+ }
+
+ public int getOptionValuesLength(){
+ return 1;
+ }
+
+ public abstract void handleOption(String optionValue, SVGConverter c);
+ }
+
+ /**
+ * Base class for options which expect the single optionValue to
+ * be a float. Subclasses should implement the <tt>handleOption</tt>
+ * method which takes a float and an <tt>SVGConverter</tt> as
+ * parameters.
+ */
+ public static abstract class FloatOptionHandler extends
SingleValueOptionHandler {
+ public void handleOption(String optionValue, SVGConverter c){
+ try{
+ handleOption(Float.parseFloat(optionValue), c);
+ } catch(NumberFormatException e){
+ throw new IllegalArgumentException();
+ }
+ }
+
+ public abstract void handleOption(float optionValue, SVGConverter c);
+ }
+
+ /**
+ * Base class for options which expect a <tt>Rectangle</tt> optionValue.
+ * Subclasses should implement the <tt>handleOption</tt> method which
+ * takes a <tt>Rectangle</tt> and an <tt>SVGConverter</tt> as parameters.
+ */
+ public static abstract class RectangleOptionHandler extends
SingleValueOptionHandler {
+ public void handleOption(String optionValue, SVGConverter c){
+ Rectangle2D r = parseRect(optionValue);
+ if (r==null){
+ throw new IllegalArgumentException();
+ }
+ handleOption(r, c);
+ }
+
+ public abstract void handleOption(Rectangle2D r, SVGConverter c);
+
+ public Rectangle2D.Float parseRect(String rectValue){
+ Rectangle2D.Float rect = null;
+ if(rectValue != null){
+ if (!rectValue.toLowerCase().endsWith("f")){
+ rectValue += "f";
+ }
+
+ StringTokenizer st = new StringTokenizer(rectValue, ",");
+ if(st.countTokens() == 4){
+ String xStr = st.nextToken();
+ String yStr = st.nextToken();
+ String wStr = st.nextToken();
+ String hStr = st.nextToken();
+ float x=Float.NaN, y=Float.NaN, w=Float.NaN, h=Float.NaN;
+ try {
+ x = Float.parseFloat(xStr);
+ y = Float.parseFloat(yStr);
+ w = Float.parseFloat(wStr);
+ h = Float.parseFloat(hStr);
}catch(NumberFormatException e){
- usage(System.err);
- System.exit(1);
+ // If an error occured, the x, y, w, h
+ // values will not be valid
}
- continue;
- } else {
- error("option -w requires an argument");
- usage(System.err);
- System.exit(1);
- }
- } else if (args[i].equals("-bg")) {
- if (i+1 < args.length) {
- i++;
- String argbVal = args[i++];
- Color c = parseARGB(argbVal);
- if(c == null){
- usage(System.err);
- System.exit(1);
+
+ if( !Float.isNaN(x)
+ &&
+ !Float.isNaN(y)
+ &&
+ (!Float.isNaN(w) && w > 0)
+ &&
+ (!Float.isNaN(h) && h > 0) ){
+ rect = new Rectangle2D.Float(x, y, w, h);
}
- background = c;
- continue;
- } else {
- error("option -bg requires an argument");
- usage(System.err);
- System.exit(1);
}
- } else if (args[i].equals("-h")) {
- if (i+1 < args.length) {
- i++;
- try{
- height = Float.parseFloat(args[i++]);
- }catch(NumberFormatException e){
- usage(System.err);
- System.exit(1);
- }
- continue;
- } else {
- error("option -h requires an argument");
- usage(System.err);
- System.exit(1);
- }
- } else if (args[i].equals("-help")) {
- usage(System.out);
- System.exit(0);
- } else {
- svgFiles.add(args[i++]);
- continue;
}
+ return rect;
}
- /*TranscoderFactory factory =
- ConcreteTranscoderFactory.getTranscoderFactoryImplementation();
- */
- Transcoder t = null;
- if (mimeType.equals("image/jpg") ||
- mimeType.equals("image/jpeg") ||
- mimeType.equals("image/jpe")) {
- t = new JPEGTranscoder();
- } else if (mimeType.equals("image/png")) {
- t = new PNGTranscoder();
- } else if (mimeType.equals("application/pdf")) {
- try {
- Class cla = Class.forName("org.apache.fop.svg.PDFTranscoder");
- Object obj = cla.newInstance();
- t = (Transcoder)obj;
- } catch(Exception e) {
- t = null;
- error("PDF transcoder could not be loaded");
+ }
+
+ /**
+ * Base class for options which expect a <tt>Color</tt> optionValue.
+ * Subclasses should implement the <tt>handleOption</tt> method which
+ * takes a <tt>Color</tt> and an <tt>SVGConverter</tt> as parameters.
+ */
+ public static abstract class ColorOptionHandler extends
SingleValueOptionHandler {
+ public void handleOption(String optionValue, SVGConverter c){
+ Color color = parseARGB(optionValue);
+ if (color==null){
+ throw new IllegalArgumentException();
}
- } else if (mimeType.equals("image/tiff")) {
- t = new TIFFTranscoder();
- }
- if (t == null) {
- error("No transcoder found for mime type : "+mimeType);
- System.exit(1);
+ handleOption(color, c);
}
- if(!Float.isNaN(width)){
- t.addTranscodingHint(ImageTranscoder.KEY_WIDTH,
- new Float(width));
+ public abstract void handleOption(Color color, SVGConverter c);
+
+ /**
+ * Parse the input value, which should be in the following
+ * format: a.r.g.b where a, r, g and b are integer values,
+ * in decimal notation, between 0 and 255.
+ * @return the parsed color if successful. null otherwise.
+ */
+ public Color parseARGB(String argbVal){
+ Color c = null;
+ if(argbVal != null){
+ StringTokenizer st = new StringTokenizer(argbVal, ".");
+ if(st.countTokens() == 4){
+ String aStr = st.nextToken();
+ String rStr = st.nextToken();
+ String gStr = st.nextToken();
+ String bStr = st.nextToken();
+ int a = -1, r = -1, g = -1, b = -1;
+ try {
+ a = Integer.parseInt(aStr);
+ r = Integer.parseInt(rStr);
+ g = Integer.parseInt(gStr);
+ b = Integer.parseInt(bStr);
+ }catch(NumberFormatException e){
+ // If an error occured, the a, r, g, b
+ // values will not be in the 0-255 range
+ // and the next if test will fail
+ }
+
+ if( a>=0 && a<=255
+ &&
+ r>=0 && r<=255
+ &&
+ g>=0 && g<=255
+ &&
+ b>=0 && b<=255 ){
+ c = new Color(r,g,b,a);
+ }
+ }
+ }
+ return c;
}
+ }
+
+
+
+ /**
+ * Describes the command line options for the rasterizer
+ */
+ public static String USAGE =
+ Messages.formatMessage("Main.usage", null);
+
+ //
+ // The command line options are found in the properties
+ // file.
+ //
+
+ /**
+ * Option to specify the output directory or file
+ */
+ public static String CL_OPTION_OUTPUT
+ = Messages.get("Main.cl.option.output", "-d");
+
+ public static String CL_OPTION_OUTPUT_DESCRIPTION
+ = Messages.get("Main.cl.option.output.description", "No description");
+
+ /**
+ * Option to specify the output image's mime type
+ */
+ public static String CL_OPTION_MIME_TYPE
+ = Messages.get("Main.cl.option.mime.type", "-m");
+
+ public static String CL_OPTION_MIME_TYPE_DESCRIPTION
+ = Messages.get("Main.cl.option.mime.type.description", "No description");
+
+ /**
+ * Option to specify the output image's width
+ */
+ public static String CL_OPTION_WIDTH
+ = Messages.get("Main.cl.option.width", "-w");
- if(!Float.isNaN(height)){
- t.addTranscodingHint(ImageTranscoder.KEY_HEIGHT,
- new Float(height));
+ public static String CL_OPTION_WIDTH_DESCRIPTION
+ = Messages.get("Main.cl.option.width.description", "No description");
+
+ /**
+ * Option to specify the output image's height
+ */
+ public static String CL_OPTION_HEIGHT
+ = Messages.get("Main.cl.option.height", "-h");
+
+ public static String CL_OPTION_HEIGHT_DESCRIPTION
+ = Messages.get("Main.cl.option.height.description", "No description");
+
+ /**
+ * Option to specify the area of interest in the output
+ * image.
+ */
+ public static String CL_OPTION_AOI
+ = Messages.get("Main.cl.option.aoi", "-a");
+
+ public static String CL_OPTION_AOI_DESCRIPTION
+ = Messages.get("Main.cl.option.aoi.description", "No description");
+
+ /**
+ * Option to specify the output image's background color
+ */
+ public static String CL_OPTION_BACKGROUND_COLOR
+ = Messages.get("Main.cl.option.background.color", "-bg");
+
+ public static String CL_OPTION_BACKGROUND_COLOR_DESCRIPTION
+ = Messages.get("Main.cl.option.background.color.description", "No
description");
+
+ /**
+ * Option to specify the CSS media type when converting
+ * the SVG image
+ */
+ public static String CL_OPTION_MEDIA_TYPE
+ = Messages.get("Main.cl.option.media.type", "-cssMedia");
+
+ public static String CL_OPTION_MEDIA_TYPE_DESCRIPTION
+ = Messages.get("Main.cl.option.media.type.description", "No description");
+
+ /**
+ * Option to specify the CSS alternate stylesheet when
+ * converting the SVG images
+ */
+ public static String CL_OPTION_ALTERNATE_STYLESHEET
+ = Messages.get("Main.cl.option.alternate.stylesheet", "-cssAlternate");
+
+ public static String CL_OPTION_ALTERNATE_STYLESHEET_DESCRIPTION
+ = Messages.get("Main.cl.option.alternate.stylesheet.description", "No
description");
+
+ /**
+ * Option to specify that the converted SVG files should
+ * be validated during the conversion process.
+ */
+ public static String CL_OPTION_VALIDATE
+ = Messages.get("Main.cl.option.validate", "-validate");
+
+ public static String CL_OPTION_VALIDATE_DESCRIPTION
+ = Messages.get("Main.cl.option.validate.description", "No description");
+
+ /**
+ * Static map containing all the option handlers able to analyze the
+ * various options.
+ */
+ protected static Map optionMap = new Hashtable();
+
+ /**
+ * Static map containing all the mime types understood by the
+ * rasterizer
+ */
+ protected static Map mimeTypeMap = new Hashtable();
+
+ /**
+ * Static initializer: adds all the option handlers to the
+ * map of option handlers.
+ */
+ static {
+ mimeTypeMap.put("image/jpg", DestinationType.JPEG);
+ mimeTypeMap.put("image/jpeg", DestinationType.JPEG);
+ mimeTypeMap.put("image/jpe", DestinationType.JPEG);
+ mimeTypeMap.put("image/png", DestinationType.PNG);
+ mimeTypeMap.put("image/pdf", DestinationType.PDF);
+ mimeTypeMap.put("image/tiff", DestinationType.TIFF);
+
+ optionMap.put(CL_OPTION_OUTPUT,
+ new SingleValueOptionHandler(){
+ public void handleOption(String optionValue,
+ SVGConverter c){
+ c.setDst(new File(optionValue));
+ }
+ public String getOptionDescription(){
+ return CL_OPTION_OUTPUT_DESCRIPTION;
+ }
+ });
+
+ optionMap.put(CL_OPTION_MIME_TYPE,
+ new SingleValueOptionHandler(){
+ public void handleOption(String optionValue,
+ SVGConverter c){
+ DestinationType dstType =
+ (DestinationType)mimeTypeMap.get(optionValue);
+
+ if (dstType == null){
+ throw new IllegalArgumentException();
+ }
+
+ c.setDestinationType(dstType);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_MIME_TYPE_DESCRIPTION;
+ }
+ });
+
+ optionMap.put(CL_OPTION_WIDTH,
+ new FloatOptionHandler(){
+ public void handleOption(float optionValue,
+ SVGConverter c){
+ if (optionValue <= 0){
+ throw new IllegalArgumentException();
+ }
+
+ c.setWidth(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_WIDTH_DESCRIPTION;
+ }
+ });
+
+ optionMap.put(CL_OPTION_HEIGHT,
+ new FloatOptionHandler(){
+ public void handleOption(float optionValue,
+ SVGConverter c){
+ if (optionValue <= 0){
+ throw new IllegalArgumentException();
+ }
+
+ c.setHeight(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_HEIGHT_DESCRIPTION;
+ }
+ });
+
+
+ optionMap.put(CL_OPTION_AOI,
+ new RectangleOptionHandler(){
+ public void handleOption(Rectangle2D optionValue,
+ SVGConverter c){
+ c.setArea(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_AOI_DESCRIPTION;
+ }
+ });
+
+ optionMap.put(CL_OPTION_BACKGROUND_COLOR,
+ new ColorOptionHandler(){
+ public void handleOption(Color optionValue,
+ SVGConverter c){
+ c.setBackgroundColor(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_BACKGROUND_COLOR_DESCRIPTION;
+ }
+ });
+
+ optionMap.put(CL_OPTION_MEDIA_TYPE,
+ new SingleValueOptionHandler(){
+ public void handleOption(String optionValue,
+ SVGConverter c){
+ c.setMediaType(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_MEDIA_TYPE;
+ }
+ });
+
+ optionMap.put(CL_OPTION_ALTERNATE_STYLESHEET,
+ new SingleValueOptionHandler(){
+ public void handleOption(String optionValue,
+ SVGConverter c){
+ c.setAlternateStylesheet(optionValue);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_ALTERNATE_STYLESHEET;
+ }
+ });
+
+ optionMap.put(CL_OPTION_VALIDATE,
+ new NoValueOptionHandler(){
+ public void handleOption(SVGConverter c){
+ c.setValidate(true);
+ }
+
+ public String getOptionDescription(){
+ return CL_OPTION_VALIDATE_DESCRIPTION;
+ }
+ });
+
+ }
+
+ /**
+ * Vector of arguments describing the conversion task to be
+ * performed.
+ */
+ protected Vector args;
+
+ public Main(String[] args){
+ this.args = new Vector();
+ for (int i=0; i<args.length; i++){
+ this.args.addElement(args[i]);
}
+ }
- t.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR,
- background);
+ protected void error(String errorCode,
+ Object[] errorArgs){
+ System.err.println(Messages.formatMessage(errorCode,
+ errorArgs));
+ }
- for (Iterator iter = svgFiles.iterator(); iter.hasNext();) {
- String s = (String) iter.next();
- URL url = getSVGURL(s);
- if(url != null){
- String uri = url.getFile();
- int j = uri.lastIndexOf('/');
- if(j > 0){
- uri = uri.substring(j);
- }
+ //
+ // Error codes generated by the rasterizer
+ //
- if (uri.endsWith(".svg")) {
- uri = uri.substring(0, uri.lastIndexOf(".svg"));
- int k = mimeType.lastIndexOf('/');
- if (k > 0) {
- String ext = mimeType.substring(k+1);
- if (ext.length() > 0) {
- uri += "."+ext;
- }
- } else {
- uri += "."+mimeType;
- }
- }
- if (directory == null) {
- directory = getDirectory(s);
- }
+ /**
+ * Error when there are missing option values:
+ * {0} Option
+ * {1} Option description
+ */
+ public static final String ERROR_NOT_ENOUGH_OPTION_VALUES
+ = "Main.error.not.enough.option.values";
- if (directory != null) {
- File output = new File(directory, uri);
-
- writeImage((Transcoder)t,
- url.toString(),
- output.getAbsolutePath());
+ /**
+ * Error when an illegal option value was passed to the app
+ * {0} Option
+ * {1} Option description
+ */
+ public static final String ERROR_ILLEGAL_ARGUMENT
+ = "Main.error.illegal.argument";
+
+ public static final String ERROR_WHILE_CONVERTING_FILES
+ = "Main.error.while.converting.files";
+ public void execute(){
+ SVGConverter c = new SVGConverter(this);
+
+ Vector sources = new Vector();
+
+ int nArgs = args.size();
+ for (int i=0; i<nArgs; i++){
+ String v = (String)args.elementAt(i);
+ OptionHandler optionHandler = (OptionHandler)optionMap.get(v);
+ if (optionHandler == null){
+ // Assume v is a source.
+ sources.addElement(v);
+ } else {
+ // v is an option. Extract the optionValues required
+ // by the handler.
+ int nOptionArgs = optionHandler.getOptionValuesLength();
+ if (i + nOptionArgs >= nArgs){
+ error(ERROR_NOT_ENOUGH_OPTION_VALUES, new Object[]{ v,
optionHandler.getOptionDescription()});
+ return;
+ }
+
+ String[] optionValues = new String[nOptionArgs];
+ for (int j=0; j<nOptionArgs; j++){
+ optionValues[j] = (String)args.elementAt(1+i+j);
}
- else{
- error("No valid output directory for : " + s);
+ i += nOptionArgs;
+
+ try {
+ optionHandler.handleOption(optionValues, c);
+ } catch(IllegalArgumentException e){
+ e.printStackTrace();
+ error(ERROR_ILLEGAL_ARGUMENT,
+ new Object[] { v,
+ optionHandler.getOptionDescription() ,
+ toString(optionValues)});
+ return;
}
}
}
- System.exit(0);
- }
- public static URL getSVGURL(String s) {
- URL url = null;
+ String expandedSources[] = expandSources(sources);
- try{
- File f = new File(s);
- if(f.exists()){
- url = f.toURL();
- }
- else{
- url = new URL(s);
- }
- }catch(MalformedURLException e){
- error("Bad svg file: " + s);
+ c.setSources(expandedSources);
+
+ validateConverterConfig(c);
+
+ if (expandedSources== null || expandedSources.length < 1){
+ System.out.println("sources.length : " + sources.size());
+ System.out.println(USAGE);
+ return;
}
- return url;
+ try {
+ c.execute();
+ } catch(SVGConverterException e){
+ error(ERROR_WHILE_CONVERTING_FILES,
+ new Object[] { e.getMessage() });
+ }
}
- public static String getDirectory(String s){
- File f = new File(s);
- if(f.exists()){
- return f.getParent();
+ protected String toString(String[] v){
+ StringBuffer sb = new StringBuffer();
+ int n = v != null ? v.length:0;
+ for (int i=0; i<n; i++){
+ sb.append(v[i] + " ");
}
- else{
- return null;
- }
+
+ return sb.toString();
}
/**
- * Parse the input value, which should be in the following
- * format: a.r.g.b where a, r, g and b are integer values,
- * in decimal notation, between 0 and 255.
- * @return the parsed color if successful. null otherwise.
+ * Template methods which subclasses may implement to do whatever is
+ * needed. For example, this can be used for test purposes.
*/
- public static Color parseARGB(String argbVal){
- Color c = null;
- if(argbVal != null){
- StringTokenizer st = new StringTokenizer(argbVal, ".");
- if(st.countTokens() == 4){
- String aStr = st.nextToken();
- String rStr = st.nextToken();
- String gStr = st.nextToken();
- String bStr = st.nextToken();
- int a = -1, r = -1, g = -1, b = -1;
- try {
- a = Integer.parseInt(aStr);
- r = Integer.parseInt(rStr);
- g = Integer.parseInt(gStr);
- b = Integer.parseInt(bStr);
- }catch(NumberFormatException e){
- // If an error occured, the a, r, g, b
- // values will not be in the 0-255 range
- // and the next if test will fail
- }
+ public void validateConverterConfig(SVGConverter c){
+ }
- if( a>=0 && a<=255
- &&
- r>=0 && r<=255
- &&
- g>=0 && g<=255
- &&
- b>=0 && b<=255 ){
- c = new Color(r,g,b,a);
+ /**
+ * Scans the input vector and replaces directories with the list
+ * of SVG files they contain
+ */
+ protected String[] expandSources(Vector sources){
+ Vector expandedSources = new Vector();
+ Iterator iter = sources.iterator();
+ while (iter.hasNext()){
+ String v = (String)iter.next();
+ File f = new File(v);
+ if (f.exists() && f.isDirectory()){
+ File[] fl = f.listFiles(new SVGConverter.SVGFileFilter());
+ for (int i=0; i<fl.length; i++){
+ expandedSources.addElement(fl[i].getPath());
}
+ } else {
+ expandedSources.addElement(v);
}
}
- return c;
+
+ String[] s = new String[expandedSources.size()];
+ expandedSources.copyInto(s);
+ return s;
}
+ public static void main(String [] args) {
+ (new Main(args)).execute();
+ System.exit(0);
+ }
+
+ //
+ // SVGConverterController implementation
+ //
+ public static final String MESSAGE_ABOUT_TO_TRANSCODE
+ = "Main.message.about.to.transcode";
+
+ public static final String MESSAGE_ABOUT_TO_TRANSCODE_SOURCE
+ = "Main.message.about.to.transcode.source";
+
+ public static final String MESSAGE_CONVERSION_FAILED
+ = "Main.message.conversion.failed";
+
+ public static final String MESSAGE_CONVERSION_SUCCESS
+ = "Main.message.conversion.success";
+
+ public boolean proceedWithComputedTask(Transcoder transcoder,
+ Map hints,
+ Vector sources,
+ Vector dest){
+ System.out.println(Messages.formatMessage(MESSAGE_ABOUT_TO_TRANSCODE,
+ new Object[]{"" +
sources.size()}));
+ return true;
+ }
+
+ public boolean proceedWithSourceTranscoding(SVGConverterSource source,
+ File dest){
+ System.out.print(Messages.formatMessage(MESSAGE_ABOUT_TO_TRANSCODE_SOURCE,
+ new Object[]{source.toString(),
+ dest.toString()}));
+ return true;
+ }
+
+ public boolean proceedOnSourceTranscodingFailure(SVGConverterSource source,
+ File dest,
+ String errorCode){
+ System.out.println(Messages.formatMessage(MESSAGE_CONVERSION_FAILED,
+ new Object[]{errorCode}));
+
+ return true;
+ }
+
+ public void onSourceTranscodingSuccess(SVGConverterSource source,
+ File dest){
+ System.out.println(Messages.formatMessage(MESSAGE_CONVERSION_SUCCESS,
+ null));
+ }
}
1.2 +16 -1 xml-batik/sources/org/apache/batik/apps/rasterizer/Messages.java
Index: Messages.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/apps/rasterizer/Messages.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Messages.java 2001/10/25 13:34:24 1.1
+++ Messages.java 2001/10/29 19:13:54 1.2
@@ -17,7 +17,7 @@
* This class manages the message for the bridge module.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: Messages.java,v 1.1 2001/10/25 13:34:24 vhardy Exp $
+ * @version $Id: Messages.java,v 1.2 2001/10/29 19:13:54 vhardy Exp $
*/
public class Messages {
@@ -59,5 +59,20 @@
public static String formatMessage(String key, Object[] args)
throws MissingResourceException {
return localizableSupport.formatMessage(key, args);
+ }
+
+ public static String get(String key)
+ throws MissingResourceException {
+ return formatMessage(key, null);
+ }
+
+ public static String get(String key, String def){
+ String value = def;
+ try{
+ value = get(key);
+ }catch(MissingResourceException e){
+ }
+
+ return value;
}
}
1.3 +150 -120
xml-batik/sources/org/apache/batik/apps/rasterizer/SVGConverter.java
Index: SVGConverter.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/apps/rasterizer/SVGConverter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SVGConverter.java 2001/10/26 11:36:16 1.2
+++ SVGConverter.java 2001/10/29 19:13:54 1.3
@@ -25,8 +25,8 @@
import java.io.FileNotFoundException;
import java.awt.Color;
-import java.awt.Rectangle;
import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
@@ -44,26 +44,19 @@
* The Batik Transcoder API is used to execute the conversion. FOP is
* needed to be able to transcode to the PDF format<br />
*
- * The source can be:<br /><ul>
- * <li>A list of files or URL (set by the <tt>setSources</tt> method)</li>
- * <li>A directory (set by the <tt>setSrcDir</tt> method).</li>
- * </ul>
+ * The source has to be list of files or URL (set by the <tt>setSources</tt>
+ * method). <br />
*
* The destination can be:<br /><ul>
* <li><b>unspecified</b>. In that case, only file sources can be converted and
* a file in the same directory as the source will be created.</li>
- * <li><b>a directory</b>, set by the <tt>setDstDir</tt> method. In that case,
+ * <li><b>a directory</b>, set by the <tt>setDst</tt> method. In that case,
* the output files are created in that destination directory</li>
* <li><b>a file</b>. In case there is a <i>single
* source</i>, the destination can be a single named file
- * (set with the <tt>setDstFile</tt> method.</li>)<br />
+ * (set with the <tt>setDst</tt> method.</li>)<br />
* </ul>
*
- * The <tt>dstDir</tt> and <tt>dstFile</tt> can be both null, in which
- * case the destination is unspecified. If the <tt>dstDir</tt> and the
- * <tt>dstFile</tt> are both specified, the <tt>SVGConverter</tt> will
- * generate an error. <br />
- *
* <hr />
*
* There are a number of options which control the way the image is
@@ -82,7 +75,7 @@
* <li>alternate: controls the alternate CSS stylesheet to activate, if any.</li>
* </ul>
*
- * @version $Id: SVGConverter.java,v 1.2 2001/10/26 11:36:16 vhardy Exp $
+ * @version $Id: SVGConverter.java,v 1.3 2001/10/29 19:13:54 vhardy Exp $
* @author Henri Ruini
* @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
*/
@@ -91,19 +84,11 @@
// Error codes reported by the SVGConverter
//
- //
- // Reported when the srcDir property is not null and there
- // are no files in the directory.
- //
- public static final String ERROR_NO_SVG_FILES_IN_SRC_DIR
- = "SVGConverter.error.no.svg.files.in.src.dir";
-
//
- // Reported where the srcDir property has not been set not
- // the sourcesStrings (both null).
+ // Reported when no source file has been specified.
//
- public static final String ERROR_NO_SRCDIR_OR_SRCFILE_SPECIFIED
- = "SVGConverter.error.no.srcdir.or.srcfile.specified";
+ public static final String ERROR_NO_SOURCES_SPECIFIED
+ = "SVGConverter.error.no.sources.specified";
//
// Reported when there is more than one valid input source
@@ -114,6 +99,13 @@
= "SVGConverter.error.cannot.compute.destination";
//
+ // Reported when the dst is a file and there are multiple
+ // sources.
+ //
+ public static final String ERROR_CANNOT_USE_DST_FILE
+ = "SVGConverter.error.cannot.use.dst.file";
+
+ //
// Reported when the <tt>Transcoder</tt> for the requested
// <tt>destinationType</tt> cannot be found.
//
@@ -196,37 +188,37 @@
= DestinationType.PNG;
/** Default width */
- protected static final int DEFAULT_WIDTH = -1;
+ protected static final float DEFAULT_WIDTH = -1;
/** Default height */
- protected static final int DEFAULT_HEIGHT = -1;
+ protected static final float DEFAULT_HEIGHT = -1;
/** Result type */
protected DestinationType destinationType = DEFAULT_RESULT_TYPE;
/** Output image height. */
- protected int height = DEFAULT_HEIGHT;
+ protected float height = DEFAULT_HEIGHT;
/** Output image width. */
- protected int width = DEFAULT_WIDTH;
+ protected float width = DEFAULT_WIDTH;
/** Output image quality. */
protected float quality = DEFAULT_QUALITY;
/** Output AOI area. */
- protected Rectangle area = null;
+ protected Rectangle2D area = null;
- /** Sources files or URLs */
- protected Vector sourcesStrings = null;
+ /** Validation flag */
+ protected boolean validate = false;
- /** Source directory */
- protected File srcDir = null;
-
- /** Destination image path. Used if there is a single source */
- protected File dstFile = null;
+ /** Sources files or URLs */
+ protected Vector sources = null;
- /** Destination directory for output images. */
- protected File dstDir = null;
+ /**
+ * Destination image path. Can be a file (for single source) or
+ * a directory
+ */
+ protected File dst;
/** Background color for the output images. */
protected Color backgroundColor = null;
@@ -266,7 +258,7 @@
}
//
- // Property set methods
+ // Property get/set methods
//
/**
@@ -280,24 +272,36 @@
this.destinationType = destinationType;
}
+ public DestinationType getDestinationType(){
+ return destinationType;
+ }
+
/**
* In less than or equal to zero, the height is not
* constrained on the output image. The height is in
* user space.
*/
- public void setHeight(int height) {
+ public void setHeight(float height) {
this.height = height;
}
+ public float getHeight(){
+ return height;
+ }
+
/**
* In less than or equal to zero, the width is not
* constrained on the output image. The width is in
* user space.
*/
- public void setWidth(int width) {
+ public void setWidth(float width) {
this.width = width;
}
+ public float getWidth(){
+ return width;
+ }
+
/**
* Sets the JPEG encoding quality. The value should be strictly
* less than 1. If the value is less than zero, then the maximum
@@ -311,16 +315,24 @@
this.quality = quality;
}
+ public float getQuality(){
+ return quality;
+ }
+
/**
* Sets the <tt>area</tt> as a Rectangle. This value can
* be null in which case the whole image will be rendered. If the
* area is not null, then only the portion of the image it
* defines will be rendered.
*/
- public void setArea(Rectangle area){
+ public void setArea(Rectangle2D area){
this.area = area;
}
+ public Rectangle2D getArea(){
+ return area;
+ }
+
/**
* Sets the list of individual SVG sources. The strings
* can be either URLs or file names. Note that invalid
@@ -328,55 +340,38 @@
* will cause <tt>SVGConverterExceptions</tt> to be
* thrown during the transcoding process (see {@link #execute});
*/
- public void setSourcesStrings(String[] sourcesStrings) {
- if(sourcesStrings == null){
- this.sourcesStrings = null;
+ public void setSources(String[] sources) {
+ if(sources == null){
+ this.sources = null;
}
else{
- this.sourcesStrings = new Vector();
- for (int i=0; i<sourcesStrings.length; i++){
- if (sourcesStrings[i] != null){
- this.sourcesStrings.addElement(sourcesStrings[i]);
+ this.sources = new Vector();
+ for (int i=0; i<sources.length; i++){
+ if (sources[i] != null){
+ this.sources.addElement(sources[i]);
}
}
- if (this.sourcesStrings.size() == 0){
- this.sourcesStrings = null;
+ if (this.sources.size() == 0){
+ this.sources = null;
}
}
}
- /**
- * Set the directory from which SVG files should be converted.
- */
- public void setSrcDir(File dir) {
- this.srcDir = dir;
+ public Vector getSources(){
+ return sources;
}
/**
- * When converting a single source, this allows the user
- * to specify the file where the output should be saved
- * (as opposed to let the <tt>SVGConverter</tt> automatically
- * create a file in the <tt>dstDir</tt>
+ * When converting a single source, dst can be a file.
+ * Othewise, it should be a directory.
*/
- public void setDstFile(File dstFile) {
- if (dstDir != null) {
- throw new IllegalArgumentException();
- }
-
- this.dstFile = dstFile;
+ public void setDst(File dst) {
+ this.dst = dst;
}
-
- /**
- * Sets the directory where the converted SVG files should
- * be saved.
- */
- public void setDstDir(File dir) {
- if (dstFile != null){
- throw new IllegalArgumentException();
- }
- this.dstDir = dir;
+ public File getDst(){
+ return dst;
}
/**
@@ -388,6 +383,10 @@
this.backgroundColor = backgroundColor;
}
+ public Color getBackgroundColor(){
+ return backgroundColor;
+ }
+
/**
* Sets the <tt>mediaType</tt> value. This value controls
* the CSS media for which the image should be rendered. It
@@ -400,6 +399,10 @@
this.mediaType = mediaType;
}
+ public String getMediaType(){
+ return mediaType;
+ }
+
/**
* Sets the <tt>alternateStyleSheet</tt> value. This value
* controls the CSS alternate stylesheet to select in the
@@ -409,8 +412,41 @@
public void setAlternateStylesheet(String alternateStylesheet){
this.alternateStylesheet = alternateStylesheet;
}
+
+ public String getAlternateStylesheet(){
+ return alternateStylesheet;
+ }
+
+ /**
+ * Defines whether or not input sources should be validated in
+ * the conversion process
+ */
+ public void setValidate(boolean validate){
+ this.validate = validate;
+ }
+
+ public boolean getValidate(){
+ return validate;
+ }
/**
+ * Returns true if f is a File. f is found to be a file if
+ * it exists and is a file. If it does not exist, it is declared
+ * to be a file if it has the same extension as the DestinationType.
+ */
+ protected boolean isFile(File f){
+ if (f.exists()){
+ return f.isFile();
+ } else {
+ if
(f.toString().toLowerCase().endsWith(destinationType.getExtension())){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* Starts the conversion process.
* @throws SVGConverterException thrown if parameters are not set correctly.
*/
@@ -420,11 +456,11 @@
// This throws an exception if there is not at least one src file.
Vector sources = computeSources();
- // Compute the destination files from destFile, dstDir and sources
+ // Compute the destination files from dest
Vector dstFiles = null;
- if(sources.size() == 1 && dstFile != null){
+ if(sources.size() == 1 && dst != null && isFile(dst)){
dstFiles = new Vector();
- dstFiles.addElement(dstFile);
+ dstFiles.addElement(dst);
}
else{
dstFiles = computeDstFiles(sources);
@@ -463,21 +499,27 @@
}
/**
- * Populates a dstFiles vector with files names
- * computed from the names of the files in the sources vector.
+ * Populates a vector with destination files names
+ * computed from the names of the files in the sources vector
+ * and the value of the dst property
*/
protected Vector computeDstFiles(Vector sources)
throws SVGConverterException {
Vector dstFiles = new Vector();
- if(dstDir != null){
+ if (dst != null) {
+ if (dst.exists() && dst.isFile()) {
+ throw new SVGConverterException(ERROR_CANNOT_USE_DST_FILE);
+ }
+
//
- // A destination directory has been specified.
+ // Either dst exist and is a directory or dst does not
+ // exist and we may fail later on in createOutputDir
//
int n = sources.size();
for(int i=0; i<n; i++){
SVGConverterSource src = (SVGConverterSource)sources.elementAt(i);
// Generate output filename from input filename.
- File outputName = new File(dstDir.getPath(),
+ File outputName = new File(dst.getPath(),
getDestinationFile(src.getName()));
dstFiles.addElement(outputName);
@@ -510,49 +552,34 @@
/**
* Populates a vector with the set of SVG files from the
- * srcDir if it is not null and with the sourcesStrings (files or URLs)
+ * srcDir if it is not null and with the sources (files or URLs)
* if any.
*/
protected Vector computeSources() throws SVGConverterException{
Vector sources = new Vector();
// Check that at least one source has been specified.
- if (sourcesStrings == null && srcDir == null){
- throw new SVGConverterException(ERROR_NO_SRCDIR_OR_SRCFILE_SPECIFIED);
+ if (this.sources == null){
+ throw new SVGConverterException(ERROR_NO_SOURCES_SPECIFIED);
}
- if (sourcesStrings != null){
- int n = sourcesStrings.size();
- for (int i=0; i<n; i++){
- String sourceString = (String)(sourcesStrings.elementAt(i));
- File file = new File(sourceString);
- if (file.exists()) {
- sources.addElement(new SVGConverterFileSource(file));
- } else {
- String[] fileNRef = getFileNRef(sourceString);
- file = new File(fileNRef[0]);
- if (file.exists()){
- sources.addElement(new SVGConverterFileSource(file,
fileNRef[1]));
- } else{
- sources.addElement(new SVGConverterURLSource(sourceString));
- }
+ int n = this.sources.size();
+ for (int i=0; i<n; i++){
+ String sourceString = (String)(this.sources.elementAt(i));
+ File file = new File(sourceString);
+ if (file.exists()) {
+ sources.addElement(new SVGConverterFileSource(file));
+ } else {
+ String[] fileNRef = getFileNRef(sourceString);
+ file = new File(fileNRef[0]);
+ if (file.exists()){
+ sources.addElement(new SVGConverterFileSource(file,
fileNRef[1]));
+ } else{
+ sources.addElement(new SVGConverterURLSource(sourceString));
}
}
}
- if (srcDir != null){
- File[] fl = srcDir.listFiles(new SVGFileFilter());
- if (fl != null && fl.length > 0){
- for (int i=0; i<fl.length; i++){
- sources.addElement(new SVGConverterFileSource(fl[i]));
- }
- }
- else{
- throw new SVGConverterException(ERROR_NO_SVG_FILES_IN_SRC_DIR,
- new Object[]{srcDir.toString()});
- }
- }
-
return sources;
}
@@ -582,8 +609,8 @@
// Set AOI. ----------------------------------------------------------
if (area != null) {
// Set height and width so that image doesn't get distorted.
- map.put(ImageTranscoder.KEY_HEIGHT, new Float(area.getHeight()));
- map.put(ImageTranscoder.KEY_WIDTH, new Float(area.getWidth()));
+ map.put(ImageTranscoder.KEY_HEIGHT, new Float((float)area.getHeight()));
+ map.put(ImageTranscoder.KEY_WIDTH, new Float((float)area.getWidth()));
map.put(ImageTranscoder.KEY_AOI, area);
}
@@ -619,6 +646,11 @@
map.put(ImageTranscoder.KEY_ALTERNATE_STYLESHEET, alternateStylesheet);
}
+ // Set validation
+ if (validate){
+ map.put(ImageTranscoder.KEY_XML_PARSER_VALIDATING,
+ new Boolean(validate));
+ }
return map;
}
@@ -692,7 +724,6 @@
// Transcode now
boolean success = false;
try {
- System.out.println("About to transcoder : " + input.getURI());
transcoder.transcode(input, output);
success = true;
} catch(TranscoderException te) {
@@ -759,7 +790,6 @@
dest = new String(oldName + newSuffix);
}
- System.out.println("Computed destination file: " + dest);
return dest;
}
@@ -830,7 +860,7 @@
/**
* Convenience class to filter svg files
*/
- class SVGFileFilter implements FileFilter {
+ public static class SVGFileFilter implements FileFilter {
public static final String SVG_EXTENSION = ".svg";
public boolean accept(File file){
1.2 +123 -3
xml-batik/resources/org/apache/batik/apps/rasterizer/resources/Messages.properties
Index: Messages.properties
===================================================================
RCS file:
/home/cvs/xml-batik/resources/org/apache/batik/apps/rasterizer/resources/Messages.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Messages.properties 2001/10/25 13:31:35 1.1
+++ Messages.properties 2001/10/29 19:13:54 1.2
@@ -6,9 +6,13 @@
# the LICENSE file. #
#############################################################################
-SVGConverter.error.no.svg.files.in.src.dir = \
-Error: there are no SVG files in the source directory ({0}).
+SVGConverter.error.no.sources.specified = \
+Error: no source was specified.
+SVGConverter.error.cannot.use.dst.file = \
+Error: cannot use destination file where there are multiple sources. \
+Should use a destination directory instead.
+
SVGConverter.error.no.srcdir.or.srcfile.specified = \
Error: no source directory or source file specified.
@@ -57,4 +61,120 @@
The value was: {0}
SVGConverter.config.xml.parser.class.name = \
-org.apache.crimson.parser.XMLReaderImpl
\ No newline at end of file
+org.apache.crimson.parser.XMLReaderImpl
+
+
+Main.usage = \
+SVG Rasterizer options are: \n \
+ -d <dir|file> \n \
+\toutput directory. If there is a single input file, this can be a file. \n \
+ -m <mimeType> \n \
+\toutput mime type. \n \
+ -w <width> \n \
+\toutput width. This is a floating point value. \n \
+ -h <height> \n \
+\toutput height. This is a floating point value. \n \
+ -a <area> \n \
+\toutput area. The format for <area> is x,y,w,h, where x, y, w and h \n \
+\tare floating point values. \n \
+ -bg <color> \n \
+\touput color. The format for <color> is a.r.g.b, where a, r, g and b \n \
+\tare integer values. \n \
+ -cssMedia <media> \n \
+\tCSS media type for which the source SVG files should be \n \
+\tconverted.\n \
+ -cssAlternate <alternate> \n \
+\tCSS alternate stylesheet to use when converting the source \n \
+\tSVG files. \n \
+ -validate \n \
+\tontrols whether the source SVG files should be validated. \n
+
+
+Main.cl.option.output.description = \
+-d <dir|file> output directory. If there is a single input file, this can be a
file. \n \
+ Otherwise, it has to be a directory. \n \
+ If no -d option is specified, then the output files are created in
\n \
+ the same directory (or directories) as the sources. \n \
+Example: -d rasters/png \n \
+Default: none
+
+Main.cl.option.mime.type.description = \
+-m <mimeType> output mime type. This should be one of: \n \
+ + image/jpg \n \
+ + image/jpeg \n \
+ + image/jpe \n \
+ + image/png \n \
+ + image/pdf \n \
+ + image/tiff \n \n \
+Example: -m image/jpeg \n \
+Default: image/png
+
+Main.cl.option.width.description = \
+-w <width> Output width. This is a floating point value. \n
+Example: -w 455.6 \n \
+Default: none (which means that the images's width will be used)
+
+Main.cl.option.height.description = \
+-h <height> Output height. This is a floating point value. \n
+Example: -h 345.67 \n \
+Default: none (which means that the image's height will be used)
+
+Main.cl.option.area.description = \
+-a <area> output area. The format for <area> is x,y,w,h, where x, y, w and h are \n
\
+ floating point values. \n \
+Example: -a 40,40,300,200 \n \
+Default: none (which means that the entire image will be rendered).
+
+Mail.cl.option.bg.description = \
+-bg <color> ouput color. The format for <color> is a.r.g.b, where a, r, g and b \n \
+ are integer values. \n \
+Example: -bg 128.255.0.0 \n \
+Default: none (which means that the background is not filled with any color \n \
+ before rendering the SVG file). \n \
+
+Main.cl.option.cssMedia.description = \
+-cssMedia <media> CSS media type for which the source SVG files should be \n \
+ converted.\n \
+Example: -cssMedia projection \n \
+Default: none (which means that the "screen" media will be used.
+
+Main.cl.option.cssAlternate.description = \
+-cssAlternate <alternate> CSS alternate stylesheet to use when converting the
source \n \
+ SVG files. \n \
+Example: -cssAlternate myFavoriteStylesheet \n \
+Default: none
+
+Main.cl.option.validate.description = \
+-validate controls whether the source SVG files should be validated.
+
+#
+# Main error codes
+#
+
+Main.error.not.enough.option.values = \
+Error: not enough option values for option {0} \n \
+{1}
+
+Main.error.illegal.argument = \
+Error: illegal argument for option {0} : {2} \n \
+{1}
+
+Main.error.while.converting.files = \
+Error while converting files: \n \
+{0}
+
+
+#
+# Main messages
+#
+Main.message.about.to.transcode = \
+About to transcode {0} SVG file(s)\n
+
+Main.message.about.to.transcode.source = \
+Converting {0} to {1} ...
+
+Main.message.conversion.failed = \
+... error ({0})
+
+Main.message.conversion.success = \
+... success
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]