X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-grobs.scm;h=c4246b6589e5097c0626314e37b5f0338edc63ef;hb=bdf808b1c2de11d29e09bb0fb94e83ee9ecc6957;hp=14eb7e17966fc49d7258675023798c4374dee963;hpb=0da65512d3ef498ace08623f449b4af08411a89c;p=lilypond.git diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 14eb7e1796..c4246b6589 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -20,13 +20,27 @@ (Accidental . ( (avoid-slur . inside) - (cautionary-style . parentheses) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (alteration . ,accidental-interface::calc-alteration) (stencil . ,ly:accidental-interface::print) (after-line-breaking . ,ly:accidental-interface::after-line-breaking) (meta . ((class . Item) (interfaces . (accidental-interface font-interface)))))) + (AccidentalCautionary + . ( + (avoid-slur . inside) + (parenthesized . #t) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (alteration . ,accidental-interface::calc-alteration) + (stencil . ,ly:accidental-interface::print) + (after-line-breaking + . ,ly:accidental-interface::after-line-breaking) + (meta . ((class . Item) + (interfaces . (accidental-interface + font-interface)))))) + (AccidentalSuggestion . ( @@ -36,12 +50,13 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (self-alignment-X . ,CENTER) - (cautionary . #t) - (cautionary-style . smaller) + (font-size . -2) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (alteration . ,accidental-interface::calc-alteration) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (cautionary-style . parentheses) (direction . ,UP) (staff-padding . 0.25) + (outside-staff-priority . 0) (script-priority . 0) (side-axis . ,X) (meta . ((class . Item) @@ -51,6 +66,7 @@ accidental-suggestion-interface self-alignment-interface font-interface)))))) + (AccidentalPlacement . ( (left-padding . 0.2) @@ -103,8 +119,8 @@ (padding . 0.5) (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (cautionary-style . parentheses) (stencil . ,ly:accidental-interface::print) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) (after-line-breaking . ,ly:accidental-interface::after-line-breaking) (side-axis . ,X) (meta . ((class . Item) @@ -144,6 +160,14 @@ side-position-interface font-interface)))))) + (BalloonTextItem + . ((stencil . ,ly:balloon-interface::print) + (text . ,(grob::calc-property-by-copy 'text)) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (meta . ((class . Item) + (interfaces . (text-interface + font-interface)))))) (BarLine . ( (break-align-symbol . staff-bar) @@ -152,6 +176,7 @@ (layer . 0) (break-visibility . ,all-visible) (non-musical . #t) + (extra-spacing-width . (-0.3 . 0.3)) (stencil . ,ly:bar-line::print) (glyph-name . ,bar-line::calc-glyph-name) @@ -192,10 +217,11 @@ (font-size . -2) (Y-offset . ,ly:side-position-interface::y-aligned-side) (side-axis . ,Y) + (outside-staff-priority . 100) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure - (list ly:break-alignment-align-interface::self-align-callback)) + (list ly:break-alignable-interface::self-align-callback)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) @@ -207,7 +233,7 @@ ((class . Item) (interfaces . (side-position-interface text-interface - break-alignment-align-interface + break-alignable-interface self-alignment-interface font-interface )))) @@ -229,6 +255,7 @@ (positioning-done . ,ly:align-interface::calc-positioning-done) (Y-extent . ,ly:axis-group-interface::height) (stacking-dir . -1) + (padding . 0.2) (meta . ((class . Spanner) (interfaces . (align-interface bass-figure-alignment-interface @@ -266,6 +293,7 @@ . ( (axes . (,Y)) (Y-extent . ,ly:axis-group-interface::height) + (skylines . ,ly:axis-group-interface::calc-skylines) (meta . ((class . Spanner) (interfaces . (axis-group-interface )))))) @@ -325,7 +353,7 @@ (BendAfter . ( - (stencil . ,fall::print) + (stencil . ,bend::print) (thickness . 2.0) (meta . ((class . Spanner) (interfaces . (spanner-interface @@ -335,7 +363,7 @@ . ( (non-musical . #t) (stacking-dir . 1) - (positioning-done . ,ly:break-align-interface::calc-positioning-done) + (positioning-done . ,ly:break-alignment-interface::calc-positioning-done) (X-extent . ,ly:axis-group-interface::width) (break-align-orders . ;; end of line #(( @@ -413,6 +441,7 @@ (stencil . ,ly:clef::print) (glyph-name . ,ly:clef::calc-glyph-name) (non-musical . #t) + (avoid-slur . inside) (font-family . music) (break-align-symbol . clef) (break-visibility . ,begin-of-line-visible) @@ -435,7 +464,8 @@ . ( (Y-extent . ,ly:cluster-beacon::height) (meta . ((class . Item) - (interfaces . (cluster-beacon-interface)))))) + (interfaces . (rhythmic-grob-interface + cluster-beacon-interface)))))) (ClusterSpanner . ( @@ -464,7 +494,7 @@ (CombineTextScript . ( (stencil . ,ly:text-interface::print) - (no-spacing-rods . #t) + (extra-spacing-width . (+inf.0 . -inf.0)) (Y-offset . ,ly:side-position-interface::y-aligned-side) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (direction . ,UP) @@ -533,7 +563,7 @@ (meta . ((class . Item) (interfaces . (font-interface break-aligned-interface - percent-repeat-interface)))))) + percent-repeat-item-interface)))))) (DoublePercentRepeatCounter . ( @@ -551,7 +581,7 @@ (meta . ((class . Item) (interfaces . (side-position-interface self-alignment-interface - percent-repeat-interface + percent-repeat-item-interface font-interface text-interface)))))) (DynamicLineSpanner @@ -565,6 +595,7 @@ (minimum-space . 1.2) (direction . ,DOWN) (side-axis . ,Y) + (outside-staff-priority . 250) (Y-extent . ,ly:axis-group-interface::height) (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Spanner) @@ -589,8 +620,8 @@ (font-encoding . fetaDynamic) (font-shape . italic) (avoid-slur . around) - (no-spacing-rods . #t) - (script-priority . 100) + (extra-spacing-width . (+inf.0 . -inf.0)) + (outside-staff-priority . 250) (meta . ((class . Item) (interfaces . (font-interface text-interface @@ -647,12 +678,19 @@ side-position-interface self-alignment-interface item-interface)))))) + (FretBoard + . ((stencil . ,fret-board::calc-stencil) + (finger-code . below-string) + (meta . ((class . Item) + (interfaces . (fret-diagram-interface + font-interface + )))) + )) (Glissando . ( (style . line) (gap . 0.5) (zigzag-width . 0.75) - (non-musical . #t) (X-extent . #f) (Y-extent . #f) (stencil . ,ly:line-spanner::print) @@ -718,6 +756,8 @@ (thickness . 1.0) (stencil . ,ly:horizontal-bracket::print) (Y-offset . ,ly:side-position-interface::y-aligned-side) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (padding . 0.2) (staff-padding . 0.2) (direction . ,DOWN) @@ -757,6 +797,7 @@ (KeyCancellation . ( (stencil . ,ly:key-signature-interface::print) + (glyph-name-alist . ,cancellation-glyph-name-alist) (space-alist . ( (time-signature . (extra-space . 1.25)) (staff-bar . (extra-space . 0.6)) @@ -768,12 +809,15 @@ (break-visibility . ,begin-of-line-invisible) (non-musical . #t) (meta . ((class . Item) - (interfaces . (key-signature-interface + (interfaces . (key-cancellation-interface + key-signature-interface font-interface break-aligned-interface)))))) (KeySignature . ( (stencil . ,ly:key-signature-interface::print) + (avoid-slur . inside) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) (space-alist . ( (time-signature . (extra-space . 1.15)) (staff-bar . (extra-space . 1.1)) @@ -793,9 +837,10 @@ . ( (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:semi-tie::calc-direction) + (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) + (head-direction . ,LEFT) (thickness . 1.0) (meta . ((class . Item) (interfaces . (semi-tie-interface)) @@ -823,7 +868,7 @@ (length-fraction . 0.25) (layer . 0) (meta . ((class . Spanner) - (interfaces . (ledger-line-interface)))))) + (interfaces . (ledger-line-spanner-interface)))))) (LeftEdge . ( @@ -885,8 +930,8 @@ (minimum-length . 0.3) (minimum-distance . 0.1) (padding . 0.07) - (springs-and-rods . ,ly:hyphen-spanner::set-spacing-rods) - (stencil . ,ly:hyphen-spanner::print) + (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) + (stencil . ,ly:lyric-hyphen::print) (Y-extent . (0 . 0)) (meta . ((class . Spanner) (interfaces . (lyric-interface @@ -896,7 +941,7 @@ (LyricSpace . ((minimum-distance . 0.45) - (springs-and-rods . ,ly:hyphen-spanner::set-spacing-rods) + (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) (padding . 0.0) (Y-extent . #f) (X-extent . #f) @@ -909,7 +954,7 @@ (LyricText . ( (stencil . ,lyric-text::print) - (text . ,lyric-text::calc-text) + (text . ,(grob::calc-property-by-copy 'text)) (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) (self-alignment-X . 0) (word-space . 0.6) @@ -958,6 +1003,7 @@ (direction . ,UP) (padding . 0.8) (side-axis . ,Y) + (outside-staff-priority . 1000) (meta . ((class . Item) (interfaces . (text-interface side-position-interface @@ -1109,11 +1155,7 @@ (Y-offset . ,ly:side-position-interface::y-aligned-side) (stencil . ,ly:text-interface::print) - - ;; no Y dimensions, because of lyrics under tenor clef. - (Y-extent . (0 . 0)) (font-shape . italic) - (padding . 0.6) (staff-padding . 0.2) (font-size . -4) (meta . ((class . Item) @@ -1134,6 +1176,7 @@ (dash-fraction . 0.3) (edge-height . (0 . 1.2)) (direction . ,UP) + (outside-staff-priority . 400) (meta . ((class . Spanner) (interfaces . (ottava-bracket-interface horizontal-bracket-interface @@ -1159,11 +1202,20 @@ (ParenthesesItem . ((stencil . ,parentheses-item::print) + (stencils . ,parentheses-item::calc-parenthesis-stencils) (font-size . -6) (padding . 0.2) (meta . ((class . Item) (interfaces . (parentheses-interface font-interface)))) )) + + (HarmonicParenthesesItem + . ((stencil . ,parentheses-item::print) + (padding . 0) + (stencils . ,parentheses-item::calc-angled-bracket-stencils) + (meta . ((class . Item) + (interfaces . (parentheses-interface font-interface)))) + )) (PhrasingSlur . ((details . ,default-slur-details) @@ -1191,7 +1243,7 @@ (meta . ((class . Spanner) (interfaces . (multi-measure-rest-interface font-interface - percent-repeat-interface)))))) + percent-repeat-item-interface)))))) (PercentRepeatCounter . ( (stencil . ,ly:text-interface::print) @@ -1208,7 +1260,7 @@ (meta . ((class . Spanner) (interfaces . (side-position-interface self-alignment-interface - percent-repeat-interface + percent-repeat-item-interface font-interface text-interface)))))) @@ -1234,7 +1286,7 @@ (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure - (list ly:break-alignment-align-interface::self-align-callback)) + (list ly:break-alignable-interface::self-align-callback)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) @@ -1245,32 +1297,35 @@ (font-size . 2) (baseline-skip . 2) (break-visibility . ,end-of-line-invisible) - (break-align-symbol . staff-bar) + (break-align-symbol . clef) (padding . 0.8) + (outside-staff-priority . 1500) (meta . ((class . Item) (interfaces . (text-interface side-position-interface - break-alignment-align-interface + break-alignable-interface font-interface mark-interface self-alignment-interface)))))) - (RepeatSlash . ( (stencil . ,ly:percent-repeat-item-interface::beat-slash) (thickness . 0.48) (slope . 1.7) (meta . ((class . Item) - (interfaces . (percent-repeat-interface)))))) + (interfaces . (rhythmic-grob-interface + percent-repeat-item-interface)))))) + (RepeatTie . ( (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:semi-tie::calc-direction) + (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) (thickness . 1.0) + (head-direction . ,RIGHT) (meta . ((class . Item) (interfaces . (semi-tie-interface)) )) @@ -1280,7 +1335,9 @@ . ( (X-extent . #f) (Y-extent . #f) + (direction . ,ly:tie::calc-direction) (head-direction . ,RIGHT) + (positioning-done . ,ly:semi-tie-column::calc-positioning-done) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)) @@ -1290,7 +1347,7 @@ (Rest . ( (stencil . ,ly:rest::print) - (duration-log . ,note-head::calc-duration-log) + (duration-log . ,stem::calc-duration-log) (X-extent . ,ly:rest::width) (Y-extent . ,ly:rest::height) (Y-offset . ,ly:rest::y-offset-callback) @@ -1316,7 +1373,9 @@ ;; padding set in script definitions. (staff-padding . 0.25) ;; (script-priority . 0) priorities for scripts, see script.scm - (X-offset . , ly:self-alignment-interface::centered-on-x-parent) + (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (side-axis . ,Y) (stencil . ,ly:script-interface::print) (direction . ,ly:script-interface::calc-direction) @@ -1339,8 +1398,10 @@ (SeparationItem . ( - (X-extent . #f) - (Y-extent . #f) + (avoid-slur . inside) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (skylines . ,ly:separation-item::calc-skylines) (meta . ((class . Item) (interfaces . (spacing-interface separation-item-interface)))))) @@ -1351,7 +1412,7 @@ (meta . ((class . Spanner) (interfaces . (only-prebreak-interface spacing-interface - separation-spanner-interface)))))) + separating-group-spanner-interface)))))) (Slur . ((details . ,default-slur-details) @@ -1374,13 +1435,14 @@ (stencil . ,ly:text-interface::print) (direction . ,RIGHT) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (no-spacing-rods . #t) + (extra-spacing-width . (+inf.0 . -inf.0)) (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner (font-shape . italic) (self-alignment-X . 0) (meta . ((class . Item) (interfaces . (text-interface self-alignment-interface + piano-pedal-script-interface font-interface)))))) (SostenutoPedalLineSpanner @@ -1474,7 +1536,7 @@ (Stem . ( (direction . ,ly:stem::calc-direction) - (duration-log . ,note-head::calc-duration-log) + (duration-log . ,stem::calc-duration-log) (default-direction . ,ly:stem::calc-default-direction) (stem-end-position . ,ly:stem::calc-stem-end-position) @@ -1579,7 +1641,7 @@ (SustainPedal . ( - (no-spacing-rods . #t) + (extra-spacing-width . (+inf.0 . -inf.0)) (stencil . ,ly:sustain-pedal::print) (self-alignment-X . 0) (direction . ,RIGHT) @@ -1591,6 +1653,7 @@ line-spanner-interface text-interface self-alignment-interface + piano-pedal-script-interface font-interface)))))) (SustainPedalLineSpanner @@ -1613,6 +1676,8 @@ (axes . (0 1)) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) + (skylines . ,ly:axis-group-interface::calc-skylines) + (skyline-horizontal-padding . 1.0) (meta . ((class . System) (interfaces . (system-interface axis-group-interface)))))) @@ -1675,12 +1740,12 @@ (interfaces . (side-position-interface system-start-delimiter-interface)))))) - (TabNoteHead . ( (stencil . ,ly:text-interface::print) (Y-offset . ,ly:staff-symbol-referencer::callback) - (duration-log . ,note-head::calc-duration-log) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (direction . 0) (font-size . -2) (stem-attachment . (0.0 . 1.35)) (font-series . bold) @@ -1694,8 +1759,10 @@ (TextScript . ( - (no-spacing-rods . #t) + (extra-spacing-width . (+inf.0 . -inf.0)) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (side-axis . ,Y) (direction . ,DOWN) ;; sync with Fingering ? @@ -1705,6 +1772,7 @@ (stencil . ,ly:text-interface::print) (direction . ,ly:script-interface::calc-direction) + (outside-staff-priority . 450) (avoid-slur . around) (slur-padding . 0.5) (script-priority . 200) @@ -1726,6 +1794,7 @@ (dash-period . 3.0) (side-axis . ,Y) (direction . ,UP) + (outside-staff-priority . 350) (meta . ((class . Spanner) (interfaces . (text-spanner-interface line-spanner-interface @@ -1741,7 +1810,7 @@ (stencil . ,ly:tie::print) (font-size . -6) (details . ( - ;; for a full list, see tie-helper.cc + ;; for a full list, see tie-details.cc (ratio . 0.333) (center-staff-line-clearance . 0.6) (tip-staff-line-clearance . 0.45) @@ -1779,6 +1848,7 @@ (stencil . ,ly:time-signature::print) (break-align-symbol . time-signature) (break-visibility . ,all-visible) + (avoid-slur . inside) (space-alist . ( (first-note . (fixed-space . 2.0)) (right-edge . (extra-space . 0.5)) @@ -1801,6 +1871,7 @@ (direction . ,UP) (Y-offset . ,ly:side-position-interface::y-aligned-side) (side-axis . ,Y) + (outside-staff-priority . 50) (meta . ((class . Spanner) (interfaces . (text-spanner-interface line-spanner-interface @@ -1814,6 +1885,7 @@ (font-size . -4) (side-axis . ,X) (stencil . ,ly:accidental-interface::print) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) (meta . ((class . Item) (interfaces . (item-interface trill-pitch-accidental-interface @@ -1825,6 +1897,7 @@ (axes . (,X)) (font-size . -4) (stencil . ,parenthesize-elements) + (stencils . ,parentheses-item::calc-parenthesis-stencils) (direction . ,RIGHT) (side-axis . ,X) (padding . 0.3) @@ -1833,7 +1906,6 @@ note-head-interface rhythmic-head-interface font-interface - accidental-interface axis-group-interface)))))) (TrillPitchHead @@ -1882,13 +1954,14 @@ . ( (stencil . ,ly:text-interface::print) (font-shape . italic) - (no-spacing-rods . #t) + (extra-spacing-width . (+inf.0 . -inf.0)) (self-alignment-X . 0) (direction . ,RIGHT) (padding . 0.0) ;; padding relative to UnaCordaPedalLineSpanner (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) (interfaces . (text-interface + piano-pedal-script-interface self-alignment-interface font-interface)))))) @@ -1924,7 +1997,8 @@ (Y-extent . ,ly:axis-group-interface::height) (X-extent . ,ly:axis-group-interface::width) (stacking-dir . -1) - (padding . 0.1) + (padding . 0.5) + (skylines . ,ly:axis-group-interface::combine-skylines) (meta . ((class . Spanner) (interfaces . (align-interface axis-group-interface)))))) @@ -1934,9 +2008,10 @@ (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) (X-extent . ,ly:axis-group-interface::width) + (skylines . ,ly:axis-group-interface::calc-skylines); (meta . ((class . Spanner) (interfaces . (axis-group-interface - hara-kiri-group-interface + hara-kiri-group-spanner-interface vertically-spaceable-interface)))))) @@ -1952,6 +2027,7 @@ (edge-height . (2.0 . 2.0)) ;; staff-space; (minimum-space . 5) (font-size . -4) + (outside-staff-priority . 100) (meta . ((class . Spanner) (interfaces . (volta-bracket-interface horizontal-bracket-interface @@ -2028,72 +2104,63 @@ (define pure-print-callbacks (list - `(,ly:note-head::print . '()) - `(,ly:clef::print . '()) - `(,ly:text-interface::print . '()) - `(,ly:script-interface::print . '()))) + ly:bar-line::print + ly:note-head::print + ly:accidental-interface::print + ly:dots::print + ly:clef::print + ly:text-interface::print + ly:script-interface::print)) ;; ly:grob::stencil-extent is safe iff the print callback is safe too (define (pure-stencil-height grob start stop) (let ((sten (ly:grob-property-data grob 'stencil))) (if (or (ly:stencil? sten) - (pair? (assq sten pure-print-callbacks))) + (memq sten pure-print-callbacks)) (ly:grob::stencil-height grob) '(0 . 0)))) -(define pure-Y-extents - (list - `(,ly:staff-symbol::height . ()))) - -(define Y-extent-conversions +(define pure-conversions-alist (list + `(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback) `(,ly:stem::height . ,ly:stem::pure-height) `(,ly:grob::stencil-height . ,pure-stencil-height) `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side) `(,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height) `(,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height) - `(,ly:slur::height . ,ly:slur::pure-height))) - -(define pure-Y-offsets - (list - `(,ly:staff-symbol-referencer::callback . ()))) + `(,ly:slur::height . ,ly:slur::pure-height) + `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side))) -(define Y-offset-conversions +(define pure-functions (list - `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side))) + ly:staff-symbol-referencer::callback + ly:staff-symbol::height)) (define-public (pure-relevant grob) (let ((extent-callback (ly:grob-property-data grob 'Y-extent))) - (or - (pair? extent-callback) - (pair? (assq extent-callback pure-Y-extents)) - (and - (pair? (assq extent-callback Y-extent-conversions)) - (or - (not (eq? extent-callback ly:grob::stencil-height)) - (pair? (assq (ly:grob-property-data grob 'stencil) pure-print-callbacks)) - (ly:stencil? (ly:grob-property-data grob 'stencil))))))) - -(define (pure-conversion pures conversions defsymbol defreturn rettype? grob start stop) - (let* ((normal-callback (ly:grob-property-data grob defsymbol)) - ) - - (if (rettype? normal-callback) - normal-callback - (if (pair? (assq normal-callback pures)) - (normal-callback grob) - (let - ((pure-callback (assq normal-callback conversions))) - - (if (pair? pure-callback) - ((cdr pure-callback) grob start stop) - defreturn)))))) - -(define-public (pure-Y-extent grob start stop) - (pure-conversion pure-Y-extents Y-extent-conversions - 'Y-extent '(0 . 0) pair? grob start stop)) - -(define-public (pure-Y-offset grob start stop) - (pure-conversion pure-Y-offsets Y-offset-conversions - 'Y-offset 0 number? grob start stop)) + (not (eq? #f + (or + (pair? extent-callback) + (memq extent-callback pure-functions) + (and + (pair? (assq extent-callback pure-conversions-alist)) + (begin + (or + (not (eq? extent-callback ly:grob::stencil-height)) + (memq (ly:grob-property-data grob 'stencil) pure-print-callbacks) + (ly:stencil? (ly:grob-property-data grob 'stencil)))))))))) + +(define-public (call-pure-function unpure args start end) + (if (ly:simple-closure? unpure) + (ly:eval-simple-closure (car args) unpure start end) + (if (not (procedure? unpure)) + unpure + (if (memq unpure pure-functions) + (apply unpure args) + (let ((pure (assq unpure pure-conversions-alist))) + (if pure + (apply (cdr pure) + (append + (list (car args) start end) + (cdr args)))))))))