git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194258 13f79535-47bb-0310-9956-ffa450edef68pull/33/head
@@ -45,12 +45,17 @@ public class CommandLineOptions { | |||
/* System buffers */ | |||
private static final int BUFFER_FILE = 7; | |||
/* System buffers */ | |||
private static final int AREA_OUTPUT = 8; | |||
/* use debug mode*/ | |||
Boolean errorDump = new Boolean(false); | |||
/* show configuration information */ | |||
Boolean dumpConfiguration = new Boolean(false); | |||
/*suppress any progress information */ | |||
Boolean quiet = new Boolean(false); | |||
/* for area tree XML output, only down to block area level */ | |||
Boolean suppressLowLevelAreas = new Boolean(false); | |||
/* name of user configuration file*/ | |||
File userConfigFile = null; | |||
/* name of input fo file */ | |||
@@ -72,11 +77,13 @@ public class CommandLineOptions { | |||
/* language for user information */ | |||
String language = null; | |||
private java.util.Hashtable rendererOptions; | |||
public CommandLineOptions (String [] args) | |||
throws FOPException, FileNotFoundException | |||
{ | |||
boolean optionsParsed = true; | |||
rendererOptions = new java.util.Hashtable(); | |||
try { | |||
optionsParsed = parseOptions(args); | |||
if (optionsParsed) { | |||
@@ -129,7 +136,9 @@ public class CommandLineOptions { | |||
language = args[i + 1]; | |||
i++; | |||
} | |||
} else if (args[i].equals("-fo")) { | |||
} else if (args[i].equals("-s")) { | |||
suppressLowLevelAreas = new Boolean(true); | |||
} else if (args[i].equals("-fo")) { | |||
inputmode = FO_INPUT; | |||
if ((i + 1 == args.length) || | |||
(args[i + 1].charAt(0) == '-')) { | |||
@@ -228,6 +237,15 @@ public class CommandLineOptions { | |||
bufferFile = new File (args[i + 1]); | |||
i++; | |||
} | |||
} else if (args[i].equals("-at")) { | |||
setOutputMode(AREA_OUTPUT); | |||
if ((i + 1 == args.length) || | |||
(args[i + 1].charAt(0) == '-')) { | |||
throw new FOPException("you must specify the area-tree output file"); | |||
} else { | |||
outfile = new File (args[i + 1]); | |||
i++; | |||
} | |||
} else { | |||
printUsage(); | |||
return false; | |||
@@ -322,6 +340,9 @@ public class CommandLineOptions { | |||
return Driver.RENDER_PCL; | |||
case TXT_OUTPUT: | |||
return Driver.RENDER_TXT; | |||
case AREA_OUTPUT: | |||
rendererOptions.put("fineDetail", isCoarseAreaXml()); | |||
return Driver.RENDER_XML; | |||
default: | |||
throw new FOPException("Invalid Renderer setting!"); | |||
} | |||
@@ -341,7 +362,10 @@ public class CommandLineOptions { | |||
} | |||
} | |||
public java.util.Hashtable getRendererOptions() { | |||
return rendererOptions; | |||
} | |||
public Starter getStarter() | |||
throws FOPException | |||
{ | |||
@@ -377,6 +401,8 @@ public class CommandLineOptions { | |||
throw new FOPException("PrintStarter could not be loaded.",e); | |||
} | |||
case AREA_OUTPUT: | |||
return new CommandLineStarter(this); | |||
default: | |||
return new CommandLineStarter(this); | |||
} | |||
@@ -430,7 +456,10 @@ public class CommandLineOptions { | |||
return errorDump; | |||
} | |||
public Boolean isCoarseAreaXml() { | |||
return suppressLowLevelAreas; | |||
} | |||
/** | |||
* return either the fofile or the xmlfile | |||
*/ | |||
@@ -451,12 +480,13 @@ public class CommandLineOptions { | |||
*/ | |||
public static void printUsage() { | |||
MessageHandler.errorln( | |||
"\nUSAGE\nFop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-pcl|-txt|-print] <outfile>\n" + | |||
"\nUSAGE\nFop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-pcl|-txt|-at|-print] <outfile>\n" + | |||
" [OPTIONS] \n" + " -d debug mode \n" + | |||
" -x dump configuration settings \n" + | |||
" -q quiet mode \n" + | |||
" -c cfg.xml use additional configuration file cfg.xml\n" + | |||
" -l lang the language to use for user information \n\n" + | |||
" -l lang the language to use for user information \n" + | |||
" -s for area tree XML, down to block areas only\n\n" + | |||
" [INPUT] \n" + | |||
" infile xsl:fo input file (the same as the next) \n" + | |||
" -fo infile xsl:fo input file \n" + | |||
@@ -469,6 +499,7 @@ public class CommandLineOptions { | |||
" -mif outfile input will be rendered as mif file (outfile req'd)\n" + | |||
" -pcl outfile input will be rendered as pcl file (outfile req'd) \n" + | |||
" -txt outfile input will be rendered as text file (outfile req'd) \n" + | |||
" -at outfile representation of area tree as XML (outfile req'd) \n" + | |||
" -print input file will be rendered and sent to the printer \n" + | |||
" see options with \"-print help\" \n\n" + | |||
" [Examples]\n" + " Fop foo.fo foo.pdf \n" + |
@@ -55,7 +55,7 @@ public class CommandLineStarter extends Starter { | |||
try { | |||
driver.setRenderer(commandLineOptions.getRenderer()); | |||
driver.getRenderer().setOptions(commandLineOptions.getRendererOptions()); | |||
driver.buildFOTree(parser, inputHandler.getInputSource()); | |||
driver.format(); | |||
driver.setOutputStream(new FileOutputStream(commandLineOptions.getOutputFile())); |
@@ -269,6 +269,10 @@ public class Driver { | |||
_renderer = renderer; | |||
} | |||
public Renderer getRenderer() { | |||
return _renderer; | |||
} | |||
/** | |||
* @deprecated use renderer.setProducer(version) + setRenderer(renderer) or just setRenderer(renderer_type) which will use the default producer string. | |||
* @see #setRenderer(int) |
@@ -72,6 +72,9 @@ public interface Renderer { | |||
/** set up the given FontInfo */ | |||
public void setupFontInfo(FontInfo fontInfo); | |||
/** set up renderer options */ | |||
public void setOptions(java.util.Hashtable options); | |||
/** set the producer of the rendering */ | |||
public void setProducer(String producer); | |||
@@ -110,7 +110,14 @@ public class AWTRenderer implements Renderer, Printable, Pageable { | |||
*/ | |||
private int currentAreaContainerXPosition = 0; | |||
/** options */ | |||
protected Hashtable options; | |||
/** set up renderer options */ | |||
public void setOptions(Hashtable options) { | |||
this.options = options; | |||
} | |||
public AWTRenderer(Translator aRes) { | |||
res = aRes; | |||
} |
@@ -111,16 +111,21 @@ public class MIFRenderer implements Renderer { | |||
/* is a table currently open? */ | |||
private boolean inTable=false; | |||
/** options */ | |||
protected Hashtable options; | |||
/** | |||
* create the MIF renderer | |||
*/ | |||
public MIFRenderer() { | |||
this.mifDoc = new MIFDocument(); | |||
this.mifDoc = new MIFDocument(); | |||
} | |||
/** set up renderer options */ | |||
public void setOptions(Hashtable options) { | |||
this.options = options; | |||
} | |||
/** | |||
* render the areas into MIF | |||
* |
@@ -56,6 +56,8 @@ public class PCLRenderer extends PrintRenderer | |||
private int xoffset = -180; // X Offset to allow for PCL implicit 1/4" left margin. | |||
private java.util.Hashtable options; | |||
/** | |||
* Create the PCL renderer | |||
*/ | |||
@@ -63,6 +65,11 @@ public class PCLRenderer extends PrintRenderer | |||
{ | |||
} | |||
/** set up renderer options */ | |||
public void setOptions(java.util.Hashtable options) { | |||
this.options = options; | |||
} | |||
/** | |||
* set the PCL document's producer | |||
* |
@@ -89,6 +89,9 @@ public class PDFRenderer extends PrintRenderer { | |||
/** reusable word area string buffer to reduce memory usage */ | |||
private StringBuffer _wordAreaPDF = new StringBuffer(); | |||
/** options */ | |||
protected Hashtable options; | |||
/** | |||
* create the PDF renderer | |||
*/ | |||
@@ -96,6 +99,11 @@ public class PDFRenderer extends PrintRenderer { | |||
this.pdfDoc = new PDFDocument(); | |||
} | |||
/** set up renderer options */ | |||
public void setOptions(Hashtable options) { | |||
this.options = options; | |||
} | |||
/** | |||
* set the PDF document's producer | |||
* |
@@ -30,6 +30,7 @@ import java.io.IOException; | |||
import java.io.OutputStream; | |||
import java.util.Enumeration; | |||
import java.util.Vector; | |||
import java.util.Hashtable; | |||
/** | |||
* Renderer that renders areas to plain text | |||
@@ -64,13 +65,17 @@ public class TXTRenderer extends PrintRenderer | |||
public String pageEnding = "\f"; // Every page except the last one will end with this string. | |||
public boolean suppressGraphics = false; // If true then graphics/decorations will not be rendered - text only. | |||
/** | |||
* create the TXT renderer | |||
*/ | |||
public TXTRenderer() | |||
{ | |||
} | |||
/** options */ | |||
protected Hashtable options; | |||
public TXTRenderer() { | |||
} | |||
/** set up renderer options */ | |||
public void setOptions(Hashtable options) { | |||
this.options = options; | |||
} | |||
/** | |||
* set the TXT document's producer | |||
* |
@@ -65,6 +65,7 @@ import java.io.IOException; | |||
import java.io.PrintWriter; | |||
import java.io.OutputStream; | |||
import java.util.Enumeration; | |||
import java.util.Hashtable; | |||
/** | |||
* Renderer that renders areas to XML for debugging purposes. | |||
@@ -80,6 +81,17 @@ public class XMLRenderer implements Renderer { | |||
/** the writer used to output the XML */ | |||
protected PrintWriter writer; | |||
/** options */ | |||
protected Hashtable options; | |||
public XMLRenderer() { | |||
} | |||
/** set up renderer options */ | |||
public void setOptions(Hashtable options) { | |||
this.options = options; | |||
} | |||
/** | |||
* set the document's producer | |||
* | |||
@@ -244,7 +256,8 @@ public class XMLRenderer implements Renderer { | |||
* @param space the space to render | |||
*/ | |||
public void renderDisplaySpace(DisplaySpace space) { | |||
writeEmptyElementTag("<DisplaySpace size=\"" | |||
if (!isCoarseXml()) | |||
writeEmptyElementTag("<DisplaySpace size=\"" | |||
+ space.getSize() +"\"/>"); | |||
} | |||
@@ -290,13 +303,17 @@ public class XMLRenderer implements Renderer { | |||
else | |||
sb = sb.append(ch); | |||
} | |||
writeElement("<InlineArea font-weight=\"" | |||
if (!isCoarseXml()) { | |||
writeElement("<WordArea font-weight=\"" | |||
+ fontWeight + "\" red=\"" | |||
+ area.getRed() + "\" green=\"" | |||
+ area.getGreen() + "\" blue = \"" | |||
+ area.getBlue() + "\" width = \"" | |||
+ area.getContentWidth() + "\">" + sb.toString() | |||
+ "</InlineArea>"); | |||
+ "</WordArea>"); | |||
} else { | |||
this.writer.write(sb.toString()); | |||
} | |||
} | |||
/** | |||
@@ -305,8 +322,11 @@ public class XMLRenderer implements Renderer { | |||
* @param space the space to render | |||
*/ | |||
public void renderInlineSpace(InlineSpace space) { | |||
writeEmptyElementTag("<InlineSpace size=\"" | |||
if (!isCoarseXml()) | |||
writeEmptyElementTag("<InlineSpace size=\"" | |||
+ space.getSize() +"\"/>"); | |||
else | |||
this.writer.write(" "); | |||
} | |||
/** | |||
@@ -315,15 +335,20 @@ public class XMLRenderer implements Renderer { | |||
* @param area the area to render | |||
*/ | |||
public void renderLineArea(LineArea area) { | |||
String fontWeight = area.getFontState().getFontWeight(); | |||
writeStartTag("<LineArea font-weight=\"" | |||
if (!isCoarseXml()) { | |||
String fontWeight = area.getFontState().getFontWeight(); | |||
writeStartTag("<LineArea font-weight=\"" | |||
+ fontWeight + "\">"); | |||
Enumeration e = area.getChildren().elements(); | |||
while (e.hasMoreElements()) { | |||
Box b = (Box)e.nextElement(); | |||
b.render(this); | |||
} | |||
writeEndTag("</LineArea>"); | |||
} | |||
Enumeration e = area.getChildren().elements(); | |||
while (e.hasMoreElements()) { | |||
Box b = (Box)e.nextElement(); | |||
b.render(this); | |||
} | |||
if (!isCoarseXml()) | |||
writeEndTag("</LineArea>"); | |||
else | |||
this.writer.write("\n"); | |||
} | |||
/** | |||
@@ -334,7 +359,7 @@ public class XMLRenderer implements Renderer { | |||
public void renderPage(Page page) { | |||
BodyAreaContainer body; | |||
AreaContainer before, after; | |||
writeStartTag("<Page>"); | |||
writeStartTag("<Page number=\"" + page.getNumber() + "\">"); | |||
body = page.getBody(); | |||
before = page.getBefore(); | |||
after = page.getAfter(); | |||
@@ -354,6 +379,7 @@ public class XMLRenderer implements Renderer { | |||
* @param area the area to render | |||
*/ | |||
public void renderLeaderArea(LeaderArea area) { | |||
if (isCoarseXml()) return; | |||
String leaderPattern = ""; | |||
switch (area.getLeaderPattern()) { | |||
case LeaderPattern.SPACE: | |||
@@ -377,4 +403,8 @@ public class XMLRenderer implements Renderer { | |||
"\" red=\"" + area.getRed() + "\" green=\"" + area.getGreen() + | |||
"\" blue = \"" + area.getBlue() + "\"/>"); | |||
} | |||
private boolean isCoarseXml() { | |||
return ((Boolean)options.get("fineDetail")).booleanValue(); | |||
} | |||
} |