% Blackboard bold parameters, Alan Jeffrey 14--18 Dec 1989.
%
% These parameters are deduced from those set in bboldNN.mf.
% 
% The only horizontal parameter we take in is the unit u#,
% from which we calculate all the horizontal distances.
%
% The distance between the two strokes in a fat line is fatness.

fatness# := 2.3u#;

% The size of a pen is rule_thickness.

pen_size# := rule_thickness#;

% Characters with space inside them (for example the
% gap between the bar and the dot in a ! have either smallspace, 
% space# or bigspace# worth of space.

smallspace# := u#;
space# := 2u#;
bigspace# := 3u#;

% Characters with bits jutting out of them (for example the feet in
% ] or the bar in f) have jut# worth of stick-outiness.

jut# := 1.5u#;
bigjut# := 2.5u#;

% Some characters are exactly fatness# + pen_size# wide, as they are
% drawn with just one vertical line.
%
%    tiny --- I, i, l, |, ,, :, ;, ., `, ', !.
%
% Others have a small amount jutting out from the side, like the 
% top and bottom of a ].
%
%    tiny+jut --- [, ], (, ).

tiny# := fatness# + pen_size#;

% Upper case characters come in three sizes:
%
%    small --- B, E, F, J, K, L, P, R, S,  Gamma, Pi, ?, $, /, \,
%
%    medium --- A, C, D, G, H, M, N, O, Q, T, U, V, X, Y, Z,
%               Delta, Theta, Lamba, Xi, Sigma, Upsilon, Phi, Psi, Omega,
%
%    big --- W.

smallcap# := 9u#;
medcap# := 10u#;
bigcap# := 14u#;

% Lower case characters come in three sizes:
%
%    small --- f, j, s, t,
%
%    small + fatness --- h, k, n, r,
%
%    medium --- a, c, d, e, g, o, q, u, v, x, y, z,
%
%    medium + fatness --- b, p,
%
%    big --- m, w.
%
% The letters with verticals at the left have fatness added on
% so that the curves are the same size as the other letters.

smalllower# := 6u#;
medlower# := 7.5u#;
biglower# := 11u#;

% Numerals are all the same size.

numeral# := 8u#;

% Arithmetic operators (in this case just +) are all the same size.

arithmetic# := 12u#;

% Characters have three kinds of space at the side:
%
%   small --- for example around a T,
%
%   medium --- for example around an O,
%
%   large --- for example around an I.

smallgap# := 1/2u#;
medgap# := 1u#;
biggap# := 1.5u#;

% Whereas we've only got one horizontal measurement stolen from cmr,
% there are lots of vertical ones.  We can use these to work out 
% our measurements.
%
% Characters can have various top positions:
%
%   ATop --- the top of all capitals, Greek, and some punctuation,
%   
%   aTop --- the top of lower case without ascenders,
%
%   bTop --- the top of lower case with ascenders,
%
%   iTop --- the top of i and j,
%
%   oneTop --- the top of numerals,
%
%   bracketTop --- the top of a bracket (also the top of the body size).

ATop# := cap_height#;
aTop# := x_height#;
bTop# := asc_height#;
oneTop# := fig_height#;
bracketTop# := body_height#;
iTop# := min(x_height# + space# + fatness#, asc_height#); 

% The bottoms of characters can be:
%
%   aBottom --- the base line,
%
%   gBottom --- the bottom of a descender,
%
%   bracketBottom --- the bottom of a bracket (also the bottom of the body).

aBottom# := 0pt#;
gBottom# := -desc_depth#;
.5 [bracketBottom#, bracketTop#] = math_axis#; % Brackets are centered.

% Various characters such as A, B, G, e, and 3 have bars in them.

ABar# := .25 [aBottom#, ATop#];
BBar# := .52 [aBottom#, ATop#];       % number nicked from cmr.
GBar# := .50 [aBottom#, ATop#];
eBar# := bar_height#;
threeBar# := .54[aBottom#, oneTop#];  % number nicked from cmr.

% The top of a Q's tail is at QTailTop, and the bottom is at QTailBottom.

QTailTop# := .28 [aBottom#, ATop#];     % number nicked from cmr.
QTailBottom# := aBottom# - comma_depth#; % number nicked from cmr.

% Various sorts of letters have various amounts of curl in them.
%
%    CCurl --- the amount the end of a C curls,
%    cCurl --- the amount the end of a c curls,
%    gCurl --- the amount the tail of a g curls,
%    hCurl --- the distance from the bottom of an h to the point where
%              the right of the curve becomes vertical.

CCurl# := .2 (ATop# - aBottom#);
cCurl# := .2 (aTop# - aBottom#);
gCurl# := .2 (aBottom# - gBottom#);
hCurl# := .4 (aTop# - aBottom#);

% The numbers five, six and eight have bowls, which are sixBowl# tall.

sixBowl# := aTop# - aBottom#;   % These bowls are as tall as an a.

% A less than (and a greater than) is lessthan# tall.

lessthan# := math_spread [5/4x_height#, 3/2x_height#]; % Numbers from cmr.

% Right, I'll now turn these nice sharp measurements into grotty 
% approximate pixelly ones.

define_corrected_pixels (o);

define_whole_blacker_pixels 
   (pen_size);

define_whole_pixels 
   (fatness, jut, bigjut, smallspace, space, bigspace);

define_whole_vertical_pixels
   (CCurl, cCurl, gCurl, hCurl, sixBowl);

define_whole_top_pixels 
   (ATop, aTop, bTop, oneTop, bracketTop, QTailTop);

define_whole_bottom_pixels 
   (QTailBottom, aBottom, gBottom, bracketBottom);

pickup pencircle scaled pen_size;
define_good_y_pixels
   (ABar, BBar, GBar, eBar, threeBar);

% And now some handy numbers, which I don't need sharp versions of.

aMiddle := .5[aBottom, aTop];
dashMiddle := .61803 [aBottom, aTop]; % Number stolen from cmr.

% I can now set the font parameters for the TFM files, stolen from cmr.

font_normal_space := 6u#;
font_normal_stretch := 3u#;
font_normal_shrink := 2u#;
font_quad := 18u#;
font_extra_space := 2u#;
font_x_height := x_height#;

% And that's that.


