]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/output-lib.scm
* Documentation/user/instrument-notation.itely (Figured bass):
[lilypond.git] / scm / output-lib.scm
index 6adb53fcfb1bf21c6846240011b41dafef75050a..96cc55cdd62260915b25a41b9f18713364eab4c6 100644 (file)
 
 ;; The TabNoteHead stem attachment function.
 (define (tablature-stem-attachment-function style duration)
-  (cons 0.0 0.5))
+  (cons 0.0 1.35))
 
 ;; The TabNoteHead tablatureFormat callback.
 ;; Compute the text grob-property
 (define-public (fret-number-tablature-format string tuning pitch)
-  (number->string
-   (- (ly:pitch-semitones pitch)
-      (list-ref tuning
-               ;; remove 1 because list index starts at 0 and guitar string at 1. 
-                (- string 1)))))
+  (make-whiteout-markup
+   (make-vcenter-markup  
+    (number->string
+     (- (ly:pitch-semitones pitch)
+       (list-ref tuning
+                 ;; remove 1 because list index starts at 0 and guitar string at 1. 
+                 (- string 1)))))))
 
 ;; The 5-string banjo has got a extra string, the fifth (duh), wich
 ;; starts at the fifth fret on the neck. Frets on the fifth string
 ;;   on the banjo neck.
 ;; We solve this by defining a new fret-number-tablature function:
 (define-public (fret-number-tablature-format-banjo string tuning pitch)
+  (make-whiteout-markup
+   (make-vcenter-markup  
     (let ((fret (- (ly:pitch-semitones pitch) (list-ref tuning (- string 1)))))
-        (number->string (cond
-            ((and (> fret 0) (= string 5))
-                (+ fret 5))
-            (else fret)))))
-
-(define-public (hammer-print-function grob)
-  (let* ((note-collums (ly:grob-property grob 'note-columns))
-         (note-column1 (cadr note-collums))
-         (note-column2 (car  note-collums))
-         (note1 (car (ly:grob-property note-column1 'note-heads)))
-         (note2 (car (ly:grob-property note-column2 'note-heads)))
-        (text1 (ly:grob-property note1 'text))
-        (text2 (ly:grob-property note2 'text))
-         (fret1 (if (string? text1) (string->number text1) 0))
-         (fret2 (if (string? text2) (string->number text2) 0))
-         (letter (cond
-                 ((< fret1 fret2) "H")
-                 ((> fret1 fret2) "P")
-                 (else ""))))
-    (let* ((slur
-           ;; (Slur::print grob)
-
-           ;; 
-           ;; FIXME: a hammer is not a slur.
-           ;; 
-           (ly:make-stencil '() '(0 . 0) '(0 . 0)))
-          (layout (ly:grob-layout grob))
-          (text (interpret-markup
-                 layout
-                 (ly:grob-alist-chain grob (ly:output-def-lookup layout 'text-font-defaults))
-                 letter)))
-      
-      (let ((x (/ (- (cdr (ly:stencil-extent slur 0)) 
-                     (/ (cdr (ly:stencil-extent text 0)) 2.0))
-                  -2.0)))
-
-       (set! text
-             (ly:make-stencil (ly:stencil-expr text)
-                              (cons x x)
-                              (ly:stencil-extent text Y)))
-       
-        (ly:stencil-aligned-to text X RIGHT)))))
+      (number->string (cond
+                      ((and (> fret 0) (= string 5))
+                       (+ fret 5))
+                      (else fret)))))))
 
 
 (define-public guitar-tuning '(4 -1 -5 -10 -15 -20))
@@ -97,7 +63,7 @@
   (lambda (grob) (box-stencil (callback grob) thickness padding)))
 
 (define-public (make-stencil-circler thickness padding callback)
-  "Return function that adds a box around the grob passed as argument."
+  "Return function that adds a circle around the grob passed as argument."
   (lambda (grob) (circle-stencil (callback grob) thickness padding)))
 
 (define-public (arg->string arg)
         (defs (ly:output-def-lookup layout 'text-font-defaults))
         (props (ly:grob-alist-chain grob defs))
         (circle (Text_interface::interpret_markup
-                 layout props (make-draw-circle-markup 0.8 0.1)))
+                 layout props (make-draw-circle-markup 0.8 0.1 #f)))
         (text-stencil (Text_interface::interpret_markup layout props text)))
+    
     (ly:stencil-add (centered-stencil text-stencil) circle)))
 
 
         (number->string duration)))
     ((mensural)
      (string-append (number->string duration) (symbol->string style)))
+    ((petrucci)
+     (if (< duration 0)
+        (string-append (number->string duration) "mensural")
+        (string-append (number->string duration) (symbol->string style))))
     ((neomensural)
      (string-append (number->string duration) (symbol->string style)))
     ((default)
@@ -199,19 +170,22 @@ centered, X==1 is at the right, X == -1 is at the left."
   (let* ((bn (ly:context-property tr 'currentBarNumber)))
     (ly:context-set-property! tr 'barNumberVisibility (modulo-bar-number-visible n (modulo bn n)))))
 
-(define-public (default-bar-number-visibility barnum) (> barnum 1))
+(define-public (first-bar-number-invisible barnum) (> barnum 1))
 
 ;; See documentation of Item::visibility_lambda_
-(define-safe-public (begin-of-line-visible d) (if (= d 1) '(#f . #f) '(#t . #t)))
-(define-safe-public (end-of-line-visible d) (if (= d -1) '(#f . #f) '(#t . #t)))
-(define-safe-public (spanbar-begin-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
-
-(define-safe-public (all-visible d) '(#f . #f))
-(define-safe-public (all-invisible d) '(#t . #t))
-(define-safe-public (begin-of-line-invisible d) (if (= d 1) '(#t . #t) '(#f . #f)))
-(define-safe-public (center-invisible d) (if (= d 0) '(#t . #t) '(#f . #f)))
-(define-safe-public (end-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
-
+(define-public begin-of-line-visible
+  #(#f #f #t))
+(define-public end-of-line-visible
+  #(#t #f #f))
+(define-public end-of-line-invisible
+  #(#f #t #t))
+(define-public spanbar-begin-of-line-invisible
+  #(#t #f #f))
+(define-public all-visible #(#t #t #t))
+(define-public all-invisible #(#f #f #f))
+(define-public begin-of-line-invisible
+  #(#t #t #f))
+(define-public center-invisible #(#t #f #t))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Bar lines.
@@ -242,12 +216,13 @@ centered, X==1 is at the right, X == -1 is at the left."
                         ("bracket" . (() . "bracket"))  ))))
 
     (if (equal? result #f)
-       (ly:warn "Unknown bar glyph: `~S'" glyph)
+       (ly:warning (_ "unknown bar glyph: `~S'" glyph))
        (index-cell (cdr result) dir))))
 
 (define-public (shift-right-at-line-begin g)
   "Shift an item to the right, but only at the start of the line."
-  (if (and (ly:item? g)  (equal? (ly:item-break-dir g) RIGHT))
+  (if (and (ly:item? g)
+          (equal? (ly:item-break-dir g) RIGHT))
       (ly:grob-translate-axis! g 3.5 X)))
 
 
@@ -273,3 +248,20 @@ centered, X==1 is at the right, X == -1 is at the left."
 (define-public darkcyan    '(0.5 0.5 0.0))
 (define-public darkmagenta '(0.5 0.0 0.5))
 (define-public darkyellow  '(0.0 0.5 0.5))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Pitch Trill Heads
+
+(define (parenthesize-elements grob)
+  (let*
+      ((elts (ly:grob-object grob 'elements))
+       (x-ext (ly:relative-group-extent elts grob X))
+       (font (ly:grob-default-font grob))
+       (lp (ly:font-get-glyph font "accidentals.leftparen"))
+       (rp (ly:font-get-glyph font "accidentals.rightparen"))
+       (padding 0.1))
+
+    (ly:stencil-add
+     (ly:stencil-translate-axis lp (- (car x-ext) padding) X)
+     (ly:stencil-translate-axis rp (+ (cdr x-ext) padding) X))
+  ))