home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 1 / GoldFishApril1994_CD2.img / d4xx / d487 / mfsrc / mfsrc.lzh / circle.mf < prev    next >
Text File  |  1990-02-14  |  10KB  |  550 lines

  1. fontdimen 1: 0,0,0,0,0,0,0,thickness#;
  2. font_coding_scheme:="LaTeX circle";
  3.  
  4. let cmchar=\; % cmchar should precede each character, for testing purposes
  5.  
  6. thickness:=ceiling(thickness#*hppp); % the way rules thicknesses are done
  7. thickness#:=thickness/hppp; % and let thickness# round to right value
  8. pickup pencircle scaled thickness; nib:=savepen;
  9.  
  10. % arcs sets up the points 1, 2, ..., 8 as follows:
  11. %
  12. %            |1
  13. %            |*
  14. %            * *
  15. %           8|  2
  16. %          * |   *
  17. %        7*  |    *3
  18. %        --*-----*--
  19. %           6|  4
  20. %            * *
  21. %            |5
  22. %
  23. %        <----w---->
  24.  
  25. pair upleft,upright,downleft,downright;
  26. upright=-downleft=(1,1); downright=-upleft=(1,-1);
  27.  
  28. % a quarter-circle has width, height and depth set as explained on
  29. % page 389 of the TeXbook, not the real width, height, and depth
  30.  
  31. def qbeginchar (expr c, diam_sharp) =
  32. numeric hh, dd; hh:=.5*(diam_sharp+thickness#);
  33. dd:=.5*(diam_sharp-thickness#);
  34. beginchar(c,diam_sharp,hh,dd);
  35. enddef;
  36.  
  37. def arcs =
  38. numeric delta;
  39. delta:=.5 round((1-sqrt.5)*w); % distance from axis to arc's 45 degree points
  40. bot y3=0; y7=y3=.5[y5,y1]; y1-y5=w;
  41. lft x1=0; x5=x1=.5[x7,x3]; x3-x7=w;
  42. x2-x1=delta; x1-x8=delta; x8=x6; x2=x4;
  43. y8-y7=delta; y7-y6=delta; y8=y2; y6=y4;
  44. enddef;
  45.  
  46. cmchar "2pt, top right";
  47. qbeginchar(0,4pt#);
  48. numeric delta;
  49. pickup nib;
  50. arcs;
  51. draw z7{right}..z6{downright}..z5{down};
  52. endchar;
  53.  
  54. cmchar "2pt, bottom right";
  55. qbeginchar(1,4pt#);
  56. numeric delta;
  57. pickup nib;
  58. arcs;
  59. draw z1{down}..z8{downleft}..z7{left};
  60. endchar;
  61.  
  62. cmchar "2pt, bottom left";
  63. qbeginchar(2,4pt#);
  64. numeric delta;
  65. pickup nib;
  66. arcs;
  67. draw z3{left}..z2{upleft}..z1{up};
  68. endchar;
  69.  
  70. cmchar "2pt, top left";
  71. qbeginchar(3,4pt#);
  72. numeric delta;
  73. pickup nib;
  74. arcs;
  75. draw z5{up}..z4{upright}..z3{right};
  76. endchar;
  77.  
  78. cmchar "4pt, top right";
  79. qbeginchar(4,8pt#);
  80. numeric delta;
  81. pickup nib;
  82. arcs;
  83. draw z7{right}..z6{downright}..z5{down};
  84. endchar;
  85.  
  86. cmchar "4pt, bottom right";
  87. qbeginchar(5,8pt#);
  88. numeric delta;
  89. pickup nib;
  90. arcs;
  91. draw z1{down}..z8{downleft}..z7{left};
  92. endchar;
  93.  
  94. cmchar "4pt, bottom left";
  95. qbeginchar(6,8pt#);
  96. numeric delta;
  97. pickup nib;
  98. arcs;
  99. draw z3{left}..z2{upleft}..z1{up};
  100. endchar;
  101.  
  102. cmchar "4pt, top left";
  103. qbeginchar(7,8pt#);
  104. numeric delta;
  105. pickup nib;
  106. arcs;
  107. draw z5{up}..z4{upright}..z3{right};
  108. endchar;
  109.  
  110. cmchar "6pt, top right";
  111. qbeginchar(8,12pt#);
  112. numeric delta;
  113. pickup nib;
  114. arcs;
  115. draw z7{right}..z6{downright}..z5{down};
  116. endchar;
  117.  
  118. cmchar "6pt, bottom right";
  119. qbeginchar(9,12pt#);
  120. numeric delta;
  121. pickup nib;
  122. arcs;
  123. draw z1{down}..z8{downleft}..z7{left};
  124. endchar;
  125.  
  126. cmchar "6pt, bottom left";
  127. qbeginchar(10,12pt#);
  128. numeric delta;
  129. pickup nib;
  130. arcs;
  131. draw z3{left}..z2{upleft}..z1{up};
  132. endchar;
  133.  
  134. cmchar "6pt, top left";
  135. qbeginchar(11,12pt#);
  136. numeric delta;
  137. pickup nib;
  138. arcs;
  139. draw z5{up}..z4{upright}..z3{right};
  140. endchar;
  141.  
  142. cmchar "8pt, top right";
  143. qbeginchar(12,16pt#);
  144. numeric delta;
  145. pickup nib;
  146. arcs;
  147. draw z7{right}..z6{downright}..z5{down};
  148. endchar;
  149.  
  150. cmchar "8pt, bottom right";
  151. qbeginchar(13,16pt#);
  152. numeric delta;
  153. pickup nib;
  154. arcs;
  155. draw z1{down}..z8{downleft}..z7{left};
  156. endchar;
  157.  
  158. cmchar "8pt, bottom left";
  159. qbeginchar(14,16pt#);
  160. numeric delta;
  161. pickup nib;
  162. arcs;
  163. draw z3{left}..z2{upleft}..z1{up};
  164. endchar;
  165.  
  166. cmchar "8pt, top left";
  167. qbeginchar(15,16pt#);
  168. numeric delta;
  169. pickup nib;
  170. arcs;
  171. draw z5{up}..z4{upright}..z3{right};
  172. endchar;
  173.  
  174. cmchar "10pt, top right";
  175. qbeginchar(16,20pt#);
  176. numeric delta;
  177. pickup nib;
  178. arcs;
  179. draw z7{right}..z6{downright}..z5{down};
  180. endchar;
  181.  
  182. cmchar "10pt, bottom right";
  183. qbeginchar(17,20pt#);
  184. numeric delta;
  185. pickup nib;
  186. arcs;
  187. draw z1{down}..z8{downleft}..z7{left};
  188. endchar;
  189.  
  190. cmchar "10pt, bottom left";
  191. qbeginchar(18,20pt#);
  192. numeric delta;
  193. pickup nib;
  194. arcs;
  195. draw z3{left}..z2{upleft}..z1{up};
  196. endchar;
  197.  
  198. cmchar "10pt, top left";
  199. qbeginchar(19,20pt#);
  200. numeric delta;
  201. pickup nib;
  202. arcs;
  203. draw z5{up}..z4{upright}..z3{right};
  204. endchar;
  205.  
  206. cmchar "12pt, top right";
  207. qbeginchar(20,24pt#);
  208. numeric delta;
  209. pickup nib;
  210. arcs;
  211. draw z7{right}..z6{downright}..z5{down};
  212. endchar;
  213.  
  214. cmchar "12pt, bottom right";
  215. qbeginchar(21,24pt#);
  216. numeric delta;
  217. pickup nib;
  218. arcs;
  219. draw z1{down}..z8{downleft}..z7{left};
  220. endchar;
  221.  
  222. cmchar "12pt, bottom left";
  223. qbeginchar(22,24pt#);
  224. numeric delta;
  225. pickup nib;
  226. arcs;
  227. draw z3{left}..z2{upleft}..z1{up};
  228. endchar;
  229.  
  230. cmchar "12pt, top left";
  231. qbeginchar(23,24pt#);
  232. numeric delta;
  233. pickup nib;
  234. arcs;
  235. draw z5{up}..z4{upright}..z3{right};
  236. endchar;
  237.  
  238. cmchar "14pt, top right";
  239. qbeginchar(24,28pt#);
  240. numeric delta;
  241. pickup nib;
  242. arcs;
  243. draw z7{right}..z6{downright}..z5{down};
  244. endchar;
  245.  
  246. cmchar "14pt, bottom right";
  247. qbeginchar(25,28pt#);
  248. numeric delta;
  249. pickup nib;
  250. arcs;
  251. draw z1{down}..z8{downleft}..z7{left};
  252. endchar;
  253.  
  254. cmchar "14pt, bottom left";
  255. qbeginchar(26,28pt#);
  256. numeric delta;
  257. pickup nib;
  258. arcs;
  259. draw z3{left}..z2{upleft}..z1{up};
  260. endchar;
  261.  
  262. cmchar "14pt, top left";
  263. qbeginchar(27,28pt#);
  264. numeric delta;
  265. pickup nib;
  266. arcs;
  267. draw z5{up}..z4{upright}..z3{right};
  268. endchar;
  269.  
  270. cmchar "16pt, top right";
  271. qbeginchar(28,32pt#);
  272. numeric delta;
  273. pickup nib;
  274. arcs;
  275. draw z7{right}..z6{downright}..z5{down};
  276. endchar;
  277.  
  278. cmchar "16pt, bottom right";
  279. qbeginchar(29,32pt#);
  280. numeric delta;
  281. pickup nib;
  282. arcs;
  283. draw z1{down}..z8{downleft}..z7{left};
  284. endchar;
  285.  
  286. cmchar "16pt, bottom left";
  287. qbeginchar(30,32pt#);
  288. numeric delta;
  289. pickup nib;
  290. arcs;
  291. draw z3{left}..z2{upleft}..z1{up};
  292. endchar;
  293.  
  294. cmchar "16pt, top left";
  295. qbeginchar(31,32pt#);
  296. numeric delta;
  297. pickup nib;
  298. arcs;
  299. draw z5{up}..z4{upright}..z3{right};
  300. endchar;
  301.  
  302. cmchar "18pt, top right";
  303. qbeginchar(32,36pt#);
  304. numeric delta;
  305. pickup nib;
  306. arcs;
  307. draw z7{right}..z6{downright}..z5{down};
  308. endchar;
  309.  
  310. cmchar "18pt, bottom right";
  311. qbeginchar(33,36pt#);
  312. numeric delta;
  313. pickup nib;
  314. arcs;
  315. draw z1{down}..z8{downleft}..z7{left};
  316. endchar;
  317.  
  318. cmchar "18pt, bottom left";
  319. qbeginchar(34,36pt#);
  320. numeric delta;
  321. pickup nib;
  322. arcs;
  323. draw z3{left}..z2{upleft}..z1{up};
  324. endchar;
  325.  
  326. cmchar "18pt, top left";
  327. qbeginchar(35,36pt#);
  328. numeric delta;
  329. pickup nib;
  330. arcs;
  331. draw z5{up}..z4{upright}..z3{right};
  332. endchar;
  333.  
  334. cmchar "20pt, top right";
  335. qbeginchar(36,40pt#);
  336. numeric delta;
  337. pickup nib;
  338. arcs;
  339. draw z7{right}..z6{downright}..z5{down};
  340. endchar;
  341.  
  342. cmchar "20pt, bottom right";
  343. qbeginchar(37,40pt#);
  344. numeric delta;
  345. pickup nib;
  346. arcs;
  347. draw z1{down}..z8{downleft}..z7{left};
  348. endchar;
  349.  
  350. cmchar "20pt, bottom left";
  351. qbeginchar(38,40pt#);
  352. numeric delta;
  353. pickup nib;
  354. arcs;
  355. draw z3{left}..z2{upleft}..z1{up};
  356. endchar;
  357.  
  358. cmchar "20pt, top left";
  359. qbeginchar(39,40pt#);
  360. numeric delta;
  361. pickup nib;
  362. arcs;
  363. draw z5{up}..z4{upright}..z3{right};
  364. endchar;
  365.  
  366. % The full circles have height and depth 0pt because otherwise there
  367. % are too many heights and depths for the TFM files
  368.  
  369. cmchar "1pt, circle";
  370. beginchar(96,1pt#,0pt#,0pt#);
  371. pickup nib;
  372. draw fullcircle scaled w;
  373. endchar;
  374.  
  375. cmchar "2pt, circle";
  376. beginchar(97,2pt#,0pt#,0pt#);
  377. pickup nib;
  378. draw fullcircle scaled w;
  379. endchar;
  380.  
  381. cmchar "3pt, circle";
  382. beginchar(98,3pt#,0pt#,0pt#);
  383. pickup nib;
  384. draw fullcircle scaled w;
  385. endchar;
  386.  
  387. cmchar "4pt, circle";
  388. beginchar(99,4pt#,0pt#,0pt#);
  389. pickup nib;
  390. draw fullcircle scaled w;
  391. endchar;
  392.  
  393. cmchar "5pt, circle";
  394. beginchar(100,5pt#,0pt#,0pt#);
  395. pickup nib;
  396. draw fullcircle scaled w;
  397. endchar;
  398.  
  399. cmchar "6pt, circle";
  400. beginchar(101,6pt#,0pt#,0pt#);
  401. pickup nib;
  402. draw fullcircle scaled w;
  403. endchar;
  404.  
  405. cmchar "7pt, circle";
  406. beginchar(102,7pt#,0pt#,0pt#);
  407. pickup nib;
  408. draw fullcircle scaled w;
  409. endchar;
  410.  
  411. cmchar "8pt, circle";
  412. beginchar(103,8pt#,0pt#,0pt#);
  413. pickup nib;
  414. draw fullcircle scaled w;
  415. endchar;
  416.  
  417. cmchar "9pt, circle";
  418. beginchar(104,9pt#,0pt#,0pt#);
  419. pickup nib;
  420. draw fullcircle scaled w;
  421. endchar;
  422.  
  423. cmchar "10pt, circle";
  424. beginchar(105,10pt#,0pt#,0pt#);
  425. pickup nib;
  426. draw fullcircle scaled w;
  427. endchar;
  428.  
  429. cmchar "11pt, circle";
  430. beginchar(106,11pt#,0pt#,0pt#);
  431. pickup nib;
  432. draw fullcircle scaled w;
  433. endchar;
  434.  
  435. cmchar "12pt, circle";
  436. beginchar(107,12pt#,0pt#,0pt#);
  437. pickup nib;
  438. draw fullcircle scaled w;
  439. endchar;
  440.  
  441. cmchar "13pt, circle";
  442. beginchar(108,13pt#,0pt#,0pt#);
  443. pickup nib;
  444. draw fullcircle scaled w;
  445. endchar;
  446.  
  447. cmchar "14pt, circle";
  448. beginchar(109,14pt#,0pt#,0pt#);
  449. pickup nib;
  450. draw fullcircle scaled w;
  451. endchar;
  452.  
  453. cmchar "15pt, circle";
  454. beginchar(110,15pt#,0pt#,0pt#);
  455. pickup nib;
  456. draw fullcircle scaled w;
  457. endchar;
  458.  
  459. cmchar "1pt, blob";
  460. beginchar(112,1pt#,0pt#,0pt#);
  461. pickup pencircle scaled w;
  462. drawdot origin;
  463. endchar;
  464.  
  465. cmchar "2pt, blob";
  466. beginchar(113,2pt#,0pt#,0pt#);
  467. pickup pencircle scaled w;
  468. drawdot origin;
  469. endchar;
  470.  
  471. cmchar "3pt, blob";
  472. beginchar(114,3pt#,0pt#,0pt#);
  473. pickup pencircle scaled w;
  474. drawdot origin;
  475. endchar;
  476.  
  477. cmchar "4pt, blob";
  478. beginchar(115,4pt#,0pt#,0pt#);
  479. pickup pencircle scaled w;
  480. drawdot origin;
  481. endchar;
  482.  
  483. cmchar "5pt, blob";
  484. beginchar(116,5pt#,0pt#,0pt#);
  485. pickup pencircle scaled w;
  486. drawdot origin;
  487. endchar;
  488.  
  489. cmchar "6pt, blob";
  490. beginchar(117,6pt#,0pt#,0pt#);
  491. pickup pencircle scaled w;
  492. drawdot origin;
  493. endchar;
  494.  
  495. cmchar "7pt, blob";
  496. beginchar(118,7pt#,0pt#,0pt#);
  497. pickup pencircle scaled w;
  498. drawdot origin;
  499. endchar;
  500.  
  501. cmchar "8pt, blob";
  502. beginchar(119,8pt#,0pt#,0pt#);
  503. pickup pencircle scaled w;
  504. drawdot origin;
  505. endchar;
  506.  
  507. cmchar "9pt, blob";
  508. beginchar(120,9pt#,0pt#,0pt#);
  509. pickup pencircle scaled w;
  510. drawdot origin;
  511. endchar;
  512.  
  513. cmchar "10pt, blob";
  514. beginchar(121,10pt#,0pt#,0pt#);
  515. pickup pencircle scaled w;
  516. drawdot origin;
  517. endchar;
  518.  
  519. cmchar "11pt, blob";
  520. beginchar(122,11pt#,0pt#,0pt#);
  521. pickup pencircle scaled w;
  522. drawdot origin;
  523. endchar;
  524.  
  525. cmchar "12pt, blob";
  526. beginchar(123,12pt#,0pt#,0pt#);
  527. pickup pencircle scaled w;
  528. drawdot origin;
  529. endchar;
  530.  
  531. cmchar "13pt, blob";
  532. beginchar(124,13pt#,0pt#,0pt#);
  533. pickup pencircle scaled w;
  534. drawdot origin;
  535. endchar;
  536.  
  537. cmchar "14pt, blob";
  538. beginchar(125,14pt#,0pt#,0pt#);
  539. pickup pencircle scaled w;
  540. drawdot origin;
  541. endchar;
  542.  
  543. cmchar "15pt, blob";
  544. beginchar(126,15pt#,0pt#,0pt#);
  545. pickup pencircle scaled w;
  546. drawdot origin;
  547. endchar;
  548.  
  549. bye
  550.