]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.118.jcn3
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 20 Dec 2000 15:14:13 +0000 (16:14 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 20 Dec 2000 15:14:13 +0000 (16:14 +0100)
1.3.118.jcn3
============

* More feature examples.

* Renamed some scm files.

20 files changed:
CHANGES
Documentation/header.html.in
Documentation/user/features.tely
VERSION
input/test/follow-thread.ly
input/test/music-apply.ly
input/test/slur-ugly.ly [new file with mode: 0644]
input/test/smart-transpose.ly [new file with mode: 0644]
scm/backend-documentation-lib.scm
scm/backend-property.scm
scm/element-descriptions.scm
scm/grob-description.scm [new file with mode: 0644]
scm/grob-property-description.scm [new file with mode: 0644]
scm/interface-description.scm [new file with mode: 0644]
scm/interface.scm
scm/lily.scm
scm/music-property-description.scm [new file with mode: 0644]
scm/music-property.scm
scm/translator-properties.scm
scm/translator-property-description.scm [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 19db80ad89d996a6e5b8673c7858b078a9d0948c..144b97e579cbce2045e6160fce479b535b462c4e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+1.3.118.jcn3
+============
+
+* More feature examples.
+
+* Renamed some scm files.
+
 1.3.118.jcn2
 ============
 
index e0c92780f385d7acf5bbb5a6ecb9198bf2f4005d..b920b95bfafac50198f3cbbe7b98ce22b827ac4a 100644 (file)
@@ -52,7 +52,8 @@ which substitutes some @AT_VARIABLES@ as well.
        <a href="@TOP@Documentation/topdocs/out-www/FAQ.html">Small FAQ</a><br>
        <a href="http://appel.lilypond.org/wiki?LilyPondFaqs">Full FAQ</a><br>
        <a href="@TOP@Documentation/user/out-www/lilypond/lilypond.html">User manual</a><br>
-       <a href="@TOP@Documentation/out-www/regression-test.html">Features</a><br>
+       <a href="@TOP@Documentation/user/out-www/features/features.html">Features</a><br>
+       <a href="@TOP@Documentation/out-www/regression-test.html">Regression Test</a><br>
        <a href="http://appel.lilypond.org/wiki?LilyPondToDo">To do</a><br>
 <br>
       </td></tr>
index dbb876e0215fa8c7f4f8bcc034ade06157c93871..7f7c93955334cd1effd09fcf9218417662983bd1 100644 (file)
@@ -21,15 +21,18 @@ TODO
 * Engraver hacking::               Engraver hacking
 * Part combiner::                  Part combiner
 * Markup text::                    Markup text
+* Apply hacking::                  Apply hacking
 * Output property::                Output property
 * Embedded TeX::                   Embedded TeX
 * Embedded PostScript::            Embedded PostScript
 @end menu
 
+@ignore
 Testin'' a b c...
 @lilypond[fragment,relative,verbatim,center]
   a'' b c
 @end lilypond
+@end ignore
 
 @node Arpeggio
 @section Arpeggio
@@ -91,24 +94,24 @@ Control number of beams...
 @end lilypond
 
 @lilypond[fragment,relative,verbatim,center]
-    f'32 g a b b a g f
-    
-    \property Voice.autoBeamSettings
-      \set #'(end * * * *) = #(make-moment 1 4)
-    f32 g a b b a g f
-    
-    f32 g a
-    \property Voice.stemRightBeamCount = #1 b
-    \property Voice.stemLeftBeamCount = #1 b
-    a g f
+  f'32 g a b b a g f
+
+  \property Voice.autoBeamSettings
+    \set #'(end * * * *) = #(make-moment 1 4)
+  f32 g a b b a g f
+
+  f32 g a
+  \property Voice.stemRightBeamCount = #1 b
+  \property Voice.stemLeftBeamCount = #1 b
+  a g f
 @end lilypond
 
 Don't extend to middle line esp. for grace
 
 @lilypond[fragment,relative,verbatim,center]
-    \grace a'8 a4
-    \property Voice.Stem \set #'no-stem-extend = ##t
-    \grace g8 g4
+  \grace a'8 a4
+  \property Voice.Stem \set #'no-stem-extend = ##t
+  \grace g8 g4
 @end lilypond
   
 Beam slope (height)
@@ -183,13 +186,13 @@ You can spot the difference of these settings quite easily from these simple exa
 
 Override attachments...
 @lilypond[fragment,relative,verbatim,center]
-    \property Voice.Slur \set #'direction = #1
-    \property Voice.Stem \set #'length = #5.5
-    g''8(g)g4
-    g4(g8)g
-    \property Voice.Slur \set #'attachment = #'(stem . stem)
-    g8(g)g4
-    g4(g8)g
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Stem \set #'length = #5.5
+  g''8(g)g4
+  g4(g8)g
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  g8(g)g4
+  g4(g8)g
 @end lilypond
 
 
@@ -200,7 +203,7 @@ Test Before, after
 @c We'll have to postpone this before/after representation until
 @c jcn3 is rolled into texinfo...
 
-@multitable @columnfractions .50 .50
+@multitable @columnfractions .40 .40
 @item
 @noindent
 @lilypond[fragment,relative,verbatim,center]
@@ -225,9 +228,9 @@ g4(g8)g
         
 Ophee slurs...
 @lilypond[fragment,relative,verbatim,center]
-    \property Voice.Slur \set #'direction = #1
-    \property Voice.Slur \set #'attachment = #'(head . head)
-    g''16()g()g()g()d'()d()d()d
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Slur \set #'attachment = #'(head . head)
+  g''16()g()g()g()d'()d()d()d
 @end lilypond
 
 
@@ -240,7 +243,37 @@ Steep slur correct...
   d,32( d'4 )d8..
 @end lilypond
 
-@c  high slurs, eg from gnossienes
+Ugly slurs...
+@lilypond[verbatim,center]
+\score {
+  \notes \context PianoStaff <
+    \time 6/4;
+    \context Staff=up { s1 * 6/4 }
+    \context Staff=down <
+      \clef bass;
+      \autochange Staff \context Voice
+        \notes \relative c {
+          d,8( a' d f a d f d a f d )a
+        }
+    >
+  >
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \VoiceContext
+      Slur \override #'beautiful = #5.0
+      Slur \override #'direction = #1
+      Stem \override #'direction = #-1
+      autoBeamSettings \override #'(end * * * *)
+        = #(make-moment 1 2)
+    }
+    \translator {
+      \PianoStaffContext
+      VerticalAlignment \override #'threshold = #'(5 . 5)
+    }
+  }
+}
+@end lilypond
 
 
 @node Text spanner
@@ -258,12 +291,12 @@ Have crescendo set a text spanner iso hairpin
 @subsection Ottava
 
 @lilypond[fragment,relative,verbatim,center]
-    a'''' b c a
-    \property Voice.TextSpanner \set #'type = #'dotted-line
-    \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
-    \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
-    \property Staff.centralCPosition = #-13
-    a\spanrequest \start "text" b c a \spanrequest \stop "text"
+  a'''' b c a
+  \property Voice.TextSpanner \set #'type = #'dotted-line
+  \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
+  \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
+  \property Staff.centralCPosition = #-13
+  a\spanrequest \start "text" b c a \spanrequest \stop "text"
 @end lilypond
 
 
@@ -345,8 +378,6 @@ No staff, no clef, squash pitches
 @node Markup text
 @section Markup text
 
-@c markup text hacking
-
 Metrome hack...
 
 @lilypond[verbatim,center]
@@ -394,18 +425,136 @@ Don't move the finger 2, only text "m.d." ...
 }
 @end lilypond
 
-@c subsection no clefs
 
 @c  equalizer
 
 
-@c \apply hacking
-@c reverse
-@c smart transpose
+@node Apply hacking
+@section Apply hacking
 
+@lilypond[verbatim,center]
+music = \notes { c'4 d'4( e'4 f'4 }
+
+#(define (reverse-music music)
+  (let* ((elements (ly-get-mus-property music 'elements))
+        (reversed (reverse elements))
+        (span-dir (ly-get-mus-property music 'span-direction)))
+    
+    (ly-set-mus-property music 'elements reversed)
+    
+    (if (dir? span-dir)
+       (ly-set-mus-property music 'span-direction (- span-dir)))
+    
+    (map reverse-music reversed)
+    
+    music))
+
+\score {
+  \context Voice {
+    \music
+    \apply #reverse-music \music
+  }
+  \paper { linewidth = -1.; }
+}
+@end lilypond
+
+
+LilyPond is more flexible than some users realise.  Han-Wen could be
+very rich.
+
+Just too funny not to include.
+
+@example
+@quotation
+    I've just entered a request on cosource.com :
+@quotation
+        http://www.cosource.com/cgi-bin/cos.pl/wish/info/387
+@end quotation
+    Here's a copy of my feature request :
+@quotation
+        Your task, if you accept it is to implement a \smarttranspose
+        command> that would translate such oddities into more natural
+        notations. Double accidentals should be removed, as well as #E
+        (-> F), bC (-> B), bF (-> E), #B (-> C).
+@end quotation
+@end quotation
+You mean like this. (Sorry 'bout the nuked indentation.)
+
+Add IMPLEMENT_TYPE_P(Music, "music?"); to music.cc, and presto, done.
+
+That's an easy $ 100; if I'd make $ 200/hour for every hour I worked
+on Lily, I'd be very rich :)
+@end example
+
+
+@lilypond[verbatim,center]
+#(define  (unhair-pitch p)
+  (let* ((o (pitch-octave p))
+         (a (pitch-alteration p))
+        (n (pitch-notename p)))
+
+    (cond
+     ((and (> a 0) (or (eq? n 6) (eq? n 2)))
+      (set! a (- a 1)) (set! n (+ n 1)))
+     ((and (< a 0) (or (eq? n 0) (eq? n 3)))
+      (set! a (+ a 1)) (set! n (- n 1))))
+    
+    (cond
+     ((eq? a 2)  (set! a 0) (set! n (+ n 1)))
+     ((eq? a -2) (set! a 0) (set! n (- n 1))))
+
+    (if (< n 0) (begin (set!  o (- o 1)) (set! n (+ n 7))))
+    (if (> n 7) (begin (set!  o (+ o 1)) (set! n (- n 7))))
+    
+    (make-pitch o n a)))
+
+#(define (smart-transpose music pitch)
+  (let* ((es (ly-get-mus-property music 'elements))
+        (e (ly-get-mus-property music 'element))
+        (p (ly-get-mus-property music 'pitch))
+        (body (ly-get-mus-property music 'body))
+        (alts (ly-get-mus-property music 'alternatives)))
+
+    (if (pair? es)
+       (ly-set-mus-property
+        music 'elements
+        (map (lambda (x) (smart-transpose x pitch)) es)))
+    
+    (if (music? alts)
+       (ly-set-mus-property
+        music 'alternatives
+        (smart-transpose alts pitch)))
+    
+    (if (music? body)
+       (ly-set-mus-property
+        music 'body
+        (smart-transpose body pitch)))
+
+    (if (music? e)
+       (ly-set-mus-property
+        music 'element
+        (smart-transpose e pitch)))
+    
+    (if (pitch? p)
+       (begin
+         (set! p (unhair-pitch (Pitch::transpose p pitch)))
+         (ly-set-mus-property music 'pitch p)))
+    
+    music))
+
+    
+music = \notes \relative c' { c4 d  e f g a b  c }
+
+\score {
+  \notes \context Staff {
+    \transpose ais' \music
+    \apply #(lambda (x) (smart-transpose x (make-pitch 0 5 1)))
+      \music
+  }
+  \paper { linewidth = -1.; }
+}
+@end lilypond
 
-@c Embedded TeX
 
 @node Embedded TeX
 @section Embedded TeX
@@ -417,6 +566,7 @@ Don't move the finger 2, only text "m.d." ...
 @section Embedded PostScript
 
 Arbitrary lines and curves not supported...
+
 [TODO:] Make a direct postscript command?
 
 @lilypond[verbatim,center]
@@ -428,9 +578,7 @@ Arbitrary lines and curves not supported...
     s2
     a'1
   }
-  \paper {
-    linewidth = 70.0*\staffspace;
-  }
+  \paper { linewidth = 70 * \staffspace; }
 }
 @end lilypond
 
diff --git a/VERSION b/VERSION
index 24e08ccff07c3ce256f7c647fa3f0b7a4a9ccedd..79eb818f7816553f29e59285dd0563df5511d7ed 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=118
-MY_PATCH_LEVEL=jcn2
+MY_PATCH_LEVEL=jcn3
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index e58e1c91f8d71217dc407e8208820ab4dab06d8e..26144d9121c716b9a00c82ae68027df15be5bf69 100644 (file)
@@ -9,21 +9,20 @@ property @code{followThread}.
 \score{
     \context PianoStaff <
         \context Staff=one \notes\relative c''{
-           \context Thread
-%{         
+           \context Thread         
             d,
            \translator Staff=two
            c
-
+%{
            b
            \translator Staff=one
            a'
-%}
+
            [c,8
            \translator Staff=two
            c]
            s2.
-
+%}
        }
        \context Staff=two { \clef bass; \skip 1*2; }
     >
index a61ea1a7a1007dcd36e0b9676cd41b77584afacb..e0f2144ef4dfd0c1754d562e738afd275a4c6988 100644 (file)
@@ -1,26 +1,31 @@
+\header {
+texidoc="
+Simple customised music apply.
+";
+}
+       
+music = \notes { c'4 d'4( e'4 f'4 }
 
-mus = \notes { c'4 d'4( e'4 f'4  }
-
-#(define (reverse-music mus)
-  (let* (
-       (es (ly-get-mus-property mus 'elements))
-       (reved (reverse es))
-       (sd (ly-get-mus-property mus 'span-direction))
-       )
-       (ly-set-mus-property
-               mus
-               'elements
-               reved
-       )
-       (if (dir? sd)
-               (ly-set-mus-property mus 'span-direction (- sd))) 
-       (map reverse-music reved)
-       mus)
-)
+#(define (reverse-music music)
+  (let* ((elements (ly-get-mus-property music 'elements))
+        (reversed (reverse elements))
+        (span-dir (ly-get-mus-property music 'span-direction)))
+    
+    (ly-set-mus-property music 'elements reversed)
+    
+    (if (dir? span-dir)
+       (ly-set-mus-property music 'span-direction (- span-dir)))
+    
+    (map reverse-music reversed)
+    
+    music))
 
 \score {
-       \context Voice {
-               \mus
-               \apply #reverse-music \mus
-       }
+  \context Voice {
+    \music
+    \apply #reverse-music \music
+  }
+  \paper {
+    linewidth = -1.;
+  }
 }
diff --git a/input/test/slur-ugly.ly b/input/test/slur-ugly.ly
new file mode 100644 (file)
index 0000000..7406ba2
--- /dev/null
@@ -0,0 +1,35 @@
+\header {
+texidoc="You can get ugly slurs, if you want.
+";
+}
+
+baseWalk = \notes \relative c {
+  d,8( a' d f a d f d a f d )a
+}
+
+\score {
+  \notes \context PianoStaff <
+    \time 6/4;
+    \context Staff=up { s1 * 6/4 }
+    \context Staff=down <
+      \clef bass;
+      \autochange Staff \context Voice \baseWalk
+    >
+  >
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \VoiceContext
+      Slur \override #'beautiful = #5.0
+      Slur \override #'direction = #1
+      Stem \override #'direction = #-1
+      autoBeamSettings \override #'(end * * * *)
+        = #(make-moment 1 2)
+    }
+    \translator {
+      \PianoStaffContext
+      VerticalAlignment \override #'threshold = #'(5 . 5)
+    }
+  }
+}
+
diff --git a/input/test/smart-transpose.ly b/input/test/smart-transpose.ly
new file mode 100644 (file)
index 0000000..388ae4e
--- /dev/null
@@ -0,0 +1,99 @@
+\header {
+texidoc="LilyPond 1.3 is more flexible than some users realise.  Han-Wen could be very rich.
+";
+}
+
+% Btw, I've leant an el-neato trick for formatting code in email messages,
+% using inderect buffers.
+%
+% M-x make-indirect-buffer RET RET foo RET C-x b foo RET
+% Select region and then narrow: C-x n n
+% Set mode, eg: M-x sch TAB RET
+%
+
+%{
+    I've just entered a request on cosource.com :
+
+        http://www.cosource.com/cgi-bin/cos.pl/wish/info/387
+    Here's a copy of my feature request :
+        Your task, if you accept it is to implement a \smarttranspose
+        command> that would translate such oddities into more natural
+        notations. Double accidentals should be removed, as well as #E
+        (-> F), bC (-> B), bF (-> E), #B (-> C).
+
+You mean like this. (Sorry 'bout the nuked indentation.)
+
+Add IMPLEMENT_TYPE_P(Music, "music?"); to music.cc, and presto, done.
+
+That's an easy $ 100; if I'd make $ 200/hour for every hour I worked
+on Lily, I'd be very rich :)
+
+%}
+
+#(define  (unhair-pitch p)
+  (let* ((o (pitch-octave p))
+         (a (pitch-alteration p))
+        (n (pitch-notename p)))
+
+    (cond
+     ((and (> a 0) (or (eq? n 6) (eq? n 2)))
+      (set! a (- a 1)) (set! n (+ n 1)))
+     ((and (< a 0) (or (eq? n 0) (eq? n 3)))
+      (set! a (+ a 1)) (set! n (- n 1))))
+    
+    (cond
+     ((eq? a 2)  (set! a 0) (set! n (+ n 1)))
+     ((eq? a -2) (set! a 0) (set! n (- n 1))))
+
+    (if (< n 0) (begin (set!  o (- o 1)) (set! n (+ n 7))))
+    (if (> n 7) (begin (set!  o (+ o 1)) (set! n (- n 7))))
+    
+    (make-pitch o n a)))
+
+#(define (smart-transpose music pitch)
+  (let* ((es (ly-get-mus-property music 'elements))
+        (e (ly-get-mus-property music 'element))
+        (p (ly-get-mus-property music 'pitch))
+        (body (ly-get-mus-property music 'body))
+        (alts (ly-get-mus-property music 'alternatives)))
+
+    (if (pair? es)
+       (ly-set-mus-property
+        music 'elements
+        (map (lambda (x) (smart-transpose x pitch)) es)))
+    
+    (if (music? alts)
+       (ly-set-mus-property
+        music 'alternatives
+        (smart-transpose alts pitch)))
+    
+    (if (music? body)
+       (ly-set-mus-property
+        music 'body
+        (smart-transpose body pitch)))
+
+    (if (music? e)
+       (ly-set-mus-property
+        music 'element
+        (smart-transpose e pitch)))
+    
+    (if (pitch? p)
+       (begin
+         (set! p (unhair-pitch (Pitch::transpose p pitch)))
+         (ly-set-mus-property music 'pitch p)))
+    
+    music))
+
+
+music = \notes \relative c' { c4 d  e f g a b  c }
+
+\score {
+  \notes \context Staff {
+    \transpose ais' \music
+    \apply #(lambda (x) (smart-transpose x (make-pitch 0 5 1)))
+      \music
+  }
+  \paper { linewidth = -1.; }
+}
index 3125d7cc17d03957079cdec197b1d2a338f233a9..b9623477b8e72f4a2dc83edb18ae3701035da19c 100644 (file)
      doc)))
 
 ;; testin.. -- how to do this
-(eval-string (ly-gulp-file "interface.scm"))
+(eval-string (ly-gulp-file "interface-description.scm"))
 (define xinterface-description-alist
       `(
        (general-grob . ,general-grob-interface)
 
 (use-modules (ice-9 string-fun))
 
-(define interface-file-str (string-append (ly-gulp-file "interface.scm") "\n(define "))
+(define interface-file-str (string-append (ly-gulp-file "interface-description.scm") "\n(define "))
 
 (define (list-interface-names)
   (let* ((text interface-file-str)
 
 
 
-(eval (ly-gulp-file "interface.scm"))
+(eval (ly-gulp-file "interface-description.scm"))
 
 (define interface-description-alist
   (map (lambda (x) (cons (string->symbol x) (eval-string x)))
index ebb343993fd5ea08b22521b8720f647481d040e5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,312 +0,0 @@
-(define all-backend-properties '())
-
-(define (grob-property-description symbol type? description)
-  (set-object-property! symbol 'backend-type? type?)
-  (set-object-property! symbol 'backend-doc description)
-  (set! all-backend-properties (cons symbol all-backend-properties))
-  )
-
-
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(grob-property-description 'X-extent-callback procedure? "procedure taking an grob and axis argument, returning a number-pair. The return value is the extent of the grob.")
-(grob-property-description 'X-offset-callbacks list? "list of functions, each taking an grob and axis argument. The function determine the position relative to this grob's parent. The last one in the list is called first")
-(grob-property-description 'Y-extent-callback procedure? "see @code{X-extent-callback}")
-(grob-property-description 'Y-offset-callbacks list? "see @code{X-offset-callbacks}")
-(grob-property-description 'after-line-breaking-callback procedure? "Procedure taking a grob as argument.
-This procedure is called (using dependency resolution) after line breaking. Return value is ignored")
-(grob-property-description 'align number? "the alignment of the text, 0 is horizontal, 1 is vertical")
-(grob-property-description 'align-dir dir? "Which side to align? -1: left side, 0: around center of width, 1: right side")
-(grob-property-description 'alignment-done boolean? "boolean to administrate whether we've done the alignment already (to ensure that the process is done only once)")
-(grob-property-description 'all-elements list? "list of all grobs in this line. Needed for protecting grobs from GC.")
-(grob-property-description 'arch-angle number? "")
-(grob-property-description 'arch-height number? "")
-(grob-property-description 'arch-thick number? "")
-(grob-property-description 'arch-width number? "")
-(grob-property-description 'arithmetic-basicspace number? "")
-(grob-property-description 'arithmetic-multiplier number? "see arithmetic-basicspace")
-(grob-property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end")
-(grob-property-description 'attachment-offset pair? "cons of offsets, '(LEFT-offset . RIGHT-offset).  This offset is added to the attachments to prevent ugly slurs.")
-(grob-property-description 'axes list? "list of axis numbers. Should contain only one number.")
-(grob-property-description 'axes list? "list of axis (number) in which this group works")
-(grob-property-description 'bar-size number? "")
-(grob-property-description 'bars list? "list of barline ptrs.")
-(grob-property-description 'barsize-procedure procedure? "how to compute the size of a bar line")
-(grob-property-description 'bass list? " musical-pitch, optional")
-(grob-property-description 'beam ly-grob? "pointer to the beam, if applicable")
-(grob-property-description 'beam-space-function procedure? "function returning space given multiplicity")
-(grob-property-description 'beam-space-function procedure? "function returning space given multiplicity")
-(grob-property-description 'beam-thickness number? "thickness, measured in staffspace")
-(grob-property-description 'beam-thickness number? "thickness, measured in staffspace")
-(grob-property-description 'beam-width number? "width of the tremolo sign")
-(grob-property-description 'beam-width number? "width of the tremolo sign")
-(grob-property-description 'beamed-lengths list? "list of stem lengths given beam multiplicity ")
-(grob-property-description 'beamed-minimum-lengths list? "list of minimum stem lengths given beam multiplicity")
-(grob-property-description 'beamed-stem-shorten number? "shorten beamed stems in forced direction")
-(grob-property-description 'beaming number-pair? "number of beams extending to left and right")
-(grob-property-description 'beams list? "list of beam ptrs.")
-(grob-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.")
-(grob-property-description 'before-grace-spacing-factor number? " stretch space this much if there are grace notes before the column")
-(grob-property-description 'before-line-breaking-callback procedure? "Procedure taking grob as argument.
-This procedure is called (using dependency resolution) before line breaking, but after generating discretionary items. Return value is ignored")
-(grob-property-description 'before-musical-spacing-factor number? "space before musical columns (eg. taken by accidentals) get this much
-stretched when they follow a musical column, in absence of grace
-notes.  0.0 means no extra space (accidentals are ignored)")
-(grob-property-description 'between-system-string string? "string
- to dump between two systems. Useful for forcing pagebreaks")
-(grob-property-description 'bounded-by-me list? "list of spanners that have this
-column as start/begin point. Only columns that have grobs or act as bounds are spaced.")
-(grob-property-description 'bracket-thick number? "")
-(grob-property-description 'bracket-width number? "")
-(grob-property-description 'break-align-symbol symbol? "the index in the spacing table (symbol) of the to be aligned item.")
-(grob-property-description 'break-glyph-function procedure? "function taking glyph and break-direction, returning the glyph at a line break")
-(grob-property-description 'breakable boolean? "boolean indicating if this is a breakable item (clef, barline, key sig, etc.)")
-(grob-property-description 'c0-position integer? "integer indicating the position of central C")
-
-(grob-property-description 'center-element ly-grob? "grob which will
-be at the center of the group after aligning (when using
-Align_interface::center_on_element). ")
-
-(grob-property-description 'collapse-height number? "")
-(grob-property-description 'column-space-strength number? "relative strength of space following breakable columns (eg. prefatory matter)")
-(grob-property-description 'columns list? "list of paper-columns")
-(grob-property-description 'columns list? " list of note-columns.")
-(grob-property-description 'columns list? "list of all paper columns")
-(grob-property-description 'contains-grace boolean? "Used to widen entries for grace notes.")
-(grob-property-description 'control-points list? "List of 4 offsets (number-pairs) controlling the tie shape")
-(grob-property-description 'control-points list? "[internal] control points of bezier curve")
-(grob-property-description 'damping integer? "amount of beam slope damping should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams ")
-(grob-property-description 'damping number? "damping factor.")
-(grob-property-description 'dash-length number? "the length of a dash")
-(grob-property-description 'dash-period number? "the length of one dash + white space")
-(grob-property-description 'dashed number? "[FIXME: use dash-period/dash length; see text-spanner] number representing the length of the dashes.")
-(grob-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.")
-(grob-property-description 'default-neutral-direction dir? "Where to go if we're in the middle of the staff")
-(grob-property-description 'delta-y number? "amount of ascension")
-(grob-property-description 'dependencies list? "list of score-grob pointers that indicate who to compute first for certain global passes")
-(grob-property-description 'details list? "alist of parameters for the curve shape")
-(grob-property-description 'details list? "alist containing contaning a few magic constants.")
-(grob-property-description 'dir-forced boolean? "set if direction has been forced; read by Beam.")
-(grob-property-description 'dir-function procedure? "function of type (count total)->direction.  Default value: beam-dir-majority, also available: beam-dir-mean, beam-dir-median.")
-(grob-property-description 'dir-list list? "list of stem directions, needed for optical spacing correction.")
-(grob-property-description 'direction dir? "up or down, left or right?")
-(grob-property-description 'direction-source ly-grob? "in case side-relative-direction is set, which grob  to get the direction from ")
-(grob-property-description 'dot ly-grob? "reference to Dots object.")
-(grob-property-description 'dot-count integer? "number of dots")
-(grob-property-description 'duration-log integer? "2-log of the notehead duration")
-(grob-property-description 'duration-log integer? "log of the duration, ie. 0=whole note, 1 = half note, etc.")
-(grob-property-description 'edge-height pair? "a cons that specifies the heights of the vertical egdes '(LEFT-height . RIGHT-height)")
-(grob-property-description 'edge-text pair? "a cons that specifies the texts to be set at the edges '(LEFT-text . RIGHT-text)")
-(grob-property-description 'elements list? " -- list of items.")
-(grob-property-description 'elements list? "list of grobs (NoteColumn,
-generally) participating in the collision. The
-@code{rest-collision} property in @code{elements} is set
-to a pointer to the collision")
-(grob-property-description 'elements list? "to be aligned grobs ")
-(grob-property-description 'expand-limit integer? "maximum number of measures expanded in church rests")
-(grob-property-description 'extra-extent-X number-pair? "enlarge in X dimension by this much, measured in staff space")
-(grob-property-description 'extra-extent-Y number-pair? "see @code{extra-extent-Y}")
-(grob-property-description 'extra-offset number-pair? "pair of reals (a cons) forcing an extra offset   before outputting")
-(grob-property-description 'extra-space number-pair? "pair of distances")
-(grob-property-description 'extra-space number-pair? "(cons LEFT RIGHT)")
-(grob-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.")
-
-(grob-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.")
-(grob-property-description 'flag-style string? "")
-(grob-property-description 'flag-width-function procedure? "")
-(grob-property-description 'font-family symbol? "partial font
-definition: music roman braces dynamic math ...")
-(grob-property-description 'font-name symbol? "partial font definition:
-base name of font file FIXME: should override other partials")
-(grob-property-description 'font-point-size number? "partial font definition: exact font size in points FIXME: should override font-relative-size")
-(grob-property-description 'font-relative-size number? "partial font definition: the relative size, 0 is style-sheet's normal size, -1 is smaller, +1 is bigger")
-(grob-property-description 'font-relative-size integer? "")
-(grob-property-description 'font-series symbol? "partial font definition: medium, bold")
-(grob-property-description 'font-shape symbol? "partial font definition: upright or italic")
-
-(grob-property-description 'font-style symbol? "a precooked set of font
-definitions, eg. finger volta timesig mark script large Large
-dynamic")
-
-(grob-property-description 'force-hshift number? "amount of
-collision_note_width that overides automatic collision settings. This
-is used by @ref{note-collision-interface}")
-
-(grob-property-description 'fraction number-pair? "")
-(grob-property-description 'full-size-change boolean? "if set, don't make a change clef smaller.")
-
-(grob-property-description 'glyph symbol? "a string determining what (style) of  glyph is typeset. Valid choices depend on the function that is reading this property. ")
-(grob-property-description 'gap number? "Size of a gap in a variable symbol")
-(grob-property-description 'glyph-name string? "a name of character within font")
-
-(grob-property-description 'grow-direction dir? "crescendo or decrescendo?")
-(grob-property-description 'hair-thickness number? "thickness, measured in stafflinethickness")
-(grob-property-description 'heads pair? "pair of grob pointers, pointing to the two heads of the  tie. ")
-(grob-property-description 'heads list? "list of note heads")
-(grob-property-description 'height number? "in staffspace ")
-(grob-property-description 'height-hs number? "in halfspace.  Only used by Beam.")
-(grob-property-description 'height-quants procedure? "function of type (beam staff-line-thickness) -> list of quants.  Default value: default-beam-dy-quants.
-")
-(grob-property-description 'horizontal-shift integer? "integer that identifies ranking of note-column for horizontal shifting. This is used by @ref{note-collision-interface}")
-(grob-property-description 'horizontal-space number? "amount of space to add after a note (in staff-space)")
-(grob-property-description 'ideal-distances list? "(OBJ . (DIST . STRENGTH)) pairs")
-(grob-property-description 'interfaces list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.")
-(grob-property-description 'inversion list? " musical-pitch, optional")
-(grob-property-description 'items-worth-living list? "list of interesting items. If empty in a particular system, clear that system.")
-(grob-property-description 'kern number? "amount of extra white space to add before text.  This is `relative'(?) to the current alignment.")
-(grob-property-description 'kern number? "space after a thick line")
-(grob-property-description 'left-padding number? "space left of accs")
-(grob-property-description 'length number? "Stem length for unbeamed stems, only for user override")
-(grob-property-description 'lengths list? "Stem length given multiplicity of flag")
-(grob-property-description 'line-count integer? "Number of staff lines")
-(grob-property-description 'line-thickness number? "the thickness[stafflinethickness] of the line")
-(grob-property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name")
-(grob-property-description 'magnify number? "the magnification factor.  FIXME: doesn't work for feta fonts")
-(grob-property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
-(grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.")
-(grob-property-description 'merge-differently-dotted boolean? " Merge noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @ref{note-collision-interface} ")
-(grob-property-description 'minimum-distance number? "minimum distance between notes and rests.")
-(grob-property-description 'minimum-distances list? "list of rods (ie. (OBJ . DIST) pairs)")
-(grob-property-description 'minimum-extent-X number-pair? "minimum size in X dimension, measured in staff space")
-(grob-property-description 'minimum-extent-Y number-pair? "see @code{minimum-extent-Y}")
-(grob-property-description 'minimum-length number? "minimum length in staffspace")
-
-(grob-property-description 'minimum-length number? "try to make the
-hyphens at least this long. Also works as a scaling parameter for the
-length")
-
-;; FIXME.
-(grob-property-description 'minimum-space number-pair? "(cons LEFT RIGHT)")
-(grob-property-description 'minimum-space number? "minimum distance that the victim should move (after padding)")
-
-
-(grob-property-description 'minimum-width number? "minimum-width of rest symbol, in staffspace")
-(grob-property-description 'molecule-callback procedure? "Function taking grob as argument, returning a Scheme encoded Molecule.")
-(grob-property-description 'new-accidentals list? "list of (pitch, accidental) pairs")
-(grob-property-description 'no-spacing-rods boolean? "read from grobs: boolean that makes Separation_item ignore this item (MOVE ME TO ITEM)")
-(grob-property-description 'non-default boolean? "not set because of existence of a bar?")
-(grob-property-description 'note-width number? "unit for horizontal translation, measured in staff-space.")
-(grob-property-description 'number-gap number? "")
-(grob-property-description 'old-accidentals list? "list of (pitch, accidental) pairs")
-(grob-property-description 'origin ly-input-location? "location in input file of the definition")
-(grob-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)")
-
-(grob-property-description 'padding number? "add this much extra space between objects that are next to each other")
-
-(grob-property-description 'parallel-beam boolean? "internal: true if there is a beam just as wide as the bracket ")
-(grob-property-description 'pitches list? "list of musical-pitch")
-(grob-property-description 'raise number? "height for text to be raised (a negative value lowers the text")
-(grob-property-description 'right-padding number? "space right of accs")
-(grob-property-description 'right-trim-amount number? "")
-(grob-property-description 'script-priority number? "A sorting key that determines in what order a script is within a stack of scripts")
-(grob-property-description 'self-alignment-X number? "real number: -1 =
-left aligned, 0 = center, 1 right-aligned in X direction.
-
- Set to an grob pointer, if you want that grob to be the center.
-In this case, the center grob should have this object as a
-reference point.
-")
-(grob-property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis")
-(grob-property-description 'shortest-playing-duration moment? "duration of the shortest playing in that column.")
-(grob-property-description 'shortest-starter-duration moment? "duration of the shortest notes that starts exactly in this column.")
-(grob-property-description 'side-relative-direction dir? "if set: get the direction from a different object, and multiply by this.")
-(grob-property-description 'side-support list? "the support, a list of grobs")
-(grob-property-description 'slope-limit number? "set slope to zero if slope is running away steeper than this.")
-(grob-property-description 'space-function procedure? "function of type multiplicity -> real (in staffspace)")
-(grob-property-description 'spacing-procedure procedure? "procedure
-taking grob as argument. This is called after
-before-line-breaking-callback, but before the actual line breaking
-itself.  Return value is ignored")
-(grob-property-description 'stacking-dir dir? "stack contents of grobs in which direction ?")
-(grob-property-description 'staff-space number? "Amount of line leading relative to global staffspace")
-(grob-property-description 'staffline-clearance number? "don't get closer than this to stafflines.")
-(grob-property-description 'stem ly-grob? "pointer to the stem object.")
-(grob-property-description 'stem ly-grob? "pointer to Stem object")
-(grob-property-description 'stem-centered boolean? "Center stems on note heads. Useful for mensural notation")
-(grob-property-description 'stem-end-position number? "Where does the stem end (the end is opposite to the support-head")
-(grob-property-description 'stem-length number? "length of stem")
-(grob-property-description 'stem-shorten list? "shorten stems in forced directions given flag multiplicity")
-(grob-property-description 'stem-spacing-correction number? "optical correction amount.")
-(grob-property-description 'stems list? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
-(grob-property-description 'stretch-distance number-pair? "pair of distances")
-(grob-property-description 'style symbol? "a string determining what style of  glyph is typeset. Valid choices depend on the function that is reading this property. ")
-(grob-property-description 'support-head ly-grob? "the note head at
-one end of the stem")
-(grob-property-description 'text markup? "
-Scheme markup text.  It is defined as follows:
-
-@example
-
-TEXT : STRING | (MARKUP SENTENCE)
-MARKUP: PROPERTY | ABBREV
-SENTENCE: TEXT | SENTENCE TEXT
-PROPERTY: (key . value)
-ABBREV: rows lines roman music bold italic named super sub text, or any font-style
-
-@end example
-
-So, TEXT is either a string, or a list of which the CAR is a MARKUP.
-MARKUP is either a CONS: an grob property '(key . value) or a symbol:
-a predefined abbreviation for a list of grob properties.
-
-
-The following abbreviations are currently defined:
-@table @samp
-@item rows
-horizontal mode: set all text on one line (default)
-@item lines
- vertical mode: set every text on new line
-@item roman
- select roman font
-@item music
- select feta font
-@item bold
- select bold series
-@item italic
- select italic shape
-@item named
- lookup by character name
-@item text
- plain text lookup (by character value)
-@item super
- superscript
-@item sub
- subscript
-@item any font-style
- finger volta timesig mmrest mark script large Large dynamic
-@end table
-")
-(grob-property-description 'thick number? "thickness, in stafflinethickness")
-(grob-property-description 'thick-thickness number? "thickness, measured in stafflinethickness")
-(grob-property-description 'thickness number? "thickness, measured in stafflinethickness")
-(grob-property-description 'thin-kern number? "space after a hair-line")
-(grob-property-description 'forced-distance number? "forced distance for an alignment")
-(grob-property-description 'threshold number-pair? "(cons MIN MAX), where MIN and MAX are dimensions in staffspace")
-(grob-property-description 'transparent boolean? "This is almost the
-same as setting molecule-callback to #f, but this retains the
-dimensions of this grob, which means that you can erase grobs
-individually. ")
-(grob-property-description 'tuplet-bracket-visibility boolean-or-symbol? "
-This controls the visibility of the tuplet bracket.
-Setting it to false will prevent printing of the
-bracket. Setting the property to #'if-no-beam will make it
-print only if there is no beam associated with this tuplet bracket.")
-(grob-property-description 'tuplet-number-visibility boolean-or-symbol? "
-Like @code{tuplet-bracket-visibility}, but for the number.")
-(grob-property-description 'type symbol? "one of: line, dashed-line or dotted-line")
-(grob-property-description 'vertical-position-quant-function procedure? "
-function of type (beam multiplicity dy staff-line-thickness) -> real.  Default value: default-beam-y-quants, also available: beam-traditional-y-quants.
-")
-(grob-property-description 'visibility-lambda procedure? "a function that takes the break direction and returns a  cons of booleans containing (TRANSPARENT . EMPTY)")
-(grob-property-description 'when moment? "when does this column happen?")
-(grob-property-description 'word-space number? "elongate left by this much (FIXME: cumbersome semantics)")
-(grob-property-description 'x-gap number? "horizontal gap between notehead and tie")
-(grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems")
-(grob-property-description 'y-position number? "position of left edge")
-(grob-property-description 'y-position-hs number? "in half space, position of left edge.  Only used by Beam.")
index aef30fe46f99ac0f4d65a897e205fe3f8e3d90e7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,650 +0,0 @@
-; distances are given in stafflinethickness (thicknesses) and
-; staffspace (distances)
-
-(define all-grob-descriptions
-  `((Arpeggio . (
-              (X-extent-callback . ,Arpeggio::width_callback)
-              (Y-extent-callback . #f)        
-              (molecule-callback . ,Arpeggio::brew_molecule)
-              (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
-              (X-offset-callbacks . (,Side_position::aligned_side))
-              (direction . -1)
-              (staff-position . 0.0)
-              (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface))
-              ))
-
-    (autoBeamSettings . ,auto-beam-settings)
-
-    (BarLine . (
-               (break-align-symbol . Staff_bar)
-               (glyph . "|")
-               (break-glyph-function . ,default-break-barline)
-               (barsize-procedure . ,Bar::get_staff_bar_size)
-               (molecule-callback . ,Bar::brew_molecule)          
-               (visibility-lambda . ,all-visible)
-               (breakable . #t)
-               (before-line-breaking-callback . ,Bar::before_line_breaking)
-               ;;
-               ;; Ross. page 151 lists other values, we opt for a leaner look
-               ;; 
-               (kern . 3.0)
-               (thin-kern . 3.0)
-               (hair-thickness . 1.6)
-               (thick-thickness . 6.0)
-               (meta . ,(grob-description  "BarLine" bar-line-interface font-interface))
-       ))
-
-       (BarNumber . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (breakable . #t)
-               (visibility-lambda . ,begin-of-line-visible)
-               (padding . 1.0)
-               (direction . 1)
-                (font-family . roman)
-               (font-relative-size . -1)
-               (meta . ,(grob-description "BarNumber"
-                       text-interface  font-interface break-aligned-interface))
-       ))
-
-       (Beam . (
-                ;; todo: clean this up a bit: the list is getting
-                ;; rather long.
-                (molecule-callback . ,Beam::brew_molecule)
-                (thickness . 0.42) ; in staff-space, should use stafflinethick?
-                (before-line-breaking-callback . ,Beam::before_line_breaking)
-                (after-line-breaking-callback . ,Beam::after_line_breaking)
-                (default-neutral-direction . 1)
-                (dir-function . ,beam-dir-majority)
-                (height-quants .  ,default-beam-dy-quants)
-                (vertical-position-quant-function . ,default-beam-y-quants)
-                (beamed-stem-shorten . (0.5))
-                (outer-stem-length-limit . 0.2)
-                (slope-limit . 0.2)
-                (flag-width-function . ,default-beam-flag-width-function)
-                (space-function . ,default-beam-space-function)
-                (damping . 1)
-                (meta . ,(grob-description "Beam" beam-interface))
-                ))
-        
-       (BreakAlignment . (
-               (breakable . #t)
-               (stacking-dir . 1)
-               (axes 0)
-               (X-offset-callbacks . (,Break_align_interface::self_align_callback))
-               (space-alist . ,default-break-align-space-alist) 
-               (meta . ,(grob-description "BreakAlignment"
-                       axis-group-interface align-interface
-                       )
-               )
-       ))
-
-       (BreakAlignGroup . (
-               (axes  . (0))
-               (X-offset-callbacks . (,Break_align_interface::alignment_callback))
-               
-               (meta . ,(grob-description "BreakAlignGroup" axis-group-interface))
-       ))
-
-       (BreathingSign . (
-               (break-align-symbol . Breathing_sign)
-               (breakable . #t )
-               (molecule-callback . ,Breathing_sign::brew_molecule)
-               (Y-offset-callbacks . (,Breathing_sign::offset_callback))
-               (visibility-lambda . ,begin-of-line-invisible)
-               (meta . ,(grob-description "BreathingSign"  break-aligned-interface))
-       ))
-
-       (Clef . (
-          (molecule-callback . ,Clef::brew_molecule)
-          (before-line-breaking-callback . ,Clef::before_line_breaking)
-          (breakable . #t)
-           (font-family . music)          
-          (break-align-symbol . Clef_item)
-          (visibility-lambda . ,begin-of-line-visible)
-          (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
-          (meta . ,(grob-description "Clef" clef-interface font-interface break-aligned-interface ))
-       ))
-
-       (ChordName . (
-               (molecule-callback . ,Chord_name::brew_molecule)
-               (after-line-breaking-callback . ,Chord_name::after_line_breaking)
-               (chord-name-function . ,default-chord-name-function)
-               (font-family . roman)
-               (meta . ,(grob-description "ChordName"  font-interface text-interface chord-name-interface))
-       ))
-
-       (Custos . (
-               (break-align-symbol . Custos)
-               (breakable . #t )
-               (molecule-callback . ,Custos::brew_molecule)
-               (visibility-lambda . ,end-of-line-visible)
-              (style .  vaticana)
-              (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
-               (meta . ,(grob-description "Custos" custos-interface staff-symbol-interface break-aligned-interface) )
-       ))
-       
-       (Hairpin . (
-               (molecule-callback . ,Hairpin::brew_molecule)
-               (thickness . 1.0)
-               (height . 0.6666)
-
-               (if-text-padding . 1.0)
-               (width-correct . -1.0)
-               
-               (dash-thickness . 1.2)
-               (dash-length . 4.0)
-               (self-alignment-Y . 0)
-               (Y-offset-callbacks . (,Side_position::aligned_on_self))
-               (meta . ,(grob-description "Hairpin" hairpin-interface))
-       ))
-
-       (DotColumn . (
-               (axes 0 )
-               (meta . ,(grob-description "DotColumn" dot-column-interface  axis-group-interface))
-       ))
-
-       (Dots . (
-               (molecule-callback . ,Dots::brew_molecule)
-               (dot-count . 1)
-               (staff-position . 0.0)
-               (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
-               (meta . ,(grob-description "Dots"  font-interface dot-interface ))
-       ))
-       
-       (DynamicText . (
-               (Y-offset-callbacks . (,Side_position::aligned_on_self))
-               (molecule-callback . ,Text_item::brew_molecule)
-               (script-priority . 100)
-               (font-series . bold)
-               (font-family . dynamic)
-               (font-shape . italic)
-               (self-alignment-Y . 0)
-               (meta . ,(grob-description "DynamicText" font-interface  text-interface ))
-       ))
-       
-       (DynamicLineSpanner . (
-               (axes . ( 1))
-               (padding . 0.6)
-               (minimum-space . 1.2)
-               (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface))
-       ))
-       
-       (LeftEdge . (
-               (break-align-symbol . Left_edge_item)
-               (X-offset-callbacks . (,Break_align_interface::alignment_callback))
-               (breakable . #t)
-               (meta . ,(grob-description "LeftEdge" break-aligned-interface))
-       ))
-       
-       (Fingering . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
-               (padding . 0.6)
-               (self-alignment-X . 0)
-               (font-family . number)
-               (font-relative-size . -3)
-               (font-shape . upright)
-               (meta . ,(grob-description "Fingering" finger-interface  font-interface text-script-interface text-interface side-position-interface))
-       ))
-
-       (GraceAlignment . (
-               (axes . (0))
-               (horizontal-space . 1.2)
-               (padding . 1.0)
-               (before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
-               (meta . ,(grob-description "GraceAlignment" axis-group-interface align-interface grace-alignment-interface))
-       ))
-       
-       (HaraKiriVerticalGroup . (
-               (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
-               (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
-               (axes 1)
-               (meta . ,(grob-description "HaraKiriVerticalGroup" axis-group-interface hara-kiri-group-interface))
-       ))
-
-       (LyricHyphen . (
-               (thickness . 1.0)
-               (height . 0.4)
-               (minimum-length .  0.5) 
-               (molecule-callback . ,Hyphen_spanner::brew_molecule)
-               (Y-extent-callback . ,Grob::point_dimension_callback)
-               (meta . ,(grob-description "LyricHyphen" lyric-hyphen-interface ))
-       ))
-       
-       (InstrumentName . (
-               (breakable . #t)
-               (Y-offset-callbacks . (,Side_position::centered_on_parent
-                                      ,Side_position::aligned_on_self))
-               (self-alignment-Y . 0)
-               (molecule-callback . ,Text_item::brew_molecule)         
-               (break-align-symbol . Instrument_name)
-               (visibility-lambda . ,begin-of-line-visible)
-               (font-family . roman)
-               (meta . ,(grob-description "InstrumentName"  font-interface  text-interface break-aligned-interface))
-       ))
-       
-       (KeySignature . (
-         (molecule-callback . ,Key_item::brew_molecule)
-         (break-align-symbol . Key_item)
-         (visibility-lambda . ,begin-of-line-visible)
-         (breakable . #t)
-         (meta . ,(grob-description "KeySignature" key-signature-interface  font-interface  break-aligned-interface))
-       ))
-       
-       (Accidentals . (
-               (molecule-callback . ,Local_key_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_side))
-               (direction . -1)
-               (left-padding . 0.2)
-               (right-padding . 0.4)
-               (meta . ,(grob-description "Accidentals"  accidentals-interface font-interface side-position-interface))
-       ))
-       
-       (LineOfScore . (
-               (axes . (0 1))
-               (meta . ,(grob-description "LineOfScore"  line-of-score-interface axis-group-interface))
-       ))
-       
-       (LyricExtender . (
-               (molecule-callback . ,Lyric_extender::brew_molecule)
-               (height . 0.8) ; stafflinethickness;
-               (right-trim-amount . 0.5)
-               (Y-extent-callback . ,Grob::point_dimension_callback)
-               (meta . ,(grob-description "LyricExtender"  lyric-extender-interface))
-       ))
-       
-       (LyricText . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
-               (self-alignment-X . 0)
-               (non-rhythmic . #t)
-               (word-space . 0.6)
-               (font-family . roman)
-               (font-shape . upright)
-               (meta . ,(grob-description "LyricText" lyric-syllable-interface text-interface font-interface ))
-       ))
-       
-       (RehearsalMark . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (direction . 1)
-               (breakable . #t)
-               (font-family . number)
-               (font-shape . upright)
-               (font-relative-size . 1)
-               (visibility-lambda . ,end-of-line-invisible)
-               (padding . 0.8)
-               (meta . ,(grob-description "RehearsalMark"  mark-interface side-position-interface))
-       ))
-       
-       (MultiMeasureRest . (
-               (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
-               (molecule-callback . ,Multi_measure_rest::brew_molecule)
-               (staff-position . 0)
-               (expand-limit . 10)
-               (padding . 2.0) ; staffspace
-               (minimum-width . 12.5) ; staffspace
-               (font-family . number)
-               (font-relative-size . 1)
-               (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface  font-interface ))
-       ))
-       (NoteCollision . (
-               (axes 0 1)
-               (note-width . 1.65)
-               (meta . ,(grob-description "NoteCollision"
-                  note-collision-interface axis-group-interface
-               ))
-       ))
-       
-       (NoteColumn . (
-               (axes . (0 1))
-               (meta . ,(grob-description "NoteColumn"  axis-group-interface note-column-interface))
-       ))
-
-       (NoteHead . (
-               (style . default)
-               (molecule-callback . ,Note_head::brew_molecule)
-               (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
-               (meta . ,(grob-description  "NoteHead"
-                       rhythmic-head-interface font-interface 
-                       note-head-interface ))
-       ))
-       (Glissando . (
-                        (type . line)
-                        (gap . 0.5)
-                        (breakable . #t)
-                        (X-extent-callback . #f)
-                        (Y-extent-callback . #f)                        
-                        (molecule-callback . ,Line_spanner::brew_molecule)
-                        (meta . ,(grob-description "Glissando"
-                                                      line-spanner-interface))
-                        ))
-       (FollowThread . (
-                        (type . line)
-                        (gap . 0.5)
-                        (breakable . #t)
-                        (X-extent-callback . #f)
-                        (Y-extent-callback . #f)                        
-                        (molecule-callback . ,Line_spanner::brew_molecule)
-                        (meta . ,(grob-description "FollowThread"
-                                                      line-spanner-interface))
-                        ))
-
-       (NoteName . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (font-family . roman)
-               (meta . ,(grob-description  "NoteName"
-                                              note-name-interface font-interface
-                                              ))
-               ))
-
-       (OctavateEight . (
-               (self-alignment-X . 0)
-               (text . "8")
-               (visibility-lambda . ,begin-of-line-visible)
-               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
-               (Y-offset-callbacks . (,Side_position::aligned_side))
-               (molecule-callback . ,Text_item::brew_molecule)
-                (font-shape . italic)
-               (font-family . roman)
-               (meta . ,(grob-description "OctavateEight" text-interface font-interface ))
-       ))
-       
-       (PaperColumn . (
-               (axes 0)
-               (before-grace-spacing-factor . 1.2)
-                (before-musical-spacing-factor . 0.4)
-               (meta . ,(grob-description "PaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
-       ))
-       (NonMusicalPaperColumn . (
-                (axes 0)
-                (before-musical-spacing-factor . 1.0)
-               (column-space-strength . 2.0)
-               (meta . ,(grob-description "NonMusicalPaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
-        ))
-       
-       (Rest . (
-               (after-line-breaking-callback . ,Rest::after_line_breaking)
-               (X-extent-callback . ,Rest::extent_callback)
-               (Y-extent-callback . ,Rest::extent_callback)            
-               (molecule-callback . ,Rest::brew_molecule)
-               (minimum-beam-collision-distance . 1.5)
-               (meta . ,(grob-description  "Rest"
-                       rhythmic-head-interface
-                       rest-interface))
-       ))
-       (RestCollision . (
-               (minimum-distance . 0.75)
-               (meta . ,(grob-description "RestCollision" rest-collision-interface ))
-       ))
-
-       (Script . (
-               (molecule-callback . ,Script::brew_molecule)
-               (X-offset-callbacks . (,Side_position::centered_on_parent))
-               (after-line-breaking-callback . ,Script::after_line_breaking)
-               (meta . ,(grob-description "Script" script-interface side-position-interface font-interface))
-       ))
-       
-       (ScriptColumn . (
-               (before-line-breaking-callback . ,Script_column::before_line_breaking)
-               (meta . ,(grob-description "ScriptColumn" script-column-interface))
-       ))
-       
-       (Slur . (
-                (molecule-callback . ,Slur::brew_molecule)
-                (thickness . 1.2)              
-                (spacing-procedure . ,Slur::set_spacing_rods)          
-                (minimum-length . 1.5)
-                (after-line-breaking-callback . ,Slur::after_line_breaking)
-                (extremity-rules . ,default-slur-extremity-rules)
-                (extremity-offset-alist . ,default-slur-extremity-offset-alist)
-                (de-uglify-parameters . ( 1.5  0.8  -2.0))
-                (Y-extent-callback . ,Slur::height)
-                (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5)
-                            (bezier-pct-c0 . -0.2) (bezier-pct-c3 . 0.000006)
-                            (bezier-pct-out-max . 0.8) (bezier-pct-in-max . 1.2)
-                            (bezier-area-steps . 1.0)))
-                (beautiful . 0.5)
-                (y-free . 0.75)
-                (attachment . (#f . #f))
-                (attachment-offset . ((0 . 0) . (0 . 0)))
-                (slope-limit . 0.8)
-                (meta . ,(grob-description "Slur" slur-interface))
-                ))
-             
-       (SpacingSpanner . (
-               (spacing-procedure . ,Spacing_spanner::set_springs)
-               (stem-spacing-correction . 0.5)
-               (arithmetic-basicspace . 2.0)
-               (arithmetic-multiplier . ,(* 0.9 1.32))
-               ;; assume that notes at least this long are present.
-               (maximum-duration-for-spacing . ,(make-moment 1 8))
-               (meta . ,(grob-description "SpacingSpanner"  spacing-spanner-interface))
-       ))
-       (SpanBar . (
-               (break-align-symbol . Staff_bar)
-               (barsize-procedure . ,Span_bar::get_bar_size) 
-               (molecule-callback . ,Bar::brew_molecule)
-               (visibility-lambda . ,begin-of-line-invisible)
-               (X-extent-callback . ,Span_bar::width_callback)
-               (Y-offset-callbacks . (,Span_bar::center_on_spanned_callback))
-               
-               (breakable . #t)
-               (glyph . "|")
-               (before-line-breaking-callback . ,Span_bar::before_line_breaking)
-               ;; ugh duplication! 
-               
-               ;;
-               ;; Ross. page 151 lists other values, we opt for a leaner look
-               ;; 
-               (kern . 3.0)
-               (thin-kern . 3.0)
-               (hair-thickness . 1.6)
-               (thick-thickness . 6.0)
-               (meta . ,(grob-description "SpanBar" span-bar-interface bar-line-interface ))
-       ))
-
-       (StanzaNumber . (
-               (breakable . #t)
-               (molecule-callback . ,Text_item::brew_molecule)         
-               (break-align-symbol . Clef_item)
-               (visibility-lambda . ,begin-of-line-visible)
-               (font-family . roman)
-               (meta . ,(grob-description "StanzaNumber" break-aligned-interface text-interface font-interface))
-       ))
-
-       (StaffSymbol . (
-               (molecule-callback . ,Staff_symbol::brew_molecule)
-               (staff-space . 1.0)
-               (line-count . 5 )
-               (meta . ,(grob-description "StaffSymbol" staff-symbol-interface ))
-       ))
-       (SostenutoPedal . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
-               (Y-offset-callbacks .
-                (,Side_position::aligned_side
-                 ,Side_position::centered_on_parent))
-               (no-spacing-rods . #t)
-                (font-shape . italic)
-               (self-alignment-X . 0)
-               (meta . ,(grob-description "SostenutoPedal" text-interface  font-interface))
-       ))
-
-       (Stem . (
-               (before-line-breaking-callback . ,Stem::before_line_breaking)
-               (molecule-callback . ,Stem::brew_molecule)
-               (thickness . 0.8)
-               (beamed-lengths . (0.0 2.5 2.0 1.5))
-               (beamed-minimum-lengths . (0.0 1.5 1.25 1.0))
-               
-;;  Stems in unnatural (forced) direction should be shortened,
-;;  according to [Roush & Gourlay].  Their suggestion to knock off
-;;  a whole staffspace seems a bit drastical: we'll do half.
-
-               (lengths . (3.5 3.5 3.5 4.5 5.0))
-               (stem-shorten . (0.5))
-               ; if stem is on middle line, choose this direction.
-               (default-neutral-direction . 1)
-               (X-offset-callbacks . (,Stem::off_callback))
-               (X-extent-callback . ,Stem::dim_callback)       
-               (meta . ,(grob-description  "Stem" stem-interface  font-interface))
-       ))
-
-       (StemTremolo . (
-               (molecule-callback . ,Stem_tremolo::brew_molecule)
-               (Y-extent-callback . ,Stem_tremolo::height)
-               (X-extent-callback . #f)
-
-               (beam-width . 2.0) ; staff-space
-               (beam-thickness . 0.42) ; staff-space
-               (beam-space-function . ,default-beam-space-function)
-               (meta . ,(grob-description "StemTremolo" stem-tremolo-interface ))
-       ))
-
-       (SeparationItem . (
-               (meta . ,(grob-description "SeparationItem" separation-item-interface ))
-       ))
-       (SeparatingGroupSpanner . (
-               (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
-               (meta . ,(grob-description "SeparatingGroupSpanner" separation-spanner-interface))
-       ))
-
-       (SustainPedal . (
-               (no-spacing-rods . #t)
-               (molecule-callback . ,Sustain_pedal::brew_molecule)
-               (self-alignment-X . 0)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
-               (Y-offset-callbacks .
-                                   (,Side_position::aligned_side
-                                    ,Side_position::centered_on_parent))
-
-               (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface))
-       ))
-
-       ; should split in 3
-       (SystemStartDelimiter . (
-               (molecule-callback . ,System_start_delimiter::brew_molecule)
-               (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
-               (collapse-height . 1.0)
-               (thickness . 1.6)
-               (arch-height . 1.5)
-               (arch-angle . 50.0)
-               (arch-thick . 0.25)
-               (glyph . bar-line)
-               (arch-width . 1.5)
-               (bracket-thick . 0.25)
-               (bracket-width . 2.0)
-               (Y-extent-callback . #f)
-               (font-family . braces)
-               ;; if you want to set point-size, you cannot set
-               ;; relative-size, as no font will be found for other
-               ;; sheets than 20
-               ;;(font-point-size . 20)
-               ;;(font-relative-size . #f)
-               (meta . ,(grob-description "SystemStartDelimiter" system-start-delimiter-interface font-interface))
-               ))
-
-       (TextScript . (
-               (molecule-callback . ,Text_item::brew_molecule)
-               (no-spacing-rods . #t)
-               (padding . 0.5)
-               (font-family . roman)
-               (font-shape . italic)
-               (meta . ,(grob-description "TextScript" text-script-interface text-interface side-position-interface font-interface ))
-       ))
-       (TextSpanner . (
-               (molecule-callback . ,Text_spanner::brew_molecule)
-                (font-shape . italic)
-               (font-family . roman)
-               (type . "line")
-               
-               ;; urg, only for (de)cresc. text spanners
-               (if-text-padding . 1.0)
-               (width-correct . -1)
-               
-               (direction . 1)
-               (meta . ,(grob-description "TextSpanner" text-spanner-interface  font-interface))               
-       ))
-       (Tie . (
-               (molecule-callback . ,Tie::brew_molecule)
-               (spacing-procedure . ,Tie::set_spacing_rods)
-               (staffline-clearance . 0.35)
-               (details . ((ratio . 0.333) (height-limit . 1.0)))
-               (thickness . 1.2)
-               (x-gap . 0.2)
-               (minimum-length  . 2.5)
-               (meta . ,(grob-description "Tie" tie-interface ))
-       ))
-
-       (TieColumn . (
-               (after-line-breaking-callback . ,Tie_column::after_line_breaking)
-               (meta . ,(grob-description "TieColumn" tie-column-interface ))
-       ))
-
-       (TimeSignature . (
-               (molecule-callback . ,Time_signature::brew_molecule)
-               (break-align-symbol . Time_signature)
-               (visibility-lambda . ,all-visible)
-               (breakable . #t)
-                (font-family . number)
-                (meta . ,(grob-description "TimeSignature" time-signature-interface  font-interface))
-       ))
-
-       (TupletBracket . (
-               (number-gap . 2.0)   
-               (delta-y . 0)
-               (thick . 1.0)
-               (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking)
-               (molecule-callback . ,Tuplet_spanner::brew_molecule)
-               (font-family . roman)
-               (font-shape . italic)
-               (font-relative-size . -1)
-               (meta .  ,(grob-description "TupletBracket" text-interface
-                          tuplet-bracket-interface font-interface))
-       ))
-
-       (UnaChordaPedal . (
-               (molecule-callback . ,Text_item::brew_molecule)
-                (font-shape . italic)
-               (no-spacing-rods . #t)
-               (self-alignment-X . 0)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
-               (Y-offset-callbacks .
-                (,Side_position::aligned_side
-                 ,Side_position::centered_on_parent))
-               (meta . ,(grob-description "UnaChordaPedal" text-interface font-interface))
-       ))
-
-       (VoltaBracket . (
-               (molecule-callback . ,Volta_spanner::brew_molecule)
-       
-               (direction . 1)
-               (padding . 1)
-                (font-style . volta)
-               (Y-offset-callbacks . (,Side_position::aligned_side))
-               (thickness . 1.6)  ;  stafflinethickness
-               (height . 2.0) ; staffspace;
-               (minimum-space . 5)
-               (font-family . number)
-               (font-relative-size . -2)
-               (meta . ,(grob-description "VoltaBracket" volta-bracket-interface side-position-interface font-interface))
-       ))
-
-       (VerticalAlignment . (
-               (axes 1)
-               (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
-               (X-extent-callback . #f)
-               (stacking-dir . -1)
-               (meta . ,(grob-description "VerticalAlignment" align-interface axis-group-interface))
-       ))
-
-       (VerticalAxisGroup . (
-               (axes 1)
-               (meta . ,(grob-description "VerticalAxisGroup" axis-group-interface))
-       ))
-))
-
-
-
-;  (display  (map pair? all-grob-descriptions))
-
diff --git a/scm/grob-description.scm b/scm/grob-description.scm
new file mode 100644 (file)
index 0000000..9d7cd37
--- /dev/null
@@ -0,0 +1,657 @@
+;;;; grob-description.scm -- part of generated backend documentation
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2000  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+; distances are given in stafflinethickness (thicknesses) and
+; staffspace (distances)
+
+(define all-grob-descriptions
+  `((Arpeggio . (
+              (X-extent-callback . ,Arpeggio::width_callback)
+              (Y-extent-callback . #f)        
+              (molecule-callback . ,Arpeggio::brew_molecule)
+              (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
+              (X-offset-callbacks . (,Side_position::aligned_side))
+              (direction . -1)
+              (staff-position . 0.0)
+              (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface))
+              ))
+
+    (autoBeamSettings . ,auto-beam-settings)
+
+    (BarLine . (
+               (break-align-symbol . Staff_bar)
+               (glyph . "|")
+               (break-glyph-function . ,default-break-barline)
+               (barsize-procedure . ,Bar::get_staff_bar_size)
+               (molecule-callback . ,Bar::brew_molecule)          
+               (visibility-lambda . ,all-visible)
+               (breakable . #t)
+               (before-line-breaking-callback . ,Bar::before_line_breaking)
+               ;;
+               ;; Ross. page 151 lists other values, we opt for a leaner look
+               ;; 
+               (kern . 3.0)
+               (thin-kern . 3.0)
+               (hair-thickness . 1.6)
+               (thick-thickness . 6.0)
+               (meta . ,(grob-description  "BarLine" bar-line-interface font-interface))
+       ))
+
+       (BarNumber . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (breakable . #t)
+               (visibility-lambda . ,begin-of-line-visible)
+               (padding . 1.0)
+               (direction . 1)
+                (font-family . roman)
+               (font-relative-size . -1)
+               (meta . ,(grob-description "BarNumber"
+                       text-interface  font-interface break-aligned-interface))
+       ))
+
+       (Beam . (
+                ;; todo: clean this up a bit: the list is getting
+                ;; rather long.
+                (molecule-callback . ,Beam::brew_molecule)
+                (thickness . 0.42) ; in staff-space, should use stafflinethick?
+                (before-line-breaking-callback . ,Beam::before_line_breaking)
+                (after-line-breaking-callback . ,Beam::after_line_breaking)
+                (default-neutral-direction . 1)
+                (dir-function . ,beam-dir-majority)
+                (height-quants .  ,default-beam-dy-quants)
+                (vertical-position-quant-function . ,default-beam-y-quants)
+                (beamed-stem-shorten . (0.5))
+                (outer-stem-length-limit . 0.2)
+                (slope-limit . 0.2)
+                (flag-width-function . ,default-beam-flag-width-function)
+                (space-function . ,default-beam-space-function)
+                (damping . 1)
+                (meta . ,(grob-description "Beam" beam-interface))
+                ))
+        
+       (BreakAlignment . (
+               (breakable . #t)
+               (stacking-dir . 1)
+               (axes 0)
+               (X-offset-callbacks . (,Break_align_interface::self_align_callback))
+               (space-alist . ,default-break-align-space-alist) 
+               (meta . ,(grob-description "BreakAlignment"
+                       axis-group-interface align-interface
+                       )
+               )
+       ))
+
+       (BreakAlignGroup . (
+               (axes  . (0))
+               (X-offset-callbacks . (,Break_align_interface::alignment_callback))
+               
+               (meta . ,(grob-description "BreakAlignGroup" axis-group-interface))
+       ))
+
+       (BreathingSign . (
+               (break-align-symbol . Breathing_sign)
+               (breakable . #t )
+               (molecule-callback . ,Breathing_sign::brew_molecule)
+               (Y-offset-callbacks . (,Breathing_sign::offset_callback))
+               (visibility-lambda . ,begin-of-line-invisible)
+               (meta . ,(grob-description "BreathingSign"  break-aligned-interface))
+       ))
+
+       (Clef . (
+          (molecule-callback . ,Clef::brew_molecule)
+          (before-line-breaking-callback . ,Clef::before_line_breaking)
+          (breakable . #t)
+           (font-family . music)          
+          (break-align-symbol . Clef_item)
+          (visibility-lambda . ,begin-of-line-visible)
+          (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
+          (meta . ,(grob-description "Clef" clef-interface font-interface break-aligned-interface ))
+       ))
+
+       (ChordName . (
+               (molecule-callback . ,Chord_name::brew_molecule)
+               (after-line-breaking-callback . ,Chord_name::after_line_breaking)
+               (chord-name-function . ,default-chord-name-function)
+               (font-family . roman)
+               (meta . ,(grob-description "ChordName"  font-interface text-interface chord-name-interface))
+       ))
+
+       (Custos . (
+               (break-align-symbol . Custos)
+               (breakable . #t )
+               (molecule-callback . ,Custos::brew_molecule)
+               (visibility-lambda . ,end-of-line-visible)
+              (style .  vaticana)
+              (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
+               (meta . ,(grob-description "Custos" custos-interface staff-symbol-interface break-aligned-interface) )
+       ))
+       
+       (Hairpin . (
+               (molecule-callback . ,Hairpin::brew_molecule)
+               (thickness . 1.0)
+               (height . 0.6666)
+
+               (if-text-padding . 1.0)
+               (width-correct . -1.0)
+               
+               (dash-thickness . 1.2)
+               (dash-length . 4.0)
+               (self-alignment-Y . 0)
+               (Y-offset-callbacks . (,Side_position::aligned_on_self))
+               (meta . ,(grob-description "Hairpin" hairpin-interface))
+       ))
+
+       (DotColumn . (
+               (axes 0 )
+               (meta . ,(grob-description "DotColumn" dot-column-interface  axis-group-interface))
+       ))
+
+       (Dots . (
+               (molecule-callback . ,Dots::brew_molecule)
+               (dot-count . 1)
+               (staff-position . 0.0)
+               (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
+               (meta . ,(grob-description "Dots"  font-interface dot-interface ))
+       ))
+       
+       (DynamicText . (
+               (Y-offset-callbacks . (,Side_position::aligned_on_self))
+               (molecule-callback . ,Text_item::brew_molecule)
+               (script-priority . 100)
+               (font-series . bold)
+               (font-family . dynamic)
+               (font-shape . italic)
+               (self-alignment-Y . 0)
+               (meta . ,(grob-description "DynamicText" font-interface  text-interface ))
+       ))
+       
+       (DynamicLineSpanner . (
+               (axes . ( 1))
+               (padding . 0.6)
+               (minimum-space . 1.2)
+               (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface))
+       ))
+       
+       (LeftEdge . (
+               (break-align-symbol . Left_edge_item)
+               (X-offset-callbacks . (,Break_align_interface::alignment_callback))
+               (breakable . #t)
+               (meta . ,(grob-description "LeftEdge" break-aligned-interface))
+       ))
+       
+       (Fingering . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
+               (padding . 0.6)
+               (self-alignment-X . 0)
+               (font-family . number)
+               (font-relative-size . -3)
+               (font-shape . upright)
+               (meta . ,(grob-description "Fingering" finger-interface  font-interface text-script-interface text-interface side-position-interface))
+       ))
+
+       (GraceAlignment . (
+               (axes . (0))
+               (horizontal-space . 1.2)
+               (padding . 1.0)
+               (before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
+               (meta . ,(grob-description "GraceAlignment" axis-group-interface align-interface grace-alignment-interface))
+       ))
+       
+       (HaraKiriVerticalGroup . (
+               (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
+               (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
+               (axes 1)
+               (meta . ,(grob-description "HaraKiriVerticalGroup" axis-group-interface hara-kiri-group-interface))
+       ))
+
+       (LyricHyphen . (
+               (thickness . 1.0)
+               (height . 0.4)
+               (minimum-length .  0.5) 
+               (molecule-callback . ,Hyphen_spanner::brew_molecule)
+               (Y-extent-callback . ,Grob::point_dimension_callback)
+               (meta . ,(grob-description "LyricHyphen" lyric-hyphen-interface ))
+       ))
+       
+       (InstrumentName . (
+               (breakable . #t)
+               (Y-offset-callbacks . (,Side_position::centered_on_parent
+                                      ,Side_position::aligned_on_self))
+               (self-alignment-Y . 0)
+               (molecule-callback . ,Text_item::brew_molecule)         
+               (break-align-symbol . Instrument_name)
+               (visibility-lambda . ,begin-of-line-visible)
+               (font-family . roman)
+               (meta . ,(grob-description "InstrumentName"  font-interface  text-interface break-aligned-interface))
+       ))
+       
+       (KeySignature . (
+         (molecule-callback . ,Key_item::brew_molecule)
+         (break-align-symbol . Key_item)
+         (visibility-lambda . ,begin-of-line-visible)
+         (breakable . #t)
+         (meta . ,(grob-description "KeySignature" key-signature-interface  font-interface  break-aligned-interface))
+       ))
+       
+       (Accidentals . (
+               (molecule-callback . ,Local_key_item::brew_molecule)
+               (X-offset-callbacks . (,Side_position::aligned_side))
+               (direction . -1)
+               (left-padding . 0.2)
+               (right-padding . 0.4)
+               (meta . ,(grob-description "Accidentals"  accidentals-interface font-interface side-position-interface))
+       ))
+       
+       (LineOfScore . (
+               (axes . (0 1))
+               (meta . ,(grob-description "LineOfScore"  line-of-score-interface axis-group-interface))
+       ))
+       
+       (LyricExtender . (
+               (molecule-callback . ,Lyric_extender::brew_molecule)
+               (height . 0.8) ; stafflinethickness;
+               (right-trim-amount . 0.5)
+               (Y-extent-callback . ,Grob::point_dimension_callback)
+               (meta . ,(grob-description "LyricExtender"  lyric-extender-interface))
+       ))
+       
+       (LyricText . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (self-alignment-X . 0)
+               (non-rhythmic . #t)
+               (word-space . 0.6)
+               (font-family . roman)
+               (font-shape . upright)
+               (meta . ,(grob-description "LyricText" lyric-syllable-interface text-interface font-interface ))
+       ))
+       
+       (RehearsalMark . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (direction . 1)
+               (breakable . #t)
+               (font-family . number)
+               (font-shape . upright)
+               (font-relative-size . 1)
+               (visibility-lambda . ,end-of-line-invisible)
+               (padding . 0.8)
+               (meta . ,(grob-description "RehearsalMark"  mark-interface side-position-interface))
+       ))
+       
+       (MultiMeasureRest . (
+               (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
+               (molecule-callback . ,Multi_measure_rest::brew_molecule)
+               (staff-position . 0)
+               (expand-limit . 10)
+               (padding . 2.0) ; staffspace
+               (minimum-width . 12.5) ; staffspace
+               (font-family . number)
+               (font-relative-size . 1)
+               (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface  font-interface ))
+       ))
+       (NoteCollision . (
+               (axes 0 1)
+               (note-width . 1.65)
+               (meta . ,(grob-description "NoteCollision"
+                  note-collision-interface axis-group-interface
+               ))
+       ))
+       
+       (NoteColumn . (
+               (axes . (0 1))
+               (meta . ,(grob-description "NoteColumn"  axis-group-interface note-column-interface))
+       ))
+
+       (NoteHead . (
+               (style . default)
+               (molecule-callback . ,Note_head::brew_molecule)
+               (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
+               (meta . ,(grob-description  "NoteHead"
+                       rhythmic-head-interface font-interface 
+                       note-head-interface ))
+       ))
+       (Glissando . (
+                        (type . line)
+                        (gap . 0.5)
+                        (breakable . #t)
+                        (X-extent-callback . #f)
+                        (Y-extent-callback . #f)                        
+                        (molecule-callback . ,Line_spanner::brew_molecule)
+                        (meta . ,(grob-description "Glissando"
+                                                      line-spanner-interface))
+                        ))
+       (FollowThread . (
+                        (type . line)
+                        (gap . 0.5)
+                        (breakable . #t)
+                        (X-extent-callback . #f)
+                        (Y-extent-callback . #f)                        
+                        (molecule-callback . ,Line_spanner::brew_molecule)
+                        (meta . ,(grob-description "FollowThread"
+                                                      line-spanner-interface))
+                        ))
+
+       (NoteName . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (font-family . roman)
+               (meta . ,(grob-description  "NoteName"
+                                              note-name-interface font-interface
+                                              ))
+               ))
+
+       (OctavateEight . (
+               (self-alignment-X . 0)
+               (text . "8")
+               (visibility-lambda . ,begin-of-line-visible)
+               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
+               (Y-offset-callbacks . (,Side_position::aligned_side))
+               (molecule-callback . ,Text_item::brew_molecule)
+                (font-shape . italic)
+               (font-family . roman)
+               (meta . ,(grob-description "OctavateEight" text-interface font-interface ))
+       ))
+       
+       (PaperColumn . (
+               (axes 0)
+               (before-grace-spacing-factor . 1.2)
+                (before-musical-spacing-factor . 0.4)
+               (meta . ,(grob-description "PaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
+       ))
+       (NonMusicalPaperColumn . (
+                (axes 0)
+                (before-musical-spacing-factor . 1.0)
+               (column-space-strength . 2.0)
+               (meta . ,(grob-description "NonMusicalPaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
+        ))
+       
+       (Rest . (
+               (after-line-breaking-callback . ,Rest::after_line_breaking)
+               (X-extent-callback . ,Rest::extent_callback)
+               (Y-extent-callback . ,Rest::extent_callback)            
+               (molecule-callback . ,Rest::brew_molecule)
+               (minimum-beam-collision-distance . 1.5)
+               (meta . ,(grob-description  "Rest"
+                       rhythmic-head-interface
+                       rest-interface))
+       ))
+       (RestCollision . (
+               (minimum-distance . 0.75)
+               (meta . ,(grob-description "RestCollision" rest-collision-interface ))
+       ))
+
+       (Script . (
+               (molecule-callback . ,Script::brew_molecule)
+               (X-offset-callbacks . (,Side_position::centered_on_parent))
+               (after-line-breaking-callback . ,Script::after_line_breaking)
+               (meta . ,(grob-description "Script" script-interface side-position-interface font-interface))
+       ))
+       
+       (ScriptColumn . (
+               (before-line-breaking-callback . ,Script_column::before_line_breaking)
+               (meta . ,(grob-description "ScriptColumn" script-column-interface))
+       ))
+       
+       (Slur . (
+                (molecule-callback . ,Slur::brew_molecule)
+                (thickness . 1.2)              
+                (spacing-procedure . ,Slur::set_spacing_rods)          
+                (minimum-length . 1.5)
+                (after-line-breaking-callback . ,Slur::after_line_breaking)
+                (extremity-rules . ,default-slur-extremity-rules)
+                (extremity-offset-alist . ,default-slur-extremity-offset-alist)
+                (de-uglify-parameters . ( 1.5  0.8  -2.0))
+                (Y-extent-callback . ,Slur::height)
+                (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5)
+                            (bezier-pct-c0 . -0.2) (bezier-pct-c3 . 0.000006)
+                            (bezier-pct-out-max . 0.8) (bezier-pct-in-max . 1.2)
+                            (bezier-area-steps . 1.0)))
+                (beautiful . 0.5)
+                (y-free . 0.75)
+                (attachment . (#f . #f))
+                (attachment-offset . ((0 . 0) . (0 . 0)))
+                (slope-limit . 0.8)
+                (meta . ,(grob-description "Slur" slur-interface))
+                ))
+             
+       (SpacingSpanner . (
+               (spacing-procedure . ,Spacing_spanner::set_springs)
+               (stem-spacing-correction . 0.5)
+               (arithmetic-basicspace . 2.0)
+               (arithmetic-multiplier . ,(* 0.9 1.32))
+               ;; assume that notes at least this long are present.
+               (maximum-duration-for-spacing . ,(make-moment 1 8))
+               (meta . ,(grob-description "SpacingSpanner"  spacing-spanner-interface))
+       ))
+       (SpanBar . (
+               (break-align-symbol . Staff_bar)
+               (barsize-procedure . ,Span_bar::get_bar_size) 
+               (molecule-callback . ,Bar::brew_molecule)
+               (visibility-lambda . ,begin-of-line-invisible)
+               (X-extent-callback . ,Span_bar::width_callback)
+               (Y-offset-callbacks . (,Span_bar::center_on_spanned_callback))
+               
+               (breakable . #t)
+               (glyph . "|")
+               (before-line-breaking-callback . ,Span_bar::before_line_breaking)
+               ;; ugh duplication! 
+               
+               ;;
+               ;; Ross. page 151 lists other values, we opt for a leaner look
+               ;; 
+               (kern . 3.0)
+               (thin-kern . 3.0)
+               (hair-thickness . 1.6)
+               (thick-thickness . 6.0)
+               (meta . ,(grob-description "SpanBar" span-bar-interface bar-line-interface ))
+       ))
+
+       (StanzaNumber . (
+               (breakable . #t)
+               (molecule-callback . ,Text_item::brew_molecule)         
+               (break-align-symbol . Clef_item)
+               (visibility-lambda . ,begin-of-line-visible)
+               (font-family . roman)
+               (meta . ,(grob-description "StanzaNumber" break-aligned-interface text-interface font-interface))
+       ))
+
+       (StaffSymbol . (
+               (molecule-callback . ,Staff_symbol::brew_molecule)
+               (staff-space . 1.0)
+               (line-count . 5 )
+               (meta . ,(grob-description "StaffSymbol" staff-symbol-interface ))
+       ))
+       (SostenutoPedal . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (Y-offset-callbacks .
+                (,Side_position::aligned_side
+                 ,Side_position::centered_on_parent))
+               (no-spacing-rods . #t)
+                (font-shape . italic)
+               (self-alignment-X . 0)
+               (meta . ,(grob-description "SostenutoPedal" text-interface  font-interface))
+       ))
+
+       (Stem . (
+               (before-line-breaking-callback . ,Stem::before_line_breaking)
+               (molecule-callback . ,Stem::brew_molecule)
+               (thickness . 0.8)
+               (beamed-lengths . (0.0 2.5 2.0 1.5))
+               (beamed-minimum-lengths . (0.0 1.5 1.25 1.0))
+               
+;;  Stems in unnatural (forced) direction should be shortened,
+;;  according to [Roush & Gourlay].  Their suggestion to knock off
+;;  a whole staffspace seems a bit drastical: we'll do half.
+
+               (lengths . (3.5 3.5 3.5 4.5 5.0))
+               (stem-shorten . (0.5))
+               ; if stem is on middle line, choose this direction.
+               (default-neutral-direction . 1)
+               (X-offset-callbacks . (,Stem::off_callback))
+               (X-extent-callback . ,Stem::dim_callback)       
+               (meta . ,(grob-description  "Stem" stem-interface  font-interface))
+       ))
+
+       (StemTremolo . (
+               (molecule-callback . ,Stem_tremolo::brew_molecule)
+               (Y-extent-callback . ,Stem_tremolo::height)
+               (X-extent-callback . #f)
+
+               (beam-width . 2.0) ; staff-space
+               (beam-thickness . 0.42) ; staff-space
+               (beam-space-function . ,default-beam-space-function)
+               (meta . ,(grob-description "StemTremolo" stem-tremolo-interface ))
+       ))
+
+       (SeparationItem . (
+               (meta . ,(grob-description "SeparationItem" separation-item-interface ))
+       ))
+       (SeparatingGroupSpanner . (
+               (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
+               (meta . ,(grob-description "SeparatingGroupSpanner" separation-spanner-interface))
+       ))
+
+       (SustainPedal . (
+               (no-spacing-rods . #t)
+               (molecule-callback . ,Sustain_pedal::brew_molecule)
+               (self-alignment-X . 0)
+               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (Y-offset-callbacks .
+                                   (,Side_position::aligned_side
+                                    ,Side_position::centered_on_parent))
+
+               (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface))
+       ))
+
+       ; should split in 3
+       (SystemStartDelimiter . (
+               (molecule-callback . ,System_start_delimiter::brew_molecule)
+               (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
+               (collapse-height . 1.0)
+               (thickness . 1.6)
+               (arch-height . 1.5)
+               (arch-angle . 50.0)
+               (arch-thick . 0.25)
+               (glyph . bar-line)
+               (arch-width . 1.5)
+               (bracket-thick . 0.25)
+               (bracket-width . 2.0)
+               (Y-extent-callback . #f)
+               (font-family . braces)
+               ;; if you want to set point-size, you cannot set
+               ;; relative-size, as no font will be found for other
+               ;; sheets than 20
+               ;;(font-point-size . 20)
+               ;;(font-relative-size . #f)
+               (meta . ,(grob-description "SystemStartDelimiter" system-start-delimiter-interface font-interface))
+               ))
+
+       (TextScript . (
+               (molecule-callback . ,Text_item::brew_molecule)
+               (no-spacing-rods . #t)
+               (padding . 0.5)
+               (font-family . roman)
+               (font-shape . italic)
+               (meta . ,(grob-description "TextScript" text-script-interface text-interface side-position-interface font-interface ))
+       ))
+       (TextSpanner . (
+               (molecule-callback . ,Text_spanner::brew_molecule)
+                (font-shape . italic)
+               (font-family . roman)
+               (type . "line")
+               
+               ;; urg, only for (de)cresc. text spanners
+               (if-text-padding . 1.0)
+               (width-correct . -1)
+               
+               (direction . 1)
+               (meta . ,(grob-description "TextSpanner" text-spanner-interface  font-interface))               
+       ))
+       (Tie . (
+               (molecule-callback . ,Tie::brew_molecule)
+               (spacing-procedure . ,Tie::set_spacing_rods)
+               (staffline-clearance . 0.35)
+               (details . ((ratio . 0.333) (height-limit . 1.0)))
+               (thickness . 1.2)
+               (x-gap . 0.2)
+               (minimum-length  . 2.5)
+               (meta . ,(grob-description "Tie" tie-interface ))
+       ))
+
+       (TieColumn . (
+               (after-line-breaking-callback . ,Tie_column::after_line_breaking)
+               (meta . ,(grob-description "TieColumn" tie-column-interface ))
+       ))
+
+       (TimeSignature . (
+               (molecule-callback . ,Time_signature::brew_molecule)
+               (break-align-symbol . Time_signature)
+               (visibility-lambda . ,all-visible)
+               (breakable . #t)
+                (font-family . number)
+                (meta . ,(grob-description "TimeSignature" time-signature-interface  font-interface))
+       ))
+
+       (TupletBracket . (
+               (number-gap . 2.0)   
+               (delta-y . 0)
+               (thick . 1.0)
+               (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking)
+               (molecule-callback . ,Tuplet_spanner::brew_molecule)
+               (font-family . roman)
+               (font-shape . italic)
+               (font-relative-size . -1)
+               (meta .  ,(grob-description "TupletBracket" text-interface
+                          tuplet-bracket-interface font-interface))
+       ))
+
+       (UnaChordaPedal . (
+               (molecule-callback . ,Text_item::brew_molecule)
+                (font-shape . italic)
+               (no-spacing-rods . #t)
+               (self-alignment-X . 0)
+               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (Y-offset-callbacks .
+                (,Side_position::aligned_side
+                 ,Side_position::centered_on_parent))
+               (meta . ,(grob-description "UnaChordaPedal" text-interface font-interface))
+       ))
+
+       (VoltaBracket . (
+               (molecule-callback . ,Volta_spanner::brew_molecule)
+       
+               (direction . 1)
+               (padding . 1)
+                (font-style . volta)
+               (Y-offset-callbacks . (,Side_position::aligned_side))
+               (thickness . 1.6)  ;  stafflinethickness
+               (height . 2.0) ; staffspace;
+               (minimum-space . 5)
+               (font-family . number)
+               (font-relative-size . -2)
+               (meta . ,(grob-description "VoltaBracket" volta-bracket-interface side-position-interface font-interface))
+       ))
+
+       (VerticalAlignment . (
+               (axes 1)
+               (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
+               (X-extent-callback . #f)
+               (stacking-dir . -1)
+               (meta . ,(grob-description "VerticalAlignment" align-interface axis-group-interface))
+       ))
+
+       (VerticalAxisGroup . (
+               (axes 1)
+               (meta . ,(grob-description "VerticalAxisGroup" axis-group-interface))
+       ))
+))
+
+
+
+;  (display  (map pair? all-grob-descriptions))
+
diff --git a/scm/grob-property-description.scm b/scm/grob-property-description.scm
new file mode 100644 (file)
index 0000000..6d0cd6b
--- /dev/null
@@ -0,0 +1,322 @@
+;;;; grob-property-description.scm -- part of generated backend documentation
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2000  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+
+
+(define all-backend-properties '())
+
+(define (grob-property-description symbol type? description)
+  (set-object-property! symbol 'backend-type? type?)
+  (set-object-property! symbol 'backend-doc description)
+  (set! all-backend-properties (cons symbol all-backend-properties))
+  )
+
+
+  
+;; put this in an alist?
+
+(grob-property-description 'X-extent-callback procedure? "procedure taking an grob and axis argument, returning a number-pair. The return value is the extent of the grob.")
+(grob-property-description 'X-offset-callbacks list? "list of functions, each taking an grob and axis argument. The function determine the position relative to this grob's parent. The last one in the list is called first")
+(grob-property-description 'Y-extent-callback procedure? "see @code{X-extent-callback}")
+(grob-property-description 'Y-offset-callbacks list? "see @code{X-offset-callbacks}")
+(grob-property-description 'after-line-breaking-callback procedure? "Procedure taking a grob as argument.
+This procedure is called (using dependency resolution) after line breaking. Return value is ignored")
+(grob-property-description 'align number? "the alignment of the text, 0 is horizontal, 1 is vertical")
+(grob-property-description 'align-dir dir? "Which side to align? -1: left side, 0: around center of width, 1: right side")
+(grob-property-description 'alignment-done boolean? "boolean to administrate whether we've done the alignment already (to ensure that the process is done only once)")
+(grob-property-description 'all-elements list? "list of all grobs in this line. Needed for protecting grobs from GC.")
+(grob-property-description 'arch-angle number? "")
+(grob-property-description 'arch-height number? "")
+(grob-property-description 'arch-thick number? "")
+(grob-property-description 'arch-width number? "")
+(grob-property-description 'arithmetic-basicspace number? "")
+(grob-property-description 'arithmetic-multiplier number? "see arithmetic-basicspace")
+(grob-property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end")
+(grob-property-description 'attachment-offset pair? "cons of offsets, '(LEFT-offset . RIGHT-offset).  This offset is added to the attachments to prevent ugly slurs.")
+(grob-property-description 'axes list? "list of axis numbers. Should contain only one number.")
+(grob-property-description 'axes list? "list of axis (number) in which this group works")
+(grob-property-description 'bar-size number? "")
+(grob-property-description 'bars list? "list of barline ptrs.")
+(grob-property-description 'barsize-procedure procedure? "how to compute the size of a bar line")
+(grob-property-description 'bass list? " musical-pitch, optional")
+(grob-property-description 'beam ly-grob? "pointer to the beam, if applicable")
+(grob-property-description 'beam-space-function procedure? "function returning space given multiplicity")
+(grob-property-description 'beam-space-function procedure? "function returning space given multiplicity")
+(grob-property-description 'beam-thickness number? "thickness, measured in staffspace")
+(grob-property-description 'beam-thickness number? "thickness, measured in staffspace")
+(grob-property-description 'beam-width number? "width of the tremolo sign")
+(grob-property-description 'beam-width number? "width of the tremolo sign")
+(grob-property-description 'beamed-lengths list? "list of stem lengths given beam multiplicity ")
+(grob-property-description 'beamed-minimum-lengths list? "list of minimum stem lengths given beam multiplicity")
+(grob-property-description 'beamed-stem-shorten number? "shorten beamed stems in forced direction")
+(grob-property-description 'beaming number-pair? "number of beams extending to left and right")
+(grob-property-description 'beams list? "list of beam ptrs.")
+(grob-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.")
+(grob-property-description 'before-grace-spacing-factor number? " stretch space this much if there are grace notes before the column")
+(grob-property-description 'before-line-breaking-callback procedure? "Procedure taking grob as argument.
+This procedure is called (using dependency resolution) before line breaking, but after generating discretionary items. Return value is ignored")
+(grob-property-description 'before-musical-spacing-factor number? "space before musical columns (eg. taken by accidentals) get this much
+stretched when they follow a musical column, in absence of grace
+notes.  0.0 means no extra space (accidentals are ignored)")
+(grob-property-description 'between-system-string string? "string
+ to dump between two systems. Useful for forcing pagebreaks")
+(grob-property-description 'bounded-by-me list? "list of spanners that have this
+column as start/begin point. Only columns that have grobs or act as bounds are spaced.")
+(grob-property-description 'bracket-thick number? "")
+(grob-property-description 'bracket-width number? "")
+(grob-property-description 'break-align-symbol symbol? "the index in the spacing table (symbol) of the to be aligned item.")
+(grob-property-description 'break-glyph-function procedure? "function taking glyph and break-direction, returning the glyph at a line break")
+(grob-property-description 'breakable boolean? "boolean indicating if this is a breakable item (clef, barline, key sig, etc.)")
+(grob-property-description 'c0-position integer? "integer indicating the position of central C")
+
+(grob-property-description 'center-element ly-grob? "grob which will
+be at the center of the group after aligning (when using
+Align_interface::center_on_element). ")
+
+(grob-property-description 'collapse-height number? "")
+(grob-property-description 'column-space-strength number? "relative strength of space following breakable columns (eg. prefatory matter)")
+(grob-property-description 'columns list? "list of paper-columns")
+(grob-property-description 'columns list? " list of note-columns.")
+(grob-property-description 'columns list? "list of all paper columns")
+(grob-property-description 'contains-grace boolean? "Used to widen entries for grace notes.")
+(grob-property-description 'control-points list? "List of 4 offsets (number-pairs) controlling the tie shape")
+(grob-property-description 'control-points list? "[internal] control points of bezier curve")
+(grob-property-description 'damping integer? "amount of beam slope damping should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams ")
+(grob-property-description 'damping number? "damping factor.")
+(grob-property-description 'dash-length number? "the length of a dash")
+(grob-property-description 'dash-period number? "the length of one dash + white space")
+(grob-property-description 'dashed number? "[FIXME: use dash-period/dash length; see text-spanner] number representing the length of the dashes.")
+(grob-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.")
+(grob-property-description 'default-neutral-direction dir? "Where to go if we're in the middle of the staff")
+(grob-property-description 'delta-y number? "amount of ascension")
+(grob-property-description 'dependencies list? "list of score-grob pointers that indicate who to compute first for certain global passes")
+(grob-property-description 'details list? "alist of parameters for the curve shape")
+(grob-property-description 'details list? "alist containing contaning a few magic constants.")
+(grob-property-description 'dir-forced boolean? "set if direction has been forced; read by Beam.")
+(grob-property-description 'dir-function procedure? "function of type (count total)->direction.  Default value: beam-dir-majority, also available: beam-dir-mean, beam-dir-median.")
+(grob-property-description 'dir-list list? "list of stem directions, needed for optical spacing correction.")
+(grob-property-description 'direction dir? "up or down, left or right?")
+(grob-property-description 'direction-source ly-grob? "in case side-relative-direction is set, which grob  to get the direction from ")
+(grob-property-description 'dot ly-grob? "reference to Dots object.")
+(grob-property-description 'dot-count integer? "number of dots")
+(grob-property-description 'duration-log integer? "2-log of the notehead duration")
+(grob-property-description 'duration-log integer? "log of the duration, ie. 0=whole note, 1 = half note, etc.")
+(grob-property-description 'edge-height pair? "a cons that specifies the heights of the vertical egdes '(LEFT-height . RIGHT-height)")
+(grob-property-description 'edge-text pair? "a cons that specifies the texts to be set at the edges '(LEFT-text . RIGHT-text)")
+(grob-property-description 'elements list? " -- list of items.")
+(grob-property-description 'elements list? "list of grobs (NoteColumn,
+generally) participating in the collision. The
+@code{rest-collision} property in @code{elements} is set
+to a pointer to the collision")
+(grob-property-description 'elements list? "to be aligned grobs ")
+(grob-property-description 'expand-limit integer? "maximum number of measures expanded in church rests")
+(grob-property-description 'extra-extent-X number-pair? "enlarge in X dimension by this much, measured in staff space")
+(grob-property-description 'extra-extent-Y number-pair? "see @code{extra-extent-Y}")
+(grob-property-description 'extra-offset number-pair? "pair of reals (a cons) forcing an extra offset   before outputting")
+(grob-property-description 'extra-space number-pair? "pair of distances")
+(grob-property-description 'extra-space number-pair? "(cons LEFT RIGHT)")
+(grob-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.")
+
+(grob-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.")
+(grob-property-description 'flag-style string? "")
+(grob-property-description 'flag-width-function procedure? "")
+(grob-property-description 'font-family symbol? "partial font
+definition: music roman braces dynamic math ...")
+(grob-property-description 'font-name symbol? "partial font definition:
+base name of font file FIXME: should override other partials")
+(grob-property-description 'font-point-size number? "partial font definition: exact font size in points FIXME: should override font-relative-size")
+(grob-property-description 'font-relative-size number? "partial font definition: the relative size, 0 is style-sheet's normal size, -1 is smaller, +1 is bigger")
+(grob-property-description 'font-relative-size integer? "")
+(grob-property-description 'font-series symbol? "partial font definition: medium, bold")
+(grob-property-description 'font-shape symbol? "partial font definition: upright or italic")
+
+(grob-property-description 'font-style symbol? "a precooked set of font
+definitions, eg. finger volta timesig mark script large Large
+dynamic")
+
+(grob-property-description 'force-hshift number? "amount of
+collision_note_width that overides automatic collision settings. This
+is used by @ref{note-collision-interface}")
+
+(grob-property-description 'fraction number-pair? "")
+(grob-property-description 'full-size-change boolean? "if set, don't make a change clef smaller.")
+
+(grob-property-description 'glyph symbol? "a string determining what (style) of  glyph is typeset. Valid choices depend on the function that is reading this property. ")
+(grob-property-description 'gap number? "Size of a gap in a variable symbol")
+(grob-property-description 'glyph-name string? "a name of character within font")
+
+(grob-property-description 'grow-direction dir? "crescendo or decrescendo?")
+(grob-property-description 'hair-thickness number? "thickness, measured in stafflinethickness")
+(grob-property-description 'heads pair? "pair of grob pointers, pointing to the two heads of the  tie. ")
+(grob-property-description 'heads list? "list of note heads")
+(grob-property-description 'height number? "in staffspace ")
+(grob-property-description 'height-hs number? "in halfspace.  Only used by Beam.")
+(grob-property-description 'height-quants procedure? "function of type (beam staff-line-thickness) -> list of quants.  Default value: default-beam-dy-quants.
+")
+(grob-property-description 'horizontal-shift integer? "integer that identifies ranking of note-column for horizontal shifting. This is used by @ref{note-collision-interface}")
+(grob-property-description 'horizontal-space number? "amount of space to add after a note (in staff-space)")
+(grob-property-description 'ideal-distances list? "(OBJ . (DIST . STRENGTH)) pairs")
+(grob-property-description 'interfaces list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.")
+(grob-property-description 'inversion list? " musical-pitch, optional")
+(grob-property-description 'items-worth-living list? "list of interesting items. If empty in a particular system, clear that system.")
+(grob-property-description 'kern number? "amount of extra white space to add before text.  This is `relative'(?) to the current alignment.")
+(grob-property-description 'kern number? "space after a thick line")
+(grob-property-description 'left-padding number? "space left of accs")
+(grob-property-description 'length number? "Stem length for unbeamed stems, only for user override")
+(grob-property-description 'lengths list? "Stem length given multiplicity of flag")
+(grob-property-description 'line-count integer? "Number of staff lines")
+(grob-property-description 'line-thickness number? "the thickness[stafflinethickness] of the line")
+(grob-property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name")
+(grob-property-description 'magnify number? "the magnification factor.  FIXME: doesn't work for feta fonts")
+(grob-property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
+(grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.")
+(grob-property-description 'merge-differently-dotted boolean? " Merge noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @ref{note-collision-interface} ")
+(grob-property-description 'minimum-distance number? "minimum distance between notes and rests.")
+(grob-property-description 'minimum-distances list? "list of rods (ie. (OBJ . DIST) pairs)")
+(grob-property-description 'minimum-extent-X number-pair? "minimum size in X dimension, measured in staff space")
+(grob-property-description 'minimum-extent-Y number-pair? "see @code{minimum-extent-Y}")
+(grob-property-description 'minimum-length number? "minimum length in staffspace")
+
+(grob-property-description 'minimum-length number? "try to make the
+hyphens at least this long. Also works as a scaling parameter for the
+length")
+
+;; FIXME.
+(grob-property-description 'minimum-space number-pair? "(cons LEFT RIGHT)")
+(grob-property-description 'minimum-space number? "minimum distance that the victim should move (after padding)")
+
+
+(grob-property-description 'minimum-width number? "minimum-width of rest symbol, in staffspace")
+(grob-property-description 'molecule-callback procedure? "Function taking grob as argument, returning a Scheme encoded Molecule.")
+(grob-property-description 'new-accidentals list? "list of (pitch, accidental) pairs")
+(grob-property-description 'no-spacing-rods boolean? "read from grobs: boolean that makes Separation_item ignore this item (MOVE ME TO ITEM)")
+(grob-property-description 'no-stem-extend boolean? "should stem not be extended to middle staff line?")
+(grob-property-description 'non-default boolean? "not set because of existence of a bar?")
+(grob-property-description 'note-width number? "unit for horizontal translation, measured in staff-space.")
+(grob-property-description 'number-gap number? "")
+(grob-property-description 'old-accidentals list? "list of (pitch, accidental) pairs")
+(grob-property-description 'origin ly-input-location? "location in input file of the definition")
+(grob-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)")
+
+(grob-property-description 'padding number? "add this much extra space between objects that are next to each other")
+
+(grob-property-description 'parallel-beam boolean? "internal: true if there is a beam just as wide as the bracket ")
+(grob-property-description 'pitches list? "list of musical-pitch")
+(grob-property-description 'raise number? "height for text to be raised (a negative value lowers the text")
+(grob-property-description 'right-padding number? "space right of accs")
+(grob-property-description 'right-trim-amount number? "")
+(grob-property-description 'script-priority number? "A sorting key that determines in what order a script is within a stack of scripts")
+(grob-property-description 'self-alignment-X number? "real number: -1 =
+left aligned, 0 = center, 1 right-aligned in X direction.
+
+ Set to an grob pointer, if you want that grob to be the center.
+In this case, the center grob should have this object as a
+reference point.
+")
+(grob-property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis")
+(grob-property-description 'shortest-playing-duration moment? "duration of the shortest playing in that column.")
+(grob-property-description 'shortest-starter-duration moment? "duration of the shortest notes that starts exactly in this column.")
+(grob-property-description 'side-relative-direction dir? "if set: get the direction from a different object, and multiply by this.")
+(grob-property-description 'side-support list? "the support, a list of grobs")
+(grob-property-description 'slope-limit number? "set slope to zero if slope is running away steeper than this.")
+(grob-property-description 'space-function procedure? "function of type multiplicity -> real (in staffspace)")
+(grob-property-description 'spacing-procedure procedure? "procedure
+taking grob as argument. This is called after
+before-line-breaking-callback, but before the actual line breaking
+itself.  Return value is ignored")
+(grob-property-description 'stacking-dir dir? "stack contents of grobs in which direction ?")
+(grob-property-description 'staff-space number? "Amount of line leading relative to global staffspace")
+(grob-property-description 'staffline-clearance number? "don't get closer than this to stafflines.")
+(grob-property-description 'stem ly-grob? "pointer to the stem object.")
+(grob-property-description 'stem ly-grob? "pointer to Stem object")
+(grob-property-description 'stem-centered boolean? "Center stems on note heads. Useful for mensural notation")
+(grob-property-description 'stem-end-position number? "Where does the stem end (the end is opposite to the support-head")
+(grob-property-description 'stem-length number? "length of stem")
+(grob-property-description 'stem-shorten list? "shorten stems in forced directions given flag multiplicity")
+(grob-property-description 'stem-spacing-correction number? "optical correction amount.")
+(grob-property-description 'stems list? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
+(grob-property-description 'stretch-distance number-pair? "pair of distances")
+(grob-property-description 'style symbol? "a string determining what style of  glyph is typeset. Valid choices depend on the function that is reading this property. ")
+(grob-property-description 'support-head ly-grob? "the note head at
+one end of the stem")
+(grob-property-description 'text markup? "
+Scheme markup text.  It is defined as follows:
+
+@example
+
+TEXT : STRING | (MARKUP SENTENCE)
+MARKUP: PROPERTY | ABBREV
+SENTENCE: TEXT | SENTENCE TEXT
+PROPERTY: (key . value)
+ABBREV: rows lines roman music bold italic named super sub text, or any font-style
+
+@end example
+
+So, TEXT is either a string, or a list of which the CAR is a MARKUP.
+MARKUP is either a CONS: an grob property '(key . value) or a symbol:
+a predefined abbreviation for a list of grob properties.
+
+
+The following abbreviations are currently defined:
+@table @samp
+@item rows
+horizontal mode: set all text on one line (default)
+@item lines
+ vertical mode: set every text on new line
+@item roman
+ select roman font
+@item music
+ select feta font
+@item bold
+ select bold series
+@item italic
+ select italic shape
+@item named
+ lookup by character name
+@item text
+ plain text lookup (by character value)
+@item super
+ superscript
+@item sub
+ subscript
+@item any font-style
+ finger volta timesig mmrest mark script large Large dynamic
+@end table
+")
+(grob-property-description 'thick number? "thickness, in stafflinethickness")
+(grob-property-description 'thick-thickness number? "thickness, measured in stafflinethickness")
+(grob-property-description 'thickness number? "thickness, measured in stafflinethickness")
+(grob-property-description 'thin-kern number? "space after a hair-line")
+(grob-property-description 'forced-distance number? "forced distance for an alignment")
+(grob-property-description 'threshold number-pair? "(cons MIN MAX), where MIN and MAX are dimensions in staffspace")
+(grob-property-description 'transparent boolean? "This is almost the
+same as setting molecule-callback to #f, but this retains the
+dimensions of this grob, which means that you can erase grobs
+individually. ")
+(grob-property-description 'tuplet-bracket-visibility boolean-or-symbol? "
+This controls the visibility of the tuplet bracket.
+Setting it to false will prevent printing of the
+bracket. Setting the property to #'if-no-beam will make it
+print only if there is no beam associated with this tuplet bracket.")
+(grob-property-description 'tuplet-number-visibility boolean-or-symbol? "
+Like @code{tuplet-bracket-visibility}, but for the number.")
+(grob-property-description 'type symbol? "one of: line, dashed-line or dotted-line")
+(grob-property-description 'vertical-position-quant-function procedure? "
+function of type (beam multiplicity dy staff-line-thickness) -> real.  Default value: default-beam-y-quants, also available: beam-traditional-y-quants.
+")
+(grob-property-description 'visibility-lambda procedure? "a function that takes the break direction and returns a  cons of booleans containing (TRANSPARENT . EMPTY)")
+(grob-property-description 'when moment? "when does this column happen?")
+(grob-property-description 'word-space number? "elongate left by this much (FIXME: cumbersome semantics)")
+(grob-property-description 'x-gap number? "horizontal gap between notehead and tie")
+(grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems")
+(grob-property-description 'y-position number? "position of left edge")
+(grob-property-description 'y-position-hs number? "in half space, position of left edge.  Only used by Beam.")
diff --git a/scm/interface-description.scm b/scm/interface-description.scm
new file mode 100644 (file)
index 0000000..9b0d034
--- /dev/null
@@ -0,0 +1,755 @@
+;;;; interface-description.scm -- part of generated backend documentation
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2000  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+
+; should include default value?
+
+
+;;; 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
+       props
+       )
+  )
+
+
+(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 'name name)
+         (cons 'interfaces syms)
+         (cons 'interface-descriptions ifs)
+         ; (cons 'interface-descriptions (cadr merged))
+         ;; description of the grob itself?
+;        (cons 'properties prop-typep-pairs)
+  )))
+
+(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.
+
+#'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"
+   '(
+    non-default 
+    full-size-change 
+    glyph 
+    ))
+  )
+
+(define axis-group-interface
+  (lily-interface
+   'axis-group-interface
+   "a group of coupled grobs"
+   '(
+    axes 
+   )))
+
+(define note-column-interface
+  (lily-interface
+   'note-column-interface
+   "Stem and noteheads combined"
+   '(
+    horizontal-shift 
+    force-hshift 
+    ))
+  )
+
+(define stem-interface
+  (lily-interface
+   'stem-interface
+   "A stem"
+   '(
+    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 
+    )))
+
+
+(define slur-interface
+  (lily-interface
+   'slur-interface
+   "A slur"
+   '(
+    de-uglify-parameters 
+    details 
+    attachment 
+    direction 
+   attachment-offset 
+     beautiful 
+     y-free 
+     control-points 
+     extremity-rules  
+     extremity-offset-alist 
+     thickness 
+     dashed 
+
+    )
+   )
+  )
+
+(define side-position-interface
+  (lily-interface
+   'side-position-interface
+   "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 
+    
+    )
+  ))
+
+(define accidentals-interface
+  (lily-interface
+   'accidentals-interface
+   "Accidentals"
+   '(
+    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"
+   '(
+    style 
+    )
+   ))
+
+(define note-name-interface
+  (lily-interface
+   'note-name-interface
+   "Note name"
+   '(
+    style 
+    )
+   ))
+
+
+(define rhythmic-head-interface
+  (lily-interface
+   'rhythmic-head-interface
+   "Note head or rest"
+   '(
+    dot 
+    stem 
+    duration-log 
+    )))
+
+(define rest-interface
+  (lily-interface
+   'rest-interface
+   "a rest"
+   '(style )))
+
+(define tuplet-bracket-interface
+  (lily-interface
+   'tuplet-bracket-interface
+   "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 
+    )
+))
+
+
+(define align-interface
+  (lily-interface
+   'align-interface
+   " 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"
+   '(
+    minimum-space 
+    extra-space 
+    )))
+
+(define break-aligned-interface
+  (lily-interface
+   'break-aligned-interface
+   "Items that are aligned in prefatory matter"
+   '(
+    break-align-symbol 
+    visibility-lambda 
+    breakable 
+    )))
+
+(define chord-name-interface
+  (lily-interface
+   'chord-name-interface
+   "generate a chord name"
+   '( pitches inversion bass)))
+
+(define time-signature-interface
+  (lily-interface
+   'time-signature-interface
+   "A time signature, in different styles"
+   '( fraction style )))
+
+(define bar-line-interface
+  (lily-interface
+   'bar-line-interface
+   "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.
+
+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
+   "Functions and settings for drawing an arpeggio symbol (a wavy line left to noteheads."
+   '(stems)
+   )
+  )
+
+(define note-collision-interface
+  (lily-interface
+   'note-collision-interface
+   "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.
+ #'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"
+   '(text align lookup raise kern magnify)))
+
+(define dot-column-interface
+  (lily-interface
+   'dot-column-interface
+   "Interface that groups dots so they form a column"
+   '( )
+   ))
+
+(define dynamic-interface
+  (lily-interface
+   'dynamic-interface
+   "Any kind of loudness sign"
+   '()
+    ))
+
+
+(define finger-interface
+  (lily-interface
+   'finger-interface
+   "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
+  (lily-interface
+   'text-script-interface
+   "Any text script"
+   '()
+    ))
+
+(define grace-alignment-interface
+  (lily-interface
+   'grace-alignment-interface
+   "put grace notes in line"
+   '(
+    horizontal-space 
+    )
+   ))
+
+(define hara-kiri-group-interface
+  (lily-interface
+   'hara-kiri-group-interface
+   "  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
+   'lyric-hyphen-interface
+   "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."
+
+   '( thickness height minimum-length word-space )
+   ))
+
+(define key-signature-interface
+  (lily-interface
+   'key-signature-interface
+   "A group of  accidentals."
+   '(
+    c0-position  
+    old-accidentals  
+    new-accidentals  
+    )))
+
+(define lyric-extender-interface
+  (lily-interface
+   '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)."
+   '(
+    word-space  
+    height  
+    right-trim-amount  
+    )))
+
+
+(define lyric-syllable-interface
+  (lily-interface
+   'lyric-syllable-interface
+   "a single piece of lyrics"
+   '(
+    word-space  
+    )))
+
+
+(define mark-interface
+  (lily-interface
+   'mark-interface
+   "a rehearsal mark"
+   '(
+    )))
+
+(define multi-measure-rest-interface
+  (lily-interface
+   'multi-measure-rest-interface
+   "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
+   ""
+
+   '(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
+   "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
+   "Move around ordinary rests (not multi-measure-rests) to avoid
+conflicts."
+   '(
+    maximum-rest-count 
+    minimum-distance 
+    elements 
+    )))
+
+(define script-interface
+  (lily-interface
+   'script-interface
+   ""
+   '(
+    script-priority 
+    )))
+
+(define script-column-interface
+  (lily-interface
+   'script-column-interface
+   "An interface that sorts scripts according to their @code{script-priority}"
+   '( )))
+
+
+(define spacing-spanner-interface
+  (lily-interface
+   'spacing-spanner-interface
+   " 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
+  (lily-interface
+   'staff-symbol-interface
+   "This spanner draws the lines of a staff.  The middle line is
+position 0."
+   '(
+    staff-space 
+    line-count 
+    )))
+
+(define stem-tremolo-interface
+  (lily-interface
+   'stem-tremolo-interface
+   ""
+   '(
+    stem 
+    beam-width 
+    beam-thickness 
+    beam-space-function 
+    )))
+
+(define separation-item-interface
+  (lily-interface
+   'separation-item-interface
+   "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
+   ""
+   '(
+    )))
+(define system-start-delimiter-interface
+  (lily-interface
+   '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"
+   '(
+    dash-period  
+    dash-length 
+    line-thickness 
+    edge-height 
+    edge-text 
+    type 
+    )
+))
+
+(define tie-interface
+  (lily-interface
+   'tie-interface
+   "A tie connecting two noteheads.
+direction = Forced direction for all ties"
+   
+   '(
+    staffline-clearance 
+    control-points 
+    heads 
+    details 
+    thickness 
+    x-gap 
+    direction 
+    minimum-length 
+    )))
+
+
+
+(define tie-column-interface
+  (lily-interface
+   'tie-column-interface
+   "that sets tie directions in a tied chord"
+   '(direction)
+   ))
+
+(define volta-bracket-interface
+  (lily-interface
+   'volta-bracket-interface
+   "Volta bracket with number"
+   '(
+    bars  
+    thickness  
+    height  
+    )))
+
+(define span-bar-interface
+  (lily-interface
+   'span-bar-interface
+   ""
+   '(
+    )))
+
+
+
+
index 565ef7d9594f4958aea80c2c38d21bf97a71c534..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,749 +0,0 @@
-
-
-; should include default value?
-
-
-;;; 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
-       props
-       )
-  )
-
-
-(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 'name name)
-         (cons 'interfaces syms)
-         (cons 'interface-descriptions ifs)
-         ; (cons 'interface-descriptions (cadr merged))
-         ;; description of the grob itself?
-;        (cons 'properties prop-typep-pairs)
-  )))
-
-(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.
-
-#'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"
-   '(
-    non-default 
-    full-size-change 
-    glyph 
-    ))
-  )
-
-(define axis-group-interface
-  (lily-interface
-   'axis-group-interface
-   "a group of coupled grobs"
-   '(
-    axes 
-   )))
-
-(define note-column-interface
-  (lily-interface
-   'note-column-interface
-   "Stem and noteheads combined"
-   '(
-    horizontal-shift 
-    force-hshift 
-    ))
-  )
-
-(define stem-interface
-  (lily-interface
-   'stem-interface
-   "A stem"
-   '(
-    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 
-    )))
-
-
-(define slur-interface
-  (lily-interface
-   'slur-interface
-   "A slur"
-   '(
-    de-uglify-parameters 
-    details 
-    attachment 
-    direction 
-   attachment-offset 
-     beautiful 
-     y-free 
-     control-points 
-     extremity-rules  
-     extremity-offset-alist 
-     thickness 
-     dashed 
-
-    )
-   )
-  )
-
-(define side-position-interface
-  (lily-interface
-   'side-position-interface
-   "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 
-    
-    )
-  ))
-
-(define accidentals-interface
-  (lily-interface
-   'accidentals-interface
-   "Accidentals"
-   '(
-    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"
-   '(
-    style 
-    )
-   ))
-
-(define note-name-interface
-  (lily-interface
-   'note-name-interface
-   "Note name"
-   '(
-    style 
-    )
-   ))
-
-
-(define rhythmic-head-interface
-  (lily-interface
-   'rhythmic-head-interface
-   "Note head or rest"
-   '(
-    dot 
-    stem 
-    duration-log 
-    )))
-
-(define rest-interface
-  (lily-interface
-   'rest-interface
-   "a rest"
-   '(style )))
-
-(define tuplet-bracket-interface
-  (lily-interface
-   'tuplet-bracket-interface
-   "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 
-    )
-))
-
-
-(define align-interface
-  (lily-interface
-   'align-interface
-   " 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"
-   '(
-    minimum-space 
-    extra-space 
-    )))
-
-(define break-aligned-interface
-  (lily-interface
-   'break-aligned-interface
-   "Items that are aligned in prefatory matter"
-   '(
-    break-align-symbol 
-    visibility-lambda 
-    breakable 
-    )))
-
-(define chord-name-interface
-  (lily-interface
-   'chord-name-interface
-   "generate a chord name"
-   '( pitches inversion bass)))
-
-(define time-signature-interface
-  (lily-interface
-   'time-signature-interface
-   "A time signature, in different styles"
-   '( fraction style )))
-
-(define bar-line-interface
-  (lily-interface
-   'bar-line-interface
-   "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.
-
-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
-   "Functions and settings for drawing an arpeggio symbol (a wavy line left to noteheads."
-   '(stems)
-   )
-  )
-
-(define note-collision-interface
-  (lily-interface
-   'note-collision-interface
-   "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.
- #'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"
-   '(text align lookup raise kern magnify)))
-
-(define dot-column-interface
-  (lily-interface
-   'dot-column-interface
-   "Interface that groups dots so they form a column"
-   '( )
-   ))
-
-(define dynamic-interface
-  (lily-interface
-   'dynamic-interface
-   "Any kind of loudness sign"
-   '()
-    ))
-
-
-(define finger-interface
-  (lily-interface
-   'finger-interface
-   "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
-  (lily-interface
-   'text-script-interface
-   "Any text script"
-   '()
-    ))
-
-(define grace-alignment-interface
-  (lily-interface
-   'grace-alignment-interface
-   "put grace notes in line"
-   '(
-    horizontal-space 
-    )
-   ))
-
-(define hara-kiri-group-interface
-  (lily-interface
-   'hara-kiri-group-interface
-   "  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
-   'lyric-hyphen-interface
-   "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."
-
-   '( thickness height minimum-length word-space )
-   ))
-
-(define key-signature-interface
-  (lily-interface
-   'key-signature-interface
-   "A group of  accidentals."
-   '(
-    c0-position  
-    old-accidentals  
-    new-accidentals  
-    )))
-
-(define lyric-extender-interface
-  (lily-interface
-   '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)."
-   '(
-    word-space  
-    height  
-    right-trim-amount  
-    )))
-
-
-(define lyric-syllable-interface
-  (lily-interface
-   'lyric-syllable-interface
-   "a single piece of lyrics"
-   '(
-    word-space  
-    )))
-
-
-(define mark-interface
-  (lily-interface
-   'mark-interface
-   "a rehearsal mark"
-   '(
-    )))
-
-(define multi-measure-rest-interface
-  (lily-interface
-   'multi-measure-rest-interface
-   "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
-   ""
-
-   '(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
-   "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
-   "Move around ordinary rests (not multi-measure-rests) to avoid
-conflicts."
-   '(
-    maximum-rest-count 
-    minimum-distance 
-    elements 
-    )))
-
-(define script-interface
-  (lily-interface
-   'script-interface
-   ""
-   '(
-    script-priority 
-    )))
-
-(define script-column-interface
-  (lily-interface
-   'script-column-interface
-   "An interface that sorts scripts according to their @code{script-priority}"
-   '( )))
-
-
-(define spacing-spanner-interface
-  (lily-interface
-   'spacing-spanner-interface
-   " 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
-  (lily-interface
-   'staff-symbol-interface
-   "This spanner draws the lines of a staff.  The middle line is
-position 0."
-   '(
-    staff-space 
-    line-count 
-    )))
-
-(define stem-tremolo-interface
-  (lily-interface
-   'stem-tremolo-interface
-   ""
-   '(
-    stem 
-    beam-width 
-    beam-thickness 
-    beam-space-function 
-    )))
-
-(define separation-item-interface
-  (lily-interface
-   'separation-item-interface
-   "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
-   ""
-   '(
-    )))
-(define system-start-delimiter-interface
-  (lily-interface
-   '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"
-   '(
-    dash-period  
-    dash-length 
-    line-thickness 
-    edge-height 
-    edge-text 
-    type 
-    )
-))
-
-(define tie-interface
-  (lily-interface
-   'tie-interface
-   "A tie connecting two noteheads.
-direction = Forced direction for all ties"
-   
-   '(
-    staffline-clearance 
-    control-points 
-    heads 
-    details 
-    thickness 
-    x-gap 
-    direction 
-    minimum-length 
-    )))
-
-
-
-(define tie-column-interface
-  (lily-interface
-   'tie-column-interface
-   "that sets tie directions in a tied chord"
-   '(direction)
-   ))
-
-(define volta-bracket-interface
-  (lily-interface
-   'volta-bracket-interface
-   "Volta bracket with number"
-   '(
-    bars  
-    thickness  
-    height  
-    )))
-
-(define span-bar-interface
-  (lily-interface
-   'span-bar-interface
-   ""
-   '(
-    )))
-
-
-
-
index 3c065bf642a1dec758dbe2ab2b7d0fae3107a89d..6228a482e026b2a313a85a09949719cd78ecc935 100644 (file)
@@ -66,9 +66,9 @@
 (if (not standalone)
     (map (lambda (x) (eval-string (ly-gulp-file x)))
         '("c++.scm"
-          "backend-property.scm"
-          "translator-properties.scm"
-          "interface.scm"
+          "grob-property-description.scm"
+          "translator-property-description.scm"
+          "interface-description.scm"
           "beam.scm"
           "clef.scm"
           "slur.scm"
@@ -77,5 +77,5 @@
           "generic-property.scm"
           "basic-properties.scm"
           "chord-name.scm"
-          "element-descriptions.scm"
+          "grob-description.scm"
           )))
diff --git a/scm/music-property-description.scm b/scm/music-property-description.scm
new file mode 100644 (file)
index 0000000..a7f0460
--- /dev/null
@@ -0,0 +1,62 @@
+;;;; music-property-description.scm -- part of generated backend documentation
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2000  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+
+(define all-music-properties '())
+
+(define (music-property-description symbol type? description)
+  (set-object-property! symbol 'music-type? type?)
+  (set-object-property! symbol 'music-doc description)
+  (set! all-music-properties (cons symbol all-music-properties))
+  )
+(define (true? x) #t)
+
+(music-property-description 'iterator-ctor c++-function? "Function to construct music-event-iterator object for this Music")
+(music-property-description 'duration duration? "")
+(music-property-description 'metronome-count number? "How many beats in a minute?")
+(music-property-description 'span-type symbol? "What kind of spanner should be created?")
+(music-property-description 'alternatives music? "Music_sequence of alternatives for repeated music.")
+(music-property-description 'articulation-type symbol? "key for scriptDefinitions alist")
+(music-property-description 'bass boolean? "")
+(music-property-description 'body music? "")
+(music-property-description 'cautionary boolean? "")
+(music-property-description 'change-to-id string? "")
+(music-property-description 'change-to-type string? "")
+(music-property-description 'context-id string? "")
+(music-property-description 'context-type string?  "")
+(music-property-description 'denominator integer? "")
+(music-property-description 'direction dir? "")
+(music-property-description 'text-type symbol? "")
+(music-property-description 'element music )
+(music-property-description 'grob-property symbol? "")
+(music-property-description 'grob-value true? "")
+(music-property-description 'elements list? "")
+(music-property-description 'force-accidental boolean? "")
+(music-property-description 'inversion boolean? "")
+(music-property-description 'label string? "")
+(music-property-description 'last-pitch pitch? "")
+(music-property-description 'length procedure? "")
+(music-property-description 'lyrics music? "")
+(music-property-description 'mark-label string? "")
+(music-property-description 'numerator integer? "")
+(music-property-description 'one music? ""); part-combine, fixme, naming.
+(music-property-description 'origin input? "")
+(music-property-description 'penalty number? "")
+(music-property-description 'pitch pitch? "")
+(music-property-description 'pitch-alist list? "")
+(music-property-description 'predicate procedure? "")
+(music-property-description 'type symbol? "")
+(music-property-description 'repeat-count  integer? "")
+(music-property-description 'span-direction dir? "")
+(music-property-description 'symbol symbol? "")
+(music-property-description 'symbols list? "")
+(music-property-description 'tempo duration? "")
+(music-property-description 'text string? "");; markup?
+(music-property-description 'tremolo-type integer? "")
+(music-property-description 'two music? ""); part-combine, fixme, naming.
+(music-property-description 'value true? "")
+(music-property-description 'what string? "")
index 99807cfe50bcb4fc5558b44f2aab5f6c995dc4c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,56 +0,0 @@
-
-
-(define all-music-properties '())
-
-(define (music-property-description symbol type? description)
-  (set-object-property! symbol 'music-type? type?)
-  (set-object-property! symbol 'music-doc description)
-  (set! all-music-properties (cons symbol all-music-properties))
-  )
-(define (true? x) #t)
-
-(music-property-description 'iterator-ctor c++-function? "Function to construct music-event-iterator object for this Music")
-(music-property-description 'duration duration? "")
-(music-property-description 'metronome-count number? "How many beats in a minute?")
-(music-property-description 'span-type symbol? "What kind of spanner should be created?")
-(music-property-description 'alternatives music? "Music_sequence of alternatives for repeated music.")
-(music-property-description 'articulation-type symbol? "key for scriptDefinitions alist")
-(music-property-description 'bass boolean? "")
-(music-property-description 'body music? "")
-(music-property-description 'cautionary boolean? "")
-(music-property-description 'change-to-id string? "")
-(music-property-description 'change-to-type string? "")
-(music-property-description 'context-id string? "")
-(music-property-description 'context-type string?  "")
-(music-property-description 'denominator integer? "")
-(music-property-description 'direction dir? "")
-(music-property-description 'text-type symbol? "")
-(music-property-description 'element music )
-(music-property-description 'grob-property symbol? "")
-(music-property-description 'grob-value true? "")
-(music-property-description 'elements list? "")
-(music-property-description 'force-accidental boolean? "")
-(music-property-description 'inversion boolean? "")
-(music-property-description 'label string? "")
-(music-property-description 'last-pitch pitch? "")
-(music-property-description 'length procedure? "")
-(music-property-description 'lyrics music? "")
-(music-property-description 'mark-label string? "")
-(music-property-description 'numerator integer? "")
-(music-property-description 'one music? ""); part-combine, fixme, naming.
-(music-property-description 'origin input? "")
-(music-property-description 'penalty number? "")
-(music-property-description 'pitch pitch? "")
-(music-property-description 'pitch-alist list? "")
-(music-property-description 'predicate procedure? "")
-(music-property-description 'type symbol? "")
-(music-property-description 'repeat-count  integer? "")
-(music-property-description 'span-direction dir? "")
-(music-property-description 'symbol symbol? "")
-(music-property-description 'symbols list? "")
-(music-property-description 'tempo duration? "")
-(music-property-description 'text string? "");; markup?
-(music-property-description 'tremolo-type integer? "")
-(music-property-description 'two music? ""); part-combine, fixme, naming.
-(music-property-description 'value true? "")
-(music-property-description 'what string? "")
index a620aa87281d05d41713a0f87c2a4794e974c946..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,291 +0,0 @@
-
-(define all-translation-properties '())
-
-(define (translator-property-description symbol type? description)
-  (set-object-property! symbol 'translation-type? type?)
-  (set-object-property! symbol 'translation-doc description)
-  (set! all-translation-properties (cons symbol all-translation-properties))
-  )
-
-
-
-(translator-property-description 'CONTEXTNAMEMinimumVerticalExtent number-pair? "minimum vertical extent, same format as CONTEXTNAMEVerticalExtent [fixme, naming]")
-(translator-property-description 'CONTEXTNAMEVerticalExtent number-pair? "hard coded vertical extent.
-The format is a pair of dimensions, for example, this sets the sizes
-of a staff to 10 (5+5) staffspaces high.
-
-@example
-property Staff.StaffVerticalExtent = #(-5.0 . 5.0)
-@end example
-
- [fixme, naming]")
-(translator-property-description 'CONTEXTNAMExtraVerticalExtent number-pair? "extra vertical extent, same format
-CONTEXTNAMEMinimumVerticalExtent [fixme, naming]")
-(translator-property-description 'Generic_property_list list? "description of the conversion.
-
-Defines names and types for generic properties. These are properties
-than can be plugged into the backend directly. See the init file
-@file{generic-property.scm} for details.  For internal use only,
-deprecated.
-")
-(translator-property-description 'aDueText string? "text for begin of a due")
-(translator-property-description 'associatedVoice string? "")
-(translator-property-description 'autoBeamSettings list? "
-Specifies when automatically generated beams should begin and end.  The elements have the format:
-
-@example
-
-   function shortest-duration-in-beam time-signature
-
-where
-
-    function = begin or end
-    shortest-duration-in-beam = numerator denominator; eg: 1 16
-    time-signature = numerator denominator, eg: 4 4
-
-unspecified or wildcard entries for duration or time-signature
-are given by * *
-
-The user can override beam begin or end time by pushing a wildcard entries
-'(begin * * * *) or '(end * * * *) resp., eg:
-
-    property Voice.autoBeamSettings push #'(end * * * *) = #(make-moment 1 4)
-
-The head of the list:
-    '(
-((end * * 3 2) . ,(make-moment 1 2))
-((end 1 16 3 2) . ,(make-moment 1 4))
-((end 1 32 3 2) . ,(make-moment 1 8))
-     ...
-    )
-
-@end example")
-(translator-property-description 'automaticPhrasing boolean? " If set,
-the @ref{Lyric_phrasing_engraver} will match note heads of context
-called Voice X to syllables from LyricsVoice called
-X-<something>. This feature is turned on by default. See the example
-file @file{lyrics-multi-stanza.ly}.
-
-")
-(translator-property-description 'automaticMelismata boolean? " If
-set, \addlyrics will assume that beams, slurs and ties signal
-melismata, and align lyrics accordingly.
-")
-(translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
-")
-(translator-property-description 'barCheckNoSynchronize boolean? "If set, don't reset measurePosition when finding a bbarcheck. This
-makes bar-checks for polyphonic music easier.")
-(translator-property-description 'barNonAuto boolean? " If set to true then bar lines will not be printed
-    automatically; they must be explicitly created with @code{bar}
-    keywords.  Unlike with the @code{cadenza} keyword, measures are
-    still counted.  Bar generation will resume according to that
-    count if this property is set to zero.
-")
-(translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
-(translator-property-description 'beamMelismaBusy boolean? "")
-(translator-property-description 'breakAlignOrder list? "Defines the order in which
-prefatory matter (clefs, key signatures) appears, eg. this puts the
-key signatures after the bar lines:
-
-@example
-       \\property Score.breakAlignOrder = #'(
-         Span_bar
-         Breathing_sign
-         Clef_item
-         Staff_bar
-         Key_item
-         Time_signature
-       )
-@end example
-")
-(translator-property-description 'centralCPosition number? "Place of the central C. Usually determined by looking at clefPosition and clefGlyph.")
-(translator-property-description 'chordInversion boolean? " Determines whether LilyPond should look for chord inversions when
-    translating from notes to chord names.  Set to 1 to find
-    inversions.  The default is 0 which does not look for
-    inversions.")
-(translator-property-description 'clefGlyph string? "Name of the symbol within the music font")
-(translator-property-description 'clefOctavation integer? "Add
-this much extra octavation. Values of 7 and -7 are common.")
-(translator-property-description 'clefPitches list? "an alist mapping GLYPHNAME to the position of the central C for that symbol")
-(translator-property-description 'clefPosition number? "Where should the center of the symbol go?")
-(translator-property-description 'combineParts boolean? "try to combine parts?")
-(translator-property-description 'connectArpeggios boolean? " If
-set, connect all arpeggios that are found.  In this way, you can make
-arpeggios that cross staffs.
-")
-(translator-property-description 'createKeyOnClefChange boolean? "")
-(translator-property-description 'currentBarNumber integer? "this is read to determine
- the number to put on the bar ")
-(translator-property-description 'currentBarNumber integer? "Contains the current barnumber. This property is incremented at
-every barline.
-")
-(translator-property-description 'currentCommandColumn ly-grob? "")
-(translator-property-description 'currentMusicalColumn ly-grob? "")
-(translator-property-description 'defaultBarType string? "Sets the default type of bar line.  Available bar types: [FIXME]
-")
-(translator-property-description 'drarnChords boolean? "")
-(translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
-(translator-property-description 'explicitKeySignatureVisibility procedure? "")
-(translator-property-description 'forgetAccidentals boolean? "do
-not set localKeySignature when a note alterated differently from
-localKeySignature is found.
-
-Causes accidentals to be printed at every note instead of
-remembered for the duration of a measure.
-")
-(translator-property-description 'graceAccidentalSpace number? "amount space to alot for an accidental")
-(translator-property-description 'graceAlignPosition dir? "put the grace note before or after the main note?")
-(translator-property-description 'instr markup? "see @code{instrument}")
-(translator-property-description 'instrument markup? " If @code{Instrument_name_engraver}
-@cindex Instrument_name_engraver
- is
-    added to the Staff translator, then the @code{instrument} property
-    is used to label the first line of the staff and the @code{instr}
-    property is used to label subsequent lines.  If the
-    @code{midiInstrument} property is not set, then @code{instrument}
-    is used to determine the instrument for MIDI output.")
-(translator-property-description 'keyAccidentalOrder list? "")
-(translator-property-description 'keyOctaviation boolean? "")
-(translator-property-description 'keySignature list? "")
-(translator-property-description 'keySignature list? "")
-(translator-property-description 'localKeySignature list? "the key signature at this point  in the measure")
-(translator-property-description 'measureLength moment? "  How long does one measure in the current time signature last?")
-(translator-property-description 'measurePosition moment? "
-  How much of the current measure (measured in whole notes) have we had?
-
-Set this  manually to  create  incomplete measures (anacrusis, upbeat), eg. at the start of 
-the music.
-")
-(translator-property-description 'melismaBusy boolean? "")
-(translator-property-description 'melismaEngraverBusy boolean? "")
-(translator-property-description 'midiInstrument string? "")
-(translator-property-description 'noAutoBeaming boolean? "  If set to true then beams are not generated automatically.
-")
-(translator-property-description 'noResetKey boolean? "Do not
-reset local key to the value of keySignature at the start of a measure,
-as determined by measurePosition.
-
-Do not reset the key at the start of a measure.  Accidentals will be
-printed only once and are in effect until overridden, possibly many
-measures later.
-")
-(translator-property-description 'oneBeat moment? "  How long does one beat in the current time signature last?")
-(translator-property-description 'phrasingPunctuation string? "")
-(translator-property-description 'rehearsalMark number-or-string? "")
-(translator-property-description 'repeatCommands list? "This property is read to find any command of the form (volta . X), where X is a string or #f")
-(translator-property-description 'repeatCommands list? "")
-(translator-property-description 'scriptDefinitions list? "
-Description of scripts to use.  (fixme) 
-")
-(translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
-    limited.  Accidentals will collide with scripts.
-    
-")
-(translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
-    limited.  Accidentals will collide with scripts.
-    
-")
-(translator-property-description 'skipBars boolean? " Set to true to skip the empty bars that are produced by
-    multimeasure notes and rests.  These bars will not appear on the
-    printed output.  If not set (the default)  multimeasure
-    notes and rests expand into their full length, printing the appropriate
-    number of empty bars so that synchronization with other voices is
-    preserved.
-
-@c my @vebatim patch would help...
-@example
-@@lilypond[fragment,verbatim,center]
-r1 r1*3 R1*3property Score.skipBars=1 r1*3 R1*3
-
-@@end lilypond
-@end example
-
-")
-(translator-property-description 'slurBeginAttachment symbol? "translates to the car of grob-property 'attachment.")
-(translator-property-description 'slurEndAttachment symbol? "translates to the cdr of grob-property 'attachment.")
-(translator-property-description 'slurMelismaBusy boolean? "")
-(translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set")
-(translator-property-description 'solo boolean? "set if solo is detected")
-(translator-property-description 'soloADue boolean? "set Solo/A due texts?")
-(translator-property-description 'soloIIText string? "text for begin of solo for voice ``two''")
-(translator-property-description 'soloText string? "text for begin of solo")
-(translator-property-description 'sparseTies boolean? "only create one tie per chord.")
-(translator-property-description 'split-interval number-pair? "always split into two voices for contained intervals")
-(translator-property-description 'squashedPosition integer? " Vertical position of
-squashing.")
-(translator-property-description 'staffsFound list? "list of all staff-symbols found.")
-(translator-property-description 'staffsFound list? "")
-(translator-property-description 'stanza string? "Stanza `number' to print at start of a verse")
-(translator-property-description 'startSustain string? "")
-(translator-property-description 'startUnaChorda string? "")
-(translator-property-description 'stemLeftBeamCount integer? "
-Specify the number of beams to draw on the left side of the next note.
-Overrides automatic beaming.  The value is only used once, and then it
-is erased.
-")
-(translator-property-description 'stemRightBeamCount integer? "idem, for the right side")
-(translator-property-description 'stopStartSustain string? "")
-(translator-property-description 'stopSustain string? "")
-(translator-property-description 'stopUnaChorda string? "")
-(translator-property-description 'stz string? "")
-(translator-property-description 'textNonEmpty boolean? " If set
-to true then text placed above or below the staff is not assumed to
-have zero width.  @code{fatText} and @code{emptyText} are predefined
-settings.
-")
-(translator-property-description 'tieMelismaBusy boolean? "")
-(translator-property-description 'tieMelismaBusy boolean? "Signal ties when automaticMelismata is set")
-(translator-property-description 'timeSignatureFraction number-pair? "
-pair of numbers,  signifying the time signature. For example #'(4 . 4) is a 4/4time signature.")
-(translator-property-description 'timing boolean? " Keep administration of measure length, position, bar number, etc?
-Switch off for cadenzas.")
-(translator-property-description 'tremoloFlags integer? "")
-(translator-property-description 'tupletInvisible boolean? "
-    If set to true, tuplet bracket creation is switched off
-entirely. This has the same effect as setting both
-@code{tupletNumberVisibility} and @code{tupletBracketVisibility} to
-@code{#f}, but as this does not even create any grobs, this setting
-uses less memory and time.")
-(translator-property-description 'tupletSpannerDuration moment? "
-Normally a tuplet bracket is as wide as the
-@code{ imes} expression that gave rise to it. By setting this
-property, you can make brackets last shorter. Example
-
-@example
-@@lilypond[verbatim,fragment]
-context Voice  imes 2/3 @{
-  property Voice.tupletSpannerDuration = #(make-moment 1 4)
-  [c8 c c] [c c c]
-@}
-@@end lilypond
-@end example
-")
-(translator-property-description 'unirhythm boolean? "set if unirhythm is detected")
-(translator-property-description 'unisilence boolean? "set if unisilence is detected")
-(translator-property-description 'unison boolean? "set if unisono is detected  ")
-(translator-property-description 'verticalAlignmentChildCallback
-procedure? "what callback to add to children of a vertical alignment.
-It determines what alignment procedure is used on the alignment
-itself.  ")
-(translator-property-description 'voltaSpannerDuration moment? "maximum duration of the volta bracket.
-
-    Set to a duration to control the size of the brackets printed by
-@code{\alternative}.  It specifies the number of whole notes duration
-to use for the brackets.  This can be used to shrink the length of
-brackets in the situation where one alternative is very large.  It may
-have odd effects if the specified duration is longer than the music
-given in an @code{\alternative}.
-")
-(translator-property-description 'weAreGraceContext boolean? "")
-(translator-property-description 'whichBar string? "This property is read to determine what type of barline to create.
-Example:
-@example
-\\property Staff.whichBar = \"|:\"
-@end example
-will create a start-repeat bar in this staff only 
-")
-(translator-property-description 'whichBar string? "")
-(translator-property-description 'whichBar string? "if not set
-explicitly (by property or bar), this is set according to values of
-defaultBarType, barAlways, barNonAuto and measurePosition.
- ")
diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm
new file mode 100644 (file)
index 0000000..a620aa8
--- /dev/null
@@ -0,0 +1,291 @@
+
+(define all-translation-properties '())
+
+(define (translator-property-description symbol type? description)
+  (set-object-property! symbol 'translation-type? type?)
+  (set-object-property! symbol 'translation-doc description)
+  (set! all-translation-properties (cons symbol all-translation-properties))
+  )
+
+
+
+(translator-property-description 'CONTEXTNAMEMinimumVerticalExtent number-pair? "minimum vertical extent, same format as CONTEXTNAMEVerticalExtent [fixme, naming]")
+(translator-property-description 'CONTEXTNAMEVerticalExtent number-pair? "hard coded vertical extent.
+The format is a pair of dimensions, for example, this sets the sizes
+of a staff to 10 (5+5) staffspaces high.
+
+@example
+property Staff.StaffVerticalExtent = #(-5.0 . 5.0)
+@end example
+
+ [fixme, naming]")
+(translator-property-description 'CONTEXTNAMExtraVerticalExtent number-pair? "extra vertical extent, same format
+CONTEXTNAMEMinimumVerticalExtent [fixme, naming]")
+(translator-property-description 'Generic_property_list list? "description of the conversion.
+
+Defines names and types for generic properties. These are properties
+than can be plugged into the backend directly. See the init file
+@file{generic-property.scm} for details.  For internal use only,
+deprecated.
+")
+(translator-property-description 'aDueText string? "text for begin of a due")
+(translator-property-description 'associatedVoice string? "")
+(translator-property-description 'autoBeamSettings list? "
+Specifies when automatically generated beams should begin and end.  The elements have the format:
+
+@example
+
+   function shortest-duration-in-beam time-signature
+
+where
+
+    function = begin or end
+    shortest-duration-in-beam = numerator denominator; eg: 1 16
+    time-signature = numerator denominator, eg: 4 4
+
+unspecified or wildcard entries for duration or time-signature
+are given by * *
+
+The user can override beam begin or end time by pushing a wildcard entries
+'(begin * * * *) or '(end * * * *) resp., eg:
+
+    property Voice.autoBeamSettings push #'(end * * * *) = #(make-moment 1 4)
+
+The head of the list:
+    '(
+((end * * 3 2) . ,(make-moment 1 2))
+((end 1 16 3 2) . ,(make-moment 1 4))
+((end 1 32 3 2) . ,(make-moment 1 8))
+     ...
+    )
+
+@end example")
+(translator-property-description 'automaticPhrasing boolean? " If set,
+the @ref{Lyric_phrasing_engraver} will match note heads of context
+called Voice X to syllables from LyricsVoice called
+X-<something>. This feature is turned on by default. See the example
+file @file{lyrics-multi-stanza.ly}.
+
+")
+(translator-property-description 'automaticMelismata boolean? " If
+set, \addlyrics will assume that beams, slurs and ties signal
+melismata, and align lyrics accordingly.
+")
+(translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
+")
+(translator-property-description 'barCheckNoSynchronize boolean? "If set, don't reset measurePosition when finding a bbarcheck. This
+makes bar-checks for polyphonic music easier.")
+(translator-property-description 'barNonAuto boolean? " If set to true then bar lines will not be printed
+    automatically; they must be explicitly created with @code{bar}
+    keywords.  Unlike with the @code{cadenza} keyword, measures are
+    still counted.  Bar generation will resume according to that
+    count if this property is set to zero.
+")
+(translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
+(translator-property-description 'beamMelismaBusy boolean? "")
+(translator-property-description 'breakAlignOrder list? "Defines the order in which
+prefatory matter (clefs, key signatures) appears, eg. this puts the
+key signatures after the bar lines:
+
+@example
+       \\property Score.breakAlignOrder = #'(
+         Span_bar
+         Breathing_sign
+         Clef_item
+         Staff_bar
+         Key_item
+         Time_signature
+       )
+@end example
+")
+(translator-property-description 'centralCPosition number? "Place of the central C. Usually determined by looking at clefPosition and clefGlyph.")
+(translator-property-description 'chordInversion boolean? " Determines whether LilyPond should look for chord inversions when
+    translating from notes to chord names.  Set to 1 to find
+    inversions.  The default is 0 which does not look for
+    inversions.")
+(translator-property-description 'clefGlyph string? "Name of the symbol within the music font")
+(translator-property-description 'clefOctavation integer? "Add
+this much extra octavation. Values of 7 and -7 are common.")
+(translator-property-description 'clefPitches list? "an alist mapping GLYPHNAME to the position of the central C for that symbol")
+(translator-property-description 'clefPosition number? "Where should the center of the symbol go?")
+(translator-property-description 'combineParts boolean? "try to combine parts?")
+(translator-property-description 'connectArpeggios boolean? " If
+set, connect all arpeggios that are found.  In this way, you can make
+arpeggios that cross staffs.
+")
+(translator-property-description 'createKeyOnClefChange boolean? "")
+(translator-property-description 'currentBarNumber integer? "this is read to determine
+ the number to put on the bar ")
+(translator-property-description 'currentBarNumber integer? "Contains the current barnumber. This property is incremented at
+every barline.
+")
+(translator-property-description 'currentCommandColumn ly-grob? "")
+(translator-property-description 'currentMusicalColumn ly-grob? "")
+(translator-property-description 'defaultBarType string? "Sets the default type of bar line.  Available bar types: [FIXME]
+")
+(translator-property-description 'drarnChords boolean? "")
+(translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
+(translator-property-description 'explicitKeySignatureVisibility procedure? "")
+(translator-property-description 'forgetAccidentals boolean? "do
+not set localKeySignature when a note alterated differently from
+localKeySignature is found.
+
+Causes accidentals to be printed at every note instead of
+remembered for the duration of a measure.
+")
+(translator-property-description 'graceAccidentalSpace number? "amount space to alot for an accidental")
+(translator-property-description 'graceAlignPosition dir? "put the grace note before or after the main note?")
+(translator-property-description 'instr markup? "see @code{instrument}")
+(translator-property-description 'instrument markup? " If @code{Instrument_name_engraver}
+@cindex Instrument_name_engraver
+ is
+    added to the Staff translator, then the @code{instrument} property
+    is used to label the first line of the staff and the @code{instr}
+    property is used to label subsequent lines.  If the
+    @code{midiInstrument} property is not set, then @code{instrument}
+    is used to determine the instrument for MIDI output.")
+(translator-property-description 'keyAccidentalOrder list? "")
+(translator-property-description 'keyOctaviation boolean? "")
+(translator-property-description 'keySignature list? "")
+(translator-property-description 'keySignature list? "")
+(translator-property-description 'localKeySignature list? "the key signature at this point  in the measure")
+(translator-property-description 'measureLength moment? "  How long does one measure in the current time signature last?")
+(translator-property-description 'measurePosition moment? "
+  How much of the current measure (measured in whole notes) have we had?
+
+Set this  manually to  create  incomplete measures (anacrusis, upbeat), eg. at the start of 
+the music.
+")
+(translator-property-description 'melismaBusy boolean? "")
+(translator-property-description 'melismaEngraverBusy boolean? "")
+(translator-property-description 'midiInstrument string? "")
+(translator-property-description 'noAutoBeaming boolean? "  If set to true then beams are not generated automatically.
+")
+(translator-property-description 'noResetKey boolean? "Do not
+reset local key to the value of keySignature at the start of a measure,
+as determined by measurePosition.
+
+Do not reset the key at the start of a measure.  Accidentals will be
+printed only once and are in effect until overridden, possibly many
+measures later.
+")
+(translator-property-description 'oneBeat moment? "  How long does one beat in the current time signature last?")
+(translator-property-description 'phrasingPunctuation string? "")
+(translator-property-description 'rehearsalMark number-or-string? "")
+(translator-property-description 'repeatCommands list? "This property is read to find any command of the form (volta . X), where X is a string or #f")
+(translator-property-description 'repeatCommands list? "")
+(translator-property-description 'scriptDefinitions list? "
+Description of scripts to use.  (fixme) 
+")
+(translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
+    limited.  Accidentals will collide with scripts.
+    
+")
+(translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
+    limited.  Accidentals will collide with scripts.
+    
+")
+(translator-property-description 'skipBars boolean? " Set to true to skip the empty bars that are produced by
+    multimeasure notes and rests.  These bars will not appear on the
+    printed output.  If not set (the default)  multimeasure
+    notes and rests expand into their full length, printing the appropriate
+    number of empty bars so that synchronization with other voices is
+    preserved.
+
+@c my @vebatim patch would help...
+@example
+@@lilypond[fragment,verbatim,center]
+r1 r1*3 R1*3property Score.skipBars=1 r1*3 R1*3
+
+@@end lilypond
+@end example
+
+")
+(translator-property-description 'slurBeginAttachment symbol? "translates to the car of grob-property 'attachment.")
+(translator-property-description 'slurEndAttachment symbol? "translates to the cdr of grob-property 'attachment.")
+(translator-property-description 'slurMelismaBusy boolean? "")
+(translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set")
+(translator-property-description 'solo boolean? "set if solo is detected")
+(translator-property-description 'soloADue boolean? "set Solo/A due texts?")
+(translator-property-description 'soloIIText string? "text for begin of solo for voice ``two''")
+(translator-property-description 'soloText string? "text for begin of solo")
+(translator-property-description 'sparseTies boolean? "only create one tie per chord.")
+(translator-property-description 'split-interval number-pair? "always split into two voices for contained intervals")
+(translator-property-description 'squashedPosition integer? " Vertical position of
+squashing.")
+(translator-property-description 'staffsFound list? "list of all staff-symbols found.")
+(translator-property-description 'staffsFound list? "")
+(translator-property-description 'stanza string? "Stanza `number' to print at start of a verse")
+(translator-property-description 'startSustain string? "")
+(translator-property-description 'startUnaChorda string? "")
+(translator-property-description 'stemLeftBeamCount integer? "
+Specify the number of beams to draw on the left side of the next note.
+Overrides automatic beaming.  The value is only used once, and then it
+is erased.
+")
+(translator-property-description 'stemRightBeamCount integer? "idem, for the right side")
+(translator-property-description 'stopStartSustain string? "")
+(translator-property-description 'stopSustain string? "")
+(translator-property-description 'stopUnaChorda string? "")
+(translator-property-description 'stz string? "")
+(translator-property-description 'textNonEmpty boolean? " If set
+to true then text placed above or below the staff is not assumed to
+have zero width.  @code{fatText} and @code{emptyText} are predefined
+settings.
+")
+(translator-property-description 'tieMelismaBusy boolean? "")
+(translator-property-description 'tieMelismaBusy boolean? "Signal ties when automaticMelismata is set")
+(translator-property-description 'timeSignatureFraction number-pair? "
+pair of numbers,  signifying the time signature. For example #'(4 . 4) is a 4/4time signature.")
+(translator-property-description 'timing boolean? " Keep administration of measure length, position, bar number, etc?
+Switch off for cadenzas.")
+(translator-property-description 'tremoloFlags integer? "")
+(translator-property-description 'tupletInvisible boolean? "
+    If set to true, tuplet bracket creation is switched off
+entirely. This has the same effect as setting both
+@code{tupletNumberVisibility} and @code{tupletBracketVisibility} to
+@code{#f}, but as this does not even create any grobs, this setting
+uses less memory and time.")
+(translator-property-description 'tupletSpannerDuration moment? "
+Normally a tuplet bracket is as wide as the
+@code{ imes} expression that gave rise to it. By setting this
+property, you can make brackets last shorter. Example
+
+@example
+@@lilypond[verbatim,fragment]
+context Voice  imes 2/3 @{
+  property Voice.tupletSpannerDuration = #(make-moment 1 4)
+  [c8 c c] [c c c]
+@}
+@@end lilypond
+@end example
+")
+(translator-property-description 'unirhythm boolean? "set if unirhythm is detected")
+(translator-property-description 'unisilence boolean? "set if unisilence is detected")
+(translator-property-description 'unison boolean? "set if unisono is detected  ")
+(translator-property-description 'verticalAlignmentChildCallback
+procedure? "what callback to add to children of a vertical alignment.
+It determines what alignment procedure is used on the alignment
+itself.  ")
+(translator-property-description 'voltaSpannerDuration moment? "maximum duration of the volta bracket.
+
+    Set to a duration to control the size of the brackets printed by
+@code{\alternative}.  It specifies the number of whole notes duration
+to use for the brackets.  This can be used to shrink the length of
+brackets in the situation where one alternative is very large.  It may
+have odd effects if the specified duration is longer than the music
+given in an @code{\alternative}.
+")
+(translator-property-description 'weAreGraceContext boolean? "")
+(translator-property-description 'whichBar string? "This property is read to determine what type of barline to create.
+Example:
+@example
+\\property Staff.whichBar = \"|:\"
+@end example
+will create a start-repeat bar in this staff only 
+")
+(translator-property-description 'whichBar string? "")
+(translator-property-description 'whichBar string? "if not set
+explicitly (by property or bar), this is set according to values of
+defaultBarType, barAlways, barNonAuto and measurePosition.
+ ")