diff --git a/pitfall/pitfall/sample-unicode-text.rkt b/pitfall/pitfall/sample-unicode-text.rkt new file mode 100644 index 00000000..90692998 --- /dev/null +++ b/pitfall/pitfall/sample-unicode-text.rkt @@ -0,0 +1,148 @@ +#lang at-exp br +(require pitfall/render) + +(define cosh (make-co-hash)) + +;; catalog object +(+co-hash cosh 1 (co-catalog #:pages (make-co-io-ref 2))) + +;; pages +(+co-hash cosh 2 (co-pages #:kids (list (make-co-io-ref 3)) + #:count 1)) +;; page +(+co-hash cosh 3 (co-page #:parent (make-co-io-ref 2) + #:mediabox '(0 0 400 400) + #:resources (make-co-io-ref 4) + #:contents (make-co-io-ref 5) + + ; the value of annots must be an array + #:annots (co-array (list (make-co-io-ref 7))) + )) +#;#:annots #;(make-co-io-ref 7) + +;; resources +(+co-hash cosh 4 + (make-co-dict + 'ProcSet (co-array '(PDF Text)) + 'Font (make-co-dict 'F1 (make-co-io-ref 6) + 'F2 (make-co-io-ref 9) + 'F3 (make-co-io-ref 12)))) + + + +(define (pdf-char-encode c) + (format "<~a>" (string-join (for/list ([b (in-bytes (string->bytes/utf-8 (string c)))]) + (number->string b 16)) " "))) +(pdf-char-encode #\’) + +(define (typeset-text str size font-path) + (string->bytes/latin-1 + (string-append* + (for/list ([c (in-string str)]) + (format "~a Tj ~a 0 Td" + (pdf-char-encode c) + (/ (* size (measure-char font-path c)) 1000.0)))))) + + + +;; Charter font +(define charter-font-path "charter.otf") +(+co-hash cosh 6 + (make-co-dict + 'Type 'Font + 'Subtype 'Type1 + 'Name 'F1 + 'FontDescriptor (make-co-dict + 'Type 'FontDescriptor + 'FontFile3 (make-co-io-ref 8) + 'Flags 4 + 'FontBBox (co-array '(-177 -269 1123 866)) + 'MissingWidth 255 + 'StemV 105 + 'StemH 45 + 'CapHeight 660 + 'XHeight 394 + 'Ascent 720 + 'Descent -270 + 'Leading 83 + 'MaxWidth 1212 + 'AvgWidth 478 + 'ItalicAngle 0) + 'Encoding (make-co-io-ref 25))) + +(require "glyph-list.rkt") +(+co-hash cosh 25 + (make-co-dict + 'Type 'Encoding + 'Differences (co-array (flatten glyph-list)))) + +(+co-hash cosh 8 (make-font-co-stream charter-font-path)) + +;; Miso font +(define miso-font-path "miso.otf") +(+co-hash cosh 9 + (make-co-dict + 'Type 'Font + 'Subtype 'Type1 + 'Name 'F2 + 'FontDescriptor (make-co-dict + 'Type 'FontDescriptor + 'FontFile3 (make-co-io-ref 10) + 'Flags 4 + 'FontBBox (co-array '(-177 -269 1123 866)) + 'MissingWidth 255 + 'StemV 105 + 'StemH 45 + 'CapHeight 660 + 'XHeight 394 + 'Ascent 720 + 'Descent -270 + 'Leading 83 + 'MaxWidth 1212 + 'AvgWidth 478 + 'ItalicAngle 0) + 'Encoding (make-co-io-ref 25))) + +(+co-hash cosh 10 (make-font-co-stream miso-font-path)) + +;; fira font +(define fira-font-path "fira.otf") +(+co-hash cosh 12 + (make-co-dict + 'Type 'Font + 'Subtype 'Type1 + 'Name 'F3 + 'FontDescriptor (make-co-dict + 'Type 'FontDescriptor + 'FontFile3 (make-co-io-ref 13) + 'Flags 4 + 'FontBBox (co-array '(-177 -269 1123 866)) + 'MissingWidth 255 + 'StemV 105 + 'StemH 45 + 'CapHeight 660 + 'XHeight 394 + 'Ascent 720 + 'Descent -270 + 'Leading 83 + 'MaxWidth 1212 + 'AvgWidth 478 + 'ItalicAngle 0) + 'Encoding (make-co-io-ref 25))) + +(+co-hash cosh 13 (make-font-co-stream fira-font-path)) + + +;; contents +(+co-hash cosh 5 + (make-co-stream + (bytes-append + #"BT /F1 36 Tf 50 50 Td" + (typeset-text "Hel’o Wørld 4-1" 36 charter-font-path) + #"/F2 36 Tf -250 50 Td" + (typeset-text "Ençhîládà 10" 36 miso-font-path) + #"/F3 36 Tf -150 50 Td" + (typeset-text "Bõîng Mé 5" 36 fira-font-path) + #"ET"))) + +(render cosh)