| 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) { |
| 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()); |
| } |
| } |
| |
| private static void usage() { |
| System.err.println("Usage: SimpleRunner font..."); |
| System.exit(-1); |
| } |
| } |