]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/interface.scm
release: 1.3.116
[lilypond.git] / scm / interface.scm
index fa95a240680ae83dda2350550a726e09072b406d..565ef7d9594f4958aea80c2c38d21bf97a71c534 100644 (file)
@@ -1,11 +1,14 @@
 
+
 ; should include default value?
 
-;;; ::::::: should generate documentation for score elements from here.
 
-(define (property-description symbol type? description)
-  (list symbol type? description))
-  
+;;; FIXME: naming.
+;;; Score elements are called `objects' now and then, which gets
+;;; rather confusing, we now have `elements', `items', `spanners'
+;;; and `objects'.
+
+
 (define (lily-interface symbol description props)
   (list symbol
        description
   )
 
 
-(define (merge-interfaces ifs)
-   (list
-    (apply append (map car ifs))
-    (apply append (map cadr ifs))
-    (apply append (map caddr ifs))
-  ))
-
-(define (uniqued-alist  alist acc)
-  (if (null? alist) acc
-      (if (assoc (caar alist) acc)
-         (uniqued-alist (cdr alist) acc)
-         (uniqued-alist (cdr alist) (cons (car alist) acc)
-  ))))
-
-(define (element-description name . interfaces)
-  (let* ((ifs (cons general-element-interface interfaces))
+(define (grob-description name . interfaces)
+  (let* ((ifs (cons general-grob-interface interfaces))
         (props (map caddr ifs))
+;       (prop-typep-pairs (map (lambda (x) (cons (car x) (cadr x)))
+;                                      (apply append props)))
         (syms (map car ifs))
        )
     (list (cons 'separator "\n\n\n")   ;easy printing.
          (cons 'interfaces syms)
          (cons 'interface-descriptions ifs)
          ; (cons 'interface-descriptions (cadr merged))
-         ;; description of the element itself?
-         (cons 'properties (apply append props))
+         ;; description of the grob itself?
+;        (cons 'properties prop-typep-pairs)
   )))
 
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;
-
-(define general-element-interface
-  (lily-interface
-   'general-element-interface
-   "All elements support this"
-   (list (property-description 'X-offset-callbacks list? "")
-    (property-description 'Y-offset-callbacks list? "")
-    (property-description 'X-extent-callback procedure? "")
-    (property-description 'Y-extent-callback procedure? "")
-    (property-description 'font-size integer? "")
+(define general-grob-interface
+  (lily-interface
+   'general-grob-interface
+   "All grobs support this"
+   '(
+    X-offset-callbacks 
+    Y-offset-callbacks 
+    X-extent-callback 
+    Y-extent-callback 
+    font-relative-size 
+    extra-offset 
+    interfaces  
+    dependencies 
+    no-spacing-rods 
+    extra-extent-X 
+    extra-extent-Y 
+    minimum-extent-X 
+    minimum-extent-Y 
+    origin 
+    transparent 
     ))
-)
+  )
 
 (define beam-interface
   (lily-interface
    'beam-interface
-   "A beam. "
-   (list
-    (property-description 'y-position number? "position of left edge")
-    (property-description 'height number? "dy")
-    (property-description 'flag-width-function procedure? "")
-    (property-description 'damping integer? "amount of beam slope damping should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams ")
-    (property-description 'default-neutral-direction dir? "which
-direction to choose if we're in the middle of the staff ")
-    (property-description 'thickness number? "weight of beams, in staffspace")
-    (property-description 'space-function procedure? "function of type multiplicity -> real (in staffspace)")
-    (property-description 'beamed-stem-shorten number? "")
-    (property-description 'height-quants number? "")
-    (property-description 'vertical-position-quant-function procedure? "")
-    (property-description 'dir-function procedure? "")
-    (property-description 'damping number? "damping factor.")
-    (property-description 'outer-stem-length-limit number? "catch
-suspect beam slopes, set slope to zero if outer stem is lengthened
-more than this (in staffspace)")
-    (property-description 'slope-limit number? "set slope to zero if slope is running away steeper than this.")
+   "A beam.
+
+#'thickness= weight of beams, in staffspace
+  "
+   '(
+    y-position 
+    height 
+    flag-width-function 
+    damping 
+    default-neutral-direction 
+    thickness 
+    space-function 
+    beamed-stem-shorten 
+    height-quants 
+    vertical-position-quant-function 
+    damping 
+    outer-stem-length-limit 
+    slope-limit 
     )
-))
-
-
-
-;;;;;;;;;;;;;;;;;;;;
+   ))
 
 (define clef-interface
   (lily-interface
    'clef-interface
    "A clef sign"
-   (list
-    (property-description 'non-default boolean? "not set because of existence of a bar?")
-    (property-description 'change boolean? "is this a change clef (smaller size)?")
-    (property-description 'glyph string? "a string determining what glyph is typeset")
+   '(
+    non-default 
+    full-size-change 
+    glyph 
     ))
   )
 
 (define axis-group-interface
   (lily-interface
    'axis-group-interface
-   "a group of coupled elements"
-   (list
-    (property-description 'axes list? "list of axis (number) in which this group works")
+   "a group of coupled grobs"
+   '(
+    axes 
    )))
 
 (define note-column-interface
   (lily-interface
    'note-column-interface
    "Stem and noteheads combined"
-   (list
-    (property-description 'horizontal-shift integer? "integer that identifies ranking of note-column for horizontal shifting.")
-    (property-description 'force-hshift number? "amount of collision_note_width that overides automatic collision settings.")
-    (property-description 'merge-differently-dotted boolean? "merge black noteheads with differing dot count.")
+   '(
+    horizontal-shift 
+    force-hshift 
     ))
   )
 
@@ -122,18 +113,25 @@ more than this (in staffspace)")
   (lily-interface
    'stem-interface
    "A stem"
-   (list
-    (property-description 'thickness number? "")
-    (property-description 'beamed-lengths list? "")
-    (property-description 'beamed-minimum-lengths list? "")
-    (property-description 'lengths list? "")
-    (property-description 'stem-shorten list? "")
-    (property-description 'default-neutral-direction dir? "")
-    (property-description 'direction dir? "")
-    (property-description 'stem-length number? "")
-    (property-description 'style string? "") ; symbol!?
-    (property-description 'flag-style string? "") ; symbol!?
-    (property-description 'X-offset-callbacks list? "")
+   '(
+    thickness 
+    beamed-lengths 
+    beamed-minimum-lengths 
+    stem-centered 
+    lengths 
+    beam 
+    stem-shorten 
+    duration-log 
+    beaming 
+    default-neutral-direction 
+    stem-end-position 
+    support-head 
+    heads 
+    direction 
+    stem-length 
+    style 
+    flag-style 
+    dir-forced 
     )))
 
 
@@ -141,19 +139,20 @@ more than this (in staffspace)")
   (lily-interface
    'slur-interface
    "A slur"
-   (list
-    (property-description 'de-uglify-parameters list? "list of 3 real constants. They define the valid areas for the middle control points. Used in de_uglyfy. They are a bit empirical.")
-    (property-description 'details list? "alist containing contaning a few magic constants.")
-    (property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end")
-    (property-description 'attachment-offset pair? "cons of offsets, '(LEFT-offset . RIGHT-offset).  This offset is added to the attachments to prevent ugly slurs.")
-    (property-description 'direction dir? "up or down?")
-    (property-description 'beautiful number? "number that dictates when a slur should be de-uglyfied.  It correlates with the enclosed area between noteheads and slurs.  A value of 0.1 yields only undisturbed slurs, a value of 5 will tolerate quite high blown slurs.")
-    (property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems")
-    (property-description 'control-points list? "[internal] control points of bezier curve")
-    (property-description 'extremity-rules  list? "an alist (procedure slur dir) -> attachment to determine the attachment (see above).  If procedure returns #t, attachment is used.  Otherwise, the next procedure is tried.")
-    (property-description 'extremity-offset-alist list? "an alist (attachment stem-dir*dir slur-dir*dir) -> offset.  The offset adds to the centre of the notehead, or stem.")
-    (property-description 'thickness list? "The thickness[stafflinethickness] of slur in the centre.")
-    (property-description 'dashed number? "[FIXME: use dash-period/dash length; see text-spanner] number representing the length of the dashes.")
+   '(
+    de-uglify-parameters 
+    details 
+    attachment 
+    direction 
+   attachment-offset 
+     beautiful 
+     y-free 
+     control-points 
+     extremity-rules  
+     extremity-offset-alist 
+     thickness 
+     dashed 
+
     )
    )
   )
@@ -161,14 +160,18 @@ more than this (in staffspace)")
 (define side-position-interface
   (lily-interface
    'side-position-interface
-   "put an element next to another one."
-   (list
-    (property-description 'direction dir? "where to put the victim object (left or right?)")
-    (property-description 'side-relative-direction dir? "if set: get the direction from a different object, and multiply by this.")
-    (property-description 'minimum-space number? "minimum distance that the victim should move (after padding)")
-    (property-description 'padding number? "add this much extra space between victim and support")
-    (property-description 'self-alignment-X number? "real number: -1 = left aligned, 0 = center, 1 right-aligned in X direction. Set to an element pointer, if you want that element to be the center. ")
-    (property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis")
+   "Position a victim object (this one) next to other objects (the support).
+#'direction = where to put the victim object (left or right?)
+"
+   '(
+   side-support 
+   direction-source 
+    direction 
+    side-relative-direction 
+    minimum-space 
+    padding 
+    self-alignment-X 
+    self-alignment-Y 
     
     )
   ))
@@ -177,27 +180,46 @@ more than this (in staffspace)")
   (lily-interface
    'accidentals-interface
    "Accidentals"
-   (list
-    (property-description 'left-padding number? "space left of accs")
-    (property-description 'right-padding number? "space right of accs")     
+   '(
+    left-padding 
+    right-padding 
     )
    ))
 
+(define line-of-score-interface
+  (lily-interface
+   'line-of-score-interface
+   "Super grob, parent of all:
+
+The columns of a score that form one line.  The toplevel grob.  Any
+grob has a Line_of_score as both X and Y reference point. The
+Paper_score contains one grob of this type. Control enters the
+Grob dependency calculation from this single Line_of_score
+object."
+   '(
+    between-system-string 
+    spacing-procedure 
+    before-line-breaking-callback
+    after-line-breaking-callback 
+    all-elements 
+    columns 
+    )))
+
 (define note-head-interface
   (lily-interface
    'note-head-interface
    "Note head"
-   (list
-    (property-description 'style symbol? "symbol that sets note head style")
+   '(
+    style 
     )
    ))
 
 (define note-name-interface
   (lily-interface
    'note-name-interface
-   "Note naem"
-   (list
-    (property-description 'style symbol? "symbol that sets note name style")
+   "Note name"
+   '(
+    style 
     )
    ))
 
@@ -206,29 +228,31 @@ more than this (in staffspace)")
   (lily-interface
    'rhythmic-head-interface
    "Note head or rest"
-   (list
-    (property-description 'dot ly-element? "reference to Dots object.")
-    (property-description 'stem ly-element? "pointer to Stem object")
-    (property-description 'duration-log integer? "2-log of the notehead duration")
+   '(
+    dot 
+    stem 
+    duration-log 
     )))
 
 (define rest-interface
   (lily-interface
    'rest-interface
    "a rest"
-   (list
-    (property-description 'style string? "string specifying glyph style"))))
+   '(style )))
 
 (define tuplet-bracket-interface
   (lily-interface
    'tuplet-bracket-interface
-   "A bracket with a number in the middle" 
-   (list
-    (property-description 'beams list? "list of beam ptrs.")
-    (property-description 'columns list? " list of note-columns.")
-    (property-description 'number-gap number? "")
-    (property-description 'delta-y number? "")
-    (property-description 'thick number? "")
+   "A bracket with a number in the middle, used for tuplets." 
+   '(
+    beams 
+    columns 
+    number-gap 
+    delta-y 
+    tuplet-bracket-visibility 
+    tuplet-number-visibility 
+    parallel-beam 
+    thick 
     )
 ))
 
@@ -236,135 +260,167 @@ more than this (in staffspace)")
 (define align-interface
   (lily-interface
    'align-interface
-   " Order elements top to bottom/left to right/right to left etc."
-   (list
-    (property-description 'stacking-dir  dir? "stack contents of elements in which direction ?")
-    (property-description 'align-dir  dir? "Which side to align? -1: left side, 0: centered around center-element if not nil, or around center of width), 1: right side")
-    (property-description 'threshold  pair? "(cons MIN MAX), where MIN and MAX are dimensions in staffspace")
-    (property-description 'alignment-done  boolean? "boolean to administrate whether we've done the alignment already (to ensure that the process is done only once)")
-    (property-description 'center-element ly-element? "element which will be at the
-center of the group after aligning (when using
-Align_interface::center_on_element). The center element should have
-this object as a reference point.")
-    (property-description 'elements  list? "to be aligned elements ")
-    (property-description 'axes  list? "list of axis numbers. Should contain only one number.")
+   " Order grobs top to bottom/left to right/right to left etc."
+   '(
+    stacking-dir  
+    align-dir  
+    threshold  
+    alignment-done  
+    center-element 
+    elements  
+    axes  
     )))    
 
 (define aligned-interface
   (lily-interface
    'aligned-interface
    "read by align-interface"
-   (list
-    (property-description 'minimum-space pair? "(cons LEFT RIGHT)")
-    (property-description 'extra-space pair? "(cons LEFT RIGHT)")
+   '(
+    minimum-space 
+    extra-space 
     )))
 
 (define break-aligned-interface
   (lily-interface
    'break-aligned-interface
    "Items that are aligned in prefatory matter"
-   (list
-    (property-description 'break-align-symbol symbol? "the index in the spacing table (symbol) of the to be aligned item.")
-    (property-description 'visibility-lambda procedure? "")
-    (property-description 'breakable boolean? "")
+   '(
+    break-align-symbol 
+    visibility-lambda 
+    breakable 
     )))
 
 (define chord-name-interface
   (lily-interface
    'chord-name-interface
-   ""
-   (list
-    )))
+   "generate a chord name"
+   '( pitches inversion bass)))
+
 (define time-signature-interface
   (lily-interface
    'time-signature-interface
    "A time signature, in different styles"
-   (list
-    (property-description 'fraction pair? "")
-    (property-description 'style string? "")
-    )))
+   '( fraction style )))
 
 (define bar-line-interface
   (lily-interface
    'bar-line-interface
-   "Bar line"
-   (list
-    (property-description 'barsize-procedure procedure? "")
-    (property-description 'kern number? "")
-    (property-description 'thin-kern number? "")
-    (property-description 'hair-thickness number? "")
-    (property-description 'thick-thickness number? "")
-    (property-description 'glyph string? "")
-    (property-description 'bar-size number? "")
-    (property-description 'break-glyph-function procedure? "")
-   )))
-
-
+   "Bar line.
+
+This is a request to print a special bar symbol. It replaces the 
+regular bar symbol with a special
+symbol.  The argument @var{bartype} is a string which specifies the
+kind of bar to print.  Options are @code{\":|\"}
+@cindex \"|A@@@code{:|}
+,
+@code{\"|:\"}
+@cindex \"|B@@@code{|:}
+, @code{\":|:\"}
+@cindex \"|C@@@code{:|:}
+,
+@code{\"||\"}
+@cindex \"|D@@@code{||}
+, @code{\"|.\"}
+@cindex \"|E@@@code{|.}
+,
+@code{\".|\"}
+@cindex \"|F@@@code{.|}
+, and @code{\".|.\"}
+@cindex \"|G@@@code{.|.}
+. 
+
+These produce, respectively, a right repeat, a left repeat, a double
+repeat, a double bar, a start bar, an end bar, and a thick double bar.
+If @var{bartype} is set to @code{\"empty\"} then nothing is printed,
+but a line break is allowed at that spot.
+
+"
+   '( barsize-procedure kern thin-kern hair-thickness thick-thickness glyph bar-size break-glyph-function )))
 
 (define hairpin-interface
   (lily-interface
    'hairpin-interface
-   "hairpin crescendo"
-   (list
-    (property-description 'grow-direction dir? "")
-    (property-description 'thickness number? "")
-    (property-description 'height number? "")
-    )))
+   "hairpin crescendo.
+
+padding -- horizontal padding. This is useful if a crescendo is set next to a text like `mf'
 
+"
+   '( grow-direction thickness height padding )
+   ))
 
 (define arpeggio-interface
   (lily-interface
    'arpeggio-interface
-   "arpeggio "
-   (list
-    (property-description 'stems list? "list of stem objects, corresponding to the notes that the  arp has to be before.")
-    )
+   "Functions and settings for drawing an arpeggio symbol (a wavy line left to noteheads."
+   '(stems)
    )
   )
 
 (define note-collision-interface
   (lily-interface
    'note-collision-interface
-   "note collision"
-   (list
-    (property-description 'note-width 'number? "unit for horizontal translation, measured in staff-space.")
-    )   )  )
+   "An object that handles collisions between notes with different
+stem directions and horizontal shifts. Most of the interesting
+properties are to be set in @ref{note-column-interface}"
+   '(merge-differently-dotted note-width)
+   ))
+
+
+(define custos-interface
+  (lily-interface
+   'custos-interface
+   "A custos is a staff context symbol that appears at the end of a
+  staff line with monophonic musical contents (i.e. with a single
+  voice).  It anticipates the pitch of the first note of the following
+  line and thus helps the player or singer to manage line breaks
+  during performance, thus enhancing readability of a score.
+
+  Custodes were frequently used in music notation until the 16th
+  century.  There were different appearences for different notation
+  styles.  Nowadays, they have survived only in special forms of
+  musical notation such as via the editio vaticana dating back to the
+  beginning of the 20th century.
+
+[TODO: add to glossary]"
+   '(style)
+)
+  )
+
+
+
+
 (define dot-interface
   (lily-interface
    'dots-interface
    "The dots to go with a notehead/rest.  A separate interface, since they
-  are a party in collision resolution."
-   (list
-    (property-description 'dot-count integer? "number of dots")
-    )))
+  are a party in collision resolution.
+ #'direction is the Direction to handle staff-line collisions in."
+   '(direction dot-count)
+
+   )) 
+
+(define font-interface
+  (lily-interface
+   'font-interface
+   "Any symbol that is typeset through fixed sets of glyphs (ie. fonts)"
+   '(font-style font-series font-shape font-family font-name
+font-point-size font-relative-size)
+   ))
+
 
 (define text-interface
   (lily-interface
    'text-interface
    "A scheme markup text"
-   (list
-    (property-description 'text (lambda (x) (or (string? x) (list? x))) "the scheme markup text.  Either a string, or a list of which the CAR is a markup '(MARKUP text text ...).  MARKUP is either a CONS: an element property '(key . value) or a symbol: an abbreviation for a list of element properties.  These abbreviations are currently defined: rows lines roman music bold italic named super sub text, as well as all font-style's.")
-    (property-description 'font-style string? "font definition for a special purpose, one of: finger volta timesig mark script large Large dynamic")
-    (property-description 'font-series string? "partial font definition: medium, bold")
-    (property-description 'font-shape string?  "partial font definition: upright or italic")
-    (property-description 'font-family string? "partial font definition: music roman braces dynamic math ...")
-    (property-description 'font-name string? "partial font definition: base name of font file FIXME: should override other partials")
-    (property-description 'font-point string? "partial font definition: exact font size in points FIXME: should override font-size")
-    (property-description 'font-size string? "partial font definition: the relative size, 0 is style-sheet's normal size, -1 is smaller, +1 is bigger")
-    (property-description 'align number? "the alignment of the text, 0 is horizontal, 1 is vertical")
-    (property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name")
-    (property-description 'raise number? "height for text to be raised (a negative value lowers the text")
-    (property-description 'kern number? "amount of extra white space to add before text.  This is `relative'(?) to the current alignment.")
-    (property-description 'magnify number? "the magnification factor.  FIXME: doesn't work for feta fonts")
-    )))
-
+   '(text align lookup raise kern magnify)))
 
 (define dot-column-interface
   (lily-interface
    'dot-column-interface
-   ""
-   (list
-    )))
+   "Interface that groups dots so they form a column"
+   '( )
+   ))
 
 (define dynamic-interface
   (lily-interface
@@ -377,14 +433,14 @@ this object as a reference point.")
 (define finger-interface
   (lily-interface
    'finger-interface
-   "Any kind of loudness sign"
+   "A fingering instruction"
    '()
     ))
 
 (define separation-spanner-interface
   (lily-interface
    'separation-spanner-interface
-   ""
+   "Spanner that containing @code{separation-item-interface} grobs to calculate rods"
    '()
   ))
 (define text-script-interface
@@ -398,16 +454,29 @@ this object as a reference point.")
   (lily-interface
    'grace-alignment-interface
    "put grace notes in line"
-   (list
-    (property-description 'horizontal-space number? "amount of space to add after a note (in staff-space)")
+   '(
+    horizontal-space 
     )
    ))
 
 (define hara-kiri-group-interface
   (lily-interface
    'hara-kiri-group-interface
-   "seppuku"
-   '()))
+   "  As Vertical_group_spanner, but keep track of interesting items.  If
+  we don't contain any interesting items after linebreaking, then
+  gracefully commit suicide.  Objective: don't disgrace Lily by
+  typesetting empty lines in orchestral scores."
+   '( items-worth-living )
+))
+
+(define line-spanner-interface
+  (lily-interface
+   'line-spanner-interface
+   "Generic line drawn between two objects, eg. for use with glissandi.
+gap is measured in staff-spaces.   "
+
+   '(gap dash-period dash-length line-thickness type )
+   ))
 
 (define lyric-hyphen-interface
   (lily-interface
@@ -415,23 +484,18 @@ this object as a reference point.")
    "A centred hyphen is a simple line between lyrics used to divide
 syllables.   The length of the hyphen line should stretch based on the
   size of the gap between syllables."
-   (list
-    
-    (property-description 'thickness number? "thickness of line (in stafflinethickness)")
-    (property-description 'height number? "vertical offset  (in staffspace)")
 
-    (property-description 'minimum-length number? "try to make the hyphens at least this long. Also works as a scaling parameter for the length")
-    (property-description 'word-space number? "elongate left by this much (FIXME: cumbersome semantics)")
-    )))
+   '( thickness height minimum-length word-space )
+   ))
 
 (define key-signature-interface
   (lily-interface
    'key-signature-interface
    "A group of  accidentals."
-   (list
-    (property-description 'c0-position  integer? "integer indicating the position of central C?")
-    (property-description 'old-accidentals  list? "list of (pitch, accidental) pairs")
-    (property-description 'new-accidentals  list? "list of (pitch, accidental) pairs")
+   '(
+    c0-position  
+    old-accidentals  
+    new-accidentals  
     )))
 
 (define lyric-extender-interface
@@ -439,94 +503,141 @@ syllables.   The length of the hyphen line should stretch based on the
    'lyric-extender-interface
    "The extender is a simple line at the baseline of the lyric
   that helps show the length of a melissima (tied/slurred note)."
-   (list
-    (property-description 'word-space  number? "")
-    (property-description 'height  number? "in stafflinethickness")
-    (property-description 'right-trim-amount  number? "")
+   '(
+    word-space  
+    height  
+    right-trim-amount  
     )))
 
 
 (define lyric-syllable-interface
   (lily-interface
    'lyric-syllable-interface
-   ""
-   (list
-    (property-description 'word-space  number? "")
+   "a single piece of lyrics"
+   '(
+    word-space  
     )))
 
 
 (define mark-interface
   (lily-interface
    'mark-interface
-   ""
-   (list
+   "a rehearsal mark"
+   '(
     )))
 
 (define multi-measure-rest-interface
   (lily-interface
    'multi-measure-rest-interface
-   ""
-   (list
-    
-    (property-description 'columns  list? "list of paper-columns")
-    (property-description 'expand-limit  integer? "int : max number of measures expanded in church rests")
-    (property-description 'minimum-width number? "Real in staffspace")
-    (property-description 'padding  number? "staffspace")
-    )))
+   "A rest that spans a whole number of measures.  For typesetting the
+numbers, fields from font-interface may be used.
+
+padding is the space between number and rest. Measured in staffspace.
+"
+   '(    columns expand-limit minimum-width padding )
+
+   ))
 
 (define paper-column-interface
   (lily-interface
    'paper-column-interface
    ""
-   (list
-    (property-description 'dir-list  list? "list of stem directions")
-    (property-description 'shortest-playing-duration  moment? "duration of the shortest playing in that column.")
-    (property-description 'shortest-starter-duration  moment? "duration of the shortest notes that starts exactly in this column.")
-    (property-description 'contains-grace  boolean? "Used to widen entries for grace notes.")
-    (property-description 'extra-space  pair? "pair of distances")
-    (property-description 'stretch-distance pair? "pair of distances")
-    )))
+
+   '(column-space-strength before-musical-spacing-factor
+stem-spacing-correction before-grace-spacing-factor when bounded-by-me
+dir-list shortest-playing-duration shortest-starter-duration
+contains-grace extra-space stretch-distance ))
+
+  )
 
 (define spaceable-element-interface
   (lily-interface
    'spaceable-element-interface
-   ""
-   (list
-     (property-description 'minimum-distances list? "list of rods (ie. (OBJ . DIST) pairs)")
-     (property-description 'ideal-distances  list? "(OBJ . (DIST . STRENGTH)) pairs")
-     (property-description 'dir-list list? "list of stem directions.")
+   "An grob (generally a Paper_column) that takes part in the
+spacing problem. "
+   '(
+     minimum-distances 
+     ideal-distances  
+     dir-list 
      )))
 
 (define rest-collision-interface
   (lily-interface
    'rest-collision-interface
-   ""
-   (list
-    (property-description 'maximum-rest-count integer? "")
-    (property-description 'minimum-distance number? "")    
+   "Move around ordinary rests (not multi-measure-rests) to avoid
+conflicts."
+   '(
+    maximum-rest-count 
+    minimum-distance 
+    elements 
     )))
 
 (define script-interface
   (lily-interface
    'script-interface
    ""
-   (list
-    (property-description 'script-priority number? "")
+   '(
+    script-priority 
     )))
 
 (define script-column-interface
   (lily-interface
    'script-column-interface
-   ""
-   (list )))
+   "An interface that sorts scripts according to their @code{script-priority}"
+   '( )))
 
 
 (define spacing-spanner-interface
   (lily-interface
    'spacing-spanner-interface
-   ""
-   (list
-    (property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
+   " SPACE = arithmetic_multiplier * ( C + log2 (TIME) ))
+The space taken by a note is determined by the formula 
+
+  
+
+where TIME is the amount of time a note occupies.  The value of C is
+chosen such that the smallest space within a measure is
+arithmetic_basicspace:
+
+  C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8)) 
+
+The smallest space is the one following the shortest note in the
+measure, or the space following a hypothetical 1/8 note.  Typically
+arithmetic_basicspace is set to a value so that the shortest note
+takes about two noteheads of space (ie, is followed by a notehead of
+space):
+
+@example
+   2*quartwidth = arithmetic_multiplier * ( C + log2 (SHORTEST) ))
+
+   @{ using: C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8)) @}
+   @{ assuming: SHORTEST <= 1/8 @}
+
+               = arithmetic_multiplier *
+              ( arithmetic_basicspace - log2 (SHORTEST) + log2 (SHORTEST) )
+
+               = arithmetic_multiplier * arithmetic_basicspace
+
+   @{ choose: arithmetic_multiplier = 1.0*quartwidth (why?) @}
+
+               = quartwidth * arithmetic_basicspace
+
+   =>         
+
+   arithmetic_basicspace = 2/1 = 2
+
+
+If you want to space your music wider, use something like:
+
+   arithmetic_basicspace = 4.;
+
+@end example"
+   '(
+  maximum-duration-for-spacing 
+    arithmetic-basicspace 
+    arithmetic-multiplier 
+    
     )))
 
 (define staff-symbol-interface
@@ -534,83 +645,77 @@ syllables.   The length of the hyphen line should stretch based on the
    'staff-symbol-interface
    "This spanner draws the lines of a staff.  The middle line is
 position 0."
-   (list
-    (property-description 'staff-space number? "")
-    (property-description 'line-count integer? "")
+   '(
+    staff-space 
+    line-count 
     )))
 
 (define stem-tremolo-interface
   (lily-interface
    'stem-tremolo-interface
    ""
-   (list
-    (property-description 'stem ly-element? "pointer to the stem object.")
-    (property-description 'beam-width number? "")
-    (property-description 'beam-thickness number? "")
-    (property-description 'beam-space-function procedure? "")
+   '(
+    stem 
+    beam-width 
+    beam-thickness 
+    beam-space-function 
     )))
 
 (define separation-item-interface
   (lily-interface
    'separation-item-interface
-   ""
-   (list
-    )))
+   "Item that computes widths to generate spacing rods.
+
+Calc dimensions for the Separating_group_spanner; this has to be
+   an item to get dependencies correct.  It can't be an grob_group
+   since these usually are in a different X_group
+"
+   '(
+    elements 
+     )))
 
 (define sustain-pedal-interface
   (lily-interface
    'sustain-pedal-interface
    ""
-   (list
+   '(
     )))
-(define system-start-delimiter
+(define system-start-delimiter-interface
   (lily-interface
-   'system-start-delimiter
-   ""
-   (list
-    (property-description 'collapse-height number? "")
-    (property-description 'thickness number? "")
-    (property-description 'arch-height number? "")
-    (property-description 'arch-angle number? "")
-    (property-description 'arch-thick number? "")
-    (property-description 'arch-width number? "")
-    (property-description 'bracket-thick number? "")
-    (property-description 'bracket-width number? "")
-    )))
-
-(define text-script-interface
-  (lily-interface
-   'text-script-interface
-   ""
-   (list
-    
-    )))
+   'system-start-delimiter-interface
+   "#'style can be bar-line, bracket or brace"
+   '(collapse-height thickness arch-height arch-angle arch-thick
+                    arch-width bracket-thick bracket-width glyph )))
 
 (define text-spanner-interface
   (lily-interface
    'text-spanner-interface
    "generic text spanner"
-   (list
-    (property-description 'dash-period  number? "the length of one dash + white space")
-    (property-description 'dash-length number? "the length of a dash")
-    (property-description 'line-thickness number? "the thickness[stafflinethickness] of the line")
-    (property-description 'edge-height pair? "a cons that specifies the heights of the vertical egdes '(LEFT-height . RIGHT-height)")
-    (property-description 'edge-text pair? "a cons that specifies the texts to be set at the edges '(LEFT-text . RIGHT-text)")
-    (property-description 'type string? "one of: line, dashed-line or dotted-line") ; SYMBOL!!?    
+   '(
+    dash-period  
+    dash-length 
+    line-thickness 
+    edge-height 
+    edge-text 
+    type 
     )
 ))
 
 (define tie-interface
   (lily-interface
    'tie-interface
-   ""
-   (list
-    (property-description 'staffline-clearance number? "")
-    (property-description 'heads pair? "pair of element pointers, pointing to the two heads of the  tie. ")
-    (property-description 'details list? "")
-    (property-description 'thickness number? "")
-    (property-description 'x-gap number? "")
-    (property-description 'minimum-length number? "")
+   "A tie connecting two noteheads.
+direction = Forced direction for all ties"
+   
+   '(
+    staffline-clearance 
+    control-points 
+    heads 
+    details 
+    thickness 
+    x-gap 
+    direction 
+    minimum-length 
     )))
 
 
@@ -618,24 +723,27 @@ position 0."
 (define tie-column-interface
   (lily-interface
    'tie-column-interface
-   ""
-   (list
-    )))
+   "that sets tie directions in a tied chord"
+   '(direction)
+   ))
 
 (define volta-bracket-interface
   (lily-interface
    'volta-bracket-interface
    "Volta bracket with number"
-   (list
-    (property-description 'bars  list? "list of barline ptrs.")
-    (property-description 'thickness  number? "in stafflinethickness")
-    (property-description 'height  number? "in staffspace ")
+   '(
+    bars  
+    thickness  
+    height  
     )))
 
 (define span-bar-interface
   (lily-interface
    'span-bar-interface
    ""
-   (list
+   '(
     )))
 
+
+
+