]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge http://git.sv.gnu.org/r/lilypond
authorNicolas Sceaux <nicolas.sceaux@free.fr>
Sun, 10 Jun 2007 13:48:28 +0000 (15:48 +0200)
committerNicolas Sceaux <nicolas.sceaux@free.fr>
Sun, 10 Jun 2007 13:48:28 +0000 (15:48 +0200)
1  2 
scm/define-markup-commands.scm

index a6773286c6aa7673ca4241dcc0a6b9a3719df222,4cffe4c248279435865597612bd2bc979c73a5d7..956bd817bfa2a15e39ab68c965e54fb24957c8bb
    (let*
        ((th (chain-assoc-get 'thickness props  0.1))
         (x (car dest))
-        (y (cdr dest)))
+        (y (cdr dest))
+        (s (ly:make-stencil
+          `(draw-line
+            ,th
+            0 0
+            ,x ,y)
  
-     (ly:make-stencil
-      `(draw-line
-        ,th
-        0 0
-        ,x ,y)
+          (cons (min x 0) (max x 0))
+          (cons (min y 0) (max y 0)))))
  
-      (cons (min x 0) (min y 0))
-      (cons (max x 0) (max y 0)))))
+     s))
  
  (define-builtin-markup-command (draw-circle layout props radius thickness fill)
    (number? number? boolean?)
@@@ -346,7 -347,9 +347,7 @@@ grestor
  The markups are spaced or flushed to fill the entire line.
  If there are no arguments, return an empty stencil."
   
 -  (let* ((orig-stencils
 -        (map (lambda (x) (interpret-markup layout props x))
 -             markups))
 +  (let* ((orig-stencils (interpret-markup-list layout props markups))
         (stencils
          (map (lambda (stc)
                 (if (ly:stencil-empty? stc)
    "Put @var{args} in a horizontal line.  The property @code{word-space}
  determines the space between each markup in @var{args}."
    (let*
 -      ((stencils (map (lambda (m) (interpret-markup layout props m)) args))
 +      ((stencils (interpret-markup-list layout props args))
         (space    (chain-assoc-get 'word-space props))
         (text-dir (chain-assoc-get 'text-direction props RIGHT)) 
         )
@@@ -436,9 -439,7 +437,9 @@@ equivalent to @code{\"fi\"}.
  
    (interpret-markup layout
                      (prepend-alist-chain 'word-space 0 props)
 -                    (make-line-markup (concat-string-args args))))
 +                    (make-line-markup (if (markup-command-list? args)
 +                                        args
 +                                        (concat-string-args args)))))
  
  (define (wordwrap-stencils stencils
                           justify base-space line-width text-dir)
  
  (define (wordwrap-markups layout props args justify)
    (let*
 -      ((baseline-skip (chain-assoc-get 'baseline-skip props))
 -       (prop-line-width (chain-assoc-get 'line-width props #f))
 +      ((prop-line-width (chain-assoc-get 'line-width props #f))
         (line-width (if prop-line-width prop-line-width
                       (ly:output-def-lookup layout 'line-width)))
         (word-space (chain-assoc-get 'word-space props))
 -       (text-dir (chain-assoc-get 'text-direction props RIGHT)) 
 -       (lines (wordwrap-stencils
 -             (remove ly:stencil-empty?
 -                     (map (lambda (m) (interpret-markup layout props m)) args))
 -             justify word-space line-width
 -             text-dir)
 -             ))
 -
 -    (stack-lines DOWN 0.0 baseline-skip lines)))
 +       (text-dir (chain-assoc-get 'text-direction props RIGHT)))
 +    (wordwrap-stencils (remove ly:stencil-empty?
 +                               (interpret-markup-list layout props args))
 +                       justify word-space line-width
 +                       text-dir)))
  
  (define-builtin-markup-command (justify layout props args) (markup-list?)
    "Like wordwrap, but with lines stretched to justify the margins.
  Use @code{\\override #'(line-width . @var{X})} to set the line width;
  @var{X}@tie{}is the number of staff spaces."
 -  (wordwrap-markups layout props args #t))
 +  (stack-lines DOWN 0.0 (chain-assoc-get 'baseline-skip props)
 +             (wordwrap-markups layout props args #t)))
  
  (define-builtin-markup-command (wordwrap layout props args) (markup-list?)
    "Simple wordwrap.  Use @code{\\override #'(line-width . @var{X})} to set
  the line width, where @var{X} is the number of staff spaces."
 -
 -  (wordwrap-markups layout props args #f))
 +  (stack-lines DOWN 0.0 (chain-assoc-get 'baseline-skip props)
 +             (wordwrap-markups layout props args #f)))
  
  (define (wordwrap-string layout props justify arg) 
    (let*
  @code{baseline-skip} determines the space between each markup in @var{args}."
  
    (let*
 -      ((arg-stencils (map (lambda (m) (interpret-markup layout props m)) args))
 +      ((arg-stencils (interpret-markup-list layout props args))
         (skip (chain-assoc-get 'baseline-skip props)))
  
      
@@@ -636,11 -641,11 +637,11 @@@ of the @code{#'direction} layout proper
       (if (number? dir) dir -1)
       0.0
       (chain-assoc-get 'baseline-skip props)
 -     (map (lambda (x) (interpret-markup layout props x)) args))))
 +     (interpret-markup-list layout props args))))
  
  (define-builtin-markup-command (center-align layout props args) (markup-list?)
    "Put @code{args} in a centered column."
 -  (let* ((mols (map (lambda (x) (interpret-markup layout props x)) args))
 +  (let* ((mols (interpret-markup-list layout props args))
           (cmols (map (lambda (x) (ly:stencil-aligned-to x X CENTER)) mols)))
      
      (stack-lines -1 0.0 (chain-assoc-get 'baseline-skip props) cmols)))
@@@ -1486,41 -1491,3 +1487,41 @@@ when @var{label} is not found.
                                    (markup #:concat (#:hspace gap page-markup)))))))
       x-ext
       y-ext)))
 +
 +\f
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Markup list commands
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +(define (space-lines baseline-skip lines)
 +  (map (lambda (line)
 +       (stack-lines DOWN 0.0 (/ baseline-skip 2.0)
 +                    (list (ly:make-stencil "" (cons 0 0) (cons 0 0))
 +                          line
 +                          (ly:make-stencil "" (cons 0 0) (cons 0 0)))))
 +       lines))
 +
 +(define-builtin-markup-list-command (justified-lines layout props args) (markup-list?)
 +  "Like @code{\\justify}, but return a list of lines instead of a single markup.
 +Use @code{\\override #'(line-width . @var{X})} to set the line width;
 +@var{X}@tie{}is the number of staff spaces."
 +  (space-lines (chain-assoc-get 'baseline-skip props)
 +             (wordwrap-markups layout props args #t)))
 +
 +(define-builtin-markup-list-command (wordwrap-lines layout props args) (markup-list?)
 +  "Like @code{\\wordwrap}, but return a list of lines instead of a single markup.
 +Use @code{\\override #'(line-width . @var{X})} to set the line width,
 +where @var{X} is the number of staff spaces."
 +  (space-lines (chain-assoc-get 'baseline-skip props)
 +             (wordwrap-markups layout props args #f)))
 +
 +(define-builtin-markup-list-command (column-lines layout props args) (markup-list?)
 +  "Like @code{\\column}, but return a list of lines instead of a single markup.
 +@code{baseline-skip} determines the space between each markup in @var{args}."
 +  (space-lines (chain-assoc-get 'baseline-skip props)
 +             (interpret-markup-list layout props args)))
 +
 +(define-builtin-markup-list-command (override-lines layout props new-prop args)
 +  (pair? markup-list?)
 +  "Like @code{\\override}, for markup lists."
 +  (interpret-markup-list layout (cons (list new-prop) props) args))