xref: /netbsd-src/external/gpl2/groff/dist/src/utils/addftinfo/guess.cpp (revision 89a07cf815a29524268025a1139fac4c5190f765)
1*89a07cf8Schristos /*	$NetBSD: guess.cpp,v 1.1.1.1 2016/01/13 18:41:49 christos Exp $	*/
2*89a07cf8Schristos 
3*89a07cf8Schristos // -*- C++ -*-
4*89a07cf8Schristos /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
5*89a07cf8Schristos      Written by James Clark (jjc@jclark.com)
6*89a07cf8Schristos 
7*89a07cf8Schristos This file is part of groff.
8*89a07cf8Schristos 
9*89a07cf8Schristos groff is free software; you can redistribute it and/or modify it under
10*89a07cf8Schristos the terms of the GNU General Public License as published by the Free
11*89a07cf8Schristos Software Foundation; either version 2, or (at your option) any later
12*89a07cf8Schristos version.
13*89a07cf8Schristos 
14*89a07cf8Schristos groff is distributed in the hope that it will be useful, but WITHOUT ANY
15*89a07cf8Schristos WARRANTY; without even the implied warranty of MERCHANTABILITY or
16*89a07cf8Schristos FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17*89a07cf8Schristos for more details.
18*89a07cf8Schristos 
19*89a07cf8Schristos You should have received a copy of the GNU General Public License along
20*89a07cf8Schristos with groff; see the file COPYING.  If not, write to the Free Software
21*89a07cf8Schristos Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
22*89a07cf8Schristos 
23*89a07cf8Schristos #include "guess.h"
24*89a07cf8Schristos 
guess(const char * s,const font_params & param,char_metric * metric)25*89a07cf8Schristos void guess(const char *s, const font_params &param, char_metric *metric)
26*89a07cf8Schristos {
27*89a07cf8Schristos   int &height = metric->height;
28*89a07cf8Schristos   int &depth = metric->depth;
29*89a07cf8Schristos 
30*89a07cf8Schristos   metric->ic = 0;
31*89a07cf8Schristos   metric->left_ic = 0;
32*89a07cf8Schristos   metric->sk = 0;
33*89a07cf8Schristos   height = 0;
34*89a07cf8Schristos   depth = 0;
35*89a07cf8Schristos   if (s[0] == '\0' || (s[1] != '\0' && s[2] != '\0'))
36*89a07cf8Schristos     goto do_default;
37*89a07cf8Schristos #define HASH(c1, c2) (((unsigned char)(c1) << 8) | (unsigned char)(c2))
38*89a07cf8Schristos   switch (HASH(s[0], s[1])) {
39*89a07cf8Schristos   default:
40*89a07cf8Schristos   do_default:
41*89a07cf8Schristos     if (metric->type & 01)
42*89a07cf8Schristos       depth = param.desc_depth;
43*89a07cf8Schristos     if (metric->type & 02)
44*89a07cf8Schristos       height = param.asc_height;
45*89a07cf8Schristos     else
46*89a07cf8Schristos       height = param.x_height;
47*89a07cf8Schristos     break;
48*89a07cf8Schristos   case HASH('\\', '|'):
49*89a07cf8Schristos   case HASH('\\', '^'):
50*89a07cf8Schristos   case HASH('\\', '&'):
51*89a07cf8Schristos     // these have zero height and depth
52*89a07cf8Schristos     break;
53*89a07cf8Schristos   case HASH('f', 0):
54*89a07cf8Schristos     height = param.asc_height;
55*89a07cf8Schristos     if (param.italic)
56*89a07cf8Schristos       depth = param.desc_depth;
57*89a07cf8Schristos     break;
58*89a07cf8Schristos   case HASH('a', 0):
59*89a07cf8Schristos   case HASH('c', 0):
60*89a07cf8Schristos   case HASH('e', 0):
61*89a07cf8Schristos   case HASH('m', 0):
62*89a07cf8Schristos   case HASH('n', 0):
63*89a07cf8Schristos   case HASH('o', 0):
64*89a07cf8Schristos   case HASH('r', 0):
65*89a07cf8Schristos   case HASH('s', 0):
66*89a07cf8Schristos   case HASH('u', 0):
67*89a07cf8Schristos   case HASH('v', 0):
68*89a07cf8Schristos   case HASH('w', 0):
69*89a07cf8Schristos   case HASH('x', 0):
70*89a07cf8Schristos   case HASH('z', 0):
71*89a07cf8Schristos     height = param.x_height;
72*89a07cf8Schristos     break;
73*89a07cf8Schristos   case HASH('i', 0):
74*89a07cf8Schristos     height = param.x_height;
75*89a07cf8Schristos     break;
76*89a07cf8Schristos   case HASH('b', 0):
77*89a07cf8Schristos   case HASH('d', 0):
78*89a07cf8Schristos   case HASH('h', 0):
79*89a07cf8Schristos   case HASH('k', 0):
80*89a07cf8Schristos   case HASH('l', 0):
81*89a07cf8Schristos   case HASH('F', 'i'):
82*89a07cf8Schristos   case HASH('F', 'l'):
83*89a07cf8Schristos   case HASH('f', 'f'):
84*89a07cf8Schristos   case HASH('f', 'i'):
85*89a07cf8Schristos   case HASH('f', 'l'):
86*89a07cf8Schristos     height = param.asc_height;
87*89a07cf8Schristos     break;
88*89a07cf8Schristos   case HASH('t', 0):
89*89a07cf8Schristos     height = param.asc_height;
90*89a07cf8Schristos     break;
91*89a07cf8Schristos   case HASH('g', 0):
92*89a07cf8Schristos   case HASH('p', 0):
93*89a07cf8Schristos   case HASH('q', 0):
94*89a07cf8Schristos   case HASH('y', 0):
95*89a07cf8Schristos     height = param.x_height;
96*89a07cf8Schristos     depth = param.desc_depth;
97*89a07cf8Schristos     break;
98*89a07cf8Schristos   case HASH('j', 0):
99*89a07cf8Schristos     height = param.x_height;
100*89a07cf8Schristos     depth = param.desc_depth;
101*89a07cf8Schristos     break;
102*89a07cf8Schristos   case HASH('A', 0):
103*89a07cf8Schristos   case HASH('B', 0):
104*89a07cf8Schristos   case HASH('C', 0):
105*89a07cf8Schristos   case HASH('D', 0):
106*89a07cf8Schristos   case HASH('E', 0):
107*89a07cf8Schristos   case HASH('F', 0):
108*89a07cf8Schristos   case HASH('G', 0):
109*89a07cf8Schristos   case HASH('H', 0):
110*89a07cf8Schristos   case HASH('I', 0):
111*89a07cf8Schristos   case HASH('J', 0):
112*89a07cf8Schristos   case HASH('K', 0):
113*89a07cf8Schristos   case HASH('L', 0):
114*89a07cf8Schristos   case HASH('M', 0):
115*89a07cf8Schristos   case HASH('N', 0):
116*89a07cf8Schristos   case HASH('O', 0):
117*89a07cf8Schristos   case HASH('P', 0):
118*89a07cf8Schristos   case HASH('Q', 0):
119*89a07cf8Schristos   case HASH('R', 0):
120*89a07cf8Schristos   case HASH('S', 0):
121*89a07cf8Schristos   case HASH('T', 0):
122*89a07cf8Schristos   case HASH('U', 0):
123*89a07cf8Schristos   case HASH('V', 0):
124*89a07cf8Schristos   case HASH('W', 0):
125*89a07cf8Schristos   case HASH('X', 0):
126*89a07cf8Schristos   case HASH('Y', 0):
127*89a07cf8Schristos   case HASH('Z', 0):
128*89a07cf8Schristos     height = param.cap_height;
129*89a07cf8Schristos     break;
130*89a07cf8Schristos   case HASH('*', 'A'):
131*89a07cf8Schristos   case HASH('*', 'B'):
132*89a07cf8Schristos   case HASH('*', 'C'):
133*89a07cf8Schristos   case HASH('*', 'D'):
134*89a07cf8Schristos   case HASH('*', 'E'):
135*89a07cf8Schristos   case HASH('*', 'F'):
136*89a07cf8Schristos   case HASH('*', 'G'):
137*89a07cf8Schristos   case HASH('*', 'H'):
138*89a07cf8Schristos   case HASH('*', 'I'):
139*89a07cf8Schristos   case HASH('*', 'K'):
140*89a07cf8Schristos   case HASH('*', 'L'):
141*89a07cf8Schristos   case HASH('*', 'M'):
142*89a07cf8Schristos   case HASH('*', 'N'):
143*89a07cf8Schristos   case HASH('*', 'O'):
144*89a07cf8Schristos   case HASH('*', 'P'):
145*89a07cf8Schristos   case HASH('*', 'Q'):
146*89a07cf8Schristos   case HASH('*', 'R'):
147*89a07cf8Schristos   case HASH('*', 'S'):
148*89a07cf8Schristos   case HASH('*', 'T'):
149*89a07cf8Schristos   case HASH('*', 'U'):
150*89a07cf8Schristos   case HASH('*', 'W'):
151*89a07cf8Schristos   case HASH('*', 'X'):
152*89a07cf8Schristos   case HASH('*', 'Y'):
153*89a07cf8Schristos   case HASH('*', 'Z'):
154*89a07cf8Schristos     height = param.cap_height;
155*89a07cf8Schristos     break;
156*89a07cf8Schristos   case HASH('0', 0):
157*89a07cf8Schristos   case HASH('1', 0):
158*89a07cf8Schristos   case HASH('2', 0):
159*89a07cf8Schristos   case HASH('3', 0):
160*89a07cf8Schristos   case HASH('4', 0):
161*89a07cf8Schristos   case HASH('5', 0):
162*89a07cf8Schristos   case HASH('6', 0):
163*89a07cf8Schristos   case HASH('7', 0):
164*89a07cf8Schristos   case HASH('8', 0):
165*89a07cf8Schristos   case HASH('9', 0):
166*89a07cf8Schristos   case HASH('1', '2'):
167*89a07cf8Schristos   case HASH('1', '4'):
168*89a07cf8Schristos   case HASH('3', '4'):
169*89a07cf8Schristos     height = param.fig_height;
170*89a07cf8Schristos     break;
171*89a07cf8Schristos   case HASH('(', 0):
172*89a07cf8Schristos   case HASH(')', 0):
173*89a07cf8Schristos   case HASH('[', 0):
174*89a07cf8Schristos   case HASH(']', 0):
175*89a07cf8Schristos   case HASH('{', 0):
176*89a07cf8Schristos   case HASH('}', 0):
177*89a07cf8Schristos     height = param.body_height;
178*89a07cf8Schristos     depth = param.body_depth;
179*89a07cf8Schristos     break;
180*89a07cf8Schristos   case HASH('i', 's'):
181*89a07cf8Schristos     height = (param.em*3)/4;
182*89a07cf8Schristos     depth = param.em/4;
183*89a07cf8Schristos     break;
184*89a07cf8Schristos   case HASH('*', 'a'):
185*89a07cf8Schristos   case HASH('*', 'e'):
186*89a07cf8Schristos   case HASH('*', 'i'):
187*89a07cf8Schristos   case HASH('*', 'k'):
188*89a07cf8Schristos   case HASH('*', 'n'):
189*89a07cf8Schristos   case HASH('*', 'o'):
190*89a07cf8Schristos   case HASH('*', 'p'):
191*89a07cf8Schristos   case HASH('*', 's'):
192*89a07cf8Schristos   case HASH('*', 't'):
193*89a07cf8Schristos   case HASH('*', 'u'):
194*89a07cf8Schristos   case HASH('*', 'w'):
195*89a07cf8Schristos     height = param.x_height;
196*89a07cf8Schristos     break;
197*89a07cf8Schristos   case HASH('*', 'd'):
198*89a07cf8Schristos   case HASH('*', 'l'):
199*89a07cf8Schristos     height = param.asc_height;
200*89a07cf8Schristos     break;
201*89a07cf8Schristos   case HASH('*', 'g'):
202*89a07cf8Schristos   case HASH('*', 'h'):
203*89a07cf8Schristos   case HASH('*', 'm'):
204*89a07cf8Schristos   case HASH('*', 'r'):
205*89a07cf8Schristos   case HASH('*', 'x'):
206*89a07cf8Schristos   case HASH('*', 'y'):
207*89a07cf8Schristos     height = param.x_height;
208*89a07cf8Schristos     depth = param.desc_depth;
209*89a07cf8Schristos     break;
210*89a07cf8Schristos   case HASH('*', 'b'):
211*89a07cf8Schristos   case HASH('*', 'c'):
212*89a07cf8Schristos   case HASH('*', 'f'):
213*89a07cf8Schristos   case HASH('*', 'q'):
214*89a07cf8Schristos   case HASH('*', 'z'):
215*89a07cf8Schristos     height = param.asc_height;
216*89a07cf8Schristos     depth = param.desc_depth;
217*89a07cf8Schristos     break;
218*89a07cf8Schristos   case HASH('t', 's'):
219*89a07cf8Schristos     height = param.x_height;
220*89a07cf8Schristos     depth = param.desc_depth;
221*89a07cf8Schristos     break;
222*89a07cf8Schristos   case HASH('!', 0):
223*89a07cf8Schristos   case HASH('?', 0):
224*89a07cf8Schristos   case HASH('"', 0):
225*89a07cf8Schristos   case HASH('#', 0):
226*89a07cf8Schristos   case HASH('$', 0):
227*89a07cf8Schristos   case HASH('%', 0):
228*89a07cf8Schristos   case HASH('&', 0):
229*89a07cf8Schristos   case HASH('*', 0):
230*89a07cf8Schristos   case HASH('+', 0):
231*89a07cf8Schristos     height = param.asc_height;
232*89a07cf8Schristos     break;
233*89a07cf8Schristos   case HASH('`', 0):
234*89a07cf8Schristos   case HASH('\'', 0):
235*89a07cf8Schristos     height = param.asc_height;
236*89a07cf8Schristos     break;
237*89a07cf8Schristos   case HASH('~', 0):
238*89a07cf8Schristos   case HASH('^', 0):
239*89a07cf8Schristos   case HASH('a', 'a'):
240*89a07cf8Schristos   case HASH('g', 'a'):
241*89a07cf8Schristos     height = param.asc_height;
242*89a07cf8Schristos     break;
243*89a07cf8Schristos   case HASH('r', 'u'):
244*89a07cf8Schristos   case HASH('.', 0):
245*89a07cf8Schristos     break;
246*89a07cf8Schristos   case HASH(',', 0):
247*89a07cf8Schristos     depth = param.comma_depth;
248*89a07cf8Schristos     break;
249*89a07cf8Schristos   case HASH('m', 'i'):
250*89a07cf8Schristos   case HASH('-', 0):
251*89a07cf8Schristos   case HASH('h', 'y'):
252*89a07cf8Schristos   case HASH('e', 'm'):
253*89a07cf8Schristos     height = param.x_height;
254*89a07cf8Schristos     break;
255*89a07cf8Schristos   case HASH(':', 0):
256*89a07cf8Schristos     height = param.x_height;
257*89a07cf8Schristos     break;
258*89a07cf8Schristos   case HASH(';', 0):
259*89a07cf8Schristos     height = param.x_height;
260*89a07cf8Schristos     depth = param.comma_depth;
261*89a07cf8Schristos     break;
262*89a07cf8Schristos   case HASH('=', 0):
263*89a07cf8Schristos   case HASH('e', 'q'):
264*89a07cf8Schristos     height = param.x_height;
265*89a07cf8Schristos     break;
266*89a07cf8Schristos   case HASH('<', 0):
267*89a07cf8Schristos   case HASH('>', 0):
268*89a07cf8Schristos   case HASH('>', '='):
269*89a07cf8Schristos   case HASH('<', '='):
270*89a07cf8Schristos   case HASH('@', 0):
271*89a07cf8Schristos   case HASH('/', 0):
272*89a07cf8Schristos   case HASH('|', 0):
273*89a07cf8Schristos   case HASH('\\', 0):
274*89a07cf8Schristos     height = param.asc_height;
275*89a07cf8Schristos     break;
276*89a07cf8Schristos   case HASH('_', 0):
277*89a07cf8Schristos   case HASH('u', 'l'):
278*89a07cf8Schristos   case HASH('\\', '_'):
279*89a07cf8Schristos     depth = param.em/4;
280*89a07cf8Schristos     break;
281*89a07cf8Schristos   case HASH('r', 'n'):
282*89a07cf8Schristos     height = (param.em*3)/4;
283*89a07cf8Schristos     break;
284*89a07cf8Schristos   case HASH('s', 'r'):
285*89a07cf8Schristos     height = (param.em*3)/4;
286*89a07cf8Schristos     depth = param.em/4;
287*89a07cf8Schristos     break;
288*89a07cf8Schristos   case HASH('b', 'u'):
289*89a07cf8Schristos   case HASH('s', 'q'):
290*89a07cf8Schristos   case HASH('d', 'e'):
291*89a07cf8Schristos   case HASH('d', 'g'):
292*89a07cf8Schristos   case HASH('f', 'm'):
293*89a07cf8Schristos   case HASH('c', 't'):
294*89a07cf8Schristos   case HASH('r', 'g'):
295*89a07cf8Schristos   case HASH('c', 'o'):
296*89a07cf8Schristos   case HASH('p', 'l'):
297*89a07cf8Schristos   case HASH('*', '*'):
298*89a07cf8Schristos   case HASH('s', 'c'):
299*89a07cf8Schristos   case HASH('s', 'l'):
300*89a07cf8Schristos   case HASH('=', '='):
301*89a07cf8Schristos   case HASH('~', '='):
302*89a07cf8Schristos   case HASH('a', 'p'):
303*89a07cf8Schristos   case HASH('!', '='):
304*89a07cf8Schristos   case HASH('-', '>'):
305*89a07cf8Schristos   case HASH('<', '-'):
306*89a07cf8Schristos   case HASH('u', 'a'):
307*89a07cf8Schristos   case HASH('d', 'a'):
308*89a07cf8Schristos   case HASH('m', 'u'):
309*89a07cf8Schristos   case HASH('d', 'i'):
310*89a07cf8Schristos   case HASH('+', '-'):
311*89a07cf8Schristos   case HASH('c', 'u'):
312*89a07cf8Schristos   case HASH('c', 'a'):
313*89a07cf8Schristos   case HASH('s', 'b'):
314*89a07cf8Schristos   case HASH('s', 'p'):
315*89a07cf8Schristos   case HASH('i', 'b'):
316*89a07cf8Schristos   case HASH('i', 'p'):
317*89a07cf8Schristos   case HASH('i', 'f'):
318*89a07cf8Schristos   case HASH('p', 'd'):
319*89a07cf8Schristos   case HASH('g', 'r'):
320*89a07cf8Schristos   case HASH('n', 'o'):
321*89a07cf8Schristos   case HASH('p', 't'):
322*89a07cf8Schristos   case HASH('e', 's'):
323*89a07cf8Schristos   case HASH('m', 'o'):
324*89a07cf8Schristos   case HASH('b', 'r'):
325*89a07cf8Schristos   case HASH('d', 'd'):
326*89a07cf8Schristos   case HASH('r', 'h'):
327*89a07cf8Schristos   case HASH('l', 'h'):
328*89a07cf8Schristos   case HASH('o', 'r'):
329*89a07cf8Schristos   case HASH('c', 'i'):
330*89a07cf8Schristos     height = param.asc_height;
331*89a07cf8Schristos     break;
332*89a07cf8Schristos   case HASH('l', 't'):
333*89a07cf8Schristos   case HASH('l', 'b'):
334*89a07cf8Schristos   case HASH('r', 't'):
335*89a07cf8Schristos   case HASH('r', 'b'):
336*89a07cf8Schristos   case HASH('l', 'k'):
337*89a07cf8Schristos   case HASH('r', 'k'):
338*89a07cf8Schristos   case HASH('b', 'v'):
339*89a07cf8Schristos   case HASH('l', 'f'):
340*89a07cf8Schristos   case HASH('r', 'f'):
341*89a07cf8Schristos   case HASH('l', 'c'):
342*89a07cf8Schristos   case HASH('r', 'c'):
343*89a07cf8Schristos     height = (param.em*3)/4;
344*89a07cf8Schristos     depth = param.em/4;
345*89a07cf8Schristos     break;
346*89a07cf8Schristos #if 0
347*89a07cf8Schristos   case HASH('%', '0'):
348*89a07cf8Schristos   case HASH('-', '+'):
349*89a07cf8Schristos   case HASH('-', 'D'):
350*89a07cf8Schristos   case HASH('-', 'd'):
351*89a07cf8Schristos   case HASH('-', 'd'):
352*89a07cf8Schristos   case HASH('-', 'h'):
353*89a07cf8Schristos   case HASH('.', 'i'):
354*89a07cf8Schristos   case HASH('.', 'j'):
355*89a07cf8Schristos   case HASH('/', 'L'):
356*89a07cf8Schristos   case HASH('/', 'O'):
357*89a07cf8Schristos   case HASH('/', 'l'):
358*89a07cf8Schristos   case HASH('/', 'o'):
359*89a07cf8Schristos   case HASH('=', '~'):
360*89a07cf8Schristos   case HASH('A', 'E'):
361*89a07cf8Schristos   case HASH('A', 'h'):
362*89a07cf8Schristos   case HASH('A', 'N'):
363*89a07cf8Schristos   case HASH('C', 's'):
364*89a07cf8Schristos   case HASH('D', 'o'):
365*89a07cf8Schristos   case HASH('F', 'c'):
366*89a07cf8Schristos   case HASH('F', 'o'):
367*89a07cf8Schristos   case HASH('I', 'J'):
368*89a07cf8Schristos   case HASH('I', 'm'):
369*89a07cf8Schristos   case HASH('O', 'E'):
370*89a07cf8Schristos   case HASH('O', 'f'):
371*89a07cf8Schristos   case HASH('O', 'K'):
372*89a07cf8Schristos   case HASH('O', 'm'):
373*89a07cf8Schristos   case HASH('O', 'R'):
374*89a07cf8Schristos   case HASH('P', 'o'):
375*89a07cf8Schristos   case HASH('R', 'e'):
376*89a07cf8Schristos   case HASH('S', '1'):
377*89a07cf8Schristos   case HASH('S', '2'):
378*89a07cf8Schristos   case HASH('S', '3'):
379*89a07cf8Schristos   case HASH('T', 'P'):
380*89a07cf8Schristos   case HASH('T', 'p'):
381*89a07cf8Schristos   case HASH('Y', 'e'):
382*89a07cf8Schristos   case HASH('\\', '-'):
383*89a07cf8Schristos   case HASH('a', '"'):
384*89a07cf8Schristos   case HASH('a', '-'):
385*89a07cf8Schristos   case HASH('a', '.'):
386*89a07cf8Schristos   case HASH('a', '^'):
387*89a07cf8Schristos   case HASH('a', 'b'):
388*89a07cf8Schristos   case HASH('a', 'c'):
389*89a07cf8Schristos   case HASH('a', 'd'):
390*89a07cf8Schristos   case HASH('a', 'e'):
391*89a07cf8Schristos   case HASH('a', 'h'):
392*89a07cf8Schristos   case HASH('a', 'o'):
393*89a07cf8Schristos   case HASH('a', 't'):
394*89a07cf8Schristos   case HASH('a', '~'):
395*89a07cf8Schristos   case HASH('b', 'a'):
396*89a07cf8Schristos   case HASH('b', 'b'):
397*89a07cf8Schristos   case HASH('b', 's'):
398*89a07cf8Schristos   case HASH('c', '*'):
399*89a07cf8Schristos   case HASH('c', '+'):
400*89a07cf8Schristos   case HASH('f', '/'):
401*89a07cf8Schristos   case HASH('f', 'a'):
402*89a07cf8Schristos   case HASH('f', 'c'):
403*89a07cf8Schristos   case HASH('f', 'o'):
404*89a07cf8Schristos   case HASH('h', 'a'):
405*89a07cf8Schristos   case HASH('h', 'o'):
406*89a07cf8Schristos   case HASH('i', 'j'):
407*89a07cf8Schristos   case HASH('l', 'A'):
408*89a07cf8Schristos   case HASH('l', 'B'):
409*89a07cf8Schristos   case HASH('l', 'C'):
410*89a07cf8Schristos   case HASH('m', 'd'):
411*89a07cf8Schristos   case HASH('n', 'c'):
412*89a07cf8Schristos   case HASH('n', 'e'):
413*89a07cf8Schristos   case HASH('n', 'm'):
414*89a07cf8Schristos   case HASH('o', 'A'):
415*89a07cf8Schristos   case HASH('o', 'a'):
416*89a07cf8Schristos   case HASH('o', 'e'):
417*89a07cf8Schristos   case HASH('o', 'q'):
418*89a07cf8Schristos   case HASH('p', 'l'):
419*89a07cf8Schristos   case HASH('p', 'p'):
420*89a07cf8Schristos   case HASH('p', 's'):
421*89a07cf8Schristos   case HASH('r', '!'):
422*89a07cf8Schristos   case HASH('r', '?'):
423*89a07cf8Schristos   case HASH('r', 'A'):
424*89a07cf8Schristos   case HASH('r', 'B'):
425*89a07cf8Schristos   case HASH('r', 'C'):
426*89a07cf8Schristos   case HASH('r', 's'):
427*89a07cf8Schristos   case HASH('s', 'h'):
428*89a07cf8Schristos   case HASH('s', 's'):
429*89a07cf8Schristos   case HASH('t', 'e'):
430*89a07cf8Schristos   case HASH('t', 'f'):
431*89a07cf8Schristos   case HASH('t', 'i'):
432*89a07cf8Schristos   case HASH('t', 'm'):
433*89a07cf8Schristos   case HASH('~', '~'):
434*89a07cf8Schristos   case HASH('v', 'S'):
435*89a07cf8Schristos   case HASH('v', 'Z'):
436*89a07cf8Schristos   case HASH('v', 's'):
437*89a07cf8Schristos   case HASH('v', 'z'):
438*89a07cf8Schristos   case HASH('^', 'A'):
439*89a07cf8Schristos   case HASH('^', 'E'):
440*89a07cf8Schristos   case HASH('^', 'I'):
441*89a07cf8Schristos   case HASH('^', 'O'):
442*89a07cf8Schristos   case HASH('^', 'U'):
443*89a07cf8Schristos   case HASH('^', 'a'):
444*89a07cf8Schristos   case HASH('^', 'e'):
445*89a07cf8Schristos   case HASH('^', 'i'):
446*89a07cf8Schristos   case HASH('^', 'o'):
447*89a07cf8Schristos   case HASH('^', 'u'):
448*89a07cf8Schristos   case HASH('`', 'A'):
449*89a07cf8Schristos   case HASH('`', 'E'):
450*89a07cf8Schristos   case HASH('`', 'I'):
451*89a07cf8Schristos   case HASH('`', 'O'):
452*89a07cf8Schristos   case HASH('`', 'U'):
453*89a07cf8Schristos   case HASH('`', 'a'):
454*89a07cf8Schristos   case HASH('`', 'e'):
455*89a07cf8Schristos   case HASH('`', 'i'):
456*89a07cf8Schristos   case HASH('`', 'o'):
457*89a07cf8Schristos   case HASH('`', 'u'):
458*89a07cf8Schristos   case HASH('~', 'A'):
459*89a07cf8Schristos   case HASH('~', 'N'):
460*89a07cf8Schristos   case HASH('~', 'O'):
461*89a07cf8Schristos   case HASH('~', 'a'):
462*89a07cf8Schristos   case HASH('~', 'n'):
463*89a07cf8Schristos   case HASH('~', 'o'):
464*89a07cf8Schristos   case HASH('\'', 'A'):
465*89a07cf8Schristos   case HASH('\'', 'C'):
466*89a07cf8Schristos   case HASH('\'', 'E'):
467*89a07cf8Schristos   case HASH('\'', 'I'):
468*89a07cf8Schristos   case HASH('\'', 'O'):
469*89a07cf8Schristos   case HASH('\'', 'U'):
470*89a07cf8Schristos   case HASH('\'', 'a'):
471*89a07cf8Schristos   case HASH('\'', 'c'):
472*89a07cf8Schristos   case HASH('\'', 'e'):
473*89a07cf8Schristos   case HASH('\'', 'i'):
474*89a07cf8Schristos   case HASH('\'', 'o'):
475*89a07cf8Schristos   case HASH('\'', 'u')
476*89a07cf8Schristos   case HASH(':', 'A'):
477*89a07cf8Schristos   case HASH(':', 'E'):
478*89a07cf8Schristos   case HASH(':', 'I'):
479*89a07cf8Schristos   case HASH(':', 'O'):
480*89a07cf8Schristos   case HASH(':', 'U'):
481*89a07cf8Schristos   case HASH(':', 'Y'):
482*89a07cf8Schristos   case HASH(':', 'a'):
483*89a07cf8Schristos   case HASH(':', 'e'):
484*89a07cf8Schristos   case HASH(':', 'i'):
485*89a07cf8Schristos   case HASH(':', 'o'):
486*89a07cf8Schristos   case HASH(':', 'u'):
487*89a07cf8Schristos   case HASH(':', 'y'):
488*89a07cf8Schristos   case HASH(',', 'C'):
489*89a07cf8Schristos   case HASH(',', 'c'):
490*89a07cf8Schristos #endif
491*89a07cf8Schristos   }
492*89a07cf8Schristos }
493