diff --git a/collects/scribble/html-render.ss b/collects/scribble/html-render.ss index 3f26a912..8de6dccb 100644 --- a/collects/scribble/html-render.ss +++ b/collects/scribble/html-render.ss @@ -482,7 +482,11 @@ (if (current-no-links) (super render-element e part ri) (parameterize ([current-no-links #t]) - `((a ((href ,(target-url-addr style)) + `((a ((href ,(let ([addr (target-url-addr style)]) + (if (path? addr) + (from-root addr + (get-dest-directory)) + addr))) ,@(if (string? (target-url-style style)) `((class ,(target-url-style style))) null)) @@ -586,11 +590,19 @@ '(wbr) `(span ((class "mywbr")) " ")) (render-other (substring i (cdar m)) part ri)) - (list i)))] + (ascii-ize i)))] [(eq? i 'mdash) `(" " ndash " ")] [(eq? i 'hline) `((hr))] [(symbol? i) (list i)] [else (list (format "~s" i))])) + + (define/private (ascii-ize s) + (let ([m (regexp-match-positions #rx"[^\u01-\u7E]" s)]) + (if m + (append (ascii-ize (substring s 0 (caar m))) + (list (char->integer (string-ref s (caar m)))) + (ascii-ize (substring s (cdar m)))) + (list s)))) ;; ---------------------------------------- diff --git a/collects/scribble/struct.ss b/collects/scribble/struct.ss index c18c6fb0..b17ef6b1 100644 --- a/collects/scribble/struct.ss +++ b/collects/scribble/struct.ss @@ -175,7 +175,7 @@ [parent (or/c false/c part?)] [info any/c])] - [target-url ([addr string?][style any/c])] + [target-url ([addr (or/c string? path?)][style any/c])] [url-anchor ([name string?])] [image-file ([path path-string?])]) diff --git a/collects/scribblings/scribble/manual.scrbl b/collects/scribblings/scribble/manual.scrbl index d82087d7..df234cb1 100644 --- a/collects/scribblings/scribble/manual.scrbl +++ b/collects/scribblings/scribble/manual.scrbl @@ -4,13 +4,15 @@ (for-syntax scheme/base) (for-label scribble/manual-struct)) -@title[#:tag "manual"]{Manual Forms} +@title[#:tag "manual" #:style 'toc]{Manual Forms} @defmodule[scribble/manual]{The @schememodname[scribble/manual] library provides all of @schememodname[scribble/basic], plus additional functions that are relatively specific to writing PLT Scheme documentation.} +@local-table-of-contents[] + @; ------------------------------------------------------------------------ @section[#:tag "scribble:manual:code"]{Typesetting Code} @@ -180,7 +182,7 @@ procedure, but use @scheme[var] if that cannot work for some reason.} in a form definition.} @; ------------------------------------------------------------------------ -@section{Documenting Modules} +@section[#:tag "doc-modules"]{Documenting Modules} @defform[(defmodule id pre-flow ...)]{ @@ -238,7 +240,7 @@ list of @scheme[module-path]s is shown, for example, when the user hovers the mouse over one of the bindings defined within the section.} @; ------------------------------------------------------------------------ -@section{Documenting Forms, Functions, Structure Types, and Values} +@section[#:tag "doc-forms"]{Documenting Forms, Functions, Structure Types, and Values} @defform/subs[(defproc prototype result-contract-expr-datum @@ -476,7 +478,7 @@ Like @scheme[schemegrammar], but for typesetting multiple productions at once, aligned around the @litchar{=} and @litchar{|}.} @; ------------------------------------------------------------------------ -@section{Documenting Classes and Interfaces} +@section[#:tag "doc-classes"]{Documenting Classes and Interfaces} @defform[(defclass id super-id (intf-id ...) pre-flow ...)]{ @@ -575,7 +577,40 @@ Like @scheme[method], but the hyperlink shows both the method name and the containing class/interface.} @; ------------------------------------------------------------------------ -@section{Various String Forms} +@section[#:tag "doc-signatures"]{Documenting Signature} + +@defform[(defsignature id (super-id ...) pre-flow ...)]{ + +Defines a signature @scheme[id] that extends the @scheme[super-id] +signatures. Any elements defined in @tech{decode}d +@scheme[pre-flow]s---including forms, procedures, structure types, +classes, interfaces, and mixins---are defined as members of the +signature instead of direct bindings. These definitions can be +referenced through @scheme[sigelem] instead of @scheme[scheme]. + +The @tech{decode}d @scheme[pre-flow]s inset under the signature +declaration in the typeset output, so no new sections, @|etc| can be +started.} + +@defform[(defsignature/splice id (super-id ...) pre-flow ...)]{ + +Like @scheme[defsignature], but the @tech{decode}d @scheme[pre-flow]s +are not typeset under the signature declaration, and new sections, +@|etc| can be started in the @scheme[pre-flow]s.} + +@defproc[(signature-desc [pre-flow any/c] ...) any/c]{ + +Produces an opaque value that @scheme[defsignature] recognizes to +outdent in the typeset form. This is useful for text describing the +signature as a whole to appear right after the signature declaration.} + +@defform[(sigelem sig-id id)]{ + +Typesets the identifier @scheme[id] with a hyperlink to its definition +as a member of the signature named by @scheme[sig-id].} + +@; ------------------------------------------------------------------------ +@section[#:tag "doc-strings"]{Various String Forms} @defproc[(emph [pre-content any/c] ...) element?]{Typesets the @tech{decode}d @scheme[pre-content] with emphasis (e.g., in italic).} @@ -636,7 +671,7 @@ Extensions to @scheme[math] are likely, such as recognizing @litchar{_} and @litchar{^} for subscripts and superscripts.} @; ------------------------------------------------------------------------ -@section[#:tag "scribble:manual:section-links"]{Links} +@section[#:tag "section-links"]{Links} @defproc[(secref [tag string?] [#:doc module-path (or/c module-path? false/c) #f] @@ -865,7 +900,7 @@ an inset command-line example (e.g., in typewriter font).} a paragraph to be typeset in the margin instead of inlined.} @; ------------------------------------------------------------------------ -@section{Index-Entry Descriptions} +@section[#:tag "index-entries"]{Index-Entry Descriptions} @defmodule[scribble/manual-struct]{The @schememodname[scribble/manual-struct] library provides types used to