1*3ff48bf5SDavid du Colombier###===================================================================== 2*3ff48bf5SDavid du Colombier### Read two Adobe Font Metric files, and compute tables of the 3*3ff48bf5SDavid du Colombier### differences in character repertoire, declared widths (WX), and 4*3ff48bf5SDavid du Colombier### bounding boxes. 5*3ff48bf5SDavid du Colombier### 6*3ff48bf5SDavid du Colombier### Usage: 7*3ff48bf5SDavid du Colombier### awk -f afmdiff.awk file1.afm file2.afm 8*3ff48bf5SDavid du Colombier### 9*3ff48bf5SDavid du Colombier### Author: 10*3ff48bf5SDavid du Colombier### Nelson H. F. Beebe 11*3ff48bf5SDavid du Colombier### Center for Scientific Computing 12*3ff48bf5SDavid du Colombier### University of Utah 13*3ff48bf5SDavid du Colombier### Department of Mathematics, 322 INSCC 14*3ff48bf5SDavid du Colombier### 155 S 1400 E RM 233 15*3ff48bf5SDavid du Colombier### Salt Lake City, UT 84112-0090 16*3ff48bf5SDavid du Colombier### USA 17*3ff48bf5SDavid du Colombier### Email: beebe@math.utah.edu, beebe@acm.org, beebe@computer.org, 18*3ff48bf5SDavid du Colombier### beebe@ieee.org (Internet) 19*3ff48bf5SDavid du Colombier### WWW URL: http://www.math.utah.edu/~beebe 20*3ff48bf5SDavid du Colombier### Telephone: +1 801 581 5254 21*3ff48bf5SDavid du Colombier### FAX: +1 801 585 1640, +1 801 581 4148 22*3ff48bf5SDavid du Colombier### 23*3ff48bf5SDavid du Colombier######################################################################## 24*3ff48bf5SDavid du Colombier######################################################################## 25*3ff48bf5SDavid du Colombier######################################################################## 26*3ff48bf5SDavid du Colombier### ### 27*3ff48bf5SDavid du Colombier### awkdiff.awk: compare two Adobe Font Metric files ### 28*3ff48bf5SDavid du Colombier### ### 29*3ff48bf5SDavid du Colombier### Copyright (C) 2000 Nelson H. F. Beebe ### 30*3ff48bf5SDavid du Colombier### ### 31*3ff48bf5SDavid du Colombier### This program is covered by the GNU General Public License (GPL), ### 32*3ff48bf5SDavid du Colombier### version 2 or later, available as the file COPYING in the program ### 33*3ff48bf5SDavid du Colombier### source distribution, and on the Internet at ### 34*3ff48bf5SDavid du Colombier### ### 35*3ff48bf5SDavid du Colombier### ftp://ftp.gnu.org/gnu/GPL ### 36*3ff48bf5SDavid du Colombier### ### 37*3ff48bf5SDavid du Colombier### http://www.gnu.org/copyleft/gpl.html ### 38*3ff48bf5SDavid du Colombier### ### 39*3ff48bf5SDavid du Colombier### This program is free software; you can redistribute it and/or ### 40*3ff48bf5SDavid du Colombier### modify it under the terms of the GNU General Public License as ### 41*3ff48bf5SDavid du Colombier### published by the Free Software Foundation; either version 2 of ### 42*3ff48bf5SDavid du Colombier### the License, or (at your option) any later version. ### 43*3ff48bf5SDavid du Colombier### ### 44*3ff48bf5SDavid du Colombier### This program is distributed in the hope that it will be useful, ### 45*3ff48bf5SDavid du Colombier### but WITHOUT ANY WARRANTY; without even the implied warranty of ### 46*3ff48bf5SDavid du Colombier### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### 47*3ff48bf5SDavid du Colombier### GNU General Public License for more details. ### 48*3ff48bf5SDavid du Colombier### ### 49*3ff48bf5SDavid du Colombier### You should have received a copy of the GNU General Public ### 50*3ff48bf5SDavid du Colombier### License along with this program; if not, write to the Free ### 51*3ff48bf5SDavid du Colombier### Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, ### 52*3ff48bf5SDavid du Colombier### MA 02111-1307 USA ### 53*3ff48bf5SDavid du Colombier### ### 54*3ff48bf5SDavid du Colombier### This program may also be distributed as part of AFPL ### 55*3ff48bf5SDavid du Colombier### Ghostscript, under the terms of the Aladdin Free Public License ### 56*3ff48bf5SDavid du Colombier### (the "License"). ### 57*3ff48bf5SDavid du Colombier### ### 58*3ff48bf5SDavid du Colombier### Every copy of AFPL Ghostscript must include a copy of the ### 59*3ff48bf5SDavid du Colombier### License, normally in a plain ASCII text file named PUBLIC. The ### 60*3ff48bf5SDavid du Colombier### License grants you the right to copy, modify and redistribute ### 61*3ff48bf5SDavid du Colombier### AFPL Ghostscript, but only under certain conditions ### 62*3ff48bf5SDavid du Colombier### described in the License. Among other things, the License ### 63*3ff48bf5SDavid du Colombier### requires that the copyright notice and this notice be preserved ### 64*3ff48bf5SDavid du Colombier### on all copies. ### 65*3ff48bf5SDavid du Colombier### ### 66*3ff48bf5SDavid du Colombier######################################################################## 67*3ff48bf5SDavid du Colombier######################################################################## 68*3ff48bf5SDavid du Colombier######################################################################## 69*3ff48bf5SDavid du Colombier# 70*3ff48bf5SDavid du Colombier# [29-Apr-2000] 71*3ff48bf5SDavid du Colombier#======================================================================= 72*3ff48bf5SDavid du Colombier 73*3ff48bf5SDavid du Colombier/^FontName/ { FontName[++NFontName] = $2 } 74*3ff48bf5SDavid du Colombier 75*3ff48bf5SDavid du Colombier 76*3ff48bf5SDavid du Colombier/^C / { 77*3ff48bf5SDavid du Colombier if (NFontName == 1) 78*3ff48bf5SDavid du Colombier CharName1[$8]++ 79*3ff48bf5SDavid du Colombier if (NFontName == 2) 80*3ff48bf5SDavid du Colombier CharName2[$8]++ 81*3ff48bf5SDavid du Colombier } 82*3ff48bf5SDavid du Colombier 83*3ff48bf5SDavid du Colombier 84*3ff48bf5SDavid du Colombier/^C / { 85*3ff48bf5SDavid du Colombier name = $8 86*3ff48bf5SDavid du Colombier if (name in WX) 87*3ff48bf5SDavid du Colombier { 88*3ff48bf5SDavid du Colombier if (WX[name] != $5) 89*3ff48bf5SDavid du Colombier WXDIFF[name] = WX[name] - $5 90*3ff48bf5SDavid du Colombier } 91*3ff48bf5SDavid du Colombier else 92*3ff48bf5SDavid du Colombier WX[name] = $5 93*3ff48bf5SDavid du Colombier } 94*3ff48bf5SDavid du Colombier 95*3ff48bf5SDavid du Colombier 96*3ff48bf5SDavid du Colombier/^C / { 97*3ff48bf5SDavid du Colombier name = $8 98*3ff48bf5SDavid du Colombier bx = $13 - $11 99*3ff48bf5SDavid du Colombier if (name in BX) 100*3ff48bf5SDavid du Colombier { 101*3ff48bf5SDavid du Colombier if (BX[name] != bx) 102*3ff48bf5SDavid du Colombier BXDIFF[name] = BX[name] - bx 103*3ff48bf5SDavid du Colombier } 104*3ff48bf5SDavid du Colombier else 105*3ff48bf5SDavid du Colombier BX[name] = bx 106*3ff48bf5SDavid du Colombier } 107*3ff48bf5SDavid du Colombier 108*3ff48bf5SDavid du Colombier 109*3ff48bf5SDavid du Colombier/^C / { 110*3ff48bf5SDavid du Colombier name = $8 111*3ff48bf5SDavid du Colombier by = $14 - $12 112*3ff48bf5SDavid du Colombier if (name in BY) 113*3ff48bf5SDavid du Colombier { 114*3ff48bf5SDavid du Colombier if (BY[name] != by) 115*3ff48bf5SDavid du Colombier BYDIFF[name] = BY[name] - by 116*3ff48bf5SDavid du Colombier } 117*3ff48bf5SDavid du Colombier else 118*3ff48bf5SDavid du Colombier BY[name] = by 119*3ff48bf5SDavid du Colombier } 120*3ff48bf5SDavid du Colombier 121*3ff48bf5SDavid du Colombier 122*3ff48bf5SDavid du ColombierEND { 123*3ff48bf5SDavid du Colombier Sortpipe = "sort -f | pr -c3 -w80 -l1 -t" 124*3ff48bf5SDavid du Colombier print "Comparison of AFM metrics in files:", ARGV[1], ARGV[2] 125*3ff48bf5SDavid du Colombier print "Font names:", FontName[1], FontName[2] 126*3ff48bf5SDavid du Colombier show_name_diffs(FontName[2],CharName2, FontName[1],CharName1) 127*3ff48bf5SDavid du Colombier show_name_diffs(FontName[1],CharName1, FontName[2],CharName2) 128*3ff48bf5SDavid du Colombier show_num_diffs("WX width differences", WXDIFF) 129*3ff48bf5SDavid du Colombier show_num_diffs("Bounding box width differences", BXDIFF) 130*3ff48bf5SDavid du Colombier show_num_diffs("Bounding box height differences",BYDIFF) 131*3ff48bf5SDavid du Colombier } 132*3ff48bf5SDavid du Colombier 133*3ff48bf5SDavid du Colombierfunction show_name_diffs(font1,array1,font2,array2, name) 134*3ff48bf5SDavid du Colombier{ 135*3ff48bf5SDavid du Colombier print "\nChars from", font2, "missing from", font1 ":" 136*3ff48bf5SDavid du Colombier for (name in array2) 137*3ff48bf5SDavid du Colombier { 138*3ff48bf5SDavid du Colombier if (!(name in array1)) 139*3ff48bf5SDavid du Colombier printf("%s\n", name) | Sortpipe 140*3ff48bf5SDavid du Colombier } 141*3ff48bf5SDavid du Colombier close(Sortpipe) 142*3ff48bf5SDavid du Colombier} 143*3ff48bf5SDavid du Colombier 144*3ff48bf5SDavid du Colombierfunction show_num_diffs(title,array, name) 145*3ff48bf5SDavid du Colombier{ 146*3ff48bf5SDavid du Colombier printf("\n%s:\n", title) 147*3ff48bf5SDavid du Colombier for (name in array) 148*3ff48bf5SDavid du Colombier printf("%-15s\t%4d\n", name, array[name]) | Sortpipe 149*3ff48bf5SDavid du Colombier close(Sortpipe) 150*3ff48bf5SDavid du Colombier} 151