summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/fonts-opmac.opm
blob: 19fa9bf29b8c75e076258ee8e808ecbb48c7940e (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
%% This is part of OpTeX project, see http://petr.olsak.net/optex

\_codedecl \typosize {Font managing macros from OPmac <2020-04-14>} % loaded in format

   \_doc -----------------------------
   \`\typosize` `[<font-size>/<baselineskip>]` sets given parameters.
   It sets text font size by the \^`\setfontsize` macro and math font sizes
   by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and
   \^`\_sizemsscript`. It uses common concept font thes sizes: 100\,\%,
   70\,\% and 50\,\%.
   The \^`\_setmainvalues` sets the parameters as main values when
   the `\_typosize` is called first. 
   \_cod -----------------------------

\_protected\_def \_typosize [#1/#2]{%
   \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}%
   \_setmainvalues \_ignorespaces
}
\_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi}

\_def \_mathfontsize #1{\_if$#1$\_else
    \_tmpdim=#1\_ptunit
    \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
    \_tmpdim=0.7\_tmpdim
    \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
    \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim
    \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
    \_fi
}
\_public \typosize ;

   \_doc -----------------------------
   \`\typoscale` `[<font-factor>/<baseline-factor>]` scales 
   font size and baselineskip by given factors in respect to current values.
   It calculates the \^`\typosize` parameters and runs the \^`\typosize`.
   \_cod -----------------------------

\_protected\_def \_typoscale [#1/#2]{%
   \_ifx$#1$\_def\_tmp{[/}\_else
      \_settmpdim{#1}\_optsize
      \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi
   \_ifx$#2$\_edef\_tmp{\_tmp]}\_else
      \_settmpdim{#2}\_baselineskip
      \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\fi
   \_ea\_typosize\_tmp 
}
\def\_settmpdim#1#2{%
   \_tmpdim=#1pt \_divide\_tmpdim by1000
   \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim
}
\_public \typoscale ;

   \_doc -----------------------------
   \`\_setbaselineskip` `{<baselineskip>}` sets new `\baselineskip` and 
   more values of registers which are dependent on the `<baselineskip>`
   including the \^`\strutbox`.
   \_cod -----------------------------

\_def \_setbaselineskip #1{\_if$#1$\_else
   \_tmpdim=#1\_ptunit
   \_baselineskip=\_tmpdim \_relax 
   \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim
   \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim
   \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim
   \_normalbaselineskip=\_tmpdim
   \_jot=.25\_tmpdim
   \_maxdepth=.33333\_tmpdim
   \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}%
   \_fi
}

   \_doc -----------------------------
   \`\_setmainvalues` sets the current font size and `\baselineskip` 
   values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers.
   It redefines itself in order to set the main values only first.
   \nl
   \`\scalemain` returns to these values if they were set. Else they are set
   to 10/12\,pt. 
   \_cod -----------------------------

\_newskip   \_mainbaselineskip   \_mainbaselineskip=0pt \_relax
\_newdimen  \_mainfosize         \_mainfosize=0pt

\_def\_setmainvalues {%
   \_mainbaselineskip=\_baselineskip
   \_mainfosize=\_optsize
   \_topskip=\_mainfosize \_splittopskip=\_topskip
   \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family
   \_normalmath  % load fonts if \typosize is running first
   \_let \_setmainvalues =\_setmainvaluesL
}
\_def\_setmainvaluesL {\_ifmmode \_normalmath \_else
   \_rm \_everymath={\_normalmath}\_everydisplay={\_normalmath}\_fi}
\_def\_scalemain {%
   \_ifdim \_mainfosize=0pt
       \_mainfosize=10pt  \_mainbaselineskip=12pt
       \_let \_setmainvalues=\_setmainvaluesL       
    \fi
   \_optsize=\_mainfosize  \_baselineskip=\_mainbaselineskip
}
\_public \scalemain \mainfosize \mainbaselineskip ;

   \_doc -----------------------------
   \`\thefontsize` `[<size>]` and \`\thefontscale` `[<factor>]` 
    do modification of the size of the current font. They are implemented by the
   \^`\newcurrfontsize` macro.
   \_cod -----------------------------

\_protected\_def\_thefontsize[#1]{\_if$#1$\_else 
     \_tmpdim=#1\_ptunit
     \_newcurrfontsize{at\_tmpdim}%
  \_fi
  \_ignorespaces
}
\_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else
     \_tmpdim=#1pt \_divide\_tmpdim by1000
     \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim
     \_newcurrfontsize{at\_tmpdim}%
  \_fi
  \_ignorespaces
}
\_public \thefontsize \thefontscale ;

   \_doc -----------------------------
   \`\em` keeps the weight of the current vaiant and switches 
   roman $\leftrightarrow$ italic. It adds the italic correction by
   the \`\_additcorr` and \`\_afteritcorr` macros. The second does not
   add italic correction if the next character is dot or comma. 
   \_cod -----------------------------

\_protected\_def\_em {%
   \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm  \_else
   \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else
   \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf  \_else
   \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi
}
\_def\_additcorr{\_ifdim\_lastskip>0pt 
   \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi}
\_def\_afteritcorr{\_futurelet\_next\_afteritcorrA}
\_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi}
\_let\_italcorr=\/

   \_doc -----------------------------
   The \`\boldify` macro does `\let\it\bi` and `\let\normalmath=\boldmath`.
   \_cod -----------------------------

\_protected\_def \_boldify {%
   \_let \_setmainvalues=\_setmainvaluesL   
   \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath
   \_let\_it=\_bi \_let\_rm=\_bf \_rm
}
\_public \em \boldify ;

   \_doc -----------------------------
   We need to use a font selector for default pagination. Because we don't
   know what default font size will be selected by the user, we use this
   \`\_rmfixed` macro. It sets the `\rm` font from default font size
   (declared by first \^`\typosize` command and redefines itself be only
   the font switch for next pages.   
   \_cod -----------------------------

\_def \_rmfixed {% used in default \footline
   {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi
    \_fontdef\_rmfixed{\_setfontsize{at\mainfosize}\_resetmod\_rm}%
    \_global\_let\_rmfixed=\_rmfixed} % next use will be font switch only
   \_rmfixed 
}
\_let \rmfixed = \_tenrm % user can redefine it


\_endcode % -------------------------------------

History:
2020-04-14 \_setmainvaluesL: \_ifmmode test added
2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added