Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 44 additions & 42 deletions scribble-doc/scribblings/scribble/class-diagrams.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -117,18 +117,19 @@
(blank 0 (+ class-box-margin class-box-margin)))
(cond
[(and methods fields)
(let* ([top-spacer (mk-blank)]
[bottom-spacer (mk-blank)]
[main (vl-append name
top-spacer
(if (null? fields)
(blank 0 4)
(apply vl-append fields))
bottom-spacer
(if (null? methods)
(blank 0 4)
(apply vl-append methods)))])
(add-hline (add-hline (frame (inset main class-box-margin)) top-spacer) bottom-spacer))]
(define top-spacer (mk-blank))
(define bottom-spacer (mk-blank))
(define main
(vl-append name
top-spacer
(if (null? fields)
(blank 0 4)
(apply vl-append fields))
bottom-spacer
(if (null? methods)
(blank 0 4)
(apply vl-append methods))))
(add-hline (add-hline (frame (inset main class-box-margin)) top-spacer) bottom-spacer)]
[fields
(define top-spacer (mk-blank))
(define main
Expand Down Expand Up @@ -350,36 +351,37 @@
[count 1]
#:connect-dots [connect-dots connect-dots]
#:dot-delta [dot-delta 0])
(let ([going-down? (let-values ([(_1 start-y) (find-cc main0 start-field)]
[(_2 finish-y) (find-cc main0 finish-name)])
(< start-y finish-y))])
(define-values (main1 dot1)
(add-dot-delta (λ () (add-dot-left main0 start-class start-field))
0
(if going-down?
dot-delta
(- dot-delta))))
(define-values (main2 dot2)
(add-dot-delta (λ () (add-dot-left/space main1 start-class start-field count))
(- dot-delta)
(if going-down?
dot-delta
(- dot-delta))))
(define-values (main3 dot3)
(add-dot-delta (λ () (add-dot-left main2 finish-class finish-name))
0
(if going-down?
(- dot-delta)
dot-delta)))
(define-values (main4 dot4) (add-dot-delta (λ () (add-dot-junction main3 dot2 dot3)) 0 0))
(define-values (main5 dot5) (add-dot-left main4 finish-class finish-name))
(define-values (main6 dot6)
(add-dot-delta
(λ () (add-dot-left main5 finish-class finish-name))
-1 ;; just enough to get the arrowhead going the right direction; not enough to see the line
0))

(connect-dots #t (connect-dots #f main6 dot1 dot2 dot4 dot3) dot6 dot5)))
(define going-down?
(let-values ([(_1 start-y) (find-cc main0 start-field)]
[(_2 finish-y) (find-cc main0 finish-name)])
(< start-y finish-y)))
(define-values (main1 dot1)
(add-dot-delta (λ () (add-dot-left main0 start-class start-field))
0
(if going-down?
dot-delta
(- dot-delta))))
(define-values (main2 dot2)
(add-dot-delta (λ () (add-dot-left/space main1 start-class start-field count))
(- dot-delta)
(if going-down?
dot-delta
(- dot-delta))))
(define-values (main3 dot3)
(add-dot-delta (λ () (add-dot-left main2 finish-class finish-name))
0
(if going-down?
(- dot-delta)
dot-delta)))
(define-values (main4 dot4) (add-dot-delta (λ () (add-dot-junction main3 dot2 dot3)) 0 0))
(define-values (main5 dot5) (add-dot-left main4 finish-class finish-name))
(define-values (main6 dot6)
(add-dot-delta
(λ () (add-dot-left main5 finish-class finish-name))
-1 ;; just enough to get the arrowhead going the right direction; not enough to see the line
0))

(connect-dots #t (connect-dots #f main6 dot1 dot2 dot4 dot3) dot6 dot5))

(define (left-top-reference main0
start-class
Expand Down
19 changes: 9 additions & 10 deletions scribble-doc/scribblings/scribble/utils.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,15 @@
(cdr (apply append (map (lambda (x) (list #f x)) r)))
r)])
(make-table plain
(map (lambda (x)
(let ([@expr (if x
(litchar/lines (car x))
"")]
[sexpr (if x
(racket:to-paragraph ((norm-spacing 0) (cadr x)))
"")]
[reads-as (if x reads-as "")])
(map as-flow (list spacer @expr reads-as sexpr))))
r)))]))))
(for/list ([x (in-list r)])
(let ([@expr (if x
(litchar/lines (car x))
"")]
[sexpr (if x
(racket:to-paragraph ((norm-spacing 0) (cadr x)))
"")]
[reads-as (if x reads-as "")])
(map as-flow (list spacer @expr reads-as sexpr))))))]))))

;; stuff for the scribble/text examples

Expand Down
51 changes: 13 additions & 38 deletions scribble-lib/scribble/sigplan.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -8,44 +8,19 @@
scribble/latex-properties
(for-syntax racket/base))

(provide/contract
[abstract
(->* () () #:rest (listof pre-content?)
block?)]
[subtitle
(->* () () #:rest (listof pre-content?)
content?)]
[authorinfo
(-> pre-content? pre-content? pre-content?
block?)]
[conferenceinfo
(-> pre-content? pre-content?
block?)]
[copyrightyear
(->* () () #:rest (listof pre-content?)
block?)]
[copyrightdata
(->* () () #:rest (listof pre-content?)
block?)]
[exclusive-license
(->* () ()
block?)]
[doi
(->* () () #:rest (listof pre-content?)
block?)]
[to-appear
(->* () () #:rest pre-content?
block?)]
[category
(->* (pre-content? pre-content? pre-content?)
((or/c #f pre-content?))
content?)]
[terms
(->* () () #:rest (listof pre-content?)
content?)]
[keywords
(->* () () #:rest (listof pre-content?)
content?)])
(provide (contract-out
[abstract (->* () () #:rest (listof pre-content?) block?)]
[subtitle (->* () () #:rest (listof pre-content?) content?)]
[authorinfo (-> pre-content? pre-content? pre-content? block?)]
[conferenceinfo (-> pre-content? pre-content? block?)]
[copyrightyear (->* () () #:rest (listof pre-content?) block?)]
[copyrightdata (->* () () #:rest (listof pre-content?) block?)]
[exclusive-license (->* () () block?)]
[doi (->* () () #:rest (listof pre-content?) block?)]
[to-appear (->* () () #:rest pre-content? block?)]
[category (->* (pre-content? pre-content? pre-content?) ((or/c #f pre-content?)) content?)]
[terms (->* () () #:rest (listof pre-content?) content?)]
[keywords (->* () () #:rest (listof pre-content?) content?)]))

(provide preprint 10pt nocopyright onecolumn noqcourier notimes
include-abstract)
Expand Down
146 changes: 77 additions & 69 deletions scribble-lib/scribble/srcdoc.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,13 @@
(syntax-shift-phase-level s #f)))
(with-syntax ([((req ...) ...)
(for/list ([rs (in-list (reverse requires))])
(map (lambda (r)
(syntax-case r ()
[(op arg ...)
(with-syntax ([(arg ...) (map shift-and-introduce
(syntax->list #'(arg ...)))])
#'(op arg ...))]
[else (shift-and-introduce r)]))
(syntax->list rs)))]
(for/list ([r (in-list (syntax->list rs))])
(syntax-case r ()
[(op arg ...)
(with-syntax ([(arg ...) (map shift-and-introduce
(syntax->list #'(arg ...)))])
#'(op arg ...))]
[else (shift-and-introduce r)])))]
[(expr ...)
(map shift-and-introduce (reverse doc-exprs))]
[doc-body
Expand Down Expand Up @@ -128,11 +127,12 @@
(let ([t (syntax-local-value #'id (lambda () #f))])
(unless (provide/doc-transformer? t)
(raise-syntax-error #f "not bound as a provide/doc transformer" stx #'id))
(let* ([i (make-syntax-introducer)]
[i2 (lambda (x) (syntax-local-introduce (i x)))])
(let-values ([(p/c d req/d id) ((provide/doc-transformer-proc t)
(i (syntax-local-introduce form)))])
(list (i2 p/c) (i req/d) (i d) (i id)))))]
(define i (make-syntax-introducer))
(define (i2 x)
(syntax-local-introduce (i x)))
(let-values ([(p/c d req/d id) ((provide/doc-transformer-proc t)
(i (syntax-local-introduce form)))])
(list (i2 p/c) (i req/d) (i d) (i id))))]
[_ (raise-syntax-error #f "not a provide/doc sub-form" stx form)]))])
(with-syntax ([(p/c ...)
(map (lambda (form f)
Expand Down Expand Up @@ -345,44 +345,52 @@

(let ([build-mandatories/optionals
(λ (names contracts extras)
(let ([names-length (length names)]
[contracts-length (length contracts)])
(let loop ([contracts contracts]
[names names]
[extras extras])
(cond
[(and (null? names) (null? contracts)) '()]
[(or (null? names) (null? contracts))
(raise-syntax-error #f
(format "mismatched ~a argument list count and domain contract count (~a)"
(if extras "optional" "mandatory")
(if (null? names)
"ran out of names"
"ran out of contracts"))
stx)]
[else
(let ([fst-name (car names)]
[fst-ctc (car contracts)])
(if (keyword? (syntax-e fst-ctc))
(begin
(unless (pair? (cdr contracts))
(raise-syntax-error #f
"keyword not followed by a contract"
stx))
(cons (if extras
(list fst-ctc fst-name (cadr contracts) (car extras))
(list fst-ctc fst-name (cadr contracts)))
(loop (cddr contracts)
(cdr names)
(if extras
(cdr extras)
extras))))
(cons (if extras
(list fst-name fst-ctc (car extras))
(list fst-name fst-ctc))
(loop (cdr contracts) (cdr names) (if extras
(cdr extras)
extras)))))]))))])
(define names-length (length names))
(define contracts-length (length contracts))
(let loop ([contracts contracts]
[names names]
[extras extras])
(cond
[(and (null? names) (null? contracts)) '()]
[(or (null? names) (null? contracts))
(raise-syntax-error
#f
(format
"mismatched ~a argument list count and domain contract count (~a)"
(if extras "optional" "mandatory")
(if (null? names)
"ran out of names"
"ran out of contracts"))
stx)]
[else
(let ([fst-name (car names)]
[fst-ctc (car contracts)])
(if (keyword? (syntax-e fst-ctc))
(begin
(unless (pair? (cdr contracts))
(raise-syntax-error
#f
"keyword not followed by a contract"
stx))
(cons (if extras
(list fst-ctc
fst-name
(cadr contracts)
(car extras))
(list fst-ctc fst-name (cadr contracts)))
(loop (cddr contracts)
(cdr names)
(if extras
(cdr extras)
extras))))
(cons (if extras
(list fst-name fst-ctc (car extras))
(list fst-name fst-ctc))
(loop (cdr contracts)
(cdr names)
(if extras
(cdr extras)
extras)))))])))])

#`([(id #,@(build-mandatories/optionals (syntax->list #'(mandatory-names ...))
(syntax->list #'(mandatory ...))
Expand All @@ -404,19 +412,22 @@
[((x y) ...)
(andmap identifier? (syntax->list #'(x ... y ...)))]
[((x y) ...)
(for-each
(λ (var)
(unless (identifier? var)
(raise-syntax-error #f "expected an identifier in the optional names" stx var)))
(syntax->list #'(x ... y ...)))]
(for ([var (in-list (syntax->list #'(x ... y ...)))])
(unless (identifier? var)
(raise-syntax-error
#f
"expected an identifier in the optional names"
stx
var)))]
[(a ...)
(for-each
(λ (a)
(syntax-case stx ()
[(x y) (void)]
[other
(raise-syntax-error #f "expected an sequence of two idenfiers" stx #'other)]))
(syntax->list #'(a ...)))]))]
(for ([a (in-list (syntax->list #'(a ...)))])
(syntax-case stx ()
[(x y) (void)]
[other
(raise-syntax-error #f
"expected an sequence of two idenfiers"
stx
#'other)]))]))]
[x
(raise-syntax-error
#f
Expand Down Expand Up @@ -492,12 +503,9 @@
"expected an identifier or sequence of two identifiers"
stx
#'struct-name)])
(for ([f (in-list (syntax->list #'(field-name ...)))])
(unless (identifier? f)
(raise-syntax-error #f
"expected an identifier"
stx
f)))
(for ([f (in-list (syntax->list #'(field-name ...)))]
#:unless (identifier? f))
(raise-syntax-error #f "expected an identifier" stx f))
(define omit-constructor? #f)
(define-values (ds-args desc)
(let loop ([ds-args '()]
Expand Down
Loading