aboutsummaryrefslogtreecommitdiff
path: root/fmt/font.h
blob: e4d6189eb8f10bfcfa3373db577bb2566cb1f2dc (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
%% Fonts
\newcount\thespacing
\newdimen\size
\begingroup
  \edef\specialAt{{ \string a\string t }}%
  \def\x#1{%
    \def\getfontsize##1=##2{% The user level macro
      \expandafter\getfontsizE\fontname##2#1\relax{##1}%
    }%
    \def\getfontsizE##1#1##2\relax##3{%
      {\def\tmp{##2}\expandafter}%
      \ifx\tmp\empty % empty #2 = Loaded at designsize
        \begingroup
          \font\tmpfont"##1" scaled 2000
          \getfontsize\dimen0=\tmpfont
          \divide\dimen0 by 2
          \expandafter
        \endgroup
        \expandafter\getfontsiZe\the\dimen0\relax{##3}%
      \else% Otherwise #2 holds the size. But is is followed by " at ", so we have to strip that
        \getfontsiZE{##3}##2%
      \fi
    }%
    \def\getfontsiZE##1##2#1{##1=##2}% Strip " at "
    \def\getfontsiZe##1\relax##2{##2=##1}%
  }%
  \expandafter\expandafter\expandafter
\endgroup
\expandafter\x\specialAt % From StackOverflow
{
\catcode`\@=11

\global\let\f@nt\font

\gdef\spacing{\afterassignment\adjs \thespacing}
\gdef\adjs{%adjust spacing
    \baselineskip=\size \multiply\baselineskip by \thespacing
    \divide\baselineskip by 100\relax}

\gdef\font#1{%
    \def\orig{#1}\edef\realname{\csname\string#1@font\endcsname}
    \afterassignment\xfont
    \expandafter\f@nt\realname
}
\gdef\xfont{
    \expandafter\getfontsize\expandafter\dimen0\expandafter=\realname
    \setbox0=\hbox{\vphantom(}%
    \dimen1=\ht0\advance\dimen1 by 1.5pt%
    \expandafter\edef\orig{\realname\size\the\dimen0\setbox\strutbox=\hbox{\vrule
    height \the\dimen1 depth \the\dp0 width 0pt}\adjs}
}
}