LEFT | RIGHT |
(no file at all) | |
1 \version "2.17.6" | 1 \version "2.17.6" |
2 | 2 |
3 \header { | 3 \header { |
4 texidoc = "Use @code{define-event-class}, scheme engraver methods, | 4 texidoc = "Use @code{define-event-class}, scheme engraver methods, |
5 and grob creation methods to create a fully functional text spanner | 5 and grob creation methods to create a fully functional text spanner |
6 in scheme." | 6 in scheme." |
7 } | 7 } |
8 | 8 |
9 #(define my-grob-descriptions '()) | 9 #(define my-grob-descriptions '()) |
10 | 10 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 (outside-staff-priority . 350) | 73 (outside-staff-priority . 350) |
74 (right-bound-info . ,ly:line-spanner::calc-right-bound-info) | 74 (right-bound-info . ,ly:line-spanner::calc-right-bound-info) |
75 (staff-padding . 0.8) | 75 (staff-padding . 0.8) |
76 (stencil . ,ly:line-spanner::print) | 76 (stencil . ,ly:line-spanner::print) |
77 (style . dashed-line) | 77 (style . dashed-line) |
78 | 78 |
79 (meta . ((class . Spanner) | 79 (meta . ((class . Spanner) |
80 (interfaces . (font-interface | 80 (interfaces . (font-interface |
81 line-interface | 81 line-interface |
82 line-spanner-interface | 82 line-spanner-interface |
| 83 outside-staff-interface |
83 side-position-interface)))))) | 84 side-position-interface)))))) |
84 | 85 |
85 #(define scheme-event-spanner-types | 86 #(define scheme-event-spanner-types |
86 '( | 87 '( |
87 (SchemeTextSpanEvent | 88 (SchemeTextSpanEvent |
88 . ((description . "Used to signal where scheme text spanner brackets | 89 . ((description . "Used to signal where scheme text spanner brackets |
89 start and stop.") | 90 start and stop.") |
90 (types . (general-music scheme-text-span-event span-event event)) | 91 (types . (general-music scheme-text-span-event span-event event)) |
91 )) | 92 )) |
92 )) | 93 )) |
(...skipping 28 matching lines...) Expand all Loading... |
121 #(define (set-axis! grob axis) | 122 #(define (set-axis! grob axis) |
122 (if (not (number? (ly:grob-property grob 'side-axis))) | 123 (if (not (number? (ly:grob-property grob 'side-axis))) |
123 (begin | 124 (begin |
124 (set! (ly:grob-property grob 'side-axis) axis) | 125 (set! (ly:grob-property grob 'side-axis) axis) |
125 (ly:grob-chain-callback | 126 (ly:grob-chain-callback |
126 grob | 127 grob |
127 (if (eq? axis X) | 128 (if (eq? axis X) |
128 ly:side-position-interface::x-aligned-side | 129 ly:side-position-interface::x-aligned-side |
129 side-position-interface::y-aligned-side) | 130 side-position-interface::y-aligned-side) |
130 (axis-offset-symbol axis))))) | 131 (axis-offset-symbol axis))))) |
| 132 |
| 133 #(define (outside-staff-interface::chain-y-offset-callback grob) |
| 134 (ly:grob-chain-callback |
| 135 grob |
| 136 outside-staff-interface::y-aligned-side |
| 137 (axis-offset-symbol Y))) |
131 | 138 |
132 schemeTextSpannerEngraver = | 139 schemeTextSpannerEngraver = |
133 #(lambda (context) | 140 #(lambda (context) |
134 (let ((span '()) | 141 (let ((span '()) |
135 (finished '()) | 142 (finished '()) |
136 (current-event '()) | 143 (current-event '()) |
137 (event-drul '(() . ()))) | 144 (event-drul '(() . ()))) |
138 (make-engraver | 145 (make-engraver |
139 (listeners ((scheme-text-span-event engraver event) | 146 (listeners ((scheme-text-span-event engraver event) |
140 (if (= START (ly:event-property event 'span-direction)) | 147 (if (= START (ly:event-property event 'span-direction)) |
(...skipping 14 matching lines...) Expand all Loading... |
155 (ly:warning "You're trying to end a scheme text spanner but you h
aven't started one.") | 162 (ly:warning "You're trying to end a scheme text spanner but you h
aven't started one.") |
156 (begin (set! finished span) | 163 (begin (set! finished span) |
157 (ly:engraver-announce-end-grob trans finished current-even
t) | 164 (ly:engraver-announce-end-grob trans finished current-even
t) |
158 (set! span '()) | 165 (set! span '()) |
159 (set! current-event '()) | 166 (set! current-event '()) |
160 (set-cdr! event-drul '())))) | 167 (set-cdr! event-drul '())))) |
161 (if (ly:stream-event? (car event-drul)) | 168 (if (ly:stream-event? (car event-drul)) |
162 (begin (set! current-event (car event-drul)) | 169 (begin (set! current-event (car event-drul)) |
163 (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner cur
rent-event)) | 170 (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner cur
rent-event)) |
164 (set-axis! span Y) | 171 (set-axis! span Y) |
| 172 (outside-staff-interface::chain-y-offset-callback span) |
165 (set-car! event-drul '())))) | 173 (set-car! event-drul '())))) |
166 ((stop-translation-timestep trans) | 174 ((stop-translation-timestep trans) |
167 (if (and (ly:spanner? span) | 175 (if (and (ly:spanner? span) |
168 (null? (ly:spanner-bound span LEFT))) | 176 (null? (ly:spanner-bound span LEFT))) |
169 (set! (ly:spanner-bound span LEFT) | 177 (set! (ly:spanner-bound span LEFT) |
170 (ly:context-property context 'currentMusicalColumn))) | 178 (ly:context-property context 'currentMusicalColumn))) |
171 (if (ly:spanner? finished) | 179 (if (ly:spanner? finished) |
172 (begin | 180 (begin |
173 (if (null? (ly:spanner-bound finished RIGHT)) | 181 (if (null? (ly:spanner-bound finished RIGHT)) |
174 (set! (ly:spanner-bound finished RIGHT) | 182 (set! (ly:spanner-bound finished RIGHT) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 | 216 |
209 \relative c' { | 217 \relative c' { |
210 a4 b\schemeTextSpannerStart c d | | 218 a4 b\schemeTextSpannerStart c d | |
211 \repeat unfold 20 { a4 b c d | } | 219 \repeat unfold 20 { a4 b c d | } |
212 a4 b c\schemeTextSpannerEnd d | | 220 a4 b c\schemeTextSpannerEnd d | |
213 \override SchemeTextSpanner.to-barline = ##t | 221 \override SchemeTextSpanner.to-barline = ##t |
214 a4\schemeTextSpannerStart b d c | | 222 a4\schemeTextSpannerStart b d c | |
215 \repeat unfold 20 { a4 b c d | } | 223 \repeat unfold 20 { a4 b c d | } |
216 a1\schemeTextSpannerEnd | | 224 a1\schemeTextSpannerEnd | |
217 } | 225 } |
LEFT | RIGHT |