Well, not sure actually, since it's problematic with 0, 1 , -1.
So how about :

%circled-pattern
#(define-markup-command
  (circled-pattern layout props radius angle num arg)
  (number? number? number? string?)
  (let* ((rep (- (abs num) 1))
          (the-form
           (if (eq? num 0) (markup "")
            (if (eq? (abs num) 1) (markup arg)
            (markup
             (#:combine
              (#:null)
              (fold
               (lambda (i prev)
                (markup
                 (#:combine
                  (#:rotate
                   (* i (/ angle rep))
                   (#:concat (#:null #:hspace radius arg)))
                  prev)))
               (markup (#:null))
               (iota (1+ rep)))))))))
     (interpret-markup layout props the-form)))

testOne = \markup "."
testTwo = \markup { \rotate #45 "!" }

\markup\circled-pattern #5 #180 #15 \testOne
\markup\circled-pattern #5 #-180 #15 \testOne
\markup\circled-pattern #5 #180 #2 \testOne
\markup\circled-pattern #5 #180 #1 \testOne
\markup\circled-pattern #5 #180 #0 \testOne

%\markup\circled-pattern #5 #360 #5 \testTwo

Plus : any idea why 'testTwo does not work ?

Cheers,
Pierre

2018-07-07 15:35 GMT+02:00 Orm Finnendahl <
orm.finnend...@selma.hfmdk-frankfurt.de>:

> Hi List,
>
>  for conciseness the example should be reduced even more (if someone
> wants to post it to LSR I'd recommend this version).
>
> %circled-pattern
> #(define-markup-command
>   (circled-pattern layout props radius angle num arg)
>   (number? number? number? string?)
>   (interpret-markup layout props
>    (fold
>     (lambda (i prev)
>      (markup
>       (#:combine
>        (#:rotate
>         (* i (/ angle num))
>         (#:concat (#:null #:hspace radius arg)))
>        prev)))
>     (markup (#:null))
>     (iota (1+ num))))))
>
> % Test (markup a 180° circled pattern with radius 5 and 17 dots) :
> \markup\circled-pattern #5 #180 #16 #"."
>
> % an upside down pattern can be achieved with a negative angle:
>
> \markup\circled-pattern #5 #-180 #16 #"."
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to