1 rizwank 1.1 #!/usr/local/bin/perl
2 #
3 # Create encoding vectors from the `*.txt' encoding files.
4 # Copyright (c) 1995-1998 Markku Rossi
5 #
6 # Author: Markku Rossi <mtr@iki.fi>
7 #
8
9 #
10 # This file is part of GNU enscript.
11 #
12 # This program is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 2, or (at your option)
15 # any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 rizwank 1.1 # You should have received a copy of the GNU General Public License
23 # along with this program; see the file COPYING. If not, write to
24 # the Free Software Foundation, 59 Temple Place - Suite 330,
25 # Boston, MA 02111-1307, USA.
26 #
27
28 #
29 # Handle arguments
30 #
31
32 if (@ARGV != 1) {
33 print "usage: $0 encfile\n";
34 exit(1);
35 }
36
37 $file = shift(@ARGV);
38
39 open(FP, $file) || die "couldn't open input file `$file': $!\n";
40
41 # Find the start of the table.
42 $found = 0;
43 rizwank 1.1 while (<FP>) {
44 if ($_ =~ /^-+$/) {
45 $found = 1;
46 last;
47 }
48 }
49
50 if (!$found) {
51 die "file `$file' is not a valid encoding file: couldn't find table\n";
52 }
53
54 $file =~ s/\.txt$//g;
55 $file =~ s/.*\///g;
56
57 # Print header.
58
59 print <<"EOF";
60 %
61 % $file encoding vector.
62 %
63 % This file is automatically generated from file \`$file.txt\'. If you
64 rizwank 1.1 % have any corrections to this file, please, edit file \`$file.txt\' instead.
65 %
66
67 %
68 % This file is part of GNU enscript.
69 %
70 % This program is free software; you can redistribute it and/or modify
71 % it under the terms of the GNU General Public License as published by
72 % the Free Software Foundation; either version 2, or (at your option)
73 % any later version.
74 %
75 % This program is distributed in the hope that it will be useful,
76 % but WITHOUT ANY WARRANTY; without even the implied warranty of
77 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
78 % GNU General Public License for more details.
79 %
80 % You should have received a copy of the GNU General Public License
81 % along with this program; see the file COPYING. If not, write to
82 % the Free Software Foundation, 59 Temple Place - Suite 330,
83 % Boston, MA 02111-1307, USA.
84 %
85 rizwank 1.1
86 % -- code follows this line --
87 /encoding_vector [
88 EOF
89
90 $inum = 0;
91 $names_per_row = 4;
92 sub print_item {
93 ($name) = @_;
94
95 printf("%-14s\t", $name);
96 if ((++$inum % $names_per_row) == 0) {
97 printf("\n");
98 }
99 }
100
101 # Process file.
102 while (<FP>) {
103 @cols = split;
104 if ($_ =~ /^\s*$/) {
105 next;
106 rizwank 1.1 } elsif ($_ =~ /non-printable/) {
107 $fields{hex(@cols[1])} = "/.notdef";
108 } elsif (@cols[2] =~ /-/) {
109 $fields{hex(@cols[1])} = "/.notdef";
110 } else {
111 $fields{hex(@cols[1])} = @cols[2];
112 }
113 }
114
115 # Dump mapping.
116 for ($i = 0; $i < 256; $i++) {
117 if (!defined($fields{$i})) {
118 print "* code $i is not defined, assuming `.notdef'\n";
119 $name = "/.notdef";
120 } else {
121 $name = $fields{$i};
122 }
123 print_item($name);
124 }
125
126 # Print trailer.
127 rizwank 1.1 if (($inum % $names_per_row) != 0) {
128 printf("\n");
129 }
130 print "\] def\n";
131
132 close(FP);
|