1 %% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
2 %% This file is in the public domain.
6 lsrtags
= "rhythms, text"
9 This example shows how to add a markup command to get a three sided box
10 around some text (or other markup).
13 doctitle
= "Three-sided box"
15 % New command to add a three sided box, with sides north, west and south
16 % Based on the box-stencil command defined in scm/stencil.scm
17 % Note that you use ";" to comment a line in Scheme
18 #(define-public
(NWS-box-stencil stencil thickness padding
)
19 "Add a box around STENCIL, producing a new stencil."
20 (let
* ((x-ext
(interval-widen
(ly
:stencil-extent stencil
0) padding
))
21 (y-ext
(interval-widen
(ly
:stencil-extent stencil
1) padding
))
22 (y-rule
(make-filled-box-stencil
(cons
0 thickness
) y-ext
))
23 (x-rule
(make-filled-box-stencil
24 (interval-widen x-ext thickness
) (cons
0 thickness
))))
25 ;
(set
! stencil
(ly
:stencil-combine-at-edge stencil X
1 y-rule padding
))
26 (set
! stencil
(ly
:stencil-combine-at-edge stencil X -
1 y-rule padding
))
27 (set
! stencil
(ly
:stencil-combine-at-edge stencil Y
1 x-rule
0.0))
28 (set
! stencil
(ly
:stencil-combine-at-edge stencil Y -
1 x-rule
0.0))
31 % The corresponding markup command, based on the \box command defined
32 % in scm/define-markup-commands.scm
33 #(define-markup-command
(NWS-box layout props arg
) (markup?
)
34 "Draw a box round @var{arg}. Looks at @code{thickness},
35 @code{box-padding} and @code{font-size} properties to determine line
36 thickness and padding around the markup."
38 (let
* ((th
(chain-assoc-get
'thickness props
0.1))
39 (size
(chain-assoc-get
'font-size props
0))
40 (pad
(* (magstep size
)
41 (chain-assoc-get
'box-padding props
0.2)))
42 (m
(interpret-markup layout props arg
)))
43 (NWS-box-stencil m th pad
)))
48 \layout { ragged-right
= ##f }
51 c2^\markup { \NWS-box ABCD
}
52 c^\markup { \NWS-box
\note #"4" #1.0 }