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/quad2/main.rkt

53 lines
1.8 KiB
Racket

#lang debug racket/base
(require "layout.rkt"
"render.rkt"
"quad.rkt"
"pipeline.rkt"
"linearize.rkt"
"layout.rkt"
"draw.rkt"
racket/string
racket/match)
(define-pass (bootstrap x)
#:pre values
#:post quad?
(match x
[(or (? quad? q) (list (? quad? q))) q]
[(and (list (? quad?) ...) qs) (make-quad #:elems qs)]
[other (make-quad #:elems (list other))]))
(define-pass (make-weirdo-char-quads qs)
#:pre (list-of simple-quad?)
#:post (list-of simple-quad?)
(apply append
(for/list ([q (in-list qs)])
(match q
[(quad _ _ (list (? string? str)))
(for/list ([c (in-string str)])
(define new-attrs (make-hasheq (cons (cons 'char c) (hash->list (quad-attrs q)))))
(make-quad #:tag (quad-tag q)
#:attrs new-attrs
#:elems null))]
[_ (list q)]))))
(define quad-compile (make-pipeline (list
bootstrap
linearize
merge-adjacent-strings
split-whitespace
make-weirdo-char-quads
layout
make-drawing-insts
stackify)))
(define drawing-insts (parameterize ([current-wrap-width 13])
(quad-compile "Hello this is the earth")))
(displayln drawing-insts)
(render drawing-insts #:using text-renderer)
(render drawing-insts #:using drr-renderer)
#;(render-to-html drawing-insts)
#;(render-to-pdf drawing-insts)