commit ea7c1d38f01ac2f83b1b5dbd0b3a144b0b108152
parent 5d62e4e0059cdd21e213c075186b46096b4a9bb2
Author: Matthew Flatt <mflatt@racket-lang.org>
Date: Wed, 29 Jul 2009 13:15:50 +0000
defmodulelang and schememodlink changes to split lang text and module path
svn: r15619
original commit: 970a796bc678c8e6c8223a39e646e8c19daf42db
Diffstat:
3 files changed, 87 insertions(+), 43 deletions(-)
diff --git a/collects/scribble/private/manual-mod.ss b/collects/scribble/private/manual-mod.ss
@@ -11,7 +11,9 @@
(for-syntax scheme/base)
(for-label scheme/base))
-(provide defmodule defmodule* defmodulelang defmodulelang* defmodulereader defmodulereader*
+(provide defmodule defmodule*
+ defmodulelang defmodulelang*
+ defmodulereader defmodulereader*
defmodule*/no-declare defmodulelang*/no-declare defmodulereader*/no-declare
declare-exporting)
@@ -22,6 +24,7 @@
[(_ #:require-form req (name ...) . content)
(*defmodule (list (schememodname name) ...)
#f
+ #f
(list . content)
req)]
[(_ (name ...) . content)
@@ -46,22 +49,34 @@
[(_ name . content)
(defmodule* (name) . content)]))
-(define-syntax-rule (defmodulelang*/no-declare (lang ...) . content)
- (*defmodule (list (schememodname lang) ...) #t (list . content) #f))
+(define-syntax defmodulelang*/no-declare
+ (syntax-rules ()
+ [(_ (lang ...) #:module-paths (modpath ...) . content)
+ (*defmodule (list lang ...) (list (schememodname modpath) ...) #t (list . content) #f)]
+ [(_ (lang ...) . content)
+ (*defmodule (list (schememodname lang) ...) #f #t (list . content) #f)]))
(define-syntax defmodulelang*
(syntax-rules ()
+ [(_ (name ...) #:module-paths (modpath ...) #:use-sources (pname ...) . content)
+ (begin (declare-exporting modpath ... #:use-sources (pname ...))
+ (defmodulelang*/no-declare (name ...) #:module-paths (modpath ...) . content))]
+ [(_ (name ...) #:module-paths (modpath ...) . content)
+ (defmodulelang* (name ...) #:module-paths (modpath ...) #:use-sources () . content)]
[(_ (name ...) #:use-sources (pname ...) . content)
- (begin (declare-exporting name ... #:use-sources (pname ...))
- (defmodulelang*/no-declare (name ...) . content))]
+ (defmodulelang* ((schememodname name) ...) #:module-paths (name ...) #:use-sources (pname ...) . content)]
[(_ (name ...) . content)
(defmodulelang* (name ...) #:use-sources () . content)]))
-(define-syntax-rule (defmodulelang lang . content)
- (defmodulelang* (lang) . content))
+(define-syntax defmodulelang
+ (syntax-rules ()
+ [(_ lang #:module-path modpath . content)
+ (defmodulelang* (lang) #:module-paths (modpath) . content)]
+ [(_ lang . content)
+ (defmodulelang* (lang) . content)]))
(define-syntax-rule (defmodulereader*/no-declare (lang ...) . content)
- (*defmodule (list (schememodname lang) ...) 'reader (list . content) #f))
+ (*defmodule (list (schememodname lang) ...) #f 'reader (list . content) #f))
(define-syntax defmodulereader*
(syntax-rules ()
@@ -74,35 +89,42 @@
(define-syntax-rule (defmodulereader lang . content)
(defmodulereader* (lang) . content))
-(define (*defmodule names lang content req)
- (make-splice
- (cons
- (make-table
- "defmodule"
- (map
- (lambda (name)
- (list
- (make-flow
+(define (*defmodule names modpaths lang content req)
+ (let ([modpaths (or modpaths names)])
+ (make-splice
+ (cons
+ (make-table
+ "defmodule"
+ (map
+ (lambda (name modpath)
(list
- (make-omitable-paragraph
- (cons
- spacer
- (if lang
- (if (eq? lang 'reader)
- (list (schememetafont "#reader") spacer (make-defschememodname name))
- (list (hash-lang) spacer (make-defschememodname name)))
- (list (scheme (#,req #,(make-defschememodname name)))))))))))
- names))
- (append (map (lambda (name)
- (make-part-tag-decl `(mod-path ,(element->string name))))
- names)
- (flow-paragraphs (decode-flow content))))))
+ (make-flow
+ (list
+ (make-omitable-paragraph
+ (cons
+ spacer
+ (case lang
+ [(#f)
+ (list (scheme (#,req #,(make-defschememodname name modpath))))]
+ [(#t)
+ (list (hash-lang) spacer (make-defschememodname name modpath))]
+ [(reader)
+ (list (schememetafont "#reader") spacer (make-defschememodname name modpath))]
+ [(just-lang)
+ (list (hash-lang) spacer (make-defschememodname name modpath))])))))))
+ names
+ modpaths))
+ (append (map (lambda (modpath)
+ (make-part-tag-decl `(mod-path ,(element->string modpath))))
+ modpaths)
+ (flow-paragraphs (decode-flow content)))))))
-(define (make-defschememodname mn)
- (let ([name-str (element->string mn)])
+(define (make-defschememodname mn mp)
+ (let ([name-str (element->string mn)]
+ [path-str (element->string mp)])
(make-index-element #f
(list mn)
- `(mod-path ,name-str)
+ `(mod-path ,path-str)
(list name-str)
(list mn)
(make-module-path-index-desc))))
diff --git a/collects/scribble/private/manual-scheme.ss b/collects/scribble/private/manual-scheme.ss
@@ -15,7 +15,8 @@
schemeblockelem
schemeinput
schememod
- scheme SCHEME scheme/form schemeresult schemeid schememodname
+ scheme SCHEME scheme/form schemeresult schemeid
+ schememodname schememodlink
indexed-scheme
schemelink)
@@ -104,12 +105,20 @@
[(schememodname n)
(as-modname-link 'n (*schememodname n))]))
+(define-syntax schememodlink
+ (syntax-rules (unsyntax)
+ [(schememodlink n content ...)
+ (*as-modname-link 'n (elem #:style #f content ...))]))
+
(define (as-modname-link s e)
(if (symbol? s)
- (make-link-element module-link-color
- (list e)
- `(mod-path ,(symbol->string s)))
- e))
+ (*as-modname-link s e)
+ e))
+
+(define (*as-modname-link s e)
+ (make-link-element module-link-color
+ (list e)
+ `(mod-path ,(format "~s" s))))
(define-syntax-rule (indexed-scheme x)
(add-scheme-index 'x (scheme x)))
diff --git a/collects/scribblings/scribble/manual.scrbl b/collects/scribblings/scribble/manual.scrbl
@@ -163,6 +163,11 @@ is an identifier or @scheme[expr] produces a symbol, then it is
hyperlinked to the module path's definition as created by
@scheme[defmodule].}
+@defform[(schememodlink datum pre-content-expr ...)]{
+Like @scheme[schememodlink], but separating the module path to link
+from the content to be linked. The @scheme[datum] module path is always
+linked, even if it is not an identifier.}
+
@defproc[(litchar [str string?]) element?]{Typesets @scheme[str] as a
representation of literal text. Use this when you have to talk about
the individual characters in a stream of text, as as when documenting
@@ -284,11 +289,15 @@ Hyperlinks created by @scheme[schememodname] are associated with the
enclosing section, rather than the local @scheme[id] text.}
-@defform[(defmodulelang id maybe-sources pre-flow ...)]{
+@defform*[[(defmodulelang id maybe-sources pre-flow ...)
+ (defmodulelang content-expr #:module-paths (mod-path ...)
+ maybe-sources pre-flow ...)]]{
Like @scheme[defmodule], but documents @scheme[id] as a module path
-suitable for use by either @scheme[require] or @schememodfont{#lang}.}
-
+suitable for use by either @scheme[require] or @hash-lang[]. If the
+module path for @scheme[require] is syntactically different from the
+@hash-lang[] form, use the @scheme[#:module-paths] to provide them
+separately.}
@defform[(defmodulereader id maybe-sources pre-flow ...)]{
@@ -298,7 +307,9 @@ suitable for use with @schememetafont{#reader}.}
@deftogether[(
@defform[(defmodule* maybe-req (id ...+) maybe-sources pre-flow ...)]
-@defform[(defmodulelang* (id ...+) maybe-sources pre-flow ...)]
+@defform*[[(defmodulelang* (id ...+) maybe-sources pre-flow ...)
+ (defmodulelang* (content-expr ...+) #:module-paths (mod-path ...+)
+ maybe-sources pre-flow ...)]]
@defform[(defmodulereader* (id ...+) maybe-sources pre-flow ...)]
)]{
@@ -307,7 +318,9 @@ of just one.}
@deftogether[(
@defform[(defmodule*/no-declare maybe-req (id ...) pre-flow ...)]
-@defform[(defmodulelang*/no-declare (id ...) pre-flow ...)]
+@defform*[[(defmodulelang*/no-declare (id ...) pre-flow ...)
+ (defmodulelang*/no-declare (content-expr ...)
+ #:module-paths (mod-path ...+) pre-flow ...)]]
@defform[(defmodulereader*/no-declare (id ...) pre-flow ...)]
)]{