98 lines
3.1 KiB
Scheme
98 lines
3.1 KiB
Scheme
|
|
(module text-render mzscheme
|
|
(require "struct.ss"
|
|
(lib "class.ss"))
|
|
(provide render-mixin)
|
|
|
|
(define (render-mixin %)
|
|
(class %
|
|
(define/override (get-substitutions)
|
|
'((#rx"---" "\U2014")
|
|
(#rx"--" "\U2013")
|
|
(#rx"``" "\U201C")
|
|
(#rx"''" "\U201D")
|
|
(#rx"'" "\U2019")))
|
|
|
|
(inherit render-content
|
|
render-paragraph
|
|
render-flow-element)
|
|
|
|
(define/override (render-part d ht)
|
|
(let ([number (collected-info-number (part-collected-info d ht))])
|
|
(when (or (ormap values number)
|
|
(part-title-content d))
|
|
(newline))
|
|
(for-each (lambda (n)
|
|
(when n
|
|
(printf "~s." n)))
|
|
(reverse number))
|
|
(when (part-title-content d)
|
|
(when (ormap values number)
|
|
(printf " "))
|
|
(render-content (part-title-content d) d ht))
|
|
(when (or (ormap values number)
|
|
(part-title-content d))
|
|
(newline))
|
|
(newline)
|
|
(render-flow (part-flow d) d ht)
|
|
(let loop ([pos 1]
|
|
[secs (part-parts d)])
|
|
(unless (null? secs)
|
|
(newline)
|
|
(render-part (car secs) ht)
|
|
(loop (add1 pos) (cdr secs))))))
|
|
|
|
(define/override (render-flow f part ht)
|
|
(let ([f (flow-paragraphs f)])
|
|
(if (null? f)
|
|
null
|
|
(apply
|
|
append
|
|
(render-flow-element (car f) part ht)
|
|
(map (lambda (p)
|
|
(newline) (newline)
|
|
(render-flow-element p part ht))
|
|
(cdr f))))))
|
|
|
|
(define/override (render-table i part ht)
|
|
(let ([flowss (table-flowss i)])
|
|
(if (null? flowss)
|
|
null
|
|
(apply
|
|
append
|
|
(map (lambda (d) (render-flow d part ht)) (car flowss))
|
|
(map (lambda (flows)
|
|
(newline)
|
|
(map (lambda (d) (render-flow d part ht)) flows))
|
|
(cdr flowss))))))
|
|
|
|
(define/override (render-itemization i part ht)
|
|
(let ([flows (itemization-flows i)])
|
|
(if (null? flows)
|
|
null
|
|
(apply append
|
|
(begin
|
|
(printf "* ")
|
|
(render-flow (car flows) part ht))
|
|
(map (lambda (d)
|
|
(printf "\n\n* ")
|
|
(render-flow d part ht))
|
|
(cdr flows))))))
|
|
|
|
(define/override (render-other i part ht)
|
|
(cond
|
|
[(symbol? i)
|
|
(display (case i
|
|
[(mdash) "\U2014"]
|
|
[(ndash) "\U2013"]
|
|
[(ldquo) "\U201C"]
|
|
[(rdquo) "\U201D"]
|
|
[(rsquo) "\U2019"]
|
|
[(rarr) "->"]
|
|
[else (error 'text-render "unknown element symbol: ~e" i)]))]
|
|
[(string? i) (display i)]
|
|
[else (write i)])
|
|
null)
|
|
|
|
(super-new))))
|