]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-grobs.scm
Merge branch 'master' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / scm / define-grobs.scm
index 3506ea0892608855e224282ad9f70e445069b671..d3270748bbfa28263ee66322d2ce502ffa7df8aa 100644 (file)
     (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)
+       (pure-Y-extent . ,ly:accidental-interface::pure-height)
        (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)
+       (pure-Y-extent . ,ly:accidental-interface::pure-height)
+       (after-line-breaking
+        . ,ly:accidental-interface::after-line-breaking)
+       (meta . ((class . Item)
+                (interfaces . (accidental-interface
+                               font-interface))))))
+
     
     (AccidentalSuggestion
      . (
                        ,(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)
        (padding . 0.5)
        (X-offset . ,ly:side-position-interface::x-aligned-side)
        (direction . ,LEFT)
-       (cautionary-style . parentheses)
        (stencil . ,ly:accidental-interface::print)
+       (pure-Y-extent . ,ly:accidental-interface::pure-height)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)      
        (after-line-breaking . ,ly:accidental-interface::after-line-breaking)
        (side-axis . ,X)
        (meta . ((class . Item)
-                (interfaces . (item-interface
+                (interfaces . (
                                accidental-interface
                                break-aligned-interface
                                side-position-interface
        (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)
        (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
        (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
      . (
        (axes . (,Y))
        (Y-extent . ,ly:axis-group-interface::height)
+       (skylines . ,ly:axis-group-interface::calc-skylines)
        (meta . ((class . Spanner)
                 (interfaces . (axis-group-interface
                                ))))))
        (beaming . ,ly:beam::calc-beaming)
        (stencil . ,ly:beam::print)
        (clip-edges . #t)
-       
+
+       (details .  ((hint-direction-penalty . 20)))
        ;; TODO: should be in SLT.
        (thickness . 0.48) ; in staff-space
        (neutral-direction . ,DOWN)
        ;; only for debugging.
        (font-family . roman)
        (meta . ((class . Spanner)
+                (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) 
                 (interfaces . (staff-symbol-referencer-interface
+                               unbreakable-spanner-interface
                                beam-interface))))))
 
     (BendAfter
      . (
-       (stencil . ,fall::print)
+       (stencil . ,bend::print)
        (thickness . 2.0)
        (meta . ((class . Spanner)
                 (interfaces . (spanner-interface
      . (
        (Y-extent . ,ly:cluster-beacon::height)
        (meta . ((class . Item)
-                (interfaces . (cluster-beacon-interface))))))
+                (interfaces . (rhythmic-grob-interface
+                               cluster-beacon-interface))))))
 
     (ClusterSpanner
      . (
                                rhythmic-grob-interface
                                text-interface
                                chord-name-interface
-                               item-interface))))))
+                               ))))))
 
     (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)
      . (
        (stencil . ,ly:dots::print)
        (dot-count . ,dots::calc-dot-count)
+       (staff-position . ,dots::calc-staff-position)
        (meta . ((class . Item)
                 (interfaces . (font-interface
                                staff-symbol-referencer-interface
        (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)
        (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
        (self-alignment-X . 0)
        (self-alignment-Y . 0)
        (script-priority . 100)
-
        (stencil . ,ly:text-interface::print)
        (direction . ,ly:script-interface::calc-direction)
        (text . ,fingering::calc-text) 
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     (FretBoard
      . ((stencil . ,fret-board::calc-stencil)
        (finger-code . below-string)
        (style . line)
        (gap . 0.5)
        (zigzag-width . 0.75)
-       (non-musical . #t)
        (X-extent . #f)
        (Y-extent . #f)
        (stencil . ,ly:line-spanner::print)
        (after-line-breaking . ,ly:line-spanner::after-line-breaking)
        (meta . ((class . Spanner)
                 (interfaces . (line-interface
+                               unbreakable-spanner-interface
                                line-spanner-interface))))))
 
     (GraceSpacing
     (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))
        (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))
        (direction . ,UP)
        (padding . 0.8)
        (side-axis . ,Y)
+       (outside-staff-priority . 1000)
        (meta . ((class . Item)
                 (interfaces . (text-interface
                                side-position-interface
        
        (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)
        (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
 
     (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)
        (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
        (thickness . 0.48)
        (slope . 1.7)
        (meta . ((class . Item)
-                (interfaces . (percent-repeat-item-interface))))))
+                (interfaces . (rhythmic-grob-interface
+                               percent-repeat-item-interface))))))
 
     (RepeatTie
      . (
 
        ;; 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)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (side-axis . ,Y)
     (SeparationItem
      . (
        (avoid-slur . inside)
-       (skylines . ,ly:separation-item::calc-skylines)
        (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))))))
        (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)
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     
     (StrokeFinger
      . (
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     
 
     (SustainPedal
      . (
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (stencil . ,ly:sustain-pedal::print)
        (self-alignment-X . 0)
        (direction . ,RIGHT)
        (axes . (0 1))
        (X-extent . ,ly:axis-group-interface::width)
        (Y-extent . ,ly:axis-group-interface::height)
-       (skyline-spacing . #t)
+       (skylines . ,ly:axis-group-interface::calc-skylines)
+       (skyline-horizontal-padding . 1.0)
        (meta . ((class . System)
                 (interfaces . (system-interface
                                axis-group-interface))))))
                 (interfaces . (side-position-interface
                                system-start-delimiter-interface))))))
 
-
     (TabNoteHead
      . (
        (stencil . ,ly:text-interface::print)
        (Y-offset . ,ly:staff-symbol-referencer::callback)
+       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+       (direction . 0)
        (font-size . -2)
        (stem-attachment . (0.0 . 1.35))
        (font-series . bold)
 
     (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)
        (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)
        (dash-period . 3.0)
        (side-axis . ,Y)
        (direction . ,UP)
+       (outside-staff-priority . 350)
        (meta . ((class . Spanner)
                 (interfaces . (text-spanner-interface
                                line-spanner-interface
        (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)
        (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
        (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
+                (interfaces . (trill-pitch-accidental-interface
+                               accidental-interface
                                side-position-interface
                                font-interface))))))
 
        (axes . (,X))
        (font-size . -4)
        (stencil . ,parenthesize-elements)
+       (stencils . ,parentheses-item::calc-parenthesis-stencils)
        (direction . ,RIGHT)
        (side-axis . ,X)
        (padding . 0.3)
        (meta . ((class . Item)
                 (interfaces . (side-position-interface
+                               parentheses-interface
                                note-head-interface
                                rhythmic-head-interface
                                font-interface
-                               accidental-interface
                                axis-group-interface))))))
 
     (TrillPitchHead
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (font-size . -4)
        (meta . ((class . Item)
-                (interfaces . (item-interface
-                               rhythmic-head-interface
+                (interfaces . (rhythmic-head-interface
                                font-interface
                                pitched-trill-interface
                                ledgered-interface
      . (
        (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
        (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)
+                (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)))
                 (interfaces . (align-interface
                                axis-group-interface))))))
     (VerticalAxisGroup
        (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)
-       (skyline-spacing . #t)
+       (skylines . ,ly:axis-group-interface::calc-skylines);
        (meta . ((class . Spanner)
+                (object-callbacks . ((X-common . ,ly:axis-group-interface::calc-x-common)))
                 (interfaces . (axis-group-interface
                                hara-kiri-group-spanner-interface
                                vertically-spaceable-interface))))))
        (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                            
                               (cons 'spanner-interface ifaces-entry))))
      (else
       (ly:warning "Unknown class ~a" class)))
+
+    (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
 
     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
 
 (define pure-print-callbacks
   (list
+   ly:bar-line::print
    ly:note-head::print
    ly:accidental-interface::print
    ly:dots::print
         (ly:stencil? sten)
         (memq sten pure-print-callbacks))
        (ly:grob::stencil-height grob)
-
        '(0 . 0))))
 
 (define pure-conversions-alist
   (list
    `(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
    `(,ly:stem::height . ,ly:stem::pure-height)
+   `(,ly:rest::height . ,ly:rest::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:staff-symbol-referencer::callback
    ly:staff-symbol::height))
 
-(define-public (pure-relevant grob)
+(define-public (pure-relevant? grob)
   (let ((extent-callback (ly:grob-property-data grob 'Y-extent)))
     (not (eq? #f
              (or
                  (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))))))))))
+                  (ly:stencil? (ly:grob-property-data grob 'stencil))
+
+                  ))))))))
 
 (define-public (call-pure-function unpure args start end)
   (if (ly:simple-closure? unpure)
              (apply unpure args)
              (let ((pure (assq unpure pure-conversions-alist)))
                (if pure
-                   (apply (cdr pure) (append (list (car args) start end) (cdr args)))))))))
+                   (apply (cdr pure)
+                          (append
+                           (list (car args) start end)
+                           (cdr args)))))))))