- "In music notation, lots of symbols are related in some way. You can
-think of music notation as a graph where nodes are formed by the
-symbols, and the arcs by their relations. A grob is a node in that
-graph. The directed edges in the graph are formed by references to
-other grobs (i.e. pointers). This big graph of grobs specifies the
-notation problem. The solution of this problem is a description of the
-printout in closed form, i.e. a list of values. These values are
-Molecules.
-
-All grobs have an X and Y-position on the page. These X and Y positions
-are stored in a relative format, so they can easily be combined by
-stacking them, hanging one grob to the side of another, and coupling
-them into a grouping-grob.
-
-Each grob has a reference point (a.k.a. parent): the position of a grob
-is stored relative to that reference point. For example the X-reference
-point of a staccato dot usually is the note head that it applies
-to. When the note head is moved, the staccato dot moves along
-automatically.
-
-A grob is often associated with a symbol, but some grobs do not print
-any symbols. They take care of grouping objects. For example, there is a
-separate grob that stacks staves vertically. The @ref{NoteCollision}
-is also an abstract grob: it only moves around chords, but doesn't print
-anything.
-",
- "X-offset-callbacks Y-offset-callbacks X-extent-callback molecule cause
-Y-extent-callback molecule-callback extra-offset
-spacing-procedure
-staff-symbol interfaces dependencies extra-extent-X causes meta
-layer before-line-breaking-callback after-line-breaking-callback extra-extent-Y minimum-extent-X minimum-extent-Y transparent");
+ "A grob represents a piece of music notation\n"
+ "\n"
+"All grobs have an X and Y-position on the page. These X and Y positions\n"
+"are stored in a relative format, so they can easily be combined by\n"
+"stacking them, hanging one grob to the side of another, and coupling\n"
+"them into a grouping objects.\n"
+"\n"
+"Each grob has a reference point (a.k.a. parent): the position of a grob\n"
+"is stored relative to that reference point. For example the X-reference\n"
+"point of a staccato dot usually is the note head that it applies\n"
+"to. When the note head is moved, the staccato dot moves along\n"
+"automatically.\n"
+"\n"
+"A grob is often associated with a symbol, but some grobs do not print\n"
+"any symbols. They take care of grouping objects. For example, there is a\n"
+"separate grob that stacks staves vertically. The @ref{NoteCollision}\n"
+"is also an abstract grob: it only moves around chords, but doesn't print\n"
+"anything.\n"
+"\n"
+ "Grobs have a properties: Scheme variables, that can be read and set. "
+ "They have two types. Immutable variables "
+ "define the default style and behavior. They are shared between many objects. "
+ "They can be changed using @code{\\override} and @code{\\revert}. "
+ "\n\n"
+ "Mutable properties are variables that are specific to one grob. Typically, "
+ "lists of other objects, or results from computations are stored in"
+ "mutable properties: every call to set-grob-property (or its C++ equivalent) "
+ "sets a mutable property. "
+
+,
+ "X-offset-callbacks Y-offset-callbacks X-extent-callback stencil cause "
+ "Y-extent-callback print-function extra-offset spacing-procedure "
+ "staff-symbol interfaces dependencies X-extent Y-extent extra-X-extent "
+ "meta layer before-line-breaking-callback "
+ "after-line-breaking-callback extra-Y-extent minimum-X-extent "
+ // FIXME: page-penalty?
+ "minimum-Y-extent page-penalty transparent "
+ );