Abstract: Gsharp is an interactive real-time score editor
written entirely in Common Lisp which is currently being developed. It
uses CLIM for interaction with the user.
The specifications of Gsharp require it to be able to fully format and
present a small number of pages of) a score of several hundred pages at the
typing speed of a typical user (less than 100ms). Formating a score is more
complicated than formating a text, since a small modification in one part of
the score may have global side effects arbitrarily far from the modification.
We thus developed an incremental page-layout algorithm that only requires a
small amount of work as a result of a typical interaction from the
user. The challenge was to separate the part of the algorithm
responsible for computing page breaks from the part that determines
parameters such as spacing between notes. Using CLOS, we were able to
create a protocol that neatly separates these different responsibilities,
allowing several different styles of dividing the score into pages (fill the
last page, fill an even number of pages, roll of paper) to coexist.