[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Cannot get a text stencil from this font
From: |
Jean Abou Samra |
Subject: |
Re: Cannot get a text stencil from this font |
Date: |
Sun, 5 Sep 2021 16:43:56 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
Le 05/09/2021 à 16:22, Mark Knoop a écrit :
Hi,
I'm using Aaron's excellent overlayMarkup function from this thread:
https://lists.gnu.org/archive/html/lilypond-user/2021-09/msg00052.html
and am seeing different behaviour for Script objects depending if they
are attached to notes or to multimeasure rests. See the following
example. Any ideas how to deal with this?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.23.3"
overlayMarkup =
#(define-scheme-function
(self-x self-y parent-x parent-y markup)
((number? 0) (number? 0) (number? 0) (number? 0) markup?)
(grob-transformer 'stencil
(lambda (grob orig)
(let* ((xex (ly:stencil-extent orig X))
(yex (ly:stencil-extent orig Y))
(xoff (interval-index xex parent-x))
(yoff (interval-index yex parent-y))
(sten (grob-interpret-markup grob markup)))
(set! sten (ly:stencil-aligned-to sten X self-x))
(set! sten (ly:stencil-aligned-to sten Y self-y))
(ly:stencil-add orig
(ly:stencil-translate sten (cons xoff yoff)))))))
{
%% this usage works
R1
-\tweak stencil \overlayMarkup 0 0 0 3 "test"
\fermata
%% this usage fails
%% programming error: Cannot get a text stencil from this font
%% continuing, cross fingers
g'1
-\tweak stencil \overlayMarkup 0 0 0 3 "test"
\fermata
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Script has font-encoding set to 'fetaMusic, to look
up glyphs in music fonts. That's curious as it doesn't
seem to need it (it uses music font defaults for its
default stencil anyway). Try:
\version "2.23.3"
overlayMarkup =
#(define-scheme-function
(self-x self-y parent-x parent-y markup)
((number? 0) (number? 0) (number? 0) (number? 0) markup?)
(grob-transformer 'stencil
(lambda (grob orig)
(let* ((xex (ly:stencil-extent orig X))
(yex (ly:stencil-extent orig Y))
(xoff (interval-index xex parent-x))
(yoff (interval-index yex parent-y))
(sten (grob-interpret-markup grob markup)))
(set! sten (ly:stencil-aligned-to sten X self-x))
(set! sten (ly:stencil-aligned-to sten Y self-y))
(ly:stencil-add orig
(ly:stencil-translate sten (cons xoff yoff)))))))
{
R1
-\tweak stencil \overlayMarkup 0 0 0 3 "test"
\fermata
g'1
-\tweak stencil \overlayMarkup 0 0 0 3
\markup \override #'(font-encoding . latin1) "test"
\fermata
}
Best,
Jean