blob: 72982930eca7795ca47831529c107f3b4a77ab6a [file] [log] [blame]
package com.google.typography.font.compression;
import com.google.common.io.Files;
import com.google.typography.font.sfntly.Font;
import com.google.typography.font.sfntly.FontFactory;
import java.io.File;
import java.io.IOException;
/**
* Simple WOFF 2.0 compression report runner.
*
* @author David Kuettel
*/
public class SimpleRunner {
private static final FontFactory FONT_FACTORY = FontFactory.getInstance();
private static final String GZIP = "gzip";
private static final String WOFF2 = "glyf/cbbox,triplet,code,reslice:woff2/lzma";
private static final String REPORT = "report.csv";
public static void main(String[] args) throws IOException {
if (args.length == 0) {
usage();
}
CompressionStats stats = new CompressionStats();
System.out.printf("Analyzing (%d) fonts\n", args.length);
run(stats, args);
System.out.printf("Creating report: %s\n", REPORT);
CsvReport.create(stats, REPORT);
}
private static void run(CompressionStats stats, String[] filenames) throws IOException {
for (String filename : filenames) {
try {
File file = new File(filename);
byte[] bytes = Files.toByteArray(file);
Font font = FONT_FACTORY.loadFonts(bytes)[0];
byte[] gzip = Experiment.run(font, GZIP);
byte[] woff2 = Experiment.run(font, WOFF2);
stats.add(
CompressionStats.Stats.builder()
.setFilename(file.getName())
.setSize(CompressionStats.Size.ORIGINAL, bytes.length)
.setSize(CompressionStats.Size.GZIP, gzip.length)
.setSize(CompressionStats.Size.WOFF2, woff2.length)
.build());
} catch (Throwable t) {
System.err.printf("WARNING: failed to compress: %s\n", filename);
t.printStackTrace();
}
}
}
private static void usage() {
System.err.println("Usage: SimpleRunner font...");
System.exit(-1);
}
}