% Compute the font construction parameters for the Computer
% Modern Bold Extended family.  Some other fonts in the
% Computer Modern family compute their parameters as 
% modifications of these.

u#:=               % unit width
    (if design_size < 10: ((design_size*17)+60)
                    else: ((design_size*20)+30)fi)/360pt#;

width_adj#:=       % width adjustment for certain characters
    (if design_size < 10: ((design_size*8)+30)
                    else: ((design_size*10)+10)fi)/360pt#;

serif_fit#:=       % extra sidebar near lowercase serifs
                          0pt#;

cap_serif_fit#:=   % extra sidebar near uppercase serifs
    (if design_size < 10: ((design_size*8)-10)
                    else: ((design_size*5)+20)fi)/360pt#;

letter_fit#:=      % extra space added to all sidebars
    (if design_size <  8: (-(design_size*10)+80)
                    else: (0)fi)/360pt#;

body_height#:=     % height of tallest characters
                          (design_size*270)/360pt#;

asc_height#:=      % height of lowercase ascenders
                          (design_size*250)/360pt#;

cap_height#:=      % height of caps
                          (design_size*247)/360pt#;

fig_height#:=      % height of numerals
                          ((design_size*232) + 0.00006)/360pt#;

x_height#:=        % height of lowercase without ascenders
                          (design_size*160)/360pt#;

math_axis#:=       % axis of symmetry for math symbols
                          (design_size*90)/360pt#;

bar_height#:=      % height of crossbar in lowercase e
    (if design_size < 10: ((design_size*90)-50)
                    else: (design_size*85)fi)/360pt#;

comma_depth#:=     % depth of comma below baseline
                          (design_size*70)/360pt#;

desc_depth#:=      % depth of lowercase descenders
                          (design_size*70)/360pt#;

crisp#:=           % diameter of serif corners
                          0/360pt#;

tiny#:=            % diameter of rounded corners
    (if design_size <  9: ((design_size*10)+40)
                    else: (130)fi)/360pt#;      

fine#:=            % diameter of sharply rounded corners
    (if design_size <  6: ((design_size*10)+30)
 elseif design_size <  7: (90)
 elseif design_size <  8: ((design_size*10)+20)
                    else: (100)fi)/360pt#;      

thin_join#:=       % width of extrafine details
    (if design_size <  6: ((design_size*10)+30)
 elseif design_size <  7: (90)
 elseif design_size <  8: ((design_size*10)+20)
 elseif design_size < 10: (100)
                    else: ((design_size*2.5)+75)fi)/360pt#;

hair#:=            % lowercase hairline breadth
    (if design_size < 10: ((design_size*4)+130)
                    else: ((design_size*6.5)+105)fi)/360pt#;

stem#:=            % lowercase stem breadth
    (if design_size <  7: ((design_size*40)+40)
                    else: ((design_size*30)+110)fi)/360pt#;

curve#:=           % lowercase curve breadth
    (if design_size <  9: ((design_size*40)+70)
                    else: ((design_size*30)+160)fi)/360pt#;

ess#:=             % breadth in middle of lowercase s
    (if design_size <  7: (-(design_size*design_size*10) +
                           (design_size*170)-410)
                    else: ((design_size*30)+80)fi)/360pt#;

flare#:=           % diameter of bulbs or breadth of terminals
    (if design_size <  8: ((design_size*40)+70)
                    else: ((design_size*30)+150)fi)/360pt#;    

dot_size#:=        % diameter of dots
    (if design_size < 10: ((design_size*50)+60)
                    else: ((design_size*30)+260)fi)/360pt#;

cap_hair#:=        % uppercase hairline breadth
    (if design_size <  6: ((design_size*10)+120)
 elseif design_size <  7: (180)
 elseif design_size <  8: ((design_size*10)+110)
 elseif design_size <  9: (190)
                    else: ((design_size*5)+140)fi)/360pt#;

cap_stem#:=        % uppercase stem breadth
    (if design_size <  8: ((design_size*50)+30)
 elseif design_size < 10: ((design_size*40)+110)
                    else: ((design_size*30)+210)fi)/360pt#;

cap_curve#:=       % uppercase curve breadth
    (if design_size <  9: ((design_size*50)+60)
 elseif design_size < 10: ((design_size*40)+150)
                    else: ((design_size*30)+250)fi)/360pt#;

cap_ess#:=         % breadth in middle of uppercase s
    (if design_size <  7: (-(design_size*design_size*5) +
                           (design_size*125) - 260)
 elseif design_size <  9: (-(design_size*design_size*5) +
                           (design_size*135) - 330)
 elseif design_size < 10: ((design_size*50)+30)
                    else: ((design_size*30)+230)fi)/360pt#;

rule_thickness#:=  % thickness of lines in math symbols
    (if design_size <  7: ((design_size*4)+23)
                    else: ((design_size*3)+30)fi)/100pt#;

dish#:=            % amount erased at top or bottom of serifs
    (if design_size <  8: ((design_size*1)+2)
                    else: (10)fi)/360pt#;

bracket#:=         % vertical distance from serif base to tangent
                          (design_size*10)/360pt#;

jut#:=             % protrusion of lowercase serifs
    (if design_size <  8: ((design_size*20)+30)
 elseif design_size < 10: ((design_size*30)-50)
                    else: (design_size*25)fi)/360pt#;

cap_jut#:=         % protrusion of uppercase serifs
    (if design_size < 10: ((design_size*40)-10)
                    else: ((design_size*35)+40)fi)/360pt#;

beak_jut#:=        % horizontal protrusion of beak serifs
    (if design_size < 10: ((design_size*8)+30)
                    else: ((design_size*7)+40)fi)/360pt#;

beak#:=            % vertical protrusion of beak serifs
    (if design_size < 10: (-(design_size*design_size*5) +
                           (design_size*165) - 450)
                    else: (design_size*70)fi)/360pt#;

vair#:=            % vertical diameter of hairlines
    (if design_size <  6: ((design_size*10)+50)
 elseif design_size < 10: ((design_size*5)+80)
                    else: ((design_size*6.5)+65)fi)/360pt#;

notch_cut#:=       % maximum breadth above or below notches
                           (design_size) * pt#;

bar#:=             % lowercase bar thickness
    (if design_size < 10: ((design_size*10)+70)
                    else: ((design_size*7.5)+95)fi)/360pt#;

slab#:=            % serif and arm thickness
    (if design_size < 10: ((design_size*10)+70)
                    else: ((design_size*7.5)+95)fi)/360pt#;

cap_bar#:=         % uppercase bar thickness
    (if design_size < 10: ((design_size*10)+70)
                    else: ((design_size*7.5)+95)fi)/360pt#;

cap_band#:=        % uppercase thickness above/below lobes
    (if design_size < 10: ((design_size*10)+70)
                    else: ((design_size*7.5)+95)fi)/360pt#;

cap_notch_cut#:=   % max breadth above/below uppercase notches
                           (design_size) * pt#;

serif_drop#:=      % vertical drop of sloped serifs
                           (design_size*3)/360pt#;

stem_corr#:=       % for small refinements of stem breadth
    (if design_size < 10: ((design_size*1)+10)
                    else: (20)fi)/360pt#;

vair_corr#:=       % for small refinements of hairline height
    (if design_size < 10: ((design_size*1)+5)
                    else: (15)fi)/360pt#;

apex_corr#:=       % extra width at diagonal junctions
    (if design_size <  8: ((design_size*design_size*5) -
                           (design_size*95)+440)
                    else: (0)fi)/360pt#;

o#:=               % amount of overshoot for curves
    (if design_size <  7: (30)
 elseif design_size <  8: ((design_size*10)-40)
 elseif design_size < 10: (40)
                    else: ((design_size*5)-10)fi)/360pt#;      

apex_o#:=          % amount of overshoot for diagonal junctions
    (if design_size < 10: (30)
                    else: ((design_size*5)-20)fi)/360pt#;      

slant:=            % tilt ratio $(\Delta x/\Delta y)$
                           0;

fudge:=            % factor applied to weights of heavy characters
                           1;

math_spread:=      % extra openness of math symbols
    (if design_size < 10: (-(design_size*20)+250)
                    else: (-(design_size*5)+100)fi)/100;

superness:=        % parameter for superellipses
                           8/11;

superpull:=        % extra openness inside bowls
                           1/8;

beak_darkness:=    % fraction of triangle inside beak serifs
                           0.4;

ligs:=             % level of ligatures to be included
                          2;

square_dots:=      % should dots be square?
                          false;

hefty:=            % should we try hard not to be overweight?
                          false;

serifs:=           % should serifs and bulbs be attached?
                          true;

monospace:=        % should all characters have the same width?
                          false;

variant_g:=        % should an italic-style g be used?
                          false;

low_asterisk:=     % should the asterisk be centered at the axis?
                          false;

math_fitting:=     % should math-mode spacing be used?
                          false;
