+%
+% lilymetrics.tex
+%
+\catcode `\@=11\relax
+
+\newdimen\lily@globalscale
+\newdimen\lily@localscale
+\newbox\lily@metricsbox
+\newwrite\lily@metricsfile
+
+\def\lilyglobalscale#1{%
+ \lily@globalscale #1pt
+}
+
+\def\lilymetricsfile#1{%
+ \immediate\openout\lily@metricsfile #1\relax
+}
+
+\begingroup
+ \catcode `P=12
+ \catcode `T=12
+ \lowercase{%
+ \def\x{%
+ \def\lily@rempt##1.##2PT{%
+ ##1\ifnum ##2 > \z@ .##2\fi
+ }%
+ }%
+ }
+\expandafter\endgroup\x
+
+\def\lily@strippt{%
+ \expandafter\lily@rempt
+}
+
+\long\def\lilygetmetrics#1#2#3#4{%
+ \lily@localscale #3\lily@globalscale
+ % convert pt to 1000*sp (1000/65536)
+ \lily@localscale 0.015259\lily@localscale
+ \font\lily@font = #2 scaled \lily@localscale
+ \setbox\lily@metricsbox\hbox{%
+ \lily@font
+ #4%
+ }%
+ \edef\lily@wd{\the\wd\lily@metricsbox}%
+ \edef\lily@ht{\the\ht\lily@metricsbox}%
+ \edef\lily@dp{\the\dp\lily@metricsbox}%
+ \immediate\write\lily@metricsfile{%
+ ("#1" . (\lily@strippt\lily@wd
+ \space\lily@strippt\lily@ht
+ \space\lily@strippt\lily@dp))%
+ }%
+}
+
+\catcode `\@=13\relax
+
+\endinput