% candy cane lettering, CandyCane.JaM
% Rick Beach, June 22, 1982 11:32 am
(candycane) {.pushdc 50 200 .translate .8 .8 .scale (borderpattern) (border2).cvx .def candy .popdc}.cvx .def
(candy) {candyC candyA candyN candyD candyY}.cvx .def
% the letter C
(candyC) {.newoutline
0 0 .omoveto 19.53651 0 31.8338 24.99396 31.47971 45.02295 .ocurveto
31.00426 80.1452 58.23015 116.6332 92.23893 90.13776 .ocurveto
105.7132 79.64014 63.64215 102.7454 55.85108 87.73694 .ocurveto
30.68143 64.64636 29.47169 0 101 0 .ocurveto
30 20 outlineborder 100 0 .translate}.cvx .def
% the letter A
(candyA) {.newoutline
-1 0 .omoveto 37.59671 0 61.04228 106.7766 102 98 .ocurveto
136.7254 90.55884 90.6846 -32.95081 99 26 .ocurveto
120.5983 85.29236 97.14027 116.1927 57.99998 51 .ocurveto
33.74081 -2.699402 79.85745 0 124 0 .ocurveto
30 20 outlineborder 124 0 .translate}.cvx .def
% the letter N
(candyN) {.newoutline
0 0 .omoveto 47.3667 0 51.39708 110.9868 79 87 .ocurveto
76.20679 76.61865 47.80486 -29.96118 67.00001 20 .ocurveto
79.45522 51.26538 71.13297 89.39398 109 96 .ocurveto
182.0348 101.9358 75.94755 0 158 0 .ocurveto
30 20 outlineborder 157 0 .translate}.cvx .def
% the letter D
(candyD) {.newoutline
0 0 .omoveto 43.55275 0 23.49652 87.71338 73.88702 99 .ocurveto
109.8771 106.9354 128.9642 68.28247 100.7595 89.08636 .ocurveto
65.45583 113.7225 33.37993 57.17767 45.78958 28 .ocurveto
92.94615 -82.87119 158.8459 135.5607 157.4715 162.6174 .ocurveto
152.9077 258.9257 77.61393 0 157 0 .ocurveto
30 20 outlineborder 156 0 .translate}.cvx .def
% the letter Y
(candyY) {.newoutline
-1 0 .omoveto 28.95868 0 29.32411 94.73407 37.99628 94.14777 .ocurveto
54.52634 93.03015 12.75839 1.530762e-1 43.12253 0.802063 .ocurveto
83.38051 1.662476 77.82333 53.49048 88.94458 89.2691 .ocurveto
103.4402 135.9034 92.34982 -74.18329 53.5445 -78.85016 .ocurveto
-39.22055 -90.00647 -27.31945 0 115 0 .ocurveto
30 20 outlineborder 115 0 .translate}.cvx .def
% draw a border given the Bezier control points
% <x0 y0 x1 y1 x2 y2 x3 y3> <border-width> <border-height> outlineborder
(outlineborder) {(!bh) .exch .def (!bw) .exch .def (bx) 0 .def conformal (!al) .olength .def
(!n) !al !bw .div .cvi .def
(!bw) !al !n .div .def !bw !bh .cubicscale
!n (borderpattern (bx) bx 1 .add .def).cvx .rept}.cvx .def
% draw a border given the Bezier control points
% <x0 y0 x1 y1 x2 y2 x3 y3> <border-width> <border-height> outlineborder
(eoutlineborder) {(!bh) .exch .def (!bw) .exch .def (bx) 0 .def conformal (!al) .olength .def
(!n) !al !bw .div .cvi .def
(!bw) !al !n .div .def !bw !bh .cubicscale
!n 1 .sub(borderpattern (bx) bx 1 .add .def).cvx .rept}.cvx .def