diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/ibycus/ibyacc4.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/ibycus/ibyacc4.mf | 608 |
1 files changed, 608 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/ibycus/ibyacc4.mf b/Master/texmf-dist/fonts/source/public/ibycus/ibyacc4.mf new file mode 100644 index 00000000000..a8acfae64d3 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/ibycus/ibyacc4.mf @@ -0,0 +1,608 @@ +% Make sure the macros we want to replace are loaded +if unknown gen_acc : readfrom("gen_acc") fi +numeric doing_u; doing_u=0; % flag to position diaeresis + +def rough(suffix $,@)(expr dot_size,depth,shear) = + pickup fine.nib; pos$(dot_size,90); + if square_dots: pos$'(dot_size,180); z$'=z$; dot($',$); % squarish dot + comma_join_:=max(fine.breadth,floor .7dot_size); + comma_bot_:=max(fine.breadth,floor .5dot_size); + pos@0(comma_join_,180); pos@1(comma_join_,180); + pos@2(comma_bot_,180); y@0=y$; y@1=y$l; y@2=y@1+dot_size-depth; + x@0r=x@1r=x$'r; lft x@2r=good.x(x$-eps); + filldraw stroke z@0e--z@1e..z@2e; % tail + else: pos@1(vair,90); pos@2(vair,180); pos@3(vair,-90); + z@1r=z$r; y@1l:=y$; lft x@2r=hround(x$-.5depth+.5shear); + x@3+.5vair=x$+.5dot_size+shear; + y@2=.5[y@1,y@3]; bot y@3r=vround(top y@1r-depth); + % position a vertical path through the left side of the bulb + x@1'=x@1-.5dot_size; + % At the intersection of that path with SL's tail, get the direction + pair d@@; d@@=( direction + (xpart( (z@2{down}...z@3) intersectiontimes ((x@1',0){up}--(x@1',y@1)))) + of (z@2{down}...z@3)); + % Tilt a pen at a right angle to that direction + pos@3'(vair,angle(d@@)-90); + % Place it at the intersection. This will be the new end of the tail. + z@3'=directionpoint d@@ of(z@2{down}...z@3); + y_:=ypart((z@1{left}...z@2{down}...z@3) + intersectiontimes (z$l{left}..{right}z$r)); if y_<0: y_:=1; fi + filldraw z$r{right}..subpath (0,y_) of (z$l{left}..{right}z$r)--cycle; % dot + filldraw stroke z@1e{left}...z@2e{down}...{d@@}z@3'e; fi % tail + penlabels(@1,@2,@3); enddef; + +def smooth(suffix $,@)(expr dot_size,depth,shear) = + pickup fine.nib; pos$(dot_size,90); + if square_dots: pos$'(dot_size,0); z$'=z$; dot($',$); % squarish dot + comma_join_:=max(fine.breadth,floor .7dot_size); + comma_bot_:=max(fine.breadth,floor .5dot_size); + pos@0(comma_join_,0); pos@1(comma_join_,0); + pos@2(comma_bot_,0); y@0=y$; y@1=y$l; y@2=y@1+dot_size-depth; + x@0r=x@1r=x$'r; rt x@2r=good.x(x$-eps); + filldraw stroke z@0e--z@1e..z@2e; % tail + else: pos@1(vair,90); pos@2(vair,0); pos@3(vair,-90); + z@1r=z$r; y@1l:=y$; rt x@2r=hround(x$+.5depth+.5shear); + x@3-.5vair=hround(x$-.5dot_size+shear); + y@2=.5[y@1,y@3]; bot y@3r=vround(top y@1r-depth); + path pp; pp = (z@2{down}...z@3); + % position a vertical path through the right side of the bulb + x@1'=x@1+.5dot_size; + % At the intersection of that path with SL's tail, get the direction + pair d@@; d@@=( direction + (xpart( (z@2{down}...z@3) intersectiontimes ((x@1',0){up}--(x@1',y@1)))) + of (z@2{down}...z@3)); + % Tilt a pen at a right angle to that direction + pos@3'(vair,angle(d@@)+90); + % Place it at the intersection. This will be the new end of the tail. + z@3'=directionpoint d@@ of(z@2{down}...z@3); + y_:=ypart((z@1{right}...z@2{down}...z@3) + intersectiontimes (z$l{right}..{left}z$r)); if y_<0: y_:=1; fi + filldraw z$r{left}..subpath (0,y_) of (z$l{right}..{left}z$r)--cycle; % dot + filldraw stroke z@1e{right}...z@2e{down}...{d@@}z@3'e; fi % tail + penlabels(@1,@2,@3); enddef; + + +% Improve spacing with sprit plus accent groups. +% The original spacing was governed by the placement of the accent. +% One of the variables set the position of the accent bottom .5stem +% to the right of center (plus other adjustments). By increasing this +% to 1.2stem, we get the accent still within the set-width, but far enough +% right that the breathings (which are placed relative to the bottom +% of the accent) can be pulled to the left by .7stem. +% This ensures that there will be more than a stem width between +% any element of breathing and any element of either acute or +% grave. + +vardef spirit_acute(expr center) text type = +numeric sp_bottom, sp_height; +sp_bottom=h-sp_height=max(.8[h,x_height],x_height+o+separator); +numeric dot_diam#; dot_diam# = 3/4dot_size#; +define_whole_blacker_pixels(dot_diam); +dot_diam:=max(fine.breadth,min(dot_diam,floor(2/3sp_height))); +if serifs: x21-x22=1/6w; + x21+.5stem=hround(center+.25u+.5vair+(x21-x22)+1.2stem); %lft x22r ~ center+.25u +else: rt x21r=hround (4/5w+.5stem); lft x22l=hround(center+.25u); fi + begingroup; + numeric saved_h; + numeric saved_x_height; + saved_x_height = x_height; + saved_h=h; + save h; + save x_height; + h=saved_h + .75vair; + x_height = saved_x_height + .3vair; +generate_grave; penlabels(21,22); + endgroup; +if 1type0: %spirit and accent separated by .1u (rough) or .25u (smooth) + x31=hround(lft x22 if serifs:r-.5sp_height else:l-.5dot_diam fi -.7stem -.25u); +else: x31+.5dot_diam=hround(lft x22 if serifs:r else: l fi -.7stem-.1u); fi +y31+.5dot_diam=h; +if1type0:smooth else:rough fi (31,a,dot_diam,sp_height,0); +enddef; + + +vardef spirit_grave(expr center) text type = +numeric sp_bottom, sp_height; +sp_bottom=h-sp_height=max(.8[h,x_height],x_height+o+separator); +numeric dot_diam#; dot_diam# = 3/4dot_size#; +define_whole_blacker_pixels(dot_diam); +dot_diam:=max(fine.breadth,min(dot_diam,floor(2/3sp_height))); +% x22 is set to the right of x21 by 1/6w. The tilt is only 1/6w here. +% x21 is set out to the right of the midpoint by the sum of .5stem and +% .25u. Let's try a full stem width +%if serifs: x22-x21=1/6w; x21-.5stem=hround(center+.25u); +if serifs: x22-x21=1/6w; x21-1.2stem=hround(center+.25u); +else: rt x22r=hround (4/5w+.5stem); lft x21l=hround(center+.25u); fi + begingroup; + numeric saved_h; + numeric saved_x_height; + saved_x_height = x_height; + saved_h=h; + save h; + save x_height; + h=saved_h + .75vair; + x_height = saved_x_height + .3vair; +generate_grave; penlabels(21,22); + endgroup; +% In the original, the following spacing adjustments tracked |spirit_acute|. +% This was wrong way round. When the accent is barytone, lft x21l is nowhere +% near the left edge of the picture, and the crowding effect is the reverse +% of what it is with the oxytone accent. Added an extra .15u to make +% up for the first problem, and an extra .45u to relieve the crowding +% against the smooth breathing. But the more general widening set up +% above is more significant. PAM, 10 May, 1997 +% remember that "type" is a macro replaced by either < or > +if 1type0: %spirit and accent separated by .65u (rough) or .85u (smooth) + x31=hround(lft x21l-.5 if serifs:sp_height else:dot_diam fi -.7stem -.45u); +else: x31+.5dot_diam=hround(lft x21l - .7stem -.65u); fi +y31+.5dot_diam=h; +%y31+dot_diam=h; +if1type0:smooth else:rough fi (31,a,dot_diam,sp_height,0); +enddef; + +% Reshape the iota subscript, but only for resolutions above 600 +% Thin it out so that it can have a slight hook. +% Lengthen both the simple and the refined form, so that the +% simple form drops as low as the tail of eta, and the refined form +% drops to the bottom of the shoulder. Since we only make it up +% three times, we do not save the picture, but this means that +% all the necessary values must be known when the three iota +% subscript characters are written. The iota subscript under +% eta will be made shorter to open a larger space under the +% right vertical stroke of eta. + +def iota_sub(expr pos_stem) = +if known pic.iota: + addto currentpicture also pic.iota shifted (hround(pos_stem),0); +else: + picture temp_picture; temp_picture=currentpicture; clearit; + pickup fine.nib; + x51=0; pos51(stem,180); top y51=vround(-o-2separator); + x52=x51; pos52(stem,180); + % Use the original simple subscript for lower resolutions. + if ( ((pixels_per_inch / mag) < 599) or (pixels_per_inch < 420) ) : + bot y52=-desc_depth; + filldraw circ_stroke z52e--z51e; + else : + % longer iota subscript with narrower tapering stem and slight hook + bot y52=-iota_dp; + pos51'(.6[hair,stem],180); pos51''(.3[hair,stem],180); + pos52'(.3[hair,stem],270); pos53'(.2[hair,stem],0); + x51'r = x51''r = x51r; + bot y52'r = -iota_dp; x53'r = x51l+hair; x52' = 1/2[x51',x53']; + y51' = y51-separator; top y53' = 5/6[y51,y52]; + y51'' = -desc_depth; % y51'' = y53'; + filldraw double_circ_stroke z51'e--z51''e..z52'e..z53'e; + fi; +% Need to make sure that this is drawn each time (it's only four times). +%%%%% if not working_hard : picture pic.iota; pic.iota=currentpicture; fi + currentpicture:=currentpicture shifted (hround(pos_stem),0); + addto currentpicture also temp_picture; +fi; +enddef; + +% Rewrite the width and height management of circumflex +% Put limit on horizontal spread, and give the plain +% circumflex more roll (depends on parameter circ_ht# in parameter file.) +% change the shape to supply points at the ends and a thickening at the +% center. This is more traditional and gives more shape to the +% squeezed variant. The ends are set to vair, and the middle to +% mid_width + vair. (Silvio Levy's mid_width is actually quite small and +% is used at the ends as well as the mid-point. I use it at the intermediate +% points. The result harmonizes well with other proportions. + +def generate_circumflex(expr center,squeeze)= +numeric mid_width; mid_width=if squeeze:.1 else: .5 fi [vair,stem]; +if serifs: +%pickup fine.nib; pos21(hround(mid_width-eps),180); pos22(vair,90); +% pos23(mid_width,90); pos24(vair,90); pos25(hround(mid_width-eps),180); +pickup fine.nib; pos21(hround(vair-eps),180); pos22(mid_width,90); + pos23(mid_width+vair,90); pos24(mid_width,90); pos25(hround(vair-eps),180); + % limit spread of circumflex while retaining scaling for narrow characters. + lft x21r=w-rt x25l=hround (center-if(w<9u):w/3 else:3u fi); + x22-x21=x23-x22=x24-x23=x25-x24; + % The "squeezed" circumflex tops out at body_height. + bot y21=bot y24l=vround(if squeeze:.75else:.6fi[x_height,h]-vair); + top y22r=top y25=h; y23=.5[y22,y24]; + filldraw stroke z21e{up}...z22e{right}..z23e..{right}z24e...{up}z25e; % stroke +else: + pos21(vair,-180); pos23(vair,0); y21=y23; + lft x21r=hround(center-w/3); rt x23r=hround(center+w/3); + bot y23=vround max(x_height+o+separator, + if squeeze: 2/3 else: 1/3 fi [x_height,h]-.5mid_width); + x22=center; pos22(mid_width,90); top y22r=h; + filldraw stroke z21e{up}...z22e...{down}z23e; +fi +enddef; + +% The spirit_circumflex height ( Circ_ht#) has been raised +% to give more room to the breathing under it +% Also rewrite the position of x31 below + +vardef spirit_circumflex(expr center) text type= +generate_circumflex(center,true); %variable `squeeze' +numeric sp_bottom, sp_height, sp_top, box_top; +box_top=bot if serifs: y21l else: y22l fi; +sp_top=sp_bottom+sp_height=vround(.15[box_top,x_height]); +sp_top+sp_bottom=box_top+x_height; +numeric dot_diam#; dot_diam# = 5/8dot_size#; +define_whole_blacker_pixels(dot_diam); +pickup fine.nib; +dot_diam:=max(fine.breadth,min(dot_diam,floor(2/3sp_height-eps))); +x31 if1type0:+.5dot_diam fi=hround(center); +% The code that was here was equivalent to x31=hround(center); +% By shifting x31 leftward only for the smooth breathing, we move the +% "optical center" of the smooth breathing to about where +% the "optical center" of the rough breathing is. This relieves +% the crowding under the downcurve of the circumflex. +y31+.5dot_diam=vround(sp_top); +if1type0:smooth else:rough fi (31,a,dot_diam,sp_height,0); +penlabels(31); +enddef; + +% Spread out the accented diareses; pull acute a bit to the left +% and shove grave a bit to the right (1/8u in both instances). +% Raise the accent slightly, and shorten it by changing +% h and x_height within a save group. 10 May, 1997. +% The angle of the accent is governed by the width of iota, since +% this gives the cleanest association of accent and diaeresis. +% The older calculation depended on the width of the underlying character, +% which flattens out the angle and makes the accent crowd the dot it +% is closest to. +% An adjustment is required to raise the dots away from the tips +% of the upsilon. Once they are spaced out, they bleed into the +% character. This undoes much of the effect of the raising of +% the accent mentioned above, but since prau+ is about the only +% even slightly common root with a upsilon diaeresis, this does not +% too much matter. + +vardef diaeresis_acute(expr center)= + if serifs: x21-x22=1.25u; x21+.5stem=hround(center+5/6(x21-x22)+.5stem-1/8u); + else: rt x21r=hround (3.75u+.5stem); lft x22l=hround(center-.5vair); fi + begingroup; + numeric saved_h; + numeric saved_x_height; + saved_x_height = x_height; + saved_h=h; + save h; + save x_height; + h=Circ_ht; + x_height = saved_x_height + 1.5(h - saved_h); + generate_grave; penlabels(21,22); + endgroup; + generate_diaeresis(center,.9dot_size,2.25dot_size, + if doing_u > 0: .35 else : .5 fi [h,x_height],x_height+separator); +enddef; + +vardef diaeresis_grave(expr center)= + if serifs: x22-x21=1.25u; x21-.5stem=hround(center-5/6(x22-x21)-.5stem+1/8u); + else: lft x21l=hround (1.25u-.5stem); rt x22r=hround(center+.5vair); fi + begingroup; + numeric saved_h; + numeric saved_x_height; + saved_x_height = x_height; + saved_h=h; + save h; + save x_height; + h=Circ_ht; + x_height = saved_x_height + 1.5(h - saved_h); + generate_grave; penlabels(21,22); + endgroup; + generate_diaeresis(center,.9dot_size,2.25dot_size, + if doing_u > 0: .35 else : .5 fi [h,x_height],x_height+separator); +enddef; + +vardef generate_underdot(expr center,base)= + pickup tiny.nib; + pos31(dot_diam,0); pos32(dot_diam,90); + x31l=hround(center+(x31l-x31)); x31=x32; + y32l=vround(base); y31=y32; dot(31,32); + penlabels(31,32); +enddef; + +% Set up remapping of Grave and Acute, Asper and Lenis. +% This allows a more natural setting of single quotes, apostrophe +% and angle brackets. +% Move two accents out of the way of Ibycus +% Xi and digamma. Correct height of "Smooth breathing +% with grave" and "Rough breathing with circumflex" +% composites. +% Slight redesign of freestanding "Iota subscript". +% Reposition Breve and Macron, but these will usually +% be got from the prosody font anyway. +% +def selectaccent expr t = + currenttitle:= t; + if t = "Grave accent" : + code_offset := bary_tone - ASCII"`" ; let next_ = use_it_ + elseif t = "Acute accent" : + code_offset := oxy_tone - ASCII"'" ; let next_ = use_it_ + elseif t = "Rough breathing" : let next_ = lose_it_ + elseif t = "Smooth breathing" : let next_ = lose_it_ + elseif t = "Rough breathing with acute" : let next_ = lose_it_ + elseif t = "Rough breathing with grave" : let next_ = lose_it_ + elseif t = "Rough breathing with circumflex" : let next_ = lose_it_ + elseif t = "Smooth breathing with acute" : let next_ = lose_it_ + elseif t = "Smooth breathing with grave" : let next_ = lose_it_ + elseif t = "Smooth breathing and circumflex" : let next_ = lose_it_ + elseif t = "Diaeresis with circumflex" : let next_ = lose_it_ + elseif t = "Iota subscript" : let next_ = lose_it_ + elseif t = "Breve accent" : + code_offset := breve - oct"036" ; let next_ = use_it_ + elseif t = "Macron (bar) accent" : + code_offset := longum - oct"037"; let next_ = use_it_ + else: code_offset := 0 ; let next_ = use_it_ fi; next_ enddef; + +def selectaspirate expr t = + currenttitle:= t; + if t = "Italic letter h" : + code_offset := aspirate - ASCII"h" ; let next_ = use_it_ + else: let next_ = lose_it_ fi; next_ enddef; + +let cmchar = selectaspirate; + +input itall + +code_offset:=0; +let cmchar = relax; + +% Use adjust fit to kern the accents that go with +% uppercase out a bit to the left so that accented uppercase does not +% take more than its proper letterspace. Should have been applied +% to trailing side bearing too, but there is too much water under +% the bridge now. Silvio Levy's accents have no +% adjust_fit, and a character with no adjust_fit picks up +% the values of the previous character. + +cmchar "Rough breathing"; +beginchar(asper_glyph,9u#,acc_ht#,0); +adjust_fit(-4u#,0); +spirit(.5w)<; +endchar; + +cmchar "Smooth breathing"; +beginchar(lenis_glyph,9u#,acc_ht#,0); +adjust_fit(-5u#,0); +spirit(.5w)>; +endchar; + +cmchar "Rough breathing with acute"; +beginchar(asper_oxy,9u#,acc_ht#,0); +adjust_fit(-3u#,0); +spirit_acute(.5w)<; +endchar; + +cmchar "Rough breathing with grave"; +beginchar(asper_bary,9u#,acc_ht#,0); +adjust_fit(-3u#,0); +spirit_grave(.5w)<; +endchar; + +% Do asper_perispomenon with corrected heights. +cmchar "Rough breathing with circumflex"; +beginchar(asper_peri,9u#,Circ_ht#,0); +adjust_fit(-3u#,0); +spirit_circumflex(.5w)<; +endchar; + +cmchar "Smooth breathing with acute"; +beginchar(lenis_oxy,9u#,acc_ht#,0); +adjust_fit(-3u#,0); +spirit_acute(.5w)>; +endchar; + +% Do lenis_barytone with corrected height. +cmchar "Smooth breathing with grave"; +beginchar(lenis_bary,9u#,acc_ht#,0); +adjust_fit(-3u#,0); +spirit_grave(.5w)>; +endchar; + +cmchar "Smooth breathing and circumflex"; +beginchar(lenis_peri,9u#,Circ_ht#,0); +adjust_fit(-3u#,0); +spirit_circumflex(.5w)>; +endchar; + +% Provide an alternative for the depth of iota subscript. + +cmchar "Iota subscript"; +beginchar("|",9u#,0, + if ( ((pixels_per_inch / mag) < 599) or (pixels_per_inch < 420)) : + desc_depth# + else : + iota_dp# + fi ); +adjust_fit(0,0); % Don't omit this---see note following. +iota_sub(.5w); +endchar; + +% The adjust_fit macro really ought to be used with all characters, +% because if it isn't, the chardx value (pixel displacement in the +% gf file) will not be recalculated, but will be picked up from +% the last character that did have an adjust_fit line. Here, I +% leave the sloppy side-effect in place because I know I want +% the few affected accents to have the same 9u width. +% + +let cmchar = selectaccent; + +readfrom("graccent"); + +code_offset:=0; +let cmchar = relax; + + +% Zero-width space +% Takes the place of "Diaeresis with circumflex", which cannot occur. +% iota and upsilon only affected by diaeresis when short. +% This is useful for deligaturing sigma. with the "s|" digraph. +% Besides, it can often help to have a zero-width character available. +% But you can't draw the box so proofing and displaying must be off. +% +% Adjust_fit has to be used to get a true zero-width. A curious side-effect +% of setting the character width to eps is that the u value is recalculated +% to a colossal negative value. It is not worth the trouble to discover +% why, since a saved u value will obviate the errors and oversized +% shift values that happen with the recalculated u. The effect noted here +% is absent from proof mode calculations. It is only a problem when +% usable rasters are being laid down. +% +begingroup; +numeric saved_u; saved_u:=u; +save u; +save proofing; proofing:=0; +save displaying; displaying:=0; + +cmchar "Zero-width Space"; +beginchar(null_space, eps,0,0); % The adjust-fit calculation +adjust_fit(-eps,0); % does a division, so w must be > 0. +endchar; % canceling it out with "-eps" is + % unnecessary, but it feels better. + +numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#); + + +beginchar(doti,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-2.5saved_u, -d); +endchar; + +beginchar(dotI,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-3.25saved_u, -d); +endchar; + +beginchar(dote,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-3.75saved_u, -d); +endchar; + +beginchar(dotbt,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-4saved_u, -d); +endchar; + +beginchar(dotJdlmnpqu,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-4.5saved_u, -d); +endchar; + +beginchar(dotkos,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5.25saved_u, -d); +endchar; + +beginchar(dotGZ,eps,0,desc_depth#); % Also upper case Koppa +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5.5saved_u, -d); +endchar; + +beginchar(dotchjz,eps,0,desc_depth# + dot_diam#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5.5saved_u, -d); +endchar; + +beginchar(dotCEVaw,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-6saved_u, -d); +endchar; + +beginchar(dotBFLNPRSTW,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-6.5saved_u, -d); +endchar; + +beginchar(dotH,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-6.75saved_u, -d); +endchar; + +beginchar(dotAOQUXY,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-7.25saved_u, -d); +endchar; + +beginchar(dotDK,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-7.5saved_u, -d); +endchar; + +beginchar(dotM,eps,0,desc_depth#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-8.75saved_u, -d); +endchar; + +beginchar(dotgx,eps,0,desc_depth# + 1.5dot_diam#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5.5saved_u, -d); +endchar; + +beginchar(dotr,eps,0,desc_depth# + 1.5dot_diam#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-4.5saved_u, -d); +endchar; + +beginchar(dotfy,eps,0,desc_depth# + 2dot_diam#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5.75saved_u, -d); +endchar; + +beginchar(dotkoppa,eps,0,desc_depth# + 2dot_diam#); +define_whole_blacker_pixels(dot_diam); +adjust_fit(-eps,0); +generate_underdot(-5saved_u, -d); +endchar; + +% The three positions for iota subscript +% Equivalent to Times Ten Greek's /iotasubscripta etc., except that these +% are designed as postpositives kerned strongly to the left. Setwidth 0 +% but I am not sure that the type1 version can get away with that + +% /iotasubscripta +beginchar(a_isub,eps,0,iota_dp#); +adjust_fit(-eps,0); +iota_sub(-5saved_u); +endchar; + +% The top position of iota subscript under eta is dropped to +% provide better spacing between the letter and the subscript. +% +% /iotasubscripte +beginchar(h_isub,eps,0,iota_dp#); +adjust_fit(-eps,0); +begingroup; +numeric saved_o; +saved_o = o; +save o; +o = 3saved_o; +iota_sub(-6.85saved_u); +endgroup; +endchar; + +% /iotasubscripto +beginchar(w_isub,eps,0,iota_dp#); +adjust_fit(-eps,0); +iota_sub(-6saved_u); +endchar; + +endgroup; + + |