]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-markup-commands.scm
* lily/stem-tremolo.cc (raw_stencil): read slope property.
[lilypond.git] / scm / define-markup-commands.scm
index 88a2a6db8b396633aedf2fc1255f8e76f5898226..6e00f7a3d7517290ec64760340122ff6fb8bd171 100644 (file)
@@ -147,8 +147,9 @@ thickness and padding around the markup."
   "Create a box of the same height as the space in the current font."
   (let ((m (Text_interface::interpret_markup layout props " ")))
     (ly:make-stencil (ly:stencil-expr m)
+                    '(1000 . -1000)
                     (ly:stencil-extent m X)
-                    '(1000 . -1000))))
+                    )))
 
 
 ;; todo: fix negative space
@@ -272,6 +273,11 @@ gsave /ecrm10 findfont
          (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
          empty-stencil))))
 
+(def-markup-command (null layout props) ()
+  "An empty markup with extents of a single point"
+
+  point-stencil)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; basic formatting.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -339,6 +345,7 @@ gsave /ecrm10 findfont
                     (interval-length (ly:stencil-extent stc X))))
               stencils))
         (text-width (apply + text-widths))
+        (text-dir (chain-assoc-get 'text-direction props RIGHT))
         (word-count (length stencils))
         (word-space (chain-assoc-get 'word-space props))
         (line-width (chain-assoc-get 'linewidth props))
@@ -353,12 +360,12 @@ gsave /ecrm10 findfont
                                        (- line-width text-width)))
                        (else 
                                (get-fill-space word-count line-width text-widths))))
-     (fill-space-normal
-       (map (lambda (x)
-               (if (< x word-space)
-                       word-space
-                               x))
-                       fill-space))
+        (fill-space-normal
+         (map (lambda (x)
+                (if (< x word-space)
+                    word-space
+                    x))
+              fill-space))
                                        
         (line-stencils (if (= word-count 1)
                            (list
@@ -367,27 +374,38 @@ gsave /ecrm10 findfont
                             point-stencil)
                            stencils)))
 
+    (if (= text-dir LEFT)
+       (set! line-stencils (reverse line-stencils)))
+
     (if (null? (remove ly:stencil-empty? orig-stencils))
        empty-stencil
-       (stack-stencils-padding-list X RIGHT fill-space-normal line-stencils))))
+       (stack-stencils-padding-list X
+                                    RIGHT fill-space-normal line-stencils))))
        
 (def-markup-command (line layout props args) (markup-list?)
   "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))
-       (space    (chain-assoc-get 'word-space props)))
+       (space    (chain-assoc-get 'word-space props))
+       (text-dir (chain-assoc-get 'text-direction props RIGHT)) 
+       )
 
-  (stack-stencil-line
-   space
-   (remove ly:stencil-empty? stencils))))
+    
+    (if (= text-dir LEFT)
+       (set! stencils (reverse stencils)))
+    
+
+    (stack-stencil-line
+     space
+     (remove ly:stencil-empty? stencils))))
 
 
 (define (wordwrap-stencils stencils
-                          justify base-space line-width 
-                          )
+                          justify base-space line-width text-dir)
   
   "Perform simple wordwrap, return stencil of each line."
+  
   (define space (if justify
                    
                    ;; justify only stretches lines.
@@ -440,14 +458,23 @@ determines the space between each markup in @var{args}."
 
           (line (stack-stencil-line
                  line-word-space
-                 (reverse line-stencils))))
+                 (if (= text-dir RIGHT)
+                     (reverse line-stencils)
+                     line-stencils))))
 
        (if (pair? (cdr line-break))
            (loop (cons line lines)
                  (cdr line-break))
 
-           (reverse (cons line lines))
-           ))
+           (begin
+             (if (= text-dir LEFT)
+                 (set! line
+                       (ly:stencil-translate-axis line
+                                                  (- line-width (interval-end (ly:stencil-extent line X)))
+                                                  X)))
+             (reverse (cons line lines))
+             
+           )))
 
       ))
 
@@ -457,10 +484,12 @@ determines the space between each markup in @var{args}."
       ((baseline-skip (chain-assoc-get 'baseline-skip props))
        (line-width (chain-assoc-get 'linewidth props))
        (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)
+              justify word-space line-width
+              text-dir)
               ))
 
     (stack-lines DOWN 0.0 baseline-skip lines)))
@@ -485,6 +514,7 @@ linewidth, where X is the number of staff spaces."
        (word-space (chain-assoc-get 'word-space props))
        (para-strings (regexp-split arg "\n[ \t\n]*\n[ \t\n]*"))
        
+       (text-dir (chain-assoc-get 'text-direction props RIGHT)) 
        (list-para-words (map (lambda (str)
                               (regexp-split str "[ \t\n]+"))
                             para-strings))
@@ -497,7 +527,9 @@ linewidth, where X is the number of staff spaces."
                                        (interpret-markup layout props x))
                                      words)))
                               (lines (wordwrap-stencils stencils
-                                                        justify word-space line-width)))
+                                                        justify word-space
+                                                        line-width text-dir
+                                                        )))
 
                            lines))
                        
@@ -771,8 +803,10 @@ recommend font for this is bold and italic"
   "Set all font related properties (except the size) to get the default normal text font, no matter what font was used earlier."
   ;; ugh - latin1
   (interpret-markup layout
-                    (cons '((font-family . roman) (font-shape . upright) (font-series . medium) (font-encoding . latin1)) props)
-                    arg)) 
+                    (cons '((font-family . roman) (font-shape . upright)
+                           (font-series . medium) (font-encoding . latin1))
+                         props)
+                    arg))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; symbols.