Implementing a counter in markup text: Difference between revisions
No edit summary |
Rudi Guggt (talk | contribs) warning in red |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
This snippet shows how to implement a counter in LilyPond for use in markup texts. Whenever you call the <code>\counter # | This snippet shows how to implement a counter in LilyPond for use in markup texts. Whenever you call the <code>\counter #"name"</code> markup function, the counter named <code>name</code> will be increased by one and the new value will be printed as a text markup. The first call will print “1” by default. Example: | ||
\markup { | |||
Initial value of the counter: \counter #"mycounter". | |||
Second call: \counter #"mycounter" } | |||
The snippet also implements a <code>\setcounter # | The snippet also implements a <code>\setcounter #"name" newvalue</code> markup command to set the the counter to a specific value and print it out. | ||
One can have an arbitrary number of simultaneous counters, each indicated by its own name (as a string). | One can have an arbitrary number of simultaneous counters, each indicated by its own name (as a string). | ||
| Line 9: | Line 11: | ||
The storage of the counter values is implemented as a global alist <code>counter-alist</code> (Scheme/Guile's concept of a hash), where the <code>counter</code> command simply extracts the current value, increases it by one and stores it back in the alist. | The storage of the counter values is implemented as a global alist <code>counter-alist</code> (Scheme/Guile's concept of a hash), where the <code>counter</code> command simply extracts the current value, increases it by one and stores it back in the alist. | ||
<lilypond version="2.24" | <lilypond version="2.24"> | ||
#(define counter-alist '()) | #(define counter-alist '()) | ||
| Line 33: | Line 29: | ||
(interpret-markup layout props (make-counter-markup name))) | (interpret-markup layout props (make-counter-markup name))) | ||
\markup { Initial value of the counter: \counter #"mycounter". Second call: \counter #"mycounter" } | \markup { Initial value of the counter: \counter #"mycounter". } | ||
\markup { Second call: \counter #"mycounter" } | |||
\markup { It is increasing: \counter #"mycounter" } | \markup { It is increasing: \counter #"mycounter" } | ||
\markup { A second counter: \counter #"myothercounter" } | \markup { A second counter: \counter #"myothercounter" } | ||
| Line 41: | Line 38: | ||
\markup { Set first counter to 15: \setcounter #"mycounter" #15 } | \markup { Set first counter to 15: \setcounter #"mycounter" #15 } | ||
\markup { It is increasing: \counter #"mycounter" } | \markup { It is increasing: \counter #"mycounter" } | ||
\markup { | \markup \with-color #red { Don't rush it: } | ||
\markup { | \markup { Three calls in a row: \counter #"mycounter", \counter #"mycounter" and \counter #"mycounter" } | ||
\ | |||
\markup { It is increasing: \counter #"mycounter" } | \markup { It is increasing: \counter #"mycounter" } | ||
\markup { Second counter is increasing: \counter #"myothercounter" } | \markup { Second counter is increasing: \counter #"myothercounter" } | ||
| Line 49: | Line 45: | ||
[[Category:Text]] | [[Category:Text]] | ||
[[Category:Scheme]][[Category:Snippet]] | [[Category:Scheme]] | ||
[[Category:Snippet]] | |||