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