METAFONT source for OCR-A
Tor Lillqvist
tml at santra.UUCP
Fri May 9 19:29:38 AEST 1986
Here are METAFONT sources for the OCR-A
'alphanumeric character sets for optical
recognition' ISO/R 1073-1969.
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# OCR-A.I.mf
# OCR-A.II.mf
# OCR-A.III.mf
# OCR-A.IV.mf
# OCR-A.mf
# This archive created: Fri May 9 03:10:29 1986
export PATH; PATH=/bin:$PATH
if test -f 'OCR-A.I.mf'
then
echo shar: will not over-write existing file "'OCR-A.I.mf'"
else
cat << \SHAR_EOF > 'OCR-A.I.mf'
% OCR-A Size I
H# = 2.4mm#;
W# = 1.4mm#;
T# = .35mm#;
L# = 3.73mm#;
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.II.mf'
then
echo shar: will not over-write existing file "'OCR-A.II.mf'"
else
cat << \SHAR_EOF > 'OCR-A.II.mf'
% OCR-A Size II
H# = 2.84mm#;
W# = 1.4mm#;
T# = .35mm#;
L# = 4.42mm#;
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.III.mf'
then
echo shar: will not over-write existing file "'OCR-A.III.mf'"
else
cat << \SHAR_EOF > 'OCR-A.III.mf'
% OCR-A Size III
H# = 3.20mm#;
W# = 1.52mm#;
T# = .38mm#;
L# = 4.98mm#;
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.IV.mf'
then
echo shar: will not over-write existing file "'OCR-A.IV.mf'"
else
cat << \SHAR_EOF > 'OCR-A.IV.mf'
% OCR-A Size IV
H# = 3.80mm#;
W# = 2.04mm#;
T# = .51mm#;
L# = 5.91mm#;
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.mf'
then
echo shar: will not over-write existing file "'OCR-A.mf'"
else
cat << \SHAR_EOF > 'OCR-A.mf'
% OCR-A Optical Character Recognition Font
%
% Coded in METAFONT84 by Tor Lillqvist, VTT/ATK (Technical Research Centre
% of Finland, Computing Services)
% (tml at fingate.BITNET, tml at santra.UUCP, mcvax!santra!tml)
%
% Based on ISO Recommendation R1073, 1st ed., May 1969 (probably
% obsolete by now).
%
% Labels are in French :-)
%
mode_setup;
letter_fit# := 1.25T#;
define_whole_pixels(W,H,L,T,letter_fit);
def adjust_fit =
l:=-letter_fit;
interim xoffset:=-l;
charwd:=charwd+2letter_fit#;
r:=l+hround(charwd*hppp);
w:=r-letter_fit;
enddef;
pickup pencircle scaled T;
OCRpen := savepen;
extra_beginchar := extra_beginchar & "adjust_fit;";
extra_endchar := extra_endchar & "penlabels(range 1 thru 20);";
% The join macro performs the joining of two strokes so that the
% pen centre curvature radius is join_radius.
tertiarydef p join q =
begingroup
pair ipq_; ipq_ := p intersectionpoint q;
pair dirv[];
dirv0 = dir angle direction (length p) of p;
dirv1 = dir angle direction 0 of q;
if length (dirv1 - dirv0) < 1/10:
p .. q
else:
path par[];
k_ := if ypart (dirv1 rotated -angle dirv0) > 0: 90 else: -90 fi;
forsuffixes $=0,1:
par$ := ((ipq_ - (20join_radius*dirv$))--
(ipq_ + (20join_radius*dirv$)))
shifted ((join_radius*dirv$) rotated k_);
endfor;
numeric pt_,qt_;
(pt_,qt_) = par0 intersectiontimes par1;
if pt_ < 0: errmessage "No intersection curvature center found"; fi
pair icc_; icc_ = point pt_ of par0;
numeric cp_,cpp_,cq_,cqp_;
(cp_, cpp_) = p intersectiontimes
(icc_--icc_+(2join_radius*dirv0 rotated -k_));
(cq_, cqp_) = q intersectiontimes
(icc_--icc_+(2join_radius*dirv1 rotated -k_));
subpath (0,cp_) of p ..
(icc_ + join_radius*unitvector(dirv0-dirv1)) ..
subpath (cq_, length q) of q
fi
endgroup
enddef;
def fill_corners(text t) =
begingroup
forsuffixes $=t:
fill unitsquare shifted (-.5,-.5) scaled T shifted z$;
endfor
endgroup
enddef;
% The angle_fill_corner fills the corners like in the characters M and N
def angle_fill_corner(suffix a,b,c) =
begingroup
save p; path p.q,p.w,p.e,p.r;
p.q = (z.a--z.b+(z.b-z.a)) shifted (T/2*unitvector (z.b-z.a) rotated 90);
p.w = (z.a--z.b+(z.b-z.a)) shifted (T/2*unitvector (z.b-z.a) rotated -90);
p.e = (z.b-(z.c-z.b)--z.c) shifted (T/2*unitvector (z.c-z.b) rotated 90);
p.r = (z.b-(z.c-z.b)--z.c) shifted (T/2*unitvector (z.c-z.b) rotated -90);
save q; pair q.u,q.l;
q.u = p.q intersectionpoint p.e;
q.l = p.w intersectionpoint p.r;
fill point 0 of p.q -- q.u -- point 1 of p.e -- point 1 of p.r --
q.l -- point 0 of p.w -- cycle;
endgroup
enddef;
% The curvature radiuses used in some characters
r1# = H#/16 * ((7H#)/(6W#) + sqrt(((7H#)/(6W#))**2 + 1));
r2# = W#/8 * ((6W#)/(7H#) + sqrt(((6W#)/(7H#))**2 + 1));
r3# = W#/8 * (1 - H#/(2W#) + sqrt((H#/(2W#))**2 + 1));
r4# = H#/16 * (1 - (4W#)/(3H#) + sqrt(((4W#)/(3H#))**2 + 1));
r5# = H#/16 * (1 - (5H#)/(6W#) + sqrt(((5H#)/(6W#))**2 + 1));
r6# = W#/8 * (1 - (6W#)/(5H#) + sqrt(((6W#)/(5H#))**2 + 1));
define_pixels(r1,r2,r3,r4,r5,r6);
def OCRchar(expr code, wd, ht) =
beginchar(code, wd, ht, 0);
pickup OCRpen;
enddef;
OCRchar("1", W#, H#); "Chiffre UN";
x1 = 0; y1 = 0;
x2 = W; y2 = 0;
x3 = W; y3 = 3/8H;
x4 = W/2; y4 = H;
x5 = 0; y5 = H;
draw z1--z2--z3; draw .5[z1,z2]--z4--z5;
fill_corners(4);
endchar;
OCRchar("2", W#, H#); "Chiffre DEUX";
x1 = 0; y1 = H;
x2 = W; y2 = H;
x3 = W; y3 = H/2;
x4 = 0; y4 = H/2;
x5 = 0; y5 = 0;
x6 = W; y6 = 0;
join_radius := T/2;
draw (z1--z2) join ((z2--z3) join
((z3--z4) join (z4--z5--z6)));
fill_corners(5);
endchar;
OCRchar("3", W#, H#); "Chiffre TROIS";
x1 = 0; y1 = H;
x2 = W; y2 = y1;
x3 = x2; y3 = H/2;
x4 = W/4; y4 = y3;
x5 = x2; y5 = 0;
x6 = x1; y6 = y5;
join_radius := T/2;
draw (z1--z2) join (z2--.6[z2,z3]);
join_radius := T;
draw (.4[z2,z3]--z3) join (z3--z4);
draw (z4--z3) join (z3--.6[z3,z5]);
join_radius := T/2;
draw (.4[z3,z5]--z5) join (z5--z6);
endchar;
OCRchar("4", 7/8W#, H#); "Chiffre QUATRE";
x1 = 0; y1 = H;
x2 = x1; y2 = 3/8H;
x3 = 7/8W; y3 = y2;
x4 = 3/4W; y4 = 0;
x5 = x4; y5 = 7/8H;
draw z1--z2--z3; draw z4--z5;
endchar;
OCRchar("5", W#, H#); "Chiffre CINQ";
x1 = 0; y1 = 1/16H;
x2 = 1/4W; y2 = 0;
x3 = W; y3 = y2;
x4 = x3; y4 = 1/2H;
x5 = x2; y5 = y4;
x6 = x2; y6 = H;
x7 = x3; y7 = y6;
join_radius := T;
draw (z1--z2) join (z2--.6[z2,z3]);
join_radius := T/2;
draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
draw (.4[z3,z4]--z4) join (z4--z5--z6--z7);
fill_corners(5,6);
endchar;
OCRchar("6", W#, H#); "Chiffre SIX";
x1 = 1/8W; y1 = H;
x2 = 0; y2 = y1;
x3 = x2; y3 = 0;
x4 = W; y4 = y3;
x5 = x4; y5 = 3/8H;
x6 = x2; y6 = y5;
draw z1--z2--z3--z4--z5--z6;
endchar;
OCRchar("7", W#, H#); "Chiffre SEPT";
x1 = 0; y1 = 15/16H;
x2 = x1; y2 = H;
x3 = W; y3 = y2;
x4 = x3; y4 = 5/8H;
x5 = 1/2W; y5 = 3/8H;
x6 = x5; y6 = 0;
draw z1--z2--z3--z4--z5--z6;
fill_corners(3);
endchar;
OCRchar("8", W#, H#); "Chiffre HUIT";
x1 = 0; y1 = 0;
x2 = W; y2 = y1;
x3 = x2; y3 = 1/2H;
x4 = x1; y4 = y3;
x5 = 1/4W; y5 = y3;
x6 = 3/4W; y6 = y5;
x7 = x6; y7 = H;
x8 = x5; y8 = y7;
join_radius := T/2;
draw (.4[z1,z2]--z2) join (z2--.6[z2,z3]);
draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
draw (.4[z3,z4]--z4) join (z4--.6[z4,z1]);
draw (.4[z4,z1]--z1) join (z1--.6[z1,z2]);
draw z6--z7--z8--z5;
endchar;
OCRchar("9", W#, H#); "Chiffre NEUF";
x1 = 7/8W; y1 = 0;
x2 = W; y2 = y1;
x3 = x2; y3 = H;
x4 = 0; y4 = y3;
x5 = x4; y5 = 5/8H;
x6 = x2; y6 = y5;
draw z1--z2--z3--z4--z5--z6;
endchar;
OCRchar("0", W#, H#); "Chiffre ZERO";
x1 = 0; y1 = 0;
x2 = W; y2 = y1;
x3 = x2; y3 = H;
x4 = x1; y4 = y3;
join_radius := T/2;
draw (.4[z1,z2]--z2) join (z2--.6[z2,z3]);
draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
draw (.4[z3,z4]--z4) join (z4--.6[z4,z1]);
draw (.4[z4,z1]--z1) join (z1--.6[z1,z2]);
endchar;
OCRchar(0, W#, H#); "Symbole CROCHET";
x1 = 0; y1 = 3/8H;
x2 = x1; y2 = 0;
x3 = 1/2W; y3 = y2;
x4 = x3; y4 = H;
x5 = W; y5 = y4;
x6 = x5; y6 = 5/8H;
draw z1--z2--z3--z4--z5--z6;
fill_corners(2,3,4,5);
endchar;
OCRchar(1, W#, H#); "Symbole FOURCHETTE";
x1 = 0; y1 = H;
x2 = x1; y2 = 1/2H;
x3 = W; y3 = y2;
x4 = x3; y4 = y1;
x5 = 1/2W; y5 = y2;
x6 = x5; y6 = 0;
draw z1--z2--z3--z4;
fill_corners(2,3);
draw z5--z6;
endchar;
OCRchar(2, W#, H#); "Symbole CHAISE";
x1 = 0; y1 = 0;
x2 = x1; y2 = 1/2H;
x3 = W; y3 = y2;
x4 = x3; y4 = y1;
x5 = x3; y5 = H;
draw z1--z2--z3;
fill_corners(2);
draw z4--z5;
endchar;
beginchar("|", 0, (H#+L#)/2, (L#-H#)/2); "Trait vertical";
pickup OCRpen;
x1 = 0; y1 = (H-L)/2;
x2 = x1; y2 = (H+L)/2;
cutdraw z1--z2;
endchar;
OCRchar("A", W#, H#); "Lettre A";
x1 = 0; y1 = 0;
x2 = 1/2W; y2 = H;
x3 = W; y3 = y1;
z4 = 1/4[z1,z2];
z5 = 1/4[z3,z2];
draw z1--z2--z3; draw z4--z5;
endchar;
OCRchar("B", W#, H#); "Lettre B";
x1 = 0; y1 = 0;
x2 = W; y2 = y1;
x3 = x2; y3 = 1/2H;
x4 = x1; y4 = y3;
x5 = x2; y5 = H;
x6 = x1; y6 = y5;
join_radius := 3/2T;
draw (z1--z2) join (z2--.5[z2,z3]);
draw (.5[z2,z3]--z3) join (z3--z4);
draw (z4--z3) join (z3--.5[z3,z5]);
draw (.5[z3,z5]--z5) join (z5--z6);
draw z1--z6;
fill_corners(1,6);
endchar;
OCRchar("C", W#, H#); "Lettre C";
x1 = W; y1 = H;
x2 = 3/8W; y2 = y1;
x3 = 0; y3 = y4 + 1/8H;
x4 = x3; y4 = 7/16H;
x5 = x2; y5 = 0;
x6 = x1; y6 = y5;
z7 = (z2--z3+(z3-z2)) intersectionpoint (z5--z4+(z4-z5));
join_radius := T;
draw (z1--z2) join (z2--.6[z2,z3]);
draw (z6--z5) join (z5--.6[z5,z4]);
join_radius := r1;
draw (.4[z2,z3]--z7) join (z7--.6[z4,z5]);
endchar;
OCRchar("D", W#, H#); "Lettre D";
x1 = 0; y1 = 0;
x2 = 1/4W; y2 = y1;
x3 = 5/8W; y3 = y1;
x4 = W; y4 = 7/16H;
x5 = x4; y5 = y4 + 1/8H;
x6 = x3; y6 = H;
x7 = x2; y7 = y6;
x8 = x1; y8 = y6;
z9 = (z3--z4+(z4-z3)) intersectionpoint (z6--z5+(z5-z6));
join_radius := T;
draw (z1--z3) join (z3--.6[z3,z4]);
draw (z8--z6) join (z6--.6[z6,z5]);
join_radius := r1;
draw (.4[z3,z4]--z9) join (z9--.6[z5,z6]);
draw z2--z7;
endchar;
OCRchar("E", W#, H#); "Lettre E";
x1 = W; y1 = 0;
x2 = 0; y2 = y1;
x3 = x2; y3 = 1/2H;
x4 = 1/2W; y4 = y3;
x5 = x2; y5 = H;
x6 = x1; y6 = y5;
draw z1--z2--z3--z4; draw z3--z5--z6;
fill_corners(2,5);
endchar;
OCRchar("F", W#, H#); "Lettre F";
x1 = 0; y1 = 0;
x2 = x1; y2 = 5/8H;
x3 = 3/4W; y3 = y2;
x4 = x1; y4 = H;
x5 = W; y5 = y4;
draw z1--z2--z3; draw z2--z4--z5;
fill_corners(4);
endchar;
OCRchar("G", W#, H#); "Lettre G";
x1 = 5/8W; y1 = 3/8H;
x2 = W; y2 = y1;
x3 = x2; y3 = 0;
x4 = 0; y4 = y3;
x5 = x4; y5 = 5/8H;
x6 = 1/2W; y6 = H;
x7 = x2; y7 = y6;
join_radius := T;
draw (z1--z2--z3) join (z3--.6[z3,z4]);
draw (.4[z3,z4]--z4) join (z4--.6[z4,z5]);
join_radius := 3/2T;
draw (.4[z4,z5]--z5) join (z5--.6[z5,z6]);
join_radius := T;
draw (.4[z5,z6]--z6) join (z6--z7);
fill_corners(2);
endchar;
OCRchar("H", W#, H#); "Lettre H";
x1 = 0; y1 = 0;
x2 = x1; y2 = H;
x3 = W; y3 = y1;
x4 = x3; y4 = y2;
draw z1--z2; draw z3--z4; draw .5[z1,z2]--.5[z3,z4];
endchar;
OCRchar("I", W#, H#); "Lettre I";
x1 = 0; y1 = 0;
x2 = x1; y2 = H;
x3 = W; y3 = y1;
x4 = x3; y4 = y2;
draw z1--z3; draw z2--z4; draw .5[z1,z3]--.5[z2,z4];
endchar;
OCRchar("J", 3/4W#, H#); "Lettre J";
x1 = 0; y1 = 3/8H;
x2 = x1; y2 = 0;
x3 = 3/4W; y3 = y2;
x4 = x3; y4 = H;
join_radius := T;
draw (z1--z2) join ((z2--z3) join (z3--z4));
endchar;
OCRchar("K", W#, H#); "Lettre K";
x1 = 0; y1 = 0;
x2 = x1; y2 = H;
x3 = W; y3 = y1;
x4 = x3; y4 = y2;
draw z1--z2; draw .5[z1,z2]--z3; draw .5[z1,z2]--z4;
endchar;
OCRchar("L", W#, H#); "Lettre L";
x1 = 0; y1 = H;
x2 = x1; y2 = 0;
x3 = W; y3 = y2;
draw z1--z2--z3;
fill_corners(2);
endchar;
OCRchar("M", W#, H#); "Lettre M";
x1 = 0; y1 = 0;
x2 = x1; y2 = H;
x3 = 1/8W; y3 = y2;
x4 = 1/2W; y4 = y5+1/16H;
x5 = x4; y5 = 5/8H;
x6 = W-1/8W; y6 = y2;
x7 = W; y7 = y2;
x8 = x7; y8 = y1;
draw z1--z2--z3--z4--z5--z4--z6--z7--z8;
fill_corners(2,7);
angle_fill_corner(2,3,4);
angle_fill_corner(4,6,7);
endchar;
OCRchar("N", W#, H#); "Lettre N";
x1 = 0; y1 = 0;
x2 = x1; y2 = H;
x3 = 1/8W; y3 = y2;
x4 = W-1/8W; y4 = y1;
x5 = W; y5 = y1;
x6 = x5; y6 = y2;
draw z1--z2--z3--z4--z5--z6;
fill_corners(2,5);
angle_fill_corner(2,3,4);
angle_fill_corner(3,4,5);
endchar;
OCRchar("O", W#, H#); "Lettre O";
x1 = 0; y1 = 7/16H;
x2 = 3/8W; y2 = 0;
x3 = x2+1/4W; y3 = y2;
x4 = W; y4 = y1;
x5 = x4; y5 = y4+1/8H;
x6 = x3; y6 = H;
x7 = x2; y7 = y6;
x8 = x1; y8 = y5;
z10 = (z1--z2+(z2-z1)) intersectionpoint (z3+(z3-z4)--z4);
z11 = (z3--z4+(z4-z3)) intersectionpoint (z5+(z5-z6)--z6);
z12 = (z5--z6+(z6-z5)) intersectionpoint (z7+(z7-z8)--z8);
z13 = (z7--z8+(z8-z7)) intersectionpoint (z1+(z1-z2)--z2);
join_radius := r2;
draw (.4[z13,z10]--z10) join (z10--.6[z10,z11]);
draw (.4[z11,z12]--z12) join (z12--.6[z12,z13]);
join_radius := r1;
draw (.4[z10,z11]--z11) join (z11--.6[z11,z12]);
draw (.4[z12,z13]--z13) join (z13--.6[z13,z10]);
picture O_char; O_char := currentpicture;
endchar;
OCRchar("P", W#, H#); "Lettre P";
x1 = 0; y1 = 0;
x2 = x1; y2 = 7/16H;
x3 = x1; y3 = H;
x4 = W; y4 = y3;
x5 = x4; y5 = y2;
join_radius := T;
draw (z1--z3--z4) join (z4--.6[z4,z5]);
draw (.4[z4,z5]--z5) join (z5--z2);
fill_corners(3);
endchar;
OCRchar("Q", W#, H#); "Lettre Q";
x1 = 0; y1 = 0;
x2 = 1/4W; y2 = y1;
x3 = W; y3 = 3/8H;
x4 = x3; y4 = H;
x5 = W-1/4W; y5 = y4;
x6 = x1; y6 = 5/8H;
x7 = 1/2W; y7 = y3;
x8 = x5; y8 = y1;
x9 = x3; y9 = y1;
z10 = (z6--z1+(z1-z6)) intersectionpoint (z2-(z3-z2)--z3);
z11 = (z3--z4+(z4-z3)) intersectionpoint (z5-(z6-z5)--z6);
join_radius := r3;
draw (.4[z6,z10]--z10) join (z10--.6[z10,z3]);
draw (.4[z3,z11]--z11) join (z11--.6[z11,z6]);
join_radius := T;
draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
draw (.4[z5,z6]--z6) join (z6--.6[z6,z1]);
draw z7--z8--z9;
angle_fill_corner(7,8,9);
endchar;
OCRchar("R", W#, H#); "Lettre R";
x1 = 0; y1 = 0;
x2 = x1; y2 = 5/8H;
x3 = x1; y3 = H;
x4 = W; y4 = y3;
x5 = x4; y5 = y2;
x6 = W-5/8W; y6 = y2;
x7 = x4; y7 = y1;
join_radius := T;
draw (z1--z3--z4) join (z4--.6[z4,z5]);
draw (.4[z4,z5]--z5) join (z5--z2);
draw z6--z7;
fill_corners(3);
endchar;
OCRchar("S", W#, H#); "Lettre S";
x1 = 0; y1 = 1/8H;
x2 = x1; y2 = 0;
x3 = W; y3 = y2;
x4 = x3; y4 = y1;
x5 = x1; y5 = H-1/8H;
x6 = x1; y6 = H;
x7 = x3; y7 = y6;
x8 = x3; y8 = y5;
path p; p = z4-(z5-z4)--z5+(z5-z4);
z10 = (z2--z3+(z3-z2)) intersectionpoint p;
z11 = (z6-(z7-z6)--z7) intersectionpoint p;
join_radius := 1/8H;
draw (z1--z2) join (z2--.6[z2,z3]);
draw (.4[z6,z7]--z7) join (z7--z8);
join_radius := r4;
draw (.4[z2,z3]--z10) join (z10--.6[z10,z11]);
draw (.4[z10,z11]--z11) join (z11--.6[z6,z7]);
endchar;
OCRchar("T", W#, H#); "Lettre T";
x1 = 1/2W; y1 = 0;
x2 = x1; y2 = H;
x3 = 0; y3 = H-1/8H;
x4 = x3; y4 = y2;
x5 = W; y5 = y4;
x6 = x5; y6 = y3;
draw z1--z2;
draw z3--z4--z5--z6;
fill_corners(4,5);
endchar;
OCRchar("U", W#, H#); "Lettre U";
x1 = 0; y1 = H;
x2 = x1; y2 = 0;
x3 = W; y3 = y2;
x4 = x3; y4 = y1;
join_radius := T;
draw ((z1--z2) join (z2--z3)) join (z3--z4);
endchar;
OCRchar("V", W#, H#); "Lettre V";
x1 = 0; y1 = H;
x2 = x1; y2 = 3/4H;
x3 = 1/2W; y3 = 0;
x4 = W; y4 = y2;
x5 = x4; y5 = y1;
draw z1--z2--z3--z4--z5;
angle_fill_corner(1,2,3); angle_fill_corner(3,4,5);
endchar;
OCRchar("W", W#, H#); "Lettre W";
x1 = 0; y1 = H;
x2 = x1; y2 = 1/8H;
x3 = 1/8W; y3 = 0;
x4 = 3/8W; y4 = y3;
x5 = 1/2W; y5 = y2;
x6 = x5; y6 = 5/8H;
x7 = W-x4; y7 = y4;
x8 = W-x3; y8 = y3;
x9 = W; y9 = y2;
x10 = x9; y10 = y1;
draw z1--z2--z3--z4--z5--z6; draw z5--z7--z8--z9--z10;
angle_fill_corner(1,2,3); angle_fill_corner(8,9,10);
endchar;
OCRchar("X", W#, H#); "Lettre X";
x1 = 0; y1 = H;
x2 = W; y2 = 0;
x3 = x1; y3 = y2;
x4 = x2; y4 = y1;
draw z1--z2; draw z3--z4;
endchar;
OCRchar("Y", W#, H#); "Lettre Y";
x1 = 0; y1 = H;
x2 = x1; y2 = H-1/8H;
x3 = 1/2W; y3 = 1/2H;
x4 = x3; y4 = 0;
x5 = W; y5 = y2;
x6 = x5; y6 = y1;
draw z1--z2--z3--z4; draw z3--z5--z6;
angle_fill_corner(1,2,3); angle_fill_corner(3,5,6);
endchar;
OCRchar("Z", W#, H#); "Lettre Z";
x1 = 0; y1 = H;
x2 = W; y2 = y1;
x3 = x1; y3 = 0;
x4 = x2; y4 = y3;
draw z1--z2--z3--z4;
fill_corners(2,3);
unfill unitsquare shifted (-1.5,-.5) scaled T
rotated (angle (z2-z3) - 90) shifted z3;
unfill unitsquare shifted (.5,-.5) scaled T
rotated (angle (z2-z3) - 90) shifted z2;
endchar;
OCRchar(3, W#, H#); "Lettre \AA";
x1 = 0; y1 = 0;
x2 = 1/2W; y2 = H;
z3 = 1/4[z1,z2];
z4 = 3/4[z1,z2];
x5 = W; y5 = y1;
z6 = 1/4[z5,z2];
z7 = 3/4[z5,z2];
x8 = 1/8W; y8 = y4;
x9 = x8; y9 = y2;
x10 = 7/8W; y10 = y9;
x11 = x10; y11 = y8;
draw z1--z4; draw z5--z7; draw z3--z6;
join_radius := T/2;
draw (.4[z8,z9]--z9) join (z9--.6[z9,z10]);
draw (.4[z9,z10]--z10) join (z10--.6[z10,z11]);
draw (.4[z10,z11]--z11) join (z11--.6[z11,z8]);
draw (.4[z11,z8]--z8) join (z8--.6[z8,z9]);
endchar;
OCRchar(4, W#, H#); "Lettre \"&ditto&"A";
x1 = 0; y1 = 0;
x2 = 1/2W; y2 = 3/4H;
x3 = W; y3 = y1;
z4 = 3/16[z1,z2];
z5 = 3/16[z3,z2];
x6 = x1; y6 = H;
x7 = x6; y7 = H-1/8H;
x8 = x3; y8 = y6;
x9 = x8; y9 = y7;
draw z1--z2--z3; draw z4--z5; draw z6--z7; draw z8--z9;
endchar;
OCRchar(29, W#, H#); "Lettre \AE";
x1 = 0; y1 = 0;
x2 = 1/2W; y2 = H;
x3 = 5/8W; y3 = y2;
x4 = x3; y4 = y1;
z5 = 1/4[z1,z2];
z6 = 1/4[z4,z3];
x7 = W; y7 = y2;
z8 = 1/2[z4,z3];
x9 = x7; y9 = y8;
x10 = x7; y10 = y1;
draw z1--z2--z3--z4--z10; draw z5--z6;
draw z3--z7; draw z8--z9;
endchar;
OCRchar(5, W#, H#); "Lettre \~N";
x1 = 0; y1 = 0;
x2 = x1; y2 = 5/8H;
x3 = W; y3 = y1;
x4 = x3; y4 = y2;
x5 = x1; y5 = H-1/16H;
x6 = x5; y6 = H;
x7 = x3; y7 = y5;
x8 = x7; y8 = y6;
draw z1--z2--z3--z4;
draw z5--z6--z7--z8;
endchar;
OCRchar(31, W#, H#); "Lettre \O";
currentpicture := O_char;
x1 = 0; y1 = 0;
x2 = W; y2 = H;
draw z1--z2;
endchar;
OCRchar(6, W#, H#); "Lettre \"&ditto&"O";
x1 = 0; y1 = 5/16H;
x2 = 3/8W; y2 = 0;
x3 = x2+1/4W; y3 = y2;
x4 = W; y4 = y1;
x5 = x4; y5 = y4+1/8H;
x6 = x3; y6 = 3/4H;
x7 = x2; y7 = y6;
x8 = x1; y8 = y5;
z10 = (z1--z2+(z2-z1)) intersectionpoint (z3+(z3-z4)--z4);
z11 = (z3--z4+(z4-z3)) intersectionpoint (z5+(z5-z6)--z6);
z12 = (z5--z6+(z6-z5)) intersectionpoint (z7+(z7-z8)--z8);
z13 = (z7--z8+(z8-z7)) intersectionpoint (z1+(z1-z2)--z2);
x14 = x1; y14 = H-1/8H;
x15 = x14; y15 = H;
x16 = x4; y16 = y14;
x17 = x16; y17 = y15;
join_radius := r6;
draw (.4[z13,z10]--z10) join (z10--.6[z10,z11]);
draw (.4[z11,z12]--z12) join (z12--.6[z12,z13]);
join_radius := r5;
draw (.4[z10,z11]--z11) join (z11--.6[z11,z12]);
draw (.4[z12,z13]--z13) join (z13--.6[z13,z10]);
draw z14--z15; draw z16--z17;
endchar;
OCRchar(7, W#, H#); "Lettre \"&ditto&"U";
x1 = 0; y1 = 3/4H;
x2 = x1; y2 = 0;
x3 = W; y3 = y2;
x4 = x3; y4 = y1;
x5 = 1/4W; y5 = H-1/8H;
x6 = x5; y6 = H;
x7 = x5+1/2W; y7 = y5;
x8 = x7; y8 = y6;
join_radius := T;
draw (z1--z2) join (z2--.6[z2,z3]);
draw (.4[z2,z3]--z3) join (z3--z4);
draw z5--z6; draw z7--z8;
endchar;
OCRchar(".", 1/4W#, 3/16H#+1/8H#); "Point";
x1 = 0; y1 = 3/16H;
x2 = 1/4W; y2 = y1;
x3 = x2; y3 = y1+1/8H;
x4 = x1; y4 = y3;
draw z1--z2--z3--z4--cycle;
endchar;
OCRchar(",", 1/2W#, 3/8H#); "Virgule";
x1 = 0; y1 = 3/8H;
x2 = 1/2W; y2 = y1;
x3 = x2; y3 = 0;
draw z1--z2--z3;
endchar;
OCRchar(":", 1/4W#, 3/16H#+1/8H#+3/8H#+1/8H#); "Deux points";
x1 = 0; y1 = 3/16H;
x2 = 1/4W; y2 = y1;
x3 = x2; y3 = y2+1/8H;
x4 = x1; y4 = y3;
x5 = x1; y5 = y4+3/8H;
x6 = x2; y6 = y5;
x7 = x6; y7 = y6+1/8H;
x8 = x5; y8 = y7;
draw z1--z2--z3--z4--cycle;
draw z5--z6--z7--z8--cycle;
endchar;
OCRchar(";", 1/2W#, 7/8H#); "Point virgule";
x1 = 0; y1 = 3/8H;
x2 = 1/2W; y2 = y1;
x3 = x2; y3 = 0;
x4 = x1; y4 = 3/4H;
x5 = 1/4W; y5 = y4;
x6 = x5; y6 = 7/8H;
x7 = x4; y7 = y6;
draw z1--z2--z3;
draw z4--z5--z6--z7--cycle;
endchar;
OCRchar("=", W#, 3/8H#+5/16H#); "Egale";
x1 = 0; y1 = 3/8H;
x2 = W; y2 = y1;
x3 = x1; y3 = y1+5/16H;
x4 = x2; y4 = y3;
draw z1--z2; draw z3--z4;
endchar;
OCRchar("+", W#, 1/2H#-1/2W#+W#); "Plus";
x1 = 0; y1 = 1/2H;
x2 = W; y2 = y1;
x3 = 1/2W; y3 = 1/2H-1/2W;
x4 = x3; y4 = y3+W;
draw z1--z2; draw z3--z4;
endchar;
OCRchar("/", W#, H#); "Barre oblique";
x1 = 0; y1 = 0;
x2 = W; y2 = H;
draw z1--z2;
endchar;
OCRchar("*", W#, 1/8H#+3/4H#); "Ast\'erisque";
x1 = 0; y1 = 1/4H;
x2 = 1/2W; y2 = 1/8H;
x3 = W; y3 = y1;
x4 = x3; y4 = 3/4H;
x5 = x2; y5 = y2+3/4H;
x6 = x1; y6 = y4;
draw z1--z4; draw z2--z5; draw z3--z6;
endchar;
OCRchar(ditto, W#, H#); "Guillemet";
x1 = 0; y1 = H;
x2 = 1/8W; y2 = 5/8H;
x3 = 1/4W; y3 = y1;
x4 = 3/4W; y4 = y1;
x5 = x4+1/8W; y5 = y2;
x6 = W; y6 = y1;
draw z3--z1--z2--z3--z4--z5--z6--z4;
fill_corners(1,6);
unfill unitsquare shifted (-1.5,-.5) rotated (angle (z1-z2) - 90)
scaled T shifted z1;
unfill unitsquare shifted (1.5,-.5) rotated (90 - angle (z6-z5))
scaled T shifted z6;
endchar;
OCRchar("{", W#, H#); "Parenth\`ese gauche";
x1 = 0; y1 = 1/2H;
x2 = 1/2W; y2 = y1;
x3 = x2; y3 = 0;
x4 = W; y4 = y3;
x5 = x2; y5 = H;
x6 = x4; y6 = y5;
join_radius := T;
draw (z1--z2) join (z2--.6[z2,z3]);
draw (z1--z2) join (z2--.6[z2,z5]);
join_radius := 1/2T;
draw (.4[z2,z3]--z3) join (z3--z4);
draw (.4[z2,z5]--z5) join (z5--z6);
endchar;
OCRchar("}", W#, H#); "Parenth\`ese droite";
x1 = W; y1 = 1/2H;
x2 = 1/2W; y2 = y1;
x3 = x2; y3 = 0;
x4 = 0; y4 = y3;
x5 = x2; y5 = H;
x6 = x4; y6 = y5;
join_radius := T;
draw (z1--z2) join (z2--.6[z2,z3]);
draw (z1--z2) join (z2--.6[z2,z5]);
join_radius := 1/2T;
draw (.4[z2,z3]--z3) join (z3--z4);
draw (.4[z2,z5]--z5) join (z5--z6);
endchar;
OCRchar("%", W#, H#); "Pour cent";
x1 = 0; y1 = 1/8H;
x2 = W; y2 = y1+3/4H;
x3 = x1; y3 = y2;
x4 = x3+1/4W; y4 = y3;
x5 = x4; y5 = H;
x6 = x3; y6 = y5;
x7 = x2-1/4W; y7 = 0;
x8 = x2; y8 = y7;
x9 = x8; y9 = y1;
x10 = x7; y10 = y9;
draw z1--z2;
draw z3--z4--z5--z6--cycle;
draw z7--z8--z9--z10--cycle;
endchar;
OCRchar("?", W#, H#); "Point d' interrogation";
x1 = 0; y1 = H-3/8H;
x2 = W-1/4W; y2 = H;
x3 = W; y3 = H-1/8H;
x4 = x3; y4 = 3/4H;
x5 = 1/4W; y5 = y6+1/8H;
x6 = x5; y6 = 1/4H;
x7 = x5; y7 = 0;
draw z1--z2--z3--z4--z5--z6; drawdot z7;
endchar;
OCRchar("&", W#, 7/8H#); "Perlu\`ete";
x1 = W; y1 = 0;
x2 = 0; y2 = y6+3/8H;
x3 = x2; y3 = 7/8H;
x4 = 3/4W; y4 = y3;
x5 = x4; y5 = y2;
x6 = x2; y6 = 1/4H;
x7 = x2; y7 = y1;
x8 = 1/2W; y8 = y1;
x9 = x1; y9 = y6;
join_radius := T;
draw (z1--z2--z3) join (z3--.6[z3,z4]);
draw (.4[z3,z4]--z4) join (z4--z5);
draw (z5--z6--z7) join (z7--z8--z9);
endchar;
OCRchar("'", 1/4W#, H#); "Apostrophe";
x1 = 0; y1 = H;
x2 = 1/8W; y2 = 5/8H;
x3 = 1/4W; y3 = y1;
draw z1--z2--z3--cycle;
endchar;
OCRchar("-", W#, 1/2H#); "Moins, trait d'union";
x1 = 0; y1 = 1/2H;
x2 = W; y2 = y1;
draw z1--z2;
endchar;
OCRchar("$", W#, H#); "Symbole dollar";
x1 = 0; y1 = 1/4H;
x2 = W; y2 = y1;
x3 = x2; y3 = 1/2H;
x4 = x1; y4 = y3;
x5 = x1; y5 = y4+1/4H;
x6 = x2; y6 = y5;
x7 = 1/2W; y7 = 0;
x8 = x7; y8 = y1;
x9 = x7; y9 = y5;
x10 = x7; y10 = H;
draw z1--z2--z3--z4--z5--z6; draw z7--z8; draw z9--z10;
endchar;
OCRchar(8, W#, H#); "Symbole livre";
x1 = 0; y1 = 0;
x2 = W; y2 = y1;
x3 = 1/4W; y3 = y1;
x4 = x2-1/4W; y4 = H;
x5 = x2; y5 = y4;
x6 = x1; y6 = 1/2H;
x7 = x2; y7 = y6;
join_radius := T;
draw z1--z2; draw (z3--z4) join (z4--z5); draw z6--z7;
endchar;
OCRchar(9, W#, H#); "Symbole yen";
x1 = 0; y1 = H;
x2 = 1/2W; y2 = 1/2H;
x3 = W; y3 = y1;
x4 = x2; y4 = 0;
x5 = x1; y5 = 3/8H;
x6 = x3; y6 = y5;
draw z1--z2--z3; draw z2--z4; draw z5--z6;
endchar;
designsize := L#;
font_slant := 0;
font_quad := 2W#;
font_normal_space := W#;
font_normal_stretch := .5W#;
font_normal_shrink := .4W#;
font_xheight := H#;
end.
SHAR_EOF
fi # end of overwriting check
# End of shell archive
exit 0
More information about the Comp.sources.unix
mailing list