From 1c5b304b1bcc0c037f1992e51a893f785a608875 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 1 Feb 2013 09:37:13 -0800 Subject: [PATCH] Scribble: add 'grouper and 'hidden-number part style properties Also, clean up documentation and implementation of 'unnumbered and 'hidden. original commit: c0c2eda628c5786c18d29a3071087e268bd76109 --- collects/scribble/base-render.rkt | 120 +++++++++++++----- collects/scribble/core.rkt | 2 +- collects/scribble/html-render.rkt | 11 +- collects/scribble/latex-render.rkt | 71 ++++++++--- collects/scribble/markdown-render.rkt | 34 +++-- collects/scribble/scribble.tex | 45 +++++-- collects/scribble/text-render.rkt | 27 ++-- collects/scribblings/scribble/core.scrbl | 65 ++++++---- .../tests/scribble/docs/grouper-sub.scrbl | 41 ++++++ collects/tests/scribble/docs/grouper-sub.txt | 48 +++++++ collects/tests/scribble/docs/grouper.scrbl | 46 +++++++ collects/tests/scribble/docs/grouper.txt | 52 ++++++++ 12 files changed, 447 insertions(+), 115 deletions(-) create mode 100644 collects/tests/scribble/docs/grouper-sub.scrbl create mode 100644 collects/tests/scribble/docs/grouper-sub.txt create mode 100644 collects/tests/scribble/docs/grouper.scrbl create mode 100644 collects/tests/scribble/docs/grouper.txt diff --git a/collects/scribble/base-render.rkt b/collects/scribble/base-render.rkt index b62d686d..f0241ffe 100644 --- a/collects/scribble/base-render.rkt +++ b/collects/scribble/base-render.rkt @@ -39,7 +39,9 @@ render-nested-flow render-block render-other - get-dest-directory)) + get-dest-directory + format-number + number-depth)) (define render% (class* object% (render<%>) @@ -70,19 +72,46 @@ (define/public (format-number number sep) (if (or (null? number) - (andmap not number)) - null - (cons (let ([s (apply - string-append - (map (lambda (n) (if n (format "~s." n) "")) - (reverse number)))]) - (substring s 0 (sub1 (string-length s)))) - sep))) + (andmap not number) + (and (not (car number)) + (not (ormap number? number)))) + null + (cons (let ([s (string-append + (apply + string-append + (map (lambda (n) (if (number? n) (format "~a." n) "")) + (reverse (cdr number)))) + (if (car number) (format "~a." (car number)) ""))]) + (substring s 0 (sub1 (string-length s)))) + sep))) + + (define/public (number-depth number) + (if (null? number) + 0 + (+ 1 (for/sum ([i (in-list (cdr number))]) (if (not (string? i)) 1 0))))) (field [report-output?? #f]) (define/public (report-output?) report-output??) (define/public (report-output!) (set! report-output?? #t)) + ;; should work up to 3999: + (define/private (number->roman n) + (let loop ([n n] + [I #\I] [V #\V] + [X #\X] [L #\L] + [C #\C] [D #\D] + [M #\M]) + (case n + [(0) ""] + [(1 2 3) (make-string n I)] + [(4) (string I V)] + [(5) (string V)] + [(6 7 8) (string-append (string V) (make-string (- n 5) I))] + [(9) (string I X)] + [else + (string-append (loop (quotient n 10) X L C D M D M) + (loop (modulo n 10) I V X L C D M))]))) + ;; ---------------------------------------- (define/public (extract-part-style-files d ri tag stop-at-part? pred extract) @@ -447,10 +476,10 @@ ci)) (define/public (start-collect ds fns ci) - (map (lambda (d) (collect-part d #f ci null)) + (map (lambda (d) (collect-part d #f ci null 1)) ds)) - (define/public (collect-part d parent ci number) + (define/public (collect-part d parent ci number init-sub-number) (let ([p-ci (make-collect-info (collect-info-fp ci) (make-hash) @@ -469,33 +498,54 @@ (make-collected-info number parent (collect-info-ht p-ci))) - (parameterize ([current-tag-prefixes - (extend-prefix d (fresh-tag-collect-context? d p-ci))]) - (when (part-title-content d) - (collect-content (part-title-content d) p-ci)) - (collect-part-tags d p-ci number) - (collect-content (part-to-collect d) p-ci) - (collect-flow (part-blocks d) p-ci) - (let loop ([parts (part-parts d)] - [pos 1]) - (unless (null? parts) - (let ([s (car parts)]) - (collect-part s d p-ci - (cons (if (part-style? s 'unnumbered) - #f - pos) - number)) - (loop (cdr parts) - (if (part-style? s 'unnumbered) - pos - (add1 pos))))))) + (define grouper? (and (pair? number) (part-style? d 'grouper))) + (define next-sub-number + (parameterize ([current-tag-prefixes + (extend-prefix d (fresh-tag-collect-context? d p-ci))]) + (when (part-title-content d) + (collect-content (part-title-content d) p-ci)) + (collect-part-tags d p-ci number) + (collect-content (part-to-collect d) p-ci) + (collect-flow (part-blocks d) p-ci) + (let loop ([parts (part-parts d)] + [pos init-sub-number] + [sub-pos 1]) + (if (null? parts) + pos + (let ([s (car parts)]) + (define unnumbered? (part-style? s 'unnumbered)) + (define hidden-number? (or unnumbered? + (part-style? s 'hidden-number))) + (define sub-grouper? (part-style? s 'grouper)) + (define next-sub-pos + (collect-part s d p-ci + (cons (if hidden-number? + #f + (if sub-grouper? + (number->roman pos) + pos)) + (if hidden-number? + (for/list ([i (in-list number)]) + (if (string? i) + i + #f)) + number)) + sub-pos)) + (loop (cdr parts) + (if unnumbered? + pos + (add1 pos)) + (if sub-grouper? + next-sub-pos + 1))))))) (let ([prefix (part-tag-prefix d)]) (for ([(k v) (collect-info-ht p-ci)]) (when (cadr k) (collect-put! ci (if prefix (convert-key prefix k) k) - v)))))) + v)))) + next-sub-number)) (define/private (convert-key prefix k) (case (car k) @@ -950,7 +1000,11 @@ (convert-key prefix t)))))) subs)]) (if (and (= 1 (length number)) - (or (not (car number)) ((car number) . > . 1))) + (or (not (car number)) + (and (number? (car number)) + ((car number) . > . 1)) + (and (string? (car number)) + (not (string=? (car number) "I"))))) (cons (list (make-paragraph plain (list (make-element 'hspace (list ""))))) diff --git a/collects/scribble/core.rkt b/collects/scribble/core.rkt index 07bbb99b..8789b715 100644 --- a/collects/scribble/core.rkt +++ b/collects/scribble/core.rkt @@ -207,7 +207,7 @@ [center-name string?] [bottom-name string?])] - [collected-info ([number (listof (or/c false/c integer?))] + [collected-info ([number (listof (or/c false/c exact-nonnegative-integer? string?))] [parent (or/c false/c part?)] [info any/c])]) diff --git a/collects/scribble/html-render.rkt b/collects/scribble/html-render.rkt index e69ab902..de97f54d 100644 --- a/collects/scribble/html-render.rkt +++ b/collects/scribble/html-render.rkt @@ -220,6 +220,7 @@ install-file get-dest-directory format-number + number-depth quiet-table-of-contents extract-part-style-files extract-version @@ -280,7 +281,7 @@ (map (lambda (d fn) (parameterize ([current-output-file fn] [current-top-part d]) - (collect-part d #f ci null))) + (collect-part d #f ci null 1))) ds fns)) @@ -916,7 +917,7 @@ (add-current-tag-prefix (tag-key t ri)))))))) (part-tags d))] - [else `((,(case (length number) + [else `((,(case (number-depth number) [(0) 'h2] [(1) 'h3] [(2) 'h4] @@ -1542,7 +1543,7 @@ orig-s)) (hash-set! (current-part-files) s #t))) - (define/override (collect-part d parent ci number) + (define/override (collect-part d parent ci number sub-init-number) (let ([prev-sub (collecting-sub)]) (parameterize ([collecting-sub (if (part-style? d 'toc) 1 @@ -1555,8 +1556,8 @@ filename)]) (check-duplicate-filename full-filename) (parameterize ([current-output-file full-filename]) - (super collect-part d parent ci number))) - (super collect-part d parent ci number))))) + (super collect-part d parent ci number sub-init-number))) + (super collect-part d parent ci number sub-init-number))))) (define/override (render ds fns ri) (map (lambda (d fn) diff --git a/collects/scribble/latex-render.rkt b/collects/scribble/latex-render.rkt index f12ebf11..b433889b 100644 --- a/collects/scribble/latex-render.rkt +++ b/collects/scribble/latex-render.rkt @@ -56,6 +56,7 @@ render-part install-file format-number + number-depth extract-part-style-files extract-version extract-date @@ -148,32 +149,62 @@ (for ([pre (in-list pres)]) (printf "\n\n") (do-render-paragraph pre d ri #t #f))) + (define depth (+ (number-depth number) (or (render-part-depth) 0))) + (define grouper? (part-style? d 'grouper)) + (define (inc-section-number) + (printf "\\Sinc~a" (case depth + [(0 1) (if grouper? "part" "section")] + [(2) "subsection"] + [(3) "subsubsection"] + [(4) "subsubsubsection"] + [else "subsubsubsubsection"]))) (cond [completely-hidden? - (printf "\n\n\\notitlesection")] + (printf "\n\n\\notitlesection") + (unless (part-style? d 'unnumbered) + (inc-section-number))] [else - (let ([no-number? (and (pair? number) - (or (not (car number)) - ((length number) . > . 3)))]) - (printf "\n\n\\~a~a~a" - (case (+ (length number) (or (render-part-depth) 0)) - [(0 1) "sectionNewpage\n\n\\Ssection"] - [(2) "Ssubsection"] - [(3) "Ssubsubsection"] - [(4) "Ssubsubsubsection"] - [else "Ssubsubsubsubsection"]) - (if (and (part-style? d 'hidden) (not no-number?)) - "hidden" "") - (if no-number? "star" "")) - (when (not (or (part-style? d 'hidden) no-number?)) - (printf "{") - (parameterize ([disable-images #t] - [escape-brackets #t]) - (render-content (part-title-content d) d ri)) - (printf "}"))) + (define no-number? (and (pair? number) + (or (not (car number)) + ((length number) . > . 3)))) + (define no-toc? (part-style? d 'toc-hidden)) + (define (show-number) + (when (and (part-style? d 'grouper) + (depth . > . 1) + (not no-number?)) + (printf "~a\\quad{}" (car (format-number number null))))) + (printf "\n\n\\~a~a~a" + (case depth + [(0 1) (if grouper? + "partNewpage\n\n\\Spart" + "sectionNewpage\n\n\\Ssection")] + [(2) "Ssubsection"] + [(3) "Ssubsubsection"] + [(4) "Ssubsubsubsection"] + [else "Ssubsubsubsubsection"]) + (if (and grouper? + (depth . > . 1)) + "grouper" + "") + (if no-number? + (if no-toc? + "star" + "starx") + "")) + (unless (and no-number? no-toc?) + (printf "{") + (show-number) + (parameterize ([disable-images #t] + [escape-brackets #t]) + (render-content (part-title-content d) d ri)) + (printf "}")) (printf "{") + (show-number) (render-content (part-title-content d) d ri) (printf "}") + (when (and (part-style? d 'hidden-number) + (not (part-style? d 'unnumbered))) + (inc-section-number)) (when (eq? (style-name (part-style d)) 'index) (printf "\n\n"))])) (for ([t (part-tags d)]) (printf "\\label{t:~a}~a" (t-encode (add-current-tag-prefix (tag-key t ri))) diff --git a/collects/scribble/markdown-render.rkt b/collects/scribble/markdown-render.rkt index 2934070b..5f532e87 100644 --- a/collects/scribble/markdown-render.rkt +++ b/collects/scribble/markdown-render.rkt @@ -1,5 +1,7 @@ #lang racket/base -(require "core.rkt" "base-render.rkt" +(require "core.rkt" + "base-render.rkt" + "private/render-utils.rkt" racket/class racket/port racket/list racket/string racket/match scribble/text/wrap) (provide render-mixin) @@ -35,20 +37,28 @@ (#rx"''" "\U201D") (#rx"'" "\U2019"))) - (inherit render-block) + (inherit render-block + format-number + number-depth) (define/override (render-part d ht) (let ([number (collected-info-number (part-collected-info d ht))]) - (unless (zero? (length number)) - (printf (make-string (length number) #\#)) - (printf " ")) - (for ([n (in-list (reverse number))] #:when n) (printf "~s." n)) - (when (part-title-content d) - (when (ormap values number) (printf " ")) - (render-content (part-title-content d) d ht)) - (when (or (ormap values number) (part-title-content d)) - (newline) - (newline)) + (unless (part-style? d 'hidden) + (unless (zero? (number-depth number)) + (printf (make-string (number-depth number) #\#)) + (printf " ")) + (let ([s (format-number number '())]) + (unless (null? s) + (printf "~a.~a" + (car s) + (if (part-title-content d) + " " + ""))) + (when (part-title-content d) + (render-content (part-title-content d) d ht)) + (when (or (pair? number) (part-title-content d)) + (newline) + (newline)))) (render-flow (part-blocks d) d ht #f) (let loop ([pos 1] [secs (part-parts d)] diff --git a/collects/scribble/scribble.tex b/collects/scribble/scribble.tex index 5d36fc5a..34a58fd9 100644 --- a/collects/scribble/scribble.tex +++ b/collects/scribble/scribble.tex @@ -19,6 +19,8 @@ % Inserted before every ``chapter'', useful for starting each one on a new page: \newcommand{\sectionNewpage}{} +% Inserted before every book ``part'' +\newcommand{\partNewpage}{\sectionNewpage} % Hooks for actions within the `document' environment: \newcommand{\preDoc}{} @@ -153,36 +155,57 @@ \newcommand{\SNumberOfAuthors}[1]{} % sections +\newcommand{\Spart}[2]{\part[#1]{#2}} \newcommand{\Ssection}[2]{\section[#1]{#2}} \newcommand{\Ssubsection}[2]{\subsection[#1]{#2}} \newcommand{\Ssubsubsection}[2]{\subsubsection[#1]{#2}} \newcommand{\Ssubsubsubsection}[2]{{\bf #2}} \newcommand{\Ssubsubsubsubsection}[2]{\Ssubsubsubsection{#1}{#2}} +% "star" means unnumbered and not in ToC: +\newcommand{\Spartstar}[1]{\part*{#1}} \newcommand{\Ssectionstar}[1]{\section*{#1}} \newcommand{\Ssubsectionstar}[1]{\subsection*{#1}} \newcommand{\Ssubsubsectionstar}[1]{\subsubsection*{#1}} \newcommand{\Ssubsubsubsectionstar}[1]{{\bf #1}} \newcommand{\Ssubsubsubsubsectionstar}[1]{\Ssubsubsubsectionstar{#1}} -\newcommand{\Ssectionhidden}[1]{\sectionhidden{#1}} -\newcommand{\Ssubsectionhidden}[1]{\subsectionhidden{#1}} -\newcommand{\Ssubsubsectionhidden}[1]{\subsubsectionhidden{#1}} -\newcommand{\Ssubsubsubsectionhidden}[1]{\subsubsubsectionhidden{#1}} -\newcommand{\Ssubsubsubsubsectionhidden}[1]{\Ssubsubsubsectionhidden{#1}} +% "starx" means unnumbered but in ToC: +\newcommand{\Spartstarx}[2]{\Spartstar{#2}\addcontentsline{toc}{part}{#1}} +\newcommand{\Ssectionstarx}[2]{\Ssectionstar{#2}\addcontentsline{toc}{section}{#1}} +\newcommand{\Ssubsectionstarx}[2]{\Ssubsectionstar{#2}\addcontentsline{toc}{subsection}{#1}} +\newcommand{\Ssubsubsectionstarx}[2]{\Ssubsubsectionstar{#2}\addcontentsline{toc}{subsubsection}{#1}} +\newcommand{\Ssubsubsubsectionstarx}[2]{\Ssubsubsubsectionstar{#2}} +\newcommand{\Ssubsubsubsubsectionstarx}[2]{\Ssubsubsubsubsectionstar{#2}} -% Used for parts with the 'hidden style variant: -\newcommand{\sectionhidden}[1]{\Ssection{#1}{#1}} -\newcommand{\subsectionhidden}[1]{\Ssubsection{#1}{#1}} -\newcommand{\subsubsectionhidden}[1]{\Ssubsubsection{#1}{#1}} -\newcommand{\subsubsubsectionhidden}[1]{\Ssubsubsubsection{#1}{#1}} +% "grouper" is for the 'grouper style variant --- on subsections and lower, +% because \Spart is used for grouper at the section level. Grouper implies +% unnumbered. +\newcounter{GrouperTemp} +\newcommand{\Ssubsectiongrouper}[2]{\setcounter{GrouperTemp}{\value{subsection}}\Ssubsectionstarx{#1}{#2}\setcounter{subsection}{\value{GrouperTemp}}} +\newcommand{\Ssubsubsectiongrouper}[2]{\setcounter{GrouperTemp}{\value{subsubsection}}\Ssubsubsectionstarx{#1}{#2}\setcounter{subsubsection}{\value{GrouperTemp}}} +\newcommand{\Ssubsubsubsectiongrouper}[2]{\Ssubsubsubsectionstarx{#1}{#2}} +\newcommand{\Ssubsubsubsubsectiongrouper}[2]{\Ssubsubsubsubsectionstarx{#1}{#2}} + +\newcommand{\Ssubsectiongrouperstar}[1]{\setcounter{GrouperTemp}{\value{subsection}}\Ssubsectionstar{#1}\setcounter{subsection}{\value{GrouperTemp}}} +\newcommand{\Ssubsubsectiongrouperstar}[1]{\setcounter{GrouperTemp}{\value{subsubsection}}\Ssubsubsectionstar{#1}\setcounter{subsubsection}{\value{GrouperTemp}}} +\newcommand{\Ssubsubsubsectiongrouperstar}[1]{\Ssubsubsubsectionstar{#1}} +\newcommand{\Ssubsubsubsubsectiongrouperstar}[1]{\Ssubsubsubsubsectionstar{#1}} % Generated by `subsubsub*section': -\newcommand{\SSubSubSubSection}[1]{\Ssubsubsubsubsectionhidden{#1}} +\newcommand{\SSubSubSubSection}[1]{\Ssubsubsubsubsectionstar{#1}} % For hidden parts with an empty title: \newcommand{\notitlesection}{\vspace{2ex}\phantomsection\noindent} +% To increments section numbers: +\newcommand{\Sincpart}{\stepcounter{part}} +\newcommand{\Sincsection}{\stepcounter{section}} +\newcommand{\Sincsubsection}{\stepcounter{subsection}} +\newcommand{\Sincsubsubsection}{\stepcounter{subsubsection}} +\newcommand{\Sincsubsubsubsection}{} +\newcommand{\Sincsubsubsubsubsection}{} + % When brackets appear in section titles: \newcommand{\SOpenSq}{[} \newcommand{\SCloseSq}{]} diff --git a/collects/scribble/text-render.rkt b/collects/scribble/text-render.rkt index 082b8763..d8484b80 100644 --- a/collects/scribble/text-render.rkt +++ b/collects/scribble/text-render.rkt @@ -1,5 +1,7 @@ #lang racket/base -(require "core.rkt" "base-render.rkt" +(require "core.rkt" + "base-render.rkt" + "private/render-utils.rkt" racket/class racket/port racket/list racket/string scribble/text/wrap) (provide render-mixin) @@ -29,17 +31,24 @@ (#rx"''" "\U201D") (#rx"'" "\U2019"))) - (inherit render-block) + (inherit render-block + format-number) (define/override (render-part d ht) (let ([number (collected-info-number (part-collected-info d ht))]) - (for ([n (in-list (reverse number))] #:when n) (printf "~s." n)) - (when (part-title-content d) - (when (ormap values number) (printf " ")) - (render-content (part-title-content d) d ht)) - (when (or (ormap values number) (part-title-content d)) - (newline) - (newline)) + (unless (part-style? d 'hidden) + (let ([s (format-number number '())]) + (unless (null? s) + (printf "~a.~a" + (car s) + (if (part-title-content d) + " " + ""))) + (when (part-title-content d) + (render-content (part-title-content d) d ht)) + (when (or (pair? number) (part-title-content d)) + (newline) + (newline)))) (render-flow (part-blocks d) d ht #f) (let loop ([pos 1] [secs (part-parts d)] diff --git a/collects/scribblings/scribble/core.scrbl b/collects/scribblings/scribble/core.scrbl index 87ab5306..0594cdf6 100644 --- a/collects/scribblings/scribble/core.scrbl +++ b/collects/scribblings/scribble/core.scrbl @@ -332,9 +332,9 @@ searching for information in each enclosing part before sibling parts. @section{Structure Reference} -@defstruct[part ([tag-prefix (or/c false/c string?)] +@defstruct[part ([tag-prefix (or/c #f string?)] [tags (listof tag?)] - [title-content (or/c false/c list?)] + [title-content (or/c #f list?)] [style style?] [to-collect list?] [blocks (listof block?)] @@ -362,9 +362,28 @@ The recognized @tech{style properties} are as follows: @itemize[ - @item{@racket['unnumbered] --- A section number is computed for an - unnumbered section during the @techlink{collect pass}, but the - number is not rendered.} + @item{@racket['unnumbered] --- A section number is not computed or + rendered for the section.} + + @item{@racket['hidden-number] --- A section number is computed for + the section, but it is not rendered as part of the section name.} + + @item{@racket['toc-hidden] --- The part title is not shown in tables + of contents, including in ``on this page'' boxes. For Latex + rendering, the part title is omitted only if it is unnumbered + or has a hidden number.} + + @item{@racket['hidden] --- The part title is not shown; for Latex + output, the part title is not shown only if its is empty, and + in that case, it is also excluded from tables of contents. The + @racket['toc-hidden] style usually should be included with + @racket['hidden] (for consistency in non-Latex output).} + + @item{@racket['grouper] --- The part is numbered with a Roman + numeral, and its subsections continue numbering as if they + appeared in the preceeding part. In other works, the part acts + like a ``part'' in a book where chapter numbering is continuous + across parts.} @item{@racket['toc] --- Sub-parts of the part are rendered on separate pages for multi-page HTML mode.} @@ -377,14 +396,6 @@ The recognized @tech{style properties} are as follows: displayed in a table-of-contents panel in HTML output (which normally shows only the top-level sections).} - @item{@racket['hidden] --- The part title is not shown in rendered - HTML output, and the part title is not shown in Latex output if it - is empty. The @racket['toc-hidden] style usually should be - included with @racket['hidden].} - - @item{@racket['toc-hidden] --- The part title is not shown in tables - of contents, including in ``on this page'' boxes.} - @item{@racket['quiet] --- In HTML output and most other output modes, hides entries for sub-parts of this part in a @racket[table-of-contents] or @racket[local-table-of-contents] @@ -509,7 +520,7 @@ The currently recognized @tech{style properties} are as follows: @defstruct[table ([style style?] - [blockss (listof (listof (or/c block? (one-of/c 'cont))))])]{ + [blockss (listof (listof (or/c block? 'cont)))])]{ See also the @racket[tabular] function. @@ -997,11 +1008,17 @@ If a @racket[render-element] instance is serialized (such as when saving collected info), it is reduced to a @racket[element] instance.} -@defstruct[collected-info ([number (listof (or/c false/c integer?))] - [parent (or/c false/c part?)] +@defstruct[collected-info ([number (listof (or/c #f exact-nonnegative-integer? string?))] + [parent (or/c #f part?)] [info any/c])]{ -Computed for each part by the @techlink{collect pass}.} +Computed for each part by the @techlink{collect pass}. + +The length of the @racket[number] list indicates the section's nesting +depth. Numbers in @racket[number] correspond to the section's number, +it's parent's number, etc. A string is used for a @racket['grouping] +section, and @racket[#f] is used in place of all numbers for an +unnumbered section.} @defstruct[target-url ([addr path-string?])]{ @@ -1011,13 +1028,13 @@ allowed for @racket[addr], but a string is interpreted as a URL rather than a file path.} -@defstruct[document-version ([text (or/c string? false/c)])]{ +@defstruct[document-version ([text (or/c string? #f)])]{ Used as a @tech{style property} for a @racket[part] to indicate a version number.} -@defstruct[document-date ([text (or/c string? false/c)])]{ +@defstruct[document-date ([text (or/c string? #f)])]{ Used as a @tech{style property} for a @racket[part] to indicate a date (which is typically used for Latex output).} @@ -1251,7 +1268,7 @@ only during the @techlink{collect pass}. } -@defproc[(resolve-get [p (or/c part? false/c)] [ri resolve-info?] [key info-key?]) +@defproc[(resolve-get [p (or/c part? #f)] [ri resolve-info?] [key info-key?]) any/c]{ Extract information during the @techlink{resolve pass} or @@ -1267,7 +1284,7 @@ documentation. } -@defproc[(resolve-get/ext? [p (or/c part? false/c)] [ri resolve-info?] [key info-key?]) +@defproc[(resolve-get/ext? [p (or/c part? #f)] [ri resolve-info?] [key info-key?]) (values any/c boolean?)]{ Like @racket[render-get], but returns a second value to indicate @@ -1275,7 +1292,7 @@ whether the resulting information originated from an external source (i.e., a different document).} -@defproc[(resolve-search [dep-key any/c] [p (or/c part? false/c)] [ri resolve-info?] [key info-key?]) +@defproc[(resolve-search [dep-key any/c] [p (or/c part? #f)] [ri resolve-info?] [key info-key?]) void?]{ Like @racket[resolve-get], but a shared @racket[dep-key] groups @@ -1289,7 +1306,7 @@ mean that an earlier attempt would succeed next time). } -@defproc[(resolve-get/tentative [p (or/c part? false/c)] [ri resolve-info?] [key info-key?]) +@defproc[(resolve-get/tentative [p (or/c part? #f)] [ri resolve-info?] [key info-key?]) any/c]{ Like @racket[resolve-search], but without dependency tracking. For @@ -1299,7 +1316,7 @@ is suitable for use only for information within a single document. } -@defproc[(resolve-get-keys [p (or/c part? false/c)] +@defproc[(resolve-get-keys [p (or/c part? #f)] [ri resolve-info?] [pred (info-key? . -> . any/c)]) list?]{ diff --git a/collects/tests/scribble/docs/grouper-sub.scrbl b/collects/tests/scribble/docs/grouper-sub.scrbl new file mode 100644 index 00000000..28cf7a85 --- /dev/null +++ b/collects/tests/scribble/docs/grouper-sub.scrbl @@ -0,0 +1,41 @@ +#lang scribble/manual + +@title{Hello} + +@table-of-contents[] + +@section{One} + +@subsection{A Section} + +@subsubsection{A Subsection} + +This is some prose. + +@subsubsection{A Subsection, Revisited} + +This is also some prose. + + +@section{Two} + +@subsection[#:style 'grouper]{Another Section} + +@subsubsection{Another Subsection} + +More prose. + +@subsubsection{Another Subsection, Revisited} + +More prose, also. + +@subsection[#:style 'grouper]{Third Section} + +@subsubsection{Yet Another Subsection} + +Yet more prose. + +@subsubsection{Yet Another Subsection, Revisited} + +Yet more prose, also. + diff --git a/collects/tests/scribble/docs/grouper-sub.txt b/collects/tests/scribble/docs/grouper-sub.txt new file mode 100644 index 00000000..dda44f58 --- /dev/null +++ b/collects/tests/scribble/docs/grouper-sub.txt @@ -0,0 +1,48 @@ +Hello + +    1 One +      1.1 A Section +        1.1.1 A Subsection +        1.1.2 A Subsection, Revisited + +    2 Two +      2.I Another Section +        2.1 Another Subsection +        2.2 Another Subsection, Revisited +      2.II Third Section +        2.3 Yet Another Subsection +        2.4 Yet Another Subsection, Revisited + +1. One + +1.1. A Section + +1.1.1. A Subsection + +This is some prose. + +1.1.2. A Subsection, Revisited + +This is also some prose. + +2. Two + +2.I. Another Section + +2.1. Another Subsection + +More prose. + +2.2. Another Subsection, Revisited + +More prose, also. + +2.II. Third Section + +2.3. Yet Another Subsection + +Yet more prose. + +2.4. Yet Another Subsection, Revisited + +Yet more prose, also. diff --git a/collects/tests/scribble/docs/grouper.scrbl b/collects/tests/scribble/docs/grouper.scrbl new file mode 100644 index 00000000..f3b8054d --- /dev/null +++ b/collects/tests/scribble/docs/grouper.scrbl @@ -0,0 +1,46 @@ +#lang scribble/manual + +@title{Hello} + +@table-of-contents[] + +@section[#:style 'grouper]{One} + +@subsection{A Section} + +@subsubsection{A Subsection} + +This is some prose. + +@subsubsection{A Subsection, Revisited} + +This is also some prose. + + +@section[#:style 'grouper]{Two} + +@subsection{Another Section} + +@subsubsection{Another Subsection} + +More prose. + +@subsubsection[#:style 'unnumbered]{>> Unnumbered Subsection} + +Nothing to see here. + +@subsubsection{Another Subsection, Revisited} + +More prose, also. + +@subsubsection[#:style 'hidden-number]{>> Hidden Number} + +Nothing to see here, either. + +@subsubsection{Last Subsection} + +The last subsection has some prose. + +@subsection[#:style '(hidden toc-hidden)]{} + +This is actually in a hidden section. diff --git a/collects/tests/scribble/docs/grouper.txt b/collects/tests/scribble/docs/grouper.txt new file mode 100644 index 00000000..7d7ee1b8 --- /dev/null +++ b/collects/tests/scribble/docs/grouper.txt @@ -0,0 +1,52 @@ +Hello + +    I One +      1 A Section +        1.1 A Subsection +        1.2 A Subsection, Revisited + +    II Two +      2 Another Section +        2.1 Another Subsection +        >> Unnumbered Subsection +        2.2 Another Subsection, Revisited +        >> Hidden Number +        2.4 Last Subsection + +I. One + +1. A Section + +1.1. A Subsection + +This is some prose. + +1.2. A Subsection, Revisited + +This is also some prose. + +II. Two + +2. Another Section + +2.1. Another Subsection + +More prose. + +>> Unnumbered Subsection + +Nothing to see here. + +2.2. Another Subsection, Revisited + +More prose, also. + +>> Hidden Number + +Nothing to see here, either. + +2.4. Last Subsection + +The last subsection has some prose. + +This is actually in a hidden section.