www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

main.rkt (1287B)


      1 #lang racket/base
      2 
      3 (require (for-syntax racket/base
      4                      racket/syntax)
      5          (except-in scribble/lp2 chunk CHUNK))
      6 
      7 (require (only-in hyper-literate/private/lp
      8                   chunk
      9                   CHUNK))
     10 
     11 (provide defck
     12          repeat-chunk
     13          chunk
     14          CHUNK)
     15 
     16 (define-syntax (defck stx)
     17   (syntax-case stx ()
     18     [(self . rest)
     19      (with-syntax ([(name . content) #'rest]
     20                    [chk (datum->syntax #'self 'chunk)])
     21        (with-syntax ([name2 (format-id #'name "~a-repeat" #'name)])
     22          #`(begin
     23              #,(syntax/loc stx (chk . rest))
     24              ;(define name2 #'content)
     25              (define-syntax (name2 stx2)
     26                (syntax-case stx2 ()
     27                  [(_ prefix (... ...)) #'(prefix (... ...) . content)])))))]))
     28 
     29 (define-syntax (repeat-chunk stx)
     30   (syntax-case stx ()
     31     [(self name)
     32      (let ([stripped-name (regexp-replace #px"^<(.*)>$"
     33                                           (symbol->string (syntax-e #'name))
     34                                           "\\1")])
     35        (with-syntax ([chk (datum->syntax #'self 'chunk)]
     36                      [name2 (format-id #'name "~a-repeat" #'name)]
     37                      [name-rep (format-id #'name "(~a)" stripped-name)])
     38          #'(name2 chk name-rep)))]))