You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/fontland/fontland/table/cff/cff-pointer.rkt

59 lines
1.8 KiB
Racket

5 years ago
#lang debug racket/base
5 years ago
(require racket/class racket/list xenomorph "cff-struct.rkt")
5 years ago
(provide CFFPointer)
5 years ago
#|
approximates
https://github.com/mbutterick/fontkit/blob/master/src/cff/CFFPointer.js
|#
5 years ago
(define (CFFPointer type
5 years ago
#:relative-to [relative-to 'global]
5 years ago
#:lazy [lazy #false])
5 years ago
(x:pointer #:type type
#:base-class CFFPointer%
#:relative-to relative-to
5 years ago
#:lazy lazy))
(define CFFPointer%
5 years ago
(class x:pointer%
(super-new)
5 years ago
(inherit-field type offset-type)
5 years ago
5 years ago
(define/override (decode stream parent operands)
5 years ago
(set! offset-type (make-object
(class x:base%
(super-new)
(define/augment (decode . args) (first operands)))))
(super decode stream parent))
5 years ago
5 years ago
(override [@encode encode])
(define (@encode value stream ctx)
5 years ago
#RRR 'entering-cff-pointer-encode
#RR (get-field offset-type this)
#RR (get-field type this)
#RR stream
5 years ago
(cond
5 years ago
[#RR (not stream)
5 years ago
;; compute the size (so ctx.pointerSize is correct)
5 years ago
(set! offset-type (make-object
(class x:base%
(super-new)
(define/augment (size . args) 0))))
5 years ago
(send this size value ctx)
5 years ago
#RR (list (Ptr 0))]
5 years ago
[else
5 years ago
#RRR value
#RRR stream
5 years ago
(define ptr #false)
5 years ago
(set! offset-type (make-object
(class x:base%
(super-new)
5 years ago
(define/augment (encode val stream) (set! ptr val)))))
5 years ago
(error 'branch-not-impl)
#;(super encode value stream ctx)
5 years ago
(list (Ptr ptr))]))))
5 years ago