/*******************************************************************************
* Copyright 2010 Simon Mieth
*
* Licensed 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.
******************************************************************************/
package org.kabeja.batik.tools;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.apache.batik.svggen.font.SVGFont;
import org.kabeja.svg.SVGUtils;
/**
* @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth</a>
*
*/
public class FontImport {
String source;
String destination;
String fontDescriptionFile;
public static void main(String[] args) {
if (args.length != 3) {
System.out.println(
"The source and/or destination directory and/or the fontdescription file are not set.");
System.exit(0);
}
FontImport importer = new FontImport();
importer.setSource(args[0]);
importer.setDestination(args[1]);
importer.setFontDescriptionFile(args[2]);
importer.importFonts();
}
public void importFonts() {
File in = new File(source);
File dest = new File(destination);
if (!dest.exists()) {
dest.mkdirs();
}
File[] files = in.listFiles(new FileFilter() {
public boolean accept(File f) {
if (f.getName().toLowerCase().endsWith(".ttf")) {
return true;
}
return false;
}
});
if (files.length > 0) {
try {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fontDescriptionFile, true)));
for (int i = 0; i < files.length; i++) {
String fontFile = files[i].getName().toLowerCase();
fontFile = fontFile.substring(0, fontFile.indexOf(".ttf"));
File svgFont = new File(dest.getAbsolutePath() +
File.separator + fontFile + ".svg");
importFont(files[i], svgFont, out);
}
out.flush();
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @return Returns the destination.
*/
public String getDestination() {
return destination;
}
/**
* @param destination
* The destination to set.
*/
public void setDestination(String destination) {
this.destination = destination;
}
/**
* @return Returns the source.
*/
public String getSource() {
return source;
}
/**
* @param source
* The source to set.
*/
public void setSource(String source) {
this.source = source;
}
/**
* @return Returns the fontDescriptionFile.
*/
public String getFontDescriptionFile() {
return fontDescriptionFile;
}
/**
* @param fontDescriptionFile
* The fontDescriptionFile to set.
*/
public void setFontDescriptionFile(String fontDescriptionFile) {
this.fontDescriptionFile = fontDescriptionFile;
}
private void importFont(File source, File dest, BufferedWriter out)
throws IOException {
String shx = source.getName().toLowerCase();
shx = shx.substring(0, shx.indexOf(".ttf"));
// remove unmeated chars from filename
shx = fixFileName(shx);
String[] args = new String[] {
source.getAbsolutePath(), "-id", shx, "-o",
dest.getAbsolutePath()
};
SVGFont.main(args);
String uri = SVGUtils.fileToURI(dest);
System.out.println("Imported:" + source.getName() + " to:" + uri);
out.write(shx + " = " + uri + "\n");
}
private String fixFileName(String name) {
StringBuffer buf = new StringBuffer();
char[] c = name.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] != '_') {
buf.append(c[i]);
}
}
return buf.toString();
}
}