]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-markup-commands.scm
More g++ 4.6.1 compiler warnings (-Wunused-but-set-variable).
[lilypond.git] / scm / define-markup-commands.scm
index cf3417d3b58e29c31398f23a8dfef9b1519c3d79..95658c16a67592d646a1d61e4d1348472735153a 100644 (file)
@@ -926,6 +926,7 @@ the use of @code{\\simple} is unnecessary.
 (define-markup-command (tied-lyric layout props str)
   (string?)
   #:category music
+  #:properties ((word-space))
   "
 @cindex simple text strings with tie characters
 
@@ -938,19 +939,18 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols.
 @end lilypond"
   (if (string-contains str "~")
       (let*
-         ((parts (string-split str #\~))
-          (tie-str (ly:wide-char->utf-8 #x203f))
+         ((half-space (/ word-space 2))
+          (parts (string-split str #\~))
+          (tie-str (markup #:hspace half-space
+                           #:musicglyph "ties.lyric"
+                           #:hspace half-space))
           (joined  (list-join parts tie-str))
           (join-stencil (interpret-markup layout props tie-str))
           )
 
        (interpret-markup layout
-                         (prepend-alist-chain
-                          'word-space
-                          (/ (interval-length (ly:stencil-extent join-stencil X)) -3.5)
-                          props)
-                         (make-line-markup joined)))
-                          ;(map (lambda (s) (interpret-markup layout props s)) parts))
+                         props
+                         (make-concat-markup joined)))
       (interpret-markup layout props str)))
 
 (define-public empty-markup
@@ -1897,16 +1897,77 @@ returns an empty markup.
 (define-markup-command (footnote layout props mkup note)
   (markup? markup?)
   #:category other
-  "Have footnote @var{note} act as an annotation to the markup @var{mkup}."
-  (ly:stencil-combine-at-edge
-    (interpret-markup layout props mkup)
-    X
-    RIGHT
+  #:properties ((raise 0.5)
+                (padding 0.0))
+  "Have footnote @var{note} act as an annotation to the markup @var{mkup}.
+
+@lilypond[verbatim,quote]
+\\markup {
+  \\footnote a b
+  \\override #'(padding . 0.2)
+  \\footnote c d
+}
+@end lilypond"
+  (let* ((markup-stencil (interpret-markup layout props mkup))
+         (auto-numbering (ly:output-def-lookup layout
+                                               'footnote-auto-numbering))
+         (footnote-hash (gensym "footnote"))
+         (stencil-seed 0)
+         (gauge-stencil (if auto-numbering
+                            (interpret-markup
+                              layout
+                              props
+                              ((ly:output-def-lookup
+                                 layout
+                                 'footnote-numbering-function)
+                                stencil-seed))
+                            empty-stencil))
+         (x-ext (if auto-numbering
+                    (ly:stencil-extent gauge-stencil X)
+                    '(0 . 0)))
+        (y-ext (if auto-numbering
+                    (ly:stencil-extent gauge-stencil Y)
+                    '(0 . 0)))
+         (footnote-number
+           (if auto-numbering
+             `(delay-stencil-evaluation
+                ,(delay
+                  (ly:stencil-expr
+                    (let* ((table
+                            (ly:output-def-lookup layout
+                                                  'number-footnote-table))
+                           (footnote-stencil (if (list? table)
+                                                (assoc-get footnote-hash
+                                                            table)
+                                                empty-stencil))
+                           (footnote-stencil (if (ly:stencil? footnote-stencil)
+                                                 footnote-stencil
+                                                 (begin
+                                                   (ly:programming-error
+"Cannot find correct footnote for a markup object.")
+                                                   empty-stencil)))
+                           (gap (- (interval-length x-ext)
+                                  (interval-length
+                                     (ly:stencil-extent footnote-stencil X))))
+                           (y-trans (- (+ (cdr y-ext)
+                                          raise)
+                                       (cdr (ly:stencil-extent footnote-stencil
+                                                               Y)))))
+                     (ly:stencil-translate footnote-stencil
+                                            (cons gap y-trans))))))
+             '()))
+         (main-stencil (ly:stencil-combine-at-edge
+                         markup-stencil
+                         X
+                         RIGHT
+                         (ly:make-stencil footnote-number x-ext y-ext)
+                         padding)))
+  (ly:stencil-add
+    main-stencil
     (ly:make-stencil
-      `(footnote ,(interpret-markup layout props note))
+      `(footnote ,footnote-hash ,(interpret-markup layout props note))
       '(0 . 0)
-      '(0 . 0))
-    0.0))
+      '(0 . 0)))))
 
 (define-markup-command (override layout props new-prop arg)
   (pair? markup?)
@@ -3428,7 +3489,7 @@ a column containing several lines of text.
     (parenthesize-stencil
      markup half-thickness scaled-width angularity padding)))
 
-\f
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Delayed markup evaluation
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;