% --------------------------------------------------------------------------- %%% input use_driver % This is an auxiliary file which prepares reading a CM parametric file using % a sneaky-tricky method. Every PL parametric file (such as PLB10, PLBX10, % …, etc.) inputs this file, optionally changes some of PL parameters, and % then calls the macro |use_driver|. % --------------------------------------------------------------------------- % PL VERSION 1.09a, 30th March 2020 (see README.ENG) % --------------------------------------------------------------------------- % AUTHORS: Bogusław Jackowski and Marek Ryćko % --------------------------------------------------------------------------- % This file belongs to the public domain under conditions similar to % those of D. E. Knuth specified for the Computer Modern family of fonts. % % For details see either the file MEXINFO.POL or MEXINFO.ENG. % --------------------------------------------------------------------------- if unknown cmbase: input cmbase fi string driver_name,ss; numeric ii; vardef generate @# = driver_name:=str @#; endgroup enddef; vardef use_driver @# = % |@#| either is empty or is equal to the pt-size of a respective % CM parametric file if unknown param_base: % in sophisticated applications a user may wish to specify % |param_base| prior to calling |use_driver|: string param_base; param_base=jobname; fi ii:=0; forever: ii:=ii+1; ss:=substring(length(param_base)-ii,length(param_base)-ii+1) of param_base; exitif (ss<"0") or (ss>"9") or (ii>=length(param_base)); endfor; ii:=ii-1; if unknown basic_unit#: basic_unit#=pt#; fi % i.e., |basic_unit#:=1| numeric scale; if str@# <> "": scale=basic_unit#*scantokens( substring(length(param_base)-ii,length(param_base)) of param_base)/@#; ss:="input cm"&(substring(2,length(param_base)-ii) of param_base)&str @#; else: scale:=basic_unit#; ss:="input cm"&(substring(2,length(param_base)) of param_base); fi % |ogonek_pen#| is the only sharp extra PL parameter; % it must be rescaled separately: if known ogonek_pen#: ogonek_pen#:=scale*ogonek_pen#; fi % input the original driver, possibly rescaling: numeric true_pt#; true_pt#=pt#; pt#:=scale*true_pt#; scantokens(ss); pt#:=true_pt#; if (basic_unit#<>pt#): message "Actual font size is " & decimal(designsize) & "pt#"; message ""; fi font_identifier:=substring(0,length(param_base)-ii) of param_base; scantokens("input "& if driver_name="roman": "polan" elseif driver_name="textit": "polkur" elseif driver_name="mathsy": "polmat" elseif driver_name="title": "poltyt" elseif driver_name="csc": "polkap" else: driver_name fi); enddef; endinput; %%\end