1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
%(c) 1990,91,2022 by Joel M. Hoffman
% You may freely use, modify and/or distribute this file.
%hclassic. Modernized Classical Hebrew font. Version 0.9.
%calls the file base.
%last update: 5/15/91 by JMH
% modified for use with ArabTeX: 5/25/96 Klaus Lagally
% renamed "hcbase_pc" to "hcbase": 1999/04/10 KL
% changed license to all-permissive: 2022/06/08 Karl Berry (per Joel)
%This calls the file ``hcbase_pc'' to create a general purpose classical
%Hebrew font. See that file for more information.
mode_def testing=
pixels_per_inch:=300*4;
blacker:=.1;
o_correction:=1;
fillin:=.01;
proofing:=2;
fontmaking:=0;
tracingtitles:=1;
enddef;
if unknown mode:
mode:=localfont; fi
mode_setup;
if mode=testing: screenstrokes; fi
%I used large units, and then later scaled the font down to size. -JMH
%u#:=1/100in#; %ten units to a square.
u#:=1/384.16in#; %but account for magnification.(1/384.16)
%u#:=1/295.16in#;%but account for magnification and hp vs. epson
let_height#:=35u#; %height of a standard letter.
asc_height#:=25u#; %ascender height (for lamed).
desc_height#:=16u#; %descender height(depth?).
let_width#:=31u#; %width of a standard letter. (31u#)
serif_height#:=3u#; %height of a standard serif.(2.5u#)
serif_width#:=2.5u#; %width of a standard serif. (2.5u#)
chupchiklength#:=6u#;
vowel_width#:=14u#; %width of vowels under the letters.
vowel_height#:=12u#; %How tall the vowels are.
vowel_depth#:=8u#; %the space between the baseline and the vowels.
let_fit#:=3u#; %space to left and right of letter (.5u#)
vowel_fit#:=1.4u#; %space to the left and right of vowel(1.4u#);
thick#:=8.5u#; %thickness of thick lines. (7.5u#)
thin#:=3u#; %thickness of thin lines. (2u#)
hairline#:=1u#; %VERY thin lines (.3u#)
vowel_stroke#:=4u#; %pen to use
dot#:=4u#; %diameter of dots (dagesh, vowels, etc)
squaredot#:=10u#;
overshoot#:=3u#; %overshoot for bet, taf.
tightness:=.74; %tightness for right_curve; (.78)
baseline_tilt:=60; %degrees for the tilt in baseline lines.
head_tilt#:=.7u#; %tilt for the head on the zion, etc.
sss:=.7; %Shrink the serif's width by this amount on a shin.
%(s)hrink (s)hin's (s)erif
define_pixels(let_height,asc_height,desc_height,let_width,head_tilt);
define_pixels(vowel_height,vowel_width,vowel_depth,vowel_height);
define_pixels(squaredot);
define_whole_pixels(let_fit,vowel_fit);
define_pixels(serif_height,serif_width,chupchiklength);
define_pixels(overshoot);
define_whole_blacker_pixels(thick,thin,dot,hairline,vowel_stroke);
def serifpen = pickup pencircle xscaled thin yscaled thick; enddef;
%def serifpen = pickup pencircle xscaled hairline yscaled thick; enddef;
def vowelpen = pickup pensquare scaled vowel_stroke; enddef;
%this is from the METAFONT book:
shrink_fit:=1+hround(2let_fit#*hppp)-2let_fit;
def normal_adjust_fit(expr left_adjustment,right_adjustment) =
l:=-hround(left_adjustment*hppp)-let_fit;
interim xoffset:=-l;
charwd:=charwd+2let_fit#+left_adjustment+right_adjustment;
r:=l+hround(charwd*hppp)-shrink_fit;
w:=r-hround(right_adjustment*hppp)-let_fit;
enddef;
let af=normal_adjust_fit;
def negate_af = af(-let_fit#,-let_fit#); enddef;
def vowel_af = af(-let_fit#+vowel_fit#,-let_fit#+vowel_fit#); enddef;
extra_endchar := extra_endchar&"r:=r+shrink_fit;w:=r-l;";
def top_serif (suffix i,j) = %draw a serif at point z.i, using z.j
serifpen;
x.j = x.i-serif_width; y.j = y.i + serif_height;
draw (x.i+serif_width,y.i) ... z.i .. z.j;
enddef;
def bottom_serif (suffix i,j) = %draw an inverse serif at point z.i, with z.j
serifpen;
x.j = x.i+serif_width;y.j=y.i-serif_height;
draw (x.i-serif_width,y.i) ... z.i .. z.j;
enddef;
def roundoff_bottom (suffix i) = %round off point z.i, assuming thin lines.
fill fullcircle scaled thin shifted z.i;
enddef;
def right_curve(suffix i,j,k,l) = %call general_right_curve
general_right_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
enddef;
def left_curve(suffix i,j,k,l) = %call general_left_curve
general_left_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
enddef;
def general_right_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
penpos i (sa,90);
penpos j (sb,90);
penpos k (sc,0);
penpos l (sd,0);
penstroke z.l.e{up} ... {up}z.k.e ... z.j.e{left} ...{left} z.i.e;
enddef;
def general_left_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
penpos i (sa,-90);
penpos j (sb,-90);
penpos k (sc,0);
penpos l (sd,0);
penstroke z.i.e{right}...{right}z.j.e...z.k.e{up}...{up}z.l.e;
enddef;
def any_curve (expr adjust,thick,thin) (suffix i,j,k,l,m) =
%draw from i to m via k, using j and l, using specified values for
% withds.
z.j=(tightness/adjust)[z.i,z.k];
z.l=(tightness/adjust)[z.m,z.k];
penpos i (thick,angle(z.k-z.i)+90);
penpos j (thick,angle(z.k-z.i)+90);
penpos l (thin,angle(z.m-z.k)+90);
penpos m (thin,angle(z.m-z.k)+90);
penstroke z.i.e{z.k-z.i}
... {z.k-z.i}z.j.e
... z.l.e{z.m-z.k}
... {z.m-z.k}z.m.e;
enddef;
def baseline (expr a,b) = %draw a baseline
pickup penrazor scaled thick rotated baseline_tilt;
draw a --- b;
enddef;
baselinewidth:= sind(baseline_tilt)*thick;
def thickpen = pickup pencircle scaled thick; enddef;
def thinpen = pickup pencircle scaled thin; enddef;
def hairlinepen = pickup pencircle scaled hairline; enddef;
def baselinepen = pickup penrazor scaled thick rotated baseline_tilt; enddef;
def dotpen = pickup pencircle scaled dot; enddef;
def squarepen = pickup penrazor scaled squaredot rotated 45; enddef;
def dotat (expr z) = %put at dot at z
fill fullcircle scaled dot shifted z;
enddef;
def chupchik(suffix i,j)(expr ang) = %draw a chupchik from z at angle ang
thinpen;
z.i=z.j+dir(ang)*chupchiklength;
draw z.i--z.j;
enddef;
def mycutoff(expr a,b) = %cutoff with culling
cullit;
cutoff(a,b);
cullit;
enddef;
%input hcbase_pc; % KL 25.05.96
input hcbase; % 1999/04/10 KL
end; % KL 03.11.96
|