summaryrefslogtreecommitdiff
path: root/language/oriya/mf/oriya
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/oriya/mf/oriya
Initial commit
Diffstat (limited to 'language/oriya/mf/oriya')
-rw-r--r--language/oriya/mf/oriya/dotcirc.mf88
-rw-r--r--language/oriya/mf/oriya/getcode.awk8
-rw-r--r--language/oriya/mf/oriya/or10.mf29
-rw-r--r--language/oriya/mf/oriya/or12.mf25
-rw-r--r--language/oriya/mf/oriya/or17.mf25
-rw-r--r--language/oriya/mf/oriya/or8.mf23
-rw-r--r--language/oriya/mf/oriya/orbase.mf388
-rw-r--r--language/oriya/mf/oriya/orbf10.mf23
-rw-r--r--language/oriya/mf/oriya/orbf12.mf23
-rw-r--r--language/oriya/mf/oriya/orbf17.mf23
-rw-r--r--language/oriya/mf/oriya/orbf8.mf23
-rw-r--r--language/oriya/mf/oriya/orbs10.mf23
-rw-r--r--language/oriya/mf/oriya/orbs12.mf23
-rw-r--r--language/oriya/mf/oriya/orbs17.mf23
-rw-r--r--language/oriya/mf/oriya/orbs8.mf23
-rw-r--r--language/oriya/mf/oriya/orcode.mf330
-rw-r--r--language/oriya/mf/oriya/orcode.tex146
-rw-r--r--language/oriya/mf/oriya/orglyphs.mf4364
-rw-r--r--language/oriya/mf/oriya/oriya.mf14
-rw-r--r--language/oriya/mf/oriya/oriya.mft27
-rw-r--r--language/oriya/mf/oriya/orkern.mf234
-rw-r--r--language/oriya/mf/oriya/orsetup.mf75
-rw-r--r--language/oriya/mf/oriya/orsk10.mf26
-rw-r--r--language/oriya/mf/oriya/orsl10.mf25
-rw-r--r--language/oriya/mf/oriya/orsl12.mf23
-rw-r--r--language/oriya/mf/oriya/orsl17.mf23
-rw-r--r--language/oriya/mf/oriya/orsl8.mf23
-rw-r--r--language/oriya/mf/oriya/orss10.mf24
-rw-r--r--language/oriya/mf/oriya/orss17.mf24
-rw-r--r--language/oriya/mf/oriya/orssbf10.mf24
-rw-r--r--language/oriya/mf/oriya/orssbs10.mf24
-rw-r--r--language/oriya/mf/oriya/orsssl10.mf24
-rw-r--r--language/oriya/mf/oriya/ortest.mf437
-rw-r--r--language/oriya/mf/oriya/parameters.txt25
-rw-r--r--language/oriya/mf/oriya/todo42
35 files changed, 6704 insertions, 0 deletions
diff --git a/language/oriya/mf/oriya/dotcirc.mf b/language/oriya/mf/oriya/dotcirc.mf
new file mode 100644
index 0000000000..5ac4a00887
--- /dev/null
+++ b/language/oriya/mf/oriya/dotcirc.mf
@@ -0,0 +1,88 @@
+% dotcirc.mf -- Dotted Circle
+% Copyright 1993, 1996 Jeroen Hellingman
+%
+% History:
+% 18-NOV-1996 added crossed out box (JH)
+% 29-SEP-1996 added real dotted circle (JH)
+% 06-JUN-1996 adopted from mmpunct.mf (JH)
+%
+%%%%% dotted circle to show placement of accents/matras, etc.
+
+% this one is actually made up out of little curved segments, not dots.
+
+if old:
+beginchar(c_dotted_circle, 30uw#+rm#, 25uh#, 5uh#); "U+25CC dotted circle";
+ numeric n, d, db, r, rb, i, a;
+ z0 = (15uw, 10uh);
+ n:=14;
+ d:=360/n; db:=360/(4n);
+ r:=15uh; rb:=15uh - thin;
+
+ a := 0;
+ forsuffixes s = 1,2,3,4,5,6,7,8,9,10,11,12,13,14 :
+ z.s.a = z0 + r * dir (a+db);
+ z.s.b = z0 + r * dir a;
+ z.s.c = z0 + r * dir (a-db);
+ z.s.d = z0 + rb * dir (a-db);
+ z.s.e = z0 + rb * dir a;
+ z.s.f = z0 + rb * dir (a+db);
+ fill z.s.a..z.s.b..z.s.c--z.s.d..z.s.e..z.s.f--cycle;
+ a := a + d;
+ penlabels(s.a,s.b,s.c,s.d,s.e,s.f);
+ endfor;
+ penlabels(0);
+endchar;
+fi;
+
+% dotted circle with real dots.
+
+beginchar(c_dotted_circle, 30uw#+rm#, 25uh#, 5uh#); "U+25CC dotted circle";
+ numeric n, d, r, i, a;
+ z0 = (15uw, 10uh);
+ n:=14;
+ d:=360/n;
+ r:=15uh;
+
+ pickup pencircle scaled thick;
+ a := 0;
+ forsuffixes s = 1,2,3,4,5,6,7,8,9,10,11,12,13,14 :
+ z.s = z0 + r * dir a;
+ drawdot(z.s);
+ a := a + d;
+ penlabels(s);
+ endfor;
+ penlabels(0);
+endchar;
+
+%%%%%% white square, to show missing characters
+
+beginchar(c_white_square, 30uw#+rm#, 25uh#, 5uh#); "U+25A1 white square";
+ pickup pensquare scaled thick;
+ z1=(0,-5uh)+.5(thick, thick);
+ z2=(0,25uh)+.5(thick, -thick);
+ z3=(30uw, 25uh)+.5(-thick, -thick);
+ z4=(30uw, -5uh)+.5(-thick, thick);
+ draw z1--z2 & z2--z3 & z3--z4 & z4--cycle;
+ penlabels(1,2,3,4);
+endchar;
+
+%%%%%% crossed white square to fill empty cells
+
+beginchar(c_crossed_white_square, 30uw#+rm#, 25uh#, 5uh#); "crossed white square";
+ pickup pensquare scaled thick;
+ z1=(0,-5uh)+.5(thick, thick);
+ z2=(0,25uh)+.5(thick, -thick);
+ z3=(30uw, 25uh)+.5(-thick, -thick);
+ z4=(30uw, -5uh)+.5(-thick, thick);
+ draw z1--z2 & z2--z3 & z3--z4 & z4--cycle;
+ pickup pensquare scaled thick rotated 45;
+ z1'=(0,-5uh)+(thick, thick);
+ z2'=(0,25uh)+(thick, -thick);
+ z3'=(30uw, 25uh)+(-thick, -thick);
+ z4'=(30uw, -5uh)+(-thick, thick);
+ draw z1'--z3';
+ draw z2'--z4';
+ penlabels(1,2,3,4,1',2',3',4');
+endchar;
+
+% end of dotcirc.mf
diff --git a/language/oriya/mf/oriya/getcode.awk b/language/oriya/mf/oriya/getcode.awk
new file mode 100644
index 0000000000..1ecffaae84
--- /dev/null
+++ b/language/oriya/mf/oriya/getcode.awk
@@ -0,0 +1,8 @@
+
+BEGIN { FS = "%%"
+ }
+
+ { if($2 != "")
+ { print $2
+ }
+ } \ No newline at end of file
diff --git a/language/oriya/mf/oriya/or10.mf b/language/oriya/mf/oriya/or10.mf
new file mode 100644
index 0000000000..b35d0cd681
--- /dev/null
+++ b/language/oriya/mf/oriya/or10.mf
@@ -0,0 +1,29 @@
+% or10.mf -- Oriya regular 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+%
+% History:
+% 16-NOV-1996 reduced size, to fit better with 10pt Roman (JH)
+% 15-MAY-1996 created from oriya.mf (Jeroen Hellingman)
+
+mode_setup;
+
+input orcode;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.8uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "OR10";
+
+input oriya;
+
+% end of or10.mf
diff --git a/language/oriya/mf/oriya/or12.mf b/language/oriya/mf/oriya/or12.mf
new file mode 100644
index 0000000000..2e5a97d6c9
--- /dev/null
+++ b/language/oriya/mf/oriya/or12.mf
@@ -0,0 +1,25 @@
+% or12.mf -- Oriya regular 12 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+
+input orcode;
+input orbase;
+
+gensize# := 12pt#;
+uh# := 0.25pt#; % unit height, (X-height is 25uh)
+uw# := 0.25pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.7uh#; % smallest diameter of pen
+
+font_size 12pt#;
+font_identifier := "OR12";
+
+input oriya;
+
+% end of or12.mf
diff --git a/language/oriya/mf/oriya/or17.mf b/language/oriya/mf/oriya/or17.mf
new file mode 100644
index 0000000000..4bedc456e7
--- /dev/null
+++ b/language/oriya/mf/oriya/or17.mf
@@ -0,0 +1,25 @@
+% or17.mf -- Oriya regular 17 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+
+input orcode;
+input orbase;
+
+gensize# := 17.28pt#;
+uh# := 0.36pt#; % unit height, (X-height is 25uh)
+uw# := 0.34pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.6uh#; % smallest diameter of pen
+
+font_size 17.28pt#;
+font_identifier := "OR17";
+
+input oriya;
+
+% end of or17.mf
diff --git a/language/oriya/mf/oriya/or8.mf b/language/oriya/mf/oriya/or8.mf
new file mode 100644
index 0000000000..4b644310ad
--- /dev/null
+++ b/language/oriya/mf/oriya/or8.mf
@@ -0,0 +1,23 @@
+% or8.mf -- Oriya regular 8 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 8pt#;
+uh# := 0.17pt#; % unit height, (X-height is 25uh)
+uw# := 0.18pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.8uh#; % smallest diameter of pen
+
+font_size 8pt#;
+font_identifier := "OR8";
+
+input oriya;
+
+% end of or8.mf
diff --git a/language/oriya/mf/oriya/orbase.mf b/language/oriya/mf/oriya/orbase.mf
new file mode 100644
index 0000000000..5379ccc9e6
--- /dev/null
+++ b/language/oriya/mf/oriya/orbase.mf
@@ -0,0 +1,388 @@
+% 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
diff --git a/language/oriya/mf/oriya/orbf10.mf b/language/oriya/mf/oriya/orbf10.mf
new file mode 100644
index 0000000000..b7342677eb
--- /dev/null
+++ b/language/oriya/mf/oriya/orbf10.mf
@@ -0,0 +1,23 @@
+% orbf10.mf -- Oriya bold 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.22pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.7uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORBF10";
+
+input oriya;
+
+% end of orbf10.mf
diff --git a/language/oriya/mf/oriya/orbf12.mf b/language/oriya/mf/oriya/orbf12.mf
new file mode 100644
index 0000000000..b8510b162f
--- /dev/null
+++ b/language/oriya/mf/oriya/orbf12.mf
@@ -0,0 +1,23 @@
+% orbf12.mf -- Oriya bold 12 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 12pt#;
+uh# := 0.25pt#; % unit height, (X-height is 25uh)
+uw# := 0.26pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.6uh#; % smallest diameter of pen
+
+font_size 12pt#;
+font_identifier := "ORBF12";
+
+input oriya;
+
+% end of orbf12.mf
diff --git a/language/oriya/mf/oriya/orbf17.mf b/language/oriya/mf/oriya/orbf17.mf
new file mode 100644
index 0000000000..70e0e671d9
--- /dev/null
+++ b/language/oriya/mf/oriya/orbf17.mf
@@ -0,0 +1,23 @@
+% orbf17.mf -- Oriya bold 17 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 17.28pt#;
+uh# := 0.36pt#; % unit height, (X-height is 25uh)
+uw# := 0.36pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.5uh#; % smallest diameter of pen
+
+font_size 17.28pt#;
+font_identifier := "ORBF17";
+
+input oriya;
+
+% end of orbf17.mf
diff --git a/language/oriya/mf/oriya/orbf8.mf b/language/oriya/mf/oriya/orbf8.mf
new file mode 100644
index 0000000000..27067ff1c9
--- /dev/null
+++ b/language/oriya/mf/oriya/orbf8.mf
@@ -0,0 +1,23 @@
+% orbf8.mf -- Oriya bold 8 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 8pt#;
+uh# := 0.17pt#; % unit height, (X-height is 25uh)
+uw# := 0.19pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.7uh#; % smallest diameter of pen
+
+font_size 8pt#;
+font_identifier := "ORBF8";
+
+input oriya;
+
+% end of orbf8.mf
diff --git a/language/oriya/mf/oriya/orbs10.mf b/language/oriya/mf/oriya/orbs10.mf
new file mode 100644
index 0000000000..bf6c5e5c41
--- /dev/null
+++ b/language/oriya/mf/oriya/orbs10.mf
@@ -0,0 +1,23 @@
+% orbs10.mf -- Oriya bold slanted 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.22pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.7uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORBS10";
+
+input oriya;
+
+% end of orbs10.mf
diff --git a/language/oriya/mf/oriya/orbs12.mf b/language/oriya/mf/oriya/orbs12.mf
new file mode 100644
index 0000000000..0ede6f92bd
--- /dev/null
+++ b/language/oriya/mf/oriya/orbs12.mf
@@ -0,0 +1,23 @@
+% orbs12.mf -- Oriya bold slanted 12 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 12pt#;
+uh# := 0.25pt#; % unit height, (X-height is 25uh)
+uw# := 0.26pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.6uh#; % smallest diameter of pen
+
+font_size 12pt#;
+font_identifier := "ORBS12";
+
+input oriya;
+
+% end of orbs12.mf
diff --git a/language/oriya/mf/oriya/orbs17.mf b/language/oriya/mf/oriya/orbs17.mf
new file mode 100644
index 0000000000..3db4361e9b
--- /dev/null
+++ b/language/oriya/mf/oriya/orbs17.mf
@@ -0,0 +1,23 @@
+% orbf17.mf -- Oriya bold slanted 17 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 17.28pt#;
+uh# := 0.36pt#; % unit height, (X-height is 25uh)
+uw# := 0.36pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.5uh#; % smallest diameter of pen
+
+font_size 17.28pt#;
+font_identifier := "ORBS17";
+
+input oriya;
+
+% end of orbs17.mf
diff --git a/language/oriya/mf/oriya/orbs8.mf b/language/oriya/mf/oriya/orbs8.mf
new file mode 100644
index 0000000000..b3cdda31fc
--- /dev/null
+++ b/language/oriya/mf/oriya/orbs8.mf
@@ -0,0 +1,23 @@
+% orbs8.mf -- Oriya bold slanted 8 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 8pt#;
+uh# := 0.17pt#; % unit height, (X-height is 25uh)
+uw# := 0.19pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 4.5uh#; % longest diameter of pen
+thin# := 1.7uh#; % smallest diameter of pen
+
+font_size 8pt#;
+font_identifier := "ORBS8";
+
+input oriya;
+
+% end of orbs8.mf
diff --git a/language/oriya/mf/oriya/orcode.mf b/language/oriya/mf/oriya/orcode.mf
new file mode 100644
index 0000000000..97039c2f60
--- /dev/null
+++ b/language/oriya/mf/oriya/orcode.mf
@@ -0,0 +1,330 @@
+% orcode.mf -- glyph codes for the Oriya metafont
+% Copyright 1996, 97, 98, 99 Jeroen Hellingman
+%
+% History:
+% 26-MAY-2002 added data for ppa (AP)
+% 08-JUN-1999 added several conjuncts (JH)
+% 21-MAY-1999 added skha (JH)
+% 31-MAY-1998 added hma (JH)
+% 30-MAY-1998 added ni, n+ta, n+ti variants (JH)
+% 17-MAY-1997 fixed encoding of bracket (JH)
+% 29-APR-1997 Edits (Jeroen Hellingman)
+%
+% the assignment of codes is totally ad hoc, and will be made more
+% rational later. This file is the only place where the actual codes are
+% used, everywhere else the identifiers are used.
+%
+% The file orcode.tex is derived from this file, using getcode.awk.
+%
+% used codes: (KEEP UP TO DATE!)
+%
+% letters A-Za-z 0-9 @/\| []<>*+.,:;?!()-#{}
+% gaps used 127, 128, 94, 95, 32, 34, 36
+% upto (inc.) 0--31
+% upto (inc.) 128--249
+% downto (inc.) 255--250
+%
+% gaps still free: 37, 64
+%
+% naming conventions
+%
+% c_* full vowel/consonant
+% cs_* vowel sign/secondary consonant
+%
+% vowels %%% TeX macros for accessing characters
+ %%% (automatically extracted from orcode.mf)
+c_a := ASCII "a"; %%\def\orvowela{a}
+ %%\def\orvowelaa{aA}
+c_i := ASCII "i"; %%\def\orvoweli{i}
+c_ii := ASCII "I"; %%\def\orvowelii{I}
+c_u := ASCII "u"; %%\def\orvowelu{u}
+c_uu := ASCII "U"; %%\def\orvoweluu{U}
+c_ri := 128; %%\def\orvowelri{\char128}
+c_rii := 130; %%\def\orvowelrii{\char130}
+c_li := 132; %%\def\orvowelli{\char132}
+c_lii := 134; %%\def\orvowellii{\char134}
+c_e := ASCII "e"; %%\def\orvowele{e}
+c_ai := ASCII "E"; %%\def\orvowelai{E}
+c_o := ASCII "o"; %%\def\orvowelo{o}
+c_au := ASCII "O"; %%\def\orvowelau{O}
+
+% vowel signs
+
+cs_aa := ASCII "A"; %%\def\orsignaa{A}
+cs_i := ASCII "["; %%\def\orsigni{[}
+cs_i_var := 151; %%\def\orsignivar{\char151}
+cs_ii := ASCII "X"; %%\def\orsignii{X}
+cs_u := ASCII "]"; %%\def\orsignu{]}
+cs_u_var := 145; %%\def\orsignuvar{\char145}
+cs_u_low := 211; %%\def\orsignulow{\char211}
+cs_u_verylow := 216; %%\def\orsignuverylow{\char216}
+cs_u_center := 7; %%\def\orsignucenter{\char7}
+cs_uu := ASCII "Z"; %%\def\orsignuu{Z}
+cs_uu_low := 212; %%\def\orsignuulow{\char212}
+cs_uu_verylow := 217; %%\def\orsignuuverylow{\char217}
+cs_uu_center := 8; %%\def\orsignuucenter{\char8}
+cs_ri := 129; %%\def\orsignri{\char129}
+cs_ri_low := 213; %%\def\orsignrilow{\char213}
+cs_ri_verylow := 218; %%\def\orsignriverylow{\char218}
+cs_ri_center := 9; %%\def\orsignricenter{\char9}
+cs_rii := 131; %%\def\orsignrii{\char131}
+cs_li := 133; %%\def\orsignli{\char133}
+cs_lii := 135; %%\def\orsignlii{\char135}
+cs_e := ASCII "<"; %%\def\orsigne{<}
+cs_ai := ASCII ">"; %%\def\orsignai{>}
+cs_au := ASCII "*"; %%\def\orsignau{*}
+
+% modifiers
+
+c_anusvara := ASCII "M"; %%\def\oranusvara{M}
+c_candrabindu := ASCII "/"; %%\def\orcandrabindu{/}
+c_visarga := ASCII "H"; %%\def\orvisarga{H}
+c_visarga_var := 250; %%\def\orvisargavar{\char250}
+
+% consonants
+
+c_ka := ASCII "k";
+c_kha := ASCII "K";
+c_ga := ASCII "g";
+c_gha := ASCII "G";
+c_nga := ASCII "f";
+
+c_ca := ASCII "c";
+c_cha := ASCII "C";
+c_ja := ASCII "j";
+c_jha := ASCII "J";
+c_nya := ASCII "F";
+c_nya_var := 252;
+
+c_tta := ASCII "q";
+c_tta_var := 255;
+c_ttha := ASCII "Q";
+c_dda := ASCII "w";
+c_rra := ASCII "R";
+c_ddha := ASCII "W";
+c_rrha := ASCII "@";
+c_nna := ASCII "N";
+
+c_ta := ASCII "t";
+c_tha := ASCII "T";
+c_da := ASCII "d";
+c_dha := ASCII "D";
+c_na := ASCII "n";
+
+c_pa := ASCII "p";
+c_pha := ASCII "P";
+c_ba := ASCII "b";
+c_bha := ASCII "B";
+c_ma := ASCII "m";
+
+c_ya := ASCII "y";
+c_yya := ASCII "Y";
+c_ra := ASCII "r";
+c_la := ASCII "l";
+c_lla := ASCII "L";
+c_va := ASCII "v";
+c_badot := 20; %%\def\orbadot{\char20}
+c_sha := ASCII "z";
+c_ssa := ASCII "S";
+c_sa := ASCII "s";
+c_ha := ASCII "h";
+
+% secondary consonants
+
+cs_ddha := 175; %%\def\orsecDha{\char175}
+cs_ta := 174; %%\def\orsecta{\char174}
+cs_tha := 195; %%\def\orsectha{\char195}\def\orseccha{\char195}
+cs_na := 240; %%\def\orsecna{\char240}
+cs_pa := 143; %%\def\orsecpa{\char143} % not used
+cs_bha := 239; %%\def\orsecbha{\char239}
+cs_ma := 136; %%\def\orsecma{\char136}
+cs_ya := 138; %%\def\orsecya{\char138}
+cs_ra := 146; %%\def\orsecra{\char146}
+cs_ra_low := 206; %%\def\orsecralow{\char206}
+cs_la := 155; %%\def\orsecla{\char155}
+cs_lla := 156; %%\def\orsecLa{\char156}
+cs_va := 164; %%\def\orsecva{\char164}
+
+% secondary consonant vowel-sign combinations
+
+cs_bhu := 17; %%\def\orsecbhu{\char17}
+cs_vu := 18; %%\def\orsecvu{\char18}
+
+% special signs
+
+c_halant := ASCII "+"; %%\def\orhalant{+}
+c_halant_low := 142; %%\def\orhalantlow{\char142}
+c_reph := 147; %%\def\orreph{\char147}
+c_nukta := 144; %%\def\ornukta{\char144}
+c_avagraha := 253; %%\def\oravagraha{\char253}
+
+% punctuation
+
+c_centerdot := ASCII "#"; %%\def\ordot{\#}
+c_danda := ASCII "."; %%\def\ordanda{.}
+c_comma := ASCII ",";
+c_colon := ASCII ":";
+c_semicolon := ASCII ";";
+c_question := ASCII "?";
+c_exclamation := ASCII "!";
+c_openquote := ASCII "`";
+c_closequote := ASCII "'";
+c_dash := ASCII "-";
+c_endash := 2; % accessed via ligatures only
+c_emdash := 3;
+c_openparen := ASCII "(";
+c_closeparen := ASCII ")";
+c_openbracket := 4;
+c_closebracket := 5;
+c_openbrace := ASCII "{";
+c_closebrace := ASCII "}";
+c_slash := ASCII "|"; %%\def\orslash{|}
+c_backslash := ASCII "\";
+
+
+% figures
+
+c_zero := ASCII "0";
+c_one := ASCII "1";
+c_two := ASCII "2";
+c_three := ASCII "3";
+c_four := ASCII "4";
+c_five := ASCII "5";
+c_six := ASCII "6";
+c_seven := ASCII "7";
+c_eight := ASCII "8";
+c_nine := ASCII "9";
+
+% consonant-vowel combinations
+
+c_kaa := 157;
+c_ki := 141;
+c_ku := 139;
+c_kuu := 150;
+c_caa := 137;
+c_ddi := 14;
+c_ddhi := 15;
+c_taa := 12;
+c_ti := 193;
+c_tu := 194;
+c_tuu := 13;
+c_di := 192;
+c_naa := 209;
+c_ni := 22;
+c_raa := 11;
+c_laa := 158;
+c_hi := 196;
+c_hu := 140;
+c_lli := 149;
+c_llaa := 208;
+
+% conjuncts
+
+c_k_ka := 199; %%\def\orkka{\char199}
+c_k_tta := 27; %%\def\orkTa{\char27}
+c_k_ta := 182; %%\def\orkta{\char182}
+c_k_ra := 176; %%\def\orkra{\char176}
+c_k_la := 231; %%\def\orkla{\char231}
+c_k_ssa := ASCII "x"; %%\def\orkSa{x}
+c_k_ss_nna := 225; %%\def\orkSNa{\char225}
+c_k_sa := 203; %%\def\orksa{\char203}
+c_g_ga := 30; %%\def\orgga{\char30}
+c_g_dha := 31; %%\def\orgdha{\char31}
+c_ng_ka := 148; %%\def\orngka{\char148}
+c_ng_kha := 159; %%\def\orngkha{\char159}
+c_ng_ga := 160; %%\def\orngga{\char160}
+c_ng_gha := 202; %%\def\ornggha{\char202}
+c_c_ca := 152; %%\def\orcca{\char152}
+c_c_cha := 210; %%\def\orccha{\char210}
+c_j_ja := 153; %%\def\orjja{\char153}
+c_j_jha := 36; %%\def\orjjha{\char36}
+c_j_nya := 179; %%\def\orjnya{\char179}
+c_ny_ca := 172; %%\def\ornyca{\char172}
+c_ny_cha := 230; %%\def\ornycha{\char230}
+c_ny_ja := 189; %%\def\ornyja{\char189}
+c_ny_jha := 173; %%\def\ornyjha{\char173}
+c_tt_tta := 161; %%\def\orTTa{\char161}
+c_dd_ga := 127; %%\def\orDga{\char127}
+c_rr_ga := 126; %%\def\orRga{\char126}
+c_dd_dda := 236; %%\def\orDDa{\char236}
+c_nn_tta := 242; %%\def\orNTa{\char242}
+c_nn_ttha := 220; %%\def\orNTha{\char220}
+c_nn_dda := 187; %%\def\orNDa{\char187}
+c_nn_ddha := 188; %%\def\orNDha{\char188}
+c_nn_nna := 186; %%\def\orNNa{\char186}
+c_t_ta := 154; %%\def\ortta{\char154}
+c_t_na := 162; %%\def\ortna{\char162}
+c_t_pa := 28; %%\def\ortpa{\char28}
+c_t_ma := 163; %%\def\ortma{\char163}
+c_t_ra := 177; %%\def\ortra{\char177}
+c_t_sa := 241; %%\def\ortsa{\char241}
+c_d_ga := 234; %%\def\ordga{\char234}
+c_d_da := 169; %%\def\ordda{\char169}
+c_d_dha := 170; %%\def\orddha{\char170}
+c_d_bha := 214; %%\def\ordbha{\char214}
+c_dh_ya := 178; %%\def\ordhya{\char178}
+c_n_ta := 226; %%\def\ornta{\char226}
+c_n_ta_var := 23; %%\def\orntavar{char23}
+c_n_ti_var := 24; %%\def\orntivar{char24}
+c_n_t_ra := 232; %%\def\orntra{\char232}
+c_n_tha := 227; %%\def\orntha{\char227}
+c_n_da := 165; %%\def\ornda{\char165}
+c_n_dha := 166; %%\def\orndha{\char166}
+c_b_ja := 34; %%\def\orbja{\char34}
+c_b_da := 167; %%\def\orbda{\char167}
+c_b_dha := 29; %%\def\orbdha{\char29}
+c_b_ba := 168; %%\def\orbba{\char168}
+c_p_ta := 181; %%\def\orpta{\char181}
+c_p_pa := 183; %%\def\orppa{\char183}
+c_p_sa := 197; %%\def\orpsa{\char197}
+c_m_pa := 190; %%\def\ormpa{\char190}
+c_m_pha := 191; %%\def\ormpha{\char191}
+c_m_bha := 244; %%\def\ormbha{\char244}
+c_m_ma := 215; %%\def\ormma{\char215}
+c_l_ka := 219; %%\def\orlka{\char219}
+c_l_pa := 221; %%\def\orlpa{\char221}
+c_l_pha := 223; %%\def\orlpha{\char223}
+c_l_la := 237; %%\def\orlla{\char237}
+c_sh_tta := 204; %%\def\orshTa{\char204}
+c_sh_ca := 205; %%\def\orshca{\char205}
+c_sh_cha := 229; %%\def\prshcha{\char229}
+c_ss_ka := 200; %%\def\orSka{\char200}
+c_ss_tta := 198; %%\def\orSTa{\char198}
+c_ss_ttha := 207; %%\def\orSTha{\char207}
+c_ss_nna := 16; %%\def\orSNa{\char16}
+c_ss_pa := 184; %%\def\orSpa{\char184}
+c_ss_pha := 222; %%\def\orSpha{\char222}
+c_s_ka := 201; %%\def\orska{\char201}
+c_s_kha := 26; %%\def\orskha{\char26}
+c_s_ta := 180; %%\def\orsta{\char180}
+c_s_tu := 32; %%\def\orstu{\char32}
+c_s_t_ra := 233; %%\def\orstra{\char233}
+c_s_tha := 228; %%\def\orstha{\char228}
+c_s_pa := 185; %%\def\orspa{\char185}
+c_s_pha := 224; %%\def\orspha{\char224}
+c_h_na := 94; %%\def\orhna{\char94}
+c_h_ba := 95; %%\def\orhba{\char95}\def\orhva{\orhba}
+c_h_ma := 25; %%\def\orhma{\char25}
+
+% vowel sign combinations
+
+cs_i_candrabindu := 243; %%\def\oricandrabindu{\char243}
+cs_i_reph := 171; %%\def\orireph{\char171}
+cs_i_reph_var := 251; % not used
+cs_i_reph_candrabindu := 245; %%\def\orirephcandrabindu{\char245}
+cs_ai_candrabindu := 247;
+cs_ai_reph := 246; %%\def\oraireph{\char246}
+cs_ai_reph_candrabindu := 248;
+cs_au_candrabindu := 249;
+cs_au_reph := 19;
+cs_au_reph_candrabindu := 6;
+
+% varia
+
+c_oromsign := 21; %%\def\oromsign{\char21}
+c_ganesh := 254; %%\def\organesh{\char254}
+c_dotted_circle := 0; %%\def\dotcircle{\char0}
+c_white_square := 1; %%\def\whitesquare{\char1}
+c_crossed_white_square := 10; %%\def\crossedwhitesquare{\char10}
+
+% end of orcode.mf
diff --git a/language/oriya/mf/oriya/orcode.tex b/language/oriya/mf/oriya/orcode.tex
new file mode 100644
index 0000000000..b3dbf09c33
--- /dev/null
+++ b/language/oriya/mf/oriya/orcode.tex
@@ -0,0 +1,146 @@
+% TeX macros for accessing characters
+% (automatically extracted from orcode.mf)
+\def\orvowela{a}
+\def\orvowelaa{aA}
+\def\orvoweli{i}
+\def\orvowelii{I}
+\def\orvowelu{u}
+\def\orvoweluu{U}
+\def\orvowelri{\char128}
+\def\orvowelrii{\char130}
+\def\orvowelli{\char132}
+\def\orvowellii{\char134}
+\def\orvowele{e}
+\def\orvowelai{E}
+\def\orvowelo{o}
+\def\orvowelau{O}
+\def\orsignaa{A}
+\def\orsigni{[}
+\def\orsignivar{\char151}
+\def\orsignii{X}
+\def\orsignu{]}
+\def\orsignuvar{\char145}
+\def\orsignulow{\char211}
+\def\orsignuverylow{\char216}
+\def\orsignuu{Z}
+\def\orsignuulow{\char212}
+\def\orsignuuverylow{\char217}
+\def\orsignri{\char129}
+\def\orsignrilow{\char213}
+\def\orsignriverylow{\char218}
+\def\orsignrii{\char131}
+\def\orsignli{\char133}
+\def\orsignlii{\char135}
+\def\orsigne{<}
+\def\orsignai{>}
+\def\orsignau{*}
+\def\oranusvara{M}
+\def\orcandrabindu{/}
+\def\orvisarga{H}
+\def\orvisargavar{\char250}
+\def\orbadot{\char20}
+\def\orsecDha{\char175}
+\def\orsecta{\char174}
+\def\orsectha{\char195}\def\orseccha{\char195}
+\def\orsecna{\char240}
+\def\orsecpa{\char143}
+\def\orsecbha{\char239}
+\def\orsecma{\char136}
+\def\orsecya{\char138}
+\def\orsecra{\char146}
+\def\orsecralow{\char206}
+\def\orsecla{\char155}
+\def\orsecLa{\char156}
+\def\orsecva{\char164}
+\def\orhalant{+}
+\def\orhalantlow{\char142}
+\def\orreph{\char147}
+\def\ornukta{\char144}
+\def\oravagraha{\char253}
+\def\ordot{\#}
+\def\ordanda{.}
+\def\orkka{\char199}
+\def\orkTa{\char27}
+\def\orkta{\char182}
+\def\orkra{\char176}
+\def\orkla{\char231}
+\def\orkSa{x}
+\def\orkSNa{\char225}
+\def\orksa{\char203}
+\def\orgga{\char30}
+\def\orgdha{\char31}
+\def\orngka{\char148}
+\def\orngkha{\char159}
+\def\orngga{\char160}
+\def\ornggha{\char202}
+\def\orcca{\char152}
+\def\orccha{\char210}
+\def\orjja{\char153}
+\def\orjjha{\char36}
+\def\orjnya{\char179}
+\def\ornyca{\char172}
+\def\ornycha{\char230}
+\def\ornyja{\char189}
+\def\ornyjha{\char173}
+\def\orTTa{\char161}
+\def\orDga{\char127}
+\def\orRga{\char126}
+\def\orDDa{\char236}
+\def\orNTa{\char242}
+\def\orNTha{\char220}
+\def\orNDa{\char187}
+\def\orNDha{\char188}
+\def\orNNa{\char186}
+\def\ortta{\char154}
+\def\ortna{\char162}
+\def\ortpa{\char28}
+\def\ortma{\char163}
+\def\ortra{\char177}
+\def\ortsa{\char241}
+\def\ordga{\char234}
+\def\ordda{\char169}
+\def\orddha{\char170}
+\def\ordbha{\char214}
+\def\ordhya{\char178}
+\def\ornta{\char226}
+\def\orntra{\char232}
+\def\orntha{\char227}
+\def\ornda{\char165}
+\def\orndha{\char166}
+\def\orbja{\char34}
+\def\orbda{\char167}
+\def\orbdha{\char29}
+\def\orbba{\char168}
+\def\orpta{\char181}
+\def\orpsa{\char197}
+\def\ormpa{\char190}
+\def\ormpha{\char191}
+\def\ormma{\char215}
+\def\orlka{\char219}
+\def\orlpa{\char221}
+\def\orlpha{\char223}
+\def\orlla{\char237}
+\def\orshTa{\char204}
+\def\orshca{\char205}
+\def\prshcha{\char229}
+\def\orSka{\char200}
+\def\orSTa{\char198}
+\def\orSTha{\char207}
+\def\orSNa{\char16}
+\def\orSpa{\char184}
+\def\orSpha{\char222}
+\def\orska{\char201}
+\def\orskha{\char26}
+\def\orsta{\char180}
+\def\orstra{\char233}
+\def\orstha{\char228}
+\def\orspa{\char185}
+\def\orspha{\char224}
+\def\orhma{\char25}
+\def\orhna{\char94}
+\def\orhba{\char95}\def\orhva{\orhba}
+\def\orireph{\char171}
+\def\oromsign{\char21}
+\def\organesh{\char254}
+\def\dotcircle{\char0}
+\def\whitesquare{\char1}
diff --git a/language/oriya/mf/oriya/orglyphs.mf b/language/oriya/mf/oriya/orglyphs.mf
new file mode 100644
index 0000000000..67a7e06745
--- /dev/null
+++ b/language/oriya/mf/oriya/orglyphs.mf
@@ -0,0 +1,4364 @@
+% orglyphs.mf -- Oriya glyphs
+% Copyright 1996, 1999 Jeroen Hellingman. This file may be distributed, read
+% the readme file for details.
+%
+% History:
+% 26-JAN-2003 modified k.s.na (AP)
+% 26-MAY-2002 added p+pa (AP)
+% 20-JUN-1999 added j+jha (JH)
+% 16-JUN-1999 improved ja, j+ja, added b+ja (JH)
+% 05-JUN-1999 added k+tta, b+dha, t+pa, g+ga, g+dha (JH)
+% 29-MAY-1999 exchanged nn+tta and nn+ttha (JH)
+% 21-MAY-1999 added s+kha (JH)
+% 31-MAY-1998 added ni, variant n+ta, n+ti, h+ma (JH)
+% 28-MAY-1998 added calligraphic secondary ra (JH)
+% 03-MAY-1998 added vowel signs rii, li, lii (JH)
+% 07-SEP-1997 added d+ga, dd+dda (JH)
+% 06-SEP-1997 added ba with dot inside (JH)
+% 17-MAY-1997 fixed some small things (JH)
+% 29-APR-1997 added slash, backslash, secondary bhu (JH)
+% 30-NOV-1996 adjusted bha (JH)
+% 28-NOV-1996 added n+tha, s+tha, sh+cha, ny+cha, ss+nna (JH)
+% 27-NOV-1996 redesigned da, ha, t+ta, b+dha (JH)
+% 26-NOV-1996 redesigned d+da, d+dha, nga, u, uu (JH)
+% 25-NOV-1996 redesigned ta (JH)
+% 23-NOV-1996 added va and braces (JH)
+% 19-NOV-1996 changed secondary bha and full yya (JH)
+% 18-NOV-1996 corrected character widths (JH)
+% 16-NOV-1996 yya: corrected pen (JH)
+% 12-NOV-1996 Concatenated into a single file and re-ordered (JH)
+%
+% Important note:
+% Many of the character programs depend on preceding programs to fill certain
+% picture variables. Do not change the order of the programs in this file!
+% You will probably need a BIG metafont to make this font at large magnifications.
+%
+% Whenever you make changes or add characters, please contact the author.
+%
+% Jeroen Hellingman E-mail: <jehe@kabelfoon.nl>
+% Aletta Jacobsstraat 5 phone: +31-30-6875444 (19:00--21:00 MET)
+% 3404 XD IJsselstein
+% The Netherlands
+%
+%%%%% secondary consonants
+
+beginchar(cs_bha, 0uw#, 0uh#, 10uh#); "Oriya secondary letter bha";
+ pickup subpen;
+ z2 = (0,0);
+ new_tailtwo(1,2,3,4,5,6,7);
+ penlabels(1,2,3,4,5,6,7);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_bhu, 0uw#, 0uh#, 15uh#); "Oriya secondary letter bhu";
+ pickup subpen;
+ % first four values copied from new_tailtwo()
+ z1 = (-4uw, -4uh);
+ z2 = (0uw,0uh);
+ z3 = (4uw, -4uh);
+ z4 = (0uw, -9uh);
+ % joined u matra
+ z5 = (-5uw, -13uh);
+ z6 = (-10uw, .5[y5, y7]);
+ z7 = (x5, -8uh);
+ z8 = (8uw, -15uh);
+ draw z1{up}..z2{right}..z3{down}..tension1.1..z5{left}..z6{up}
+ ..z7{right}..tension1.1..{curl0}z8;
+ penlabels(1,2,3,4,5,6,7,8);
+ adjustpos(rm+rb);
+endchar;
+
+picture sec_da_picture;
+
+beginchar(cs_ddha, 0uw#, 0uh#, 12uh#); "Oriya secondary letter ddha";
+ z1 = (0uw, -10uh);
+ z2 = z1 + (4uw, 4uh);
+ z3 = z1 + (0uw, 8uh);
+ z4 = z1 + (-4uw, 4uh);
+ z5 = z1 + (-1uw, 0uh);
+ z6 = z1 + (11uw, -2uh);
+
+ % here we make the inner area of the eye ``super white''. When
+ % we superimpose this shape on other characters, it remains white.
+ % To avoid its effects here, we have to draw the shape twice.
+ % (of course, this only works inside Metafont)
+
+ pickup pencircle;
+ unfilldraw z1{curl0}..z2{up}..z3{left}..tension0.95..z4{down}..z5..cycle;
+ pickup subpen;
+ draw z1{curl0}..z2{up}..z3{left}..tension0.95..z4{down}..z5..{curl0}z6;
+ draw z1{curl0}..z2{up}..z3{left}..tension0.95..z4{down}..z5..{curl0}z6;
+ penlabels(1,2,3,4,5,6);
+ sec_da_picture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+picture sec_ta_picture;
+
+beginchar(cs_ta, 0uw#, 0uh#, 12uh#); "Oriya secondary letter ta";
+ z1 = (0uw, -10uh);
+ z2 = z1 + (-4uw, 4uh);
+ z3 = z1 + (0uw, 8uh);
+ z4 = z1 + (4uw, 4uh);
+ z5 = z1 + (1uw, 0uh);
+ z6 = z1 + (-11uw, -2uh);
+
+ pickup pencircle;
+ unfilldraw z1{curl0}..z2{up}..z3{right}..tension0.95..z4{down}..z5..cycle;
+ pickup subpen;
+ draw z1{curl0}..z2{up}..z3{right}..tension0.95..z4{down}..z5..{curl0}z6;
+ draw z1{curl0}..z2{up}..z3{right}..tension0.95..z4{down}..z5..{curl0}z6;
+ penlabels(1,2,3,4,5,6);
+ sec_ta_picture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+picture sec_tha_picture;
+
+beginchar(cs_tha, 0uw#, 0uh#, 9uh#); "Oriya secondary letter tha";
+ % lower curl copied from Oriya letter cha
+ x3 = 0uw;
+ z11 = (x3 - 12uw, 7uh);
+ z12 = (x3, 3uh);
+ z13 = (x3, 2uh);
+ z14 = (x3 + 6uw, -overshoot);
+ z15 = (x3 + 9uw, 2uh);
+ z16 = (x14, 5uh);
+ z17 = (x3 - 6uw, y14);
+ z18 = (x3 - 9uw, y15);
+ z19 = (x17, y16);
+ pickup subpen;
+ draw z11{right}..z13;
+ draw z13..z14{right}..z15{up}..{left}z16..z13..z17{left}..
+ z18{up}..z19{right}..z13;
+ penlabels(11,12,13,14,15,16,17,18,19);
+ cullit; sec_tha_picture := currentpicture;
+ if mode <> proof:
+ currentpicture := currentpicture shifted (-(9uw+rm+rb), -8uh);
+ fi;
+endchar;
+
+if calligraphic:
+
+beginchar(cs_ra, 0uw#, 0uh#, 9uh#); "Oriya secondary letter ra";
+ pickup curvepen;
+ z1 = (0uw, 0.5uh);
+ z2 = z1 + (1uw, -9uh);
+ z3 = (.33[x2,x5], y2 + 1uh);
+ z4 = (.75[x2,x5], y2 - 1uh);
+ z5 = z1 + (-20uw, -9uh);
+ draw z1{down}...z2;
+ draw z2..z3{left}..z4{left}..z5;
+ drawdot(z5);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+else:
+
+beginchar(cs_ra, 0uw#, 0uh#, 9uh#); "Oriya secondary letter ra";
+ pickup curvepen;
+ z1 = (0uw, 0.5uh);
+ z2 = z1 + (0uw, -9uh);
+ z3 = z1 + (-20uw, -9uh);
+ draw z1--z2--z3; drawdot(z3);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+fi;
+
+beginchar(cs_ra_low, 0uw#, 0uh#, 15uh#); "Oriya secondary letter ra (lowered variant)";
+ currentpicture := savepicture shifted (0uw, -6uh);
+endchar;
+
+beginchar(cs_ya, 12uw#+rb#+rm#, 25uh#, 0uh#); "Oriya secondary letter ya";
+ pickup curvepen;
+ % bow
+ z1 = (3uw, h);
+ z2 = (0uw, 19uh);
+ z3 = (6uw, 12.5uh);
+ z4 = (12uw, 16.5uh);
+ draw z1..z2{down}..tension0.9..z3{right}..z4; drawdot(z1);
+ % bar
+ pickup barpen;
+ z5 = (x4, h);
+ z6 = (x4, 0);
+ draw z5--z6; drawdot(z5); drawdot(z6);
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(cs_va, 0uw#, 0uh#, 15uh#); "Oriya secondary letter va";
+ pickup subbarpen;
+ z1 = (0uw, -2uh);
+ z2 = (0uw, -15uh);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ pickup subpen;
+ % z3' = z1 + (-3uw, -1uh);
+ % z3 = z1 + (-5uw, 0);
+ z3 = z1 + (-7uw, 0);
+ z4 = z1 + (-9uw, -4uh);
+ z5 = z1 + (-4uw, -9uh);
+ z6 = z1 + (0uw, -5uh);
+ % draw z3'..z3{left}..z4{down}..z5{right}..{curl0}z6;
+ draw z3..z4{down}..z5{right}..{curl0}z6;
+ penlabels(1,2,3,4,5,6);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_vu, 0uw#, 0uh#, 15uh#); "Oriya secondary letter vu";
+ pickup subbarpen;
+ z1 = (0uw, -2uh);
+ z2 = (0uw, -13uh);
+ % draw z1--z2; drawdot(z1); drawdot(z2);
+ pickup subpen;
+ z3 = z1 + (-7uw, 0);
+ z4 = z1 + (-9uw, -3.5uh);
+ z5 = z1 + (-4uw, -8uh);
+ z6 = z1 + (0uw, -4uh);
+ draw z3..z4{down}..z5{right}..{curl0}z6;
+ z7 = z1 + (-6uw, -16uh);
+ z8 = (x1 - 11uw, .5[y7,y9]);
+ z9 = (x7, y1 - 11uh);
+ z10 = (x1 + 5uw, y7);
+ z11 = (x1 + 10uw, y7 + 3uh);
+ draw z1--z2{down}..z7{left}..z8{up}..z9{right}..z10{right}..{curl0}z11;
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_lla, 0uw#, 0uh#, 13uh#); "Oriya secondary letter lla";
+ pickup subpen;
+ z1 = (x2 + 1.5uw, -13uh);
+ z2 = (-16uw, -9uh);
+ z3 = (x2 + 4uw, -3uh);
+ z4 = (x2 + 8uw, -7uh);
+ z5 = (x4, y1);
+ draw z1..z2{up}..z3{right}..z4{down}---z5; drawdot(z1); drawdot(z5);
+ z6 = z4 + (0, 1uh);
+ z7 = (x2 + 12uw, y3);
+ z8 = (x2 + 16uw, y2);
+ z9 = (x2 + 14.5uw, y1);
+ draw z6{curl0}..z7{right}..z8{down}..z9; drawdot(z9);
+ penlabels(1,2,3,4,5,6,7,8,9);
+ savepicture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_la, 0uw#, 0uh#, 13uh#); "Oriya secondary letter la";
+ currentpicture := savepicture;
+ pickup subpen;
+ z9 = (-1.5uw, -13uh);
+ z10 = (5uw, -15uh);
+ draw z9--z10; drawdot(z10);
+ penlabels(9,10);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_ma, 0uw#, 0uh#, 15uh#); "Oriya secondary letter ma";
+ pickup subbarpen;
+ z1 = (0uw, 0.5uh);
+ z2 = (x1, -10uh);
+ z3 = (x1-3uw, -13uh);
+ z4 = (x1-6uw, y2);
+ z5 = (x3, -6uh);
+ z6 = (x1+6uw, -3uh);
+ z7 = (x6, -15uh);
+ draw z1--z2..z3{left}..z4{up}..z5--z6 & z6--z7; drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+ adjustpos(rm+rb);
+endchar;
+
+%%%%% dha
+
+picture sub_dha_picture;
+
+beginchar(c_dha, 20uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter dha";
+ path dha_diag;
+ path dha_curve;
+ path dha_bar;
+
+ % diagonal
+ z1 = (1uw, 25uh);
+ z2 = (12uw, 11uh);
+ dha_diag = z1--z2;
+ % bow
+ z3 = z2; % .95[z1,z2];
+ z4 = (6uw, 15uh);
+ z5 = (0uw, 8uh);
+ z6 = (9uw, -overshoot);
+ z7 = (20uw, joint);
+ dha_curve = z3{curl0}..z4{left}..tension0.95..z5{down}..tension0.95
+ ..z6{right}..{curl0}z7;
+ % bar
+ z8 = (x7, 25uh);
+ z9 = (x8, 0uh);
+ dha_bar = z8--z9;
+
+ % subscribed dha:
+ transform sub;
+ sub := identity scaled 13/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw dha_diag transformed sub;
+ drawdot(z1 transformed sub); drawdot(z2 transformed sub);
+ draw dha_curve transformed sub;
+ pickup barpen;
+ draw dha_bar transformed sub;
+ drawdot(z8 transformed sub); drawdot(z9 transformed sub);
+ sub_dha_picture := currentpicture;
+ clearit;
+
+ % draw the full size glyph
+ pickup curvepen;
+ draw dha_diag;
+ drawdot(z1); drawdot(z2);
+ draw dha_curve;
+ pickup barpen;
+ draw dha_bar;
+ drawdot(z8); drawdot(z9);
+
+ penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+%%%%% gha
+
+beginchar(c_gha, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter gha";
+ pickup curvepen;
+ % upper bow
+ z1 = (3.5uw, 10uh);
+ z2 = (0uw, 16uh);
+ z3 = (12uw, 25uh+overshoot);
+ z4 = (24uw, 25uh-joint);
+ draw z1..z2{up}..z3{right}..{curl0}z4;
+ % left lower bow
+ z5 = (6uw, 14uh);
+ z6 = (3uw, 7uh);
+ z7 = (9uw, -overshoot);
+ z8 = (14uw, 2uw);
+ % right lower bow
+ z9 = (x8, y8+1uh);
+ z14 = (x9, 6uh);
+ z10 = (.5[x9,x11], -overshoot);
+ z11 = (x4, .75joint);
+ draw z5{curl0}..z6{down}..tension.95..z7{right}..{curl0}z8;
+ drawdot(z5); drawdot(z14);
+ draw z14---z9..z10{right}..{curl0}z11;
+ % bar
+ pickup barpen;
+ z12 = (x11, 25uh);
+ z13 = (x12, 0uh);
+ draw z12--z13; drawdot(z12); drawdot(z13);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_ng_gha, 30uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ng+gha";
+ currentpicture := savepicture;
+ x31 = 24uw;
+ top_left_eye;
+endchar;
+
+%%%%% ta
+
+beginchar(c_ta, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ta";
+ pickup curvepen;
+ z11 = (10uw, 13uh);
+ z12 = (good.x 4uw, 6uh);
+ z13 = (.5[x12,x14], good.y -overshoot);
+ z14 = (good.x 20uw, 6uh);
+ z15 = z14 + (-3uw, 4.5uh);
+ z16 = z14 + (-5.5uw, 2uh);
+ z17 = z14 + (-3uw, -0.5uh);
+ z18 = z14 + (-0.25uw, 1.5uh);
+ draw z11{curl0}..z12{down}..z13{right}..z14{up}..z15..z16..z17..z18;
+ % fill z15..z16..z17..z18..z19..cycle;
+ drawdot(z11);
+ penlabels(11,12,13,14,15,16,17,18);
+ cullit; savepicture := currentpicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_taa, 27uw#+rm#+rb#, 25uh#, 0uh#); "Oriya combination taa";
+ pickup curvepen;
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 27uw;
+ new_aa_circle;
+endchar;
+
+beginchar(c_ti, 25uw#+rm#, 25uh#, 0uh#); "Oriya combination ti";
+ pickup curvepen;
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ new_i_circle;
+endchar;
+
+beginchar(c_tu, 28uw#+rm#, 25uh#, 10uh#); "Oriya combination tu";
+ pickup curvepen;
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 28uw;
+ new_u_circle;
+endchar;
+
+beginchar(c_tuu, 28uw#+rm#, 25uh#, 10uh#); "Oriya combination tuu";
+ pickup curvepen;
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 28uw;
+ new_uu_circle;
+endchar;
+
+%%%%% ka related shapes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% the first version of the letter ka was difficult to make out from the
+%% letter la in small print, so we enlarge the inner details
+%%
+%% We store a picture of a subscribed ka in this letter.
+
+picture full_ka_picture;
+picture sub_ka_picture;
+picture sup_ka_picture;
+
+beginchar(c_ka, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter ka";
+ path ka_left;
+ path ka_right;
+ path ka_circle;
+
+ % inner ka shape
+ pickup curvepen;
+ z19 = if calligraphic: (x13, 6uh) else: (x13, 7uh) fi; % additional point
+ z10 = (x12, 3uh);
+ z11 = (3uw, 8.5uh);
+ z12 = (8uw, 14uh);
+ z13 = (13uw, 10uh);
+ z14 = (x13, 0uh);
+ ka_left = z19 if calligraphic: {curl 0} else: {down} .. tension 0.95 fi
+ ..z10{left}..z11{up}..z12{right}..z13{down}..z14;
+ z15 = if calligraphic: z13 + (0uw, 1uh); else: z13 fi;
+ z16 = (18uw, y12);
+ z17 = (22.5uw, y11);
+ z18 = (20.5uw, 0uh);
+ ka_right = z15 if calligraphic: {curl 0} ..tension 0.95 fi..z16{right}
+ ..z17{down}..z18;
+ penlabels(10,11,12,13,14,15,16,17,18,19);
+
+ % the outer circle
+ z1 = (4uw, 12uh); % added (1uw, 2uh)
+ x4 = 28uw;
+ define_new_outer_circle;
+ ka_circle = new_outer_circle_path;
+ penlabels(1,2,3,4,5);
+
+ % the raised letter ka:
+ transform super;
+ super := identity scaled 22.5/25 shifted (0, 2.5uh);
+ pickup curvepen;
+ draw ka_left transformed super;
+ drawdot(z14 transformed super);
+ draw ka_right transformed super;
+ drawdot(z18 transformed super);
+ draw ka_circle transformed super;
+ drawdot(z5 transformed super);
+ cullit;
+ sup_ka_picture := currentpicture;
+ clearit;
+
+ % the subscribed letter ka (without the circle):
+ transform sub;
+ sub = identity scaled 12/14 shifted (7uw, -9uh);
+ pickup subpen;
+ draw ka_left transformed sub;
+ drawdot(z14 transformed sub);
+ draw ka_right transformed sub;
+ drawdot(z18 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ % make the eyes `super white'
+ unfill (z19{curl0}..z10{left}..z11{up}..z12{right}..z13--cycle) transformed sub;
+ unfill (z19--z15{curl0}...z16{right}...z17{down}..z18--cycle) transformed sub;
+ sub_ka_picture := currentpicture;
+ clearit;
+
+ % the full size letter ka:
+ pickup curvepen;
+ draw ka_left;
+ drawdot(z14);
+ draw ka_right;
+ drawdot(z18);
+ cullit;
+ full_ka_picture := currentpicture; % save the ka shape for ki, ku, kuu, etc.
+ draw ka_circle;
+ drawdot(z5);
+endchar;
+
+beginchar(c_k_ka, 28uw#+rm#, 25uh#, 9uh#); "Oriya conjunct k+ka";
+ currentpicture := full_ka_picture + sub_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+%% we modify the outer circle to make the ki
+
+beginchar(c_ki, 28uw#+rm#, 25uh#, 0uh#); "Oriya combination ki";
+ currentpicture := full_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_i_circle;
+endchar;
+
+beginchar(c_kaa, 30uw#+rm#+rb#, 25uh#, 0uh#); "Oriya combination kaa";
+ currentpicture := full_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 30uw;
+ new_aa_circle;
+endchar;
+
+%% we now join the u matra with the ka to form the ku
+
+beginchar(c_ku, 30uw#+rm#, 25uh#, 11uh#); "Oriya combination ku";
+ currentpicture := full_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 30uw;
+ new_u_circle;
+endchar;
+
+%% again with the uu for kuu
+
+beginchar(c_kuu, 30uw#+rm#, 25uh#, 11uh#); "Oriya combination kuu";
+ currentpicture := full_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 30uw;
+ new_uu_circle;
+endchar;
+
+beginchar(c_k_ta, 28uw#+rm#, 25uh#, 8uh#); "Oriya conjunct k+ta";
+ currentpicture := full_ka_picture + sec_ta_picture shifted (22uw, 4uh);
+ pickup curvepen;
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+%% we now create the lla from the ka by opening up the left loop
+
+picture full_lla_picture;
+
+beginchar(c_lla, 27uw#+rm#, 25uh#, 0uh#); "Oriya letter lla";
+ % inner bows
+ pickup curvepen;
+ z10 = (5.5uw, 0uh);
+ z11 = (3uw, 8.5uh);
+ z12 = (7.5uw, 14uh);
+ z13 = (12uw, 10uh);
+ z14 = (x13, 0uh);
+ draw z10..z11{up}..z12{right}..z13{down}..z14; drawdot(z14);
+ z15 = if calligraphic: z13 + (0uw, 1uh); else: z13 fi;
+ z16 = (16.5uw, y12);
+ z17 = (21uw, y11);
+ z18 = (19.5uw, 0uh);
+ pickup curvepen;
+ draw z15 if calligraphic: {curl 0}..tension 0.95 fi
+ ..z16{right}..z17{down}..z18; drawdot(z18);
+ penlabels(10,11,12,13,14,15,16,17,18,19);
+ cullit; full_lla_picture := currentpicture;
+ % outer circle
+ z1 = (4uw, 12uh);
+ x4 = 27uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_l_ka, 28uw#+rm#, 25uh#, 9uh#); "Oriya conjunct l+ka";
+ currentpicture := full_lla_picture + sub_ka_picture;
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_llaa, 30uw#+rm#+rb#, 25uh#, 0uh#); "Oriya combination llaa";
+ currentpicture := full_lla_picture;
+ z1 = (4uw, 12uh);
+ x4 = 30uw;
+ new_aa_circle;
+endchar;
+
+beginchar(c_lli, 27uw#+rm#, 25uh#, 0uh#); "Oriya combination lli";
+ currentpicture := full_lla_picture;
+ z1 = (4uw, 12uh);
+ x4 = 27uw;
+ new_i_circle;
+endchar;
+
+%% adding a tail to the lla gives us the la
+
+beginchar(c_la, 29uw#+rm#, 25uh#, 0uh#); "Oriya letter la";
+ currentpicture := full_lla_picture;
+ z1 = (4uw, 12uh);
+ x4 = 29uw;
+ new_tail_circle;
+endchar;
+
+beginchar(c_laa, 29uw#+rm#+rb#, 25uh#, 0uh#); "Oriya combination laa";
+ currentpicture := full_lla_picture;
+ pickup curvepen;
+ z18 = (19.5uw, 0);
+ z19 = z18 + (5uw, -6uh);
+ draw z18--z19;
+ drawdot(z19);
+ z1 = (4uw, 12uh);
+ x4 = 29uw;
+ new_aa_circle;
+ penlabels(18,19);
+endchar;
+
+%% from the letter lla we build the letter i
+%% (renumbering the points, putting the outer circle first)
+
+beginchar(c_i, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter i";
+ pickup curvepen;
+ z1 = (4.5uw, 8uh);
+ z2 = (good.x 0uw, 15uh);
+ z3 = (.5[x2, x4], good.y (25uh+overshoot));
+ z4 = (28uw, 13uh);
+ z5 = (x4 - 3uw, 2uh);
+ z6 = (x4 + 2uw, -4uh);
+ draw z1{left}..z2{up}..tension0.95..z3{right}..tension0.95..z4{down}..z5; drawdot(z5);
+ draw z5--z6; drawdot(z6);
+ penlabels(1,2,3,4,5,6);
+
+ z10 = if calligraphic: z15 + (0uw, 1uh); else: z15; fi;
+ z11 = (16uw, 10uh);
+ z12 = (20uw, 5uh);
+ z13 = (x11, -overshoot);
+ z14 = (12uw, 4uh-overshoot);
+ z15 = (x14, 6uh);
+ z16 = (8uw, y11);
+ z17 = (4uw, y12);
+ z18 = (x16, y13);
+ z19 = if calligraphic: z14 - (0uw, 1uh); else: z14; fi;
+ draw z10 if calligraphic: {curl 0} else: {up} fi..z11{right}..z12{down}
+ ..z13{left}..z14{up}..z15{up}..z16{left}..z17{down}
+ ..z18{right}..if calligraphic: {curl 0} else: {up} fi z19;
+ penlabels(10,11,12,13,14,15,16,17,18,19);
+endchar;
+
+%% the ii is just like an i with a extra curve in the outer circle
+
+beginchar(c_ii, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter ii";
+ % first part of outer circle
+ pickup curvepen;
+ z1 = (4.5uw, 8uh);
+ z2 = (0uw, 13uh);
+ z8 = (5uw, 18uh); % (7uw, 18uh);
+ z20 = (13uw, 16uh); % (13uw, y8);
+ draw z1{left}..z2{up}..z8{right}..z20; % draw z1..z2{up}..z8---z20;
+ % second part of outer circle
+ z7 = (4.5uw, 18uh);
+ z9 = (4uw, 20uh);
+ z3 = (14uw, h+overshoot);
+ z4 = (28uw, 13uh);
+ z5 = (24uw, 2uh);
+ draw z7..z9{up}..z3{right}..tension0.95..z4{down}..z5;
+ % tail
+ z6 = (29uw, -4uh);
+ draw z5--z6; drawdot(z6);
+ % inner eyes
+ pickup curvepen;
+ z10 = if calligraphic: z15 + (0uw, 1uh); else: z15; fi;
+ z11 = (16uw, 10uh);
+ z12 = (20uw, 5uh);
+ z13 = (x11, -overshoot);
+ z14 = (12uw, 4uh-overshoot);
+ z15 = (x14, 6uh);
+ z16 = (8uw, y11);
+ z17 = (4uw, y12);
+ z18 = (x16, y13);
+ z19 = if calligraphic: z14 - (0uw, 1uh); else: z14; fi;
+ draw z10 if calligraphic: {curl 0} else: {up} fi..z11{right}..z12{down}
+ ..z13{left}..z14{up}..z15{up}..z16{left}..z17{down}
+ ..z18{right}..if calligraphic: {curl 0} else: {up} fi z19;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
+beginchar(c_l_la, 29uw#+rm#, 25uh#, 2uh#); "Oriya conjunct l+la";
+ path left_bow;
+ path right_bow;
+
+ % bows
+ pickup curvepen;
+ z10 = (5uw, 6uh);
+ z11 = (3uw, .5[y10,y12]);
+ z12 = (7.5uw, 15uh);
+ z13 = (12uw, 11uh);
+ z14 = (x13, y10);
+ left_bow = z10..z11{up}..z12{right}..z13{down}..z14;
+ z15 = if calligraphic: z13 + (0uw, 1uh); else: z13 fi;
+ z16 = (16.5uw, y12);
+ z17 = (21uw, y11);
+ z18 = (19.5uw, y10);
+ right_bow = z15 if calligraphic: {curl 0}..tension 0.95 fi
+ ..z16{right}..z17{down}..z18;
+ z19 = z18 + (5uw, -6uh);
+
+ z0 = (0, -8uh);
+
+ draw left_bow; drawdot(z14);
+ draw right_bow; drawdot(z18);
+ draw left_bow shifted z0; drawdot(z14 shifted z0);
+ draw right_bow shifted z0; drawdot(z18 shifted z0);
+ draw (z18--z19) shifted z0; drawdot(z19 shifted z0);
+
+ penlabels(10,11,12,13,14,15,16,17,18,19);
+
+ % outer circle
+ z1 = (3uw, 12uh);
+ x4 = 29uw;
+ new_tail_circle;
+endchar;
+
+beginchar(c_c_ca, 28uw#+rm#, 25uh#, 0uh#); "Oriya conjunct c+ca";
+ pickup curvepen;
+ z11 = z16 - (0, 1.5uh);
+ z12 = (8uw, -overshoot);
+ z13 = (3uw, 6uh);
+ z14 = (x12, 12uh);
+ z15 = (13uw, 8uh);
+ z16 = (x15, 4uh-overshoot);
+ z17 = (18uw, y12);
+ z18 = (23uw, y13);
+ z19 = (x17, y14);
+ z20 = z15 + (0, 1.5uh);
+ draw z11{curl0}..z12{left}..z13{up}..z14{right}..z15{down}
+ ..z16{down}..z17{right}..z18{up}..z19{left}..{curl0}z20;
+ penlabels(11,12,13,14,15,16,17,18,19,20);
+ savepicture := currentpicture;
+ z1 = (5uw, 11uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_c_cha, 28uw#+rm#, 25uh#, 0uh#); "Oriya conjunct c+cha";
+ % upper eyes
+ pickup curvepen;
+ z11 = z16 - (0, 1.5uh);
+ z12 = (8uw, 5uh);
+ z13 = (4uw, 0.5[y12, y14]);
+ z14 = (x12, 14uh);
+ z15 = (13uw, 10uh);
+ z16 = (x15, 10uh-overshoot);
+ z17 = (18uw, y12);
+ z18 = (22uw, y13);
+ z19 = (x17, y14);
+ z20 = z15 + (0, 1.5uh);
+ draw z11{curl0}..z12{left}..z13{up}..z14{right}..z15{down}
+ ..z16{down}..z17{right}..z18{up}..z19{left}..{curl0}z20;
+ penlabels(11,12,13,14,15,16,17,18,19,20);
+ % lower eyes
+ % lower curl
+ z21 = (0uw, 6uh);
+ z22 = (x11, 3uh);
+ z23 = (x11, 2uh);
+ z24 = (x11 + 6.5uw, -overshoot);
+ z25 = (x11 + 10uw, 2uh);
+ z26 = (x24, 5uh);
+ z27 = (x11 - 6.5uw, y24);
+ z28 = (x11 - 10uw, y25);
+ z29 = (x27, y26);
+ pickup subpen;
+ draw z21{right}..{(2, -1)}z29;
+ draw z23..z24{right}..z25{up}..{left}z26..z23
+ ..z27{left}..z28{up}..z29{right}..z23;
+ penlabels(21,22,23,24,25,26,27,28,29);
+ % outer circle
+ z1 = (4.5uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_ng_ga, 36uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ng+ga";
+ currentpicture := savepicture;
+ z1 = (5uw, 11uh);
+ x31 = x4 = 30uw;
+ new_aa_circle;
+ top_left_eye;
+endchar;
+
+beginchar(c_tt_tta, 28uw#+rb#+rm#, 25uh#, 0uh#); "Oriya conjunct tt+tta";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z1 = (5uw, 11uh);
+ z2 = (0uw, 16uh);
+ z3 = (.5[x2,x4], 25uh+overshoot);
+ z4 = (28uw, 25uh-joint);
+ draw z1{left}..z2{up}..z3{right}..{curl0}z4;
+ pickup barpen;
+ z5 = (x4, 25uh);
+ z6 = (x5, 15uh);
+ draw z6--z5; drawdot(z6); drawdot(z5);
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(c_ng_kha, 36uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ng+kha";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z1 = (5uw, 11uh);
+ z2 = (0uw, 16uh);
+ z3 = (14uw, 25uh+overshoot);
+ z4 = (19.5uw, y3-.5uh);
+ z5 = (18uw, 21uh);
+ z6 = (24uw, 15uh);
+ z7 = (30uw, 21uh);
+ draw z1{left}..z2{up}..z3{right}..z4;
+ draw z4..z5{down}..z6{right}..{curl0}z7;
+ pickup barpen;
+ z10 = (30uw, 25uh);
+ z11 = (x10, 0uh);
+ draw z10--z11; drawdot(z10); drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ x31 = x10;
+ top_left_eye;
+endchar;
+
+%% now we combine the tail of the nga with the ka to build the conjunct
+%% ng+ka
+
+beginchar(c_ng_ka, 31uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ng+ka";
+ pickup curvepen;
+ % outer tail, copied from nga
+ z1 = (4.5uw, 12uh);
+ z2 = (0uw, 18uh);
+ z3 = (10uw, h+overshoot);
+ z4 = (28.5uw, 19uh);
+ z5 = (32uw, 22.5uh);
+ z6 = (x4, 25uh+overshoot);
+ z7 = (25uw, y5);
+ z8 = (26.5uw, 19.25uh);
+ draw z1{left}..z2{up}..tension0.95..z3{right}..z4{right}..z5{up}
+ ..z6{left}..z7{down}..z8;
+ % inner parts of letter ka (shifted to left)
+ pickup curvepen;
+ z19 = if calligraphic: (x13, 6uh) else: (x13, 7uh) fi; % additional point
+ z10 = (x12, 3uh);
+ z11 = (12uw, 8.5uh);
+ z11a = z24 + (0uw, 1uh); % TODO conditional calligraphic adjustments
+ z11b = z20 + (0uw, 1uh);
+ z12 = (16uw, 14uh);
+ z13 = (20uw, 10uh);
+ z14 = (x13, 0uh);
+ z15 = if calligraphic: z13 + (0uw, 1uh); else: z13 fi;
+ z16 = (25uw, y12);
+ z17 = (29.5uw, y11);
+ z18 = (27.5uw, 0uh);
+ draw z15 if calligraphic: {curl 0} ..tension 0.95 fi..z16{right}
+ ..z17{down}..z18; drawdot(z18);
+ % extra circle left of ka
+ z20 = (x11, y13);
+ z21 = (8uw, y12);
+ z22 = (4uw, y11);
+ z23 = (x21, y10);
+ z24 = (x20, y19);
+ draw z19 if calligraphic: {curl 0} else: {down} .. tension 0.95 fi
+ ..z10{left}..z11a{up}..z11b;
+ draw z11b if calligraphic: {curl 0} fi..z12{right}..z13{down}..z14; drawdot(z14);
+ draw z20{up}..z21{left}..z22{down}..z23{right}..if calligraphic: {curl0} fi z24;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,11a,11b,12,13,14,15,16,17,18,19,20,21,22,23,24);
+endchar;
+
+picture sub_tra_picture;
+
+beginchar(c_t_ra, 25uw#+rm#, 25uh#, 0uh#); "Oriya conjunct t+ra";
+ path tra_top;
+ path tra_bot;
+
+ % inner Oriya e like shape
+ pickup curvepen;
+ z11 = (9.5uw, 7.5uh);
+ z12 = (7uw, 10uh);
+ z13 = (16uw, 16uh);
+ z14 = (18uw, 14uh);
+ z15 = (x14, -overshoot);
+ z16 = (-1uw, 8uh);
+ tra_top = z11..z12{up}..tension1.4..z13{right}..z14{down}---z15;
+ tra_bot = z15--z16;
+
+ % subscribed inner part
+ transform sub;
+ sub = identity scaled 12/15 shifted (0, -4uh);
+ pickup subpen;
+ draw tra_top transformed sub;
+ draw tra_bot transformed sub;
+ drawdot(z16 transformed sub);
+ drawdot(z15 transformed sub);
+
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (tra_top & tra_bot -- cycle) transformed sub;
+ sub_tra_picture = currentpicture;
+ clearit;
+
+ % full size inner part;
+ pickup curvepen;
+ draw tra_top;
+ draw tra_bot;
+ drawdot(z16);
+ drawdot(z15);
+
+ penlabels(11,12,13,14,15,16);
+ savepicture := currentpicture;
+ % outer circle
+ pickup curvepen;
+ z1 = (7uw, 11uh);
+ z2 = (3uw, 17uh);
+ z3 = (.5[x2,x4], 25uh+overshoot);
+ z4 = (25uw, 17uh);
+ z5 = (23uw, 11uh);
+ draw z1..z2{up}..z3{right}..z4{down}..z5;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(c_k_ra, 32uw#+rm#, 25uh#, 0uh#); "Oriya conjunct k+ra";
+ currentpicture := savepicture;
+ % extra tail
+ pickup curvepen;
+ z21 = (18uw, 10uh);
+ z22 = (23uw, 13uh);
+ z23 = (26uw, 9uh);
+ z24 = (24uw, 3uh);
+ draw z21{curl0}..z22{right}..z23{down}..z24;
+ penlabels(21,22,23,24);
+ % outer circle
+ pickup curvepen;
+ z1 = (7uw, 11uh);
+ z2 = (3uw, 17uh);
+ z3 = (.5[x2,x4], 25uh+overshoot);
+ z4 = (32uw, 17uh);
+ z5 = (30uw, 11uh);
+ draw z1..z2{up}..z3{right}..z4{down}..z5;
+ penlabels(1,2,3,4,5);
+endchar;
+
+%%%%% ca and derived characters
+%%
+%% the first design of the letter ca had a separate eye, now we draw the whole character in
+%% a single stroke. The points upto $z_{8}$ are taken from ga. The old design
+%% still works better for the linear style.
+
+picture sub_ca_picture;
+
+beginchar(c_ca, 24uw#+rm#, 25uh#, 0uh#); "Oriya letter ca"; % continuous stroke eye
+ path ca_path;
+ pickup curvepen;
+ z1 = (7.5uw, 9uh);
+ z2 = (good.x 6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (good.x 17uw, 5uh);
+ z5 = (12uw, good.y 10uh);
+ z6 = (6uw, good.y 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (12uw, h+overshoot);
+ z9 = (good.x 24uw, 16uh);
+ z10 = (21.5uw, 9uh);
+ ca_path := z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{down}z9..z10;
+
+ % the subscribed ca
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw ca_path transformed sub;
+ drawdot(z10 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..cycle) transformed sub;
+ unfill (z5{left}..z6{left}..z7{up}..z8{right}..z9{down}..z10--cycle) transformed sub;
+ sub_ca_picture := currentpicture;
+ clearit;
+
+ % the full size ca
+ pickup curvepen;
+ draw ca_path;
+ drawdot(z10);
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+%% the letter cha, we build from the letter ca, shifting most points
+%% a bit up to accommodate the curl below it.
+
+beginchar(c_cha, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter cha";
+ pickup curvepen;
+ % letter ca
+ z1 = (7.5uw, 12.25uh);
+ z2 = (6uw, 9uh);
+ z3 = (12uw, 4uh);
+ z4 = (18uw, y2);
+ z5 = (12uw, 14uh);
+ z6 = (6uw, 12uh);
+ z7 = (0uw, 17uh);
+ z8 = (12.5uw, h+overshoot);
+ z9 = (25uw, 17uh);
+ z10 = (22uw, 11uh);
+ draw z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{down}z9..z10;
+ drawdot(z10);
+ % lower curl
+ z11 = (0uw, 7uh);
+ z12 = (x3, 3uh);
+ z13 = (x3, 2uh);
+ z14 = (x3 + 6uw, -overshoot);
+ z15 = (x3 + 9uw, 2uh);
+ z16 = (x14, 5uh);
+ z17 = (x3 - 6uw, y14);
+ z18 = (x3 - 9uw, y15);
+ z19 = (x17, y16);
+ pickup subpen;
+ draw z11{right}..z13;
+ draw z13..z14{right}..z15{up}..{left}z16..z13..z17{left}
+ ..z18{up}..z19{right}..z13;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);
+endchar;
+
+% we add a tail to ca to make ra
+
+beginchar(c_ra, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ra"; % continuous stroke eye
+ pickup curvepen;
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (12.5uw, h+overshoot);
+ z9 = (25uw, 13uh);
+ z10 = (21uw, 2uh);
+ z11 = (26uw, -4uh);
+ draw z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..tension0.95..{down}z9..z10;
+ draw z10--z11; drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+% we modify the tail of ra to make ri
+
+beginchar(c_ri, 26uw#+rm#, 25uh#, 0uh#); "Oriya letter ri"; % continuous stroke eye
+ pickup curvepen;
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (12.5uw, h+overshoot);
+ z9 = (25uw, 16uh); % adjusted
+ z10 = (21uw, 8uh); % adjusted
+ draw z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{down}z9..tension 0.9..z10;
+ % tail
+ z11 = (26uw, 7uh);
+ z12 = (24uw, 0uh);
+ z13 = (28.1667uw, -5uw);
+ draw z10..z11..z12;
+ draw z12--z13;
+ drawdot(z13);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13);
+endchar;
+
+% and again modify the tail to make rii
+
+beginchar(c_rii, 27uw#+rm#, 25uh#, 0uh#); "Oriya letter rii"; % continuous stroke eye
+ pickup curvepen;
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (12.5uw, h+overshoot);
+ z9 = (25uw, 18uh); % adjusted
+ z10 = (21uw, 12.5uh); % adjusted
+ draw z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{down}z9..tension 0.9..z10;
+ % tail
+ z11 = (26uw, 11uh);
+ z12 = (24uw, 5.5uh);
+ z13 = (28uw, 4uh);
+ z14 = (26uw, -3uh);
+ z15 = (30.1667uw, -8uw);
+ draw z10..z11..z12;
+ drawdot(z12);
+ draw z12..z13..z14;
+ draw z14--z15;
+ drawdot(z15);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+endchar;
+
+%% letter ga
+
+picture sup_ga_picture;
+picture sub_ga_picture;
+
+beginchar(c_ga, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter ga";
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (11uw, h+overshoot);
+ z9 = (24uw, h - joint);
+ z10 = (x9, h);
+ z11 = (x9, 0);
+
+ path ga_curve;
+ path ga_bar;
+ ga_curve := z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{curl0}z9;
+ ga_bar := z10--z11;
+
+ % superscript ga:
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw ga_curve transformed super;
+ drawdot(z9 transformed super);
+ pickup barpen;
+ draw ga_bar transformed super;
+ drawdot(z10 transformed super);
+ drawdot(z11 transformed super);
+ cullit;
+ sup_ga_picture := currentpicture;
+ clearit;
+
+ % subscribed ga:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup curvepen;
+ draw ga_curve transformed sub;
+ drawdot(z9 transformed sub);
+ pickup barpen;
+ draw ga_bar transformed sub;
+ drawdot(z10 transformed sub);
+ drawdot(z11 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z6{left}..z7{up}..z8{right}..{curl0}z9--z11--cycle) transformed sub;
+ sub_ga_picture := currentpicture;
+ clearit;
+
+ % normal ga:
+ pickup curvepen;
+ draw ga_curve;
+ drawdot(z9);
+ pickup barpen;
+ draw ga_bar;
+ drawdot(z10);
+ drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_g_ga, 29uw#+rm#, 25uh#, 10uh#); "Oriya conjunct g+ga";
+ currentpicture := sup_ga_picture + sub_ga_picture shifted (6uw, 0);
+endchar;
+
+beginchar(c_g_dha, 28uw#+rm#, 25uh#, 10uh#); "Oriya conjunct g+dha";
+ currentpicture := sup_ga_picture + sub_dha_picture shifted (6uw, 0);
+endchar;
+
+beginchar(c_caa, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter caa";
+ pickup curvepen;
+ z1 = (7.5uw, 9uh); z2 = (6uw, 5uh); z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh); z5 = (12uw, 10uh); z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh); z8 = (11uw, h+overshoot); z9 = (24uw, h - joint);
+ draw z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{curl0}z9; drawdot(z9);
+ pickup barpen;
+ z10 = (x9, h); z11 = (x9, 3uh);
+ draw z10--z11; drawdot(z10); drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+ new_tailtwo(12,11,13,14,15,16,17);
+endchar;
+
+beginchar(c_raa, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya combination raa";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z1 = (15uw, .25uh);
+ z2 = (20uw, -5.75uh);
+ draw z1--z2;
+ drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+%% the \d{t} is like a ga with a short bar
+%% here we also set a picture with a subscribed variant
+
+picture sub_tta_picture;
+
+beginchar(c_tta, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter tta";
+ path tta_eye;
+ path tta_bar;
+
+ % continuous stroke eye
+ pickup curvepen;
+ z1 = (7.5uw, 9uh);
+ z2 = (good.x 6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (good.x 17uw, 5uh);
+ z5 = (12uw, good.y 10uh);
+ z6 = (6uw, good.y 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (10uw, 25uh+overshoot);
+ z9 = (22uw, 23uh-joint);
+ tta_eye = z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}
+ ..z7{up}..z8{right}..z9;
+ pickup barpen;
+ % standing bar;
+ z10 = (x9, 25uh); z11 = (x9, 15uh);
+ tta_bar = z10--z11;
+
+ % the subscribed variant:
+ transform sub;
+ sub = identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw tta_eye transformed sub;
+ pickup subbarpen;
+ draw tta_bar transformed sub;
+ drawdot(z10 transformed sub);
+ drawdot(z11 transformed sub);
+ cullit;
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ % unfill the interiour
+ unfill (z5{left}..z6{left}..z7{up}..z8{right}..z9--z11--cycle) transformed sub;
+ sub_tta_picture := currentpicture;
+ clearit;
+
+ % the full size letter
+ pickup curvepen;
+ draw tta_eye;
+ pickup barpen;
+ draw tta_bar;
+ drawdot(z10);
+ drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginchar(c_k_tta, 28uw#+rm#, 25uh#, 10uh#); "Oriya conjunct k+tta";
+ currentpicture := sup_ka_picture + sub_tta_picture shifted (7uw, 0);
+endchar;
+
+%% from the ga, we create the kha
+
+picture sub_kha_picture;
+
+beginchar(c_kha, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter kha"; % continuous stroke eye
+ path kha_eye;
+ path kha_loop;
+ path kha_bar;
+
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (11uw, h+overshoot);
+ z9 = (13.5uw, y8-.5uh); % added from here
+ z10 = (12uw, 21uh);
+ z11 = (18uw, 15uh);
+ z12 = (24uw, 21uh);
+
+ kha_eye = z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}
+ ..tension 0.95..z7{up}..z8{right}..z9;
+ kha_loop = z9..z10{down}..z11{right}..{curl0}z12;
+
+ z13 = (x12, h);
+ z14 = (x13, 0);
+ kha_bar = z13--z14;
+
+ % the subscribed variant:
+ transform sub;
+ sub = identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw kha_eye transformed sub;
+ drawdot(z9 transformed sub);
+ draw kha_loop transformed sub;
+ pickup subbarpen;
+ draw kha_bar transformed sub;
+ drawdot(z13 transformed sub);
+ drawdot(z14 transformed sub);
+ cullit;
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ % unfill the interiour
+ unfill (z5{left}..z6{left}..z7{up}..z8{right}..z9..
+ z10{down}..z11{right}..{curl0}z12--z14--cycle) transformed sub;
+ sub_kha_picture := currentpicture;
+ clearit;
+
+ % the full version
+ pickup curvepen;
+ draw kha_eye;
+ draw kha_loop;
+ drawdot(z9);
+ pickup barpen;
+ draw kha_bar;
+ drawdot(z13);
+ drawdot(z14);
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+%%%%% pa and derived characters
+
+picture sub_ttha_picture;
+
+beginchar(c_ttha, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ttha";
+ path ttha_path;
+
+ pickup barpen;
+ z1 = (0uw, .5h);
+ z2 = (12.5uw, -overshoot);
+ z3 = (good.x 25uw, y1);
+ z4 = (x2, h+overshoot);
+ ttha_path := z1{down}..z2{right}..z3{up}..z4{left}..cycle;
+
+ % the subscribed ttha
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subbarpen;
+ draw ttha_path transformed sub;
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill ttha_path transformed sub;
+ sub_ttha_picture := currentpicture;
+ clearit;
+
+ % the full size ttha
+ pickup barpen;
+ draw ttha_path;
+
+ penlabels(1,2,3,4);
+endchar;
+
+% from the k\d{s}a we now develop the pa
+%
+% here the paths are stored for later re-use, in the letter pa, we actually
+% define three pictures, the letter pa itself, a slightly smaller raised
+% version and a smaller lowered version, the latter two we store in
+% picture variables.
+
+picture sup_pa_picture;
+picture sup_big_pa_picture;
+picture sub_pa_picture;
+picture sub_pha_picture;
+
+beginchar(c_pa, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter pa";
+ path pa_top; % top left curve
+ path pa_bot; % bottom left curve
+ path pa_bar; % standing bar
+ pickup curvepen;
+ % top left curve
+ z1 = (6.25uw, 8.75uh);
+ z2 = (0uw, 17uh);
+ z3 = (11uw, 25uh+overshoot);
+ z4 = (22uw, 25uh-joint);
+ pa_top := z1..z2{up}..z3{right}..{curl0}z4;
+ % bottom left curve
+ z7 = (10uw, 10.5uh);
+ z8 = (good.x 4uw, 4.5uh);
+ z9 = (11uw, -overshoot);
+ z10 = (x4, joint);
+ pa_bot = z7{curl0}..z8{down}..z9{right}..{curl0}z10;
+ % standing bar
+ pickup barpen;
+ z13 = (x4, 25uh); z14 = (x4, 0uh);
+ pa_bar := z13--z14;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+
+ % the raised pa:
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw pa_top transformed super;
+ draw pa_bot transformed super;
+ drawdot(z7 transformed super);
+ pickup barpen;
+ draw pa_bar transformed super;
+ drawdot(z13 transformed super);
+ drawdot(z14 transformed super);
+ cullit; sup_pa_picture := currentpicture;
+ clearit;
+
+ % the raised pa (slightly bigger):
+ super := identity scaled 21.25/25 shifted (0, 3.75uh);
+ pickup curvepen;
+ draw pa_top transformed super;
+ draw pa_bot transformed super;
+ drawdot(z7 transformed super);
+ pickup barpen;
+ draw pa_bar transformed super;
+ drawdot(z13 transformed super);
+ drawdot(z14 transformed super);
+ cullit; sup_big_pa_picture := currentpicture;
+ clearit;
+
+ % the lowered pa:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw pa_top transformed sub;
+ draw pa_bot transformed sub;
+ drawdot(z7 transformed sub);
+ pickup subbarpen;
+ draw pa_bar transformed sub;
+ drawdot(z13 transformed sub);
+ drawdot(z14 transformed sub);
+ % make the lines `super black'
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ % make the inside `super white'
+ unfill (z1..z2{up}..z3{right}..{curl0}z4 & z4--z10 & z10{curl0}
+ ..z9{left}..z8{up}..{curl0}z7..cycle) transformed sub;
+ sub_pa_picture := currentpicture;
+
+ % the lowered pha is a pa with a little eye:
+ z41 = (x4, 18uh);
+ z42 = (x4+3.5uw, 16uh);
+ z43 = (x4+7uw, 20.5uh);
+ z44 = (x42, 25uh);
+ z45 = (x41, 23uh);
+ draw (z41..z42{right}..z43{up}..z44{left}..z45) transformed sub;
+ sub_pha_picture := currentpicture;
+ clearit;
+
+ % finally, the full size pa:
+ pickup curvepen;
+ draw pa_top;
+ draw pa_bot;
+ drawdot(z7);
+ pickup barpen;
+ draw pa_bar;
+ drawdot(z13);
+ drawdot(z14);
+
+ cullit; savepicture := currentpicture;
+endchar;
+
+% the pha is a pa with a little eye in the top right
+
+beginchar(c_pha, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter pha";
+ currentpicture := savepicture;
+ x31 = 22uw;
+ top_left_eye;
+endchar;
+
+beginchar(c_p_ta, 26uw#+rm#, 25uh#, 8uh#); "Oriya conjunct p+ta";
+ currentpicture := savepicture + sec_ta_picture shifted (22uw, 4uh);
+endchar;
+
+beginchar(c_t_pa, 22uw#+rm#, 25uh#, 12uh#); "Oriya conjunct t+pa";
+ currentpicture := sup_big_pa_picture;
+ z1 = (22uw * (21.25/25), 0uh); % = z14 in big superior pa
+ ta_tail;
+ pickup barpen;
+ z10 = (x1, 3.75uh);
+ draw z1..z10;
+endchar;
+
+% the ssa is simply a pa with a diagonal. Here we have two variants,
+% the normal one, and a sligtly raised version, for use in conjuncts.
+
+picture sup_ssa_picture;
+
+beginchar(c_ssa, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter ssa";
+ path ssa_top;
+ path ssa_bot;
+ path ssa_dia;
+ path ssa_bar;
+
+ pickup curvepen;
+ % top left curve
+ z1 = (6.25uw, 8.75uh);
+ z2 = (0uw, 17uh);
+ z3 = (11uw, h+overshoot);
+ z4 = (22uw, h-joint);
+ ssa_top = z1..z2{up}..z3{right}..{curl0}z4;
+ % bottom left curve
+ z7 = (10uw, 10.5uh); % position adjusted to accomodate diagonal bar
+ z8 = (4uw, 4.5uh);
+ z9 = (11uw, -overshoot);
+ z10 = (x4, joint);
+ ssa_bot = z7{curl0}..z8{down}..z9{right}..{curl0}z10;
+ % main diagonal
+ pickup ddiagpen;
+ z11 = (4.75uw, 24.25uh); z12 = z10 - (1.5uw, 1uh);
+ ssa_dia = z11--z12;
+ % standing bar
+ pickup barpen;
+ z13 = (x4, h); z14 = (x4, 0uh);
+ ssa_bar = z13--z14;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+
+ % the superiour version
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw ssa_top transformed super;
+ draw ssa_bot transformed super;
+ drawdot(z7 transformed super);
+ pickup ddiagpen;
+ draw ssa_dia transformed super;
+ pickup barpen;
+ draw ssa_bar transformed super;
+ drawdot(z13 transformed super);
+ drawdot(z14 transformed super);
+ cullit; sup_ssa_picture := currentpicture;
+ clearit;
+
+ % the normal size version
+ pickup curvepen;
+ draw ssa_top;
+ draw ssa_bot;
+ drawdot(z7);
+ pickup ddiagpen;
+ draw ssa_dia;
+ pickup barpen;
+ draw ssa_bar;
+ drawdot(z13);
+ drawdot(z14);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_l_pa, 30uw#+rm#, 25uh#, 10uh#); "Oriya conjunct l+pa";
+ currentpicture := full_lla_picture + sub_pa_picture shifted (8uw, 0);
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_l_pha, 32uw#+rm#, 25uh#, 10uh#); "Oriya conjunct l+pha";
+ currentpicture := full_lla_picture + sub_pha_picture shifted (8uw, 0);
+ z1 = (4uw, 12uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_ss_ka, 22uw#+rm#, 25uh#, 5uh#); "Oriya conjunct ss+ka";
+ currentpicture := sup_ssa_picture + sub_ka_picture shifted (-4uw, 4uh);
+endchar;
+
+beginchar(c_ss_pa, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct ss+pa";
+ currentpicture := sup_ssa_picture + sub_pa_picture;
+endchar;
+
+beginchar(c_ss_pha, 25uw#+rm#, 25uh#, 9uh#); "Oriya conjunct ss+pha";
+ currentpicture := sup_ssa_picture + sub_pha_picture;
+endchar;
+
+beginchar(c_ss_tta, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct ss+tta";
+ currentpicture := sup_ssa_picture + sub_tta_picture;
+endchar;
+
+beginchar(c_ss_ttha, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct ss+ttha";
+ currentpicture := sup_ssa_picture + sub_ttha_picture;
+endchar;
+
+picture sup_k_ssa_picture;
+
+beginchar(c_k_ssa, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya conjunct k+ssa";
+ path kssa_top;
+ path kssa_botdiag;
+ path kssa_bot;
+ path kssa_diag;
+ path kssa_bar;
+
+ pickup curvepen;
+ % top left curve
+ z1 = (7.5uw, 6.5uh);
+ z2 = (0uw, 16uh);
+ z3 = (11uw, h+overshoot);
+ z4 = (22uw, h-joint);
+ kssa_top = z1{left}..z2{up}..z3{right}..{curl0}z4;
+ % bottom left diagonal
+ pickup udiagpen;
+ z5 = (10uw, 9uh);
+ z6 = (1uw, 0);
+ kssa_botdiag = z5--z6;
+ % bottom left curve
+ pickup curvepen;
+ z7 = z1;
+ z8 = (6.5uw, 3.5uh);
+ z9 = (11uw, -overshoot);
+ z10 = (x4, joint);
+ kssa_bot = z7..z8{down}..z9{right}..{curl0}z10;
+ % main diagonal
+ pickup ddiagpen;
+ % z11 = (4uw, 23uh);
+ % z12 = z10;
+ z11 = (5uw, 24uh);
+ z12 = z10 - (1.5uw, 1uh);
+ kssa_diag = z11--z12;
+ % standing bar
+ pickup barpen;
+ z13 = (x4, h);
+ z14 = (x4, 0uh);
+ kssa_bar = z13--z14;
+
+ % draw the raised kssa
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ draw kssa_top transformed super;
+ draw kssa_bot transformed super;
+ pickup udiagpen;
+ draw kssa_botdiag transformed super;
+ drawdot(z6 transformed super);
+ pickup ddiagpen;
+ draw kssa_diag transformed super;
+ pickup barpen;
+ draw kssa_bar transformed super;
+ drawdot(z13 transformed super);
+ drawdot(z14 transformed super);
+ cullit; sup_k_ssa_picture := currentpicture;
+ clearit;
+
+ % draw the full size kssa
+ pickup curvepen;
+ draw kssa_top;
+ draw kssa_bot;
+ pickup udiagpen;
+ draw kssa_botdiag;
+ drawdot(z6);
+ pickup ddiagpen;
+ draw kssa_diag;
+ pickup barpen;
+ draw kssa_bar;
+ drawdot(z13);
+ drawdot(z14);
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+%% the ya is like a kssa without a diagonal
+
+beginchar(c_ya, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter ya";
+ pickup curvepen;
+ % top left curve
+ z1 = (7.5uw, 6.5uh);
+ z2 = (0uw, 16uh);
+ z3 = (11uw, 25uh+overshoot);
+ z4 = (22uw, 25uh-joint);
+ draw z1{left}..z2{up}..z3{right}..{curl0}z4;
+ % bottom left diagonal
+ pickup udiagpen;
+ z5 = (11uw, 10uh); % adjusted because we removed the diagonal
+ z6 = (1uw, 0);
+ draw z5--z6;
+ drawdot(z6);
+ % bottom left curve
+ pickup curvepen;
+ z7 = z1;
+ z8 = (6.5uw, 3.5uh);
+ z9 = (11uw, -overshoot);
+ z10 = (x4, joint);
+ draw z7..z8{down}..z9{right}..{curl0}z10;
+ % standing bar
+ pickup barpen;
+ z13 = (x4, h);
+ z14 = (x4, 0uh);
+ draw z13--z14;
+ drawdot(z13);
+ drawdot(z14);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+%% the yya is like a ya with a two-like tail
+
+beginchar(c_yya, 25uw#+rm#, 25uh#, 10uh#); "Oriya letter yya";
+ pickup curvepen;
+ % top left curve
+ z1 = (7.5uw, 6.5uh);
+ z2 = (0uw, 16uh);
+ z3 = (10.5uw, h+overshoot); % a little bit narrower than ya
+ z4 = (21uw, h-joint);
+ draw z1{left}..z2{up}..z3{right}..{curl0}z4;
+ % bottom left diagonal
+ pickup udiagpen;
+ z5 = (11uw, 10uh); % adjusted because we removed the diagonal
+ z6 = (1uw, 0);
+ draw z5--z6;
+ drawdot(z6);
+ pickup curvepen;
+ % bottom left curve
+ z7 = z1;
+ z8 = (6.5uw, 3.5uh);
+ z9 = (11uw, -overshoot);
+ z10 = (x4, joint);
+ draw z7..z8{down}..z9{right}..{curl0}z10;
+ % standing bar
+ pickup barpen;
+ z13 = (x4, h);
+ z14 = (x4, 3uh);
+ % the tail
+ z16 = (x4+1uw, 3uh);
+ pickup curvepen;
+ new_tailtwo(15,16,17,18,19,20,21);
+ draw z13--z14;
+ drawdot(z13);
+ drawdot(z14);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+%%%%% da, di, hu, ha, hi
+
+picture sup_da_picture;
+
+beginchar(c_da, 23uw#+rm#, 25uh#, 0uh#); "Oriya letter da";
+ pickup curvepen;
+ z11 = (17uw, 0uh);
+ z12 = (x11, 13uh);
+ z13 = (7uw, 14uh);
+ z14 = (3.5uw, 8uh);
+ z15 = (10uw, 2uh);
+ z16 = (x11, 6uh);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ define_new_outer_circle;
+
+ path da_bar;
+ path da_curve;
+ path da_circle;
+ da_bar := z11---z12;
+ da_curve := z13..z14{down}..z15{right}..{curl0}z16;
+ da_circle := new_outer_circle_path;
+
+ % the superior da
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup barpen;
+ draw da_bar transformed super;
+ drawdot(z11 transformed super);
+ drawdot(z12 transformed super);
+ pickup curvepen;
+ draw da_curve transformed super;
+ draw da_circle transformed super;
+ drawdot(z5 transformed super);
+ drawdot(z13 transformed super);
+ cullit; sup_da_picture := currentpicture;
+ clearit;
+
+ % the normal da
+ pickup barpen;
+ draw da_bar;
+ drawdot(z11);
+ drawdot(z12);
+ pickup curvepen;
+ draw da_curve;
+ drawdot(z13);
+ penlabels(11,12,13,14,15,16);
+ cullit; savepicture := currentpicture;
+
+ draw_new_outer_circle;
+endchar;
+
+beginchar(c_d_ga, 22uw#+rm#, 25uh#, 8uh#); "Oriya conjunct d+ga";
+ currentpicture := sup_da_picture + sub_ga_picture shifted (-1uw, 1uh);
+endchar;
+
+beginchar(c_di, 23uw#+rm#, 25uh#, 0uh#); "Oriya combination di";
+ currentpicture := savepicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_narrow_i_circle;
+endchar;
+
+%%%%% ha
+
+beginchar(c_hu, 23uw#+rm#, 25uh#, 15uh#); "Oriya combination hu";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ draw z15--z16;
+ z17 = (7.5uw, -4uh);
+ z18 = (16uw, -12uh);
+ z19 = (12.5uw, -15uh);
+ z20 = (9uw, y18);
+ z21 = (17.5uw, y17);
+ z22 = (21.5uw, y16);
+ draw z16---z17..z18{down}..z19{left}..z20{up}..z21---z22;
+ penlabels(15,16,17,18,19,20,21,22,23);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_h_ba, 23uw#+rm#, 25uh#, 12uh#); "Oriya combination h+ba";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (-1uw, -5uh);
+ z17 = (17uw, -14uh);
+ draw z15--z16--z17;
+
+ pickup barpen;
+ z20 = (17uw, 0uh);
+ z21 = (x20, -9uh);
+ draw z20--z21;
+
+ z24 = (17uw, -2.5uw);
+ eye(22, 23, 24, 25)(10uw, 8uh);
+ draw_eye(22, 23, 24, 25); % intentionally drawn with barpen
+
+ penlabels(15,16,17, 20, 21, 22, 23, 24, 25);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_ha, 23uw#+rm#, 25uh#, 8uh#); "Oriya letter ha";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ z17 = (17uw, -8uh);
+ draw z15--z16; draw z16--z17; drawdot(z17);
+ penlabels(15,16,17);
+ cullit; savepicture := currentpicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_hi, 23uw#+rm#, 25uh#, 8uh#); "Oriya combination hi";
+ currentpicture := savepicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_narrow_i_circle;
+endchar;
+
+beginchar(c_h_na, 32uw#+rm#, 25uh#, 8uh#); "Oriya combination h+na";
+ currentpicture := savepicture;
+ z1 = (4.0uw, 11uh);
+ z2 = (good.x 0uw, 16uh);
+ z3 = (.5[x2,x4], good.y (25uh+overshoot));
+ z4 = (31uw, y2-2uh);
+ z5 = (29uw, 6.5uh);
+
+ % copied from secondary letter na
+ pickup curvepen;
+ z11 = (7uw, 0uh); % copied from letter na
+ z12 = (4uw, 3uh);
+ z13 = (16uw, 12uh);
+ z14 = (18uw, 10uh);
+ z15 = (x14, 0uh);
+ transform sub;
+ sub = identity scaled 10/12 shifted (16uw, -4uh);
+ draw (z11..tension0.95..z12{up}..tension2.0..z13{right}..z14{down}---z15)
+ transformed sub;
+ drawdot(z11 transformed sub);
+ drawdot(z12 transformed sub);
+
+ % draw the outer circle
+ draw z1{left}..z2{up}..z3{right}..z4{down}..z5;
+
+ penlabels(1, 2, 3, 4, 5, 11, 12, 13, 14, 15);
+endchar;
+
+beginchar(c_h_ma, 23uw#+rm#, 25uh#, 16uh#); "Oriya combination h+ma";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ draw z15--z16;
+ z17 = (7uw, -3.5uh);
+ z18 = (16uw, -11uh);
+ z19 = (12.5uw, -15uh);
+ z20 = (8uw, y18);
+ z21 = (18.5uw, y17);
+ z22 = (22.5uw, y16);
+ z23 = (x22, -16uh);
+ draw z16---z17..z18{down}..z19{left}..z20{up}..z21---z22--z23;
+ penlabels(15,16,17,18,19,20,21,22,23);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+%%%%% ja
+
+picture sec_ja_picture;
+picture sup_ja_picture;
+
+beginchar(c_ja, 27uw#+rm#, 25uh#, 0uh#); "Oriya letter ja";
+ path ja_curve;
+ path ja_bar;
+ path ja_circle;
+ z11 = (6uw, 12uh);
+ z12 = (3uw, 6.5uh);
+ z13 = (.5[x12, x14], -overshoot);
+ z14 = (16uw, 3.25uh);
+ z15 = (10uw, 9.25uh);
+ z16 = (13.5uw, 12uh);
+ z17 = (22uw, 9uh);
+ z18 = (x17, 0uh);
+
+ % outer circle;
+ z1 = (4.5uw, 11uh);
+ x4 = 27uw;
+ define_new_outer_circle;
+
+ ja_circle = new_outer_circle_path;
+ ja_bar = z17--z18;
+ ja_curve = z11..z12{down}..tension0.95..z13{right}..z14{up}..z15{up}..z16{right}..z17;
+
+ transform sub;
+ sub := identity scaled 10/12 shifted (7.5uw, -10.75uh);
+ pickup curvepen;
+ draw ja_bar transformed sub;
+ draw ja_curve transformed sub;
+ drawdot(z11 transformed sub);
+ drawdot(z17 transformed sub);
+ drawdot(z18 transformed sub);
+ cullit;
+ sec_ja_picture = currentpicture;
+ clearit;
+
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw ja_bar transformed super;
+ draw ja_curve transformed super;
+ draw ja_circle transformed super;
+ drawdot(z11 transformed super);
+ drawdot(z17 transformed super);
+ drawdot(z18 transformed super);
+ drawdot(z5 transformed super);
+ cullit;
+ sup_ja_picture = currentpicture;
+ clearit;
+
+ draw ja_bar;
+ draw ja_curve;
+ draw ja_circle;
+ drawdot(z11);
+ drawdot(z17);
+ drawdot(z18);
+ drawdot(z5);
+ penlabels(1, 2, 3, 4, 5, 11,12,13,14,15,16,17,18);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_j_ja, 28uw#+rm#, 25uh#, 11uh#); "Oriya conjunct j+ja";
+ currentpicture := savepicture + sec_ja_picture;
+endchar;
+
+%%%%% jha
+
+picture sub_jha_picture;
+
+beginchar(c_jha, 24uw#+rm#, 25uh#, 6uh#); "Oriya letter jha"; % continuous stroke eye
+ path jha_curve;
+ path jha_cup;
+ path jha_tail;
+
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (11uw, h+overshoot);
+ z9 = (13.5uw, y8-.5uh); % added from here
+ z10 = (12uw, 21uh);
+ z11 = (18uw, 15uh);
+ z12 = (24uw, 21uh);
+ z13 = (22.5uw, 25uh);
+ % tail at bottom
+ z14 = (15uw, .25uh);
+ z15 = (20uw, -5.75uh);
+
+ jha_curve = z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}
+ ..tension 0.95..z7{up}..z8{right}..z9;
+ jha_cup = z9..z10{down}..z11{right}..z12{up}..z13;
+ jha_tail = z14--z15;
+
+ % subscribed jha
+ transform sub;
+ sub := identity scaled 13/25 shifted (12uw, -9uh);
+ pickup subpen;
+ draw jha_curve transformed sub;
+ draw jha_cup transformed sub;
+ drawdot(z9 transformed sub);
+ drawdot(z13 transformed sub);
+ draw jha_tail transformed sub;
+ drawdot(z15 transformed sub);
+ sub_jha_picture = currentpicture;
+ clearit;
+
+ % full size jha
+ pickup curvepen;
+ draw jha_curve;
+ draw jha_cup;
+ drawdot(z9);
+ drawdot(z13);
+ draw jha_tail;
+ drawdot(z15);
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+endchar;
+
+beginchar(c_j_jha, 26uw#+rm#, 25uh#, 11uh#); "Oriya conjunct j+jha";
+ currentpicture := sup_ja_picture + sub_jha_picture;
+endchar;
+
+%%%%% ba
+
+picture sup_ba_picture;
+picture ba_picture;
+
+beginchar(c_ba, 24uw#+rm#, 25uh#, 0uh#); "Oriya letter ba";
+ path ba_curve;
+ path ba_circle;
+
+ z11 = (18uw, 0uh);
+ z12 = (x11, 8uh);
+ z13 = (10.5uw, 14uh);
+ z14 = (3.5uw, 8uh);
+ z15 = (x13, 2uh);
+ z16 = (x11, 6uh);
+ ba_curve = z11---z12..z13{left}..z14{down}..z15{right}..{curl0}z16;
+ penlabels(11,12,13,14,15,16);
+
+ z1 = (4.75uw, 12uh);
+ x4 = 24uw;
+ define_new_outer_circle;
+ ba_circle = new_outer_circle_path;
+
+ % the superior ba
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw ba_curve transformed super;
+ drawdot(z11 transformed super);
+ draw ba_circle transformed super;
+ cullit; sup_ba_picture := currentpicture;
+ clearit;
+
+ % the full size ba
+ pickup curvepen;
+ draw ba_curve;
+ drawdot(z11);
+ draw ba_circle;
+
+ ba_picture := currentpicture;
+endchar;
+
+beginchar(c_badot, 24uw#+rm#, 25uh#, 0uh#); "Oriya letter ba with dot inside";
+ currentpicture := ba_picture;
+ z2 = (10.5uw, 8uh + 1.75uh);
+ pickup barpen;
+ eye(1,2,3,4)(3.5uw,3.5uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+endchar;
+
+beginchar(c_b_ja, 27uw#+rm#, 25uh#, 11uh#); "Oriya conjunct b+ja";
+ currentpicture := ba_picture + sec_ja_picture;
+endchar;
+
+beginchar(c_b_dha, 21uw#+rm#, 25uh#, 10uh#); "Oriya conjunct b+dha";
+ currentpicture := sup_ba_picture + sub_dha_picture;
+endchar;
+
+beginchar(c_b_ba, 27uw#+rm#, 25uh#, 0uh#); "Oriya conjunct b+ba";
+ pickup curvepen;
+ z11 = z16 - (0, 1uh);
+ z12 = (7.5uw, 3uh);
+ z13 = (3uw, 9uh);
+ z14 = (x12, 14uh);
+ z15 = (x11, 10uh);
+ z16 = (12uw, 7uh);
+ z17 = (16.5uw, y12);
+ z18 = (21uw, 6uh);
+ draw z11{curl0}..z12{left}..z13{up}..z14{right}..z15{down}..z16{down}
+ ..z17{right}..{curl0}z18;
+ z19 = z15 + (0, 1uh);
+ z20 = (x17, y14);
+ z21 = (x18, y15);
+ z22 = (x18, 0uh);
+ draw z19{curl0}..z20{right}..z21{down}..z22; drawdot(z22);
+ penlabels(11,12,13,14,15,16,17,18,19,20,21,22);
+ z1 = (3.75uw, 12uh);
+ x4 = 27uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_b_da, 27uw#+rm#, 25uh#, 0uh#); "Oriya conjunct b+da";
+ pickup curvepen;
+ z11 = z16 - (0, 1uh);
+ z12 = (7.5uw, 3uh);
+ z13 = (3uw, 9uh);
+ z14 = (x12, 14uh);
+ z15 = (x11, 10uh);
+ z16 = (12uw, 7uh);
+ z17 = (16.5uw, y12);
+ z18 = (21uw, 6uh);
+ draw z11{curl0}..z12{left}..z13{up}..z14{right}..z15{down}..z16{down}
+ ..z17{right}..{curl0}z18;
+ % z19 = z15 + (0, 1uh); % removed
+ % z20 = (x17, y14); % removed
+ z21 = (x18, 13uh);
+ z22 = (x18, 0uh);
+ draw z21--z22; drawdot(z21); drawdot(z22);
+ penlabels(11,12,13,14,15,16,17,18, 21,22);
+ z1 = (3.75uw, 12uh);
+ x4 = 27uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_d_da, 27uw#+rm#, 25uh#, 0uh#); "Oriya conjunct d+da";
+ pickup curvepen;
+ z11 = z16 - (0, 1uh);
+ z12 = (7.5uw, 3uh);
+ z13 = (3uw, 9uh);
+ z14 = (6uw, 14uh); % adjusted
+ z15 = (x11, 13uh); % adjusted
+ z16 = (12uw, 7uh);
+ z17 = (16.5uw, y12);
+ z18 = (21uw, 6uh);
+ draw z11{curl0}..z12{left}..z13{up}..z14; drawdot(z14);
+ draw z15..z16{down}..z17{right}..z18{curl0}; drawdot(z15);
+ % z19 = z15 + (0, 1uh); % removed
+ % z20 = (x17, y14); % removed
+ z21 = (x18, 13uh);
+ z22 = (x18, 0uh);
+ draw z21--z22; drawdot(z21); drawdot(z22);
+ penlabels(11,12,13,14,15,16,17,18, 21,22);
+ z1 = (3.75uw, 12uh);
+ x4 = 27uw;
+ new_outer_circle;
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_d_dha, 27uw#+rm#, 25uh#, 0uh#); "Oriya conjunct d+dha";
+ currentpicture := savepicture;
+ pickup ddiagpen;
+ z21 = (21uw, 13uh);
+ z23 = (6uw, 24uh);
+ draw z21--z23;
+ penlabels(21,23);
+endchar;
+
+beginchar(c_n_da, 23uw#+rm#, 25uh#, 0uh#); "Oriya conjunct n+da";
+ z1 = (4.5uw, 10uh);
+ x4 = 23uw;
+ outer_circle;
+ pickup barpen;
+ z11 = (6uw, 13uh);
+ z12 = (0uw, 0uh);
+ draw z11--z12; drawdot(z11); drawdot(z12);
+ pickup curvepen;
+ z13 = (4uw, 7uh);
+ z14 = (10.5uw, 2uh-overshoot);
+ z15 = (17uw, 2uh+joint);
+ draw z11{(z12-z11)}..z13{down}..z14{right}..{curl0}z15;
+ z16 = (x15, 13uh);
+ z17 = (x16, 0uh);
+ draw z16--z17; drawdot(z16); drawdot(z17);
+ penlabels(11,12,13,14,15,16,17);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_n_dha, 24uw#+rm#, 25uh#, 0uh#); "Oriya conjunct n+dha";
+ currentpicture := savepicture;
+ pickup ddiagpen;
+ z16 = (17uw, 13uh);
+ z18 = (4.5uw, 23.5uh);
+ draw z16--z18;
+ penlabels(16,18);
+endchar;
+
+beginchar(c_bha, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter bha";
+ pickup curvepen;
+ z11 = (6uw, 13uh);
+ z12 = (3uw, 7uh);
+ z13 = (12uw, -overshoot);
+ z14 = (21uw, y12);
+ z15 = (19uw, y11);
+ draw z11..z12{down}..tension0.95..z13{right}..tension0.95..z14{up}..z15;
+ drawdot(z11);
+ drawdot(z15);
+ % inner cup
+ z16 = z15 - (0, 2uw);
+ z17 = (.5[x15,x19], 6uh);
+ z18 = (10.5uw, y16);
+ z19 = (x18, y15);
+ draw z15{down}..z16..tension0.95..z17{left}..tension0.95..z18..{up}z19;
+ drawdot(z19);
+ penlabels(11,12,13,14,15,16,17,18,19);
+ z1 = (4uw, 11uh);
+ x4 = 28uw;
+ new_tail_circle;
+endchar;
+
+beginchar(c_d_bha, 28uw#+rm#, 25uh#, 0uh#); "Oriya conjunct d+bha";
+ pickup curvepen;
+ z11 = (6uw, 12uh);
+ z12 = (3uw, 7uh);
+ z13 = (12uw, -overshoot);
+ z14 = (21uw, y12);
+ z15 = (19uw, 12uh);
+ draw z11..z12{down}..tension0.95..z13{right}..tension0.95..z14{up}..z15;
+ drawdot(z11);
+ drawdot(z15);
+ penlabels(11,12,13,14,15);
+ z16 = (20.75uw, 11uh);
+ z17 = (16uw, 9uh);
+ z18 = (11uw, 10uh);
+ z19 = (13uw, 15uh);
+ z20 = (11uw, 14uh);
+ z21 = (10uh, 21uh);
+ draw z15..z17..z19;
+ draw z19..z20..z21;
+ drawdot(z19);
+ drawdot(z21);
+ penlabels(16,17,18,19,20,21);
+ z1 = (4uw, 11uh);
+ x4 = 28uw;
+ new_tail_circle;
+endchar;
+
+%%%%% dda, ddi, u, uu, nga
+
+picture sub_dda_picture;
+picture sup_dda_picture;
+
+beginchar(c_dda, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter dda";
+ z11 = (9uw, 13uh);
+ z12 = (good.x 4uw, 6uh);
+ z13 = (.5[x12,x14], -overshoot);
+ z14 = (good.x 20uw, 6uh);
+ z15 = .5[z17,z18];
+ z16 = z17 - (1uw, 2uh);
+ z17 = (11uw, 8uh);
+ z18 = (17uw, 15uh);
+ z19 = z18 + (1uw, 2uh);
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ define_new_outer_circle;
+
+ path dda_bar;
+ path dda_curve;
+ path dda_circle;
+ dda_bar := z16..z17---z18..z19;
+ dda_curve := z11{curl0}..z12{down}..z13{right}..z14{up}..z15;
+ dda_circle := new_outer_circle_path;
+
+ % subscribed dda:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup barpen;
+ draw dda_bar transformed sub;
+ drawdot(z16 transformed sub);
+ drawdot(z19 transformed sub);
+ pickup curvepen;
+ draw dda_curve transformed sub;
+ drawdot(z11 transformed sub);
+ draw dda_circle transformed sub;
+ drawdot(z5 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (dda_circle--cycle) transformed sub;
+ sub_dda_picture := currentpicture;
+ clearit;
+
+ % the superior dda
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup barpen;
+ draw dda_bar transformed super;
+ drawdot(z16 transformed super);
+ drawdot(z19 transformed super);
+ pickup curvepen;
+ draw dda_curve transformed super;
+ drawdot(z11 transformed super);
+ draw dda_circle transformed super;
+ drawdot(z5 transformed super);
+ cullit; sup_dda_picture := currentpicture;
+ clearit;
+
+ % normal dda:
+ pickup barpen;
+ draw dda_bar;
+ drawdot(z16);
+ drawdot(z19);
+ pickup curvepen;
+ draw dda_curve;
+ drawdot(z11);
+ penlabels(11,12,13,14,15,16,17,18,19);
+ cullit; savepicture := currentpicture;
+
+ draw_new_outer_circle;
+endchar;
+
+beginchar(c_dd_dda, 23uw#+rm#, 25uh#, 10uh#); "Oriya conjunct dd+dda";
+ currentpicture := sup_dda_picture + sub_dda_picture;
+endchar;
+
+beginchar(c_dd_ga, 23uw#+rm#, 25uh#, 10uh#); "Oriya conjunct dd+ga";
+ currentpicture := sup_dda_picture + sub_ga_picture;
+endchar;
+
+beginchar(c_rr_ga, 23uw#+rm#, 25uh#, 10uh#); "Oriya conjunct rr+ga";
+ currentpicture := sup_dda_picture + sub_ga_picture;
+ z2 = (2uw, 0uh);
+ pickup barpen;
+ eye(1,2,3,4)(3.5uw,2.5uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_ddi, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ddi";
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ new_narrow_i_circle;
+endchar;
+
+beginchar(c_u, 27uw#+rm#, 25uh#, 0uh#); "Oriya letter u";
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 27uw;
+ new_tail_circle;
+endchar;
+
+beginchar(c_uu, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter uu";
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 28uw;
+ new_loop_tail_circle;
+endchar;
+
+beginchar(c_nga, 30uw#+rm#, 25uh#, 0uh#); "Oriya letter nga";
+ currentpicture := savepicture;
+ pickup curvepen;
+ % outer circle
+ z1 = (6.5uw, 11uh);
+ z2 = (good.x 0uw, 17uh);
+ z3 = (10uw, h+overshoot); % adjusted
+ z4 = (27.5uw, good.y 19uh); % adjusted
+ z5 = (good.x 31uw, 22.5uh); % adjusted
+ z6 = (x4, good.y(25uh+overshoot)); % added
+ z7 = (good.x 24uw, y5); % added
+ z8 = (25.5uw, 19.25uh); % added
+ draw z1{left}..z2{up}..tension0.95..z3{right}..z4{right}..z5{up}
+ ..z6{left}..z7{down}..z8;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+%%%%% ddha, ddhi
+
+beginchar(c_ddha, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ddha";
+ pickup curvepen;
+ z11 = (10uw, 13uh);
+ z12 = (good.x 4uw, 6uh);
+ z13 = (.5[x12,x14], -overshoot);
+ z14 = (good.x 20uw, 6uh);
+ z15 = z14 + (-3uw, 3uw);
+ z16 = (8uw, 0uh);
+ draw z11{curl0}..z12{down}..z13{right}..z14{up}..z15{left}..{curl0}z16;
+ drawdot(z11);
+ penlabels(11,12,13,14,15,16);
+ cullit; savepicture := currentpicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_ddhi, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter ddhi";
+ currentpicture := savepicture;
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ new_narrow_i_circle;
+endchar;
+
+%%%%% shapes related to nna
+
+picture sup_nna_picture;
+picture sub_nna_picture;
+
+beginchar(c_nna, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter nna";
+ path nna_top;
+ path nna_bot;
+ path nna_bar;
+
+ pickup curvepen;
+ % upper curve
+ z1 = (24uw, 25uh-joint);
+ z2 = (15uw, 25uh+overshoot);
+ z3 = (8uw, 21uh);
+ z4 = (10uw, 16.75uh);
+ nna_top = z1{curl0}..z2{left}..z3{down}..{curl0}z4;
+ z5 = (14uw, 14.5uh);
+ z6 = (7uw, 17.5uh);
+ z7 = (0, 9.5uh);
+ z8 = (10uw, -overshoot);
+ z9 = (17uw, 4uh);
+ z10 = (11uw, 9uh);
+ z11 = (2.5uw, 3uh);
+ nna_bot = z5{curl0}..z6{left}..z7{down}..z8{right}
+ ..z9{up}..z10{left}..{curl0}z11;
+ z12 = (x1, 25uh);
+ z13 = (x12, 0);
+ pickup barpen;
+ nna_bar = z12--z13;
+
+ % draw the superior version of nna
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw nna_top transformed super;
+ drawdot(z4 transformed super);
+ draw nna_bot transformed super;
+ pickup barpen;
+ draw nna_bar transformed super;
+ cullit; sup_nna_picture := currentpicture;
+ clearit;
+
+ % draw the subscribed version of nna
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -5uh);
+ pickup subpen;
+ draw nna_top transformed sub;
+ drawdot(z4 transformed sub);
+ draw nna_bot transformed sub;
+ pickup subbarpen;
+ draw nna_bar transformed sub;
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z8{left}..z7{up}..z6{right}..{curl0}z5..
+ z4{curl0}..z3{up}..z2{right}..{curl0}z1--
+ z13--cycle) transformed sub;
+ sub_nna_picture := currentpicture;
+ clearit;
+
+ % draw the full size nna:
+ pickup curvepen;
+ draw nna_top;
+ drawdot(z4);
+ draw nna_bot;
+ pickup barpen;
+ draw nna_bar;
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_nn_dda, 26uw#+rm#, 25uh#, 8uh#); "Oriya conjunct nn+dda";
+ currentpicture := savepicture + sec_ta_picture shifted (24uw, 4uh);
+endchar;
+
+beginchar(c_nn_ddha, 26uw#+rm#, 25uh#, 8uh#); "Oriya conjunct nn+ddha";
+ currentpicture := savepicture + sec_da_picture shifted (24uw, 4uh);
+endchar;
+
+beginchar(c_nn_tta, 28uw#+rm#, 25uh#, 8uh#); "Oriya conjunct nn+tta";
+ currentpicture := sup_nna_picture + sub_tta_picture shifted(5uw, 0);
+endchar;
+
+beginchar(c_nn_ttha, 28uw#+rm#, 25uh#, 8uh#); "Oriya conjunct nn+ttha";
+ currentpicture := sup_nna_picture + sub_ttha_picture shifted(4uw, 0);
+endchar;
+
+picture sec_nna_picture;
+
+beginchar(c_nn_nna, 30uw#+rm#, 25uh#, 13uh#); "Oriya letter nn+nna";
+ % subscribed nna
+ pickup curvepen;
+ z21 = (15.75uw, 1uh);
+ z22 = (good.x 14uw, -5uh);
+ z23 = (.5[x22,x24], good.y -13uh);
+ z24 = (good.x 30uw, -7uh);
+ z25 = (26.5uw, -3uh);
+ draw z21..z22{down}..z23{right}..z24{up}..z25;
+ draw z21..z22{down}..z23{right}..z24{up}..z25;
+ % unfill z21..z22{down}..z23{right}..z24{up}..z25..cycle;
+ z26 = (22uw, -5.5uh);
+ z27 = (good.x 28uw, 1uh);
+ z28 = (25uw, good.y 4uh);
+ z29 = (good.x 21uw, 1uh);
+ z30 = z29 + (1uw, -2uh);
+ draw z26{curl0}..tension 1.1..z27{up}..z28{left}..z29{down}..z30;
+ draw z26{curl0}..tension 1.1..z27{up}..z28{left}..z29{down}..z30;
+ unfill z26{curl0}..tension 1.1..z27{up}..z28{left}..z29{down}..z30..cycle;
+ penlabels(21,22,23,24,25,26,27,28,29);
+ sec_nna_picture := currentpicture;
+ currentpicture := savepicture + sec_nna_picture;
+endchar;
+
+beginchar(c_k_ss_nna, 25uw#+rm#, 25uh#, 7uh#); "Oriya conjunct k+ss+nna";
+% currentpicture := sup_k_ssa_picture + sub_nna_picture;
+ currentpicture := sup_k_ssa_picture + sec_nna_picture shifted (-6uw, 3uh);
+endchar;
+
+beginchar(c_ss_nna, 24uw#+rm#, 25uh#, 10uh#); "Oriya conjunct ss+nna";
+ currentpicture := sup_ssa_picture + sec_nna_picture shifted (-6uw, 3uh);
+endchar;
+
+%%%%% letter nya and related shapes
+
+beginchar(c_j_nya, 30uw#+rm#, 25uh#, 0uh#); "Oriya conjunct j+nya";
+ pickup curvepen;
+ % upper part
+ z1 = (4uw, 25uh);
+ z2 = (1uw, 19uh);
+ z3 = (4.5uw, 13uh); % adjusted
+ z4 = (22.5uw, 13uh); % adjusted
+ z5 = (25uw, 20uh);
+ z6 = (20uw, 25uh+overshoot);
+ z7 = z9 + (0, 1uh);
+ z8 = (x9, 17uh);
+ z9 = (16.5uw, 23uh);
+ z10 = (12.5uw, y6);
+ z11 = (8uw, 21uh);
+ z12 = (9.5uw, y8);
+ draw z1..tension.95..z2{down}..{(3,-1)}z3; drawdot(z1);
+ draw z4..z5{up}..z6{left}..{curl0}z7;
+ draw z8---z9..z10{left}..z11{down}..z12; drawdot(z8); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+ % lower part
+ z21 = (9uw, 6uh);
+ z22 = (4.5uw, 3uh);
+ z23 = (0uw, 8uh);
+ z24 = (x22, 13uh);
+ z25 = (x21, 9uh);
+ z26 = z21 + (0uw, 1uh);
+ z27 = (13.5uw, y22);
+ z28 = (18uw, 6uh);
+ draw z21{curl0}..z22{left}..z23{up}..z24{right}..z25{down}..z26{down}
+ ..z27{right}..{curl0}z28;
+ penlabels(21,22,23,24,25,26,27,28);
+ z29 = z25 + (0uw, 1uh);
+ z30 = (x27, y24);
+ z31 = (x28, y25);
+ z32 = (x31, 0uh);
+ draw z29{curl0}..z30{right}..z31{down}---z32; drawdot(z32);
+ penlabels(29,30,31,32);
+ z33 = z31 + (0uw, 1uh);
+ z34 = (22.5uw, y24);
+ z35 = (27uw, 8uh);
+ z36 = (25.5uw, 0uh);
+ draw z33{curl0}..z34{right}..z35{down}..z36; drawdot(z36);
+ penlabels(33,34,35,36);
+endchar;
+
+beginchar(c_ny_ja, 30uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ny+ja";
+ pickup curvepen;
+ % upper part (copied from Oriya letter nya)
+ z1 = (4uw, 25uh);
+ z2 = (1uw, 19uh);
+ z3 = (8.25uw, 13uh);
+ draw z1..tension.95..z2{down}..{(5,-1)}z3; drawdot(z1);
+ z4 = (21uw, 13.5uh); % adjusted
+ z5 = (25uw, 20uh);
+ z6 = (20uw, 25uh+overshoot);
+ z7 = z9 + (0, 1uh);
+ z8 = (x9, 17uh);
+ z9 = (16.5uw, 23uh);
+ z10 = (12.5uw, y6);
+ z11 = (8uw, 21uh);
+ z12 = (9.5uw, y8);
+ draw z4..z5{up}..z6{left}..{curl0}z7;
+ draw z8---z9..z10{left}..z11{down}..z12; drawdot(z8); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+ % lower part (copied from Oriya letter nya and adjusted)
+ z13 = (4uw, 14.5uh);
+ z14 = (0uw, 8uh);
+ z15 = (.5[x14,x16], -overshoot);
+ z16 = (23uw, 8uh);
+ z17 = (19uw, 14uh);
+ z18 = z20 + (0, 1uh);
+ z19 = (x20, 5uh);
+ z20 = (15uw, 11uh);
+ z21 = (11uw, y17);
+ z22 = (7uw, 9uh);
+ z23 = (8.5uw, 5uh);
+ draw z13..z14{down}..tension0.95..z15{right}..tension0.95..z16{up}..z17{left}..{curl0}z18;
+ draw z19---z20..z21{left}..z22{down}..z23; drawdot(z19); drawdot(z23);
+ % tail
+ pickup barpen;
+ z24 = (23uw, 10uh);
+ z25 = (30uw, 16uh);
+ z26 = (x25, 0uh);
+ draw z24--z25--z26; drawdot(z25); drawdot(z26);
+ penlabels(13,14,15,16,17,18,19,20,21,22,23,24,25,26);
+endchar;
+
+beginchar(c_ny_ca, 21uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ny+ca";
+ pickup curvepen;
+ % upper part (copied from nya and adjusted)
+ z1 = (2uw, 25uh);
+ z2 = (0uw, 19uh);
+ z3 = (4.75uw, 13.5uh);
+ draw z1..tension.95..z2{down}..tension.95..{(3,-1)}z3; drawdot(z1);
+ z4 = (11.5uw, 13uh);
+ z5 = (21uw, 20uh);
+ z6 = (16.5uw, 25uh+overshoot);
+ z7 = z9 + (0, 1uh);
+ z8 = (x9, 18uh);
+ z9 = (13.5uw, 23uh);
+ z10 = (10uw, y6);
+ z11 = (6uw, 21.5uh);
+ z12 = (7.5uw, y8);
+ draw z4{right}..z5{up}..z6{left}..{curl0}z7;
+ draw z8---z9..z10{left}..z11{down}..z12; drawdot(z8); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+ % lower part
+ z21 = (6uw, 7.5uh);
+ z22 = (4uw, 11uh);
+ z23 = (8uw, 15uh);
+ z24 = (12uw, 11uh);
+ z25 = (8uw, 7uh);
+ z26 = (3uw, 8uh);
+ z27 = (0uw, 4uh);
+ z28 = (8uw, -overshoot);
+ z29 = (19uw, joint);
+ draw z21{curl0}..z22{up}..z23{right}..z24{down}..z25{left}
+ ..z26..z27{down}..z28{right}..{curl0}z29;
+ z30 = (x29, 15.5uh);
+ z31 = (x30, 0uh);
+ draw z30--z31; drawdot(z31);
+ penlabels(21,22,23,24,25,26,27,28,29,30,31);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_ny_cha, 21uw#+rm#, 25uh#, 9uh#); "Oriya conjunct ny+cha";
+ currentpicture := savepicture + sec_tha_picture shifted (11uw, -8uh);
+endchar;
+
+beginchar(c_ny_jha, 27uw#+rm#, 25uh#, 0uh#); "Oriya conjunct ny+jha";
+ pickup curvepen;
+ currentpicture := savepicture;
+ z32 = (19uw, 9uh);
+ z33 = (27.5uw, 23uh);
+ draw z32--z33; drawdot(z33);
+ z34 = whatever[z32,z33];
+ x34 = x32+1.5uw;
+ z35 = (28uw, 0uh);
+ draw z34--z35; drawdot(z35);
+ penlabels(32,33,34,35);
+endchar;
+
+beginchar(c_nya, 26uw#+rm#, 25uh#, 0uh#); "Oriya letter nya";
+ pickup curvepen;
+ % upper part
+ z1 = (4uw, 25uh);
+ z2 = (1uw, 19uh);
+ z3 = (8.25uw, 13uh);
+ draw z1..tension.95..z2{down}..{(5,-1)}z3; drawdot(z1);
+ z4 = (22uw, 14uh);
+ z5 = (25uw, 20uh);
+ z6 = (20uw, 25uh+overshoot);
+ z7 = z9 + (0, 1uh);
+ z8 = (x9, 17uh);
+ z9 = (16.5uw, 23uh);
+ z10 = (12.5uw, y6);
+ z11 = (8uw, 21uh);
+ z12 = (9.5uw, y8);
+ draw z4..z5{up}..z6{left}..{curl0}z7;
+ draw z8---z9..z10{left}..z11{down}..z12; drawdot(z8); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+ % lower part
+ z13 = (4uw, 14.5uh);
+ z14 = (0uw, 8uh);
+ z15 = (.5[x14,x16], -overshoot);
+ z16 = (26uw, 8uh);
+ z17 = (20.5uw, 14uh);
+ z18 = z20 + (0, 1uh);
+ z19 = (x9, 5uh);
+ z20 = (x9, 11uh);
+ z21 = (12uw, y17);
+ z22 = (7uw, 9uh);
+ z23 = (8.5uw, 5uh);
+ draw z13..z14{down}..tension0.95..z15{right}..tension0.95..z16{up}..z17{left}..{curl0}z18;
+ draw z19---z20..z21{left}..z22{down}..z23; drawdot(z19); drawdot(z23);
+ penlabels(13,14,15,16,17,18,19,20,21,22,23);
+endchar;
+
+beginchar(c_nya_var, 20uw#+rm#, 25uh#, 0uh#); "Oriya letter nya (variant)";
+ pickup curvepen;
+ % top part, first curve
+ z1 = (2.5uw, 25uh);
+ z2 = (1uw, 22uh);
+ z3 = (9uw, 16uh);
+ z4 = (17.5uw, 22uh);
+ z5 = (15uw, 25uh+overshoot);
+ z6 = (12uw, y5-2uh);
+ draw z1..z2{down}..z3{right}..z4{up}
+ ..tension.95..z5{left}..tension0.95..{curl0}z6;
+ drawdot(z1);
+ % top part, second curve
+ z7 = (12uw, 20uh);
+ z8 = (x7, 23uh);
+ z9 = (9uw, 25uh+overshoot);
+ z10 = (6uw, 23uh);
+ z11 = (7uw, 20uh);
+ draw z7---z8{up}..z9{left}..z10{down}..z11;
+ % lower part, first curve
+ z12 = (2uw, 13.5uh);
+ z13 = (0uw, 8uh);
+ z14 = (10uw, -overshoot);
+ z15 = (20uw, 5uh);
+ z16 = (15uw, 9uh);
+ draw z12..z13{down}..tension.95..z14{right}..z15{up}..z16;
+ drawdot(z12);
+ % lower part, second curve
+ z17 = (11.5uw, 7.5uh);
+ % z18 = (15uw, 9uh);
+ z19 = (17.5uw, 12.5uh);
+ z20 = (13.5uw, 16uh);
+ z21 = (9.5uw, 13uh);
+ draw z17{curl0}..tension1.1..z19{up}..z20{left}..z21;
+ drawdot(z21);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21);
+endchar;
+
+%%%%% sa
+
+picture sup_sa_picture;
+picture sub_sa_picture;
+
+beginchar(c_sa, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter sa";
+ path sa_bar;
+ path sa_top;
+ path sa_bot;
+
+ pickup curvepen;
+ z1 = (14uw, 13uh);
+ z2 = (2.5uw, 6uh);
+ z3 = (22uw, -overshoot);
+ sa_bot = z1--z2 & z2--z3;
+ z4 = (7uw, 9uh);
+ z5 = (0uw, 18uh);
+ z6 = (10uw, h+overshoot);
+ z7 = (x3, h-joint);
+ sa_top = z4{curl0}..z5{up}..z6{right}..{curl0}z7;
+ pickup barpen;
+ z8 = (x3, h);
+ z9 = z3;
+ sa_bar = z8--z9;
+ penlabels(1,2,3,4,5,6,7,8,9);
+
+ % the superiour sa:
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw sa_bot transformed super;
+ drawdot(z1 transformed super);
+ drawdot(z2 transformed super);
+ draw sa_top transformed super;
+ pickup barpen;
+ draw sa_bar transformed super;
+ drawdot(z8 transformed super);
+ drawdot(z9 transformed super);
+ cullit; sup_sa_picture := currentpicture;
+ clearit;
+
+ % the subscribed sa:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup subpen;
+ draw sa_bot transformed sub;
+ drawdot(z1 transformed sub);
+ drawdot(z2 transformed sub);
+ draw sa_top transformed sub;
+ pickup subbarpen;
+ draw sa_bar transformed sub;
+ drawdot(z8 transformed sub);
+ drawdot(z9 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z1--z2--z4{curl0}..z5{up}..z6{right}..{curl0}z7--z3--cycle) transformed sub;
+ sub_sa_picture := currentpicture;
+ clearit;
+
+ % the full size sa:
+ pickup curvepen;
+ draw sa_bot;
+ drawdot(z1);
+ drawdot(z2);
+ draw sa_top;
+ pickup barpen;
+ draw sa_bar;
+ drawdot(z8);
+ drawdot(z9);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_s_ka, 22uw#+rm#, 25uh#, 5uh#); "Oriya conjunct s+ka";
+ currentpicture := sup_sa_picture + sub_ka_picture shifted (-4uw, 4uh);
+endchar;
+
+beginchar(c_s_tu, 23uw#+rm#, 25uh#, 10uh#); "Oriya conjunct s+tu";
+ currentpicture := sup_sa_picture + sec_nna_picture shifted (-7uw, 3uh);
+endchar;
+
+beginchar(c_s_kha, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct s+kha";
+ currentpicture := sup_sa_picture + sub_kha_picture shifted (-1.5uw, 0);
+endchar;
+
+beginchar(c_s_tha, 21uw#+rm#, 25uh#, 3uh#); "Oriya conjunct s+tha";
+ currentpicture := sup_sa_picture + sec_tha_picture shifted (11uw, -1uh);
+endchar;
+
+beginchar(c_s_pa, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct s+pa";
+ currentpicture := sup_sa_picture + sub_pa_picture;
+endchar;
+
+beginchar(c_s_pha, 24uw#+rm#, 25uh#, 9uh#); "Oriya conjunct s+pha";
+ currentpicture := sup_sa_picture + sub_pha_picture;
+endchar;
+
+beginchar(c_t_sa, 22uw#+rm#, 25uh#, 0uh#); "Oriya conjunct t+sa";
+ currentpicture := sup_sa_picture shifted (4uw, 0);
+ % lower diagonal;
+ pickup subpen;
+ z1 = (3uw, 12uh);
+ z2 = (0uw, 9uh);
+ z3 = (4uw, 6uh);
+ z4 = (22uw, 0);
+ draw z1..z2{down}..z3---z4;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_s_t_ra, 22uw#+rm#, 25uh#, 5uh#); "Oriya conjunct s+t+ra";
+ currentpicture := sup_sa_picture + sub_tra_picture shifted (6uw, 0);
+endchar;
+
+beginchar(c_k_sa, 30uw#+rm#, 28uh#, 9uh#); "Oriya conjunct k+sa";
+ currentpicture := full_ka_picture + sub_sa_picture shifted (9uw, 0uh);
+ % outer circle
+ z1 = (4uw, 12uh); % added (1uw, 2uh)
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_p_sa, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct p+sa";
+ currentpicture := sup_pa_picture + sub_sa_picture;
+endchar;
+
+beginchar(c_s_ta, 26uw#+rm#, 25uh#, 8uh#); "Oriya conjunct s+ta";
+ currentpicture := savepicture + sec_ta_picture shifted (22uw, 4uh);
+endchar;
+
+beginchar(c_t_ta, 26uw#+rm#, 25uh#, 0uh#); "Oriya conjunct t+ta";
+ pickup curvepen;
+ z11 = (5.5uw, 12uh);
+ z12 = (good.x 3uw, 7uh);
+ z13 = (.5[x12,x14], -overshoot);
+ z14 = (good.x 19uw, 6uh);
+ z15 = (14uw, 11.75uh);
+ z16 = (10uw, 9uh);
+ z17 = (good.x 16uw, 16.5uh);
+ z18 = (12.5uw, good.y 21uh);
+ z19 = (good.x 8uw, 17uh);
+ z20 = (9uw, 15uh);
+ draw z11..z12{down}..tension0.9..z13{right}..z14{up}..z15;
+ draw z16{curl0}..z17{up}..z18{left}..z19{down}..z20;
+ penlabels(11,12,13,14,15,16,17,18,19,20);
+ z1 = (4.25uw, 11uh);
+ x4 = 26uw;
+ new_tail_circle;
+endchar;
+
+picture sub_ma_picture;
+picture sup_ma_picture;
+
+beginchar(c_ma, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter ma";
+ path ma_top;
+ path ma_bot;
+ path ma_bar;
+
+ pickup curvepen;
+ % top left bow
+ z1 = (5.5uw, 7.75uh);
+ z2 = (good.x 0uw, 17uh);
+ z3 = (11uw, good.y (25uh+overshoot));
+ z4 = (good.x 22uw, 25uh-joint);
+ ma_top = z1..z2{up}..z3{right}..{curl0}z4;
+ % bottom curve
+ pickup curvepen;
+ z5 = (6uw, 0uh);
+ z6 = (good.x 3uw, 3uh);
+ z7 = (8uw, 8uh);
+ z8 = (15uw, 12uh);
+ ma_bot = z5..z6{up}..tension1.2..{(3,1)}z8;
+ % standing bar
+ pickup barpen;
+ z9 = (x4, h);
+ z10 = (x4, 0);
+ ma_bar := z9--z10;
+
+ % the superiour ma:
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup curvepen;
+ draw ma_top transformed super;
+ pickup barpen;
+ draw ma_bot transformed super;
+ drawdot(z5 transformed super);
+ draw ma_bar transformed super;
+ drawdot(z9 transformed super);
+ drawdot(z10 transformed super);
+ cullit; sup_ma_picture := currentpicture;
+ clearit;
+
+ % the subscribed sa:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -7uh);
+ pickup subpen;
+ draw ma_top transformed sub;
+ pickup subbarpen;
+ draw ma_bot transformed sub;
+ drawdot(z5 transformed sub);
+ draw ma_bar transformed sub;
+ drawdot(z9 transformed sub);
+ drawdot(z10 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z1..z2{up}..z3{right}..{curl0}z4--z10--z5..z6{up}..
+ tension1.2..{(3,1)}z8..cycle) transformed sub;
+ sub_ma_picture := currentpicture;
+ clearit;
+
+ % draw the full size ma
+ pickup curvepen;
+ draw ma_top;
+ pickup curvepen;
+ draw ma_bot;
+ drawdot(z5);
+ pickup barpen;
+ draw ma_bar;
+ drawdot(z9);
+ drawdot(z10);
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_m_ma, 22uw#+rm#, 25uh#, 7uh#); "Oriya conjunct m+ma";
+ currentpicture := sup_ma_picture + sub_ma_picture;
+endchar;
+
+beginchar(c_t_ma, 22uw#+rb#+rm#, 25uh#, 12uh#); "Oriya conjunct t+ma";
+ currentpicture := savepicture;
+ z1 = (22uw, 0uh); % z10 of letter ma
+ ta_tail;
+endchar;
+
+beginchar(c_m_pa, 28uw#+rm#, 25uh#, 0uh#); "Oriya conjunct m+pa";
+ pickup curvepen;
+ % top left bow
+ z1 = (5.5uw, 7.75uh);
+ z2 = (good.x 0uw, 17uh);
+ z3 = (11uw, good.y (25uh+overshoot));
+ z4 = (13.5uw, y3-.5uh);
+ draw z1..z2{up}..z3{right}..{curl0}z4; drawdot(z4);
+ z11 = (good.x 12uw, 21uh);
+ z12 = (18uh, good.y 15uw);
+ z13 = (good.x 24uw, 21uh);
+ draw z4..z11{down}..z12{right}..{curl0}z13;
+ % bottom curve
+ pickup curvepen;
+ z5 = (6uw, 0uh);
+ z6 = (good.x 3uw, 3uh);
+ z7 = (8uw, 8uh);
+ z8 = (14uw, 11.5uh); % adjusted
+ draw z5..z6{up}..tension1.2..{(3,1)}z8;
+ drawdot(z5);
+ % standing bar
+ pickup barpen;
+ z9 = (x13, h);
+ z10 = (x13, 0);
+ draw z9--z10;
+ drawdot(z9); drawdot(z10);
+ % save the picture without the diagonal
+ cullit; savepicture := currentpicture;
+ % diagonal
+ pickup ddiagpen;
+ z14 = (18uw, 25uh+overshoot);
+ z15 = (29uw, 12uh);
+ draw z14--z15; drawdot(z14); drawdot(z15);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+endchar;
+
+beginchar(c_m_pha, 30uw#+rm#, 25uh#, 0uh#); "Oriya conjunct m+pha";
+ currentpicture := savepicture;
+ % diagonal
+ pickup ddiagpen;
+ z14 = (18uw, 25uh+overshoot);
+ z15 = (30uw, 11uh); % adjusted
+ draw z14--z15; drawdot(z14); drawdot(z15);
+ penlabels(14,15);
+ % top left eye
+ x31 = 24uw;
+ top_left_eye;
+endchar;
+
+beginchar(c_dh_ya, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya conjunct dh+ya";
+ pickup curvepen;
+ z1 = (1uw, 25uh);
+ z2 = (13uw, 12uh);
+ draw z1--z2; drawdot(z1);
+ z3 = z2;
+ z4 = (7uw, 14uh);
+ z5 = (0uw, 7uh);
+ z6 = (7uw, -overshoot);
+ z7 = (12.25uw, 2uh);
+ draw z3..tension0.9..z4{left}..z5{down}..tension0.95..z6{right}..{curl0}z7;
+ z8 = (11uw, 6uh);
+ z9 = (18uw, -overshoot);
+ z10 = (24uw, joint);
+ draw z2..z8{down}..z9{right}..{curl0}z10;
+ pickup barpen;
+ z11 = (x10, 25uh);
+ z12 = (x11, 0uh);
+ draw z11--z12; drawdot(z11); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+%%%%% na, naa, secondary na, nta, ntra, tna
+
+picture napicture;
+
+beginchar(c_na, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter na";
+ pickup curvepen;
+ % inner shape
+ z11 = (7uw, 0uh);
+ z12 = (4uw, 3uh);
+ z13 = (16uw, 12uh);
+ z14 = (18uw, 10uh);
+ z15 = (x14, 0uh);
+ draw z11..tension0.95..z12{up}..tension2.0..z13{right}..z14{down}---z15;
+ drawdot(z11); drawdot(z12);
+ napicture := currentpicture;
+ % outer circle
+ z1 = (6.5uw, 7uh);
+ z2 = (0uw, 16uh);
+ z3 = (12uw, 25uh+overshoot);
+ z4 = (25uw, 16uh);
+ z5 = (22uw, 9uh);
+ draw z1..z2{up}..z3{right}..z4{down}..z5; drawdot(z5);
+ penlabels(1,2,3,4,5,11,12,13,14,15);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_naa, 27uw#+rm#+rb#, 25uh#, 0uh#); "Oriya combination naa";
+ pickup curvepen;
+ % inner shape
+ currentpicture := napicture;
+ % outer circle
+ z1 = (6.5uw, 7uh);
+ z2 = (0uw, 16uh);
+ z3 = (13.5uw, 25uh+overshoot);
+ z4 = (27uw, 25uh-joint);
+ z5 = (27uw, 25uh);
+ z6 = (27uw, 0uh);
+ draw z1..z2{up}..z3{right}..{curl0}z4; drawdot(z5); drawdot(z6);
+ pickup barpen;
+ draw z5--z6;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(c_ni, 25uw#+rm#, 25uh#, 0uh#); "Oriya combination ni";
+ pickup curvepen;
+ currentpicture := napicture;
+ z1 = (6.5uw, 7uh);
+ 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));
+ z4 = (25uw, 16uh);
+ z5 = (x4-2uw, 9uh);
+ draw z8{left}..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
+ penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% more common variant of n+ti, n+ta:
+
+beginchar(c_n_ti_var, 27uw#+rm#, 25uh#, 7uh#); "Oriya letter n+ti (variant)";
+ pickup curvepen;
+ % inner shape (slighlty reduced)
+ z11 = (7uw, 0uh);
+ z12 = (4uw, 3uh);
+ z13 = (15uw, 11uh);
+ z14 = (17uw, 9uh);
+ z15 = (x14, 0uh);
+ draw z11..tension0.95..z12{up}..tension2.0..z13{right}..z14{down}---z15;
+ drawdot(z11); drawdot(z12);
+ % outer circle
+ z1 = (6.5uw, 7uh);
+ 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));
+ z4 = (26.5uw, 15uh);
+ z5 = (24.5uw, 8uh);
+ draw z8{left}..z9{up}..z3{right}..z4{down}..z5; drawdot(z5);
+ % ta tail
+ z21 = z5 - (-2uw, 5.5uh);
+ z22 = z5 - (3uw, 3.5uh);
+ z23 = z5;
+ z24 = z5 - (-3uw, 3uh);
+ z25 = z5 - (12uw, 15uh);
+
+ draw z21..z22{up}..z23{right}..z24{down}...{curl0}z25;
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 21, 22, 23, 24, 25);
+endchar;
+
+beginchar(c_n_ta_var, 27uw#+rm#, 25uh#, 7uh#); "Oriya letter n+ta (variant)";
+ pickup curvepen;
+ % inner shape (slighlty reduced)
+ z11 = (7uw, 0uh);
+ z12 = (4uw, 3uh);
+ z13 = (15uw, 11uh);
+ z14 = (17uw, 9uh);
+ z15 = (x14, 0uh);
+ draw z11..tension0.95..z12{up}..tension2.0..z13{right}..z14{down}---z15;
+ drawdot(z11); drawdot(z12);
+ % outer circle
+ z1 = (6.5uw, 7uh);
+ z2 = (0uw, 16uh);
+ z3 = (13uw, 25uh+overshoot);
+ z4 = (26.5uw, 15uh);
+ z5 = (24.5uw, 8uh);
+ draw z1..z2{up}..z3{right}..z4{down}..z5; drawdot(z5);
+ % ta tail
+ z21 = z5 - (-2uw, 5.5uh);
+ z22 = z5 - (3uw, 3.5uh);
+ z23 = z5;
+ z24 = z5 - (-3uw, 3uh);
+ z25 = z5 - (12uw, 15uh);
+
+ draw z21..z22{up}..z23{right}..z24{down}...{curl0}z25;
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 21, 22, 23, 24, 25);
+endchar;
+
+beginchar(cs_na, 0uw#, 0uh#, 10uh#); "Oriya secondary na";
+ pickup curvepen;
+ z11 = (7uw, 0uh); % copied from letter na
+ z12 = (4uw, 3uh);
+ z13 = (16uw, 12uh);
+ z14 = (18uw, 10uh);
+ z15 = (x14, 0uh);
+ transform sub;
+ sub = identity scaled 10/12 shifted (-(11uw+rm+rb), -10uh);
+ draw (z11..tension0.95..z12{up}..tension2.0..z13{right}..z14{down}---z15)
+ transformed sub;
+ drawdot(z11 transformed sub);
+ drawdot(z12 transformed sub);
+endchar;
+
+beginchar(c_n_ta, 25uw#+rm#, 25uh#, 5uh#); "Oriya conjunct n+ta";
+ currentpicture := savepicture + sec_ta_picture shifted (18uw, 4uh);
+endchar;
+
+beginchar(c_n_t_ra, 25uw#+rm#, 25uh#, 12uh#); "Oriya conjunct n+t+ra";
+ currentpicture := savepicture + sub_tra_picture shifted (8uh, -6uh);
+endchar;
+
+beginchar(c_n_tha, 25uw#+rm#, 25uh#, 9uh#); "Oriya conjunct n+tha";
+ currentpicture := savepicture + sec_tha_picture shifted (12uw, -8uh);
+endchar;
+
+beginchar(c_t_na, 25uw#+rm#, 25uh#, 12uh#); "Oriya conjunct t+na";
+ currentpicture := savepicture;
+ z1 = (18uw, 0uh); % = z15 in letter na
+ ta_tail;
+endchar;
+
+%%%%% tha
+
+beginchar(c_tha, 20uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter tha";
+ pickup curvepen;
+ z1 = (4.5uw, 19.5uh);
+ z2 = (6uw, 21uh);
+ z3 = (7.5uw, 19.5uh);
+ z4 = (4uw, 18uh);
+ z5 = (3uw, 21uh);
+ z6 = (8.5uw, 25uh+overshoot);
+ z7 = (13uw, 20uh);
+ z8 = (0uw, 7uh);
+ z9 = (10uw, -overshoot);
+ z10 = (20uw, joint);
+ z11 = (x10, 25uh);
+ z12 = (x11, 0uh);
+ % draw z1{curl0}..z2{right}..z3{down}..
+ draw z4{curl0}..z5{up}..z7{down}
+ ..z8{down}..z9{right}..{curl0}z10;
+ draw z11--z12; drawdot(z11); drawdot(z12);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+
+%%%%% sha
+
+picture sup_sha_picture;
+
+beginchar(c_sha, 22uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter sha"; % continuous stroke eye
+ path sha_eye;
+ path sha_top;
+ path sha_bar;
+
+ pickup curvepen;
+ z1 = (5.5uw, 9uh); z2 = (good.x 4uw, 5uh); z3 = (9.5uw, -overshoot);
+ z4 = (good.x 15uw, 5uh); z5 = (10uw, good.y 10uh); z6 = (4uw, good.y 9uh);
+ z7 = (0uw, 14uh); z8 = (5uw, 19.5uh); z9 = (11uw, 18uh);
+ sha_eye := z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{curl0}z9;
+ z10 = (7uw, 19.25uh);
+ z11 = (good.x 6uw, 22.5uh);
+ z12 = (11uw, h + overshoot);
+ z13 = (22uw, h - joint);
+ sha_top := z10..z11{up}..z12{right}..{curl0}z13;
+ pickup barpen;
+ z14 = (x13, h); z15 = (x13, 0);
+ sha_bar := z14--z15;
+
+ % raised sha:
+ transform super;
+ super = identity scaled 20/25 shifted (0uw, 5uh);
+ pickup curvepen;
+ draw sha_eye transformed super;
+ draw sha_top transformed super;
+ drawdot(z9 transformed super);
+ pickup barpen;
+ draw sha_bar transformed super;
+ drawdot(z14 transformed super);
+ drawdot(z15 transformed super);
+ cullit; sup_sha_picture := currentpicture;
+ clearit;
+
+ % full size sha:
+ pickup curvepen;
+ draw sha_eye;
+ draw sha_top;
+ drawdot(z9);
+ pickup barpen;
+ draw sha_bar;
+ drawdot(z14);
+ drawdot(z15);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+ cullit; savepicture := currentpicture;
+endchar;
+
+beginchar(c_sh_tta, 25uw#+rm#, 25uh#, 9uh#); "Oriya conjunct sh+tta";
+ currentpicture := sup_sha_picture + sub_tta_picture shifted (4uw, 0uh);
+endchar;
+
+beginchar(c_sh_ca, 25uw#+rm#, 25uh#, 9uh#); "Oriya conjunct sh+ca";
+ currentpicture := sup_sha_picture + sub_ca_picture shifted (4uw, 0uh);
+endchar;
+
+beginchar(c_sh_cha, 21uw#+rm#, 25uh#, 3uh#); "Oriya conjunct s+cha";
+ currentpicture := sup_sha_picture + sec_tha_picture shifted (11uw, -1uh);
+endchar;
+
+beginchar(c_tta_var, 24uw#+rm#, 25uh#, 0uh#); "Oriya letter tta (variant)";
+ pickup curvepen;
+ z1 = (6uw, 5uh); z2 = (12uw, -overshoot);
+ z3 = (18uw, y1); z4 = (x2, 10uh+overshoot);
+ draw z1{down}..z2{right}..z3{up}..z4{left}..cycle;
+ z5 = (6.5uw, 8uh); z6 = (0uw, 15uh);
+ draw z5--z6;
+ z7 = (.5[x6,x8], y6+2.5uh);
+ z8 = (24uw, y6);
+ draw z6..z7{right}..z8;
+ z9 = (11uw, h+overshoot);
+ draw z8--z9; drawdot(z9);
+ penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+%%%%% vowels
+
+beginchar(c_a, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter a";
+ pickup curvepen;
+ z1 = (3.5uw, 17.5uh);
+ z2 = (2uw, 21.5uh);
+ z3 = (6.5uw, h+overshoot);
+ z4 = (10uw, 23uh);
+ % z4 = (10uw, 24uh);
+ z5 = (x4, 18uh);
+ draw z1..z2{up}..z3{right}..z4{down}--z5;
+ drawdot(z1); drawdot(z5);
+ if calligraphic: z6 = z4 + (0uw, 1uh); else: z6 = z4 fi;
+ z7 = (14uw, h+overshoot);
+ z8 = (18uw, 20.5uh); % (18uw, 20.5uh);
+ z9 = (10uw, 13.5uh); % (10uw, 14uh);
+ z10 = (0uw, 7.5uh); % (0uw, 8uh);
+ z11 = (11.5uw, -overshoot);
+ z12 = (24uw, 4uh);
+ draw z6 if calligraphic: {curl0} fi..z7{right}..z8{down}..
+ z9{left}..z10{down}..z11{right}..{curl0}z12;
+ pickup barpen;
+ z13 = (x12, h);
+ z14 = (x12, 0uh);
+ draw z13--z14;
+ drawdot(z13); drawdot(z14);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13);
+endchar;
+
+path li_path;
+
+beginchar(c_li, 20uw#+rm#, 25uh#, 0uh#); "Oriya letter li";
+ pickup curvepen;
+ z1 = (4uw, 24uh);
+ z2 = (7.5uw, 21uh);
+ z3 = (.5[x2,x4], 18uh);
+ z4 = (2uw, y2);
+ z5 = (9uw, 25uh + overshoot);
+ z6 = (16uw, 20uh);
+ z7 = (9uw, 14uh);
+ z8 = (0uw, 6uh);
+ z9 = (10uw, -overshoot);
+ z10 = (20uw, 5uh);
+ z11 = (.5[x10,x12], 8uh);
+ z12 = (x10-5uw, y10);
+ z13 = (x11, 2uh);
+ z14 = (x10-0.5uw, 3uh);
+ li_path := z1..z2{down}..z3{left}..z4{up}..z5{right}..z6{down}..
+ z7..tension 0.9..z8{down}..z9{right}..z10{up}..z11{left}..z12{down}..
+ z13{right}..z14;
+ draw li_path;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+beginchar(cs_li, 0uw#, 0uh#, 16uh#); "Oriya vowel sign li";
+ pickup subpen;
+ draw li_path scaled 14/25 shifted (-4uw, -16uw);
+endchar;
+
+path lii_path;
+
+beginchar(c_lii, 20uw#+rm#, 25uh#, 7uh#); "Oriya letter lii";
+ pickup curvepen;
+ z1 = (4uw, 24uh);
+ z2 = (7.5uw, 21uh);
+ z3 = (.5[x2,x4], 18uh);
+ z4 = (2uw, y2);
+ z5 = (9uw, 25uh + overshoot);
+ z6 = (16uw, 20uh);
+ z7 = (9uw, 14uh);
+ z8 = (0uw, 6uh);
+ z9 = (10uw, -overshoot);
+ z10 = (20uw, 5uh);
+ z11 = (.5[x10,x12], 8uh);
+ z12 = (x10-5.5uw, y10);
+ z13 = (x10-4uw, 2uh);
+ z14 = (x10+5uw, -7uh);
+ lii_path := z1..z2{down}..z3{left}..z4{up}..z5{right}..z6{down}..
+ z7..tension 0.9..z8{down}..z9{right}..z10{up}..z11{left}..z12{down}..
+ z13---z14;
+ draw lii_path;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+beginchar(cs_lii, 0uw#, 0uh#, 16uh#); "Oriya vowel sign lii";
+ pickup subpen;
+ draw lii_path scaled 14/25 shifted (-4uw, -16uh);
+endchar;
+
+beginchar(c_e, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter e";
+ pickup curvepen;
+ z1 = (12uw, 14uh);
+ z2 = z1 + (-2uw, 2uh);
+ z3 = z2 + (0.707uw, 1.414uh);
+ % y5 = 25uh; x6 = 24uw;
+ % z5 = z6 + (-2uw, 2uh);
+ z5 = (24uw, 25uh+overshoot);
+ % x7 = x6; y8 = 0uh;
+ % z8 = z7 + (-3uw, -2uh);
+ z7 = (x5, 0uh-overshoot);
+ z10 = (2uw, 12uh);
+ z11 = (0uw, 11.75uh);
+ draw z1..z2{up}..z3---z5;
+ draw z5---z7;
+ pickup curvepen;
+ draw z7---z10..z11;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+%% for the letter au we add a `mantle' to the letter e
+
+beginchar(c_ai, 32uw#+rb#+rm#, 36uh#, 0uh#); "Oriya letter ai";
+ pickup curvepen;
+ z1 = (13uw, 14uh);
+ z2 = z1 + (-2uw, 2uh);
+ z3 = z2 + (0.707uw, 1.414uh);
+ % y5 = 25uh; x6 = 24uw;
+ % z5 = z6 + (-2uw, 2uh);
+ z5 = (24uw, 24uh+overshoot);
+ % x7 = x6; y8 = 0uh;
+ % z8 = z7 + (-3uw, -2uh);
+ z7 = (x5, 0uh-overshoot);
+ z10 = (2uw, 12uh);
+ z11 = (0uw, 11.75uh);
+ draw z1..z2{up}..z3---z5;
+ draw z5---z7;
+ pickup curvepen;
+ draw z7---z10..z11;
+ % `mantle'
+ pickup curvepen;
+ z20 = (4uw, 36uh);
+ z21 = (17uw, 32uh);
+ z22 = (26uw, 32uh);
+ z23 = (32uw, 24uh);
+ z24 = (x23, 0uh);
+ draw z20..z21---z22{right}..{down}z23--z24;
+ drawdot(z20); drawdot(z24);
+ % connecting curve
+ z25 = (x5, 19uh);
+ z26 = (26uw, 16uh);
+ z27 = (x23, 18uh);
+ draw z25..z26..z27;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginchar(c_o, 23uw#+rm#, 25uh#, 0uh#); "Oriya letter o";
+ pickup curvepen;
+ % first curve
+ z1 = (6uw, 35uh);
+ z2 = (3.5uw, 22.5uh);
+ z3 = (0uw, 12.5uh);
+ z4 = (11.5uw, -overshoot);
+ z5 = (23uw, 8.5uh);
+ z6 = (16uw, 13.80uh);
+ draw z1{(1,-2)}..z2..z3{down}..tension0.95..
+ z4{right}..tension0.9..z5{up}..z6;
+ drawdot(z1);
+ % top right curve
+ z7 = (12uw, 12uh);
+ z8 = (20uw, 20uh);
+ z9 = (15uw, 25uh+overshoot);
+ z10 = (10uw, 22uh); % adjusted
+ z11 = (11.5uw, 19uh); % adjusted
+ z12 = (11uw, 21uh);
+ z13 = (10uw, 22.5uh);
+ draw z7{curl0}..z8{up}..z9{left}..z10{down}..z11; % ..z12..z13;
+ drawdot(z7); drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13);
+endchar;
+
+beginchar(c_oromsign, 23uw#+rm#, 35uh#, 0uh#); "Oriya symbol om";
+ pickup curvepen;
+ % first curve
+ z1 = (7uw, 31uh);
+ z2 = (3.5uw, 22.5uh);
+ z3 = (0uw, 12.5uh);
+ z4 = (11.5uw, -overshoot);
+ z5 = (23uw, 8.5uh);
+ z6 = (16uw, 13.80uh);
+ draw z1{down}..z2..z3{down}..tension0.95..z4{right}..tension0.9..z5{up}..z6;
+ drawdot(z1);
+ % top right curve
+ z7 = (12uw, 12uh);
+ z8 = (20uw, 20uh);
+ z9 = (15uw, 25uh+overshoot);
+ z10 = (10uw, 22uh); % adjusted
+ z11 = (11.5uw, 19uh); % adjusted
+ z12 = (11uw, 21uh);
+ z13 = (10uw, 22.5uh);
+ draw z7{curl0}..z8{up}..z9{left}..z10{down}..z11; % ..z12..z13;
+ drawdot(z7); drawdot(z11);
+ % big anusvar
+ pickup curvepen;
+ z21 = (2uw, 37uh);
+ z22 = (.5[x21, x23], 30uh);
+ z23 = (21uw, 37uh);
+ draw z21..tension.9..z22{right}..tension.9..z23;
+ pickup curvepen;
+ z27 = (x22+.25(thick-thin), 34uh);
+ eye(24,25,26,27)(6uw,6uh);
+ draw_eye(24,25,26,27);
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13, 21,22,23,24,25,26,27);
+endchar;
+
+%% to create the au, we lower the left-side curl of the o and add
+%% the bar on the top and on the left to it.
+
+beginchar(c_au, 29uw#+rb#+rm#, 36uh#, 0uh#); "Oriya letter au";
+ pickup curvepen;
+ % first curve
+ z1 = (5uw, 25uh); % position adjusted to accomodate top bar
+ z2 = (3.5uw, 22.5uh);
+ z3 = (0uw, 12.5uh);
+ z4 = (11uw, -overshoot);
+ z5 = (23uw, 8.5uh);
+ z6 = (16uw, 13.80uh);
+ draw z1..z3{down}..z4{right}..tension0.9..z5{up}..z6;
+ drawdot(z1);
+ % top right curve
+ z7 = (12uw, 12uh);
+ z8 = (20uw, 20uh);
+ z9 = (15uw, 25uh+overshoot);
+ z10 = (10uw, 22uh); % adjusted
+ z11 = (11.5uw, 19uh); % adjusted
+ z12 = (14.5uw, 21uh);
+ z13 = (11uw, 24.5uh);
+ draw z7{curl0}..z8{up}..z9{left}..z10{down}..z11; % {right}..z12{up}..z13;
+ drawdot(z7);
+ % `mantle'
+ pickup curvepen;
+ z14 = (0uw, 36uh); % 34uh
+ z15 = (13uw, 32uh); % 30uh
+ z16 = (22uw, 32uh); % 30uh
+ z17 = (29uw, 24uh); % 23uh
+ z18 = (x17, 0uh);
+ draw z14..z15{right}---z16{right}..z17{down}---z18;
+ drawdot(z14); drawdot(z15);
+ % connecting stroke
+ pickup curvepen;
+ z19 = (20uw, 19uh);
+ z20 = (25uw, 16uh);
+ z21 = (x17, 18uh);
+ draw z19..z20{right}..z21;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+beginchar(c_va, 16uw#+rm#, 25uh#, 0uh#); "Oriya letter va";
+ pickup curvepen;
+
+ z1 = (3uw, 25uh);
+ z2 = (0uw, 18uh);
+ z3 = (8uw, 10uh);
+ z4 = (16uw, 16uh);
+ z5 = (12.5uw, 19uh);
+ drawdot(z1);
+ draw z1..z2{down}..z3{right}..z4{up}..z5;
+ z6 = (8uw, 17uh);
+ z7 = (14uw, 22.5uh);
+ z8 = (10uw, 25uh+overshoot);
+ z9 = (7uw, 23uh);
+ z10 = (7.5uw, 22uh);
+ draw z6{curl0}..tension1.1..z7{up}..z8{left}..z9{down}..z10;
+ drawdot(z10);
+
+ z11 = (4uw, 11uh);
+ z12 = (2uw, 7uh);
+ z13 = (8uw, 2uh);
+ z14 = (13.5uw, 6uh);
+ z15 = (x14, 11.5uh);
+ z16 = (x15, 0uh);
+ draw z11..z12{down}..z13{right}..z14;
+ draw z15--z16;
+ drawdot(z16);
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+endchar;
+
+%%%%% vowel signs and modifiers
+
+
+picture reph_picture;
+
+beginchar(c_reph, 0uw#, 37uh#, 0uh#); "Oriya sign reph";
+ pickup curvepen;
+ z1 = (0uw, 27uh);
+ z2 = z1 + (-3uw, 4uh);
+ z3 = z1 + (7uw, 11uh);
+ draw z1..z2{up}..{curl0}z3;
+ drawdot(z1);
+ drawdot(z2);
+ reph_picture := currentpicture;
+ penlabels(1,2,3);
+ adjustpos(rm+rb);
+endchar;
+
+picture candrabindu_picture;
+
+beginchar(c_candrabindu, 0uw#, 37uh#, 0uh#); "Oriya sign candrabindu";
+ pickup curvepen;
+ z1 = (-7uw, 34.5uh);
+ z2 = (-0uw, 29uh);
+ z3 = (7uw, y1);
+ draw z1..tension0.9..z2{right}..tension0.9..z3;
+ pickup subpen;
+ eye(4,5,6,7)(5uw,5uh);
+ z7 = (x2+.25(thick-thin), 33uh);
+ draw_eye(4,5,6,7);
+ penlabels(1,2,3,4,5,6,7);
+ candrabindu_picture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_aa, 2uw#+rb#+rm#, 25uh#, 0uh#); "Oriya vowel sign aa";
+ pickup barpen;
+ z1 = (2uw, h);
+ z2 = (x1, 0uh);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(cs_i, 0uw#, 37uh#, 0uh#); "Oriya vowel sign i";
+ pickup curvepen;
+ z1 = (-22uw, 31uh);
+ z2 = z1 + (10.5uw, good.y 6uh);
+ z3 = z1 + (21uw, 0uh);
+ penlabels(1,2,3);
+ draw z1..z2{right}..z3; drawdot(z1); drawdot(z3);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_i_var, 0uw#, 0uh#, 11uh#); "Oriya vowel sign i (subscribed variant)";
+ pickup curvepen;
+ z1 = (-15uw, -1uh);
+ z2 = (-18uw, -7uh);
+ z3 = (0uw, -11uh);
+ draw z1--z2; drawdot(z1);
+ draw z2--z3; drawdot(z3);
+ penlabels(1,2,3);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_i_candrabindu, 0uw#, 37uh#, 0uh#); "Oriya vowel sign i with candrabindu";
+ pickup curvepen;
+ z1 = (-24uw, 31uh);
+ z2 = z1 + (8.125uw, 4uh);
+ z3 = z1 + (19.5uw, -1uh);
+ z4 = z1 + (26uw, 5uh);
+ draw z1..z2{right}..z3{right}..z4;
+ drawdot(z1); drawdot(z2);
+ pickup subpen;
+ eye(8,5,6,7)(5uw,5uh);
+ z7 = (x3+.25(thick-thin), 35uh);
+ draw_eye(8,5,6,7);
+ penlabels(1,2,3,4,5,6,7,8);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_i_reph, 0uw#, 37uh#, 0uh#); "Oriya vowel sign i with reph";
+ pickup curvepen;
+ z1 = (-22uw, 30uh);
+ z2 = z1 + (10.5uw, 6uh);
+ z3 = z1 + (21uw, 0uh);
+ draw z1..z2{right}..z3; drawdot(z1); drawdot(z3);
+ penlabels(1,2,3);
+ z11 = z3 + (-1.25uw, 2uh);
+ z11'= z11 + (-1.5uw, 1.5uh);
+ z12 = z11 + (-2uw, 3uh);
+ z13 = z11 + (7uw, 10uh);
+ draw z11'..z12{up}..{curl0}z13; drawdot(z11'); drawdot(z12);
+ penlabels(11,11',12,13);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_i_reph_candrabindu, 0uw#, 37uh#, 0uh#); "Oriya vowel sign i with candrabindu and reph";
+ pickup curvepen;
+ z1 = (-24uw, 31uh);
+ z2 = z1 + (8.125uw, 4uh);
+ z3 = z1 + (19.5uw, -1uh);
+ z4 = z1 + (26uw, 5uh);
+ draw z1..z2{right}..z3{right}..z4;
+ drawdot(z1); drawdot(z2);
+ pickup subpen;
+ eye(8,5,6,7)(5uw,5uh);
+ z7 = (x3+.25(thick-thin), 35uh);
+ draw_eye(8,5,6,7);
+ penlabels(1,2,3,4,5,6,7,8);
+
+ z11 = z3 + (-5uw, 3.5uh);
+ z12 = z11 + (-2uw, 3uh);
+ z13 = z11 + (7uw, 10uh);
+ draw z4..z3{left}..tension1.1..z12{up}..{curl0}z13; drawdot(z12);
+ penlabels(11,12,13);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_ii, 2uw#+rb#+rm#, 32uh#, 0uh#); "Oriya vowel sign ii";
+ pickup barpen;
+ z1 = (-8uw, 25uh);
+ z2 = (2uw, 32uh);
+ z3 = (x2, 0uh);
+ draw z1--z2--z3; drawdot(z3);
+ penlabels(1,2,3);
+endchar;
+
+beginchar(cs_u, 0uw#, 0uh#, 11uh#); "Oriya vowel sign u";
+ pickup subpen;
+ z1 = (0uw, 0.5uh);
+ z2 = (x1, -5uh);
+ z3 = (x1-4uw, -11uh);
+ z4 = (x1-8uw, -7.5uh);
+ z5 = (x3, -4uh);
+ z6 = (x1+7uw, -12uh);
+ z7 = (x6+5uw, y6+2uh);
+ draw z1--z2{down}..z3{left}..z4{up}..z5{right}..z6{right}..z7; drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(cs_u_low, 0uw#, 0uh#, 17uh#); "Oriya vowel sign u (lowered version)";
+ currentpicture := savepicture shifted (0, -6uh);
+endchar;
+
+beginchar(cs_u_verylow, 0uw#, 0uh#, 20uh#); "Oriya vowel sign u (much lowered version)";
+ currentpicture := savepicture shifted (0, -10uh);
+endchar;
+
+beginchar(cs_u_center, 0uw#, 0uh#, 17uh#); "Oriya vowel sign u (centered version)";
+ currentpicture := savepicture shifted (-11uw, -1uh);
+endchar;
+
+beginchar(cs_u_var, 0uw#, 0uh#, 15uh#); "Oriya vowel sign u (variant)";
+ pickup subpen;
+ z1 = (7.5uw, -3.5uh);
+ z2 = (11uw, -5.5uh);
+ z3 = (18uw, -12uh);
+ z4 = (15uw, -15uh);
+ z5 = (12uw, y3);
+ z6 = (19uw, y2);
+ z7 = (22.5uw, y1);
+ draw z1---z2..z3{down}..z4{left}..z5{up}..z6---z7;
+ drawdot(z1); drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+ adjustpos(28uw+rm+rb);
+endchar;
+
+beginchar(cs_uu, 0uw#, 0uh#, 11uh#); "Oriya vowel sign uu";
+ pickup subpen;
+ z1 = (0uw, 0.5uh);
+ z2 = (x1, -2uh);
+ z3 = (x1-5uw, -8uh);
+ z4 = (x1-2uw, -11uh);
+ z5 = (x1+3.5uw, -8.5uh);
+ z6 = (x1+14uw, -14uh);
+ z7 = (x6+2uw, y6+1uh);
+ draw z1--z2{down}..z3{down}..z4{right}..z5{right}..z6{right}..z7; drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(cs_uu_low, 0uw#, 0uh#, 17uh#); "Oriya vowel sign uu (lowered version)";
+ currentpicture := savepicture shifted (0, -6uh);
+endchar;
+
+beginchar(cs_uu_verylow, 0uw#, 0uh#, 20uh#); "Oriya vowel sign uu (much lowered version)";
+ currentpicture := savepicture shifted (0, -10uh);
+endchar;
+
+beginchar(cs_uu_center, 0uw#, 0uh#, 17uh#); "Oriya vowel sign uu (centered version)";
+ currentpicture := savepicture shifted (-11uw, -1uh);
+endchar;
+
+beginchar(cs_ri, 0uw#, 0uh#, 14uh#); "Oriya vowel sign ri";
+ pickup subpen;
+ z1 = (0, .5uh);
+ z2 = (x1, -0.5uh);
+ z3 = (x1 - 4uw, -9uh);
+ z4 = (x1 + 1uw, -14uh);
+ z5 = (x1 + 6uw, -10uh);
+ z6 = (x1 + 3.5uw, -7uh);
+ z7 = (x1 + 1uw, -10uh);
+ z8 = (x1 + 2uw, -13.75uh);
+ draw z1---z2..z3{down}..z4{right}..tension0.95
+ ..z5{up}..z6{left}..z7{down}..z8;
+ penlabels(1,2,3,4,5,6,7,8);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(cs_ri_low, 0uw#, 0uh#, 20uh#); "Oriya vowel sign ri (lowered version)";
+ currentpicture := savepicture shifted (0, -6uh);
+endchar;
+
+beginchar(cs_ri_verylow, 0uw#, 0uh#, 20uh#); "Oriya vowel sign ri (much lowered version)";
+ currentpicture := savepicture shifted (0, -10uh);
+endchar;
+
+beginchar(cs_ri_center, 0uw#, 0uh#, 17uh#); "Oriya vowel sign ri (centered version)";
+ currentpicture := savepicture shifted (-11uw, -1uh);
+endchar;
+
+beginchar(cs_rii, 0uw#, 0uh#, 16uh#); "Oriya vowel sign rii";
+ pickup subpen;
+ z1 = (0, .5uh);
+ z2 = (x1, -0.5uh);
+ z3 = (x1 - 4uw, -9uh);
+ z4 = (x1 + 1uw, -14uh);
+ z5 = (x1 + 6uw, -10uh);
+ z6 = (x1 + 3.5uw, -7uh);
+ z7 = (x1 + 1uw, -10uh);
+ z8 = (x1 + 2uw, -13.75uh);
+
+ draw (z1---z2..z3{down}..z4{right}..tension0.95
+ ..z5{up}..z6{left}..z7{down}..z8) scaled 10/14;
+ z9 = .5[z2, z3];
+ draw (z9..z3{down}..z4{right}..tension0.95
+ ..z5{up}..z6{left}..z7{down}..z8) scaled 10/14 shifted (2uw, -7.5uh);
+
+ penlabels(1,2,3,4,5,6,7,8);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+%% we purposely make the bounding box a bit narrower, so that the
+%% vowel sign comes quite close to the consonant it belongs to
+
+beginchar(cs_e, 17uw#+rm#, 25uh#, 0uh#); "Oriya vowel sign e"; % also used for ai, o, and au
+ pickup curvepen;
+ z1 = (17uw, h-1uh);
+ z2 = (11uw, h+overshoot);
+ z3 = (0uw, .5h);
+ z4 = (10uw, -overshoot);
+ z5 = (18uw, 5.5uh);
+ z6 = (11uw, 11.5uh);
+ z7 = (0.5uw, 7.5uh);
+ draw z1..z2{left}..tension0.9..z3{down}..tension0.9..z4{right}
+ ..z5{up}..z6{left}..z7;
+ drawdot(z1);
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(cs_ai, 0uw#, 37uw#, 0uh#); "Oriya vowel sign ai (second part)";
+ pickup curvepen;
+ z1 = (0, 25uh);
+ z2 = (x1, 27.5uh);
+ z3 = (x1+1uw, 33uh);
+ z4 = (x1-2.5uw, 37uh);
+ z5 = (x1-20uw, 33uh);
+ z6 = (x1-23uw, 34uh);
+ draw z2{up}...z3{up}..z4{left}..z5{left}..z6;
+ penlabels(1,2,3,4,5,6);
+ savepicture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_ai_candrabindu, 0uw#, 37uh#, 0uh#); "Oriya vowel sign ai with candrabindu";
+ currentpicture := savepicture + candrabindu_picture shifted (4uw, 6uh);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_ai_reph, 0uw#, 37uh#, 0uh#); "Oriya vowel sign ai with reph";
+ pickup curvepen;
+ z1 = (0, 25uh);
+ z2 = (x1, 27.5uh);
+ z3 = (x1+1uw, 33uh);
+ z4 = (x1-2.5uw, 37uh);
+ z5 = (x1-20uw, 33uh);
+ z6 = (x1-23uw, 34uh);
+ draw z2{up}...z3{up}..z4{left}..z5{left}..z6;
+ penlabels(1,2,3,4,5,6);
+ z12 = (0.5uw, 36uh);
+ z13 = (9uw, 42uh);
+ draw z3{up}...z12{up}..{curl0}z13; drawdot(z12);
+ penlabels(12,13);
+ savepicture := currentpicture;
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_ai_reph_candrabindu, 0uw#, 37uh#, 0uh#); "Oriya vowel sign ai with reph and candrabindu";
+ currentpicture := savepicture + candrabindu_picture shifted (7.5uw, 0.5uh);
+ adjustpos(rm+rb);
+endchar;
+
+beginchar(cs_au, 2uw#+rb#+rm#, 37uh#, 0uh#) "Oriya vowel sign au (second part)";
+ pickup curvepen;
+ z1 = (0uw, 0uh);
+ z2 = (0uw, 21uh);
+ z3 = (5uw, 33uh);
+ z4 = (1uw, 37uh);
+ z5 = (-20uw, 33uh);
+ z6 = (-30uw, 35uh);
+ draw z1---z2...z3{up}..z4{left}..z5{left}..z6;
+ penlabels(1,2,3,4,5,6);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(cs_au_candrabindu, 2uw#+rb#+rm#, 37uh#, 0uh#) "Oriya vowel sign au with candrabindu";
+ currentpicture := savepicture + candrabindu_picture shifted (9uw, 6uh);
+endchar;
+
+beginchar(cs_au_reph, 2uw#+rb#+rm#, 37uh#, 0uh#) "Oriya vowel sign au with reph";
+ pickup curvepen;
+ z1 = (0uw, 0uh);
+ z2 = (0uw, 21uh);
+ z3 = (5uw, 33uh);
+ z4 = (1uw, 37uh);
+ z5 = (-20uw, 33uh);
+ z6 = (-30uw, 35uh);
+ draw z1---z2...z3{up}..z4{left}..z5{left}..z6;
+ penlabels(1,2,3,4,5,6);
+ z12 = (4.5uw, 36uh);
+ z13 = (13uw, 42uh);
+ draw z3{up}...z12{up}..{curl0}z13; drawdot(z12);
+ penlabels(12,13);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(cs_au_reph_candrabindu, 6uw#+rm#, 37uh#, 0uh#) "Oriya vowel sign au with reph and candrabindu";
+ currentpicture := savepicture + candrabindu_picture shifted (11.5uw, 0.5uh);
+endchar;
+
+beginchar(c_anusvara, 10uw#+rm#, 25uh#, 0uh#); "Oriya sign anusvara";
+ pickup curvepen;
+ % top circle
+ z2 = (5uw, h+overshoot);
+ eye(1,2,3,4)(10uw,10uh);
+ draw_eye(1,2,3,4);
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_visarga, 10uw#+rm#, 25uh#, 0uh#); "Oriya sign visarga";
+ pickup curvepen;
+ % top circle
+ z2 = (5uw, h+overshoot);
+ eye(1,2,3,4)(10uw,10uh);
+ draw_eye(1,2,3,4);
+ % bottom circle
+ z8 = (x2, -overshoot);
+ eye(5,6,7,8)(10uw,10uh);
+ draw_eye(5,6,7,8);
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(c_visarga_var, 9uw#+rm#, 25uh#, 0uh#); "Oriya sign visarga (variant)";
+ pickup curvepen;
+ z1 = (.5[x2,x6], h+overshoot);
+ z2 = (good.x 8.75uw, 21uh);
+ z3 = (good.x 0uw, 4uh);
+ z4 = (x1, -overshoot);
+ z5 = (good.x 9uw, y3);
+ z6 = (good.x 0.25uw, y2);
+ draw z1{right}..z2{down}..z3{down}..z4{right}..z5{up}..z6{up}..cycle;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(c_halant, 0uw#, 0uh#, 10uh#); "Oriya sign halant";
+ pickup curvepen;
+ z1 = (0,-4uh);
+ z2 = (5uw, -10uh);
+ draw z1--z2;
+ drawdot(z1);
+ drawdot(z2);
+ penlabels(1,2);
+ adjustpos(rm+rb);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_halant_low, 0uw#, 0uh#, 14uh#); "Oriya sign halant (lowered version)";
+ currentpicture := savepicture shifted (0, -4uh);
+endchar;
+
+%%%%% numerals
+
+beginchar(c_zero, 20uw#+rm#, 25uh#, 0uh#); "Oriya numeral zero";
+ pickup curvepen;
+ z1 = (0uw, .5[y2,y4]);
+ z2 = (.5[x1,x3], 25uh+overshoot);
+ z3 = (20uw, y1);
+ z4 = (x2, -overshoot);
+ draw z1{up}..z2{right}..z3{down}..z4{left}..cycle;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_one, 18uw#+rm#, 25uh#, 0uh#); "Oriya numeral one";
+ pickup curvepen;
+ z1 = (5.5uw, 9.5uh);
+ z2 = (13uw, 19uh);
+ z3 = (6.5uw, 25uh+overshoot);
+ z4 = (0uw, 18uh);
+ z5 = (18uw, 0uh);
+ draw z1{curl0}..z2{up}..z3{left}..z4{down}..{curl0}z5;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(c_two, 18uw#+rm#, 25uh#, 0uh#); "Oriya numeral two";
+ pickup curvepen;
+ z1' = (17uw, 13uh);
+ z1 = (11uw, 9.5uh);
+ z2 = (4uw, 18uh);
+ z3 = (.5[x2,x4], 25uh+overshoot);
+ z4 = (18uw, 18uh);
+ z5 = (0uw, 0uh);
+ draw z1'{curl0}..z1{left}..z2{up}..z3{right}..z4{down}..{curl0}z5;
+ penlabels(1',1,2,3,4,5);
+endchar;
+
+beginchar(c_three, 22uw#+rm#, 25uh#, 0uh#); "Oriya numeral three";
+ pickup curvepen;
+ % z1 = (1uw, 22uh); % doesn't work nice with calligraphic pen
+ z1' = (0.5uw, 14uh);
+ z1 = (4uw, 16uh);
+ z2 = (7uw, 12uh);
+ z3 = (5uw, 9uh);
+ z4 = (0uw, 17uh);
+ z5 = (6uw, 25uh+overshoot);
+ z6 = (12uw, 21uh);
+ z7 = (x6, 5uh);
+ draw z1'{curl0}..z1{right}..z2{down}..z3{left}..z4{up}..
+ z5{right}..z6{down}---z7;
+ drawdot(z7);
+ z8 = z6 + (0uw, 2uh);
+ z9 = (17uw, y5);
+ z10 = (22uw, 18uh);
+ z11 = (18uw, 0uh);
+ draw z8{curl0}..z9{right}..z10{down}..z11; drawdot(z11);
+ penlabels(1',1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginchar(c_four, 20uw#+rm#, 25uh#, 0uh#); "Oriya numeral four";
+ pickup curvepen;
+ z1 = (10uw-11uw, 25uh);
+ z2 = (10uw-1uw, 15uh);
+ z3 = (10uw+6uw, 5uh);
+ z4 = (10uw, -overshoot);
+ z5 = (10uw-6uw, y3);
+ z6 = (10uw+1uw, y2);
+ z7 = (10uw+11uw, y1);
+ draw z1---z2..z3{down}..z4{left}..z5{up}..z6---z7;
+ drawdot(z1); drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_five, 18uw#+rm#, 25uh#, 0uh#); "Oriya numeral five";
+ pickup curvepen;
+ z1 = (0uw, 16uh);
+ z2 = (9uw, 9uh);
+ z3 = (13uw, 3.5uh);
+ z4 = (8uw, -overshoot);
+ z5 = (3uw, y3);
+ z6 = (9uw, 12.5uh);
+ z20 = (18uw, 25uh);
+ z6' = z20 - z6;
+ z7 = z20 - z5;
+ z8 = z20 - z4;
+ z9 = z20 - z3;
+ z10 = z20 - z2;
+ z11 = z20 - z1;
+ draw z1---z2..z3{down}..z4{left}..z5{up}..z6
+ ..z7{up}..z8{left}..z9{down}..z10---z11;
+ penlabels(1,2,3,4,5,6,6',7,8,9,10,11);
+endchar;
+
+beginchar(c_six, 16uw#+rm#, 25uh#, 0uh#); "Oriya numeral six";
+ pickup curvepen;
+ z1 = (0uw, 12uh);
+ z2 = (4uw, 10uh);
+ z3 = (8uw, 14uh);
+ z4 = (0uw, 21uh);
+ draw z1..z2{right}..z3{up}..{left}z4; drawdot(z1); drawdot(z4);
+ z5 = (7uw, 25uh+overshoot);
+ z6 = (16uw, 17uh);
+ z7 = (0uw, -overshoot);
+ draw z4..z5{right}..z6{down}..{curl0}z7; drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_seven, 16uw#+rm#, 25uh#, 0uh#); "Oriya numeral seven";
+ pickup curvepen;
+ z1' = (.5uw, 20.5uh);
+ z1 = (4uw, 22uh);
+ z2 = (8uw, 17.5uh);
+ z3 = (4uw, 13uh);
+ z4 = (0uw, 18uh);
+ z5 = (7uw, 25uh+overshoot);
+ z6 = (16uw, 17uh);
+ z7 = (0uw, -overshoot);
+ draw z1'{curl0}..z1{right}..z2{down}..z3{left}..
+ z4{up}..z5{right}..z6{down}..{curl0}z7; drawdot(z7);
+ penlabels(1',1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_eight, 16uw#+rm#, 25uh#, 0uh#); "Oriya numeral eight";
+ pickup curvepen;
+ z1 = (0uw, 0uh);
+ z2 = (0uw, 22uh);
+ z3 = (3uw, 25uh);
+ z4 = (17uw, 25uh);
+ draw z1---z2..z3---z4;
+ drawdot(z1); drawdot(z4);
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_nine, 16uw#+rm#, 25uh#, 0uh#); "Oriya numeral nine";
+ pickup curvepen;
+ z1 = (15uw, 25uh);
+ z2 = (x1, 12uh);
+ z3 = (0uw, 18uh);
+ z4 = (16uw, 0uh);
+ draw z1--z2--z3; drawdot(z1); drawdot(z2);
+ draw z3{down}..tension0.9..{curl0}z4; drawdot(z4);
+ penlabels(1,2,3,4);
+endchar;
+
+%%%%% punctuation, special signs and symbols
+
+beginchar(c_centerdot, 3uw#+rm#, 12.5uh#, 0uh#); "center dot";
+ pickup curvepen;
+ z1 = (0uw, 12.5uh);
+ eye(1,2,3,4)(3uw,3uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_question, 22uw#+rm#, 30uh#, 0uh#); "question mark";
+ pickup curvepen;
+ z1 = (11uw, 22uh);
+ z2 = (10uw, 25uh);
+ z3 = (.5[x2, x4], 30uh+overshoot);
+ z4 = (22uw, 25uh);
+ z5 = (.5[x4, x6], 19uh);
+ z6 = (x3-2uw, 11uh);
+ z7 = (x3, 7uh);
+ draw z1..z2{up}..z3{right}..z4{down}..z5..z6{down}..z7;
+
+ z9 = (x3, 1.5uh);
+ eye(8,9,10,11)(3uw, 3uh);
+ draw_eye(8,9,10,11);
+ fill z8{up}..z9{right}..z10{down}..z11{left}..cycle;
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginchar(c_exclamation, 12uw#+rm#, 30uh#, 0uh#); "exclamation mark";
+ pickup curvepen;
+ z1 = (11uw, 30uh);
+ z2 = (11uw, 7uh);
+ draw z1--z2;
+ z9 = (x1, 1.5uh);
+ eye(8,9,10,11)(3uw, 3uh);
+ draw_eye(8,9,10,11);
+ fill z8{up}..z9{right}..z10{down}..z11{left}..cycle;
+ penlabels(1,2,8,9,10,11);
+endchar;
+
+beginchar(c_dash, 7uw#+rm#, 13uh#, 0uh#); "dash";
+ pickup barpen;
+ z1 = (0, 13uh);
+ z2 = (7uw, y1);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(c_endash, 14uw#+rm#, 13uh#, 0uh#); "en-dash";
+ pickup barpen;
+ z1 = (0, 13uh);
+ z2 = (14uw, y1);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(c_emdash, 24uw#+rm#, 13uh#, 0uh#); "em-dash";
+ pickup barpen;
+ z1 = (0, 13uh);
+ z2 = (24uw, y1);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(c_comma, 3uw#+rm#, 3uh#, 7uh#); "comma";
+ pickup curvepen;
+ x1 = 0uw;
+ y4 = 0uh;
+ eye(1,2,3,4)(3uw,3uh);
+ z5 = (x3+.5uw,0uh);
+ z6 = (-1uw, -7uh);
+ draw z3{curl0}..z4{left}..z1{up}..z2{right}..z5{down}..{curl0}z6;
+ filldraw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4,5,6);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_closequote, 3uw#+rm#, 31uh#, 0uh#); "closing quote";
+ currentpicture := savepicture shifted (0, 28uh);
+endchar;
+
+beginchar(c_openquote, 3uw#+rm#, 31uh#, 0uh#); "opening quote";
+ currentpicture := savepicture rotated 180 shifted (3uw+rm, 24uh);
+endchar;
+
+beginchar(c_semicolon, 3uw#+rm#, 15uh#, 7uh#); "semicolon";
+ currentpicture := savepicture;
+ pickup curvepen;
+ x1 = 0uw;
+ y2 = 15uh;
+ eye(1,2,3,4)(3uw,3uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_colon, 3uw#+rm#, 15uh#, 0uh#); "colon";
+ pickup curvepen;
+ x1 = 0uw;
+ y2 = 15uh;
+ eye(1,2,3,4)(3uw,3uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+ x5 = 0uw;
+ y8 = 0uw;
+ eye(5,6,7,8)(3uw,3uh);
+ draw_eye(5,6,7,8);
+ filldraw z5..z6..z7..z8..cycle;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(c_openparen, 5uw#+rm#, 32uh#, 7uh#); "opening parenthesis";
+ pickup barpen;
+ z1 = (6uw, 32uh);
+ z2 = (0uw, .5[y1,y3]);
+ z3 = (x1, -7uh);
+ draw z1..z2{down}..z3;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(c_closeparen, 5uw#+rm#, 32uh#, 7uh#); "closing parenthesis";
+ pickup barpen;
+ z1 = (-1uw, 32uh);
+ z2 = (5uw, .5[y1,y3]);
+ z3 = (x1, -7uh);
+ draw z1..z2{down}..z3;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(c_openbracket, 5uw#+rm#, 32uh#, 7uh#); "opening bracket";
+ pickup barpen;
+ z1 = (5uw, 32uh);
+ z2 = (0uw, y1);
+ z3 = (x2, -7uh);
+ z4 = (x1, y3);
+ draw z1--z2--z3--z4;
+ drawdot(z1);
+ drawdot(z2);
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_closebracket, 5uw#+rm#, 32uh#, 7uh#); "closing bracket";
+ pickup barpen;
+ z1 = (0uw, 32uh);
+ z2 = (5uw, y1);
+ z3 = (x2, -7uh);
+ z4 = (x1, y3);
+ draw z1--z2--z3--z4;
+ drawdot(z1);
+ drawdot(z2);
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(c_openbrace, 7uw#+rm#, 32uh#, 7uh#); "opening brace";
+ pickup curvepen;
+ z1 = (8uw, 32uh);
+ z2 = (2uw, 26uh);
+ z3 = (3uw, 19uh);
+ z4 = (0uw, .5[y1,y7]);
+ z5 = (x3, 5uh);
+ z6 = (x2, -1uh);
+ z7 = (x1, -7uh);
+ draw z1{left}..z2{down}..z3{down}..z4;
+ drawdot(z1);
+ draw z4..z5{down}..z6{down}..{right}z7;
+ drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_closebrace, 7uw#+rm#, 32uh#, 7uh#); "closing brace";
+ pickup curvepen;
+ z1 = (-1uw, 32uh);
+ z2 = (5uw, 26uh);
+ z3 = (4uw, 19uh);
+ z4 = (7uw, .5[y1,y7]);
+ z5 = (x3, 5uh);
+ z6 = (x2, -1uh);
+ z7 = (x1, -7uh);
+ draw z1{right}..z2{down}..z3{down}..z4;
+ drawdot(z1);
+ draw z4..z5{down}..z6{down}..{left}z7;
+ drawdot(z7);
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_slash, 12uw#, 32uh#, 7uh#); "slash";
+ pickup barpen;
+ z1 = (12uw, 32uh);
+ z2 = (0uw, -7uh);
+ draw z1--z2;
+ drawdot(z1);
+ drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(c_backslash, 12uw#, 32uh#, 7uh#); "backslash";
+ pickup barpen;
+ z1 = (0uw, 32uh);
+ z2 = (12uw, -7uh);
+ draw z1--z2;
+ drawdot(z1);
+ drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+%% the nukta is positioned as to be placed correctly under
+%% dda and ddha to make rra and rrha.
+
+beginchar(c_nukta, 0uw#, 0uh#, 8uh#); "Oriya sign nukta";
+ z2 = (-12uw, -6uh);
+ pickup barpen;
+ eye(1,2,3,4)(3.5uw,3.5uh);
+ draw_eye(1,2,3,4);
+ filldraw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4);
+ adjustpos(rm+rb);
+endchar;
+
+%% the danda looks exactly like the vowel sign for aa, but this glyph
+%% doesn't ligate with consonants, and has more space before it
+
+beginchar(c_danda, 20uw#+rb#+rm#, 25uh#, 0uh#); "Oriya danda";
+ pickup barpen;
+ z1 = (20uw, 25uh);
+ z2 = (x1, 0uh);
+ draw z1--z2; drawdot(z1); drawdot(z2);
+ penlabels(1,2);
+endchar;
+
+beginchar(c_avagraha, 5uw#+rm#, 25uh#, 0uh#); "Oriya sign avagraha";
+ pickup curvepen;
+ z1 = (5uw, 0uh);
+ z2 = (0uw, 6.25uh);
+ z3 = (5uw, 12.5uh);
+ z4 = (0uw, 18.25uh);
+ z5 = (5uw, 25uh);
+ draw z1--z2--z3--z4--z5; drawdot(z1); drawdot(z2);
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(c_ganesh, 22uw#+rm#, 33uh#, 0uh#); "Oriya symbol for Ganesh";
+ pickup barpen;
+ z1 = (0uw, 15uh);
+ z2 = (10uw, -1.5uh);
+ z3 = (25uw, 33uh);
+ draw z1--z2; drawdot(z1);
+ draw z2--z3; drawdot(z3);
+ z5 = (10uw, 22uh);
+ eye(4,5,6,7)(4uw,4uh);
+ draw_eye(4,5,6,7);
+ filldraw z4..z5..z6..z7..cycle;
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(c_p_pa, 22uw#+rm#, 25uh#, 9uh#); "Oriya conjunct p+pa";
+ currentpicture := sup_pa_picture + sub_pa_picture;
+endchar;
+
+
+% end of orglyphs.mf
diff --git a/language/oriya/mf/oriya/oriya.mf b/language/oriya/mf/oriya/oriya.mf
new file mode 100644
index 0000000000..5672ecdeaf
--- /dev/null
+++ b/language/oriya/mf/oriya/oriya.mf
@@ -0,0 +1,14 @@
+% oriya.mf -- An Oriya Metafont, driver file
+% Copyright 1996 Jeroen Hellingman
+
+input orsetup; % set-up parameters
+input orkern; % kerning table
+
+input ortest;
+
+input orglyphs; % the Oriya glyph programs
+input dotcirc; % dotted circle and white box character
+
+end.
+
+% end of oriya.mf
diff --git a/language/oriya/mf/oriya/oriya.mft b/language/oriya/mf/oriya/oriya.mft
new file mode 100644
index 0000000000..c8b5aa07da
--- /dev/null
+++ b/language/oriya/mf/oriya/oriya.mft
@@ -0,0 +1,27 @@
+%%%% MFT commands for the PLAIN base
+%%% } ( ) ]] ! ^ %%%% tokens that need no special formatting
+%%% step upto downto %%%% boldface binary operators
+%%% addto fill unfill draw undraw %%%% boldface unary operators
+%%% addto filldraw unfilldraw drawdot undrawdot erase pickup
+%%% addto exitunless stop incr decr proofrulethickness screenrule
+%%% addto define_pixels define_whole_pixels define_whole_vertical_pixels
+%%% addto define_blacker_pixels define_whole_blacker_pixels
+%%% addto define_corrected_pixels lowres_fix proofoffset penstroke
+%%% addto beginchar italcorr font_size font_slant labels
+%%% addto font_normal_space font_normal_stretch font_normal_shrink font_quad
+%%% addto font_x_height font_extra_space font_identifier font_coding_scheme
+%%% enddef endchar %%%% boldface closing
+%%% true relax mode_setup %%%% boldface nullary operators
+%%% true clearit shipit cullit openit showit clearxy clearpen
+%%% true nodisplay notransforms screenchars screenstrokes imagerules
+%%% .. ... -- --- %%%% path operators made of dots and dashes
+%%% length flex abs dir %%%% unary operators to be in roman type
+%%% length unitvector inverse ceiling round vround counterclockwise
+%%% length tensepath byte reflectedabout rotatedaround magstep max min
+%%% and mod dotprod intersectionpoint softjoin %%%% binary operators to be roman
+%%% ++ ** %%%% binary operators made of two special characters
+%%% penoffset goodval direction directionpoint %%%% operators that take "of"
+%%% pausing tolerance pixels_per_inch blacker o_correction %%%% internals
+%%% pausing screen_rows screen_cols currentwindow displaying
+%%% pausing pen_top pen_bot pen_lft pen_rt rt lft top bot
+%%% = <= >= <> %%%% conversions for the SAIL character set only
diff --git a/language/oriya/mf/oriya/orkern.mf b/language/oriya/mf/oriya/orkern.mf
new file mode 100644
index 0000000000..25c8349882
--- /dev/null
+++ b/language/oriya/mf/oriya/orkern.mf
@@ -0,0 +1,234 @@
+% orkern.mf -- kerning table for Oriya metafont
+% Copyright 1996, 1997, 1998, 1999 Jeroen Hellingman
+%
+% Note:
+% we can't use kerning tables to position the matra's correctly, as that
+% will shift all following characters as well, we can, however, use kerning
+% and ligatures to change or join matras to the characters -- making the
+% preprocessor much simpler. For this need to create various, differently
+% positioned, copies of of the matras, but that we will have to do anyway,
+% when we create a PostScript version of the font for use in applications
+% that assume all glyphs are on the same line.
+%
+% History:
+% 20-JUN-1999 Added j+ja, j+jha (JH)
+% 16-JUN-1999 Added s+tu
+% 29-MAY-1999 Added k+tta, t+pa (JH)
+% 31-MAY-1998 Added h+ma (JH)
+% 30-MAY-1998 Added ni, n+ti, etc. (JH)
+% 07-SEP-1997 Added d+ga (JH)
+% 27-APR-1997 Added bhu combination (JH)
+% 18-NOV-1996 Added centered matras under some letters (JH)
+% 23-SEP-1996 Added flag to disable consonant-matra ligatures (JH)
+
+% define macros for variants of the vowel signs.
+
+def lowmatras =
+ cs_u |=: cs_u_low
+, cs_uu |=: cs_uu_low
+, cs_ri |=: cs_ri_low
+, cs_ra |=: cs_ra_low
+, c_halant |=: c_halant_low
+enddef;
+
+def verylowmatras =
+ cs_u |=: cs_u_verylow
+, cs_uu |=: cs_uu_verylow
+, cs_ri |=: cs_ri_verylow
+, cs_ra |=: cs_ra_low
+, c_halant |=: c_halant_low
+enddef;
+
+def centermatras =
+ cs_u |=: cs_u_center
+, cs_uu |=: cs_uu_center
+, cs_ri |=: cs_ri_center
+enddef;
+
+% kern values:
+
+k# := 1uw#;
+kk# := 2uw#;
+kkk# := 3uw#;
+
+% consonant-matra ligatures
+% note that the ligatures for the aa vowel sign will also be used for the
+% oo vowel sign. When noligs is true, no consonant-matra ligatures will
+% be use, however, the lowered variants of some matras will still be
+% needed.
+
+if ligs:
+
+ligtable c_ka : cs_aa =: c_kaa
+ , cs_i =: c_ki
+ , cs_u =: c_ku
+ , cs_uu =: c_kuu;
+ligtable c_jha : lowmatras;
+ligtable c_ta : cs_aa =: c_taa
+ , cs_i =: c_ti
+ , cs_u =: c_tu
+ , cs_uu =: c_tuu;
+ligtable c_tha : cs_i |=: cs_i_var;
+ligtable c_da : cs_i =: c_di;
+ligtable c_dha : cs_i |=: cs_i_var;
+ligtable c_na : cs_aa =: c_naa
+ , cs_i =: c_ni
+ , cs_u |=: cs_u_var;
+ligtable c_yya : lowmatras;
+ligtable c_la : cs_aa =: c_laa
+ , cs_u |=: cs_u_var
+ , c_halant |=: c_halant_low;
+ligtable c_ha : cs_i =: c_hi
+ , cs_u =: c_hu
+ , cs_uu |=: cs_uu_low
+ , cs_ri |=: cs_ri_low
+ , cs_ra |=: cs_ra_low;
+ligtable c_lla : cs_aa =: c_llaa
+ , cs_i =: c_lli
+ , cs_u |=: cs_u_var;
+
+% conjunct-matra combinations:
+
+ligtable c_ng_ka : cs_u |=: cs_u_var;
+ligtable c_ny_ca : cs_i |=: cs_i_var;
+ligtable c_ny_jha : cs_i |=: cs_i_var;
+ligtable c_n_ta_var : cs_i =: c_n_ti_var
+ , cs_u |=: cs_u_low
+ , cs_uu |=: cs_uu_low
+ , cs_ri |=: cs_ri_low
+ , cs_ra |=: cs_ra_low
+ , c_halant |=: c_halant_low;
+
+else:
+
+ligtable c_yya : lowmatras;
+ligtable c_la : lowmatras;
+ligtable c_ha : lowmatras;
+
+ligtable c_n_ta_var : lowmatras;
+
+fi;
+
+ligtable c_k_ka : verylowmatras;
+ligtable c_k_tta : verylowmatras;
+ligtable c_k_ta : lowmatras;
+ligtable c_k_sa : lowmatras;
+ligtable c_k_ss_nna : verylowmatras;
+ligtable c_g_ga : verylowmatras;
+ligtable c_g_dha : verylowmatras;
+ligtable c_nga : centermatras;
+ligtable c_ca : if ligs:
+ cs_aa =: c_caa
+ , fi centermatras;
+ligtable c_cha : centermatras;
+ligtable c_j_ja : verylowmatras;
+ligtable c_j_jha : verylowmatras;
+ligtable c_tta : centermatras
+ , c_ttha kern-kk#;
+ligtable c_ttha : centermatras;
+ligtable c_dda : if ligs:
+ cs_i =: c_ddi
+ , fi centermatras;
+ligtable c_dd_ga : lowmatras;
+ligtable c_rr_ga : lowmatras;
+ligtable c_dd_dda : lowmatras;
+ligtable c_ddha : if ligs:
+ cs_i =: c_ddhi
+ , fi centermatras;
+ligtable c_nn_tta : verylowmatras;
+ligtable c_nn_ttha : verylowmatras;
+ligtable c_nn_dda : lowmatras;
+ligtable c_nn_ddha : lowmatras;
+ligtable c_nn_nna : verylowmatras;
+ligtable c_t_na : lowmatras;
+ligtable c_t_pa : lowmatras;
+ligtable c_t_ma : lowmatras;
+ligtable c_d_ga : lowmatras;
+ligtable c_n_ta : lowmatras;
+ligtable c_n_t_ra : verylowmatras;
+ligtable c_p_ta : lowmatras;
+ligtable c_p_sa : verylowmatras;
+ligtable c_b_dha : verylowmatras;
+ligtable c_m_ma : lowmatras;
+ligtable c_ra : if ligs:
+ cs_aa =: c_raa
+ , fi centermatras;
+ligtable c_l_ka : verylowmatras;
+ligtable c_l_pa : verylowmatras;
+ligtable c_l_pha : verylowmatras;
+ligtable c_l_la : verylowmatras;
+ligtable c_sh_ca : verylowmatras;
+ligtable c_ss_ka : verylowmatras;
+ligtable c_ss_tta : verylowmatras;
+ligtable c_ss_ttha : verylowmatras;
+ligtable c_ss_pa : verylowmatras;
+ligtable c_ss_pha : verylowmatras;
+ligtable c_s_ka : verylowmatras;
+ligtable c_s_ta : cs_u =: c_s_tu
+ , cs_uu |=: cs_uu_low
+ , cs_ri |=: cs_ri_low
+ , cs_ra |=: cs_ra_low
+ , c_halant |=: c_halant_low;
+ligtable c_s_kha : verylowmatras;
+ligtable c_s_t_ra : verylowmatras;
+ligtable c_s_pa : verylowmatras;
+ligtable c_s_pha : verylowmatras;
+ligtable c_h_ba : lowmatras;
+ligtable c_h_ma : verylowmatras;
+
+ligtable c_dotted_circle: lowmatras;
+
+% low matras after secondary consonants
+
+ligtable cs_tha : lowmatras;
+ligtable cs_na : verylowmatras;
+ligtable cs_bha : cs_u =: cs_bhu
+ , cs_uu |=: cs_uu_verylow
+ , cs_ri |=: cs_ri_verylow
+ , cs_ra |=: cs_ra_low
+ , c_halant |=: c_halant_low;
+ligtable cs_ma : verylowmatras;
+ligtable cs_ra : lowmatras;
+ligtable cs_ra_low : verylowmatras;
+ligtable cs_la : verylowmatras;
+ligtable cs_lla : verylowmatras;
+ligtable cs_va : cs_u =: cs_vu
+ , cs_uu |=: cs_uu_verylow
+ , cs_ri |=: cs_ri_verylow
+ , cs_ra |=: cs_ra_low
+ , c_halant |=: c_halant_low;
+
+% matra-reph-candrabindu combinations:
+
+ligtable cs_i : c_reph =: cs_i_reph
+ , c_candrabindu =: cs_i_candrabindu;
+ligtable cs_i_reph : c_candrabindu =: cs_i_reph_candrabindu;
+ligtable cs_i_candrabindu : c_reph =: cs_i_reph_candrabindu;
+ligtable cs_ai : c_reph =: cs_ai_reph
+ , c_candrabindu =: cs_ai_candrabindu;
+ligtable cs_ai_reph : c_candrabindu =: cs_ai_reph_candrabindu;
+ligtable cs_ai_candrabindu : c_reph =: cs_ai_reph_candrabindu;
+ligtable cs_au : c_candrabindu =: cs_au_candrabindu
+ , c_reph =: cs_au_reph;
+ligtable cs_au_reph : c_candrabindu =: cs_au_reph_candrabindu;
+ligtable cs_au_candrabindu : c_reph =: cs_au_reph_candrabindu;
+
+% numerals:
+
+ligtable c_one : c_one kern-k#
+ , c_four kern-k#
+ , c_five kern-k#;
+ligtable c_four : c_two kern-kk#;
+ligtable c_eight : c_two kern-kkk#
+ , c_nine kern-kk#;
+
+% punctuation:
+
+ligtable c_danda : c_danda |=: cs_aa;
+ligtable c_openquote : c_openquote kern-kk#;
+ligtable c_closequote : c_closequote kern-kk#;
+
+ligtable c_dash : c_dash =: c_endash;
+ligtable c_endash : c_dash =: c_emdash;
+
+% end of orkern.mf
diff --git a/language/oriya/mf/oriya/orsetup.mf b/language/oriya/mf/oriya/orsetup.mf
new file mode 100644
index 0000000000..df57c455de
--- /dev/null
+++ b/language/oriya/mf/oriya/orsetup.mf
@@ -0,0 +1,75 @@
+% orsetup.mf -- setup things for the Oriya metafont after the parameters
+% have been read.
+% Copyright 1996 Jeroen Hellingman
+%
+% History:
+% 16-NOV-1996 changed pen definitions (Jeroen Hellingman)
+
+%% Parameters
+%%
+%% here we set the remaining parameters, based on values set in the
+%% parameter file.
+
+overshoot# := 1uh#; % overshoot of certain characters
+joint# := 4uh#; % height where curves join bars
+
+define_pixels(rb,rm,uw,uh,joint);
+define_whole_pixels(overshoot);
+
+currenttransform := currenttransform shifted (.5rm, 0) slanted slant;
+
+%% set the remaining font parameters in the {\tt .tfm} file
+
+font_slant := slant;
+font_quad := 20uw#;
+font_x_height := 25uh#;
+font_normal_space := 14uw#;
+font_normal_stretch := 8uw#;
+font_normal_shrink := 2uw#;
+
+%% pens
+
+superthin# := 0.1pt#;
+define_blacker_pixels(thin,thick,superthin);
+thin := max(thin,1);
+superthin := max(superthin,1);
+smoothing := 0;
+
+% Note: slight variations in pen-thickness have undesireable effects when
+% generating fonts for low resolution printers.
+
+% pen weight factors
+if calligraphic:
+ if (thick > 10.0):
+ HH := 1.15;
+ H := 1.075;
+ L := 0.925;
+ LL := 0.75;
+ else:
+ HH := 1.20;
+ H := 1.00;
+ L := 1.00;
+ LL := 0.80;
+ fi
+else:
+ HH := 1.00;
+ H := 1.00;
+ L := 1.00;
+ LL := 1.00;
+fi;
+
+% curvepen % pen used for circular curves
+% subpen % pen used for subscribed letters
+% subbarpen % pen used for standing bars in subscribed letters
+% barpen % pen used for standing bars
+% ddiagpen % pen used for top-right to bottom-left diagonals
+% udiagpen % pen used for bottom-right to top-left diagonals
+
+pickup pencircle xscaled thick yscaled thin rotated rot; curvepen := savepen;
+pickup pencircle xscaled (H * thick) yscaled (H * thin) rotated rot; barpen := savepen;
+pickup pencircle xscaled (HH * thick) yscaled (HH * thin) rotated rot; udiagpen := savepen;
+pickup pencircle xscaled (L * thick) yscaled (L * thin) rotated rot; subpen := savepen;
+pickup pencircle xscaled thick yscaled thin rotated rot; subbarpen := savepen;
+pickup pencircle xscaled (LL * thick) yscaled (LL * thin) rotated rot; ddiagpen := savepen;
+
+% end of orsetup.mf
diff --git a/language/oriya/mf/oriya/orsk10.mf b/language/oriya/mf/oriya/orsk10.mf
new file mode 100644
index 0000000000..f75c900d41
--- /dev/null
+++ b/language/oriya/mf/oriya/orsk10.mf
@@ -0,0 +1,26 @@
+% orsk10.mf -- Oriya skeleton 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+%
+% Note: these parameters are intended to test the font during the design
+% phase, and not for serious printing.
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 0.25uh#; % longest diameter of pen
+thin# := 0.25uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSK10";
+
+input oriya;
+
+% end of orsk10.mf
diff --git a/language/oriya/mf/oriya/orsl10.mf b/language/oriya/mf/oriya/orsl10.mf
new file mode 100644
index 0000000000..f2348b8aa7
--- /dev/null
+++ b/language/oriya/mf/oriya/orsl10.mf
@@ -0,0 +1,25 @@
+% orsl10.mf -- Oriya Slanted 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+
+input orcode;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.8uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSL10";
+
+input oriya;
+
+% end of orsl10.mf
diff --git a/language/oriya/mf/oriya/orsl12.mf b/language/oriya/mf/oriya/orsl12.mf
new file mode 100644
index 0000000000..ac329ec54b
--- /dev/null
+++ b/language/oriya/mf/oriya/orsl12.mf
@@ -0,0 +1,23 @@
+% orsl12.mf -- Oriya slanted 12 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 12pt#;
+uh# := 0.25pt#; % unit height, (X-height is 25uh)
+uw# := 0.25pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.7uh#; % smallest diameter of pen
+
+font_size 12pt#;
+font_identifier := "ORSL12";
+
+input oriya;
+
+% end of or12.mf
diff --git a/language/oriya/mf/oriya/orsl17.mf b/language/oriya/mf/oriya/orsl17.mf
new file mode 100644
index 0000000000..107345878a
--- /dev/null
+++ b/language/oriya/mf/oriya/orsl17.mf
@@ -0,0 +1,23 @@
+% orsl17.mf -- Oriya slanted 17 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 17.28pt#;
+uh# := 0.36pt#; % unit height, (X-height is 25uh)
+uw# := 0.34pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.6uh#; % smallest diameter of pen
+
+font_size 17.28pt#;
+font_identifier := "ORSL17";
+
+input oriya;
+
+% end of orsl17.mf
diff --git a/language/oriya/mf/oriya/orsl8.mf b/language/oriya/mf/oriya/orsl8.mf
new file mode 100644
index 0000000000..016f8440d1
--- /dev/null
+++ b/language/oriya/mf/oriya/orsl8.mf
@@ -0,0 +1,23 @@
+% orsl8.mf -- Oriya slanted 8 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 8pt#;
+uh# := 0.17pt#; % unit height, (X-height is 25uh)
+uw# := 0.18pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := true; % calligraphic effects
+rot := 30; % angle of pen
+thick# := 3uh#; % longest diameter of pen
+thin# := 0.8uh#; % smallest diameter of pen
+
+font_size 8pt#;
+font_identifier := "ORSL8";
+
+input oriya;
+
+% end of orsl8.mf
diff --git a/language/oriya/mf/oriya/orss10.mf b/language/oriya/mf/oriya/orss10.mf
new file mode 100644
index 0000000000..2fb2d8943b
--- /dev/null
+++ b/language/oriya/mf/oriya/orss10.mf
@@ -0,0 +1,24 @@
+% orss10.mf -- Oriya modern 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := false; % calligraphic effects
+ligs := false;
+rot := 30; % angle of pen
+thick# := 2.0uh#; % longest diameter of pen
+thin# := 2.0uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSS10";
+
+input oriya;
+
+% end of orss10.mf
diff --git a/language/oriya/mf/oriya/orss17.mf b/language/oriya/mf/oriya/orss17.mf
new file mode 100644
index 0000000000..399a91fe64
--- /dev/null
+++ b/language/oriya/mf/oriya/orss17.mf
@@ -0,0 +1,24 @@
+% orss17.mf -- Oriya modern regular 17 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 17.28pt#;
+uh# := 0.36pt#; % unit height, (X-height is 25uh)
+uw# := 0.34pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := false; % calligraphic effects
+ligs := false;
+rot := 30; % angle of pen
+thick# := 2.0uh#; % longest diameter of pen
+thin# := 2.0uh#; % smallest diameter of pen
+
+font_size 17.28pt#;
+font_identifier := "ORSS17";
+
+input oriya;
+
+% end of orss17.mf
diff --git a/language/oriya/mf/oriya/orssbf10.mf b/language/oriya/mf/oriya/orssbf10.mf
new file mode 100644
index 0000000000..eaef90c8c1
--- /dev/null
+++ b/language/oriya/mf/oriya/orssbf10.mf
@@ -0,0 +1,24 @@
+% orssbf10.mf -- Oriya modern bold 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0; % slant of characters
+calligraphic := false; % calligraphic effects
+ligs := false;
+rot := 30; % angle of pen
+thick# := 4.0uh#; % longest diameter of pen
+thin# := 4.0uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSSBF10";
+
+input oriya;
+
+% end of orssbf10.mf
diff --git a/language/oriya/mf/oriya/orssbs10.mf b/language/oriya/mf/oriya/orssbs10.mf
new file mode 100644
index 0000000000..74c8de5aab
--- /dev/null
+++ b/language/oriya/mf/oriya/orssbs10.mf
@@ -0,0 +1,24 @@
+% orssbs10.mf -- Oriya modern bold slanted 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := false; % calligraphic effects
+ligs := false;
+rot := 30; % angle of pen
+thick# := 4.0uh#; % longest diameter of pen
+thin# := 4.0uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSSBS10";
+
+input oriya;
+
+% end of orssbs10.mf
diff --git a/language/oriya/mf/oriya/orsssl10.mf b/language/oriya/mf/oriya/orsssl10.mf
new file mode 100644
index 0000000000..348896bd35
--- /dev/null
+++ b/language/oriya/mf/oriya/orsssl10.mf
@@ -0,0 +1,24 @@
+% orsssl10.mf -- Oriya modern slanted 10 pt parameter file
+% Copyright 1996 Jeroen Hellingman
+
+mode_setup;
+input orbase;
+
+gensize# := 10pt#;
+uh# := 0.21pt#; % unit height, (X-height is 25uh)
+uw# := 0.21pt#; % unit width
+rm# := 6.0uw#; % space in between characters
+rb# := 1.5uw#; % extra space to right of standing bars
+slant := 0.17; % slant of characters
+calligraphic := false; % calligraphic effects
+ligs := false;
+rot := 30; % angle of pen
+thick# := 2.0uh#; % longest diameter of pen
+thin# := 2.0uh#; % smallest diameter of pen
+
+font_size 10pt#;
+font_identifier := "ORSSSL10";
+
+input oriya;
+
+% end of orsssl10.mf
diff --git a/language/oriya/mf/oriya/ortest.mf b/language/oriya/mf/oriya/ortest.mf
new file mode 100644
index 0000000000..767d2691c7
--- /dev/null
+++ b/language/oriya/mf/oriya/ortest.mf
@@ -0,0 +1,437 @@
+% ortest.mf -- Oriya characters under design
+% Copyright 1996, 1998 Jeroen Hellingman
+%
+% History:
+% 29-MAY-1999 Last edit (Jeroen Hellingman)
+
+endinput;
+
+%% current version
+
+picture sec_ja_picture;
+
+beginchar(c_ja, 27uw#+rm#, 25uh#, 0uh#); "Oriya letter ja";
+ path ja_curve;
+ path ja_bar;
+ z11 = (6uw, 12uh);
+ z12 = (3uw, 6.5uh);
+ z13 = (.5[x12, x14], -overshoot);
+ z14 = (16uw, 3.25uh);
+ z15 = (10uw, 9.25uh);
+ z16 = (13.5uw, 12uh);
+ z17 = (22uw, 9uh);
+ z18 = (x17, 0uh);
+ ja_bar = z17--z18;
+ ja_curve = z11..z12{down}..tension0.95..z13{right}..z14{up}..z15{up}..z16{right}..z17;
+
+ transform sub;
+ sub := identity scaled 10/12 shifted (7.5uw, -10.75uh);
+ pickup curvepen;
+ draw ja_bar transformed sub;
+ draw ja_curve transformed sub;
+ drawdot(z11 transformed sub);
+ drawdot(z17 transformed sub);
+ drawdot(z18 transformed sub);
+ cullit;
+ sec_ja_picture = currentpicture;
+ clearit;
+
+ draw ja_bar;
+ draw ja_curve;
+ drawdot(z11);
+ drawdot(z17);
+ drawdot(z18);
+ penlabels(11,12,13,14,15,16,17, 18);
+ z1 = (4.5uw, 11uh);
+ x4 = 27uw;
+ new_outer_circle;
+ savepicture = currentpicture;
+endchar;
+
+beginchar(c_j_ja, 29uw#+rm#, 25uh#, 11uh#); "Oriya conjunct j+ja";
+ currentpicture := savepicture + sec_ja_picture;
+endchar;
+
+
+%% old version (not so nice)
+
+beginchar(c_ja, 28uw#+rm#, 25uh#, 0uh#); "Oriya letter ja";
+ % inner bows
+ pickup curvepen;
+ z11 = (6uw, 12uh);
+ z12 = (3uw, 6.5uh);
+ z13 = (8.5uw, -overshoot);
+ z14 = (14uw, 5.5uh);
+ z15 = (12.5uw, 10uh);
+ draw z11..z12{down}..z13{right}..z14{up}..z15; drawdot(z11);
+ z16 = (22uw, 12uh);
+ z17 = (x16, 0uh);
+ draw z15--z16; draw z16--z17; drawdot(z17);
+ penlabels(11,12,13,14,15,16,17);
+ z1 = (4.5uw, 11uh);
+ x4 = 28uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_j_ja, 29uw#+rm#, 25uh#, 9uh#); "Oriya conjunct j+ja";
+ z1 = (4uw, 11uh);
+ x4 = 28uw;
+ new_outer_circle;
+ % inner bows
+ pickup curvepen;
+ z11 = (6uw, 13uh);
+ z11' = (3.5uw, 9.5uh); % added
+ z12 = (3uw, 7.5uh); % adjusted
+ z13 = (8.5uw, 1uh-overshoot); % adjusted
+ z14 = (14uw, 6.5uh); % adjusted
+ z15 = (12.5uw, 11uh);
+ draw z11..z12{down}..z13{right}..z14{up}..z15; drawdot(z11);
+ z16 = (22uw, 13uh);
+ z17' = (x16, 3uh); % added
+ z17 = (x16, 0uh);
+ draw z15--z16; draw z16--z17';
+ penlabels(11,11',12,13,14,15,16,17,17');
+ transform subscript;
+ subscript = identity shifted (7.5uw, -9uh);
+ draw (z11'..z12{down}..z13{right}..z14{up}..z15) transformed subscript;
+ draw (z15--z16) transformed subscript;
+ draw (z16--z17) transformed subscript;
+ drawdot(z17 transformed subscript);
+endchar;
+
+
+
+picture sup_da_picture;
+
+beginchar(c_da, 23uw#+rm#, 25uh#, 0uh#); "Oriya letter da";
+ pickup curvepen;
+ z11 = (17uw, 0uh);
+ z12 = (x11, 13uh);
+ z13 = (7uw, 14uh);
+ z14 = (3.5uw, 8uh);
+ z15 = (10uw, 2uh);
+ z16 = (x11, 6uh);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ define_new_outer_circle;
+
+ path da_bar;
+ path da_curve;
+ path da_circle;
+ da_bar := z11---z12;
+ da_curve := z13..z14{down}..z15{right}..{curl0}z16;
+ da_circle := new_outer_circle_path;
+
+ % the superior da
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup barpen;
+ draw da_bar transformed super;
+ drawdot(z11 transformed super);
+ drawdot(z12 transformed super);
+ pickup curvepen;
+ draw da_curve transformed super;
+ draw da_circle transformed super;
+ drawdot(z5 transformed super);
+ drawdot(z13 transformed super);
+ cullit; sup_da_picture := currentpicture;
+ clearit;
+
+ % the normal da
+ pickup barpen;
+ draw da_bar;
+ drawdot(z11);
+ drawdot(z12);
+ pickup curvepen;
+ draw da_curve;
+ drawdot(z13);
+ penlabels(11,12,13,14,15,16);
+ cullit; savepicture := currentpicture;
+
+ draw_new_outer_circle;
+endchar;
+
+beginchar(c_di, 23uw#+rm#, 25uh#, 0uh#); "Oriya combination di";
+ currentpicture := savepicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_narrow_i_circle;
+endchar;
+
+beginchar(c_hu, 23uw#+rm#, 25uh#, 15uh#); "Oriya combination hu";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ draw z15--z16;
+ z17 = (7.5uw, -4uh);
+ z18 = (16uw, -12uh);
+ z19 = (12.5uw, -15uh);
+ z20 = (9uw, y18);
+ z21 = (17.5uw, y17);
+ z22 = (21.5uw, y16);
+ draw z16---z17..z18{down}..z19{left}..z20{up}..z21---z22;
+ penlabels(15,16,17,18,19,20,21,22,23);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_h_ba, 23uw#+rm#, 25uh#, 12uh#); "Oriya combination h+ba";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (-1uw, -5uh);
+ z17 = (17uw, -14uh);
+ draw z15--z16--z17;
+
+ pickup barpen;
+ z20 = (17uw, 0uh);
+ z21 = (x20, -9uh);
+ draw z20--z21;
+
+ z24 = (17uw, -2.5uw);
+ eye(22, 23, 24, 25)(10uw, 8uh);
+ draw_eye(22, 23, 24, 25); % intentionally drawn with barpen
+
+ penlabels(15,16,17, 20, 21, 22, 23, 24, 25);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+end.
+
+beginchar(c_ha, 23uw#+rm#, 25uh#, 8uh#); "Oriya letter ha";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ z17 = (17uw, -8uh);
+ draw z15--z16; draw z16--z17; drawdot(z17);
+ penlabels(15,16,17);
+ cullit; savepicture := currentpicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+beginchar(c_hi, 23uw#+rm#, 25uh#, 8uh#); "Oriya combination hi";
+ currentpicture := savepicture;
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_narrow_i_circle;
+endchar;
+
+beginchar(c_h_ma, 23uw#+rm#, 25uh#, 16uh#); "Oriya combination h+ma";
+ currentpicture := savepicture;
+ pickup curvepen;
+ z15 = (10uw, 2uh);
+ z16 = (3.5uw, -2uh);
+ draw z15--z16;
+ z17 = (7uw, -3.5uh);
+ z18 = (16uw, -11uh);
+ z19 = (12.5uw, -15uh);
+ z20 = (8uw, y18);
+ z21 = (18.5uw, y17);
+ z22 = (22.5uw, y16);
+ z23 = (x22, -16uh);
+ draw z16---z17..z18{down}..z19{left}..z20{up}..z21---z22--z23;
+ penlabels(15,16,17,18,19,20,21,22,23);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ new_outer_circle;
+endchar;
+
+
+
+end.
+
+endinput;
+
+picture sub_dda_picture;
+picture sup_dda_picture;
+
+beginchar(c_dda, 25uw#+rm#, 25uh#, 0uh#); "Oriya letter dda";
+ z11 = (9uw, 13uh);
+ z12 = (good.x 4uw, 6uh);
+ z13 = (.5[x12,x14], -overshoot);
+ z14 = (good.x 20uw, 6uh);
+ z15 = .5[z17,z18];
+ z16 = z17 - (1uw, 2uh);
+ z17 = (11uw, 8uh);
+ z18 = (17uw, 15uh);
+ z19 = z18 + (1uw, 2uh);
+ z1 = (6.5uw, 11uh);
+ x4 = 25uw;
+ define_new_outer_circle;
+
+ path dda_bar;
+ path dda_curve;
+ path dda_circle;
+ dda_bar := z16..z17---z18..z19;
+ dda_curve := z11{curl0}..z12{down}..z13{right}..z14{up}..z15;
+ dda_circle := new_outer_circle_path;
+
+ % subscribed ga:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup barpen;
+ draw dda_bar transformed sub;
+ drawdot(z16 transformed sub);
+ drawdot(z19 transformed sub);
+ pickup curvepen;
+ draw dda_curve transformed sub;
+ drawdot(z11 transformed sub);
+ draw dda_circle transformed sub;
+ drawdot(z5 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (dda_circle--cycle) transformed sub;
+ sub_dda_picture := currentpicture;
+ clearit;
+
+ % the superior dda
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup barpen;
+ draw dda_bar transformed super;
+ drawdot(z16 transformed super);
+ drawdot(z19 transformed super);
+ pickup curvepen;
+ draw dda_curve transformed super;
+ drawdot(z11 transformed super);
+ draw dda_circle transformed super;
+ drawdot(z5 transformed super);
+ cullit; sup_dda_picture := currentpicture;
+ clearit;
+
+ % normal dda:
+ pickup barpen;
+ draw dda_bar;
+ drawdot(z16);
+ drawdot(z19);
+ pickup curvepen;
+ draw dda_curve;
+ drawdot(z11);
+ penlabels(11,12,13,14,15,16,17,18,19);
+ cullit; savepicture := currentpicture;
+
+ draw_new_outer_circle;
+endchar;
+
+beginchar(c_d_ga, 23uw#+rm#, 25uh#, 10uh#); "Oriya conjunct dd+dda";
+ currentpicture := sup_dda_picture + sub_dda_picture;
+endchar;
+
+
+end.
+
+
+
+endinput;
+
+picture sup_da_picture;
+
+beginchar(c_da, 23uw#+rm#, 25uh#, 0uh#); "Oriya letter da";
+ pickup curvepen;
+ z11 = (17uw, 0uh);
+ z12 = (x11, 13uh);
+ z13 = (7uw, 14uh);
+ z14 = (3.5uw, 8uh);
+ z15 = (10uw, 2uh);
+ z16 = (x11, 6uh);
+ z1 = (4.0uw, 11uh);
+ x4 = 23uw;
+ define_new_outer_circle;
+
+ path da_bar;
+ path da_curve;
+ path da_circle;
+ da_bar := z11---z12;
+ da_curve := z13..z14{down}..z15{right}..{curl0}z16;
+ da_circle := new_outer_circle_path;
+
+ % the superior da
+ transform super;
+ super := identity scaled 20/25 shifted (0, 5uh);
+ pickup barpen;
+ draw da_bar transformed super;
+ drawdot(z11 transformed super);
+ drawdot(z12 transformed super);
+ pickup curvepen;
+ draw da_curve transformed super;
+ draw da_circle transformed super;
+ drawdot(z5 transformed super);
+ drawdot(z13 transformed super);
+ cullit; sup_da_picture := currentpicture;
+ clearit;
+
+ % the normal da
+ pickup barpen;
+ draw da_bar;
+ drawdot(z11);
+ drawdot(z12);
+ pickup curvepen;
+ draw da_curve;
+ drawdot(z13);
+ penlabels(11,12,13,14,15,16);
+ cullit; savepicture := currentpicture;
+
+ draw_new_outer_circle;
+endchar;
+
+picture sub_ga_picture;
+
+beginchar(c_ga, 24uw#+rb#+rm#, 25uh#, 0uh#); "Oriya letter ga";
+ z1 = (7.5uw, 9uh);
+ z2 = (6uw, 5uh);
+ z3 = (11.5uw, -overshoot);
+ z4 = (17uw, 5uh);
+ z5 = (12uw, 10uh);
+ z6 = (6uw, 9uh);
+ z7 = (0uw, 16uh);
+ z8 = (11uw, h+overshoot);
+ z9 = (24uw, h - joint);
+ z10 = (x9, h);
+ z11 = (x9, 0);
+
+ path ga_curve;
+ path ga_bar;
+ ga_curve := z1{curl0}..z2{down}..z3{right}..z4{up}..z5{left}..z6{left}..
+ z7{up}..z8{right}..{curl0}z9;
+ ga_bar := z10--z11;
+
+ % subscribed ga:
+ transform sub;
+ sub := identity scaled 15/25 shifted (8uw, -9uh);
+ pickup curvepen;
+ draw ga_curve transformed sub;
+ drawdot(z9 transformed sub);
+ pickup barpen;
+ draw ga_bar transformed sub;
+ drawdot(z10 transformed sub);
+ drawdot(z11 transformed sub);
+ currentpicture := currentpicture + currentpicture + currentpicture;
+ unfill (z6{left}..z7{up}..z8{right}..{curl0}z9--z11--cycle) transformed sub;
+ sub_ga_picture := currentpicture;
+ clearit;
+
+ % normal ga:
+ pickup curvepen;
+ draw ga_curve;
+ drawdot(z9);
+ pickup barpen;
+ draw ga_bar;
+ drawdot(z10);
+ drawdot(z11);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+ savepicture := currentpicture;
+endchar;
+
+beginchar(c_d_ga, 22uw#+rm#, 25uh#, 5uh#); "Oriya conjunct d+ga";
+ currentpicture := sup_da_picture + sub_ga_picture shifted (-1uw, 1uh);
+endchar;
+
+end.
+
+% end of ortest.mf
diff --git a/language/oriya/mf/oriya/parameters.txt b/language/oriya/mf/oriya/parameters.txt
new file mode 100644
index 0000000000..9d9f017499
--- /dev/null
+++ b/language/oriya/mf/oriya/parameters.txt
@@ -0,0 +1,25 @@
+
+Parameters for the Oriya fonts
+
+ in points unless indicated otherwise
+Font gensize uw uh rm rb slant rot thick thin
+
+or8 8.0 0.18 0.17 3uw 0.8uw
+or10 10.0 0.21 0.21 3uw 0.8uw
+or12 12.0 0.25 0.25 6.0uw 1.5uw 0 30 3uw 0.7uw
+or17 17.28 0.34 0.36 3uw 0.6uw
+
+orsl8 0.17
+orsl10 0.17
+orsl12 0.17
+
+orbf8 0
+orbf10 0 4.5uw 1.0uw
+orbf12 0 4.5uw 0.9uw
+
+orbs8 0
+orbs10 0
+orbs12 0
+
+
+orss12 0 0 2.0uw 2.0uw
diff --git a/language/oriya/mf/oriya/todo b/language/oriya/mf/oriya/todo
new file mode 100644
index 0000000000..3b92417955
--- /dev/null
+++ b/language/oriya/mf/oriya/todo
@@ -0,0 +1,42 @@
+TODO in the Oriya metafont as of 07 September 1997:
+
+glyphs seen but not included in this font:
+ conjunct k+la (can be made from parts by TeX)
+
+Characters to create:
+
+ improve question mark
+ add international numerals
+
+Characters done:
+
+ combination of secondary va/ba and vowel sign u [done]
+ combination of secondary bha and vowel sign u [done]
+ slash, backslash [done]
+ combination chaa [done]
+ conjunct mbha [done]
+ many consonant-matra combinations [done]
+ centered version of matra u, uu, ri and candrabindu for use with some letters [done]
+
+Edit or change:
+
+ quotes go wrong in slanted styles
+
+ move old characters to orold.mf [done]
+ hu adjust to new ha shape [done]
+ o, oo too narrow, eye to big [done]
+ dha looks ugly, make lower curve smaller [done]
+ nya try different design [done]
+ gha make stroke between bottom curves straight [done]
+ t+ta left of outer circle looks ugly [done]
+ dda, etc. adjust inner bar a bit [done]
+ o, oo, t+ta find solution for these small eyes [done]
+
+ make various dimensions integer with
+
+ define_whole_pixels()
+
+ and tactically use good.x alpha and good.y beta
+ (take care of picking the right pen first)
+
+