Option 3 works very fine.
I have incorporated it in https://github.com/joskoot/turing.
Looks very good.
Thanks again, Jos

-----Original Message-----
From: Dupéron Georges [mailto:jahvascriptman...@gmail.com] 
Sent: martes, 28 de marzo de 2017 15:13
To: Racket Users
Cc: jos.k...@gmail.com
Subject: Re: empty lines in a grammer of defform of scribble

Le lundi 27 mars 2017 22:36:43 UTC+2, jos.koot a écrit :
> When I use #:grammar in a defform,
> the rules of the grammer are separated by empty lines.
> 
> I would like to avoid these empty lines.
> Is it possible?

I haven't seen a built-in mechanism to control this. Generally speaking, the 
tools for documenting bindings are somewhat inflexible,
if your use case falls out of the existing options. This leaves you with three 
possibilities:

1) Copy the source code of the @defform macro, and patch it to your needs
2) Add an option to control this in the mainstream scribble, and hope/wait for 
your Pull Request to be accepted
3) Call the current, official @defform macro, and patch the result.

Solution 1 is future-proof, but your implementation and the official one may 
drift apart, yielding slight inconsistencies in the
rendered output.

Solution 2 sounds better, although I wonder how many quick-fixes like this one 
@defform and similar macros can bear, given that they
are already a maze of particularly complex code, with lots of special-casing.

Solution 3 is the simplest, but is also more brittle, as you depend on the 
output of @defform staying roughly the same.

Here's a quick and dirty implementation of solution 3, note that if you intend 
to use this in production, you should try to make the
match pattern a bit more robust (i.e. a bit more general, in several cases I 
assume single-element lists, and any change in the
implementation of @defform is likely to break this code).

#lang scribble/manual
@(require scribble/manual
          scribble/core
          racket/match
          racket/list)
@(define (defform-remove-empty-lines the-defform)
   (match the-defform
     [(box-splice
       (list
        before ...
        (nested-flow nf-style
                     (list
                      (table t-style
                             (list other ...
                                   (list
                                    (table (style "specgrammar" tspec-style)
                                           (list lines ...)))
                                   more ...))))
        after ...))
      (define without-empty-lines
        ;; an empty lines is a sequence of five empty columns:
        (remove* (list
                  (list
                   (paragraph (style #f '(omitable)) (element #f (list (element 
'tt '(nbsp)))))
                   (paragraph (style #f '(omitable)) (element #f (list (element 
'tt '(nbsp)))))
                   (paragraph (style #f '(omitable)) (element #f (list (element 
'tt '(nbsp)))))
                   (paragraph (style #f '(omitable)) (element #f (list (element 
'tt '(nbsp)))))
                   (paragraph (style #f '(omitable)) (element #f (list (element 
'tt '(nbsp)))))))
                 lines))
      (box-splice
       (append
        before
        (list (nested-flow nf-style
                           (list
                            (table t-style
                                   (append other
                                           (list (list
                                                  (table (style "specgrammar" 
tspec-style)
                                                         without-empty-lines)))
                                           more)))))
        after))]))

@defform-remove-empty-lines[
 @defform[(foo bar baz quux)
          #:grammar ([bar (code:line xxx)
                      (code:line yyy)]
                     [baz (code:line zzz)
                      (code:line ttt)]
                     [quux (code:line aaa)
                      (code:line bbb)])]{
  Blah blah lots of text.}]

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to