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