%% Metafont code for trope and miscellaneous other characters.

%% This part of the Makor2 package for typesetting Hebrew with Omega.
%%  (Alan Hoenig, July 2002)
mode_setup;

designsize:=10pt#;

hu#=2pt#; % horizontal unit
vu#=2pt#;   % vertical unit
define_pixels(hu,vu);

pair picshift;
def beginlowvowel(expr num, vwidth, vdepth)=
  beginchar(num, vwidth, 0pt#, vdepth);
  picshift:=(0,-1pt)
enddef;

def beginhivowel(expr num, vwidth, vht)=
  beginchar(num, vwidth, vht, 0pt#);
   picshift:=(0,1pt)
enddef;

extra_endchar:="currentpicture:=currentpicture shifted picshift;";

  def pickupmypen=pickup pencircle scaled 2r enddef;

%% Some cantorial vowels require placement not at the axis of visual
%% centering, but rather at the left or right edge of a letter.  We signal
%% this using the italic correction `italcorr' command.  A value of 1pt#
%% means the right edge, a value of -1pt# means the left edge, and a
%% value of 0pt# (the defult) means we use the normal axis of placement.

  leftedge:=.5pt#; rightedge:=1pt#;
  
beginlowvowel(33, .75hu#, vu#); % etnahta
z1=(0, -d); z3=(w, y1); z2=(.5w, -.33d); z4=(x2, 0);
pickup pencircle scaled .5pt;
draw z1{up}..z2..{down}z3;
draw z2--z4;
endchar;

beginhivowel(34,hu#,vu#); % trope segol
r:=.4pt;
pickup pencircle scaled 2r;
z0=(r,r); z1=(.5w, h-r); z2=(w-x0, y0);
drawdot z0; drawdot z1; drawdot z2;
endchar;

beginhivowel(35, .8hu#, 2vu#); % shalshelet
r:=.15pt; pickup pencircle scaled 2r;
x0=x2=x4=x6=w-r;
x1=x3=x5=r;
y0=r; y6=h-r; y2-y0=y4-y2=y6-y4;
y1=.5[y0,y2]; y5=h-y1; y3-y1=y5-y3;
draw z0---z1---z2---z3---z4---z5---z6;
endchar;

beginhivowel(36, .8pt#, 1.8pt#); % zaqef qatan
r:=.3pt; pickupmypen;
z0=(.5w, r); z1=(x0, h-r);
drawdot z0; drawdot z1;
endchar;

beginhivowel(37, 1.5pt#, 1.8pt#); % zaqef gadol
r:=.3pt; pickupmypen;
z0=(w-r,r); z1=(x0, h-r);
drawdot z0; drawdot z1;
r:=.2pt;
pickup penrazor xscaled 2r;
z2=(r,0); z3=(x2,h);
draw z2--z3;
endchar;

beginlowvowel(38, hu#, vu#); % tipeha
r:=.3pt; pickupmypen;
z0=(r, -r); 
z1=(w-r,-d+r); draw z0{down}..{right}z1;
endchar;

beginhivowel(39, .7hu#, 1.3vu#); % revia
z0=(.5w,0); z1=(w,.5h); z2=(x0,h); z3=(0,.5h);
pickup penspeck; filldraw z0--z1--z2--z3--cycle;
endchar;

beginhivowel(40, 1.7hu#, .8vu#); % zarqa
r:=.25pt; z0=(r,r); z0'=(.25w, h-r); 
z1=(.5w,.5h); z1'=(w-x0',r); z2=(w-r,h-r);
pickupmypen; draw z0{up}..{right}z0'..z1..z1'{right}..{up}z2;
endchar;

r#:=.2pt#; define_pixels(r);
beginhivowel(41, 2 r#, vu#); % pashta
italcorr leftedge;
pickupmypen; z0=(0,0); z1=(-hu,h);
draw z0..{left}z1;
endchar;

beginlowvowel(42, 2r#, 1vu#); % yetiv
italcorr rightedge;
pickupmypen; z1=(r, -.5d); x0=x2= 2hu;
y0=-r; y2=-d; draw z0--z1--z2;
endchar;

beginlowvowel(43, 1hu#, 1vu#); % tevir
pickupmypen; z0=(w-r,-r); z1=(r,-d+r);
draw z0..{left}z1; r'=1.4r;
z2=(r',-r'); pickup pencircle scaled 2r';
drawdot z2;
endchar;

beginhivowel(44,2r#,vu#); % geresh
z0=(r,r); z1=(hu,h); pickupmypen;
draw z0{up}..z1;
endchar;

beginhivowel(45,2r#,vu#); % geresh muqdam
italcorr rightedge;
z0=(r,r); z1=(hu,h); pickupmypen;
draw z0{up}..z1;
endchar;

beginhivowel(46, .8hu#, 1.2vu#); % gershayim
r':=.6r; pickup pencircle scaled 2r';
z0=(r,r); z1=(1.4w-r,h-r); z0'=z0+(w,0); z1'=z1+(w,0);
draw z0{up}..z1; draw z0'{up}..z1';
endchar;

beginhivowel(47,2.625hu#,.7vu#); % qarney para
r':=.6r; pickup pencircle scaled 2r';
path circ; circ=fullcircle scaled 2(h-2r) shifted (h-2r,.5h);
z99=(h-2r,.5h); z0=(.5w-r,-r); z1=.5[z0,z99];
draw circ; draw z1--z0; 
path circ; circ=fullcircle scaled 2(h-2r) shifted (w-h+2r,.5h);
draw circ; z0'=(w-x0,y0); z1'=(w-x1,y1);
draw z0'--z1';
endchar;

beginhivowel(48,0pt#,.7vu#); % telisha gedola; sticks out at right
italcorr rightedge;
r':=.6r; pickup pencircle scaled 2r';
path circ; circ=fullcircle scaled 2(h-2r) shifted (h,.5h);
z99=(h-2r,.5h); z0=(-r,-r); z1=.5[z0,z99];
draw circ; draw z1--z0; 
endchar;

beginhivowel(49, 2r#, vu#); % pazer
z0=(.5w,0); z1=(x0,h); pickup penrazor xscaled 2r;
draw z0--z1; z2=.4[z0,z1]; z3=(.7hu,y1-r);
pickupmypen; draw z2{right}..{up}z3;
endchar;

%% char 50 reserved...

beginlowvowel(51, .4hu#, vu#); % munah
pickup penrazor xscaled 2r;
z0=(w-r,0); z1=(x0,-d); draw z0--z1;
pickup penrazor xscaled 2r rotated 90;
z3=(w,-d+r); z4=(-.3hu,y3);
draw z3--z4;
endchar;

beginlowvowel(52,hu#, 1.2vu#); % mahapakh
pickupmypen;
x1=r; x0=x2=w-x1;
y0=-r; y2=-d+r; y1=.5[y0,y2];
draw z0--z1--z2;
endchar;

beginlowvowel(53,hu#,vu#); % merkha
pickupmypen;
z0=(w-r, -r); 
z1=(r,-d+r); draw z0{down}..{left}z1;
endchar;

beginlowvowel(54,1hu#,1vu#); % merkha kefula
pickupmypen;
z0=(hu-r, -r); 
z1=(r,-d+r); path trope; trope=z0{down}..{left}z1;
draw trope; draw trope shifted (-.75w,0);
endchar;

beginlowvowel(55, .85hu#, 1.2vu#); % darga
x0=x2=w-r; x1=x3=r; y0=-r; y3=-d+r; y1=-.2d; y2=-d-y1;
pickupmypen; draw z0--z1--z2--z3;
endchar;

beginhivowel(56, 2r#, vu#); % qadma
pickupmypen;
z0=(r,r); z1=(-.7hu,vu); draw z0{up}..z1;
endchar;

beginhivowel(57, 0pt#, .7vu#); % telisha qetana; sticks out at left
italcorr leftedge;
r':=.6r; pickup pencircle scaled 2r';
path circ; circ=fullcircle scaled 2(h-2r) shifted (-h,.5h);
z99=(-h+2r,.5h); z0=(r,r); z1=.5[z0,z99];
draw circ; draw z1--z0; 
endchar;

beginlowvowel(58, .75hu#, vu#); % yerah ben yomo
r':=.25pt; pickup pencircle scaled 2r';
z1=(r,-r); z3=(w,y1); z2=(.5w, -.67d); z4=(x2,-d+r);
draw z1{down}..z2..{up}z3; draw z2--z4;
endchar;

beginhivowel(59, hu#, vu#); % ole
pickupmypen;
z0=(w-r,r); z2=(x0,h-r); z1=(w-x0,.5h);
draw z0--z1--z2;
endchar;

beginhivowel(60, hu#, vu#); % iluy
pickupmypen; draw (r,r)--(w-r,r)--(w-r,h-r);
endchar;

beginlowvowel(61, 2r#, vu#); % dehi, whatever that is!
italcorr rightedge;
pickupmypen; draw (r,-r){down}..{right}(hu-r,-vu+r);
endchar;

beginhivowel(62, 0pt#, .8vu#); % zinor
italcorr leftedge;
r':=.25pt; pickup pencircle scaled 2r';
myw=1.7hu; pair offset; offset=(myw,0); 
z0=(0,r); z0'=(.25myw, h-r); 
z1=(.5myw,.5h); z1'=(myw-x0',r); z2=(myw-r,h-r);
draw (z0{up}..{right}z0'..z1..z1'{right}..{up}z2) shifted -offset;
endchar;

beginhivowel(63, 1.1hu#, 1.1vu#); % masora circle
pickupmypen; draw fullcircle scaled .5w shifted (.5w,.5h);
endchar;

beginchar(64, 0pt#,1pt#,0pt#); % first null trope (rightedge)
  pickup penspeck; drawdot origin;
endchar;

beginchar(65, 0pt#,.5pt#,0pt#); % second null trope (leftedge)
  pickup penspeck; drawdot origin;
endchar;

%% Some special characters and symbols...

beginchar(80, 0pt#, 7.5pt#, .5pt#); % long vertical bar (paseq)
  z0=(0,-d); z1=(x0,h);
  pickup pencircle scaled .8pt;
  draw z0--z1;
endchar;

beginchar(81, 0pt#, 7.5pt#, 0pt#); % upper dot
  dwidth:=.4pt; z0=(0,h+dwidth);
  pickup pencircle scaled 2dwidth;
  drawdot z0;
endchar;

beginchar(139, 6pt#, 7pt#, 0pt#); % new shekel
  dwidth:=.3pt; pickup pencircle scaled 2dwidth;
  z0=(dwidth, h-dwidth);
  8*dwidth+3*hfudge=w;
  z1''=(x0,dwidth); z2''=(w-3dwidth-hfudge,y1'');
  z3=(x2'',.7h-dwidth);
  z4=(w-x0,y1''); z5''=(x4,y0); z6''=(3dwidth+hfudge,y5'');
  z7=(x6,h-y3);
  z1=(x0,y1''+2dwidth); z1'=(x1''+2dwidth,y1'');
  z2'=(x2''-2dwidth,y1'); z2=(x2'',y2''+2dwidth);
  z5=(x5'',y5''-2dwidth); z5'=(x5''-2dwidth,y5'');
  z6'=(x6''+2dwidth,y5'); z6=(x6'',y5''-2dwidth);
  draw z0---z1{down}..{right}z1'---z2'{right}..{up}z2---z3;
  draw z4---z5{up}..{left}z5'---z6'{left}..{down}z6---z7;
endchar;

beginchar(240, 5pt#, 6pt#, 0pt#) % generic box
  pickup pencircle scaled .3pt;
  draw origin--(w,0)--(w,h)--(0,h)--cycle;
endchar;

bye.