%***************************************************************************** % 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 %**********