]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/translation-functions.scm
Implement make-bow-stencil, make-tie-stencil for use in markup-commands
[lilypond.git] / scm / translation-functions.scm
index dc8eef609b26dc106e3d18f412cdd3b1f1491665..2e0d02371b19c3e74ae718f99cbda8be7e1df0dd 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;; (c) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
@@ -38,39 +38,23 @@ way the transposition number is displayed."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; metronome marks
 
-;; We give 'styled-metronome-markup' an optional argument, 'glyph-font', to
-;; prepare using other fonts than 'fetaMusic.
-;; Currently it ensures that the default-fonts are used by the
-;; markup-command 'note-by-number' in 'metronome-markup' (see below).
-(define*
-  ((styled-metronome-markup #:optional (glyph-font 'default))
-                            event context)
+(define-public (format-metronome-markup event context)
    (let ((hide-note (ly:context-property context 'tempoHideNote #f))
          (text (ly:event-property event 'text))
          (dur (ly:event-property event 'tempo-unit))
          (count (ly:event-property event 'metronome-count)))
+   (metronome-markup text dur count hide-note)))
+(export format-metronome-markup)
 
-   (metronome-markup glyph-font text dur count hide-note)))
-(export styled-metronome-markup)
-
-(define-public format-metronome-markup
-  (styled-metronome-markup))
-
-(define (metronome-markup glyph-font text dur count hide-note)
+(define (metronome-markup text dur count hide-note)
   (let* ((note-mark
             (if (and (not hide-note) (ly:duration? dur))
                 (make-smaller-markup
-                   ;; We insert the (default)-font for flag-glyphs and
-                   ;; note-head-glyphs to prepare the possibility to use
-                   ;; other fonts and to make possible using
-                   ;; \override MetronomeMark #'font-name = #<font-name>
-                   ;; without affecting the note/flag-glyphs.
-                   (make-override-markup (cons 'font-name glyph-font)
-                    (make-note-by-number-markup
-                        (ly:duration-log dur)
-                        (ly:duration-dot-count dur)
-                        UP)))
-                      #f))
+                  (make-note-by-number-markup
+                    (ly:duration-log dur)
+                    (ly:duration-dot-count dur)
+                    UP))
+                #f))
          (count-markup (cond ((number? count)
                               (if (> count 0)
                                   (make-simple-markup
@@ -263,7 +247,9 @@ Will look for predefined fretboards if @code{predefinedFretboardTable}
 is not @code {#f}.  If @var{rest} is present, it contains the
 @code{FretBoard} grob, and a fretboard will be
 created.  Otherwise, a list of @code{(string fret finger)} lists will
-be returned."
+be returned.
+If the context-property @code{supportNonIntegerFret} is set @code{#t},
+micro-tones are supported for TabStaff, but not not for FretBoards."
 
   ;;  helper functions
 
@@ -372,7 +358,11 @@ notes?"
         (and (or (and (not restrain-open-strings)
                       (zero? fret))
                  (>= fret minimum-fret))
-             (integer? fret)
+             (if (and
+                   (ly:context-property context 'supportNonIntegerFret #f)
+                   (null? rest))
+                 (integer? (truncate fret))
+                 (integer? fret))
              (close-enough fret))))
 
     (define (open-string string pitch)
@@ -388,7 +378,9 @@ the current tuning?"
         (if (< this-fret 0)
             (ly:warning (_ "Negative fret for pitch ~a on string ~a")
                         (car pitch-entry) string)
-            (if (not (integer? this-fret))
+            (if (and
+                  (not (integer? this-fret))
+                  (not (ly:context-property context 'supportNonIntegerFret #f)))
                 (ly:warning (_ "Missing fret for pitch ~a on string ~a")
                             (car pitch-entry) string)))
         (delete-free-string string)
@@ -585,7 +577,7 @@ chords.  Returns a placement-list."
 (define-public (fret-letter-tablature-format
                 context string-number fret-number)
   (let ((labels (ly:context-property context 'fretLabels)))
-    (make-vcenter-markup
+    (make-translate-scaled-markup '(0 . -0.5)
      (cond
       ((= 0 (length labels))
        (string (integer->char (+ fret-number (char->integer #\a)))))
@@ -600,8 +592,25 @@ only ~a fret labels provided")
 ;; Display the fret number as a number
 (define-public (fret-number-tablature-format
                 context string-number fret-number)
-  (make-vcenter-markup
-   (format #f "~a" fret-number)))
+  (if (integer? fret-number)
+      (make-vcenter-markup
+        (format #f "~a" fret-number))
+      ;; for non-integer fret-number print p.e. "2½"
+      (let* ((whole-part (truncate fret-number))
+             (remaining (- fret-number whole-part))
+             (fret
+               (if (and (zero? whole-part) (not (zero? remaining)))
+                   ""
+                   (format #f "~a" whole-part)))
+             (frac
+               (if (zero? remaining)
+                   ""
+                   (format #f "~a" remaining))))
+        (make-concat-markup
+          (list (make-vcenter-markup fret)
+                (make-vcenter-markup
+                  ;; the value `-2.5' is my choice
+                  (make-fontsize-markup -2.5 frac)))))))
 
 ;; The 5-string banjo has got an extra string, the fifth (duh), which
 ;; starts at the fifth fret on the neck.  Frets on the fifth string