From 58fab5c3a660607c74aeeb8b3044d9c31e7ef5a7 Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Wed, 27 Mar 2013 10:08:05 -0400 Subject: [PATCH] Combine adjacent code spans into one. These result from something like @racket[(x y)] being treated by Scribble as multiple RktXXX items rather than one. As a result the Markdown emitted was: `(``x`` ``y``)` But obviously instead we want: `(x y)` Kludgosity alert: Although it would probably be more-correct to consolidate the RktXXX items at the Scribble structure level, I don't easily see how. `@racket` is baking in the concept of Racket lexing (classifying text as various kinds of Racket elements). This is handy when the render will be HTML or Latek, and is benignly N/A when it will be plain text. But it's a bit square-peg/round-hole when the render will be Markdown. Rather than attempt to "un-lex" the Scribble structures (I'm having trouble seeing how), I'm handling it "after-the-fact" -- adjusting the generated Markdown text. If anyone thinks the preceding is an elaborate rationalization for an ugly kludge, I wouldn't argue, but I would need some help understanding the preferable way to go about it. original commit: 59bba2d197a42448d21c7f899d197b890adc7c9e --- collects/scribble/markdown-render.rkt | 12 +++++++++++- collects/tests/scribble/markdown-docs/example.md | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/collects/scribble/markdown-render.rkt b/collects/scribble/markdown-render.rkt index b50faa3c..c271588f 100644 --- a/collects/scribble/markdown-render.rkt +++ b/collects/scribble/markdown-render.rkt @@ -160,7 +160,17 @@ (define o (open-output-string)) (parameterize ([current-output-port o]) (super render-paragraph p part ri)) - (define to-wrap (regexp-replace* #rx"\n" (get-output-string o) " ")) + ;; 1. Remove newlines so we can re-wrap the text. + ;; + ;; 2. Combine adjacent code spans into one. These result from + ;; something like @racket[(x y)] being treated as multiple + ;; RktXXX items rather than one. (Although it would be + ;; more-correct to handle them at that level, I don't easily see + ;; how. As a result I'm handling it after-the-fact, at the + ;; text/Markdown stage.) + (define to-wrap (regexp-replaces (get-output-string o) + '([#rx"\n" " "] ;1 + [#rx"``" ""]))) ;2 (define lines (wrap-line (string-trim to-wrap) (- 72 (current-indent)))) (write-note) (write-string (car lines)) diff --git a/collects/tests/scribble/markdown-docs/example.md b/collects/tests/scribble/markdown-docs/example.md index 9b5deebf..6a87f9d5 100644 --- a/collects/tests/scribble/markdown-docs/example.md +++ b/collects/tests/scribble/markdown-docs/example.md @@ -66,7 +66,7 @@ Example of a defproc: Returns a new mutable string of length `k` where each position in the string is initialized with the character `char` -Blah blah `(``or/c`` ``string?`` ``bytes?``)`. +Blah blah `(or/c string? bytes?)`. Example of Scribble `examples`: