1 ;;;; define-grobs.scm --
3 ;;;; source file of the GNU LilyPond music typesetter
5 ;;;; (c) 1998--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
6 ;;;; Jan Nieuwenhuizen <janneke@gnu.org>
8 ;;;; distances are given in linethickness (thicknesses) and
9 ;;;; staffspace (distances)
11 ;;;; WARNING: the meta field should be the last one.
12 ;;;; WARNING: don't use anonymous functions for initialization.
14 ;; TODO: junk the meta field in favor of something more compact?
16 ;;; todo:: reorder sensibly.
18 (define-public all-grob-descriptions
23 (cautionary-style . parentheses)
25 (stencil . ,Accidental_interface::print)
27 . ,Accidental_interface::after_line_breaking)
29 (meta . ((class . Item)
30 (interfaces . (accidental-interface
36 (stencil . ,Accidental_interface::print)
38 (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent
39 ,Self_alignment_interface::aligned_on_self))
40 (self-alignment-X . ,CENTER)
42 (cautionary-style . smaller)
43 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
44 (cautionary-style . parentheses)
46 (staff-padding . 0.25)
48 (meta . ((class . Item)
49 (interfaces . (side-position-interface
52 accidental-suggestion-interface
53 self-alignment-interface
59 (positioning-done . ,Accidental_placement::calc_positioning_done)
60 (X-extent . ,Axis_group_interface::width)
62 ;; this is quite small, but it is very ugly to have
63 ;; accs closer to the previous note than to the next one.
64 (right-padding . 0.15)
65 (meta . ((class . Item)
66 (interfaces . (accidental-placement-interface))))))
71 (X-extent . ,Axis_group_interface::width)
72 (X-extent . ,Axis_group_interface::height)
75 (clef . (extra-space . 0.5))
76 (key-signature . (extra-space . 0.0))
77 (staff-bar . (extra-space . 0.0))
78 (time-signature . (extra-space . 0.0))
79 (first-note . (fixed-space . 0.0))))
81 (break-align-symbol . ambitus)
82 (break-visibility . ,begin-of-line-visible)
83 (meta . ((class . Item)
84 (interfaces . (axis-group-interface
85 break-aligned-interface
86 ambitus-interface))))))
91 (stencil . ,Ambitus::print)
95 (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
97 (meta . ((class . Item)
98 (interfaces . (ambitus-interface
99 staff-symbol-referencer-interface
103 (font-family . music)
105 (X-offset-callbacks . (,Side_position_interface::aligned_side))
107 (cautionary-style . parentheses)
109 (stencil . ,Accidental_interface::print)
110 (after-line-breaking . ,Accidental_interface::after_line_breaking)
112 (meta . ((class . Item)
113 (interfaces . (item-interface
115 break-aligned-interface
116 side-position-interface
123 (stencil . ,Note_head::print)
124 (glyph-name . ,note-head::calc-glyph-name)
126 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
127 (meta . ((class . Item)
128 (interfaces . (font-interface
131 staff-symbol-referencer-interface
132 rhythmic-head-interface
133 ledgered-interface))))))
138 (X-extent . ,Arpeggio::width)
139 (stencil . ,Arpeggio::print)
141 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
142 (X-offset-callbacks . (,Side_position_interface::aligned_side))
145 (staff-position . 0.0)
146 (meta . ((class . Item)
147 (interfaces . (arpeggio-interface
148 staff-symbol-referencer-interface
149 side-position-interface
154 (break-align-symbol . staff-bar)
157 (break-visibility . ,all-visible)
160 (stencil . ,Bar_line::print)
161 (glyph-name . ,bar-line::calc-glyph-name)
162 (bar-size . ,Bar_line::calc_bar_size)
165 (time-signature . (extra-space . 0.75))
166 (custos . (minimum-space . 2.0))
167 (clef . (minimum-space . 1.0))
168 (key-signature . (extra-space . 1.0))
169 (key-cancellation . (extra-space . 1.0))
170 (first-note . (fixed-space . 1.3))
171 (next-note . (semi-fixed-space . 1.3))
172 (right-edge . (extra-space . 0.0))))
175 ;; Ross. page 151 lists other values, we opt for a leaner look
178 ;; kern should scale with linethickness too.
181 (hair-thickness . 1.9)
182 (thick-thickness . 6.0)
183 (meta . ((class . Item)
184 (interfaces . (bar-line-interface
185 break-aligned-interface
191 (stencil . ,Text_interface::print)
194 (break-visibility . ,begin-of-line-visible)
197 (font-family . roman)
199 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
200 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
201 (self-alignment-X . 1)
205 (interfaces . (side-position-interface
207 self-alignment-interface
209 break-aligned-interface))))
215 (stencil . ,Text_interface::print)
217 (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
219 (font-family . number)
221 ;; We must do this, other BFs in
222 ;; layout16 become too small.
225 (meta . ((class . Item)
226 (interfaces . (text-interface
227 rhythmic-grob-interface
228 bass-figure-interface
229 self-alignment-interface
235 (stencil . ,Text_interface::print)
237 (meta . ((class . Item)
238 (interfaces . (text-interface
239 rhythmic-grob-interface
240 bass-figure-interface
245 (stencil . ,Enclosing_bracket::print)
247 (edge-height . (0.2 . 0.2))
248 (meta . ((class . Item)
249 (interfaces . (enclosing-bracket-interface)) ))
251 (BassFigureContinuation
254 (stencil . ,Figured_bass_continuation::print)
256 (Y-offset-callbacks . (,Figured_bass_continuation::center_on_figures))
257 (meta . ((class . Spanner)
258 (interfaces . (figured-bass-continuation-interface))
264 (Y-extent . ,Axis_group_interface::height)
266 (meta . ((class . Spanner)
267 (interfaces . (axis-group-interface
273 (threshold . (2 . 1000))
275 (positioning-done . ,Align_interface::calc_positioning_done)
276 (Y-extent . ,Axis_group_interface::height)
279 (meta . ((class . Spanner)
280 (interfaces . (align-interface
281 axis-group-interface))))))
285 ;; todo: clean this up a bit: the list is getting
289 (positions . ,(ly:make-callback-chain
290 Beam::calc_least_squares_positions
292 Beam::shift_region_to_valid
294 Beam::set_stem_lengths
296 (concaveness . ,Beam::calc_concaveness)
297 (direction . ,Beam::calc_direction)
298 (stencil . ,Beam::print)
300 ;; TODO: should be in SLT.
301 (thickness . 0.48) ; in staff-space
302 (neutral-direction . -1)
304 ;; Whe have some unreferenced problems here.
306 ;; If we shorten beamed stems less than normal stems (1 staffspace),
307 ;; or high order less than 8th beams, patterns like
308 ;; c''4 [c''8 c''] c''4 [c''16 c]
309 ;; are ugly (different stem lengths).
311 ;; But if we shorten 16th beams as much as 8th beams, a single
312 ;; forced 16th beam looks *very* short.
314 ;; We choose to shorten 8th beams the same as single stems,
315 ;; and high order beams less than 8th beams, so that all
316 ;; isolated shortened beams look nice and a bit shortened,
317 ;; sadly possibly breaking patterns with high order beams.
318 (beamed-stem-shorten . (1.0 0.5 0.25))
320 (auto-knee-gap . 5.5)
322 ;; only for debugging.
323 (font-family . roman)
324 (meta . ((class . Spanner)
325 (interfaces . (staff-symbol-referencer-interface
333 (positioning-done . ,Break_align_interface::calc_positioning_done)
334 (X-extent . ,Axis_group_interface::width)
336 (break-align-orders . ;; end of line
358 time-signature custos)
372 (meta . ((class . Item)
373 (interfaces . (break-alignment-interface
374 axis-group-interface))))))
380 (X-extent . ,Axis_group_interface::width)
382 (meta . ((class . Item)
383 (interfaces . (break-aligned-interface
384 axis-group-interface))))))
388 (break-align-symbol . breathing-sign)
391 (ambitus . (extra-space . 2.0))
392 (custos . (minimum-space . 1.0))
393 (key-signature . (minimum-space . 1.5))
394 (staff-bar . (minimum-space . 1.5))
395 (clef . (minimum-space . 2.0))
396 (first-note . (fixed-space . 1.0)) ;huh?
397 (right-edge . (extra-space . 0.1))))
399 (stencil . ,Text_interface::print)
401 (text . ,(make-musicglyph-markup "scripts.rcomma"))
402 (Y-offset-callbacks . (,Breathing_sign::offset_callback))
403 (break-visibility . ,begin-of-line-invisible)
404 (meta . ((class . Item)
405 (interfaces . (break-aligned-interface
406 breathing-sign-interface
413 (stencil . ,Clef::print)
414 (glyph-name . ,Clef::calc_glyph_name)
417 (font-family . music)
418 (break-align-symbol . clef)
419 (break-visibility . ,begin-of-line-visible)
420 (space-alist . ((ambitus . (extra-space . 2.0))
421 (staff-bar . (extra-space . 0.7))
422 (key-cancellation . (minimum-space . 4.0))
423 (key-signature . (minimum-space . 4.0))
424 (time-signature . (minimum-space . 4.2))
425 (first-note . (minimum-fixed-space . 5.0))
426 (next-note . (extra-space . 0.5))
427 (right-edge . (extra-space . 0.5))))
428 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
429 (meta . ((class . Item)
430 (interfaces . (clef-interface
431 staff-symbol-referencer-interface
433 break-aligned-interface))))))
435 (ClusterSpannerBeacon
438 (Y-extent . ,Cluster_beacon::height)
440 (meta . ((class . Item)
441 (interfaces . (cluster-beacon-interface))))))
446 (springs-and-rods . ,Spanner::set_spacing_rods)
447 (stencil . ,Cluster::print)
450 (minimum-length . 0.0)
453 (meta . ((class . Spanner)
454 (interfaces . (cluster-interface))))))
459 (stencil . ,Text_interface::print)
460 (after-line-breaking . ,Chord_name::after_line_breaking)
465 (meta . ((class . Item)
466 (interfaces . (font-interface
467 rhythmic-grob-interface
475 (stencil . ,Text_interface::print)
477 (no-spacing-rods . #t)
478 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
479 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
482 (staff-padding . 0.5)
483 (script-priority . 200)
484 ;; todo: add X self alignment?
487 (meta . ((class . Item)
488 (interfaces . (text-script-interface
490 side-position-interface
495 (break-align-symbol . custos)
498 (stencil . ,Custos::print)
500 (break-visibility . ,end-of-line-visible)
502 (neutral-direction . -1)
503 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
505 (first-note . (minimum-fixed-space . 0.0))
506 (right-edge . (extra-space . 0.1))))
507 (meta . ((class . Item)
510 staff-symbol-referencer-interface
512 break-aligned-interface))))))
519 (positioning-done . ,Dot_column::calc_positioning_done)
520 (X-extent . ,Axis_group_interface::width)
522 (X-offset-callbacks . (,Dot_column::side_position))
523 (meta . ((class . Item)
524 (interfaces . (dot-column-interface
525 axis-group-interface))))))
530 (stencil . ,Dots::print)
533 (meta . ((class . Item)
534 (interfaces . (font-interface
535 staff-symbol-referencer-interface
541 (stencil . ,Percent_repeat_item_interface::double_percent)
545 (font-encoding . fetaMusic)
548 (break-align-symbol . staff-bar)
549 (break-visibility . ,begin-of-line-invisible)
550 (meta . ((class . Item)
551 (interfaces . (font-interface
552 break-aligned-interface
553 percent-repeat-interface))))))
555 (DoublePercentRepeatCounter
558 (stencil . ,Text_interface::print)
560 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
561 ,Self_alignment_interface::centered_on_other_axis_parent))
562 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
563 (font-encoding . fetaNumber)
564 (self-alignment-X . 0)
568 (staff-padding . 0.25)
569 (meta . ((class . Item)
570 (interfaces . (side-position-interface
571 self-alignment-interface
572 percent-repeat-interface
578 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
579 (staff-padding . 0.1)
581 (avoid-slur . outside)
583 (minimum-space . 1.2)
586 (Y-extent . ,Axis_group_interface::height)
587 (X-extent . ,Axis_group_interface::width)
590 (meta . ((class . Spanner)
591 (interfaces . (axis-group-interface
593 dynamic-line-spanner-interface
594 side-position-interface))))))
601 (stencil . ,Text_interface::print)
602 (direction . ,Script_interface::calc_direction)
604 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
605 (self-alignment-X . 0)
606 (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
607 (self-alignment-Y . 0)
609 (font-encoding . fetaDynamic)
610 (font-shape . italic)
611 (no-spacing-rods . #t)
612 (script-priority . 100)
613 (meta . ((class . Item)
614 (interfaces . (font-interface
616 self-alignment-interface
618 script-interface))))))
623 (stencil . ,Dynamic_text_spanner::print)
625 ;; rather ugh with NCSB
626 ;; (font-series . bold)
627 (font-shape . italic)
628 (style . dashed-line)
630 ;; need to blend with dynamic texts.
632 (bound-padding . 0.75)
633 (dash-fraction . 0.2)
635 (meta . ((class . Spanner)
636 (interfaces . (font-interface
639 dynamic-text-spanner-interface
640 spanner-interface))))))
645 ;; sync with TextScript (?)
648 (avoid-slur . around)
650 (staff-padding . 0.5)
651 (self-alignment-X . 0)
652 (self-alignment-Y . 0)
653 (script-priority . 100)
655 (stencil . ,Text_interface::print)
656 (direction . ,Script_interface::calc_direction)
658 (font-encoding . fetaNumber)
659 (font-size . -5) ; don't overlap when next to heads.
660 (meta . ((class . Item)
661 (interfaces . (finger-interface
663 text-script-interface
665 side-position-interface
666 self-alignment-interface
672 (zigzag-width . 0.75)
677 (stencil . ,Line_spanner::print)
678 (after-line-breaking . ,Line_spanner::after_line_breaking)
681 (meta . ((class . Spanner)
682 (interfaces . (line-interface
683 line-spanner-interface))))))
689 (meta . ((class . Item)
690 (interfaces . (grid-point-interface))))))
695 (X-extent . ,Grid_line_interface::width)
696 (stencil . ,Grid_line_interface::print)
698 (self-alignment-X . ,CENTER)
699 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
700 ,Self_alignment_interface::centered_on_parent))
702 (meta . ((class . Item)
703 (interfaces . (self-alignment-interface
704 grid-line-interface))))))
710 (stencil . ,Hairpin::print)
711 (springs-and-rods . ,Spanner::set_spacing_rods)
712 (after-line-breaking . ,Hairpin::after_line_breaking)
716 (minimum-length . 2.0)
717 (bound-padding . 1.0)
718 (self-alignment-Y . 0)
719 (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
720 (meta . ((class . Spanner)
721 (interfaces . (hairpin-interface
723 self-alignment-interface
725 spanner-interface))))))
731 (stencil . ,Horizontal_bracket::print)
733 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
735 (staff-padding . 0.2)
737 (bracket-flare . (0.5 . 0.5))
738 (meta . ((class . Spanner)
739 (interfaces . (horizontal-bracket-interface
740 side-position-interface
742 spanner-interface))))))
746 (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self
747 ,Side_position_interface::aligned_on_support_refpoints))
748 ;; This direction is for aligned_on_support_refpoints
752 (left-edge . (extra-space . 1.0))))
754 (self-alignment-Y . 0)
756 (stencil . ,Text_interface::print)
758 (break-align-symbol . instrument-name)
759 (break-visibility . ,begin-of-line-visible)
761 (meta . ((class . Item)
762 (interfaces . (font-interface
763 self-alignment-interface
764 side-position-interface
766 break-aligned-interface))))))
771 (stencil . ,Key_signature_interface::print)
774 (time-signature . (extra-space . 1.25))
775 (staff-bar . (extra-space . 0.6))
776 (key-signature . (extra-space . 0.5))
777 (right-edge . (extra-space . 0.5))
778 (first-note . (fixed-space . 2.5))))
779 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
780 (break-align-symbol . key-cancellation)
781 (break-visibility . ,begin-of-line-invisible)
784 (meta . ((class . Item)
785 (interfaces . (key-signature-interface
787 break-aligned-interface))))))
791 (stencil . ,Key_signature_interface::print)
794 (time-signature . (extra-space . 1.25))
795 (staff-bar . (extra-space . 1.1))
796 (right-edge . (extra-space . 0.5))
797 (first-note . (fixed-space . 2.5))))
798 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
799 (break-align-symbol . key-signature)
800 (break-visibility . ,begin-of-line-visible)
803 (meta . ((class . Item)
804 (interfaces . (key-signature-interface
806 break-aligned-interface))))))
810 (stencil . ,Tie::print)
811 (control-points . ,Laissez_vibrer_tie::calc_control_points)
812 (direction . ,Laissez_vibrer_tie::calc_direction)
814 (details . ((ratio . 0.333)
815 (height-limit . 1.0)))
817 (meta . ((class . Item)
818 (interfaces . (laissez-vibrer-tie-interface))
822 (LaissezVibrerTieColumn
827 (positioning-done . ,Laissez_vibrer_tie_column::calc_positioning_done)
829 (meta . ((class . Item)
830 (interfaces . (laissez-vibrer-tie-column-interface))
837 (springs-and-rods . ,Ledger_line_spanner::set_spacing_rods)
839 (stencil . ,Ledger_line_spanner::print)
843 (minimum-length-fraction . 0.25)
844 (length-fraction . 0.25)
846 (meta . ((class . Spanner)
847 (interfaces . (ledger-line-interface))))))
851 (break-align-symbol . left-edge)
854 (break-visibility . ,center-invisible)
856 (custos . (extra-space . 0.0))
857 (ambitus . (extra-space . 2.0))
858 (time-signature . (extra-space . 1.0))
859 (staff-bar . (extra-space . 0.0))
860 (breathing-sign . (minimum-space . 0.0))
861 (clef . (extra-space . 0.8))
862 (first-note . (fixed-space . 2.0))
863 (right-edge . (extra-space . 0.0))
864 (key-signature . (extra-space . 0.0))
865 (key-cancellation . (extra-space . 0.0))
867 (meta . ((class . Item)
868 (interfaces . (break-aligned-interface))))))
872 ;; ugh. A ligature bracket is totally different from
875 (direction . ,Tuplet_bracket::calc_direction)
876 (positions . ,Tuplet_bracket::calc_positions)
877 (stencil . ,Tuplet_bracket::print)
883 (edge-height . (0.7 . 0.7))
884 (shorten-pair . (-0.2 . -0.2))
885 (meta . ((class . Spanner)
886 (interfaces . (tuplet-bracket-interface
895 (minimum-length . 0.3)
897 ; (springs-and-rods . ,Hyphen_spanner::set_spacing_rods)
899 (stencil . ,Hyphen_spanner::print)
902 (meta . ((class . Spanner)
903 (interfaces . (lyric-interface
904 lyric-hyphen-interface
905 spanner-interface))))))
910 (stencil . ,Lyric_extender::print)
912 (thickness . 0.8) ; linethickness
913 (minimum-length . 1.5)
915 (meta . ((class . Spanner)
916 (interfaces . (lyric-interface
917 lyric-extender-interface))))))
922 (stencil . ,Text_interface::print)
924 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_parent))
925 (self-alignment-X . 0)
927 (font-series . bold-narrow)
929 (meta . ((class . Item)
930 (interfaces . (rhythmic-grob-interface
931 lyric-syllable-interface
932 self-alignment-interface
940 (stencil . ,Mensural_ligature::print)
942 (meta . ((class . Spanner)
943 (interfaces . (mensural-ligature-interface
949 (stencil . ,Text_interface::print)
951 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
954 (meta . ((class . Item)
955 (interfaces . (text-interface
956 side-position-interface
958 metronome-mark-interface))))))
962 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
964 (stencil . ,Measure_grouping::print)
971 (meta . ((class . Spanner)
972 (interfaces . (side-position-interface
973 measure-grouping-interface))))))
978 (stencil . ,Multi_measure_rest::print)
980 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
983 (thick-thickness . 6.6)
984 (hair-thickness . 2.0)
986 (meta . ((class . Spanner)
987 (interfaces . (multi-measure-rest-interface
988 multi-measure-interface
991 staff-symbol-referencer-interface))))))
994 (MultiMeasureRestNumber
996 (springs-and-rods . ,Multi_measure_rest::set_spacing_rods)
997 (stencil . ,Text_interface::print)
998 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
999 ,Self_alignment_interface::centered_on_other_axis_parent))
1000 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1001 (self-alignment-X . 0)
1004 (staff-padding . 0.4)
1005 (font-encoding . fetaNumber)
1006 (meta . ((class . Spanner)
1007 (interfaces . (side-position-interface
1008 multi-measure-interface
1009 self-alignment-interface
1015 (MultiMeasureRestText
1018 (stencil . ,Text_interface::print)
1020 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
1021 ,Self_alignment_interface::centered_on_other_axis_parent))
1022 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1023 (self-alignment-X . 0)
1026 (staff-padding . 0.25)
1027 (meta . ((class . Spanner)
1028 (interfaces . (side-position-interface
1029 multi-measure-interface
1030 self-alignment-interface
1032 text-interface))))))
1038 (X-extent . ,Axis_group_interface::width)
1039 (Y-extent . ,Axis_group_interface::height)
1040 (positioning-done . ,Note_collision_interface::calc_positioning_done)
1042 (meta . ((class . Item)
1043 (interfaces . (note-collision-interface
1044 axis-group-interface))))))
1049 (X-extent . ,Axis_group_interface::width)
1050 (Y-extent . ,Axis_group_interface::height)
1052 (meta . ((class . Item)
1053 (interfaces . (axis-group-interface
1054 note-column-interface))))))
1059 (stencil . ,Note_head::print)
1060 (stem-attachment . ,Note_head::calc_stem_attachment)
1061 (glyph-name . ,note-head::calc-glyph-name)
1062 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1063 (X-offset-callbacks . (,Note_head::stem_x_shift))
1064 (meta . ((class . Item)
1065 (interfaces . (rhythmic-grob-interface
1066 rhythmic-head-interface
1070 staff-symbol-referencer-interface))))))
1074 (stem-spacing-correction . 0.5)
1075 (same-direction-correction . 0.25)
1076 ;; Changed this from 0.75.
1077 ;; If you ever change this back, please document! --hwn
1078 (knee-spacing-correction . 1.0)
1080 (meta . ((class . Item)
1081 (interfaces . (spacing-interface
1082 note-spacing-interface))))))
1087 (stencil . ,Text_interface::print)
1089 (meta . ((class . Item)
1090 (interfaces . (note-name-interface
1092 font-interface))))))
1096 (self-alignment-X . 0)
1097 (break-visibility . ,begin-of-line-visible)
1098 (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent
1099 ,Self_alignment_interface::aligned_on_self))
1100 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1102 (stencil . ,Text_interface::print)
1105 ;; no Y dimensions, because of lyrics under tenor clef.
1106 (Y-extent . (0 . 0))
1107 (font-shape . italic)
1109 (staff-padding . 0.2)
1111 (meta . ((class . Item)
1112 (interfaces . (text-interface
1113 self-alignment-interface
1114 side-position-interface
1115 font-interface))))))
1119 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1121 (stencil . ,Ottava_bracket::print)
1123 (font-shape . italic)
1124 (shorten-pair . (0.0 . -0.6))
1125 (staff-padding . 1.0)
1127 (minimum-length . 1.0)
1128 (dash-fraction . 0.3)
1129 (edge-height . (0 . 1.2))
1131 (meta . ((class . Spanner)
1132 (interfaces . (ottava-bracket-interface
1133 horizontal-bracket-interface
1135 side-position-interface
1137 text-interface))))))
1143 (before-line-breaking . ,Paper_column::before_line_breaking)
1144 ;; (stencil . ,Paper_column::print)
1145 (X-extent . ,Axis_group_interface::width)
1149 ;; (font-size . -6) (font-name . "sans") (Y-extent . #f)
1150 (meta . ((class . Paper_column)
1151 (interfaces . (paper-column-interface
1152 axis-group-interface
1153 spaceable-grob-interface))))))
1156 . ((slur-details . ,default-slur-details)
1158 (control-points . ,Slur::calc_control_points)
1159 (direction . ,Slur::calc_direction)
1160 (springs-and-rods . ,Spanner::set_spacing_rods)
1161 (Y-extent . ,Slur::height)
1162 (stencil . ,Slur::print)
1166 (minimum-length . 1.5)
1167 (height-limit . 2.0)
1169 (meta . ((class . Spanner)
1170 (interfaces . (slur-interface))))))
1172 (NonMusicalPaperColumn
1176 (before-line-breaking . ,Paper_column::before_line_breaking)
1177 (X-extent . ,Axis_group_interface::width)
1178 ;; (stencil . ,Paper_column::print)
1182 ;; debugging stuff: print column number.
1183 ;; (font-size . -6) (font-name . "sans") (Y-extent . #f)
1185 (meta . ((class . Paper_column)
1186 (interfaces . (paper-column-interface
1187 axis-group-interface
1188 spaceable-grob-interface))))))
1193 (springs-and-rods . ,Multi_measure_rest::set_spacing_rods)
1194 (stencil . ,Multi_measure_rest::percent)
1198 (font-encoding . fetaMusic)
1199 (meta . ((class . Spanner)
1200 (interfaces . (multi-measure-rest-interface
1202 percent-repeat-interface))))))
1203 (PercentRepeatCounter
1206 (stencil . ,Text_interface::print)
1208 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
1209 ,Self_alignment_interface::centered_on_other_axis_parent))
1210 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1211 (self-alignment-X . 0)
1214 (staff-padding . 0.25)
1216 (font-encoding . fetaNumber)
1217 (meta . ((class . Spanner)
1218 (interfaces . (side-position-interface
1219 self-alignment-interface
1220 percent-repeat-interface
1222 text-interface))))))
1224 ;; an example of a text spanner
1228 (stencil . ,Piano_pedal_bracket::print)
1231 (bound-padding . 1.0)
1233 (bracket-flare . (0.5 . 0.5))
1234 (edge-height . (1.0 . 1.0))
1235 (shorten-pair . (0.0 . 0.0))
1237 (meta . ((class . Spanner)
1238 (interfaces . (line-interface
1239 piano-pedal-interface
1240 piano-pedal-bracket-interface))))))
1245 (stencil . ,Text_interface::print)
1247 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1248 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1250 (after-line-breaking . ,shift-right-at-line-begin)
1252 (self-alignment-X . 0)
1257 (break-visibility . ,end-of-line-invisible)
1259 (meta . ((class . Item)
1260 (interfaces . (text-interface
1261 side-position-interface
1264 self-alignment-interface))))))
1270 (stencil . ,Percent_repeat_item_interface::beat_slash)
1274 (meta . ((class . Item)
1275 (interfaces . (percent-repeat-interface))))))
1279 (stencil . ,Rest::print)
1280 (X-extent . ,Rest::width)
1281 (Y-extent . ,Rest::height)
1283 (Y-offset-callbacks . (
1284 ,Staff_symbol_referencer::callback
1285 ,Rest::polyphonic_offset_callback
1286 ,Rest::y_offset_callback
1288 (minimum-distance . 0.25)
1289 (meta . ((class . Item)
1290 (interfaces . (font-interface
1291 rhythmic-head-interface
1292 rhythmic-grob-interface
1293 staff-symbol-referencer-interface
1294 rest-interface))))))
1298 (minimum-distance . 0.75)
1299 (positioning-done . ,Rest_collision::calc_positioning_done)
1301 (meta . ((class . Item)
1302 (interfaces . (rest-collision-interface))))))
1306 ;; don't set direction here: it breaks staccato.
1308 ;; This value is sensitive: if too large, staccato dots will move a
1311 (staff-padding . 0.25)
1312 ;; (script-priority . 0) priorities for scripts, see script.scm
1313 (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
1315 (stencil . ,Script_interface::print)
1316 (direction . ,Script_interface::calc_direction)
1318 (font-encoding . fetaMusic)
1319 (meta . ((class . Item)
1320 (interfaces . (script-interface
1321 side-position-interface
1322 font-interface))))))
1327 (before-line-breaking . ,Script_column::before_line_breaking)
1329 (meta . ((class . Item)
1330 (interfaces . (script-column-interface))))))
1336 (meta . ((class . Item)
1337 (interfaces . (spacing-interface
1338 separation-item-interface))))))
1340 (SeparatingGroupSpanner
1343 (springs-and-rods . ,Separating_group_spanner::set_spacing_rods)
1345 (meta . ((class . Spanner)
1346 (interfaces . (only-prebreak-interface
1348 separation-spanner-interface))))))
1351 . ((slur-details . ,default-slur-details)
1353 (control-points . ,Slur::calc_control_points)
1354 (direction . ,Slur::calc_direction)
1355 (springs-and-rods . ,Spanner::set_spacing_rods)
1356 (Y-extent . ,Slur::height)
1357 (stencil . ,Slur::print)
1360 (minimum-length . 1.5)
1362 (height-limit . 2.0)
1364 (meta . ((class . Spanner)
1365 (interfaces . (slur-interface))))))
1370 (springs-and-rods . ,Spacing_spanner::set_springs)
1372 (grace-space-factor . 0.6)
1373 (shortest-duration-space . 2.0)
1374 (spacing-increment . 1.2)
1375 (base-shortest-duration . ,(ly:make-moment 3 16))
1376 (meta . ((class . Spanner)
1377 (interfaces . (spacing-interface
1378 spacing-spanner-interface))))))
1382 (break-align-symbol . staff-bar)
1387 (stencil . ,Span_bar::print)
1388 (bar-size . ,Span_bar::calc_bar_size)
1389 (X-extent . ,Span_bar::width)
1390 (glyph-name . ,Span_bar::calc_glyph_name)
1391 (before-line-breaking . ,Span_bar::before_line_breaking)
1396 ;; Ross. page 151 lists other values, we opt for a leaner look
1400 (hair-thickness . 1.6)
1401 (thick-thickness . 6.0)
1402 (meta . ((class . Item)
1403 (interfaces . (span-bar-interface
1405 bar-line-interface))))))
1409 (stencil . ,Text_interface::print)
1411 (font-series . bold)
1413 (X-offset-callbacks . (,Side_position_interface::aligned_side))
1415 (meta . ((class . Item)
1416 (interfaces . (side-position-interface
1417 stanza-number-interface
1419 font-interface))))))
1424 (stencil . ,print-circled-text-callback)
1427 (staff-padding . 0.5)
1428 (self-alignment-X . 0)
1429 (self-alignment-Y . 0)
1430 (script-priority . 100)
1431 (font-encoding . fetaNumber)
1432 (font-size . -5) ; don't overlap when next to heads.
1433 (meta . ((class . Item)
1434 (interfaces . (string-number-interface
1436 text-script-interface
1438 side-position-interface
1439 self-alignment-interface
1440 item-interface))))))
1445 (stem-spacing-correction . 0.4)
1446 (meta . ((class . Item)
1447 (interfaces . (spacing-interface
1448 staff-spacing-interface))))))
1453 (stencil . ,Text_interface::print)
1456 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1457 (no-spacing-rods . #t)
1458 (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1459 (font-shape . italic)
1460 (self-alignment-X . 0)
1461 (meta . ((class . Item)
1462 (interfaces . (text-interface
1463 self-alignment-interface
1464 font-interface))))))
1466 (SostenutoPedalLineSpanner
1470 (X-extent . ,Axis_group_interface::height)
1472 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1475 (minimum-space . 1.0)
1477 (meta . ((class . Spanner)
1478 (interfaces . (piano-pedal-interface
1479 axis-group-interface
1480 side-position-interface))))))
1485 (stencil . ,Staff_symbol::print)
1488 (ledger-line-thickness . (1.0 . 0.1))
1490 (meta . ((class . Spanner)
1491 (interfaces . (staff-symbol-interface))))))
1495 (direction . ,Stem::calc_direction)
1496 (stem-end-position . ,Stem::calc_stem_end_position)
1497 (stem-info . ,Stem::calc_stem_info)
1498 (positioning-done . ,Stem::calc_positioning_done)
1499 (stencil . ,Stem::print)
1500 (X-extent . ,Stem::width)
1501 (Y-extent . ,Stem::height)
1502 (length . ,Stem::calc_length)
1508 ;; 3.5 (or 3 measured from note head) is standard length
1509 ;; 32nd, 64th flagged stems should be longer
1510 (lengths . (3.5 3.5 3.5 4.5 5.0))
1512 ;; FIXME. 3.5 yields too long beams (according to Ross and
1513 ;; looking at Baerenreiter examples) for a number of common
1514 ;; boundary cases. Subtracting half a beam thickness fixes
1515 ;; this, but the bug may well be somewhere else.
1517 ;; FIXME this should come from 'lengths
1518 (beamed-lengths . (3.26 3.5 3.6))
1520 ;; The 'normal' minima
1521 (beamed-minimum-free-lengths . (1.83 1.5 1.25))
1522 ;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
1524 ;; The 'extreme case' minima
1525 (beamed-extreme-minimum-free-lengths . (2.0 1.25))
1527 ;; Stems in unnatural (forced) direction should be shortened by
1528 ;; one staff space, according to [Roush & Gourlay].
1529 ;; Flagged stems we shorten only half a staff space.
1530 (stem-shorten . (1.0 0.5))
1535 ;; default stem direction for note on middle line
1536 (neutral-direction . -1)
1538 ;; We use the normal minima as minimum for the ideal lengths,
1539 ;; and the extreme minima as abolute minimum length.
1541 (X-offset-callbacks . (,Stem::offset_callback))
1542 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1543 (meta . ((class . Item)
1544 (interfaces . (stem-interface
1545 font-interface))))))
1549 (Y-extent . ,Stem_tremolo::height)
1550 (stencil . ,Stem_tremolo::print)
1552 (beam-width . 1.6) ; staff-space
1553 (beam-thickness . 0.48) ; staff-space
1554 (meta . ((class . Item)
1555 (interfaces . (stem-tremolo-interface))))))
1559 (no-spacing-rods . #t)
1560 (stencil . ,Sustain_pedal::print)
1561 (self-alignment-X . 0)
1563 (padding . 0.0) ;; padding relative to SustainPedalLineSpanner
1564 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1565 (meta . ((class . Item)
1566 (interfaces . (piano-pedal-interface
1567 text-spanner-interface
1569 self-alignment-interface
1570 font-interface))))))
1572 (SustainPedalLineSpanner
1575 (X-extent . ,Axis_group_interface::height)
1576 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1578 (staff-padding . 1.2)
1579 (minimum-space . 1.0)
1581 (meta . ((class . Spanner)
1582 (interfaces . (piano-pedal-interface
1583 axis-group-interface
1584 side-position-interface))))))
1589 (X-extent . ,Axis_group_interface::width)
1590 (Y-extent . ,Axis_group_interface::height)
1591 (meta . ((class . System)
1592 (interfaces . (system-interface
1593 axis-group-interface))))))
1598 (stencil . ,System_start_delimiter::print)
1599 (collapse-height . 5.0)
1600 (font-encoding . fetaBraces)
1602 (meta . ((class . Spanner)
1603 (interfaces . (system-start-delimiter-interface
1604 font-interface))))))
1609 (X-offset-callbacks . (,(lambda (g a) -0.8)))
1610 (stencil . ,System_start_delimiter::print)
1612 (collapse-height . 5.0)
1614 (meta . ((class . Spanner)
1615 (interfaces . (font-interface
1616 system-start-delimiter-interface))))))
1621 (glyph . "bar-line")
1623 (stencil . ,System_start_delimiter::print)
1624 (meta . ((class . Spanner)
1625 (interfaces . (system-start-delimiter-interface))))))
1630 (stencil . ,Text_interface::print)
1631 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1633 (stem-attachment . (1.0 . 1.35))
1634 (font-series . bold)
1635 (meta . ((class . Item)
1637 . (rhythmic-head-interface
1640 staff-symbol-referencer-interface
1641 text-interface))))))
1645 (no-spacing-rods . #t)
1646 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1649 ;; sync with Fingering ?
1651 (staff-padding . 0.5)
1653 (stencil . ,Text_interface::print)
1654 (direction . ,Script_interface::calc_direction)
1656 (avoid-slur . around)
1657 (slur-padding . 0.5)
1658 (script-priority . 200)
1659 ;; todo: add X self alignment?
1660 (meta . ((class . Item)
1661 (interfaces . (text-script-interface
1663 side-position-interface
1664 font-interface))))))
1668 (stencil . ,Text_spanner::print)
1669 (font-shape . italic)
1670 (style . dashed-line)
1671 (staff-padding . 0.8)
1672 (dash-fraction . 0.2)
1675 (meta . ((class . Spanner)
1676 (interfaces . (text-spanner-interface
1677 side-position-interface
1678 font-interface))))))
1682 (control-points . ,Tie::calc_control_points)
1683 (direction . ,Tie::calc_direction)
1684 (stencil . ,Tie::print)
1685 (details . ((ratio . 0.333)
1686 (height-limit . 1.0)
1687 (between-length-limit . 1.0)))
1689 (meta . ((class . Spanner)
1690 (interfaces . (tie-interface))))
1695 (positioning-done . ,Tie_column::calc_positioning_done)
1696 (before-line-breaking . ,Tie_column::before_line_breaking)
1699 (meta . ((class . Spanner)
1700 (interfaces . (tie-column-interface))))))
1704 (stencil . ,Time_signature::print)
1705 (break-align-symbol . time-signature)
1706 (break-visibility . ,all-visible)
1708 (first-note . (fixed-space . 2.0))
1709 (right-edge . (extra-space . 0.5))
1710 (staff-bar . (minimum-space . 2.0))))
1713 (meta . ((class . Item)
1714 (interfaces . (time-signature-interface
1715 break-aligned-interface
1716 font-interface))))))
1720 (stencil . ,Dynamic_text_spanner::print)
1721 (edge-text . ,(cons (make-musicglyph-markup "scripts.trill")
1724 (staff-padding . 1.0)
1727 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1728 (meta . ((class . Spanner)
1729 (interfaces . (text-spanner-interface
1730 side-position-interface
1731 font-interface))))))
1733 (TrillPitchAccidental
1734 . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1738 (stencil . ,Accidental_interface::print)
1739 (meta . ((class . Item)
1740 (interfaces . (item-interface
1741 accidental-interface
1742 side-position-interface
1743 font-interface))))))
1746 . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1749 (stencil . ,parenthesize-elements)
1750 (direction . ,RIGHT)
1752 (meta . ((class . Item)
1753 (interfaces . (side-position-interface
1755 rhythmic-head-interface
1757 accidental-interface
1758 axis-group-interface))))))
1762 (stencil . ,Note_head::print)
1764 (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1766 (meta . ((class . Item)
1767 (interfaces . (item-interface
1768 rhythmic-head-interface
1770 pitched-trill-interface
1772 staff-symbol-referencer-interface))))))
1778 (edge-height . (0.7 . 0.7))
1779 (shorten-pair . (-0.2 . -0.2))
1780 (direction . ,Tuplet_bracket::calc_direction)
1781 (positions . ,Tuplet_bracket::calc_positions)
1782 (stencil . ,Tuplet_bracket::print)
1783 (font-shape . italic)
1785 (meta . ((class . Spanner)
1786 (interfaces . (text-interface
1788 tuplet-bracket-interface
1789 font-interface))))))
1793 (stencil . ,Text_interface::print)
1794 (font-shape . italic)
1795 (no-spacing-rods . #t)
1796 (self-alignment-X . 0)
1798 (padding . 0.0) ;; padding relative to UnaCordaPedalLineSpanner
1799 (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1800 (meta . ((class . Item)
1801 (interfaces . (text-interface
1802 self-alignment-interface
1803 font-interface))))))
1805 (UnaCordaPedalLineSpanner
1808 (X-extent . ,Axis_group_interface::height)
1809 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1811 (staff-padding . 1.2)
1812 (minimum-space . 1.0)
1814 (meta . ((class . Spanner)
1815 (interfaces . (piano-pedal-interface
1816 axis-group-interface
1817 side-position-interface))))))
1823 (stencil . ,Vaticana_ligature::print)
1824 (meta . ((class . Spanner)
1825 (interfaces . (vaticana-ligature-interface
1826 font-interface))))))
1831 (positioning-done . ,Align_interface::calc_positioning_done)
1832 (after-line-breaking . ,Align_interface::stretch_after_break)
1833 (Y-extent . ,Axis_group_interface::height)
1834 (X-extent . ,Axis_group_interface::width)
1836 (meta . ((class . Spanner)
1837 (interfaces . (align-interface
1838 axis-group-interface))))))
1842 (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
1844 (Y-extent . ,Hara_kiri_group_spanner::y_extent)
1845 (X-extent . ,Axis_group_interface::width)
1846 (meta . ((class . Spanner)
1847 (interfaces . (axis-group-interface
1848 vertically-spaceable-interface))))))
1853 (Y-offset-callbacks . (,Side_position_interface::aligned_on_support_refpoints))
1855 (space-alist . ((left-edge . (extra-space . 1.0))))
1856 (break-align-symbol . instrument-name)
1857 (stencil . ,Text_interface::print)
1858 (break-align-symbol . clef)
1859 (break-visibility . ,begin-of-line-visible)
1861 (meta . ((class . Item)
1862 (interfaces . (font-interface
1863 self-alignment-interface
1864 side-position-interface
1866 break-aligned-interface))))))
1870 (stencil . ,Volta_bracket_interface::print)
1871 (after-line-breaking . ,Volta_bracket_interface::after_line_breaking)
1874 (font-encoding . fetaNumber)
1875 (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1876 (thickness . 1.6) ;; linethickness
1877 (edge-height . (2.0 . 2.0)) ;; staffspace;
1880 (meta . ((class . Spanner)
1881 (interfaces . (volta-bracket-interface
1882 horizontal-bracket-interface
1885 side-position-interface
1897 (stencil . ,Line_spanner::print)
1898 (after-line-breaking . ,Line_spanner::after_line_breaking)
1899 (meta . ((class . Spanner)
1900 (interfaces . (line-spanner-interface
1906 (define (completize-grob-entry x)
1907 "Transplant assoc key into 'name entry of 'meta of X. Set interfaces for Item, Spanner etc.
1909 ;; (display (car x))
1911 (let* ((name-sym (car x))
1912 (grob-entry (cdr x))
1913 (meta-entry (cdr (assoc 'meta grob-entry)))
1914 (class (cdr (assoc 'class meta-entry)))
1916 (cdr (assoc 'interfaces meta-entry))))
1920 (set! ifaces-entry (cons 'item-interface ifaces-entry)))
1921 ((eq? 'Spanner class)
1922 (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
1923 ((eq? 'Paper_column class)
1924 (set! ifaces-entry (cons 'item-interface
1925 (cons 'paper-column-interface ifaces-entry))))
1926 ((eq? 'System class)
1927 (set! ifaces-entry (cons 'system-interface
1928 (cons 'spanner-interface ifaces-entry))))
1930 (ly:warning "Unknown class ~a" class)))
1931 (set! ifaces-entry (cons 'grob-interface ifaces-entry))
1933 (set! meta-entry (assoc-set! meta-entry 'name name-sym))
1934 (set! meta-entry (assoc-set! meta-entry 'interfaces
1936 (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
1937 (cons name-sym grob-entry)))
1939 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
1941 ;; (display (map pair? all-grob-descriptions))
1943 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
1946 ;; (display (car x)) (newline)
1948 (set-object-property! (car x) 'translation-type? list?)
1949 (set-object-property! (car x) 'is-grob? #t))
1950 all-grob-descriptions)
1952 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))