;; ;; utilities for extracting interesting font information from Adobe Font Metrics files ;; (module pdf-font ( add-font-info-from-file get-char-width get-string-width) (import scheme chicken srfi-13) (define-record font-info name first-char width-vector) ; is this actually used? (define font-info-table (make-hash-table equal?)) ; transform each line in file to a list of strings (define (parenthesize file out-port) (with-input-from-file file (lambda () (let loop ((line (read-line))) (if (not (eof-object? line)) (begin ;(fprintf out-port "~v~n" (pregexp-split " +" line)) (fprintf out-port "~v~n" (string-tokenize " +" line)) (loop (read-line)))))))) ; transform parenthesized lists into an s-expr (define (listify file) (let ((output-port (open-output-string))) (fprintf output-port "(~n") (parenthesize file output-port) (fprintf output-port ")") (let ((str (get-output-string output-port))) (read (open-input-string str))))) ; look for interesting information in .afm file (define (extract-font-info name file) (let ((l (listify file)) (first-char #f) (width-vect #f)) (for-each (let ((i 0)) (lambda (x) (if (pair? x) (cond ((string-ci=? (car x) "StartCharMetrics") (set! width-vect (make-vector (string->number (cadr x))))) ((string-ci=? (car x) "C") (if (zero? i) (set! first-char (string->number (cadr x)))) (vector-set! width-vect i (string->number (cadr (cdddr x)))) (set! i (+ 1 i))))))) l) (list name first-char width-vect))) ; stuff name, width info into font-info-table table from file (define (add-font-info-from-file name file) (let ((lst (extract-font-info name file))) (add-font-info (make-font-info (car lst) (cadr lst) (caddr lst))))) ;; ;; utilities to access font information ;; (define (add-font-info font-info) ;(hash-table-put! font-info-table (font-info-name font-info) font-info)) (hash-table-set! font-info-table (font-info-name font-info) font-info)) (define (get-font-info font-name) ;(hash-table-get font-info-table font-name)) (hash-table-ref font-info-table font-name)) ;; get character width in user-space (point) units (define (get-char-width font-name point-size ch) (let* ((font-info (get-font-info font-name)) (width-vector (font-info-width-vector font-info)) (index (- (char->integer ch) (font-info-first-char font-info)))) (if (and (>= index 0) (< index (vector-length width-vector))) (* (/ point-size 1000) (vector-ref width-vector index)) 0))) ;; get string width in user-space (point) units (define (get-string-width font-name point-size str) (let* ((font-info (get-font-info font-name)) (first-char (font-info-first-char font-info)) (width-vector (font-info-width-vector font-info))) (do ((i 0 (+ i 1)) (max (string-length str)) (width 0)) ((= i max) (* (/ point-size 1000) width)) (set! width (+ width (vector-ref width-vector (- (char->integer (string-ref str i)) first-char))))))) ;; some handy predefined font info (define courier-info ;'("Courier" 32 #260(600))) '("Courier" 32 (make-vector 260 600))) (define courier-bold-info ;'("Courier-Bold" 32 #260(600))) '("Courier-Bold" 32 (make-vector 260 600))) (define courier-boldoblique-info ;'("Courier-BoldOblique" 32 #260(600))) '("Courier-BoldOblique" 32 (make-vector 260 600))) (define courier-oblique-info ;'("Courier-Oblique" 32 #260(600))) '("Courier-Oblique" 32 (make-vector 260 600))) (define helvetica-info ;'("Helvetica" 32 #228(278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 333 556 556 167 556 556 556 556 191 333 556 333 333 500 500 556 556 556 278 537 350 222 333 333 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 556 778 1000 365 889 278 222 611 944 611 667 667 667 667 667 667 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 260 500 737 400 584 556 556 556 556 556 278 278 278 278 584 584 556 584 556 556 556 556 556 834 834 333 556 584 737 500 556 834 333 1000 333 556 556 556 556 500))) '("Helvetica" 32 '#(278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 333 556 556 167 556 556 556 556 191 333 556 333 333 500 500 556 556 556 278 537 350 222 333 333 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 556 778 1000 365 889 278 222 611 944 611 667 667 667 667 667 667 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 260 500 737 400 584 556 556 556 556 556 278 278 278 278 584 584 556 584 556 556 556 556 556 834 834 333 556 584 737 500 556 834 333 1000 333 556 556 556 556 500))) (define helvetica-bold-info ;'("Helvetica-Bold" 32 #228(278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 333 556 556 167 556 556 556 556 238 500 556 333 333 611 611 556 556 556 278 556 350 278 500 500 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 611 778 1000 365 889 278 278 611 944 611 722 722 722 722 722 722 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 280 556 737 400 584 556 556 556 556 611 278 278 278 278 584 584 611 584 611 611 611 611 611 834 834 333 611 584 737 556 611 834 333 1000 333 611 611 611 611 556 556 500))) '("Helvetica-Bold" 32 '#(278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 333 556 556 167 556 556 556 556 238 500 556 333 333 611 611 556 556 556 278 556 350 278 500 500 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 611 778 1000 365 889 278 278 611 944 611 722 722 722 722 722 722 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 280 556 737 400 584 556 556 556 556 611 278 278 278 278 584 584 611 584 611 611 611 611 611 834 834 333 611 584 737 556 611 834 333 1000 333 611 611 611 611 556 556 500))) (define helvetica-boldoblique-info ;'("Helvetica-BoldOblique" 32 #228(278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 333 556 556 167 556 556 556 556 238 500 556 333 333 611 611 556 556 556 278 556 350 278 500 500 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 611 778 1000 365 889 278 278 611 944 611 722 722 722 722 722 722 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 280 556 737 400 584 556 556 556 556 611 278 278 278 278 584 584 611 584 611 611 611 611 611 834 834 333 611 584 737 556 611 834 333 1000 333 611 611 611 611 556 556 500))) '("Helvetica-BoldOblique" 32 '#(278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 333 556 556 167 556 556 556 556 238 500 556 333 333 611 611 556 556 556 278 556 350 278 500 500 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 611 778 1000 365 889 278 278 611 944 611 722 722 722 722 722 722 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 280 556 737 400 584 556 556 556 556 611 278 278 278 278 584 584 611 584 611 611 611 611 611 834 834 333 611 584 737 556 611 834 333 1000 333 611 611 611 611 556 556 500))) (define helvetica-oblique-info ;'("Helvetica-Oblique" 32 #228(278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 333 556 556 167 556 556 556 556 191 333 556 333 333 500 500 556 556 556 278 537 350 222 333 333 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 556 778 1000 365 889 278 222 611 944 611 667 667 667 667 667 667 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 260 500 737 400 584 556 556 556 556 556 278 278 278 278 584 584 556 584 556 556 556 556 556 834 834 333 556 584 737 500 556 834 333 1000 333 556 556 556 556 500))) '("Helvetica-Oblique" 32 '#(278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 333 556 556 167 556 556 556 556 191 333 556 333 333 500 500 556 556 556 278 537 350 222 333 333 556 1000 1000 611 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 370 556 778 1000 365 889 278 222 611 944 611 667 667 667 667 667 667 722 667 667 667 667 722 278 278 278 278 722 778 778 778 778 778 667 667 722 722 722 722 667 667 611 556 556 556 556 556 556 260 500 737 400 584 556 556 556 556 556 278 278 278 278 584 584 556 584 556 556 556 556 556 834 834 333 556 584 737 500 556 834 333 1000 333 556 556 556 556 500))) (define times-info ;'("Times-Roman" 32 #228(250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 500 500 500 250 453 350 333 444 444 500 1000 1000 444 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 889 276 611 722 889 310 667 278 278 500 722 500 722 722 722 722 722 722 667 611 611 611 611 722 333 333 333 333 722 722 722 722 722 722 556 556 722 722 722 722 722 722 611 444 444 444 444 444 444 200 444 760 400 564 444 444 444 444 500 278 278 278 278 564 564 500 564 500 500 500 500 500 750 750 300 500 564 760 389 500 750 300 980 300 500 500 500 500 500 500 444))) '("Times-Roman" 32 '#(250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 500 500 500 250 453 350 333 444 444 500 1000 1000 444 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 889 276 611 722 889 310 667 278 278 500 722 500 722 722 722 722 722 722 667 611 611 611 611 722 333 333 333 333 722 722 722 722 722 722 556 556 722 722 722 722 722 722 611 444 444 444 444 444 444 200 444 760 400 564 444 444 444 444 500 278 278 278 278 564 564 500 564 500 500 500 500 500 750 750 300 500 564 760 389 500 750 300 980 300 500 500 500 500 500 500 444))) (define times-bold-info ;'("Times-Bold" 32 #228(250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 333 500 500 167 500 500 500 500 278 500 500 333 333 556 556 500 500 500 250 540 350 333 500 500 500 1000 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 300 667 778 1000 330 722 278 278 500 722 556 722 722 722 722 722 722 722 667 667 667 667 722 389 389 389 389 722 778 778 778 778 778 556 611 722 722 722 722 722 722 667 500 500 500 500 500 500 220 444 747 400 570 444 444 444 444 500 278 278 278 278 570 570 556 570 556 500 500 500 500 750 750 300 500 570 747 389 556 750 300 1000 300 556 556 556 556 500 500 444))) '("Times-Bold" 32 '#(250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 333 500 500 167 500 500 500 500 278 500 500 333 333 556 556 500 500 500 250 540 350 333 500 500 500 1000 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 1000 300 667 778 1000 330 722 278 278 500 722 556 722 722 722 722 722 722 722 667 667 667 667 722 389 389 389 389 722 778 778 778 778 778 556 611 722 722 722 722 722 722 667 500 500 500 500 500 500 220 444 747 400 570 444 444 444 444 500 278 278 278 278 570 570 556 570 556 500 500 500 500 750 750 300 500 570 747 389 556 750 300 1000 300 556 556 556 556 500 500 444))) (define times-bolditalic-info ;'("Times-BoldItalic" 32 #228(250 389 555 500 500 833 778 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 389 500 500 167 500 500 500 500 278 500 500 333 333 556 556 500 500 500 250 500 350 333 500 500 500 1000 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 944 266 611 722 944 300 722 278 278 500 722 500 667 667 667 667 667 667 667 667 667 667 667 722 389 389 389 389 722 722 722 722 722 722 556 611 722 722 722 722 611 611 611 500 500 500 500 500 500 220 444 747 400 570 444 444 444 444 500 278 278 278 278 606 606 576 570 556 500 500 500 500 750 750 300 500 570 747 389 500 750 300 1000 300 556 556 556 556 444 444 389))) '("Times-BoldItalic" 32 '#(250 389 555 500 500 833 778 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 389 500 500 167 500 500 500 500 278 500 500 333 333 556 556 500 500 500 250 500 350 333 500 500 500 1000 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 1000 944 266 611 722 944 300 722 278 278 500 722 500 667 667 667 667 667 667 667 667 667 667 667 722 389 389 389 389 722 722 722 722 722 722 556 611 722 722 722 722 611 611 611 500 500 500 500 500 500 220 444 747 400 570 444 444 444 444 500 278 278 278 278 606 606 576 570 556 500 500 500 500 750 750 300 500 570 747 389 500 750 300 1000 300 556 556 556 556 444 444 389))) (define times-italic-info ;'("Times-Italic" 32 #228(250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 389 500 500 167 500 500 500 500 214 556 500 333 333 500 500 500 500 500 250 523 350 333 556 556 500 889 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 889 889 276 556 722 944 310 667 278 278 500 667 500 611 611 611 611 611 611 667 611 611 611 611 722 333 333 333 333 667 722 722 722 722 722 500 611 722 722 722 722 556 556 556 500 500 500 500 500 500 275 444 760 400 675 444 444 444 444 500 278 278 278 278 675 675 500 675 500 500 500 500 500 750 750 300 500 675 760 389 500 750 300 980 300 500 500 500 500 444 444 389))) '("Times-Italic" 32 '#(250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 389 500 500 167 500 500 500 500 214 556 500 333 333 500 500 500 500 500 250 523 350 333 556 556 500 889 1000 500 333 333 333 333 333 333 333 333 333 333 333 333 333 889 889 276 556 722 944 310 667 278 278 500 667 500 611 611 611 611 611 611 667 611 611 611 611 722 333 333 333 333 667 722 722 722 722 722 500 611 722 722 722 722 556 556 556 500 500 500 500 500 500 275 444 760 400 675 444 444 444 444 500 278 278 278 278 675 675 500 675 500 500 500 500 500 750 750 300 500 675 760 389 500 750 300 980 300 500 500 500 500 444 444 389))) (define symbol-info ;'("Symbol" 32 #189(250 333 713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713 384 384 384 384 384 384 494 494 494 494 329 274 686 686 686 384 384 384 384 384 384 494 494 494 790))) '("Symbol" 32 '#(250 333 713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713 384 384 384 384 384 384 494 494 494 494 329 274 686 686 686 384 384 384 384 384 384 494 494 494 790))) (define zapfdingbats-info ;'("ZapfDingbats" 32 #202(278 974 961 974 980 719 789 790 791 690 960 939 549 855 911 933 911 945 974 755 846 762 761 571 677 763 760 759 754 494 552 537 577 692 786 788 788 790 793 794 816 823 789 841 823 833 816 831 923 744 723 749 790 792 695 776 768 792 759 707 708 682 701 826 815 789 789 707 687 696 689 786 787 713 791 785 791 873 761 762 762 759 759 892 892 788 784 438 138 277 415 392 392 668 668 732 544 544 910 667 760 760 776 595 694 626 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 894 838 1016 458 748 924 748 918 927 928 928 834 873 828 924 924 917 930 931 463 883 836 836 867 867 696 696 874 874 760 946 771 865 771 888 967 888 831 873 927 970 918 410 509 334 509 390 234 276 390 410 317 317 276 334 234))) '("ZapfDingbats" 32 '#(278 974 961 974 980 719 789 790 791 690 960 939 549 855 911 933 911 945 974 755 846 762 761 571 677 763 760 759 754 494 552 537 577 692 786 788 788 790 793 794 816 823 789 841 823 833 816 831 923 744 723 749 790 792 695 776 768 792 759 707 708 682 701 826 815 789 789 707 687 696 689 786 787 713 791 785 791 873 761 762 762 759 759 892 892 788 784 438 138 277 415 392 392 668 668 732 544 544 910 667 760 760 776 595 694 626 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 788 894 838 1016 458 748 924 748 918 927 928 928 834 873 828 924 924 917 930 931 463 883 836 836 867 867 696 696 874 874 760 946 771 865 771 888 967 888 831 873 927 970 918 410 509 334 509 390 234 276 390 410 317 317 276 334 234))) (define (add-predefined-font-info lst) (let ((font-info (make-font-info (car lst) (cadr lst) (caddr lst)))) (add-font-info font-info))) (define (init-predefined-fonts) (add-predefined-font-info courier-info) (add-predefined-font-info courier-bold-info) (add-predefined-font-info courier-boldoblique-info) (add-predefined-font-info courier-oblique-info) (add-predefined-font-info helvetica-info) (add-predefined-font-info helvetica-bold-info) (add-predefined-font-info helvetica-boldoblique-info) (add-predefined-font-info helvetica-oblique-info) (add-predefined-font-info times-info) (add-predefined-font-info times-bold-info) (add-predefined-font-info times-bolditalic-info) (add-predefined-font-info times-italic-info) (add-predefined-font-info symbol-info) (add-predefined-font-info zapfdingbats-info)) (init-predefined-fonts)) )