[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Can an augmentation dot be parenthesized?
From: |
David Nalesnik |
Subject: |
Re: Can an augmentation dot be parenthesized? |
Date: |
Wed, 24 May 2017 15:40:28 -0500 |
Hi,
On Wed, May 24, 2017 at 12:47 PM, Lukas-Fabian Moser <address@hidden> wrote:
> Hi Robert,
>
>>
>> I would tather like to parenthesize these added augmenation dots but I've
>> not found a way to do that.
>
>
> I don't know how to parenthesize them, but here is a solution yielding
> brackets around them:
You can use the function parenthesize-stencil to do this.
>
> \version "2.19.44"
>
> #(define (special-bracketify original-stencil len thick protusion padding)
> (let* (
> (left-bracket (ly:bracket Y (cons (- len) len) thick (-
> protusion)))
> (right-bracket (ly:bracket Y (cons (- len) len) thick protusion)))
> (set! original-stencil
> (ly:stencil-combine-at-edge original-stencil X RIGHT right-bracket (- -0.73
> padding)))
> (set! original-stencil
> (ly:stencil-combine-at-edge original-stencil X RIGHT left-bracket padding))
> original-stencil))
>
> bracketDot = \once \override Dots.stencil = #(lambda (grob)
> (special-bracketify (ly:dots::print grob) 0.4 0.1 0.2 0))
> % first number (0.4): bracket length
> % second number (0.1): thickness
> % third number (0.2): protrusion
> % fourth number (0.1): space between dot and brackets
>
>
> {
> c''4.
> r8
> \bracketDot
> a'4.
> r8
> }
>
>
> Question to the experts: If I unterstand my own code correctly :-), the
> right-hand edge of the dot stencil (used by stencil-combine-at-edge) is the
> right-most part of the dot itself, while the left-hand edge seems to be the
> right-most part of the note the dot is attached to.
> For this reason I took (for the left bracket) the *right* hand edge of the
> dot and added offsets with trial-and-error, which should be fine since I
> assume the dot will have the same size wherever it occurs. But nevertheless
> there must be a more conceptual way?
The dots are created by a character in the font which consists of the
actual dot and whitespace to the left. (This means that the space
between dots can't be adjusted. I wonder if it would be better to
trim the character and add a property, like 'dot-separation.)
You can go your route, adding the brackets individually with an
offset, or you could make your own dots, gleaning information from the
dots.dot glyph. That's what I do below. (You can get either
parentheses or brackets.)
%%%%%%%%%%%%%%%%%
\version "2.19.44"
#(define (parenthesized-dots grob)
(let ((mol empty-stencil)
(c (ly:grob-property grob 'dot-count)))
(if (number? c)
(let* ((d (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
(thick (ly:output-def-lookup (ly:grob-layout grob)
'line-thickness))
(Y-ext (ly:stencil-extent d Y))
(replacement-dot (make-circle-stencil
(/ (- (interval-length Y-ext) thick) 2)
thick
#t))
(dw (interval-length (ly:stencil-extent d X)))
(mol-lst (make-list c replacement-dot))
(mol (reduce
(lambda (elem prev) (ly:stencil-combine-at-edge
prev X RIGHT elem dw))
point-stencil
mol-lst))
; to make brackets instead
; stencil, axis, thick, protrusion, padding
;(mol (bracketify-stencil mol Y thick 0.2 0))
; stencil, half-thickness, width, angularity, padding
(mol (parenthesize-stencil mol (/ thick 2) 0.2 0 0))
(mol (ly:stencil-translate-axis mol (+ dw thick) X)))
mol))))
parenthesizeDots = \override Dots.stencil = #parenthesized-dots
{
\parenthesizeDots
c''4 r
c''4. r8
c''4.. r16
c''4... r32
c''4.... r64
c''4..... r128
}
%%%%%%%%%%%
Hope this helps,
David