;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(beg (ly:grob-pure-property grob 'stem-begin-position 0 1000)))
(abs (- (ly:stem::pure-calc-stem-end-position grob 0 2147483646) beg))))
+(define (stem-stub::do-calculations grob)
+ (and (ly:grob-property (ly:grob-parent grob X) 'cross-staff)
+ (not (ly:grob-property (ly:grob-parent grob X) 'transparent))))
+
+(define-public (stem-stub::pure-height grob beg end)
+ (if (stem-stub::do-calculations grob)
+ '(0 . 0)
+ '(+inf.0 . -inf.0)))
+
+(define-public (stem-stub::width grob)
+ (if (stem-stub::do-calculations grob)
+ (grob::x-parent-width grob)
+ '(+inf.0 . -inf.0)))
+
+(define-public (stem-stub::extra-spacing-height grob)
+ (if (stem-stub::do-calculations grob)
+ (let* ((dad (ly:grob-parent grob X))
+ (refp (ly:grob-common-refpoint grob dad Y))
+ (stem_ph (ly:grob-pure-height dad refp 0 1000000))
+ (my_ph (ly:grob-pure-height grob refp 0 1000000))
+ ;; only account for distance if stem is on different staff than stub
+ (dist (if (grob::has-interface refp 'hara-kiri-group-spanner-interface)
+ 0
+ (- (car my_ph) (car stem_ph)))))
+ (if (interval-empty? (interval-intersection stem_ph my_ph)) #f (coord-translate stem_ph dist)))
+ #f))
+
+;; FIXME: NEED TO FIND A BETTER WAY TO HANDLE KIEVAN NOTATION
(define-public (note-head::calc-duration-log grob)
- (min 2
- (ly:duration-log
- (ly:event-property (event-cause grob) 'duration))))
+ (let ((style (ly:grob-property grob 'style)))
+ (if (and (symbol? style) (string-match "kievan*" (symbol->string style)))
+ (min 3
+ (ly:duration-log
+ (ly:event-property (event-cause grob) 'duration)))
+ (min 2
+ (ly:duration-log
+ (ly:event-property (event-cause grob) 'duration))))))
(define-public (dots::calc-dot-count grob)
(ly:duration-dot-count
(string-append (number->string log) "petrucci")))
((neomensural)
(string-append (number->string log) (symbol->string style)))
+ ((kievan)
+ (string-append (number->string log) "kievan"))
(else
(if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style))
(symbol->string style)
(symbol->string style))))))
(define-public (note-head::calc-glyph-name grob)
- (let ((style (ly:grob-property grob 'style))
- (log (min 2 (ly:grob-property grob 'duration-log))))
-
+ (let* ((style (ly:grob-property grob 'style))
+ (log (if (string-match "kievan*" (symbol->string style))
+ (min 3 (ly:grob-property grob 'duration-log))
+ (min 2 (ly:grob-property grob 'duration-log)))))
(select-head-glyph style log)))
(define-public (note-head::brew-ez-stencil grob)
(define-public (rhythmic-location<=? a b)
(not (rhythmic-location<? b a)))
(define-public (rhythmic-location>=? a b)
- (rhythmic-location<? a b))
+ (not (rhythmic-location<? a b)))
(define-public (rhythmic-location>? a b)
(rhythmic-location<? b a))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bar lines.
+;; neighbor-interface routines
-;;
-;; How should a bar line behave at a break?
-(define bar-glyph-alist
- '((":|:" . (":|" . "|:"))
- (":|.|:" . (":|" . "|:"))
- (":|.:" . (":|" . "|:"))
- ("||:" . ("||" . "|:"))
- ("dashed" . ("dashed" . '()))
- ("|" . ("|" . ()))
- ("||:" . ("||" . "|:"))
- ("|s" . (() . "|"))
- ("|:" . ("|" . "|:"))
- ("|." . ("|." . ()))
-
- ;; hmm... should we end with a bar line here?
- (".|" . ("|" . ".|"))
- (":|" . (":|" . ()))
- ("||" . ("||" . ()))
- (".|." . (".|." . ()))
- ("|.|" . ("|.|" . ()))
- ("" . ("" . ""))
- (":" . (":" . ""))
- ("." . ("." . ()))
- ("'" . ("'" . ()))
- ("empty" . (() . ()))
- ("brace" . (() . "brace"))
- ("bracket" . (() . "bracket"))
-
- ;; segno bar lines
- ("S" . ("||" . "S"))
- ("|S" . ("|" . "S"))
- ("S|" . ("S" . ()))
- (":|S" . (":|" . "S"))
- (":|S." . (":|S" . ()))
- ("S|:" . ("S" . "|:"))
- (".S|:" . ("|" . "S|:"))
- (":|S|:" . (":|" . "S|:"))
- (":|S.|:" . (":|S" . "|:"))))
-
-(define-public (bar-line::calc-glyph-name grob)
- (let* ((glyph (ly:grob-property grob 'glyph))
- (dir (ly:item-break-dir grob))
- (result (assoc-get glyph bar-glyph-alist))
- (glyph-name (if (= dir CENTER)
- glyph
- (if (and result
- (string? (index-cell result dir)))
- (index-cell result dir)
- #f))))
- glyph-name))
-
-(define-public (bar-line::calc-break-visibility grob)
- (let* ((glyph (ly:grob-property grob 'glyph))
- (result (assoc-get glyph bar-glyph-alist)))
-
- (if result
- (vector (string? (car result)) #t (string? (cdr result)))
- all-invisible)))
(define-public (shift-right-at-line-begin g)
"Shift an item to the right, but only at the start of the line."
(cons -0.1 0.1)))
(define-public (pure-from-neighbor-interface::extra-spacing-height grob)
- (let* ((height (ly:grob::stencil-height grob))
+ (let* ((height (ly:grob-pure-height grob grob 0 10000000))
(from-neighbors (interval-union
height
(ly:axis-group-interface::pure-height
(hsb (ly:grob-property grob 'has-span-bar))
(ii (interval-intersection esh (cons -1.01 1.01))))
(if (pair? hsb)
- (cons (car (if (and (cdr hsb)
+ (cons (car (if (and (car hsb)
(ly:grob-property grob 'allow-span-bar))
esh ii))
- (cdr (if (car hsb) esh ii)))
+ (cdr (if (cdr hsb) esh ii)))
ii)))
(define-public (pure-from-neighbor-interface::extra-spacing-height-including-staff grob)
(0 . "accidentals.vaticana0")
(1/2 . "accidentals.mensural1")))
+(define-public alteration-kievan-glyph-name-alist
+ '((-1/2 . "accidentals.kievanM1")
+ (1/2 . "accidentals.kievan1")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; * Pitch Trill Heads
(let* ((event (event-cause grob))
(digit (ly:event-property event 'digit)))
- (if (> digit 5)
- (ly:input-message (ly:event-property event 'origin)
- "Warning: Fingering notation for finger number ~a"
- digit))
-
(number->string digit 10)))
(define-public (string-number::calc-text grob)
;; dynamics
(define-public (hairpin::calc-grow-direction grob)
- (if (eq? (ly:event-property (event-cause grob) 'class) 'decrescendo-event)
+ (if (ly:in-event-class? (event-cause grob) 'decrescendo-event)
START
STOP))