summaryrefslogtreecommitdiff
path: root/fonts/punk
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/punk
Initial commit
Diffstat (limited to 'fonts/punk')
-rw-r--r--fonts/punk/latex/punk.sty40
-rw-r--r--fonts/punk/latex/punktest.tex51
-rw-r--r--fonts/punk/source/punk.mf56
-rw-r--r--fonts/punk/source/punk10.mf13
-rw-r--r--fonts/punk/source/punk12.mf13
-rw-r--r--fonts/punk/source/punk20.mf13
-rw-r--r--fonts/punk/source/punka.mf60
-rw-r--r--fonts/punk/source/punkae.mf23
-rw-r--r--fonts/punk/source/punkbx20.mf13
-rw-r--r--fonts/punk/source/punkd.mf54
-rw-r--r--fonts/punk/source/punkg.mf63
-rw-r--r--fonts/punk/source/punkl.mf150
-rw-r--r--fonts/punk/source/punkp.mf177
-rw-r--r--fonts/punk/source/punksl.mf20
-rw-r--r--fonts/punk/source/punksl20.mf13
15 files changed, 759 insertions, 0 deletions
diff --git a/fonts/punk/latex/punk.sty b/fonts/punk/latex/punk.sty
new file mode 100644
index 0000000000..e040b3c57c
--- /dev/null
+++ b/fonts/punk/latex/punk.sty
@@ -0,0 +1,40 @@
+%
+% Rohit Grover's punk.sty for LaTeX 2e
+% Modified from Sebastian Rahtz's punk.sty
+%
+% poweretcher@hotmail.com
+%
+% January 2003
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Punk font shapes for special stuff
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+%
+%
+\DeclareFontFamily{T1}{punk}{}
+
+% m : series selected for main font
+% n : shape selected for main font
+
+\DeclareFontShape{T1}{punk}{m}{n}{<-11> punk10 <12-15> punk12 <16-25> punk20}{}
+\DeclareFontShape{T1}{punk}{m}{sl}{<-11> <11-15> <16-25> punksl20}{}
+\DeclareFontShape{T1}{punk}{m}{it}{<-25> punksl20}{}
+
+\DeclareFontShape{T1}{punk}{b}{n}{<-25> punkbx20}{}
+\DeclareFontShape{T1}{punk}{b}{sl}{<-25> punkbx20}{}
+\DeclareFontShape{T1}{punk}{b}{it}{<-25> punkbx20}{}
+
+
+\DeclareFontShape{T1}{punk}{bx}{n}{<->ssub * punk/b/n}{}
+\DeclareFontShape{T1}{punk}{bx}{sl}{<->ssub * punk/b/sl}{}
+\DeclareFontShape{T1}{punk}{bx}{it}{<->punk/b/it}{}
+
+\renewcommand{\encodingdefault}{T1}
+\renewcommand{\rmdefault}{punk}
+
+
+\endinput \ No newline at end of file
diff --git a/fonts/punk/latex/punktest.tex b/fonts/punk/latex/punktest.tex
new file mode 100644
index 0000000000..34c38b128f
--- /dev/null
+++ b/fonts/punk/latex/punktest.tex
@@ -0,0 +1,51 @@
+\documentclass[12pt]{article}
+\usepackage{punk}
+\title{Testing the new punk.sty}
+\author{Rohit Grover}
+\begin{document}
+\maketitle
+Unfortunately, not all sizes and shapes are available. But
+\LaTeX\ does what it can. Also, I'm not able to generate good PDF
+files because these fonts aren't available as postscript type 1.
+
+
+Normal: The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+
+
+Boldface: {\bf The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+
+Emphasis: {\em The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+
+Italics: {\it The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+huge: {\huge The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+LARGE: {\LARGE The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+Large: {\Large The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+large: {\large The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+Normal: The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+
+
+small: {\small The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+footnotesize: {\footnotesize The quick brown fox jumped over the lazy
+dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+tiny: {\tiny The quick brown fox jumped over the lazy dog. 0 1 2 3 4 5 6 7 8 9
+}
+
+\end{document} \ No newline at end of file
diff --git a/fonts/punk/source/punk.mf b/fonts/punk/source/punk.mf
new file mode 100644
index 0000000000..99ea8af653
--- /dev/null
+++ b/fonts/punk/source/punk.mf
@@ -0,0 +1,56 @@
+% Font inspired by Gerard and Marjan Unger's lectures, Feb 1985
+mode_setup;
+
+randomseed:=seed;
+
+define_pixels(u,dev);
+define_blacker_pixels(px,py,dot);
+define_whole_pixels(s);
+xoffset:=s;
+pickup pencircle xscaled px yscaled py; punk_pen:=savepen;
+pickup pencircle scaled dot; def_pen_path_;
+path dot_pen_path; dot_pen_path:=currentpen_path;
+currenttransform:=identity slanted slant yscaled aspect_ratio;
+
+def beginpunkchar(expr c,n,h,v) = % code $c$; width is $n$ units
+ hdev:=h*dev; vdev:=v*dev;% modify horizontal and vertical amounts of deviation
+ beginchar(c,n*u#,ht#,0); italcorr ht#*slant; pickup punk_pen enddef;
+extra_endchar:=extra_endchar&"w:=w+2s;charwd:=charwd+2s#";
+
+def ^ = transformed currenttransform enddef;
+def makebox(text rule) =
+ for y=0,h:
+ rule((-s,y)^,(w-s,y)^); endfor % horizontals
+ for x=-s,0,w-2s,w-s: rule((x,0)^,(x,h)^); endfor % verticals
+ enddef;
+rulepen:=pensquare;
+
+vardef pp expr z = z+(hdev*normaldeviate,vdev*normaldeviate) enddef;
+
+def pd expr z = addto_currentpicture contour
+ dot_pen_path shifted z.t_ withpen penspeck enddef; % {\bf drawdot}
+
+input punkl % uppercase letters
+input punkae % uppercase \AE, \OE, \O
+input punkg % uppercase greek
+input punkp % punctuation
+input punkd % digits
+input punka % accents
+
+ht#:=.6ht#; dev:=.7dev;
+input punksl % special lowercase
+extra_beginchar:=extra_beginchar&"charcode:=charcode+32;";
+input punkl % lowercase letters
+extra_beginchar:=extra_beginchar&"charcode:=charcode-35;";
+input punkae % lowercase \ae, \oe, \o
+
+font_slant:=slant;
+font_quad:=18u#+2s#;
+font_normal_space:=9u#+2s#;
+font_normal_stretch:=6u#;
+font_normal_shrink:=4u#;
+font_x_height:=ht#;
+font_coding_scheme:="TeX text without f-ligatures";
+
+
+bye
diff --git a/fonts/punk/source/punk10.mf b/fonts/punk/source/punk10.mf
new file mode 100644
index 0000000000..6ff3bcbde6
--- /dev/null
+++ b/fonts/punk/source/punk10.mf
@@ -0,0 +1,13 @@
+% 10-point PUNK font
+designsize:=10pt#; font_identifier:="PUNK";
+ht#:=7pt#; % height of characters
+u#:=1/4pt#; % unit width
+s#:=1.2pt#; % extra sidebar
+px#:=.6pt#; % horizontal thickness of pen
+py#:=.5pt#; % vertical thickness of pen
+dot#:=1.3pt#; % diameter of dots
+dev#:=.3pt#; % standard deviation of punk points
+slant:=0; % obliqueness
+seed:=sqrt2; % seed for random number generator
+input punk
+bye
diff --git a/fonts/punk/source/punk12.mf b/fonts/punk/source/punk12.mf
new file mode 100644
index 0000000000..6f0def4349
--- /dev/null
+++ b/fonts/punk/source/punk12.mf
@@ -0,0 +1,13 @@
+% 12-point PUNK font
+designsize:=12pt#; font_identifier:="PUNK";
+ht#:=8.4pt#; % height of characters
+u#:=.3pt#; % unit width
+s#:=1.4pt#; % extra sidebar
+px#:=.75pt#; % horizontal thickness of pen
+py#:=.62pt#; % vertical thickness of pen
+dot#:=1.6pt#; % diameter of dots
+dev#:=.36pt#; % standard deviation of punk points
+slant:=0; % obliqueness
+seed:=sqrt3; % seed for random number generator
+input punk
+bye
diff --git a/fonts/punk/source/punk20.mf b/fonts/punk/source/punk20.mf
new file mode 100644
index 0000000000..d5da8109db
--- /dev/null
+++ b/fonts/punk/source/punk20.mf
@@ -0,0 +1,13 @@
+% 20-point PUNK font
+designsize:=20pt#; font_identifier:="PUNK";
+ht#:=14pt#; % height of characters
+u#:=4/9pt#; % unit width
+s#:=2pt#; % extra sidebar
+px#:=.8pt#; % horizontal thickness of pen
+py#:=.6pt#; % vertical thickness of pen
+dot#:=2.7pt#; % diameter of dots
+dev#:=.5pt#; % standard deviation of punk points
+slant:=0; % obliqueness
+seed:=2.71828; % seed for random number generator
+input punk
+bye
diff --git a/fonts/punk/source/punka.mf b/fonts/punk/source/punka.mf
new file mode 100644
index 0000000000..be1343eedd
--- /dev/null
+++ b/fonts/punk/source/punka.mf
@@ -0,0 +1,60 @@
+% Punk accents
+
+beginpunkchar(oct"022",9,1,1); % \`{}
+z1=pp(2.5u,h); z2=pp(.6w,.8h); pd z1; pd z2; draw z1--z2; % diagonal
+endchar;
+
+beginpunkchar(oct"023",9,1,1); % \'{}
+z1=pp(w-2.5u,h); z2=pp(.4w,.8h); pd z1; pd z2; draw z1--z2; % diagonal
+endchar;
+
+beginpunkchar(oct"136",13,1,1); % \^{}
+z1=pp(2.5u,.8h); z2=pp(.5w,h); z3=(w-2.5u,.8h);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar(oct"024",13,1,1); % \v{}
+z1=pp(2.5u,.9h); z2=pp(.5w,.7h); z3=pp(w-2.5u,.9h);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar(oct"025",11,1,1); % \u{}
+z1=pp(2u,h); z2=pp(.5w,.75h); z3=pp(w-2u,h);
+pd z1; pd z3; draw flex(z1,z2,z3); % stroke
+endchar;
+
+beginpunkchar(oct"026",12,1,1); % \={}
+z1=pp(u,.8h); z2=pp(w-u,.8h); pd z1; pd z2; draw z1--z2; % bar
+endchar;
+
+beginpunkchar(oct"137",5,1,1); % \.{}
+pd pp(.5w,.9h); % dot
+endchar;
+
+beginpunkchar(oct"177",13,1,1); % \"{}
+pd pp(1/5w,.9h); pd pp(4/5w,.9h); % dots
+endchar;
+
+beginpunkchar(oct"176",13,1,1); % \~{}
+z1=pp(u,.75h); z2=pp(w-u,.9h); pd z1; pd z2; draw z1{up}..{up}z2; % stroke
+endchar;
+
+beginpunkchar(oct"175",13,1,1); % \H{}
+z1=pp(4u,h); z2=pp(2.5u,.7h); z3=pp(w-2u,h); z4=pp(w-3.5u,.7h);
+pd z1; pd z3; draw z1--z2--z4--z3; % diagonals (linked)
+endchar;
+
+beginpunkchar(oct"027",13,0,0); % Scandinavian loop, for \AA\ and \aa
+z0=(.5w,.66h); % point $z2$ of lowercase A
+z1=(.5w,.9h); draw z0{z0-(1.5u,0)}..z1..{(w-1.5u,0)-z0}z0; % loop
+endchar;
+
+beginpunkchar(oct"030",13,.5,.5); % Cedilla, for \c c
+z1=(.6w,0); z2=pp(.6w,-.1h); z3=pp(2.5u,-.1h);
+pd z3; draw z1--z2--z3; % stroke
+endchar;
+
+beginpunkchar(oct"040",11,.5,.5); % Polish cross, for \L\ and \l
+z1=pp(0,.25h); z2=pp(4u,.4h); pd z1; pd z2; draw z1--z2; % diagonal
+endchar;
+ligtable oct"040": "l" kern -charwd, "L" kern -charwd;
diff --git a/fonts/punk/source/punkae.mf b/fonts/punk/source/punkae.mf
new file mode 100644
index 0000000000..15a70326e8
--- /dev/null
+++ b/fonts/punk/source/punkae.mf
@@ -0,0 +1,23 @@
+% special punk letter combinations
+
+beginpunkchar(oct"035",16,1,2); % \AE
+z1=pp(1.5u,0); z2=pp(.6w,h); z3=pp(w-1.5u,h);
+pd z1; pd z3; draw z1--z2--z3; % left diagonal and upper arm
+z4=pp .3[z1,z2]; z5=pp(.6w,0); z6=pp(w-2u,.3h);
+pd z4; pd z6; draw z4--z6; % crossbar
+z7=pp(w-u,0); pd z2; pd z7; draw z2--z5--z7; % stem and lower arm
+endchar;
+
+beginpunkchar(oct"036",18,1,2); % \OE
+z1=pp(.5w,h); z2=pp(u,.4h); z3=pp(.5w,0);
+pd z1; draw z1..z2..{right}z3; % bowl
+z4=pp(w-1.5u,h); z5=pp(w-2u,.4h); z6=pp(w-u,0);
+pd z4; pd z6; draw z4--z1--z3--z6; % arms and stem
+pd z5; draw z5--.4[z3,z1]; % crossbar
+endchar;
+
+beginpunkchar(oct"037",14,1,1); % \O
+z1=pp(.5w,h); z2=pp(u,.5h); z3=pp(.5w,0); z4=pp(w-u,.5h);
+z5=pp(w-2u,1.1h); z6=pp(2u,-.1h);
+pd z1; pd z6; draw z1..z2..z3..z4..z5--z6; % bowl and diagonal
+endchar;
diff --git a/fonts/punk/source/punkbx20.mf b/fonts/punk/source/punkbx20.mf
new file mode 100644
index 0000000000..e045c44e85
--- /dev/null
+++ b/fonts/punk/source/punkbx20.mf
@@ -0,0 +1,13 @@
+% 20-point bold extended PUNK font
+designsize:=20pt#; font_identifier:="PUNKBX";
+ht#:=14pt#; % height of characters
+u#:=.6pt#; % unit width
+s#:=2.2pt#; % extra sidebar
+px#:=2pt#; % horizontal thickness of pen
+py#:=1.6pt#; % vertical thickness of pen
+dot#:=3.5pt#; % diameter of dots
+dev#:=.5pt#; % standard deviation of punk points
+slant:=0; % obliqueness
+seed:=0.57722; % seed for random number generator
+input punk
+bye
diff --git a/fonts/punk/source/punkd.mf b/fonts/punk/source/punkd.mf
new file mode 100644
index 0000000000..0d44c03b3b
--- /dev/null
+++ b/fonts/punk/source/punkd.mf
@@ -0,0 +1,54 @@
+% Punk digits
+
+beginpunkchar("0",9,.5,1);
+z1=pp(.5w,h); z2=pp(u,.55h); z3=pp(.5w,0); z4=pp(w-u,.55h);
+pd z1; draw z1{curl 2}..z2..z3..z4..z1; % bowl
+endchar;
+
+beginpunkchar("1",9,.3,1);
+z1=pp(2u,.7h); z2=pp(.6w,h); z3=pp(.6w,0);
+pd z1; pd z3; draw z1--z2--z3; % serif and stem
+endchar;
+
+beginpunkchar("2",9,1,1);
+z1=pp(2u,.7h); z2=pp(.5w,h); z3=pp(w-u,.6h); z4=pp(u,0); z5=pp(w-2u,0);
+pd z1; pd z5; draw z1..z2..z3..z4--z5; % stroke
+endchar;
+
+beginpunkchar("3",9,.5,.5);
+z1=pp(2u,.7h); z2=pp(.5w,h); z3=pp(w-u,.5[y2,y4]);
+z4=pp(.5w-u,.55h); z5=pp(w-u,.5[y4,y6]); z6=pp(.5w,0); z7=pp(1.5u,.2h);
+pd z1; pd z7; draw z1..z2..z3..z4&z4..z5..z6..z7; % arcs
+endchar;
+
+beginpunkchar("4",9,1,1);
+z1=pp(w-u,.3h); z2=pp(u,.3h); z3=pp(2/3w,h); z4=pp(2/3w,0);
+pd z1; pd z4; draw z1--z2--z3--z4; % stem and diagonals
+endchar;
+
+beginpunkchar("5",9,.5,.5);
+z1=pp(w-2u,h); z2=pp(2u,h); z3=pp(u,.7h); z4=pp(w-u,.5[y3,y5]);
+z5=pp(.5w,0); z6=pp(u,.2h);
+pd z1; pd z6; draw z1--z2--z3..z4..z5..z6; % stroke
+endchar;
+
+beginpunkchar("6",9,1,1);
+z1=pp(2/3w,h); z2=pp(u,.3h); z3=pp(.5w,0); z4=pp(w-u,.3h); z5=pp(.6w,.6h);
+z6=pp z2; pd z1; pd z6; draw z1..z2..z3..z4..z5--z6; % stroke
+endchar;
+
+beginpunkchar("7",9,.5,1);
+z1=pp(2u,h); z2=pp(w-.5u,h); z3=pp(.4w,0);
+pd z1; pd z3; draw z1--z2&z2..z3{down}; % stroke
+endchar;
+
+beginpunkchar("8",9,.5,.5);
+z1=pp(.5w,h); z2=pp(u,.5[y1,y3]); z3=pp(.5w,.6h); z4=pp(w-u,.5[y3,y5]);
+z5=pp(.5w,0); z6=pp(u,.5[y5,y3]); z7=pp(w-u,.5[y1,y3]);
+pd z1; draw z1{curl 8}..z2..z3..z4..z5..z6..z3..z7..z1; % stroke
+endchar;
+
+beginpunkchar("9",9,1,1);
+z1=pp(1/3w,0); z2=pp(w-u,.7h); z3=pp(.5w,h); z4=pp(u,.7h); z5=pp(.5w,.4h);
+pd z1; pd z5; draw z1..z2..z3..z4..z5; % stroke
+endchar;
diff --git a/fonts/punk/source/punkg.mf b/fonts/punk/source/punkg.mf
new file mode 100644
index 0000000000..54904a13ed
--- /dev/null
+++ b/fonts/punk/source/punkg.mf
@@ -0,0 +1,63 @@
+% punk greek uppercase
+
+beginpunkchar(oct"000",11,1,2); % $\Gamma$
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-1.5u,h);
+pd z1; pd z3; draw z1--z2--z3; % stem and arm
+endchar;
+
+beginpunkchar(oct"001",15,1,2); % $\Delta$
+z1=pp(u,0); z2=pp(.5w,h); z3=pp(w-u,0);
+pd z1; draw z1--z2..tension 5..z3..tension 5..z1; % triangle
+endchar;
+
+beginpunkchar(oct"002",15,.5,2); % $\Theta$
+z1=pp(.5w,h); z2=pp(u,.6h); z3=pp(.5w,0); z4=pp(w-u,.6h);
+pd z1; draw z1..tension.8..z2..z3..z4..tension.8..z1; % bowl
+z5=pp(x2+2u,.4h); z6=pp(x4-2u,.4h); pd z5; pd z6; draw z5--z6; % bar
+endchar;
+
+beginpunkchar(oct"003",12,1,2); % $\Lambda$
+z1=pp(u,0); z2=pp(.5w,h); z3=pp(w-u,0);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar(oct"004",12,1,1); % $\Xi$
+z1=pp(u,h); z2=pp(w-u,h); pd z1; pd z2; draw z1--z2; % upper arm
+z3=pp(2u,.55h); z4=pp(w-2u,.55h); pd z3; pd z4; draw z3--z4; % bar
+z5=pp(u,0); z6=pp(w-u,0); pd z5; pd z6; draw z5--z6; % lower arm
+endchar;
+
+beginpunkchar(oct"005",13,1,.5); % $\Pi$
+z1=pp(1.5u,0); z2=pp(1.5u,h); z3=pp(w-1.5u,h); z4=pp(w-1.5u,0);
+pd z1; pd z4; draw z1--z2--z3--z4; % stems and bar
+endchar;
+
+beginpunkchar(oct"006",13,1,1); % $\Sigma$
+z1=pp(w-u,h); z2=pp(u,h); z3=pp(.5w-u,.5h); z4=pp(u,0); z5=pp(w-u,0);
+pd z1; pd z5; draw z1--z2{.5[z4,z5]-z2}..z3--z4--z5; % arms and diagonals
+endchar;
+
+beginpunkchar(oct"007",15,1,.5); % $\Upsilon$
+z1=pp(u,.8h); z2=pp(.3w,h); z3=pp(.5w,.5h); z4=pp(.5w,0);
+pd z1; pd z4; draw z1..z2..tension2..z3---z4; % left arc and stem
+z5=pp(w-u,.8h); z6=pp(.7w,h);
+pd z5; draw z5..z6..tension2..{z4-z3}z3; % right arc
+endchar;
+
+beginpunkchar(oct"010",13,1,2); % $\Phi$
+z1=pp(.5w,h); z2=pp(.5w,0); pd z1; pd z2; draw z1--z2; % stem
+z3=pp(.5w,2/3h); z4=pp(u,.5h); z5=pp(.5w,1/4h); z6=pp(w-u,.5h);
+pd z3; draw z3..z4..z5..z6..z3; % bowl
+endchar;
+
+beginpunkchar(oct"011",14,1,1); % $\Psi$
+z1=pp(.5w,h); z2=pp(.5w,0); pd z1; pd z2; draw z1--z2; % stem
+z3=pp(u,.8h); z4=pp(.5w,.2h); z5=pp(w-u,.8h);
+pd z3; pd z5; draw z3{.4[z1,z2]-z3}..z4{right}..{z5-.4[z1,z2]}z5; % stroke
+endchar;
+
+beginpunkchar(oct"012",13,1,2); % $\Omega$
+z1=pp(u,0); z2=pp(1/3w,0); z3=pp(u,2/3h); z4=pp(.5w,h);
+z5=pp(w-u,2/3h); z6=pp(2/3w,0); z7=pp(w-u,0);
+pd z1; pd z7; draw z1--z2{up}..z3..z4..z5..{down}z6--z7; % bowl and arms
+endchar;
diff --git a/fonts/punk/source/punkl.mf b/fonts/punk/source/punkl.mf
new file mode 100644
index 0000000000..c546de0711
--- /dev/null
+++ b/fonts/punk/source/punkl.mf
@@ -0,0 +1,150 @@
+% punk letters
+
+beginpunkchar("A",13,1,2);
+z1=pp(1.5u,0); z2=(.5w,1.1h); z3=pp(w-1.5u,0);
+pd z1; pd z3; draw z1--z2--z3; % left and right diagonals
+z4=pp .3[z1,z2]; z5=pp .3[z3,z2]; pd z4; pd z5; draw z4--z5; % crossbar
+endchar;
+
+beginpunkchar("B",12,1,1);
+z1=pp(2u,0); z2=pp(2u,.6h); z3=pp(2u,h); pd z1; pd z3; draw z1--z3; % stem
+z1.5=pp(w-u,.5y2); z2.5=pp(w-u,.5[y2,y3]); draw z2--z2.5--z3; % upper lobe
+draw flex(z2,z1.5,z1); % lower lobe
+endchar;
+
+beginpunkchar("C",13,1,2);
+z1=pp(w-2u,.8h); z2=pp(.6w,h); z3=pp(u,.5h); z4=(.6w,0); z5=(w-2u,.2h);
+pd z1; pd z5; draw z1..z2..z3..z4..z5; % arc
+endchar;
+
+beginpunkchar("D",14,1,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-u,.6h);
+pd z1; pd z2; draw flex(z1,z3,z2); % lobe
+draw z1--z2; % stem
+endchar;
+
+beginpunkchar("E",12,.5,1);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-2.5u,h); z4=pp(w-2u,0);
+pd z3; pd z4; draw z4--z1--z2--z3; % stem and arms
+z5=pp(2u,.6h); z6=pp(w-3u,.6h); pd z5; pd z6; draw z5--z6; % crossbar
+endchar;
+
+beginpunkchar("F",12,.5,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-2u,h);
+pd z1; pd z3; draw z1--z2--z3; % stem and arm
+z5=pp(2u,.6h); z6=pp(w-3u,.6h); z4=pp .5[z5,z6]-(0,.1h);
+pd z5; pd z6; draw flex (z5,z4,z6); % crossbar
+endchar;
+
+beginpunkchar("G",13,.5,.5);
+z1=pp(w-2u,.8h); z2=pp(.6w,h); z3=pp(u,.5h); z4=pp(.6w,0); z5=(w-2u,0);
+pd z1; draw z1..z2..z3..z4---z5; % arc
+z6=pp(.5[u,x5],.4h); pd z6; pd z5; draw z6--(pp(x5,y6))--z5; % spur
+endchar;
+
+beginpunkchar("H",14,1,.5);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-2u,0); z4=pp(w-2u,h);
+z5=pp(2u,.6h); z6=pp(w-2u,.6h);
+pd z1; pd z2; pd z3; pd z4; draw z1--z2; draw flex(z3,z6,z4); % stems
+pd z5; draw z5--z6; % crossbar
+endchar;
+
+beginpunkchar("I",5,1,2);
+z1=pp(.5w,0); z2=(.5w,1/3h); z3=(.5w,2/3h); z4=(.5w,h);
+pd z1; pd z4; draw flex(z1,z2,z3,z4); % stem
+endchar;
+
+beginpunkchar("J",9,1,2);
+z1=pp(w-2u,h); z2=pp(w-2u,-.1h); z3=pp(u,0);
+pd z1; pd z3; draw z1--z2--z3; % arc
+endchar;
+
+beginpunkchar("K",14,1,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(2u,1/3h); z4=pp(w-1.5u,h);
+pd z1; pd z2; draw z1--z2; % stem
+pd z3; pd z4; draw z3--z4; % upper diagonal
+z6=pp(w-u,0); z5=1/3[z3,z4];
+pd z6; draw flex(z5,.8[z1,2/3[z5,z6] ],z6);% lower diagonal
+endchar;
+
+beginpunkchar("L",11,1,2);
+z1=pp(2u,h); z2=pp(2u,0); z3=pp(w-1.5u,0);
+pd z1; pd z3; draw z1--z2--z3; % stem and arm
+endchar;
+
+beginpunkchar("M",17,.5,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(.5w,0); z4=pp(w-2u,h); z5=pp(w-2u,0);
+pd z1; pd z5; draw z1--z2--z3--z4--z5; % stems and diagonals
+endchar;
+
+beginpunkchar("N",13,.75,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-2u,0); z4=pp(w-2u,h);
+pd z1; pd z4; draw z1--z2--z3--z4; % stems and diagonals
+endchar;
+
+beginpunkchar("O",12,.5,2);
+z1=pp(.5w,h); z2=pp(u,.55h); z3=pp(.5w,0); z4=pp(w-u,.55h);
+pd z1; draw z1{left}..z2..z3..z4..z1; % bowl
+endchar;
+
+beginpunkchar("P",13,1,2);
+z1=pp(2u,0); z2=pp(2u,1.1h); z3=pp(2u,.5h); z4=pp(w,.6[y3,y2]);
+pd z1; pd z3; draw z1--z2--z4--z3; % stem and bowl
+endchar;
+
+beginpunkchar("Q",14,.5,2);
+z1=pp(.5w,h); z2=pp(u,.55h); z3=pp(.5w,0); z4=pp(w-u,.55h);
+pd z1; draw z1{curl 2}..z2..z3..z4..z1; % bowl
+z5=pp(.4w,.2h); z6=pp(w-u,-.1h); z7=pp(.5[x5,x6],-.2h);
+pd z5; pd z6; draw z5--z7--z6; % tail
+endchar;
+
+beginpunkchar("R",16,1,2);
+z1=pp(2u,0); z2=pp(2u,h); z3=pp(w-u,.6[y2,y4]); z4=pp(2u,.5h); z5=pp(w-1.5u,0);
+pd z1; pd z2; pd z5; draw z1--flex(z2,z3,z4)--z5; % stem, bowl, and diagonal
+endchar;
+
+beginpunkchar("S",11,.3,1);
+z1=pp(w-2u,.9h); z2=pp(.5w,h); z3=pp(u,.7h); z4=.6[z6,z2];
+z5=pp(w-u,.35h); z6=pp(.5w,u); z7=pp(u,.2h);
+pd z1; pd z7; draw z1--z2...z3..z4..z5...z6--z7; % stroke
+endchar;
+
+beginpunkchar("T",13,.75,2);
+z1=pp(u,h); z2=pp(w-u,h); z3=pp(.5w,0);
+pd z1; pd z2; pd z3; draw z1--z2; % arms
+draw .5[z1,z2]--z3; % stem
+endchar;
+
+beginpunkchar("U",13,.3,2);
+z1=pp(2u,h); z2=pp(2u,.2h); z3=pp(.5w,0); z4=pp(w-2u,.2h); z5=pp(w-2u,h);
+pd z1; pd z5; draw z1---z2...z3{z4-z2}...z4---z5; % stroke
+endchar;
+
+beginpunkchar("V",13,1,2);
+z1=pp(1.5u,h); z2=pp(.5w,0); z3=pp(w-1.5u,h);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar("W",18,1,2);
+z1=pp(1.5u,h); z2=pp(.5[x1,x3],0); z3=pp(.5w,.8h); z4=pp(.5[x3,x5],0);
+z5=pp(w-1.5u,h);
+pd z1; pd z5; draw z1--z2--z3--z4--z5; % diagonals
+endchar;
+
+beginpunkchar("X",13,1,1);
+z1=pp(1.5u,h); z2=pp(w-1.5u,0); z3=pp(1.5u,0); z4=pp(w-2.5u,h);
+pd z1; pd z2; draw z1--z2; % main diagonal
+pd z3; pd z4; draw z3--z4; % cross diagonal
+endchar;
+
+beginpunkchar("Y",13,1,2);
+z1=pp(1.5u,h); z2=pp(w-1.5u,h); z3=pp(.5w,.5h); z4=pp(.5w,0);
+pd z1; pd z2; pd z4; draw z1--z3--z4; % stem and left diagonal
+draw z2--z3; % right diagonal
+endchar;
+
+beginpunkchar("Z",11,1,2);
+z1=pp(1.5u,h); z2=pp(w-2.5u,h); z3=pp(1.5u,0); z4=pp(w-1.5u,0);
+pd z1; pd z4; draw z1--z2--z3--z4; % diagonals
+endchar;
diff --git a/fonts/punk/source/punkp.mf b/fonts/punk/source/punkp.mf
new file mode 100644
index 0000000000..2ed9d6be15
--- /dev/null
+++ b/fonts/punk/source/punkp.mf
@@ -0,0 +1,177 @@
+% Punk punctuation
+
+beginpunkchar(".",5,1,2);
+pd pp(.5w,0); % dot
+endchar;
+
+beginpunkchar(",",5,.5,.5);
+z1=pp(.5w,0); z2=pp(w-u,-.1h); z3=pp(.5w,-.3h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+endchar;
+
+beginpunkchar(":",5,1,.5);
+pd pp(.5w,0); pd pp(.5w,.4h); % dots
+endchar;
+
+beginpunkchar(";",5,.5,.5);
+z1=pp(.5w,0); z2=pp(w-u,-.1h); z3=pp(.5w,-.3h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+pd pp(.5w,.4h); % dot
+endchar;
+
+beginpunkchar("!",5,.5,.5);
+pd pp(.5w,0); % dot
+z1=pp(.5w,1.05h); z2=pp(.5w,.3h); pd z1; pd z2; draw z1--z2; % stem
+endchar;
+ligtable "!": "`" =: oct"016";
+
+beginpunkchar(oct"016",5,.5,.5); % spanish inverted !
+pd pp(.5w,.9h); % dot
+z1=pp(.5w,-.1h); z2=pp(.5w,.6h); pd z1; pd z2; draw z1--z2; % stem
+endchar;
+
+beginpunkchar("?",9,1,.5);
+z1=pp(1.5u,.8h); z2=pp(.5w,h); z3=pp(w-u,.8h); z4=pp(.5w,.3h);
+pd z1; pd z4; draw z1..z2..z3..{down}z4; % arc and stem
+pd pp(.5w,0); % dot
+endchar;
+ligtable "?": "`" =: oct"017";
+
+beginpunkchar(oct"017",9,1,.5); % spanish inverted ?
+z1=pp(1.5u,.1h); z2=pp(.5w,-.1h); z3=pp(w-u,.1h); z4=pp(.5w,.6h);
+pd z1; pd z4; draw z1..z2..z3..{up}z4; % arc and stem
+pd pp(.5w,.9h); % dot
+endchar;
+
+beginpunkchar("&",14,.5,.5);
+z1=pp(w-2u,h); z2=pp(u,h); z3=pp(3u,0); z5=pp(w-u,.6h); z6=pp(w-2u,0);
+pd z1; pd z5; draw z1--z2--z3--z5; % arms and stem
+draw z1--.5[z2,z3]; pd z6; draw z6--.6[z3,z5]; % diagonals
+endchar;
+
+beginpunkchar("$",12,.5,.5);
+z1=pp(w-1.5u,.7h); z2=pp(.5w,h); z3=pp(u,.7h); z4=.5[z3,z5];
+z5=pp(w-u,.3h); z6=pp(.5w,0); z7=pp(u,.3h);
+pd z1; pd z7; draw z1..z2..z3..z4..z5..z6..z7; % stroke
+z8=z2+(0,.1h); pd z8; draw z8--z6; % stem
+endchar;
+
+beginpunkchar("%",18,.5,.5);
+z1=pp(3.5u,1.1h); z2=pp(u,.8h); z3=pp(3.5u,.5h); z4=pp(6u,.8h);
+z5=pp(w-3.5u,.5h); z6=pp(w-6u,.2h); z7=pp(w-3.5u,-.1h); z8=pp(w-u,.2h);
+pd z1; draw z1..z2..z3..z4..z1; % upper bowl
+pd z5; draw z5..z6..z7..z8..z5; % lower bowl
+z9=pp(w-3u,1.1h); z0=pp(3u,-.1h); pd z0; draw z9--z0; % diagonal
+draw z1{z5-z1}..z9; % link
+endchar;
+
+beginpunkchar("@",18,1,.5);
+z1=pp(2u,0); z2=pp(1/3w,.7h); z3=pp(w-6u,0);
+z4=pp(w,.3h); z5=pp(1/3w,h); z6=pp(u,.5h); z7=.7[z2,z3];
+pd z1; pd z7; draw z1--z2--z3{right}..z4..z5..z6..z7; % diagonals and stroke
+endchar;
+
+beginpunkchar("-",7,.5,.5);
+z1=pp(u,.4h); z2=pp(w-u,.5h); pd z1; pd z2; draw z1--z2; % bar
+endchar;
+ligtable "-": "-" =: oct"173";
+
+beginpunkchar(oct"173",9,.5,.5); % --
+z1=pp(0,.5h); z2=pp(w,.4h); pd z1; pd z2; draw z1--z2; % bar
+endchar;
+ligtable oct"173": "-" =: oct"174";
+
+beginpunkchar(oct"174",18,.5,.5); % ---
+z1=pp(0,.5h); z2=pp(w,.4h); pd z1; pd z2; draw z1--z2; % bar
+endchar;
+
+beginpunkchar("+",9,.5,1);
+z1=pp(0,.5h); z2=pp(w,.5h); pd z1; pd z2; draw z1--z2; % bar
+z3=pp(.5w,.1h); z4=pp(.5w,.9h); pd z3; pd z4; draw z3--z4; % stem
+endchar;
+
+beginpunkchar("*",13,.5,1);
+z0=pp(.5w,1.1h); z1=pp(u,.9h); z2=pp(2u,.3h); z3=pp(w-u,.3h); z4=pp(w-u,.9h);
+pd z0; draw z0--z2..1/3[.5[z2,z4],z0]..z4--z1--z3--z0; % star
+endchar;
+
+beginpunkchar("'",5,.3,.5);
+z1=pp(1.5u,h); z2=pp(w-u,.85h); z3=pp(u,2/3h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+endchar;
+ligtable "'": "'" =: oct"042";
+
+beginpunkchar(oct"042",9,.3,.5); % ''
+z1=pp(.5w-.5u,h); z2=pp(u,.6h); z3=pp(w-u,.95h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+endchar;
+
+beginpunkchar("`",5,.3,.5);
+z1=pp(w-1.5u,h); z2=pp(u,.85h); z3=pp(w-u,2/3h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+endchar;
+ligtable "`": "`" =: oct"134";
+
+beginpunkchar(oct"134",9,.3,.5); % ``
+z1=pp(.5w+.5u,h); z2=pp(w-u,.6h); z3=pp(u,.95h);
+pd z1; pd z3; draw z1--z2--z3; % stroke
+endchar;
+
+beginpunkchar(oct"015",9,.3,.5); % {\tt\char'15}
+z1=pp(.5w,h); z2=pp(.5w,.6h); pd z1; pd z2; draw z1--z2; % stem
+endchar;
+
+beginpunkchar("(",7,.5,.5);
+z1=pp(w-u,h); z2=pp(u,.5h); z3=pp(w-u,0);
+pd z1; pd z3; draw z1..z2..z3; % stroke
+endchar;
+
+beginpunkchar(")",7,.5,.5);
+z1=pp(u,h); z2=pp(w-u,.5h); z3=pp(u,0); pd z1; pd z3; draw z1..z2..z3; % stroke
+endchar;
+
+beginpunkchar("[",8,.5,.5);
+z1=pp(w-u,h); z2=pp(.5w,h); z3=pp(.5w,0); z4=pp(w-u,0);
+pd z1; pd z4; draw z1--z2--z3--z4; % bars and stem
+endchar;
+
+beginpunkchar("]",8,.5,.5);
+z1=pp(u,h); z2=pp(.5w,h); z3=pp(.5w,0); z4=pp(u,0);
+pd z1; pd z4; draw z1--z2--z3--z4; % bars and stem
+endchar;
+
+beginpunkchar("<",9,.5,.5);
+z1=pp(w-u,.9h); z2=pp(u,.5h); z3=pp(w-u,.1h);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar(">",9,.5,.5);
+z1=pp(u,.9h); z2=pp(w-u,.5h); z3=pp(u,.1h);
+pd z1; pd z3; draw z1--z2--z3; % diagonals
+endchar;
+
+beginpunkchar("=",9,.5,.5);
+z5=pp(u,2/3h); z6=pp(w-u,2/3h); pd z5; pd z6; draw z5--z6; % upper bar
+z7=pp(u,1/3h); z8=pp(w-u,1/3h); pd z7; pd z8; draw z7--z8; % lower bar
+endchar;
+
+beginpunkchar("#",15,.5,.5);
+z1=pp(.5w,h); z2=pp(3u,0); z3=pp(w-3u,h); z4=pp(.5w,0);
+pd z2; pd z3; draw z3--z1--z2; draw z3--z4--z2; % diagonals (linked)
+z5=pp(u,2/3h); z6=pp(w-u,2/3h); pd z5; pd z6; draw z5--z6; % upper bar
+z7=pp(u,1/3h); z8=pp(w-u,1/3h); pd z7; pd z8; draw z7--z8; % lower bar
+endchar;
+
+beginpunkchar("/",9,1,1);
+z1=pp(1.5u,-.05h); z2=pp(w-1.5u,1.05h); pd z1; pd z2; draw z1--z2; % diagonal
+endchar;
+
+beginpunkchar(oct"013",12,.5,.5); % {\tt\char'13}
+z1=pp(u,.7h); z2=pp(.5w,h); z3=pp(w-u,.7h); z4=pp(.5w,0);
+pd z1; pd z3; pd z4; draw z1--z2--z4; draw z3--z2; % stem and diagonals
+endchar;
+
+beginpunkchar(oct"014",12,.5,.5); % {\tt\char'14}
+z1=pp(u,.3h); z2=pp(.5w,0); z3=pp(w-u,.3h); z4=pp(.5w,h);
+pd z1; pd z3; pd z4; draw z1--z2--z4; draw z3--z2; % stem and diagonals
+endchar;
diff --git a/fonts/punk/source/punksl.mf b/fonts/punk/source/punksl.mf
new file mode 100644
index 0000000000..ab1ec92df6
--- /dev/null
+++ b/fonts/punk/source/punksl.mf
@@ -0,0 +1,20 @@
+% punk special lowercase
+
+beginpunkchar(oct"020",5,1,2); % dotless I
+z1=pp(.5w,0); z2=(.5w,1/3h); z3=(.5w,2/3h); z4=(.5w,h);
+pd z1; pd z4; draw flex(z1,z2,z3,z4); % stem
+endchar;
+
+beginpunkchar(oct"021",9,1,2); % dotless J
+z1=pp(w-2u,h); z2=pp(w-2u,-.1h); z3=pp(u,0);
+pd z1; pd z3; draw z1--z2--z3; % arc
+endchar;
+
+beginpunkchar(oct"031",18,.3,1); % German SS
+z1=pp(.5w-u,.9h); z2=pp(1/3w,h); z3=pp(u,.7h); z4=.6[z6,z2];
+z5=pp(.5w,.35h); z6=pp(1/3w,u); z7=pp(u,.2h);
+pd z1; pd z7; draw z1--z2...z3..z4..z5...z6--z7; % left stroke
+for i=1 upto 7: z[i+10]=pp(z[i] shifted (.5w-u,0)); endfor
+pd z11; pd z17; draw z11--z12...z13..z14..z15...z16--z17; % right stroke
+endchar;
+
diff --git a/fonts/punk/source/punksl20.mf b/fonts/punk/source/punksl20.mf
new file mode 100644
index 0000000000..a8071c5fc0
--- /dev/null
+++ b/fonts/punk/source/punksl20.mf
@@ -0,0 +1,13 @@
+% 20-point slanted PUNK font
+designsize:=20pt#; font_identifier:="PUNKSL";
+ht#:=14pt#; % height of characters
+u#:=4/9pt#; % unit width
+s#:=2pt#; % extra sidebar
+px#:=.8pt#; % horizontal thickness of pen
+py#:=.6pt#; % vertical thickness of pen
+dot#:=2.7pt#; % diameter of dots
+dev#:=.5pt#; % standard deviation of punk points
+slant:=1/3; % obliqueness
+seed:=3.14159; % seed for random number generator
+input punk
+bye