summaryrefslogtreecommitdiff
path: root/fonts/pandora/widths.mf
blob: fc7cfcae11db3fbc11e5e81ebb41874c3c47d5d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
%*****************************************************************************
%        Copyright (c) 1989 by N. N. Billawala
%*****************************************************************************


% widths.mf a file containing width calculation information for the chars

% Essentially all width information is contained in this file to eliminate
% the need to alter the individual character files if width changes are desired.

% Parts of characters are separated so that amounts can be altered as shapes 
% change for the lowercase, the stems are all generally of the same weight,
%  with possible variation in diagonals.
% The uppercase has more variation in combination of thin/thick vertical
%  stems, so the method for choosing widths was changed to depend on
%  stem weights and an idea of proportions
% Fixed width characters and numbers have a constant total width,
%  but reference and fitting proportions vary within this space
% Punctuation was partly based on uc/lc widths, but otherwise 
%  independent amounts given.

vardef variable_character_reference_widths=
 save thick,thin,thickk,thinn,bowll;

  thick=stem.uc#/max(width#,1);         uc:=.35*boldness; 
     uc1=.35*boldness;  uc4=.35; % always=.35;
     uc2:=1+if boldness<1:.25 else:0 fi; % uc2 for diagonals
  thin=thin_stem.uc#/max(width#,1);     lc.arch_space:=.21*boldness;
  thickk=stem.lc#/max(width#,1);        lc.bowl_space:=.24*boldness; 
  thinn=thin_stem.lc#/max(width#,1);    lc.o_space:=.27*boldness;
  bowll=bowlstem.lc#/max(width#,1);     lc.diagonal_space:=.3*boldness;

  i_w=thickk;                               % i l    the "_w" is for "width"
  j_w=thickk+.55*lc.arch_space;             % j
  s_w=uc2*(thickk+lc.o_space);              % s t z ***
  c_w=uc2*(bowll+lc.o_space);               % c ***
  a_w=thickk+bowll+lc.arch_space;           % a(halfbowl)
  b_w=thickk+bowll+lc.bowl_space;           % b a d e g p q k ss-lig
  r_w=2thickk+.5*lc.arch_space;             % r f
  n_w=2thickk+lc.arch_space;                % n h u
  m_w=3thickk+2*lc.arch_space;              % m
  o_w=2bowll+lc.bowl_space;                 % g(halfbowl)
  oo_w=2bowll+lc.o_space;                   % o 
  v_w=(uc2)*(thickk+thinn)+lc.diagonal_space; % v x y ***
  w_w=(uc2)*(thickk+thinn)+thickk+1.5lc.diagonal_space; % w ***
  oe_w=oo_w+o_w-bowll;                      % oe
  ae_w=2b_w-bowll;                          % ae
  accent_w=.8n_w;                           % accents

  I_w=thick;                % I
  J_w=thick+.5uc;           % J
  E_w=thick+.85uc4;         % E F L GAMMA  ****
  T_w=thick+1.25uc1;        % T     ****
  B_w=2thick+.75uc;         % B P 
  R_w=2thick+.85uc1;        % R PI XI K ****SIGMA
  H_w=2thick+uc;            % H C 
  D_w=2thick+1.1uc;         % D G 
  O_w=2thick+1.25uc;        % O Q DELTA THETA
  N_w=H_w;                  % N
  S_w=thick+thin+.75uc;     % S Z  ****
  U_w=thick+thin+uc;        % U   ****
  A_w=(uc2)*(thick+thin)+1.25uc1; % A V Y LAMBDA X ****
  M_w=(uc2)*2(thick+thin)+1.25uc; % M
  W_w=(uc2)*(2thick+thin)+1.5uc1; % W    ****
  AE_w=E_w+2/3*A_w;         % AEligature
  OE_w=E_w+O_w-thick;       % OEligature
                                         
  v_a=.50;                  % for straight strokes  the "v_" is for "variable"
  v_b=.42;                  % for arches
  v_c=.28;                  % for bowls
  v_d=.24;                  % for thick diagonals 
  v_e=v_d-(thickk-thinn);   % for thin diagonals 
  v_f=.20;                  % for half open shapes
  v_g=.10;                  % for open strokes
  v_h=.08;                  % for open strokes

  v_A=.5;                   % for thick straight
  v_B=v_A-(thick-thin);     % for thin straight 
  v_C=.2;                   % for bowls
  v_D=.16;                  % for thick diagonals
  v_E=v_D-(thick-thin);     % for thin diagonals
  v_F=.2;                   % for half open sides 
  v_G=.16;                  % for half-very open sides 
  v_H=.12;                  % for very open sides
  v_I=.1;                   % for the L

enddef;

variable_character_reference_widths;  

%***** for numbers *****

num_width_a#=.2width#;  num_fit_a#+num_width_a#=.55width#;    % 1
num_width_b#=.4width#;  num_fit_b#+num_width_b#=.55width#;    % 2 3 5 7 $
num_width_c#=.44width#; num_fit_c#+num_width_c#=.55width#;    % 6 9 0
num_width_d#=.47width#; num_fit_d#+num_width_d#=.55width#;    % 8  
num_width_e#=.50width#; num_fit_e#+num_width_e#=.55width#;    % 4

%***** for single pitch fonts *****

% *_*mono# gives the character reference width within the total per char width
% *_mfit#  is the amount of space left after the reference width is taken away
% *_*mono#+*_mfit# give the total width of the character
% In the case of single pitch fonts, the total width is always the same.
% In cases where, e.g., three instead of only one width is desired, the
%   value of 1*mono# can be changed

 a_mono#:=.6mono#;  a_mfit#+a_mono#=mono#;     % fjrJ',.:;
 b_mono#:=.7mono#;  b_mfit#+b_mono#=mono#;     % "mid" width
 c_mono#:=.75mono#; c_mfit#+c_mono#=mono#;     % abdgkpq069
 d_mono#:=.8mono#;  d_mfit#+d_mono#=mono#;     % eotvxyz4689CDGKOQ%&*^
 e_mono#:=.9mono#;  e_mfit#+e_mono#=mono#;     % AVXY4
 f_mono#:=.9mono#;  f_mfit#+f_mono#=mono#;     % mwMW@ ae oe AE OE

define_pixels(a_mono,b_mono,c_mono,d_mono,e_mono,f_mono,
              a_mfit,b_mfit,c_mfit,d_mfit,e_mfit,f_mfit); 
                           
% The following give fit adjustments for single pitch characters

 m_a=.5;                   % this amt is always .5
 m_b=.55; m_bb+m_b=1;      % BDEFGKPR7
 m_c=.55; m_cc+m_c=1;      % abdghkmnpqu()
 m_d=.6;  m_dd+m_d=1;      % C
 m_e=.65; m_ee+m_e=1;      % cflrt AE []
 m_f=.75; m_ff+m_f=1;      % JL

%**********

% need to account for serifs
% recognizing that a straight ascender may carry different visual value as
% straight of x-height

%**********