43 lines
1.4 KiB
Racket
43 lines
1.4 KiB
Racket
#lang racket/base
|
|
|
|
(provide gen:syndicate-pretty-printable
|
|
syndicate-pretty-print
|
|
|
|
syndicate-pretty-print->string
|
|
|
|
exn->string ;; required from racket/exn
|
|
string-indent
|
|
indented-port-output)
|
|
|
|
(require racket/generic)
|
|
(require racket/pretty)
|
|
(require racket/exn)
|
|
(require (only-in racket/string string-join string-split))
|
|
(require "trie.rkt")
|
|
|
|
(define-generics syndicate-pretty-printable
|
|
(syndicate-pretty-print syndicate-pretty-printable [port])
|
|
#:defaults ([(lambda (x) (and (not (eq? x #f)) (trie? x)))
|
|
(define (syndicate-pretty-print m [p (current-output-port)])
|
|
(pretty-print-trie m p))]
|
|
[(lambda (x) #t)
|
|
(define (syndicate-pretty-print v [p (current-output-port)])
|
|
(pretty-write v p))]))
|
|
|
|
(define (syndicate-pretty-print->string v)
|
|
(define p (open-output-string))
|
|
(syndicate-pretty-print v p)
|
|
(get-output-string p))
|
|
|
|
(define (string-indent amount s)
|
|
(define pad (make-string amount #\space))
|
|
(string-join (for/list [(line (string-split s "\n"))] (string-append pad line)) "\n"))
|
|
|
|
(define (indented-port-output amount f #:first-line? [first-line? #t])
|
|
(define p (open-output-string))
|
|
(f p)
|
|
(define fully-indented (string-indent amount (get-output-string p)))
|
|
(if first-line?
|
|
fully-indented
|
|
(substring fully-indented amount)))
|