% orbase.mf -- base file for the Oriya metafont
% Copyright 1996 Jeroen Hellingman
%
% History:
% 27-NOV-1996 last edit (JH)
% 07-JUN-1996 added `hints' for discretion (JH)
% 15-MAY-1996 created from oriya.mf (Jeroen Hellingman)
%
%% define the character codes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% input orcode.mf % <--- now called from parent file
%% \section{boolean variables} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% skeleton reduces all lines to very thin lines
boolean skeleton; skeleton := false;
%% Setting calligraphic adds some effects that
%% won't work fine with equal line thickness.
%% The effects work nice with $(30 \leq rot \leq 60)$
boolean calligraphic; calligraphic := true;
%% old skips all old designs of glyphs in the file
boolean old; old := false;
%% ligs: use consonant-matra ligatures
boolean ligs; ligs := true;
%% \section{picture variable} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
picture savepicture;
%% \section{definitions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% adjust the position of non-spacing characters, to be alined under or above the
% previous character.
def adjustpos(expr w) =
if mode <> proof:
currentpicture := currentpicture shifted -(w, 0uh);
fi;
enddef;
def eye(suffix a,b,c,d) (expr w, h) =
% define points of ellipse relative to z.a
% z.a = left point, clockwise direction
% w = width of ellipse
% h = height of ellipse
z.b = (x.a + .5w, y.a + .5h);
z.c = (x.a + w, y.a);
z.d = (x.a + .5w, y.a - .5h);
enddef;
def draw_eye(suffix a,b,c,d) =
% draw eye through four points defined by eye
draw z.a{up}..z.b{right}..z.c{down}..z.d{left}..cycle;
enddef;
%% tailtwo defines a tail which looks a bit like the roman numeral two
%% it is used in yya, caa, and for secondary bha
def tailtwo(suffix a, b, c, d, e, f, g) =
z.a = z.b + (-4uw, -4uh);
z.c = z.b + (3uw, -3uh);
z.d = z.a + (0uw, -8uh);
z.e = z.d + (3.5uw, 2uh);
z.f = z.d + (7uw, -1uh);
z.g = z.d + (10uw, 1uh);
draw z.a..z.b{right}..z.c{down}..{curl0}z.d;
draw z.d{curl0}..z.e{right}..z.f{right}..{curl0}z.g;
drawdot(z.a);
drawdot(z.d);
drawdot(z.g);
enddef;
def new_tailtwo(suffix a, b, c, d, e, f, g) =
z.a = z.b + (-4uw, -4uh);
z.c = z.b + (4uw, -4uh);
z.d = z.b + (0, -9uh);
z.e = z.d + (4.5uw, -5.5uh);
z.f = z.d + (7uw, -1uh); % not used
z.g = z.d + (10uw, 1uh); % not used
draw z.a{up}..z.b{right}..z.c{down}..{curl0}z.d;
draw z.d--z.e;
drawdot(z.a);
drawdot(z.d);
drawdot(z.e);
enddef;
% various types of outer circles with the vowel signs attached to
% them
def outer_circle =
pickup curvepen;
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 16uh;
z5 = (x4-1uw, 12uh);
draw z1..z2{up}..z3{right}..z4{down}..z5; drawdot(z5);
penlabels(1,2,3,4,5);
enddef;
def aa_circle =
pickup curvepen;
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 25uh-joint;
draw z1..z2{up}..z3{right}..{curl0}z4;
pickup barpen;
z5 = (x4, 25uh);
z6 = (x5, 0uh);
draw z5--z6; drawdot(z5); drawdot(z6);
penlabels(1,2,3,4,5,6);
enddef;
def i_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 14uh);
z6 = (6uw, good.y 20uh);
z7 = (15uw, 18uh);
draw z1..z2{up}..z6{right}..z7;
z8 = (8uw, 20.125uh);
z9 = (good.x 7uw, 22uh);
z3 = (14.5uw, good.y (25uh+overshoot));
% x4 defined by caller
y4 = 16uh;
z5 = (x4-1uw, 12uh);
draw z8..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def narrow_i_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 15uh);
z6 = (5uw, good.y 20uh);
z7 = (12uw, 19uh);
draw z1..z2{up}..z6{right}..z7;
z8 = (6uw, 20.125uh);
z9 = (good.x 5uw, 22uh);
z3 = (12.5uw, good.y (25uh+overshoot));
% x4 defined by caller
y4 = 16uh;
z5 = (x4-1uw, 12uh);
draw z8..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def u_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (0.4833[x2,x4], good.y (25uh+overshoot)); % curious value
% x4 defined by caller
y4 = 10uh;
z5 = (x4 - 14uw, good.y -10uh);
z6 = (good.x (x4 - 18uw), -7uh);
z7 = (x5, good.y -4uh);
z8 = (x4, good.y -11uh);
z9 = (x4 + 6uw, -9uh);
draw z1..z2{up}..z3{right}..tension0.9..z4{down}..tension1.1..z5{left}
..z6{up}..z7{right}..z8{right}..z9;
drawdot(z9);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def uu_circle =
pickup curvepen;
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 10uh;
z5 = (x4-6uw, -3uh); % matches z2 in "Oriya vowel sign uu"
z6 = (good.x(x5-5uw), -8uh); % z3
z7 = (x5-2uw, good.y -11uh); % z4
z8 = (x5+3.5uw, good.y -8.5uh); % z5
z9 = (x5+14uw, good.y -14uh); % z6
z9' = (x9+2uw, y9+1uh); % z7
draw z1..z2{up}..z3{right}..tension 0.9..z4{down}..z5..z6{down}..z7{right}
..z8{right}..z9{right}..z9'; drawdot(z9');
penlabels(1,2,3,4,5,6,7,8,9,9');
enddef;
def tail_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2, x4], good.y (25uh+overshoot));
y4 = 13uh;
z5 = (x4 - 3uw, 2uh);
z6 = (x4 + 2uw, -4uh);
draw z1..z2{up}..z3{right}..tension0.95..z4{down}..z5; drawdot(z5);
draw z5--z6; drawdot(z6);
penlabels(1,2,3,4,5,6);
enddef;
def loop_tail_circle = % loop tail circle as on uu and ri
pickup curvepen;
% z1 = (5.5uw, 9.5uh); % z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot)); % adjusted
% z4 = (28uw, 16uh); % adjusted (x4 defined by caller)
y4 = 16uh;
z5 = (x4-3uw, good.y 9uh); % adjusted
draw z1..z2{up}..z3{right}..z4{down}..tension 0.9..z5;
drawdot(z5);
% loop and tail
z6 = (x4 + 1uw, 6.5uh);
z7 = (x4 - 1uw, 0uh);
z8 = (x4 + 3.1667uw, -5uw);
draw z5{right}..z6..z7; draw z7--z8; drawdot(z6);
penlabels(1,2,3,4,5,6,7,8);
enddef;
% a set of new macros, for better appearance of the letters
def define_new_outer_circle =
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 16uh;
z5 = (x4-1.5uw, 12uh);
enddef;
def draw_new_outer_circle =
pickup curvepen;
draw z1{left}..z2{up}..z3{right}..z4{down}..z5;
drawdot(z5);
penlabels(1,2,3,4,5);
enddef;
def new_outer_circle_path =
z1{left}..z2{up}..z3{right}..z4{down}..z5
enddef;
def new_outer_circle =
define_new_outer_circle;
draw_new_outer_circle;
enddef;
def new_aa_circle =
pickup curvepen;
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 25uh-joint;
draw z1{left}..z2{up}..z3{right}..{curl0}z4;
pickup barpen;
z5 = (x4, 25uh);
z6 = (x5, 0uh);
draw z5--z6; drawdot(z5); drawdot(z6);
penlabels(1,2,3,4,5,6);
enddef;
def new_i_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 15uh);
z6 = (6uw, good.y 20uh);
z7 = (15uw, 18uh);
draw z1..z2{up}..z6{right}..z7;
z8 = (8uw, 20.125uh);
z9 = (good.x 7uw, 22uh);
z3 = (14.5uw, good.y (25uh+overshoot));
% x4 defined by caller
y4 = 16uh;
z5 = (x4-1.5uw, 12uh);
draw z8{left}..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def new_narrow_i_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 15uh);
z6 = (5uw, good.y 20uh);
z7 = (12uw, 19uh);
draw z1{left}..z2{up}..z6{right}..z7;
z8 = (6uw, 20.125uh);
z9 = (good.x 5uw, 22uh);
z3 = (12.5uw, good.y (25uh+overshoot));
% x4 defined by caller
y4 = 16uh;
z5 = (x4-1uw, 12uh);
draw z8..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def new_u_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (0.4833[x2,x4], good.y (25uh+overshoot)); % curious value
% x4 defined by caller
y4 = 10uh;
z5 = (x4 - 14uw, good.y -10uh);
z6 = (good.x (x4 - 18uw), -7uh);
z7 = (x5, good.y -4uh);
z8 = (x4, good.y -11uh);
z9 = (x4 + 6uw, -9uh);
draw z1{left}..z2{up}..z3{right}..tension0.9..z4{down}..tension1.1..z5{left}
..z6{up}..z7{right}..z8{right}..z9;
drawdot(z9);
penlabels(1,2,3,4,5,6,7,8,9);
enddef;
def new_uu_circle =
pickup curvepen;
% z1 to be defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot));
% x4 to be defined by caller
y4 = 10uh;
z5 = (x4-6uw, -3uh); % matches z2 in "Oriya vowel sign uu"
z6 = (good.x(x5-5uw), -8uh); % z3
z7 = (x5-2uw, good.y -11uh); % z4
z8 = (x5+3.5uw, good.y -8.5uh); % z5
z9 = (x5+14uw, good.y -14uh); % z6
z9' = (x9+2uw, y9+1uh); % z7
draw z1{left}..z2{up}..z3{right}..tension 0.9..z4{down}..z5..z6{down}..z7{right}
..z8{right}..z9{right}..z9'; drawdot(z9');
penlabels(1,2,3,4,5,6,7,8,9,9');
enddef;
def new_tail_circle =
pickup curvepen;
% z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2, x4], good.y (25uh+overshoot));
y4 = 13uh;
z5 = (x4 - 3uw, 2uh);
z6 = (x4 + 2uw, -4uh);
draw z1{left}..z2{up}..z3{right}..tension0.95..z4{down}..z5; drawdot(z5);
draw z5--z6; drawdot(z6);
penlabels(1,2,3,4,5,6);
enddef;
def new_loop_tail_circle = % loop tail circle as on uu and ri
pickup curvepen;
% z1 = (5.5uw, 9.5uh); % z1 defined by caller
z2 = (good.x 0uw, 16uh);
z3 = (.5[x2,x4], good.y (25uh+overshoot)); % adjusted
% z4 = (28uw, 16uh); % adjusted (x4 defined by caller)
y4 = 16uh;
z5 = (x4-3uw, good.y 9uh); % adjusted
draw z1{left}..z2{up}..z3{right}..z4{down}..tension 0.9..z5;
drawdot(z5);
% loop and tail
z6 = (x4 + 1uw, 6.5uh);
z7 = (x4 - 1uw, 0uh);
z8 = (x4 + 3.1667uw, -5uw);
draw z5{right}..z6..z7; draw z7--z8; drawdot(z6);
penlabels(1,2,3,4,5,6,7,8);
enddef;
% top left eye, that turns the pa into a pha.
def top_left_eye =
pickup curvepen;
z31 = (x31, 18uh);
z32 = (x31+3.5uw, good.y 16uh);
z33 = (good.x (x31+7uw), 20.5uh);
z34 = (x32, good.y 25uh);
z35 = (x31, 23uh);
draw z31..z32{right}..z33{up}..z34{left}..z35;
penlabels(31,32,33,34,35)
enddef;
def ta_tail =
pickup curvepen;
z2 = z1 + (-3.5uw, 2uh);
z3 = z1 + (-7uw, -2uh);
z4 = z1 + (6uw, -12uh);
draw z1..z2{left}..z3{down}..{curl0}z4;
penlabels(1,2,3,4);
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% end of orbase.mf