Scribble: add `alt-tag' HTML property to set HTML tag in output

This commit is contained in:
Matthew Flatt 2011-04-04 14:32:55 -06:00
parent f50c480446
commit c38118f0e5
3 changed files with 45 additions and 11 deletions

View File

@ -13,4 +13,5 @@
[extra-files (listof (or/c path-string? (cons/c 'collects (listof bytes?))))])] [extra-files (listof (or/c path-string? (cons/c 'collects (listof bytes?))))])]
[url-anchor ([name string?])] [url-anchor ([name string?])]
[alt-tag ([name (and/c string? #rx"^[a-zA-Z0-9]+$")])]
[attributes ([assoc (listof (cons/c symbol? string?))])]) [attributes ([assoc (listof (cons/c symbol? string?))])])

View File

@ -146,7 +146,12 @@
(if (string? name) (if (string? name)
(cons `[class ,name] (cons `[class ,name]
a) a)
a)))) a))))
(define (style->tag style)
(for/or ([s (in-list (style-properties style))])
(and (alt-tag? s)
(string->symbol (alt-tag-name s)))))
(define (make-search-box top-path) ; appears on every page (define (make-search-box top-path) ; appears on every page
(let ([sa string-append] (let ([sa string-append]
@ -917,7 +922,10 @@
(not (style-name style)) (not (style-name style))
(null? attrs)) (null? attrs))
contents contents
`((,(if (memq 'div (style-properties style)) 'div 'p) `((,(or (style->tag style)
(if (memq 'div (style-properties style))
'div
'p))
[,@attrs [,@attrs
,@(case (style-name style) ,@(case (style-name style)
[(author) '([class "author"])] [(author) '([class "author"])]
@ -1115,6 +1123,10 @@
(if (style? s) (if (style? s)
(style-name s) (style-name s)
s))] s))]
[alt-tag
(let ([s (content-style e)])
(and (style? s)
(style->tag s)))]
[link? (and (ormap target-url? properties) [link? (and (ormap target-url? properties)
(not (current-no-links)))] (not (current-no-links)))]
[anchor? (ormap url-anchor? properties)] [anchor? (ormap url-anchor? properties)]
@ -1148,7 +1160,8 @@
(if (and (null? attribs) (if (and (null? attribs)
(not link?) (not link?)
(not anchor?) (not anchor?)
(not newline?)) (not newline?)
(not alt-tag))
content content
`(,@(if anchor? `(,@(if anchor?
(append-map (lambda (v) (append-map (lambda (v)
@ -1158,6 +1171,7 @@
properties) properties)
null) null)
(,(cond (,(cond
[alt-tag alt-tag]
[link? 'a] [link? 'a]
[newline? 'br] [newline? 'br]
[else 'span]) [else 'span])
@ -1267,8 +1281,10 @@
(nested-flow-blocks t))))) (nested-flow-blocks t)))))
(define/override (render-compound-paragraph t part ri starting-item?) (define/override (render-compound-paragraph t part ri starting-item?)
`((p ,(style->attribs (compound-paragraph-style t)) (let ([style (compound-paragraph-style t)])
,@(super render-compound-paragraph t part ri starting-item?)))) `((,(or (style->tag style) 'p)
,(style->attribs style)
,@(super render-compound-paragraph t part ri starting-item?)))))
(define/override (render-itemization t part ri) (define/override (render-itemization t part ri)
(let ([style-str (or (and (string? (style-name (itemization-style t))) (let ([style-str (or (and (string? (style-name (itemization-style t)))

View File

@ -420,13 +420,17 @@ The currently recognized @tech{style properties} are as follows:
content.} content.}
@item{@racket['div] --- Generates @tt{<div>} HTML output instead of @item{@racket['div] --- Generates @tt{<div>} HTML output instead of
@tt{<p>}.} @tt{<p>} (unless a @racket[alt-tag] property is provided).}
@item{@racket[alt-tag] structure --- Generates the indicated HTML tag
instead of @tt{<p>} or @tt{<div>}.}
@item{@racket[attributes] structure --- Provides additional HTML @item{@racket[attributes] structure --- Provides additional HTML
attributes for the @tt{<p>} or @tt{<div>} tag.} attributes for the @tt{<p>}, @tt{<div>}, or alternate tag.}
@item{@racket[body-id] structure --- For HTML, uses the given string @item{@racket[body-id] structure --- For HTML, uses the given string
as an @tt{id} attribute of the @tt{<p>} or @tt{<div>} tag.} as an @tt{id} attribute of the @tt{<p>}, @tt{<div>}, or
alternate tag.}
@item{@racket['never-indents] --- For Latex and @tech{compound @item{@racket['never-indents] --- For Latex and @tech{compound
paragraphs}; see @racket[compound-paragraph].} paragraphs}; see @racket[compound-paragraph].}
@ -597,11 +601,14 @@ for Latex output (see @secref["extra-style"]). The following
name} is used as a command name instead of an environment name} is used as a command name instead of an environment
name.} name.}
@item{@racket[alt-tag] structure --- Generates the given HTML tag
instead of @tt{<p>}.}
@item{@racket[attributes] structure --- Provides additional HTML @item{@racket[attributes] structure --- Provides additional HTML
attributes for the @tt{<p>} tag.} attributes for the @tt{<p>} or alternate tag.}
@item{@racket[body-id] structure --- For HTML, uses the given string @item{@racket[body-id] structure --- For HTML, uses the given string
as an @tt{id} attribute of the @tt{<p>} tag.} as an @tt{id} attribute of the @tt{<p>} or alternate tag.}
@item{@racket['never-indents] --- For Latex within another @item{@racket['never-indents] --- For Latex within another
@tech{compound paragraph}; see above.} @tech{compound paragraph}; see above.}
@ -696,8 +703,11 @@ The following @tech{style properties} are currently recognized:
@item{@racket[background-color-property] structure --- Applies a color to the @item{@racket[background-color-property] structure --- Applies a color to the
background of @racket[content].} background of @racket[content].}
@item{@racket[alt-tag] structure --- Generates the given HTML tag
instead of the default one (@tt{<span>}, @tt{b}, @|etc|).}
@item{@racket[attributes] structure --- Provides additional HTML @item{@racket[attributes] structure --- Provides additional HTML
attributes for a @tt{<span>} tag.} attributes for a tag.}
@item{@racket[hover-property] structure --- For HTML, adds a text @item{@racket[hover-property] structure --- For HTML, adds a text
label to the content to be shown when the mouse hovers over label to the content to be shown when the mouse hovers over
@ -1213,6 +1223,13 @@ Defined as
Used as a @tech{style property} to add arbitrary attributes to an HTML Used as a @tech{style property} to add arbitrary attributes to an HTML
tag.} tag.}
@defstruct[alt-tag ([name (and/c string? #rx"^[a-zA-Z0-9]+$")])]{
Use as a @tech{style property} for an @racket[element],
@racket[paragraph], or @racket[compound-paragraph] to substitute an
alternate HTML tag (instead of @tt{<span>}, @tt{<p>}, @tt{div},
@|etc|).}
@defstruct[url-anchor ([name string?])]{ @defstruct[url-anchor ([name string?])]{