bkyk8rc3zvpnsf5inmcqq4n3k98cv6hj-my-site-hyper-literate-git.test.suzanne.soy-0.0.1

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit cdc89f9685e4ad312e9db2abae7452c15333a6b4
parent 3af3acb27fea49ea7744e632d8f30be11712ec9f
Author: Greg Hendershott <greghendershott@gmail.com>
Date:   Tue, 11 Dec 2012 14:06:24 -0500

Render `@hyperlink` in Markdown.

Render Scribble like

    @hyperlink["url" "content"]

as Markdown like

    [content](url)

Note that this only works for `@hyperlink`. The motivation is to
preserve content the author has explicitly written. (Previously,
`markdown-render.rkt` was discarding this; `text-render.rkt` still
does so.)

This does _not_ attempt to handle everything that `html-render.rkt`
would automatically generate and render as `<a>`. It simply can't --
things like hotlinked Racket keywords in code blocks simply won't work
in Markdown.

original commit: dbffc840a93ceb142c59df4a533ced0b41b8e4fa

Diffstat:
Mcollects/scribble/markdown-render.rkt | 38+++++++++++++++++++++++++++++---------
Mcollects/tests/scribble/markdown-docs/example.md | 2++
Mcollects/tests/scribble/markdown-docs/example.scrbl | 2++
3 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/collects/scribble/markdown-render.rkt b/collects/scribble/markdown-render.rkt @@ -1,6 +1,6 @@ #lang racket/base (require "core.rkt" "base-render.rkt" - racket/class racket/port racket/list racket/string + racket/class racket/port racket/list racket/string racket/match scribble/text/wrap) (provide render-mixin) @@ -151,6 +151,12 @@ (newline) null) + (define/private (content-style e) + (cond + [(element? e) (element-style e)] + [(multiarg-element? e) (multiarg-element-style e)] + [else #f])) + (define/override (render-content i part ri) (define tick? (and (zero? (table-ticks-depth)) @@ -164,15 +170,29 @@ (when (zero? (phrase-ticks-depth)) (display "`")) (phrase-ticks-depth (add1 (phrase-ticks-depth)))) + (define properties (let ([s (content-style i)]) + (if (style? s) (style-properties s) '()))) + (define targ (for/or ([p properties]) + (if (target-url? p) p #f))) + (define url (and targ (target-url-addr targ))) (begin0 - (if (and (element? i) - (let ([s (element-style i)]) - (or (eq? 'hspace s) - (and (style? s) - (eq? 'hspace (style-name s)))))) - (parameterize ([current-preserve-spaces #t]) - (super render-content i part ri)) - (super render-content i part ri)) + (cond [url + (define new-i + (match (element-content i) + [(list (? string? s)) + (element (element-style i) + (list (format "[~a](~a)" s url)))] + [else i])) + (super render-content new-i part ri)] + [(and (element? i) + (let ([s (element-style i)]) + (or (eq? 'hspace s) + (and (style? s) + (eq? 'hspace (style-name s)))))) + (parameterize ([current-preserve-spaces #t]) + (super render-content i part ri))] + [else + (super render-content i part ri)]) (when tick? (phrase-ticks-depth (sub1 (phrase-ticks-depth))) (when (zero? (phrase-ticks-depth)) diff --git a/collects/tests/scribble/markdown-docs/example.md b/collects/tests/scribble/markdown-docs/example.md @@ -8,6 +8,8 @@ ## 1. Section +[I am a hyperlink to Racket.](http://www.racket-lang.org/) + Italic. \_Just underlines\_. Bold. \*Just asterisks.\* diff --git a/collects/tests/scribble/markdown-docs/example.scrbl b/collects/tests/scribble/markdown-docs/example.scrbl @@ -12,6 +12,8 @@ @section{Section} +@hyperlink["http://www.racket-lang.org/" "I am a hyperlink to Racket."] + @italic{Italic}. _Just underlines_.