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.
32 lines
769 B
Racket
32 lines
769 B
Racket
9 years ago
|
#lang racket/base
|
||
|
(require syntax/parse)
|
||
|
|
||
|
(provide interpret-drawing)
|
||
|
|
||
|
(define (interpret-drawing drawing-stx)
|
||
|
(syntax-parse drawing-stx
|
||
|
[({~literal drawing} row-stxs ...)
|
||
|
|
||
|
(for ([row-stx (syntax->list #'(row-stxs ...))])
|
||
|
(interpret-row row-stx))]))
|
||
|
|
||
|
|
||
|
(define (interpret-row row-stx)
|
||
|
(syntax-parse row-stx
|
||
|
[({~literal rows}
|
||
|
({~literal repeat} repeat-number)
|
||
|
chunks ... ";")
|
||
|
|
||
|
(for ([i (syntax-e #'repeat-number)])
|
||
|
(for ([chunk-stx (syntax->list #'(chunks ...))])
|
||
|
(interpret-chunk chunk-stx))
|
||
|
(newline))]))
|
||
|
|
||
|
|
||
|
(define (interpret-chunk chunk-stx)
|
||
|
(syntax-parse chunk-stx
|
||
|
[({~literal chunk} chunk-size chunk-string)
|
||
|
|
||
|
(for ([k (syntax-e #'chunk-size)])
|
||
|
(display (syntax-e #'chunk-string)))]))
|