]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 29 Nov 2006 20:41:05 +0000 (21:41 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 29 Nov 2006 20:41:05 +0000 (21:41 +0100)
input/regression/markup-syntax.ly
scm/define-markup-commands.scm

index 0dcb732eccf567b6554d947bd00ca201485d4a6a..5018c71849373d43e47a337746c9189692c286dd 100644 (file)
@@ -1,33 +1,37 @@
-\header  {
-
-    texidoc = "Demo of markup texts, using LilyPond syntax. "
+\version "2.10.0"
 
+\header {
+  texidoc = "Demo of markup texts, using LilyPond syntax."
 }
 
-\version "2.10.0"
-
 {
   f'1-\markup {
     foo
     \raise #0.2 \hbracket \bold bar
-    \override #'(baseline-skip . 4)
 
-    \bracket \column { baz bazr bla }
+    \override #'(baseline-skip . 4)
+    \bracket \column {
+      baz
+      bazr
+      bla
+    }
     \hspace #2.0
     \override #'(font-encoding . fetaMusic) {
       \lookup #"noteheads-0"
     }
     \semiflat
-
     { }
-    
-    \combine "X" "+"   
+    \combine "X" "+"
     \combine "o" "/"
   }
   g'1-\markup {
                                %               \char-number #"abc1234abc"
-    \box \column { \line { "string 1" } \line { "string 2" } }
-    " " 
+    \box \column {
+      \line { "string 1" }
+      \line { "string 2" }
+      \concat { "f" "i" }
+    }
+    " "
     \draw-circle #1 #0.3 ##f
     " "
     \draw-circle #1 #0.3 ##t
index 567486bb15a05e4b7b9b9ba4c792a22c7cc1a297..25ced26a9b2bb54edde73d952ed08d70ced42f8e 100644 (file)
@@ -416,6 +416,28 @@ determines the space between each markup in @var{args}."
      space
      (remove ly:stencil-empty? stencils))))
 
+(define-markup-command (concat layout props args) (markup-list?)
+  "Concatenate @var{args} in a horizontal line, without spaces inbetween.
+Strings and simple markups are concatenated on the input level, allowing
+ligatures.  For example, @code{\\concat @{ \"f\" \\simple #\"i\" @}} is
+equivalent to @code{\"fi\"}."
+
+  (define (concat-string-args arg-list)
+    (fold-right (lambda (arg result-list)
+                  (let ((result (if (pair? result-list)
+                                    (car result-list)
+                                  '())))
+                    (if (and (pair? arg) (eqv? (car arg) simple-markup))
+                      (set! arg (cadr arg)))
+                    (if (and (string? result) (string? arg))
+                        (cons (string-append arg result) (cdr result-list))
+                      (cons arg result-list))))
+                '()
+                arg-list))
+
+  (interpret-markup layout
+                    (prepend-alist-chain 'word-space 0 props)
+                    (make-line-markup (concat-string-args args))))
 
 (define (wordwrap-stencils stencils
                           justify base-space line-width text-dir)
@@ -1339,21 +1361,26 @@ and/or @code{extra-offset} properties. "
 (define-markup-command (fraction layout props arg1 arg2) (markup? markup?)
   "Make a fraction of two markups."
   (let* ((m1 (interpret-markup layout props arg1))
-         (m2 (interpret-markup layout props arg2)))
+         (m2 (interpret-markup layout props arg2))
+         (factor (magstep (chain-assoc-get 'font-size props 0)))
+         (boxdimen (cons (* factor -0.05) (* factor 0.05)))
+         (padding (* factor 0.2))
+         (baseline (* factor 0.6))
+         (offset (* factor 0.75)))
     (set! m1 (ly:stencil-aligned-to m1 X CENTER))
     (set! m2 (ly:stencil-aligned-to m2 X CENTER))
     (let* ((x1 (ly:stencil-extent m1 X))
            (x2 (ly:stencil-extent m2 X))
-           (line (ly:round-filled-box (interval-union x1 x2) '(-0.05 . 0.05) 0.0))
+           (line (ly:round-filled-box (interval-union x1 x2) boxdimen 0.0))
            ;; should stack mols separately, to maintain LINE on baseline
-           (stack (stack-lines -1 0.2 0.6 (list m1 line m2))))
+           (stack (stack-lines DOWN padding baseline (list m1 line m2))))
       (set! stack
            (ly:stencil-aligned-to stack Y CENTER))
       (set! stack
            (ly:stencil-aligned-to stack X LEFT))
       ;; should have EX dimension
       ;; empirical anyway
-      (ly:stencil-translate-axis stack 0.75 Y))))
+      (ly:stencil-translate-axis stack offset Y))))