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