v3.99.0.2
svn: r7706 original commit: 39cedb62edf9258b051a22a29a90be9c6841956f
This commit is contained in:
parent
3b4f787f35
commit
b134592f8f
|
@ -1,9 +1,9 @@
|
|||
|
||||
(module base-render mzscheme
|
||||
(module base-render scheme/base
|
||||
(require "struct.ss"
|
||||
(lib "class.ss")
|
||||
(lib "serialize.ss")
|
||||
(lib "file.ss"))
|
||||
mzlib/class
|
||||
mzlib/serialize
|
||||
scheme/file)
|
||||
|
||||
(provide render%)
|
||||
|
||||
|
@ -290,9 +290,9 @@
|
|||
(map (lambda (d fn)
|
||||
(printf " [Output to ~a]\n" fn)
|
||||
(with-output-to-file fn
|
||||
#:exists 'truncate/replace
|
||||
(lambda ()
|
||||
(render-one d ri fn))
|
||||
'truncate/replace))
|
||||
(render-one d ri fn))))
|
||||
ds
|
||||
fns))
|
||||
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
|
||||
(module basic (lib "lang.ss" "big")
|
||||
(module basic scheme/base
|
||||
(require "decode.ss"
|
||||
"struct.ss"
|
||||
"config.ss"
|
||||
(lib "list.ss")
|
||||
(lib "class.ss")
|
||||
(lib "main-collects.ss" "setup")
|
||||
(lib "modresolve.ss" "syntax"))
|
||||
mzlib/list
|
||||
mzlib/class
|
||||
setup/main-collects
|
||||
syntax/modresolve
|
||||
(for-syntax scheme/base))
|
||||
|
||||
(provide title
|
||||
section
|
||||
|
@ -26,17 +27,22 @@
|
|||
p
|
||||
(module-path-prefix->string p))))
|
||||
|
||||
(define (convert-tag tag content)
|
||||
(if (list? tag)
|
||||
(apply append (map (lambda (t) (convert-tag t content)) tag))
|
||||
`((part ,(or tag (gen-tag content))))))
|
||||
|
||||
(define (title #:tag [tag #f] #:tag-prefix [prefix #f] #:style [style #f] . str)
|
||||
(let ([content (decode-content str)])
|
||||
(make-title-decl (prefix->string prefix)
|
||||
`((part ,(or tag (gen-tag content))))
|
||||
(convert-tag tag content)
|
||||
style
|
||||
content)))
|
||||
|
||||
(define (section #:tag [tag #f] #:tag-prefix [prefix #f] #:style [style #f] . str)
|
||||
(let ([content (decode-content str)])
|
||||
(make-part-start 0 (prefix->string prefix)
|
||||
`((part ,(or tag (gen-tag content))))
|
||||
(convert-tag tag content)
|
||||
style
|
||||
content)))
|
||||
|
||||
|
@ -44,7 +50,7 @@
|
|||
(let ([content (decode-content str)])
|
||||
(make-part-start 1
|
||||
(prefix->string prefix)
|
||||
`((part ,(or tag (gen-tag content))))
|
||||
(convert-tag tag content)
|
||||
#f
|
||||
content)))
|
||||
|
||||
|
@ -52,7 +58,7 @@
|
|||
(let ([content (decode-content str)])
|
||||
(make-part-start 2
|
||||
(prefix->string prefix)
|
||||
`((part ,(or tag (gen-tag content))))
|
||||
(convert-tag tag content)
|
||||
#f
|
||||
content)))
|
||||
|
||||
|
@ -60,12 +66,13 @@
|
|||
(let ([content (decode-content str)])
|
||||
(make-paragraph (list (make-element 'bold content)))))
|
||||
|
||||
(define-syntax include-section
|
||||
(syntax-rules ()
|
||||
(define-syntax (include-section stx)
|
||||
(syntax-case stx ()
|
||||
[(_ mod)
|
||||
(begin
|
||||
(require (only mod doc))
|
||||
doc)]))
|
||||
(with-syntax ([mod (syntax-local-introduce #'mod)])
|
||||
#'(begin
|
||||
(require (only-in mod doc))
|
||||
doc))]))
|
||||
|
||||
;; ----------------------------------------
|
||||
|
||||
|
@ -201,9 +208,9 @@
|
|||
(part-collected-info sec ri))
|
||||
ri))
|
||||
(lambda (k v)
|
||||
(if (and (pair? k)
|
||||
(eq? 'index-entry (car k)))
|
||||
(set! l (cons (cons (cadr k) v) l)))))
|
||||
(when (and (pair? k)
|
||||
(eq? 'index-entry (car k)))
|
||||
(set! l (cons (cons (cadr k) v) l)))))
|
||||
(let ([l (sort
|
||||
l
|
||||
(lambda (a b)
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
(module doclang (lib "lang.ss" "big")
|
||||
(module doclang scheme/base
|
||||
(require "struct.ss"
|
||||
"decode.ss"
|
||||
(lib "kw.ss"))
|
||||
(require-for-syntax (lib "kerncase.ss" "syntax"))
|
||||
(for-syntax scheme/base
|
||||
syntax/kerncase))
|
||||
|
||||
(provide (all-from-except (lib "lang.ss" "big") #%module-begin)
|
||||
(rename *module-begin #%module-begin))
|
||||
(provide (except-out (all-from-out scheme/base) #%module-begin)
|
||||
(rename-out [*module-begin #%module-begin]))
|
||||
|
||||
;; Module wrapper ----------------------------------------
|
||||
|
||||
(define-syntax (*module-begin stx)
|
||||
(syntax-case stx ()
|
||||
[(_ id exprs . body)
|
||||
#'(#%plain-module-begin
|
||||
#'(#%module-begin
|
||||
(doc-begin id exprs . body))]))
|
||||
|
||||
(define-syntax (doc-begin stx)
|
||||
|
@ -40,21 +40,17 @@
|
|||
(let ([expanded (local-expand #'body1
|
||||
'module
|
||||
(append
|
||||
(kernel-form-identifier-list #'here)
|
||||
(kernel-form-identifier-list)
|
||||
(syntax->list #'(provide
|
||||
require
|
||||
require-for-syntax
|
||||
require-for-label))))])
|
||||
require))))])
|
||||
(syntax-case expanded (begin)
|
||||
[(begin body1 ...)
|
||||
#`(doc-begin m-id exprs body1 ... . body)]
|
||||
[(id . rest)
|
||||
(and (identifier? #'id)
|
||||
(ormap (lambda (kw) (module-identifier=? #'id kw))
|
||||
(ormap (lambda (kw) (free-identifier=? #'id kw))
|
||||
(syntax->list #'(require
|
||||
provide
|
||||
require-for-syntax
|
||||
require-for-label
|
||||
define-values
|
||||
define-syntaxes
|
||||
define-for-syntaxes))))
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
|
||||
(module docreader mzscheme
|
||||
(require (prefix scribble: "reader.ss")
|
||||
(lib "kw.ss"))
|
||||
(module docreader scheme/base
|
||||
(require (prefix-in scribble: "reader.ss"))
|
||||
|
||||
(provide (rename *read read)
|
||||
(rename *read-syntax read-syntax))
|
||||
(provide (rename-out [*read read])
|
||||
(rename-out [*read-syntax read-syntax]))
|
||||
|
||||
(define/kw (*read #:optional [inp (current-input-port)])
|
||||
(define (*read [inp (current-input-port)])
|
||||
(wrap inp (scribble:read-inside inp)))
|
||||
|
||||
(define/kw (*read-syntax #:optional src [port (current-input-port)])
|
||||
(define (*read-syntax [src #f] [port (current-input-port)])
|
||||
(wrap port (scribble:read-inside-syntax src port)))
|
||||
|
||||
(define (wrap port body)
|
||||
|
@ -19,7 +18,7 @@
|
|||
(string->symbol (path->string (path-replace-suffix name #""))))
|
||||
'page)]
|
||||
[id 'doc])
|
||||
`(module ,name (lib "doclang.ss" "scribble")
|
||||
`(module ,name scribble/doclang
|
||||
(#%module-begin
|
||||
,id ()
|
||||
. ,body)))))
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
|
||||
(module eval (lib "lang.ss" "big")
|
||||
(module eval scheme/base
|
||||
(require "manual.ss"
|
||||
"struct.ss"
|
||||
"scheme.ss"
|
||||
"decode.ss"
|
||||
(lib "class.ss")
|
||||
(lib "file.ss")
|
||||
(lib "string.ss"))
|
||||
scheme/file
|
||||
mzlib/string
|
||||
(for-syntax scheme/base))
|
||||
|
||||
(provide interaction
|
||||
interaction-eval
|
||||
|
@ -33,6 +33,17 @@
|
|||
|
||||
(define maxlen 60)
|
||||
|
||||
(namespace-require 'scheme/base)
|
||||
|
||||
(define (literal-string style s)
|
||||
(let ([m (regexp-match #rx"^(.*)( +)(.*)$" s)])
|
||||
(if m
|
||||
(make-element #f
|
||||
(list (literal-string style (cadr m))
|
||||
(hspace (string-length (caddr m)))
|
||||
(literal-string style (cadddr m))))
|
||||
(make-element style (list s)))))
|
||||
|
||||
(define (format-output str style)
|
||||
(if (string=? "" str)
|
||||
null
|
||||
|
@ -48,14 +59,14 @@
|
|||
(make-paragraph
|
||||
(list
|
||||
(hspace 2)
|
||||
(span-class style (car s))))
|
||||
(literal-string style (car s))))
|
||||
(make-table
|
||||
#f
|
||||
(map (lambda (s)
|
||||
(list (make-flow (list (make-paragraph
|
||||
(list
|
||||
(hspace 2)
|
||||
(span-class style s)))))))
|
||||
(literal-string style s)))))))
|
||||
s))))))))))
|
||||
|
||||
(define (interleave title expr-paras val-list+outputs)
|
||||
|
@ -145,11 +156,12 @@
|
|||
=> (lambda (v) v)]
|
||||
[(string? v) (install ht v (string-copy v))]
|
||||
[(bytes? v) (install ht v (bytes-copy v))]
|
||||
[(pair? v) (let ([p (cons #f #f)])
|
||||
(hash-table-put! ht v p)
|
||||
(set-car! p (copy-value (car v) ht))
|
||||
(set-cdr! p (copy-value (cdr v) ht))
|
||||
p)]
|
||||
[(pair? v) (cons (copy-value (car v) ht)
|
||||
(copy-value (cdr v) ht))]
|
||||
[(mpair? v) (let ([p (mcons #f #f)])
|
||||
(set-mcar! p (copy-value (mcar v) ht))
|
||||
(set-mcdr! p (copy-value (mcdr v) ht))
|
||||
p)]
|
||||
[(vector? v) (let ([v2 (make-vector (vector-length v))])
|
||||
(hash-table-put! ht v v2)
|
||||
(let loop ([i (vector-length v2)])
|
||||
|
@ -169,12 +181,12 @@
|
|||
[((code:comment . _) . rest)
|
||||
(strip-comments #'rest)]
|
||||
[(a . b)
|
||||
(datum->syntax-object stx
|
||||
(cons (strip-comments #'a)
|
||||
(strip-comments #'b))
|
||||
stx
|
||||
stx
|
||||
stx)]
|
||||
(datum->syntax stx
|
||||
(cons (strip-comments #'a)
|
||||
(strip-comments #'b))
|
||||
stx
|
||||
stx
|
||||
stx)]
|
||||
[code:blank #'(void)]
|
||||
[else stx]))
|
||||
|
||||
|
@ -187,7 +199,7 @@
|
|||
(let ([s (strip-comments s)])
|
||||
(syntax-case s (module)
|
||||
[(module . _rest)
|
||||
(syntax-object->datum s)]
|
||||
(syntax->datum s)]
|
||||
[_else s]))))
|
||||
list)))
|
||||
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
|
||||
(module html-render mzscheme
|
||||
(module html-render scheme/base
|
||||
(require "struct.ss"
|
||||
(lib "class.ss")
|
||||
(lib "file.ss")
|
||||
(lib "list.ss")
|
||||
(lib "runtime-path.ss")
|
||||
(lib "main-doc.ss" "setup")
|
||||
(lib "main-collects.ss" "setup")
|
||||
(prefix xml: (lib "xml.ss" "xml")))
|
||||
scheme/class
|
||||
scheme/file
|
||||
mzlib/runtime-path
|
||||
setup/main-doc
|
||||
setup/main-collects
|
||||
mzlib/list
|
||||
(prefix-in xml: xml/xml)
|
||||
(for-syntax scheme/base))
|
||||
(provide render-mixin
|
||||
render-multi-mixin)
|
||||
|
||||
|
@ -210,7 +211,7 @@
|
|||
(lambda (para)
|
||||
(let loop ([c (paragraph-content para)])
|
||||
(cond
|
||||
[(empty? c) null]
|
||||
[(null? c) null]
|
||||
[else (let ([a (car c)])
|
||||
(cond
|
||||
[(toc-target-element? a)
|
||||
|
@ -280,7 +281,8 @@
|
|||
(href "scribble.css")
|
||||
(title "default"))))
|
||||
(body ,@(render-toc-view d ri)
|
||||
(div ((class "main")) ,@(render-part d ri))))])
|
||||
(div ((class "maincolumn"))
|
||||
(div ((class "main")) ,@(render-part d ri)))))])
|
||||
(install-file scribble-css)
|
||||
(xml:write-xml/content (xml:xexpr->xml xpr)))))
|
||||
|
||||
|
@ -577,9 +579,9 @@
|
|||
(parameterize ([current-subdirectory (file-name-from-path fn)])
|
||||
(let ([fn (build-path fn "index.html")])
|
||||
(with-output-to-file fn
|
||||
#:exists 'truncate/replace
|
||||
(lambda ()
|
||||
(render-one d ri fn))
|
||||
'truncate/replace))))
|
||||
(render-one d ri fn))))))
|
||||
ds
|
||||
fns))
|
||||
|
||||
|
@ -718,9 +720,9 @@
|
|||
filename)])
|
||||
(parameterize ([on-separate-page #t])
|
||||
(with-output-to-file full-path
|
||||
#:exists 'truncate/replace
|
||||
(lambda ()
|
||||
(render-one-part d ri full-path number))
|
||||
'truncate/replace)
|
||||
(render-one-part d ri full-path number)))
|
||||
null))]
|
||||
[else
|
||||
(let ([sep? (on-separate-page)])
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
(module info (lib "infotab.ss" "setup")
|
||||
(module info setup/infotab
|
||||
(define name "Scribble")
|
||||
(define blurb '("MzScheme extensions for writing text."))
|
||||
(define mzscheme-launcher-names '("scribble"))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
(module latex-render mzscheme
|
||||
(module latex-render scheme/base
|
||||
(require "struct.ss"
|
||||
(lib "class.ss"))
|
||||
mzlib/class)
|
||||
(provide render-mixin)
|
||||
|
||||
(define current-table-mode (make-parameter #f))
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
|
||||
(module manual (lib "lang.ss" "big")
|
||||
(module manual scheme/base
|
||||
(require "decode.ss"
|
||||
"struct.ss"
|
||||
"scheme.ss"
|
||||
"config.ss"
|
||||
"basic.ss"
|
||||
(lib "string.ss")
|
||||
(lib "list.ss")
|
||||
(lib "class.ss")
|
||||
(lib "stxparam.ss")
|
||||
(lib "serialize.ss"))
|
||||
(require-for-syntax (lib "stxparam.ss"))
|
||||
(require-for-label (lib "lang.ss" "big")
|
||||
(lib "class.ss"))
|
||||
mzlib/string
|
||||
scheme/class
|
||||
scheme/stxparam
|
||||
mzlib/serialize
|
||||
(for-syntax scheme/base)
|
||||
(for-label scheme/base
|
||||
scheme/class))
|
||||
|
||||
(provide (all-from "basic.ss"))
|
||||
(provide (all-from-out "basic.ss")
|
||||
unsyntax)
|
||||
|
||||
(provide PLaneT)
|
||||
(define PLaneT "PLaneT")
|
||||
|
@ -42,9 +42,9 @@
|
|||
(define-syntax (schememod stx)
|
||||
(syntax-case stx ()
|
||||
[(_ lang rest ...)
|
||||
(with-syntax ([modtag (datum->syntax-object
|
||||
(with-syntax ([modtag (datum->syntax
|
||||
#'here
|
||||
`(unsyntax (schemefont ,(format "#module ~a" (syntax-e #'lang))))
|
||||
`(unsyntax (schemefont ,(format "#lang ~a" (syntax-e #'lang))))
|
||||
#'lang)])
|
||||
#'(schemeblock modtag rest ...))]))
|
||||
|
||||
|
@ -61,7 +61,7 @@
|
|||
(boolean? sv)
|
||||
(and (pair? sv)
|
||||
(identifier? (car sv))
|
||||
(module-identifier=? #'cons (car sv))))
|
||||
(free-identifier=? #'cons (car sv))))
|
||||
;; We know that the context is irrelvant
|
||||
#'s
|
||||
;; Context may be relevant:
|
||||
|
@ -124,11 +124,26 @@
|
|||
[else (format "~s" s)])])
|
||||
(index* (list k) (list e) e)))
|
||||
|
||||
(provide schemeblock SCHEMEBLOCK
|
||||
schemeblock0 SCHEMEBLOCK0
|
||||
(define-syntax define-/form
|
||||
(syntax-rules ()
|
||||
[(_ id base)
|
||||
(define-syntax (id stx)
|
||||
(syntax-case stx ()
|
||||
[(_ a)
|
||||
(with-syntax ([ellipses (datum->syntax #'a
|
||||
'(... ...))])
|
||||
#'(let ([ellipses #f])
|
||||
(base a)))]))]))
|
||||
|
||||
(define-/form schemeblock0/form schemeblock0)
|
||||
(define-/form schemeblock/form schemeblock)
|
||||
(define-/form scheme/form scheme)
|
||||
|
||||
(provide schemeblock SCHEMEBLOCK schemeblock/form
|
||||
schemeblock0 SCHEMEBLOCK0 schemeblock0/form
|
||||
schemeinput
|
||||
schememod
|
||||
scheme schemeresult schemeid schememodname
|
||||
scheme scheme/form schemeresult schemeid schememodname
|
||||
indexed-scheme
|
||||
litchar
|
||||
verbatim)
|
||||
|
@ -136,7 +151,7 @@
|
|||
(provide onscreen menuitem defterm
|
||||
schemefont schemevalfont schemeresultfont schemeidfont
|
||||
schemeparenfont schemekeywordfont schememetafont schememodfont
|
||||
file exec envvar Flag DFlag
|
||||
filepath exec envvar Flag DFlag
|
||||
indexed-file indexed-envvar
|
||||
link procedure
|
||||
idefterm)
|
||||
|
@ -166,10 +181,10 @@
|
|||
(make-element "schememod" (decode-content str)))
|
||||
(define (schemekeywordfont . str)
|
||||
(make-element "schemekeyword" (decode-content str)))
|
||||
(define (file . str)
|
||||
(define (filepath . str)
|
||||
(make-element 'tt (append (list "\"") (decode-content str) (list "\""))))
|
||||
(define (indexed-file . str)
|
||||
(let* ([f (apply file str)]
|
||||
(let* ([f (apply filepath str)]
|
||||
[s (element->string f)])
|
||||
(index* (list (substring s 1 (sub1 (string-length s)))) (list f) f)))
|
||||
(define (exec . str)
|
||||
|
@ -202,7 +217,7 @@
|
|||
|
||||
;; ----------------------------------------
|
||||
|
||||
(provide method xmethod (rename method ::))
|
||||
(provide method xmethod (rename-out [method ::]))
|
||||
|
||||
(define-syntax method
|
||||
(syntax-rules ()
|
||||
|
@ -234,8 +249,10 @@
|
|||
(provide margin-note)
|
||||
|
||||
(define (margin-note . c)
|
||||
(make-styled-paragraph (list (make-element "refcontent"
|
||||
c))
|
||||
(make-styled-paragraph (list (make-element "refcolumn"
|
||||
(list
|
||||
(make-element "refcontent"
|
||||
c))))
|
||||
"refpara"))
|
||||
|
||||
;; ----------------------------------------
|
||||
|
@ -280,6 +297,7 @@
|
|||
defidform
|
||||
specform specform/subs
|
||||
specsubform specsubform/subs specspecsubform specspecsubform/subs specsubform/inline
|
||||
defsubform
|
||||
schemegrammar schemegrammar*
|
||||
var svar void-const undefined-const)
|
||||
|
||||
|
@ -305,10 +323,10 @@
|
|||
(syntax-position s)
|
||||
(syntax-span s)))])
|
||||
#'(let ([s (quote-syntax id)])
|
||||
(datum->syntax-object s
|
||||
(syntax-e s)
|
||||
'loc
|
||||
s)))]))
|
||||
(datum->syntax s
|
||||
(syntax-e s)
|
||||
'loc
|
||||
s)))]))
|
||||
|
||||
(define void-const
|
||||
(schemeresultfont "#<void>"))
|
||||
|
@ -365,14 +383,14 @@
|
|||
(lambda () (list desc ...)))]))
|
||||
(define-syntax defstruct
|
||||
(syntax-rules ()
|
||||
[(_ name fields #:immutable #:inspector #f desc ...)
|
||||
(**defstruct name fields #t #t desc ...)]
|
||||
[(_ name fields #:immutable desc ...)
|
||||
(**defstruct name fields #t #f desc ...)]
|
||||
[(_ name fields #:inspector #f desc ...)
|
||||
[(_ name fields #:mutable #:inspector #f desc ...)
|
||||
(**defstruct name fields #f #t desc ...)]
|
||||
[(_ name fields #:mutable desc ...)
|
||||
(**defstruct name fields #f #f desc ...)]
|
||||
[(_ name fields #:inspector #f desc ...)
|
||||
(**defstruct name fields #t #t desc ...)]
|
||||
[(_ name fields desc ...)
|
||||
(**defstruct name fields #f #f desc ...)]))
|
||||
(**defstruct name fields #t #f desc ...)]))
|
||||
(define-syntax **defstruct
|
||||
(syntax-rules ()
|
||||
[(_ name ([field field-contract] ...) immutable? transparent? desc ...)
|
||||
|
@ -385,23 +403,23 @@
|
|||
(with-syntax ([new-spec
|
||||
(syntax-case #'spec ()
|
||||
[(name . rest)
|
||||
(datum->syntax-object #'spec
|
||||
(cons
|
||||
(datum->syntax-object #'here
|
||||
'(unsyntax x)
|
||||
#'name)
|
||||
#'rest)
|
||||
#'spec)])]
|
||||
(datum->syntax #'spec
|
||||
(cons
|
||||
(datum->syntax #'here
|
||||
'(unsyntax x)
|
||||
#'name)
|
||||
#'rest)
|
||||
#'spec)])]
|
||||
[spec-id
|
||||
(syntax-case #'spec ()
|
||||
[(name . rest) #'name])])
|
||||
#'(*defforms (quote-syntax/loc spec-id) '(lit ...)
|
||||
'(spec spec1 ...)
|
||||
(list (lambda (x) (schemeblock0 new-spec))
|
||||
(lambda (ignored) (schemeblock0 spec1)) ...)
|
||||
(list (lambda (x) (schemeblock0/form new-spec))
|
||||
(lambda (ignored) (schemeblock0/form spec1)) ...)
|
||||
'((non-term-id non-term-form ...) ...)
|
||||
(list (list (lambda () (scheme non-term-id))
|
||||
(lambda () (schemeblock0 non-term-form))
|
||||
(lambda () (schemeblock0/form non-term-form))
|
||||
...)
|
||||
...)
|
||||
(lambda () (list desc ...))))]
|
||||
|
@ -423,7 +441,7 @@
|
|||
(syntax-case stx ()
|
||||
[(_ spec desc ...)
|
||||
#'(*defforms #f null
|
||||
'(spec) (list (lambda (ignored) (schemeblock0 spec)))
|
||||
'(spec) (list (lambda (ignored) (schemeblock0/form spec)))
|
||||
null null
|
||||
(lambda () (list desc ...)))]))
|
||||
(define-syntax (defidform stx)
|
||||
|
@ -435,19 +453,22 @@
|
|||
null
|
||||
null
|
||||
(lambda () (list desc ...)))]))
|
||||
(define-syntax (defsubform stx)
|
||||
(syntax-case stx ()
|
||||
[(_ . rest) #'(into-blockquote (defform . rest))]))
|
||||
(define-syntax specsubform
|
||||
(syntax-rules ()
|
||||
[(_ #:literals (lit ...) spec desc ...)
|
||||
(*specsubform 'spec #f '(lit ...) (lambda () (schemeblock0 spec)) null null (lambda () (list desc ...)))]
|
||||
(*specsubform 'spec #f '(lit ...) (lambda () (schemeblock0/form spec)) null null (lambda () (list desc ...)))]
|
||||
[(_ spec desc ...)
|
||||
(*specsubform 'spec #f null (lambda () (schemeblock0 spec)) null null (lambda () (list desc ...)))]))
|
||||
(*specsubform 'spec #f null (lambda () (schemeblock0/form spec)) null null (lambda () (list desc ...)))]))
|
||||
(define-syntax specsubform/subs
|
||||
(syntax-rules ()
|
||||
[(_ #:literals (lit ...) spec ([non-term-id non-term-form ...] ...) desc ...)
|
||||
(*specsubform 'spec #f '(lit ...) (lambda () (schemeblock0 spec))
|
||||
(*specsubform 'spec #f '(lit ...) (lambda () (schemeblock0/form spec))
|
||||
'((non-term-id non-term-form ...) ...)
|
||||
(list (list (lambda () (scheme non-term-id))
|
||||
(lambda () (schemeblock0 non-term-form))
|
||||
(lambda () (schemeblock0/form non-term-form))
|
||||
...)
|
||||
...)
|
||||
(lambda () (list desc ...)))]
|
||||
|
@ -464,18 +485,18 @@
|
|||
(define-syntax specform
|
||||
(syntax-rules ()
|
||||
[(_ #:literals (lit ...) spec desc ...)
|
||||
(*specsubform 'spec #t '(lit ...) (lambda () (schemeblock0 spec)) null null (lambda () (list desc ...)))]
|
||||
(*specsubform 'spec #t '(lit ...) (lambda () (schemeblock0/form spec)) null null (lambda () (list desc ...)))]
|
||||
[(_ spec desc ...)
|
||||
(*specsubform 'spec #t null (lambda () (schemeblock0 spec)) null null (lambda () (list desc ...)))]))
|
||||
(*specsubform 'spec #t null (lambda () (schemeblock0/form spec)) null null (lambda () (list desc ...)))]))
|
||||
(define-syntax specform/subs
|
||||
(syntax-rules ()
|
||||
[(_ #:literals (lit ...) spec ([non-term-id non-term-form ...] ...) desc ...)
|
||||
(*specsubform 'spec #t
|
||||
'(lit ...)
|
||||
(lambda () (schemeblock0 spec))
|
||||
(lambda () (schemeblock0/form spec))
|
||||
'((non-term-id non-term-form ...) ...)
|
||||
(list (list (lambda () (scheme non-term-id))
|
||||
(lambda () (schemeblock0 non-term-form))
|
||||
(lambda () (schemeblock0/form non-term-form))
|
||||
...)
|
||||
...)
|
||||
(lambda () (list desc ...)))]
|
||||
|
@ -501,7 +522,7 @@
|
|||
(syntax-rules ()
|
||||
[(_ #:literals (lit ...) id clause ...) (*schemegrammar '(lit ...)
|
||||
'(id clause ...)
|
||||
(lambda () (list (list (scheme id) (schemeblock0 clause) ...))))]
|
||||
(lambda () (list (list (scheme id) (schemeblock0/form clause) ...))))]
|
||||
[(_ id clause ...) (schemegrammar #:literals () id clause ...)]))
|
||||
(define-syntax schemegrammar*
|
||||
(syntax-rules ()
|
||||
|
@ -509,7 +530,7 @@
|
|||
'(id ... clause ... ...)
|
||||
(lambda ()
|
||||
(list
|
||||
(list (scheme id) (schemeblock0 clause) ...) ...)))]
|
||||
(list (scheme id) (schemeblock0/form clause) ...) ...)))]
|
||||
[(_ [id clause ...] ...) (schemegrammar #:literals () [id clause ...] ...)]))
|
||||
(define-syntax var
|
||||
(syntax-rules ()
|
||||
|
@ -518,6 +539,13 @@
|
|||
(syntax-rules ()
|
||||
[(_ id) (*var 'id)]))
|
||||
|
||||
(define (into-blockquote s)
|
||||
(cond
|
||||
[(splice? s)
|
||||
(make-blockquote "leftindent" (flow-paragraphs (decode-flow (splice-run s))))]
|
||||
[else
|
||||
(make-blockquote "leftindent" (list s))]))
|
||||
|
||||
(define (make-table-if-necessary style content)
|
||||
(if (= 1 (length content))
|
||||
(let ([paras (apply append (map flow-paragraphs (car content)))])
|
||||
|
@ -879,9 +907,9 @@
|
|||
(map symbol->string (car wrappers)))]
|
||||
[tag
|
||||
(register-scheme-definition
|
||||
(datum->syntax-object stx-id
|
||||
(string->symbol
|
||||
name))
|
||||
(datum->syntax stx-id
|
||||
(string->symbol
|
||||
name))
|
||||
#t)])
|
||||
(if tag
|
||||
(inner-make-target-element
|
||||
|
@ -937,9 +965,9 @@
|
|||
values
|
||||
(map (lambda (f)
|
||||
(if (and (pair? (car f))
|
||||
(memq '#:immutable (car f)))
|
||||
#f
|
||||
(list 'set- name '- (field-name f) '!)))
|
||||
(memq '#:mutable (car f)))
|
||||
(list 'set- name '- (field-name f) '!)
|
||||
#f))
|
||||
fields)))))))])
|
||||
(if (pair? name)
|
||||
(to-element (list just-name
|
||||
|
@ -1010,11 +1038,11 @@
|
|||
e)))))
|
||||
(loop (cdr fields))))))
|
||||
(cond
|
||||
[(and immutable? transparent?)
|
||||
[(and (not immutable?) transparent?)
|
||||
(list
|
||||
(list (to-flow spacer)
|
||||
(to-flow spacer)
|
||||
(to-flow (to-element '#:immutable))
|
||||
(to-flow (to-element '#:mutable))
|
||||
'cont
|
||||
'cont)
|
||||
(list (to-flow spacer)
|
||||
|
@ -1027,13 +1055,13 @@
|
|||
(schemeparenfont ")"))))
|
||||
'cont
|
||||
'cont))]
|
||||
[immutable?
|
||||
[(not immutable?)
|
||||
(list
|
||||
(list (to-flow spacer)
|
||||
(to-flow spacer)
|
||||
(to-flow (make-element
|
||||
#f
|
||||
(list (to-element '#:immutable)
|
||||
(list (to-element '#:mutable)
|
||||
(schemeparenfont ")"))))
|
||||
'cont
|
||||
'cont))]
|
||||
|
@ -1117,7 +1145,7 @@
|
|||
(loop (cdr form)))]
|
||||
[else null])))
|
||||
forms))]
|
||||
[current-meta-list '(... ...+)])
|
||||
[current-meta-list '(... ...+)])
|
||||
(make-splice
|
||||
(cons
|
||||
(make-table
|
||||
|
@ -1267,7 +1295,7 @@
|
|||
(provide commandline)
|
||||
(define (commandline . s)
|
||||
(make-paragraph (list (hspace 2) (apply tt s))))
|
||||
|
||||
|
||||
(define (elemtag t . body)
|
||||
(make-target-element #f (decode-content body) `(elem ,t)))
|
||||
(define (elemref t . body)
|
||||
|
@ -1329,21 +1357,21 @@
|
|||
"[...]"
|
||||
#;
|
||||
(make-bibliography-element
|
||||
#f
|
||||
(list "[...]")
|
||||
key
|
||||
(list (string-append
|
||||
(content->string (list author))
|
||||
", "
|
||||
(content->string (list title))))
|
||||
(list (make-element #f (list author
|
||||
", "
|
||||
title
|
||||
", "
|
||||
date
|
||||
". "
|
||||
location
|
||||
".")))))
|
||||
#f
|
||||
(list "[...]")
|
||||
key
|
||||
(list (string-append
|
||||
(content->string (list author))
|
||||
", "
|
||||
(content->string (list title))))
|
||||
(list (make-element #f (list author
|
||||
", "
|
||||
title
|
||||
", "
|
||||
date
|
||||
". "
|
||||
location
|
||||
".")))))
|
||||
|
||||
;; ----------------------------------------
|
||||
|
||||
|
@ -1444,7 +1472,8 @@
|
|||
(list (symbol->string (syntax-e (decl-name decl))))
|
||||
tag)))
|
||||
(and (decl-super decl)
|
||||
(not (module-label-identifier=? #'object% (decl-super decl)))
|
||||
(not (free-label-identifier=? (quote-syntax object%)
|
||||
(decl-super decl)))
|
||||
(register-scheme-definition (decl-super decl)))
|
||||
(map register-scheme-definition (decl-intfs decl))
|
||||
(map (lambda (m)
|
||||
|
@ -1545,17 +1574,17 @@
|
|||
(syntax-rules ()
|
||||
[(_ *include-class name super (intf ...) body ...)
|
||||
(*include-class
|
||||
(syntax-parameterize ([current-class (quote-syntax name)])
|
||||
(make-decl (quote-syntax/loc name)
|
||||
(quote-syntax/loc super)
|
||||
(list (quote-syntax/loc intf) ...)
|
||||
(lambda (whole-page?)
|
||||
(list
|
||||
(*class-doc (quote-syntax/loc name)
|
||||
(quote-syntax super)
|
||||
(list (quote-syntax intf) ...)
|
||||
whole-page?)))
|
||||
(list body ...))))]))
|
||||
(syntax-parameterize ([current-class (quote-syntax name)])
|
||||
(make-decl (quote-syntax/loc name)
|
||||
(quote-syntax/loc super)
|
||||
(list (quote-syntax/loc intf) ...)
|
||||
(lambda (whole-page?)
|
||||
(list
|
||||
(*class-doc (quote-syntax/loc name)
|
||||
(quote-syntax super)
|
||||
(list (quote-syntax intf) ...)
|
||||
whole-page?)))
|
||||
(list body ...))))]))
|
||||
|
||||
(define-syntax defclass
|
||||
(syntax-rules ()
|
||||
|
@ -1598,15 +1627,15 @@
|
|||
[(_ mode ((arg ...) ...) desc ...)
|
||||
(let ([n (syntax-parameter-value #'current-class)])
|
||||
(with-syntax ([name n]
|
||||
[result (datum->syntax-object #f
|
||||
(list
|
||||
(datum->syntax-object #'is-a?/c
|
||||
'is-a?/c
|
||||
(list 'src 1 1 2 1))
|
||||
(datum->syntax-object n
|
||||
(syntax-e n)
|
||||
(list 'src 1 3 4 1)))
|
||||
(list 'src 1 0 1 5))]
|
||||
[result (datum->syntax #f
|
||||
(list
|
||||
(datum->syntax #'is-a?/c
|
||||
'is-a?/c
|
||||
(list 'src 1 1 2 1))
|
||||
(datum->syntax n
|
||||
(syntax-e n)
|
||||
(list 'src 1 3 4 1)))
|
||||
(list 'src 1 0 1 5))]
|
||||
[(((kw ...) ...) ...) (map (lambda (ids)
|
||||
(map (lambda (arg)
|
||||
(if (and (pair? (syntax-e arg))
|
||||
|
|
|
@ -91,6 +91,6 @@
|
|||
(when (current-info-output-file)
|
||||
(let ([s (send renderer serialize-info r-info)])
|
||||
(with-output-to-file (current-info-output-file)
|
||||
#:exists 'truncate/replace
|
||||
(lambda ()
|
||||
(write s))
|
||||
'truncate/replace))))))))))
|
||||
(write s))))))))))))
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
(module scheme (lib "lang.ss" "big")
|
||||
(module scheme scheme/base
|
||||
(require "struct.ss"
|
||||
"basic.ss"
|
||||
(lib "class.ss")
|
||||
(lib "for.ss")
|
||||
(lib "main-collects.ss" "setup")
|
||||
(lib "modresolve.ss" "syntax"))
|
||||
|
||||
mzlib/class
|
||||
mzlib/for
|
||||
setup/main-collects
|
||||
syntax/modresolve
|
||||
(for-syntax scheme/base))
|
||||
|
||||
(provide define-code
|
||||
to-element
|
||||
to-element/no-color
|
||||
|
@ -19,8 +20,8 @@
|
|||
current-variable-list
|
||||
current-meta-list
|
||||
|
||||
(struct shaped-parens (val shape))
|
||||
(struct just-context (val ctx)))
|
||||
(struct-out shaped-parens)
|
||||
(struct-out just-context))
|
||||
|
||||
(define no-color "schemeplain")
|
||||
(define reader-color "schemereader")
|
||||
|
@ -219,29 +220,29 @@
|
|||
[else (let ([p2 (syntax-position (car l))])
|
||||
(if (and p2
|
||||
(p2 . > . (syntax-position a)))
|
||||
(datum->syntax-object c
|
||||
(append
|
||||
(reverse prev)
|
||||
(list
|
||||
(datum->syntax-object
|
||||
a
|
||||
(let ([val? (positive? quote-depth)])
|
||||
(make-sized-element
|
||||
(if val? value-color #f)
|
||||
(list
|
||||
(make-element (if val? value-color paren-color) '(". "))
|
||||
(typeset a #f "" "" "" (not val?))
|
||||
(make-element (if val? value-color paren-color) '(" .")))
|
||||
(+ (syntax-span a) 4)))
|
||||
(list (syntax-source a)
|
||||
(syntax-line a)
|
||||
(- (syntax-column a) 2)
|
||||
(- (syntax-position a) 2)
|
||||
(+ (syntax-span a) 4))
|
||||
a))
|
||||
l)
|
||||
c
|
||||
c)
|
||||
(datum->syntax c
|
||||
(append
|
||||
(reverse prev)
|
||||
(list
|
||||
(datum->syntax
|
||||
a
|
||||
(let ([val? (positive? quote-depth)])
|
||||
(make-sized-element
|
||||
(if val? value-color #f)
|
||||
(list
|
||||
(make-element (if val? value-color paren-color) '(". "))
|
||||
(typeset a #f "" "" "" (not val?))
|
||||
(make-element (if val? value-color paren-color) '(" .")))
|
||||
(+ (syntax-span a) 4)))
|
||||
(list (syntax-source a)
|
||||
(syntax-line a)
|
||||
(- (syntax-column a) 2)
|
||||
(- (syntax-position a) 2)
|
||||
(+ (syntax-span a) 4))
|
||||
a))
|
||||
l)
|
||||
c
|
||||
c)
|
||||
(loop (cdr l)
|
||||
(cons (car l) prev))))]))))))
|
||||
(define (no-fancy-chars s)
|
||||
|
@ -257,7 +258,7 @@
|
|||
(eq? (syntax-e (car (syntax-e c))) 'code:comment))
|
||||
(advance c init-line!)
|
||||
(out "; " comment-color)
|
||||
(let ([v (syntax-object->datum (cadr (syntax->list c)))])
|
||||
(let ([v (syntax->datum (cadr (syntax->list c)))])
|
||||
(if (paragraph? v)
|
||||
(map (lambda (v)
|
||||
(let ([v (no-fancy-chars v)])
|
||||
|
@ -289,7 +290,7 @@
|
|||
(let ([l (syntax->list c)]
|
||||
[h? highlight?])
|
||||
(unless (and l (= 2 (length l)))
|
||||
(error "bad code:redex: ~e" (syntax-object->datum c)))
|
||||
(error "bad code:redex: ~e" (syntax->datum c)))
|
||||
(advance c init-line!)
|
||||
(set! src-col (syntax-column (cadr l)))
|
||||
(hash-table-put! next-col-map src-col dest-col)
|
||||
|
@ -304,7 +305,7 @@
|
|||
(set! src-col (+ src-col 1))
|
||||
(hash-table-put! next-col-map src-col dest-col)
|
||||
((loop init-line! quote-depth)
|
||||
(datum->syntax-object #'here 'quote (car (syntax-e c))))
|
||||
(datum->syntax #'here 'quote (car (syntax-e c))))
|
||||
(for-each (loop init-line! (add1 quote-depth))
|
||||
(cdr (syntax->list c)))
|
||||
(out ")" (if (positive? quote-depth) value-color paren-color))
|
||||
|
@ -460,7 +461,7 @@
|
|||
[(elem color len)
|
||||
(make-sized-element (and color? color) (list elem) len)])
|
||||
color? 0))))
|
||||
|
||||
|
||||
(define (to-element c)
|
||||
(typeset c #f "" "" "" #t))
|
||||
|
||||
|
@ -482,7 +483,7 @@
|
|||
(cond
|
||||
[(syntax? v)
|
||||
(let ([mk `(,#'d->s
|
||||
(quote-syntax ,(datum->syntax-object v 'defcode))
|
||||
(quote-syntax ,(datum->syntax v 'defcode))
|
||||
,(syntax-case v (uncode)
|
||||
[(uncode e) #'e]
|
||||
[else (stx->loc-s-expr (syntax-e v))])
|
||||
|
@ -504,7 +505,7 @@
|
|||
[(null? v) 'null]
|
||||
[else `(quote ,v)]))
|
||||
(define (cvt s)
|
||||
(datum->syntax-object #'here (stx->loc-s-expr s) #f))
|
||||
(datum->syntax #'here (stx->loc-s-expr s) #f))
|
||||
(syntax-case stx ()
|
||||
[(_ expr) #`(typeset-code #,(cvt #'expr))]
|
||||
[(_ expr (... ...))
|
||||
|
@ -512,13 +513,13 @@
|
|||
[(_ code typeset-code uncode d->s)
|
||||
#'(define-code code typeset-code uncode d->s syntax-property)]
|
||||
[(_ code typeset-code uncode)
|
||||
#'(define-code code typeset-code uncode datum->syntax-object syntax-property)]
|
||||
#'(define-code code typeset-code uncode datum->syntax syntax-property)]
|
||||
[(_ code typeset-code) #'(define-code code typeset-code unsyntax)]))
|
||||
|
||||
|
||||
(define (register-scheme stx [warn-if-no-label? #f])
|
||||
(unless (identifier? stx)
|
||||
(error 'register-scheme-definition "not an identifier: ~e" (syntax-object->datum stx)))
|
||||
(error 'register-scheme-definition "not an identifier: ~e" (syntax->datum stx)))
|
||||
(let ([b (identifier-label-binding stx)])
|
||||
(if (or (not b)
|
||||
(eq? b 'lexical))
|
||||
|
@ -535,10 +536,10 @@
|
|||
(format ":NOLABEL:~a" (syntax-e stx)))
|
||||
#f)
|
||||
(format ":~a:~a"
|
||||
(if (module-path-index? (car b))
|
||||
(let ([p (resolve-module-path-index (car b) #f)])
|
||||
(path->main-collects-relative p))
|
||||
(car b))
|
||||
(let ([p (resolve-module-path-index (car b) #f)])
|
||||
(if (path? p)
|
||||
(path->main-collects-relative p)
|
||||
p))
|
||||
(cadr b)))))
|
||||
|
||||
(define (register-scheme/invent stx warn-if-no-label?)
|
||||
|
@ -589,11 +590,11 @@
|
|||
(shaped-parens-shape v))]
|
||||
[(just-context? v)
|
||||
(let ([s (syntax-ize (just-context-val v) col)])
|
||||
(datum->syntax-object (just-context-ctx v)
|
||||
(syntax-e s)
|
||||
s
|
||||
s
|
||||
(just-context-ctx v)))]
|
||||
(datum->syntax (just-context-ctx v)
|
||||
(syntax-e s)
|
||||
s
|
||||
s
|
||||
(just-context-ctx v)))]
|
||||
[(and (list? v)
|
||||
(pair? v)
|
||||
(memq (let ([s (car v)])
|
||||
|
@ -602,11 +603,11 @@
|
|||
s))
|
||||
'(quote unquote unquote-splicing)))
|
||||
(let ([c (syntax-ize (cadr v) (+ col 1))])
|
||||
(datum->syntax-object #f
|
||||
(list (syntax-ize (car v) col)
|
||||
c)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 1 (syntax-span c)))))]
|
||||
(datum->syntax #f
|
||||
(list (syntax-ize (car v) col)
|
||||
c)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 1 (syntax-span c)))))]
|
||||
[(or (list? v)
|
||||
(vector? v))
|
||||
(let* ([vec-sz (if (vector? v)
|
||||
|
@ -621,30 +622,30 @@
|
|||
(let ([i (syntax-ize (car v) col)])
|
||||
(cons i
|
||||
(loop (+ col 1 (syntax-span i)) (cdr v))))))])
|
||||
(datum->syntax-object #f
|
||||
(if (vector? v)
|
||||
(short-list->vector v l)
|
||||
l)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2
|
||||
vec-sz
|
||||
(if (zero? (length l))
|
||||
0
|
||||
(sub1 (length l)))
|
||||
(apply + (map syntax-span l)))))))]
|
||||
(datum->syntax #f
|
||||
(if (vector? v)
|
||||
(short-list->vector v l)
|
||||
l)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2
|
||||
vec-sz
|
||||
(if (zero? (length l))
|
||||
0
|
||||
(sub1 (length l)))
|
||||
(apply + (map syntax-span l)))))))]
|
||||
[(pair? v)
|
||||
(let* ([a (syntax-ize (car v) (+ col 1))]
|
||||
[sep (if (pair? (cdr v)) 0 3)]
|
||||
[b (syntax-ize (cdr v) (+ col 1 (syntax-span a) sep))])
|
||||
(datum->syntax-object #f
|
||||
(cons a b)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2 sep (syntax-span a) (syntax-span b)))))]
|
||||
(datum->syntax #f
|
||||
(cons a b)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2 sep (syntax-span a) (syntax-span b)))))]
|
||||
[(box? v)
|
||||
(let ([a (syntax-ize (unbox v) (+ col 2))])
|
||||
(datum->syntax-object #f
|
||||
(box a)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2 (syntax-span a)))))]
|
||||
(datum->syntax #f
|
||||
(box a)
|
||||
(list #f 1 col (+ 1 col)
|
||||
(+ 2 (syntax-span a)))))]
|
||||
[else
|
||||
(datum->syntax-object #f v (list #f 1 col (+ 1 col) 1))])))
|
||||
(datum->syntax #f v (list #f 1 col (+ 1 col) 1))])))
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
body {
|
||||
color: black;
|
||||
background-color: #ffffff;
|
||||
font-family: Times;
|
||||
}
|
||||
|
||||
table td {
|
||||
|
@ -10,44 +9,58 @@
|
|||
padding-right: 0;
|
||||
}
|
||||
|
||||
.maincolumn {
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
width: 43em;
|
||||
margin-right: -40em;
|
||||
margin-left: 15em;
|
||||
}
|
||||
|
||||
.main {
|
||||
width: 35em;
|
||||
margin-left: 12em;
|
||||
font-family: serif; font-size: 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.refpara {
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
position: relative;
|
||||
float: right;
|
||||
left: 1em;
|
||||
top: -1em;
|
||||
height: 0em;
|
||||
width: 10em;
|
||||
margin: 0em -10em 0em 0em;
|
||||
width: 13em;
|
||||
margin: 0em -13em 0em 0em;
|
||||
}
|
||||
|
||||
.refcontent {
|
||||
.refcolumn {
|
||||
background-color: #F5F5DC;
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 10em;
|
||||
width: 13em;
|
||||
font-size: 85%;
|
||||
border: 0.5em solid #F5F5DC;
|
||||
}
|
||||
|
||||
.refcontent {
|
||||
font-family: serif; font-size: 13px;
|
||||
}
|
||||
|
||||
.tocset {
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
position: relative;
|
||||
float: left;
|
||||
width: 10em;
|
||||
width: 12.5em;
|
||||
margin-right: 2em;
|
||||
}
|
||||
|
||||
.tocview {
|
||||
font-family: serif; font-size: 16px;
|
||||
text-align: left;
|
||||
background-color: #F5F5DC;
|
||||
}
|
||||
|
||||
.tocsub {
|
||||
font-family: serif; font-size: 16px;
|
||||
margin-top: 1em;
|
||||
text-align: left;
|
||||
background-color: #DCF5F5;
|
||||
|
@ -227,6 +240,10 @@
|
|||
list-style-type: upper-alpha;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
i {
|
||||
font-family: serif;
|
||||
}
|
||||
|
@ -277,10 +294,10 @@
|
|||
}
|
||||
|
||||
.hspace {
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.smaller {
|
||||
.small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
|
@ -295,7 +312,7 @@
|
|||
.schemeinput {
|
||||
color: brown;
|
||||
background-color: #eeeeee;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemeinputbg {
|
||||
|
@ -303,22 +320,22 @@
|
|||
}
|
||||
|
||||
.schemereader {
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemeparen {
|
||||
color: #843c24;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schememeta {
|
||||
color: #262680;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schememod {
|
||||
color: black;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemeopt {
|
||||
|
@ -328,7 +345,7 @@
|
|||
.schemekeyword {
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemeerror {
|
||||
|
@ -339,12 +356,12 @@
|
|||
.schemevariable {
|
||||
color: #262680;
|
||||
font-style: italic;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemesymbol {
|
||||
color: #262680;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemevaluelink {
|
||||
|
@ -374,22 +391,22 @@
|
|||
|
||||
.schemeresult {
|
||||
color: #0000af;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemestdout {
|
||||
color: #960096;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemecomment {
|
||||
color: #c2741f;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.schemevalue {
|
||||
color: #228b22;
|
||||
font-family: Courier; font-size: 80%;
|
||||
font-family: "Courier", monospace; font-size: 13px;
|
||||
}
|
||||
|
||||
.imageleft {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
|
||||
(module struct (lib "lang.ss" "big")
|
||||
(require (lib "contract.ss")
|
||||
(lib "serialize.ss"))
|
||||
(module struct scheme/base
|
||||
(require mzlib/serialize
|
||||
scheme/contract
|
||||
(for-syntax scheme/base))
|
||||
|
||||
;; ----------------------------------------
|
||||
|
||||
|
@ -50,8 +51,8 @@
|
|||
v))
|
||||
|
||||
(provide
|
||||
(struct collect-info (ht ext-ht parts tags gen-prefix))
|
||||
(struct resolve-info (ci delays undef))
|
||||
(struct-out collect-info)
|
||||
(struct-out resolve-info)
|
||||
part-collected-info
|
||||
collect-put!
|
||||
resolve-get
|
||||
|
@ -72,11 +73,11 @@
|
|||
(letrec ([get-fields (lambda (super-id)
|
||||
(ormap (lambda (id fields+cts)
|
||||
(if (identifier? id)
|
||||
(and (module-identifier=? id super-id)
|
||||
(and (free-identifier=? id super-id)
|
||||
fields+cts)
|
||||
(syntax-case id ()
|
||||
[(my-id next-id)
|
||||
(module-identifier=? #'my-id super-id)
|
||||
(free-identifier=? #'my-id super-id)
|
||||
#`[#,@(get-fields #'next-id)
|
||||
#,@fields+cts]]
|
||||
[_else #f])))
|
||||
|
@ -151,6 +152,7 @@
|
|||
|
||||
;; Delayed element has special serialization support:
|
||||
(define-struct delayed-element (resolve sizer plain)
|
||||
#:mutable
|
||||
#:property
|
||||
prop:serializable
|
||||
(make-serialize-info
|
||||
|
@ -193,6 +195,7 @@
|
|||
;; ----------------------------------------
|
||||
|
||||
(define-struct (collect-element element) (collect)
|
||||
#:mutable
|
||||
#:property
|
||||
prop:serializable
|
||||
(make-serialize-info
|
||||
|
@ -235,7 +238,7 @@
|
|||
(or (current-load-relative-directory) (current-directory))))
|
||||
|
||||
(provide
|
||||
(struct generated-tag ()))
|
||||
(struct-out generated-tag))
|
||||
|
||||
(provide deserialize-generated-tag)
|
||||
(define deserialize-generated-tag
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
@require-for-syntax[mzscheme]
|
||||
@require[(for-syntax scheme/base)]
|
||||
|
||||
@define-syntax[def-section-like
|
||||
(syntax-rules ()
|
||||
|
@ -21,7 +21,7 @@
|
|||
|
||||
@title[#:tag "basic"]{Basic Document Forms}
|
||||
|
||||
The @file{basic.ss} libraryprovides functions and forms that can be
|
||||
The @filepath{basic.ss} libraryprovides functions and forms that can be
|
||||
used from code written either in Scheme or with @elem["@"]
|
||||
expressions. For example, the @scheme[title] and @scheme[italic]
|
||||
functions might be called from Scheme as
|
||||
|
@ -40,7 +40,7 @@ EOS
|
|||
|
||||
Although the procedures are mostly design to be used from @elem["@"]
|
||||
mode, they are easier to document in Scheme mode (partly because we
|
||||
have Scribble's @file{scheme.ss} and @file{manual.ss}).
|
||||
have Scribble's @filepath{scheme.ss} and @filepath{manual.ss}).
|
||||
|
||||
@; ------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "decode"]{Text Decoder}
|
||||
|
||||
The @file{decode.ss} library helps you write document content in a
|
||||
The @filepath{decode.ss} library helps you write document content in a
|
||||
natural way---more like plain text, except for @litchar["@"] escapes.
|
||||
Roughly, it processes a stream of strings to produces instances of the
|
||||
@file{struct.ss} datatypes (see @secref["struct"]).
|
||||
@filepath{struct.ss} datatypes (see @secref["struct"]).
|
||||
|
||||
At the flow level, decoding recognizes a blank line as a paragraph
|
||||
separator. At the paragraph-content level, decoding makes just a few
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "doclang"]{Document Module Language}
|
||||
|
||||
The @file{doclang.ss} module is suitable for use as a module
|
||||
The @filepath{doclang.ss} module is suitable for use as a module
|
||||
language. It provides everything from @scheme[mzscheme], except that
|
||||
it replaces the @scheme[#%module-begin] form.
|
||||
|
||||
The @file{doclang.ss} @scheme[#%module-begin] essentially packages the
|
||||
The @filepath{doclang.ss} @scheme[#%module-begin] essentially packages the
|
||||
body of the module into a call to @scheme[decode], binds the result to
|
||||
@scheme[doc], and exports @scheme[doc].
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
@require[(lib "bnf.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require[scribble/bnf]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "docreader"]{Document Reader}
|
||||
|
||||
The @file{docreader.ss} module is suitable for use with
|
||||
The @filepath{docreader.ss} module is suitable for use with
|
||||
@schemefont{#reader} at the beginning of a file. It reads the entire
|
||||
file with @scheme[read-inside-syntax] from Scribble's
|
||||
@file{reader.ss}, and then wraps the result with @scheme[(module #,
|
||||
@filepath{reader.ss}, and then wraps the result with @scheme[(module #,
|
||||
@nonterm{name} (lib "doclang.ss" "scribble") ...)], where
|
||||
@nonterm{name} is derived from the enclosing file's name.
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "eval"]{Evaluation and Examples}
|
||||
|
||||
The @file{eval.ss} library provides utilities for evaluating code at
|
||||
The @filepath{eval.ss} library provides utilities for evaluating code at
|
||||
document-build time and incorporating the results in the document,
|
||||
especially to show example uses of defined procedures and syntax.
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#lang scribble/doc
|
||||
@require[(lib "manual.ss" "scribble")
|
||||
(lib "bnf.ss" "scribble")]
|
||||
@require[scribble/manual
|
||||
scribble/bnf]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title{How to Scribble Documentation}
|
||||
|
@ -13,13 +13,13 @@ To document a collection or @|PLaneT| package:
|
|||
@itemize{
|
||||
|
||||
@item{Create a file in your collection or planet package with the
|
||||
file extension @file{.scrbl}. The remainder of these
|
||||
instructions assume that the file is called @file{manual.scrbl}.}
|
||||
file extension @filepath{.scrbl}. The remainder of these
|
||||
instructions assume that the file is called @filepath{manual.scrbl}.}
|
||||
|
||||
@item{Start @file{manual.scrbl} like this:
|
||||
@item{Start @filepath{manual.scrbl} like this:
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))]
|
||||
@begin[(require scribble/manual)]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -35,7 +35,7 @@ EOS
|
|||
declaration in the text stream.}
|
||||
|
||||
@item{Add the following entry to your collect or package's
|
||||
@file{info.ss}:
|
||||
@filepath{info.ss}:
|
||||
|
||||
@schemeblock[
|
||||
(define scribblings '(("manual.scrbl" ())))
|
||||
|
@ -52,7 +52,7 @@ EOS
|
|||
collection name to limit the build process to the collection.}
|
||||
|
||||
@item{The generated documentation is
|
||||
@file{compiled/doc/manual/index.html} within the collection or
|
||||
@filepath{compiled/doc/manual/index.html} within the collection or
|
||||
@|PLaneT| package directory.}
|
||||
|
||||
}
|
||||
|
@ -143,11 +143,11 @@ hyperlinked to the usual definition. To cause @schemeidfont{list} to
|
|||
be hyperlinked, add the following to the @tt["@begin"] body:
|
||||
|
||||
@schemeblock[
|
||||
(require-for-label (lib "big.ss" "lang"))
|
||||
(require (for-label (lib "scheme")))
|
||||
]
|
||||
|
||||
This @scheme[require-for-label] declaration introduces a document-time
|
||||
binding for each export of the @scheme[(lib "big.ss" "lang")]
|
||||
This @scheme[require] with @scheme[for-label] declaration introduces a
|
||||
document-time binding for each export of the @scheme[(lib "scheme")]
|
||||
module. When the document is built, the @scheme[scheme] form detects
|
||||
the binding for @scheme[list], and so it generates a reference to the
|
||||
specification of @scheme[list]. The setup process detects the
|
||||
|
@ -155,15 +155,15 @@ reference, and it finds the matching specification in the existing
|
|||
documentation, and it ultimately directs the hyperlink to that
|
||||
specification.
|
||||
|
||||
Hyperlinks based on @scheme[require-for-label] and @scheme[scheme] are
|
||||
the preferred mechanism for linking to information outside of a single
|
||||
Hyperlinks based on @scheme[for-label] and @scheme[scheme] are the
|
||||
preferred mechanism for linking to information outside of a single
|
||||
document. Such links require no information about where and how a
|
||||
binding is documented elsewhere:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big"))]
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme")))]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -178,8 +178,8 @@ and it preserves the expression's formatting from the document source.
|
|||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big"))]
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme"))]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -209,8 +209,8 @@ The following example illustrates section hyperlinks:
|
|||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big"))]
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme")))]
|
||||
|
||||
|
||||
@title{My Library}
|
||||
|
@ -232,7 +232,7 @@ EOS
|
|||
]
|
||||
|
||||
Since the page is so short, it the hyperlinks are more effective if
|
||||
you change the @file{info.ss} file to add the @scheme['multi-file]
|
||||
you change the @filepath{info.ss} file to add the @scheme['multi-file]
|
||||
flag:
|
||||
|
||||
@schemeblock[
|
||||
|
@ -249,10 +249,10 @@ manual:
|
|||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big"))
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme")))
|
||||
(define ref-src
|
||||
'(lib "reference.scrbl" "scribblings" "reference"))]
|
||||
'(lib "scribblings/reference/reference.scrbl"))]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -275,16 +275,16 @@ and they declare hyperlink targets for @scheme[scheme]-based
|
|||
hyperlinks.
|
||||
|
||||
To document a @scheme[my-helper] procedure that is exported by
|
||||
@file{helper.ss} in the collection that contains @file{manual.scrbl},
|
||||
@filepath{helper.ss} in the collection that contains @filepath{manual.scrbl},
|
||||
first use @scheme[require-for-label] to import the binding information
|
||||
of @file{helper.ss}. Then use @scheme[defproc] to document the
|
||||
of @filepath{helper.ss}. Then use @scheme[defproc] to document the
|
||||
procedure:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big")
|
||||
"helper.ss")]
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme")
|
||||
"helper.ss"))]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -326,7 +326,7 @@ generates:
|
|||
|
||||
@item{If you use @scheme[my-helper] in any documentation now, as long
|
||||
as that documentation source also has a
|
||||
@scheme[require-for-label] of @file{my-helper.ss}, then the
|
||||
@scheme[require-for-label] of @filepath{my-helper.ss}, then the
|
||||
reference is hyperlinked to the definition above.}
|
||||
|
||||
}
|
||||
|
@ -337,7 +337,7 @@ on forms to document Scheme bindings.
|
|||
@; ----------------------------------------
|
||||
@section{Showing Scheme Examples}
|
||||
|
||||
The @scheme[examples] form from @scheme[(lib "eval.ss" "scribble")]
|
||||
The @scheme[examples] form from @scheme[scribble/eval]
|
||||
helps you generate examples in your documentation. @bold{Warning:} the
|
||||
@scheme[examples] form is especially likely to change or be replaced.
|
||||
|
||||
|
@ -345,16 +345,16 @@ To use @scheme[examples], the procedures to document must be suitable
|
|||
for use at documentation time; in fact, @scheme[examples] uses
|
||||
bindings introduced into the document source by
|
||||
@scheme[require]. Thus, to generate examples using @scheme[my-helper]
|
||||
from the previous section, then @file{helper.ss} must be imported both
|
||||
from the previous section, then @filepath{helper.ss} must be imported both
|
||||
via @scheme[require-for-label] and @scheme[require]:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble")
|
||||
(lib "eval.ss" "scribble") ; <--- added
|
||||
"helper.ss") ; <--- added
|
||||
(require-for-label (lib "lang.ss" "big")
|
||||
"helper.ss")]
|
||||
@begin[(require scribble/manual
|
||||
scribble/eval ; <--- added
|
||||
"helper.ss" ; <--- added
|
||||
(for-label (lib "scheme")
|
||||
"helper.ss"))]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -374,17 +374,17 @@ EOS
|
|||
@;----------------------------------------
|
||||
@section{Splitting the Document Source}
|
||||
|
||||
In general, a @file{.scrbl} file produces a @techlink{part}. A part
|
||||
In general, a @filepath{.scrbl} file produces a @techlink{part}. A part
|
||||
produced by a document's main source (as specified in the
|
||||
@scheme{info.ss} file) represents the whole document. The
|
||||
@scheme[include-section] procedure can be used to incorporate a part
|
||||
as a sub-part of the enclosing part.
|
||||
|
||||
In @file{manual.scrbl}:
|
||||
In @filepath{manual.scrbl}:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))]
|
||||
@begin[(require scribble/manual)]
|
||||
|
||||
@title{My Library}
|
||||
|
||||
|
@ -393,11 +393,11 @@ In @file{manual.scrbl}:
|
|||
EOS
|
||||
]
|
||||
|
||||
In @file{cows.scrbl}:
|
||||
In @filepath{cows.scrbl}:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))]
|
||||
@begin[(require scribble/manual)]
|
||||
|
||||
@title{Cows}
|
||||
|
||||
|
@ -405,13 +405,13 @@ In @file{cows.scrbl}:
|
|||
EOS
|
||||
]
|
||||
|
||||
In @file{aardvarks.scrbl}:
|
||||
In @filepath{aardvarks.scrbl}:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))
|
||||
(require-for-label (lib "lang.ss" "big")
|
||||
"helper.ss")]
|
||||
@begin[(require scribble/manual
|
||||
(for-label (lib "scheme")
|
||||
"helper.ss"))]
|
||||
|
||||
@title{Aardvarks}
|
||||
|
||||
|
@ -437,11 +437,11 @@ for the enclosing section (as started by @scheme[title],
|
|||
@scheme[local-table-of-contents] to generate hyperlinks to the
|
||||
sub-sections.
|
||||
|
||||
Revising @file{cows.scrbl} from the previous section:
|
||||
Revising @filepath{cows.scrbl} from the previous section:
|
||||
|
||||
@verbatim[#<<EOS
|
||||
#lang scribble/doc
|
||||
@begin[(require (lib "manual.ss" "scribble"))]
|
||||
@begin[(require scribble/manual)]
|
||||
|
||||
@title[#:style '(toc)]{Cows}
|
||||
|
||||
|
@ -455,9 +455,9 @@ Revising @file{cows.scrbl} from the previous section:
|
|||
EOS
|
||||
]
|
||||
|
||||
To run this example, remember to change @file{info.ss} to add the
|
||||
To run this example, remember to change @filepath{info.ss} to add the
|
||||
@scheme['multi-page] style. You may also want to add a call to
|
||||
@scheme[table-of-contents] in @file{manual.scrbl}.
|
||||
@scheme[table-of-contents] in @filepath{manual.scrbl}.
|
||||
|
||||
The difference between @scheme[table-of-contents] and
|
||||
@scheme[local-table-of-contents] is that the latter is ignored for
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
(module info (lib "infotab.ss" "setup")
|
||||
(module info setup/infotab
|
||||
(define name "Scribblings: Scribble")
|
||||
(define scribblings '(("scribble.scrbl" (multi-page main-doc)))))
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
@require-for-syntax[mzscheme]
|
||||
@require[(for-syntax scheme/base)]
|
||||
|
||||
@title[#:tag "manual"]{PLT Manual Forms}
|
||||
|
||||
The @file{manual.ss} module provides all of @file{basic.ss}, and
|
||||
The @filepath{manual.ss} module provides all of @filepath{basic.ss}, and
|
||||
more...
|
||||
|
||||
@; ------------------------------------------------------------------------
|
||||
|
@ -352,9 +352,9 @@ Like @scheme[defproc], but for a non-procedure binding.}
|
|||
([struct-name id
|
||||
(id super-id)]
|
||||
[flag-keywords code:blank
|
||||
#:immutable
|
||||
#:mutable
|
||||
(code:line #:inspector #f)
|
||||
(code:line #:immutable #:inspector #f)])]{
|
||||
(code:line #:mutable #:inspector #f)])]{
|
||||
|
||||
Similar to @scheme[defform] or @scheme[defproc], but for a structure
|
||||
definition.}
|
||||
|
@ -461,7 +461,7 @@ button.}
|
|||
@defproc[(menuitem [menu-name string?] [item-name string?]) element?]{
|
||||
Typesets the given combination of a GUI's menu and item name.}
|
||||
|
||||
@defproc[(file [pre-content any/c] ...) element?]{Typesets the given content
|
||||
@defproc[(filepath [pre-content any/c] ...) element?]{Typesets the given content
|
||||
as a file name (e.g., in typewriter font and in in quotes).}
|
||||
|
||||
@defproc[(exec [pre-content any/c] ...) element?]{Typesets the given content
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
@require[(lib "bnf.ss" "scribble")]
|
||||
@require[(lib "eval.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require[scribble/bnf]
|
||||
@require[scribble/eval]
|
||||
@require["utils.ss"]
|
||||
@require-for-syntax[mzscheme]
|
||||
@require[(for-syntax scheme/base)]
|
||||
|
||||
@title[#:tag "reader"]{The Scribble Reader}
|
||||
|
||||
|
@ -24,12 +24,12 @@ meaning of these S-expressions depends on the rest of your own code.
|
|||
A PLT Scheme manual more likely starts with
|
||||
|
||||
@schemeblock[
|
||||
#, @schemefont{#reader(lib "docreader.ss" "scribble")}
|
||||
#, @schemefont{#lang scribble/doc}
|
||||
]
|
||||
|
||||
which installs a reader, wraps the file content afterward into a
|
||||
MzScheme module, and parses the body into a document using
|
||||
@file{decode.ss}. See @secref["docreader"] for more information.
|
||||
@filepath{decode.ss}. See @secref["docreader"] for more information.
|
||||
|
||||
Another way to use the reader is to use the @scheme[use-at-readtable]
|
||||
function to switch the current readtable to a readtable that parses
|
||||
|
@ -721,7 +721,7 @@ an example of this.
|
|||
@;--------------------------------------------------------------------
|
||||
@section{Interface}
|
||||
|
||||
The @file{reader.ss} module provides functionality for advanced needs.
|
||||
The @filepath{reader.ss} module provides functionality for advanced needs.
|
||||
|
||||
@; The `with-scribble-read' trick below shadows `read' and
|
||||
@; `read-syntax' with for-label bindings from the Scribble reader
|
||||
|
@ -731,7 +731,7 @@ The @file{reader.ss} module provides functionality for advanced needs.
|
|||
[(_)
|
||||
(...
|
||||
(begin
|
||||
(require-for-label (lib "reader.ss" "scribble"))
|
||||
(require (for-label scribble/reader))
|
||||
|
||||
@; *** Start reader-import section ***
|
||||
@defproc[(read [in input-port? (current-input-port)]) any]{}
|
||||
|
@ -750,7 +750,7 @@ in reading.
|
|||
These @schemeid[-inside] variants parse as if starting inside a
|
||||
@litchar["@{"]...@litchar["}"], and they return a (syntactic) list.
|
||||
Useful for implementing languages that are textual by default (see
|
||||
@file{docreader.ss} for example).
|
||||
@filepath{docreader.ss} for example).
|
||||
}
|
||||
|
||||
@defform[(make-at-readtable [keyword-args ...])]{
|
||||
|
@ -821,4 +821,4 @@ keyword arguments are used with `make-at-readtable'.
|
|||
@; *** End reader-import section ***
|
||||
))])]
|
||||
@with-scribble-read[]
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
@require-for-label[(lib "class.ss")]
|
||||
@require[(for-label scheme/class)]
|
||||
|
||||
@title[#:tag "renderer"]{Renderer}
|
||||
|
||||
|
@ -13,11 +13,11 @@ tends to be format-independent, and it usually implemented completely
|
|||
by the base renderer. The latter method generates the actual output,
|
||||
which is naturally specific to a particular format.
|
||||
|
||||
The @file{base-render.ss} module provides @scheme[render%], which
|
||||
implements the core of a renderer. The @file{html-renderer.ss},
|
||||
@file{latex-renderer.ss}, and @file{text-renderer.ss} modules each
|
||||
The @filepath{base-render.ss} module provides @scheme[render%], which
|
||||
implements the core of a renderer. The @filepath{html-renderer.ss},
|
||||
@filepath{latex-renderer.ss}, and @filepath{text-renderer.ss} modules each
|
||||
provide @scheme[renderer-mixin] to extend the base. The
|
||||
@file{html-renderer.ss} module also provides
|
||||
@filepath{html-renderer.ss} module also provides
|
||||
@scheme[multi-renderer-mixin] to produce multi-file HTML instead
|
||||
instead of single-file HTML.
|
||||
|
||||
|
@ -26,9 +26,9 @@ to the renderers. For example, the @exec{scribble} command-line tool
|
|||
might, in the future, extract rendering mixins from a document module
|
||||
(in addition to the document proper).
|
||||
|
||||
See @file{base-render.ss} for more information about the methods of
|
||||
See @filepath{base-render.ss} for more information about the methods of
|
||||
the renderer. Documents built with higher layers, such as
|
||||
@file{manual.ss}, generally do not call the render object's methods
|
||||
@filepath{manual.ss}, generally do not call the render object's methods
|
||||
directly.
|
||||
|
||||
@defclass[render% object% ()]{
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#lang scribble/doc
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
@require[(lib "bnf.ss" "scribble")]
|
||||
@require[scribble/manual]
|
||||
@require[scribble/bnf]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag-prefix '(lib "scribble.scrbl" "scribblings" "scribble")
|
||||
@title[#:tag-prefix '(lib "scribblings/scribble/scribble.scrbl")
|
||||
#:tag "top"]{PLT Scribble}
|
||||
|
||||
The @file{scribble} collection provides libraries that can be used to
|
||||
The @filepath{scribble} collection provides libraries that can be used to
|
||||
create documents from Scheme.
|
||||
|
||||
@table-of-contents[]
|
||||
|
@ -26,51 +26,51 @@ The layers are:
|
|||
|
||||
@itemize{
|
||||
|
||||
@item{@file{reader.ss}: a reader that extends the syntax of Scheme
|
||||
@item{@filepath{reader.ss}: a reader that extends the syntax of Scheme
|
||||
with @"@"-forms for conveniently embedding a mixin of text and
|
||||
escapes. See @secref["reader"].}
|
||||
|
||||
@item{@file{struct.ss}: a set of document datatypes and utilities
|
||||
@item{@filepath{struct.ss}: a set of document datatypes and utilities
|
||||
that define the basic layout and processing of a document. See
|
||||
@secref["struct"].}
|
||||
|
||||
@item{@file{base-render.ss} with @file{html-render.ss},
|
||||
@file{latex-render.ss}, or @file{text-render.ss}: A base
|
||||
@item{@filepath{base-render.ss} with @filepath{html-render.ss},
|
||||
@filepath{latex-render.ss}, or @filepath{text-render.ss}: A base
|
||||
renderer and mixins that generate documents in various formats
|
||||
from instances of the @file{struct.ss} datatypes. See
|
||||
from instances of the @filepath{struct.ss} datatypes. See
|
||||
@secref["renderer"].}
|
||||
|
||||
@item{@file{decode.ss}: Processes a stream of text, section-start
|
||||
markers, etc. to produce instances of the @file{struct.ss}
|
||||
@item{@filepath{decode.ss}: Processes a stream of text, section-start
|
||||
markers, etc. to produce instances of the @filepath{struct.ss}
|
||||
datatypes. See @secref["decode"].}
|
||||
|
||||
@item{@file{doclang.ss}: to be used for the initial import of a
|
||||
@item{@filepath{doclang.ss}: to be used for the initial import of a
|
||||
module; processes the module top level through
|
||||
@file{decode.ss}, and otherwise provides all of
|
||||
@filepath{decode.ss}, and otherwise provides all of
|
||||
@schememodname[big]. See @secref["doclang"].}
|
||||
|
||||
@item{@file{docreader.ss}: a reader that is meant to tbe used to
|
||||
@item{@filepath{docreader.ss}: a reader that is meant to tbe used to
|
||||
process an entire file; it essentially combines
|
||||
@file{reader.ss} with @file{doclang.ss}. See
|
||||
@filepath{reader.ss} with @filepath{doclang.ss}. See
|
||||
@secref["docreader"].}
|
||||
|
||||
@item{@file{basic.ss}: a library of basic document operators---such
|
||||
@item{@filepath{basic.ss}: a library of basic document operators---such
|
||||
as @scheme[title], @scheme[section], and @scheme[secref]---for
|
||||
use with @file{decode.ss} and a renderer. See
|
||||
use with @filepath{decode.ss} and a renderer. See
|
||||
@secref["basic"].}
|
||||
|
||||
@item{@file{scheme.ss}: a library of support functions for
|
||||
@item{@filepath{scheme.ss}: a library of support functions for
|
||||
typesetting Scheme code.}
|
||||
|
||||
@item{@file{manual.ss}: a library of support functions for writing
|
||||
PLT Scheme documentation; re-exports @file{basic.ss}. See
|
||||
@item{@filepath{manual.ss}: a library of support functions for writing
|
||||
PLT Scheme documentation; re-exports @filepath{basic.ss}. See
|
||||
@secref["manual"].}
|
||||
|
||||
@item{@file{eval.ss}: a library of support functions for ealuating
|
||||
@item{@filepath{eval.ss}: a library of support functions for ealuating
|
||||
code at document-build time, especially for showing
|
||||
examples. See @secref["eval"].}
|
||||
|
||||
@item{@file{bnf.ss}: a library of support functions for writing
|
||||
@item{@filepath{bnf.ss}: a library of support functions for writing
|
||||
grammars.}
|
||||
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ exports a @scheme{struct.ss}-based document, generating output with a
|
|||
specified renderer. More specifically, the executable installs a
|
||||
renderer, loads the specified modules and extracts the @scheme[doc]
|
||||
export of each (which must be an instance of @scheme[section] from
|
||||
@file{struct.ss}), and renders each. Use @exec{scribble -h} for more
|
||||
@filepath{struct.ss}), and renders each. Use @exec{scribble -h} for more
|
||||
information.
|
||||
|
||||
@; ------------------------------------------------------------------------
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "struct"]{Document Structures And Processing}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#reader(lib "docreader.ss" "scribble")
|
||||
@require[(lib "manual.ss" "scribble")]
|
||||
#lang scribble/doc
|
||||
@require[scribble/manual]
|
||||
@require["utils.ss"]
|
||||
|
||||
@title[#:tag "reference-style"]{Style Guide}
|
||||
|
|
|
@ -1,27 +1,29 @@
|
|||
|
||||
(module utils mzscheme
|
||||
(require (lib "struct.ss" "scribble")
|
||||
(lib "manual.ss" "scribble")
|
||||
(prefix scheme: (lib "scheme.ss" "scribble"))
|
||||
(prefix scribble: (lib "reader.ss" "scribble"))
|
||||
(lib "string.ss"))
|
||||
(module utils scheme/base
|
||||
(require scribble/struct
|
||||
scribble/manual
|
||||
(prefix-in scheme: scribble/scheme)
|
||||
(prefix-in scribble: scribble/reader))
|
||||
|
||||
(define-syntax bounce-for-label
|
||||
(syntax-rules ()
|
||||
(syntax-rules (all-except)
|
||||
[(_ (all-except mod (id ...) (id2 ...)))
|
||||
(begin
|
||||
(require (for-label (except-in mod id ...)))
|
||||
(provide (for-label (except-out (all-from-out mod) id2 ...))))]
|
||||
[(_ mod) (begin
|
||||
(require-for-label mod)
|
||||
(provide-for-label (all-from mod)))]
|
||||
(require (for-label mod))
|
||||
(provide (for-label (all-from-out mod))))]
|
||||
[(_ mod ...) (begin (bounce-for-label mod) ...)]))
|
||||
|
||||
(bounce-for-label (lib "lang.ss" "big")
|
||||
(lib "struct.ss" "scribble")
|
||||
(lib "base-render.ss" "scribble")
|
||||
(lib "decode.ss" "scribble")
|
||||
(lib "basic.ss" "scribble")
|
||||
(lib "manual.ss" "scribble")
|
||||
(lib "scheme.ss" "scribble")
|
||||
(lib "eval.ss" "scribble")
|
||||
(lib "bnf.ss" "scribble"))
|
||||
(bounce-for-label (all-except scheme (link) ())
|
||||
scribble/struct
|
||||
scribble/base-render
|
||||
scribble/decode
|
||||
scribble/manual
|
||||
scribble/scheme
|
||||
scribble/eval
|
||||
scribble/bnf)
|
||||
|
||||
(provide scribble-examples litchar/lines)
|
||||
|
||||
|
@ -56,7 +58,7 @@
|
|||
[accum null])
|
||||
(cond
|
||||
[(null? e)
|
||||
(datum->syntax-object
|
||||
(datum->syntax
|
||||
p
|
||||
(reverse accum)
|
||||
(list (syntax-source p)
|
||||
|
@ -77,7 +79,7 @@
|
|||
(or second next-pos)
|
||||
(cons v accum)))]))]
|
||||
[else
|
||||
(datum->syntax-object
|
||||
(datum->syntax
|
||||
p
|
||||
(syntax-e p)
|
||||
(list (syntax-source p)
|
||||
|
@ -101,9 +103,9 @@
|
|||
(let ([str (substring lines p1 p2)])
|
||||
(loop (cons (list str stx) r)
|
||||
(or newlines? (regexp-match? #rx#"\n" str))))
|
||||
(let* ([r (reverse! r)]
|
||||
(let* ([r (reverse r)]
|
||||
[r (if newlines?
|
||||
(cdr (apply append! (map (lambda (x) (list #f x)) r)))
|
||||
(cdr (apply append (map (lambda (x) (list #f x)) r)))
|
||||
r)])
|
||||
(make-table
|
||||
#f
|
||||
|
|
Loading…
Reference in New Issue
Block a user