;;;;
;;;; 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>
width (+ (* width slope) (/ thickness -2))
width (+ (* width slope) (/ thickness 2))
0 (/ thickness 2))
- ,(ly:output-def-lookup layout 'blotdiameter)
+ ,(ly:output-def-lookup layout 'blot-diameter)
#t)
(cons 0 width)
(cons (+ (- half) (car yext))
"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)
;;FIXME: is this working?
(def-markup-command (strut layout props) ()
"Create a box of the same height as the space in the current font."
- (let ((m (Text_interface::interpret_markup layout props " ")))
+ (let ((m (ly:text-interface::interpret-markup layout props " ")))
(ly:make-stencil (ly:stencil-expr m)
'(1000 . -1000)
(ly:stencil-extent m X)
#f)))
-(def-markup-command (epsfile layout props file-name) (string?)
- "Inline an EPS image. The image is scaled such that 10 PS units is
-one staff-space."
+(def-markup-command (epsfile layout props axis size file-name) (number? number? string?)
+ "Inline an EPS image. The image is scaled along @var{axis} to
+@var{size}."
(if (ly:get-option 'safe)
- (interpret-markup layout props "not allowed in safe")
- (let*
- ((contents (ly:gulp-file file-name))
- (bbox (get-postscript-bbox contents))
- (scaled-bbox
- (if bbox
- (map (lambda (x) (/ x 10)) bbox)
- (begin
- (ly:warning (_ "can't find bounding box of `~a'")
- file-name)
- '()))))
-
-
- (if bbox
-
- (ly:make-stencil
- (list
- 'embedded-ps
- (string-append
-
- ; adobe 5002.
- "BeginEPSF "
- "0.1 0.1 scale "
- (format "\n%%BeginDocument: ~a\n" file-name)
- contents
- "%%EndDocument\n"
- "EndEPSF\n"
- ))
- (cons (list-ref scaled-bbox 0) (list-ref scaled-bbox 2))
- (cons (list-ref scaled-bbox 1) (list-ref scaled-bbox 3)))
-
- (ly:make-stencil "" '(0 . 0) '(0 . 0))))))
-
+ (interpret-markup layout props "not allowed in safe")
+ (eps-file->stencil axis size file-name)
+ ))
(def-markup-command (postscript layout props str) (string?)
"This inserts @var{str} directly into the output as a PostScript
(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))
+ (line-width (chain-assoc-get 'line-width props))
(fill-space
(cond
((= word-count 1)
(text-dir (chain-assoc-get 'text-direction props RIGHT))
)
-
(if (= text-dir LEFT)
(set! stencils (reverse stencils)))
(define (wordwrap-markups layout props args justify)
(let*
((baseline-skip (chain-assoc-get 'baseline-skip props))
- (line-width (chain-assoc-get 'linewidth props))
+ (line-width (chain-assoc-get 'line-width props))
(word-space (chain-assoc-get 'word-space props))
(text-dir (chain-assoc-get 'text-direction props RIGHT))
(lines (wordwrap-stencils
(def-markup-command (justify layout props args) (markup-list?)
"Like wordwrap, but with lines stretched to justify the margins.
-Use @code{\\override #'(linewidth . X)} to set linewidth, where X
+Use @code{\\override #'(line-width . X)} to set line-width, where X
is the number of staff spaces."
(wordwrap-markups layout props args #t))
(def-markup-command (wordwrap layout props args) (markup-list?)
- "Simple wordwrap. Use @code{\\override #'(linewidth . X)} to set
-linewidth, where X is the number of staff spaces."
+ "Simple wordwrap. Use @code{\\override #'(line-width . X)} to set
+line-width, where X is the number of staff spaces."
(wordwrap-markups layout props args #f))
(define (wordwrap-string layout props justify arg)
(let*
((baseline-skip (chain-assoc-get 'baseline-skip props))
- (line-width (chain-assoc-get 'linewidth props))
+ (line-width (chain-assoc-get 'line-width 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))
(def-markup-command (column layout props args) (markup-list?)
"Stack the markups in @var{args} vertically. The property
@code{baseline-skip} determines the space between each markup in @var{args}."
- (stack-lines
- -1 0.0 (chain-assoc-get 'baseline-skip props)
- (remove ly:stencil-empty?
- (map (lambda (m) (interpret-markup layout props m)) args))))
+
+ (let*
+ ((arg-stencils (map (lambda (m) (interpret-markup layout props m)) args))
+ (skip (chain-assoc-get 'baseline-skip props)))
+
+
+ (stack-lines
+ -1 0.0 skip
+ (remove ly:stencil-empty? arg-stencils))))
+
(def-markup-command (dir-column layout props args) (markup-list?)
"Make a column of args, going up or down, depending on the setting
"Put @code{args} in a centered column. "
(let* ((mols (map (lambda (x) (interpret-markup layout props x)) 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)))
(def-markup-command (vcenter layout props arg) (markup?)
(ly:stencil-aligned-to m X dir)))
+
+(def-markup-command (with-dimensions layout props x y arg) (number-pair? number-pair? markup?)
+ "Set the dimensions of @var{arg} to @var{x} and @var{y}."
+
+ (let* ((m (interpret-markup layout props arg)))
+ (ly:make-stencil (ly:stencil-expr m) x y)))
+
+
+(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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
"
(interpret-markup layout (cons (list new-prop) props) arg))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; files
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(def-markup-command (verbatim-file layout props name) (string?)
+ "Read the contents of a file, and include verbatimly"
+
+ (interpret-markup
+ layout props
+ (if (ly:get-option 'safe)
+ "verbatim-file disabled in safe mode"
+ (let*
+ ((str (ly:gulp-file name))
+ (lines (string-split str #\nl)))
+
+ (make-typewriter-markup
+ (make-column-markup lines)))
+ )))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; fonts.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def-markup-command (markletter layout props num) (integer?)
"Make a markup letter for @var{num}. The letters start with A to Z
(skipping I), and continues with double letters."
- (Text_interface::interpret_markup layout props
+ (ly:text-interface::interpret-markup layout props
(number->markletter-string number->mark-letter-vector num)))
(def-markup-command (markalphabet layout props num) (integer?)
"Make a markup letter for @var{num}. The letters start with A to Z
and continues with double letters."
- (Text_interface::interpret_markup layout props
+ (ly: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)))