/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id$ */ package org.apache.fop.hyphenation; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectOutputStream; /** * <p>Serialize hyphenation patterns.</p> * <p>For all xml files in the source directory a pattern file is built in the target directory.</p> * <p>This class may be called from the ant build file in a java task.</p> */ public class SerializeHyphPattern { private boolean errorDump; /** * Controls the amount of error information dumped. * @param errorDump True if more error info should be provided */ public void setErrorDump(boolean errorDump) { this.errorDump = errorDump; } /** * Compile all xml files in sourceDir, and write output hyp files in targetDir * @param sourceDir Directory with pattern xml files * @param targetDir Directory to which compiled pattern hyp files should be written */ public void serializeDir(File sourceDir, File targetDir) { final String extension = ".xml"; String[] sourceFiles = sourceDir.list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(extension); } }); if (sourceFiles != null) { for (String sourceFile : sourceFiles) { File infile = new File(sourceDir, sourceFile); String outfilename = sourceFile.substring(0, sourceFile.length() - extension.length()) + ".hyp"; File outfile = new File(targetDir, outfilename); serializeFile(infile, outfile); } } } /* * checks whether input or output files exists or the latter is older than input file * and start build if necessary */ private void serializeFile(File infile, File outfile) { boolean startProcess; startProcess = rebuild(infile, outfile); if (startProcess) { HyphenationTree hTree = buildPatternFile(infile); // serialize class try { // @SuppressFBWarnings("OS_OPEN_STREAM_EXCEPTION_PATH") ObjectOutputStream out = new ObjectOutputStream( new java.io.BufferedOutputStream( new java.io.FileOutputStream(outfile))); out.writeObject(hTree); out.close(); } catch (IOException ioe) { System.err.println("Can't write compiled pattern file: " + outfile); System.err.println(ioe); } } } /* * serializes pattern files */ private HyphenationTree buildPatternFile(File infile) { System.out.println("Processing " + infile); HyphenationTree hTree = new HyphenationTree(); try { hTree.loadPatterns(infile.toString()); if (errorDump) { System.out.println("Stats: "); hTree.printStats(); } } catch (HyphenationException ex) { System.err.println("Can't load patterns from xml file " + infile + " - Maybe hyphenation.dtd is missing?"); if (errorDump) { System.err.println(ex.toString()); } } return hTree; } /** * Checks for existence of output file and compares * dates with input and stylesheet file */ private boolean rebuild(File infile, File outfile) { if (outfile.exists()) { // checks whether output file is older than input file if (outfile.lastModified() < infile.lastModified()) { return true; } } else { // if output file does not exist, start process return true; } return false; } // end rebuild /** * Entry point for ant java task * @param args sourceDir, targetDir */ public static void main(String[] args) { SerializeHyphPattern ser = new SerializeHyphPattern(); ser.serializeDir(new File(args[0]), new File(args[1])); } }