85 lines
2.0 KiB
Racket
85 lines
2.0 KiB
Racket
#lang racket/base
|
|
(require (for-syntax racket/base
|
|
syntax/parse
|
|
syntax/parse/experimental/contract
|
|
"private/ppict-syntax.rkt")
|
|
racket/contract/base
|
|
slideshow/pict
|
|
"private/ppict.rkt"
|
|
"private/tag-pict.rkt")
|
|
|
|
(define-for-syntax (ppict-do*-transformer who stx)
|
|
(syntax-parse stx
|
|
[(_ base . fs)
|
|
#:declare base (expr/c #'pict?)
|
|
#:declare fs (fragment-sequence who #'xp #'rpss)
|
|
#'(let ([xp base.c] [rpss null])
|
|
fs.code)]))
|
|
|
|
(define-syntax (ppict-do stx)
|
|
#`(let-values ([(final _picts)
|
|
#,(ppict-do*-transformer 'ppict-do stx)])
|
|
final))
|
|
|
|
(define-syntax (ppict-do* stx)
|
|
(ppict-do*-transformer 'ppict-do* stx))
|
|
|
|
;; ----
|
|
|
|
(provide ppict-do
|
|
ppict-do*
|
|
ppict-do-state)
|
|
|
|
(provide ppict?
|
|
placer?
|
|
refpoint-placer?)
|
|
|
|
(provide/contract
|
|
[ppict-go
|
|
(-> pict? placer? ppict?)]
|
|
[ppict-add
|
|
(->* (ppict?)
|
|
()
|
|
#:rest (listof (or/c pict? real? #f 'next))
|
|
pict?)]
|
|
[ppict-add*
|
|
(->* (ppict?)
|
|
()
|
|
#:rest (listof (or/c pict? real? #f 'next))
|
|
(values pict? (listof pict?)))]
|
|
[ppict-placer
|
|
(-> ppict? placer?)]
|
|
[coord
|
|
(->* (real? real?)
|
|
(align/c
|
|
#:abs-x real?
|
|
#:abs-y real?
|
|
#:compose procedure?)
|
|
refpoint-placer?)]
|
|
[grid
|
|
(->* (exact-positive-integer? exact-positive-integer?
|
|
exact-integer? exact-integer?)
|
|
(align/c
|
|
#:abs-x real?
|
|
#:abs-y real?
|
|
#:compose procedure?)
|
|
refpoint-placer?)]
|
|
[cascade
|
|
(->* ()
|
|
((or/c real? 'auto) (or/c real? 'auto))
|
|
placer?)]
|
|
[tile
|
|
(-> exact-positive-integer? exact-positive-integer?
|
|
placer?)]
|
|
[at-find-pict
|
|
(->* ((or/c tag-path? pict-path?))
|
|
(procedure?
|
|
align/c
|
|
#:abs-x real?
|
|
#:abs-y real?
|
|
#:compose procedure?)
|
|
refpoint-placer?)]
|
|
[merge-refpoints
|
|
(-> refpoint-placer? refpoint-placer?
|
|
refpoint-placer?)])
|