]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Merged revisions 704008,704907,704909 via svnmerge from
authorAdrian Cumiskey <acumiskey@apache.org>
Wed, 15 Oct 2008 14:55:25 +0000 (14:55 +0000)
committerAdrian Cumiskey <acumiskey@apache.org>
Wed, 15 Oct 2008 14:55:25 +0000 (14:55 +0000)
https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk

........
  r704008 | vhennebert | 2008-10-13 11:34:32 +0100 (Mon, 13 Oct 2008) | 6 lines

  Bugzilla #45971: improved the behaviour of the command line interface:
  - display 'fop' instead of 'Fop' in help messages
  - do not throw exception when running fop without argument or with -v or -h
  - return more meaningful error codes
  Patch submitted with some modifications by Tom Browder (tom_dot.browder.at_gmail.dot_com)
........
  r704907 | acumiskey | 2008-10-15 14:27:06 +0100 (Wed, 15 Oct 2008) | 1 line

  More readable.
........
  r704909 | acumiskey | 2008-10-15 14:28:25 +0100 (Wed, 15 Oct 2008) | 1 line

  Fix for ps:ps-page-setup-code.
........

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@704935 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/cli/CommandLineOptions.java
src/java/org/apache/fop/cli/Main.java
src/java/org/apache/fop/render/ps/PSRenderer.java
src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java

index 07502c81929adced7991e4f93e9c8aa3db920498..b589f7443a994f52aece66d8075ca4daecd563d9 100644 (file)
@@ -23,17 +23,15 @@ package org.apache.fop.cli;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Vector;
 
 import javax.swing.UIManager;
 
-import org.xml.sax.SAXException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.apache.fop.Version;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
@@ -50,6 +48,7 @@ import org.apache.fop.render.print.PagesMode;
 import org.apache.fop.render.print.PrintRenderer;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.fop.util.CommandLineLogger;
+import org.xml.sax.SAXException;
 
 /**
  * Options parses the commandline arguments
@@ -134,7 +133,8 @@ public class CommandLineOptions {
     }
 
     /**
-     * Parse the command line arguments.
+     * Parses the command line arguments.
+     *
      * @param args the command line arguments.
      * @throws FOPException for general errors
      * @throws IOException if the the configuration file could not be loaded
@@ -165,10 +165,10 @@ public class CommandLineOptions {
                 return false;
             }
         } catch (FOPException e) {
-            printUsage();
+            printUsage(System.err);
             throw e;
         } catch (java.io.FileNotFoundException e) {
-            printUsage();
+            printUsage(System.err);
             throw e;
         }
 
@@ -228,12 +228,18 @@ public class CommandLineOptions {
     }
 
     /**
-     * parses the commandline arguments
-     * @return true if parse was successful and processing can continue, false
-     * if processing should stop
+     * Parses the command line arguments.
+     *
+     * @return true if processing can continue, false if it should stop (nothing to do)
      * @exception FOPException if there was an error in the format of the options
      */
     private boolean parseOptions(String[] args) throws FOPException {
+        // do not throw an exception for no args
+        if (args.length == 0) {
+            printVersion();
+            printUsage(System.out);
+            return false;
+        }
         for (int i = 0; i < args.length; i++) {
             if (args[i].equals("-x")
                        || args[i].equals("--dump-config")) {
@@ -304,7 +310,8 @@ public class CommandLineOptions {
             } else if (args[i].equals("-at")) {
                 i = i + parseAreaTreeOption(args, i);
             } else if (args[i].equals("-v")) {
-                System.out.println("FOP Version " + Version.getVersion());
+                printVersion();
+                return false;
             } else if (args[i].equals("-param")) {
                   if (i + 2 < args.length) {
                       String name = args[++i];
@@ -330,8 +337,8 @@ public class CommandLineOptions {
             } else if (!isOption(args[i])) {
                 i = i + parseUnknownOption(args, i);
             } else {
-                printUsage();
-                return false;
+                printUsage(System.err);
+                System.exit(1);
             }
         }
         return true;
@@ -1029,12 +1036,19 @@ public class CommandLineOptions {
         }
     }
 
+    private static void printVersion() {
+        System.out.println("FOP Version " + Version.getVersion());
+    }
+
     /**
-     * shows the commandline syntax including a summary of all available options and some examples
+     * Shows the command line syntax including a summary of all available options and some
+     * examples.
+     *
+     * @param out the stream to which the message must be printed
      */
-    public static void printUsage() {
-        System.err.println(
-              "\nUSAGE\nFop [options] [-fo|-xml] infile [-xsl file] "
+    public static void printUsage(PrintStream out) {
+        out.println(
+              "\nUSAGE\nfop [options] [-fo|-xml] infile [-xsl file] "
                     + "[-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl|-ps|-txt|-at [mime]|-print] <outfile>\n"
             + " [OPTIONS]  \n"
             + "  -d                debug mode   \n"
@@ -1095,15 +1109,15 @@ public class CommandLineOptions {
             + "                    XSL-FO file is saved and no rendering is performed. \n"
             + "                    (Only available if you use -xml and -xsl parameters)\n\n"
             + "\n"
-            + " [Examples]\n" + "  Fop foo.fo foo.pdf \n"
-            + "  Fop -fo foo.fo -pdf foo.pdf (does the same as the previous line)\n"
-            + "  Fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf\n"
-            + "  Fop -xml foo.xml -xsl foo.xsl -foout foo.fo\n"
-            + "  Fop -xml - -xsl foo.xsl -pdf -\n"
-            + "  Fop foo.fo -mif foo.mif\n"
-            + "  Fop foo.fo -rtf foo.rtf\n"
-            + "  Fop foo.fo -print\n"
-            + "  Fop foo.fo -awt\n");
+            + " [Examples]\n" + "  fop foo.fo foo.pdf \n"
+            + "  fop -fo foo.fo -pdf foo.pdf (does the same as the previous line)\n"
+            + "  fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf\n"
+            + "  fop -xml foo.xml -xsl foo.xsl -foout foo.fo\n"
+            + "  fop -xml - -xsl foo.xsl -pdf -\n"
+            + "  fop foo.fo -mif foo.mif\n"
+            + "  fop foo.fo -rtf foo.rtf\n"
+            + "  fop foo.fo -print\n"
+            + "  fop foo.fo -awt\n");
     }
 
     /**
@@ -1112,11 +1126,11 @@ public class CommandLineOptions {
     private void printUsagePrintOutput() {
         System.err.println("USAGE: -print [from[-to][,even|odd]] [-copies numCopies]\n\n"
            + "Example:\n"
-           + "all pages:                        Fop infile.fo -print\n"
-           + "all pages with two copies:        Fop infile.fo -print -copies 2\n"
-           + "all pages starting with page 7:   Fop infile.fo -print 7\n"
-           + "pages 2 to 3:                     Fop infile.fo -print 2-3\n"
-           + "only even page between 10 and 20: Fop infile.fo -print 10-20,even\n");
+           + "all pages:                        fop infile.fo -print\n"
+           + "all pages with two copies:        fop infile.fo -print -copies 2\n"
+           + "all pages starting with page 7:   fop infile.fo -print 7\n"
+           + "pages 2 to 3:                     fop infile.fo -print 2-3\n"
+           + "only even page between 10 and 20: fop infile.fo -print 10-20,even\n");
     }
 
     /**
index f1a23ea46df207384eac5b99efb167daf334e5b7..c4393bb03819fd32902aa77957bc4c498af05110 100644 (file)
@@ -139,7 +139,10 @@ public class Main {
     }
 
     /**
-     * Executes FOP with the given ClassLoader setup.
+     * Executes FOP with the given arguments. If no argument is provided, returns its
+     * version number as well as a short usage statement; if '-v' is provided, returns its
+     * version number alone; if '-h' is provided, returns its short help message.
+     *
      * @param args command-line arguments
      */
     public static void startFOP(String[] args) {
@@ -153,7 +156,7 @@ public class Main {
         try {
             options = new CommandLineOptions();
             if (!options.parse(args)) {
-                System.exit(1);
+                System.exit(0);
             }
 
             foUserAgent = options.getFOUserAgent();
index 4785ea14fea9c3cf0c26732da305c3f6d8818d09..085ee8230277a6c9974709944f443a1d2938c92d 100644 (file)
@@ -40,36 +40,6 @@ import javax.xml.transform.Source;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
-import org.apache.xmlgraphics.image.loader.ImageException;
-import org.apache.xmlgraphics.image.loader.ImageFlavor;
-import org.apache.xmlgraphics.image.loader.ImageInfo;
-import org.apache.xmlgraphics.image.loader.ImageManager;
-import org.apache.xmlgraphics.image.loader.ImageSessionContext;
-import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
-import org.apache.xmlgraphics.image.loader.impl.ImageRawCCITTFax;
-import org.apache.xmlgraphics.image.loader.impl.ImageRawEPS;
-import org.apache.xmlgraphics.image.loader.impl.ImageRawJPEG;
-import org.apache.xmlgraphics.image.loader.impl.ImageRawStream;
-import org.apache.xmlgraphics.image.loader.impl.ImageRendered;
-import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
-import org.apache.xmlgraphics.image.loader.pipeline.ImageProviderPipeline;
-import org.apache.xmlgraphics.image.loader.util.ImageUtil;
-import org.apache.xmlgraphics.ps.DSCConstants;
-import org.apache.xmlgraphics.ps.ImageEncoder;
-import org.apache.xmlgraphics.ps.PSDictionary;
-import org.apache.xmlgraphics.ps.PSPageDeviceDictionary;
-import org.apache.xmlgraphics.ps.PSDictionaryFormatException;
-import org.apache.xmlgraphics.ps.PSGenerator;
-import org.apache.xmlgraphics.ps.PSImageUtils;
-import org.apache.xmlgraphics.ps.PSProcSets;
-import org.apache.xmlgraphics.ps.PSResource;
-import org.apache.xmlgraphics.ps.PSState;
-import org.apache.xmlgraphics.ps.dsc.DSCException;
-import org.apache.xmlgraphics.ps.dsc.ResourceTracker;
-import org.apache.xmlgraphics.ps.dsc.events.DSCCommentBoundingBox;
-import org.apache.xmlgraphics.ps.dsc.events.DSCCommentHiResBoundingBox;
-
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.area.Area;
@@ -107,6 +77,34 @@ import org.apache.fop.render.ps.extensions.PSSetPageDevice;
 import org.apache.fop.render.ps.extensions.PSSetupCode;
 import org.apache.fop.util.CharUtilities;
 import org.apache.fop.util.ColorUtil;
+import org.apache.xmlgraphics.image.loader.ImageException;
+import org.apache.xmlgraphics.image.loader.ImageFlavor;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
+import org.apache.xmlgraphics.image.loader.ImageManager;
+import org.apache.xmlgraphics.image.loader.ImageSessionContext;
+import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
+import org.apache.xmlgraphics.image.loader.impl.ImageRawCCITTFax;
+import org.apache.xmlgraphics.image.loader.impl.ImageRawEPS;
+import org.apache.xmlgraphics.image.loader.impl.ImageRawJPEG;
+import org.apache.xmlgraphics.image.loader.impl.ImageRawStream;
+import org.apache.xmlgraphics.image.loader.impl.ImageRendered;
+import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
+import org.apache.xmlgraphics.image.loader.pipeline.ImageProviderPipeline;
+import org.apache.xmlgraphics.image.loader.util.ImageUtil;
+import org.apache.xmlgraphics.ps.DSCConstants;
+import org.apache.xmlgraphics.ps.ImageEncoder;
+import org.apache.xmlgraphics.ps.PSDictionary;
+import org.apache.xmlgraphics.ps.PSDictionaryFormatException;
+import org.apache.xmlgraphics.ps.PSGenerator;
+import org.apache.xmlgraphics.ps.PSImageUtils;
+import org.apache.xmlgraphics.ps.PSPageDeviceDictionary;
+import org.apache.xmlgraphics.ps.PSProcSets;
+import org.apache.xmlgraphics.ps.PSResource;
+import org.apache.xmlgraphics.ps.PSState;
+import org.apache.xmlgraphics.ps.dsc.DSCException;
+import org.apache.xmlgraphics.ps.dsc.ResourceTracker;
+import org.apache.xmlgraphics.ps.dsc.events.DSCCommentBoundingBox;
+import org.apache.xmlgraphics.ps.dsc.events.DSCCommentHiResBoundingBox;
 
 /**
  * Renderer that renders to PostScript.
@@ -143,7 +141,7 @@ public class PSRenderer extends AbstractPathOrientedRenderer
     /** The application producing the PostScript */
     private int currentPageNumber = 0;
 
-    private boolean enableComments = true;
+    private final boolean enableComments = true;
     private boolean autoRotateLandscape = false;
     private int languageLevel = PSGenerator.DEFAULT_LANGUAGE_LEVEL;
 
@@ -589,12 +587,12 @@ public class PSRenderer extends AbstractPathOrientedRenderer
     /** {@inheritDoc} */
     public void paintImage(RenderedImage image, RendererContext context,
             int x, int y, int width, int height) throws IOException {
-        float fx = (float)x / 1000f;
+        float fx = x / 1000f;
         x += currentIPPosition / 1000f;
-        float fy = (float)y / 1000f;
+        float fy = y / 1000f;
         y += currentBPPosition / 1000f;
-        float fw = (float)width / 1000f;
-        float fh = (float)height / 1000f;
+        float fw = width / 1000f;
+        float fh = height / 1000f;
         PSImageUtils.renderBitmapImage(image, fx, fy, fw, fh, gen);
     }
 
@@ -1235,6 +1233,8 @@ public class PSRenderer extends AbstractPathOrientedRenderer
                     PSExtensionAttachment attachment = (PSExtensionAttachment)attObj;
                     if (attachment instanceof PSCommentBefore) {
                         gen.commentln("%" + attachment.getContent());
+                    } else if (attachment instanceof PSSetupCode) {
+                        gen.writeln(attachment.getContent());
                     }
                 }
             }
index ec90a3afd6a1672800ac45fc18055c34908e43bf..d5aea37dfbe178550257019604f3ad89b16ecf93 100644 (file)
 package org.apache.fop.render.ps.extensions;
 
 // FOP
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.extensions.ExtensionAttachment;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
 
 /**
  * Base class for the PostScript-specific extension elements.
  */
 public abstract class AbstractPSExtensionObject extends FONode {
 
-    private PSSetupCode setupCode = new PSSetupCode();
+    private final PSSetupCode setupCode = new PSSetupCode();
 
     /**
      * Main constructor.
@@ -56,9 +55,10 @@ public abstract class AbstractPSExtensionObject extends FONode {
     /** {@inheritDoc} */
     protected void characters(char[] data, int start, int length,
                                  PropertyList pList, Locator locator) {
-        if (setupCode.getContent() != null) {
-            StringBuffer sb = new StringBuffer(setupCode.getContent());
-            sb.append(data, start, length - start);
+        String content = setupCode.getContent();
+        if (content != null) {
+            StringBuffer sb = new StringBuffer(content);
+            sb.append(data, start, length);
             setupCode.setContent(sb.toString());
         } else {
             setupCode.setContent(new String(data, start, length));