;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
"Draw a box round @var{arg}. Looks at @code{thickness},
@code{box-padding} and @code{font-size} properties to determine line
thickness and padding around the markup."
+
(let* ((th (chain-assoc-get 'thickness props 0.1))
(size (chain-assoc-get 'font-size props 0))
(pad (* (magstep size)
"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
(let* ((output (ly:score-embedded-format score layout)))
(if (ly:music-output? output)
- (ly:paper-system-stencil
+ (paper-system-stencil
(vector-ref (ly:paper-score-paper-systems output) 0))
(begin
(ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
(text-dir (chain-assoc-get 'text-direction props RIGHT))
)
-
(if (= text-dir LEFT)
(set! stencils (reverse stencils)))
(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))
+
+ )))
))
((baseline-skip (chain-assoc-get 'baseline-skip props))
(line-width (chain-assoc-get 'linewidth props))
(word-space (chain-assoc-get 'word-space props))
- (para-strings (regexp-split arg "\n[ \t\n]*\n[ \t\n]*"))
+
+ (para-strings (regexp-split
+ (string-regexp-substitute "\r" "\n"
+ (string-regexp-substitute "\r\n" "\n" arg))
+ "\n[ \t\n]*\n[ \t\n]*"))
(text-dir (chain-assoc-get 'text-direction props RIGHT))
(list-para-words (map (lambda (str)
(ly:make-stencil '() '(1 . -1) '(1 . -1)))))
(def-markup-command (justify-field layout props symbol) (symbol?)
- (let* ((m (chain-assoc-get symbol props)))
+- (let* ((m (chain-assoc-get symbol props)))
(if (string? m)
(interpret-markup layout props
(list justify-string-markup m))
(ly:stencil-aligned-to m X dir)))
+(def-markup-command (pad-around layout props amount arg) (number? markup?)
+
+ "Add padding @var{amount} all around @var{arg}. "
+
+ (let*
+ ((m (interpret-markup layout props arg))
+ (x (ly:stencil-extent m X))
+ (y (ly:stencil-extent m Y)))
+
+
+ (ly:make-stencil (ly:stencil-expr m)
+ (interval-widen x amount)
+ (interval-widen y amount))
+ ))
+
+
+(def-markup-command (pad-x layout props amount arg) (number? markup?)
+
+ "Add padding @var{amount} around @var{arg} in the X-direction. "
+ (let*
+ ((m (interpret-markup layout props arg))
+ (x (ly:stencil-extent m X))
+ (y (ly:stencil-extent m Y)))
+
+
+ (ly:make-stencil (ly:stencil-expr m)
+ (interval-widen x amount)
+ y)
+ ))
+
+
+(def-markup-command (put-adjacent layout props arg1 axis dir arg2) (markup? integer? ly:dir? markup?)
+
+ "Put @var{arg2} next to @var{arg1}, without moving @var{arg1}. "
+
+ (let* ((m1 (interpret-markup layout props arg1))
+ (m2 (interpret-markup layout props arg2)))
+
+ (ly:stencil-combine-at-edge m1 axis dir m2 0.0 0.0)
+ ))
+
+(def-markup-command (transparent layout props arg) (markup?)
+ "Make the argument transparent"
+ (let*
+ ((m (interpret-markup layout props arg))
+ (x (ly:stencil-extent m X))
+ (y (ly:stencil-extent m Y)))
+
+
+
+ (ly:make-stencil ""
+ x y)))
+
+
+(def-markup-command (pad-to-box layout props x-ext y-ext arg) (number-pair? number-pair? markup?)
+ "Make @var{arg} take at least @var{x-ext}, @var{y-ext} space"
+
+ (let*
+ ((m (interpret-markup layout props arg))
+ (x (ly:stencil-extent m X))
+ (y (ly:stencil-extent m Y)))
+
+
+ (ly:make-stencil (ly:stencil-expr m)
+ (interval-union x-ext x)
+ (interval-union y-ext y))))
+
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; property
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Text_interface::interpret_markup layout props
(number->markletter-string number->mark-alphabet-vector num)))
+
+
+(def-markup-command (slashed-digit layout props num) (integer?)
+ "A feta number, with slash. This is for use in the context of
+figured bass notation"
+ (let*
+ ((mag (magstep (chain-assoc-get 'font-size props 0)))
+ (thickness
+ (* mag
+ (chain-assoc-get 'thickness props 0.16)))
+ (dy (* mag 0.15))
+ (number-stencil (interpret-markup layout
+ (prepend-alist-chain 'font-encoding 'fetaNumber props)
+ (number->string num)))
+ (num-x (interval-widen (ly:stencil-extent number-stencil X)
+ (* mag 0.2)))
+ (num-y (ly:stencil-extent number-stencil Y))
+ (slash-stencil
+ (ly:make-stencil
+ `(draw-line
+ ,thickness
+ ,(car num-x) ,(- (interval-center num-y) dy)
+ ,(cdr num-x) ,(+ (interval-center num-y) dy))
+ num-x num-y
+ )))
+
+ (ly:stencil-add number-stencil
+ (cond
+ ((= num 5) (ly:stencil-translate slash-stencil
+ ;;(cons (* mag -0.05) (* mag 0.42))
+ (cons (* mag -0.00) (* mag -0.07))
+
+ ))
+ ((= num 7) (ly:stencil-translate slash-stencil
+ ;;(cons (* mag -0.05) (* mag 0.42))
+ (cons (* mag -0.00) (* mag -0.15))
+
+ ))
+
+ (else slash-stencil)))
+ ))
\f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; the note command.
(def-markup-command (lower layout props amount arg) (number? markup?)
"
Lower @var{arg}, by the distance @var{amount}.
-A negative @var{amount} indicates raising, see also @code{\raise}.
+A negative @var{amount} indicates raising, see also @code{\\raise}.
"
(ly:stencil-translate-axis (interpret-markup layout props arg)
(- amount) Y))
(def-markup-command (bracketed-y-column layout props indices args)
(list? markup-list?)
"Make a column of the markups in @var{args}, putting brackets around
-the elements marked in @var{indices}, which is a list of numbers."
+the elements marked in @var{indices}, which is a list of numbers.
+
+"
+;;
+;; DROPME? This command is a relic from the old figured bass implementation.
+;;
+
(define (sublist lst start stop)
(take (drop lst start) (- (1+ stop) start)))
(apply ly:stencil-add
(append stacked brackets))))
+\f
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; size indications arrow
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+