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"
16 % New command to add a three sided box, with sides north, west and south
17 % Based on the box-stencil command defined in scm/stencil.scm
18 % Note that you use ";" to comment a line in Scheme
19 #(define-public
(NWS-box-stencil stencil thickness padding
)
20 "Add a box around STENCIL, producing a new stencil."
21 (let
* ((x-ext
(interval-widen
(ly
:stencil-extent stencil
0) padding
))
22 (y-ext
(interval-widen
(ly
:stencil-extent stencil
1) padding
))
23 (y-rule
(make-filled-box-stencil
(cons
0 thickness
) y-ext
))
24 (x-rule
(make-filled-box-stencil
25 (interval-widen x-ext thickness
) (cons
0 thickness
))))
26 ;
(set
! stencil
(ly
:stencil-combine-at-edge stencil X
1 y-rule padding
))
27 (set
! stencil
(ly
:stencil-combine-at-edge stencil X -
1 y-rule padding
))
28 (set
! stencil
(ly
:stencil-combine-at-edge stencil Y
1 x-rule
0.0))
29 (set
! stencil
(ly
:stencil-combine-at-edge stencil Y -
1 x-rule
0.0))
32 % The corresponding markup command, based on the \box command defined
33 % in scm/define-markup-commands.scm
34 #(define-markup-command
(NWS-box layout props arg
) (markup?
)
35 "Draw a box round @var{arg}. Looks at @code{thickness},
36 @code{box-padding} and @code{font-size} properties to determine line
37 thickness and padding around the markup."
39 (let
* ((th
(chain-assoc-get
'thickness props
0.1))
40 (size
(chain-assoc-get
'font-size props
0))
41 (pad
(* (magstep size
)
42 (chain-assoc-get
'box-padding props
0.2)))
43 (m
(interpret-markup layout props arg
)))
44 (NWS-box-stencil m th pad
)))
49 \layout { ragged-right
= ##f }
52 c2^\markup { \NWS-box ABCD
}
53 c^\markup { \NWS-box
\note #"4" #1.0 }