Implementing a counter in markup text

This snippet shows how to implement a counter in LilyPond for use in markup texts. Whenever you call the \counter #"name" markup function, the counter named name 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 \setcounter #"name" newvalue 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).

The storage of the counter values is implemented as a global alist counter-alist (Scheme/Guile's concept of a hash), where the counter command simply extracts the current value, increases it by one and stores it back in the alist.