]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.5.13 release/1.5.13
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 23 Sep 2001 23:04:55 +0000 (01:04 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 23 Sep 2001 23:04:55 +0000 (01:04 +0200)
===========

* half-baken --with-kpathsea configuration fix.

* ly2dvi: add `.' to TEXINPUTS to catch broken TEXINPUTS settings.

* guile-1.4 compile fix.

1.5.12.h

155 files changed:
CHANGES
Documentation/user/GNUmakefile
Documentation/user/refman.itely
VERSION
config.hh.in
configure
configure.in
lily/a2-engraver.cc
lily/arpeggio-engraver.cc
lily/auto-beam-engraver.cc
lily/axis-group-engraver.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/beam-engraver.cc
lily/break-align-engraver.cc
lily/break-align-item.cc
lily/breathing-sign-engraver.cc
lily/chord-name-engraver.cc
lily/chord-tremolo-engraver.cc
lily/chord.cc
lily/clef-engraver.cc
lily/collision-engraver.cc
lily/collision.cc
lily/command-request.cc
lily/custos-engraver.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/engraver-group-engraver.cc
lily/engraver.cc
lily/extender-engraver.cc
lily/figured-bass-engraver.cc
lily/font-interface.cc
lily/font-metric.cc
lily/font-size-engraver.cc
lily/grob-info.cc
lily/grob.cc
lily/hyphen-engraver.cc
lily/include/dot-column.hh
lily/include/engraver-group-engraver.hh
lily/include/engraver.hh
lily/include/grob-info.hh
lily/include/lily-guile.hh
lily/include/line-group-group-engraver.hh
lily/include/lyric-phrasing-engraver.hh
lily/include/performer-group-performer.hh
lily/include/score-engraver.hh
lily/include/score-performer.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/include/type-swallow-translator.hh
lily/instrument-name-engraver.cc
lily/key-engraver.cc
lily/key-item.cc
lily/key-performer.cc
lily/lily-guile.cc
lily/line-group-group-engraver.cc
lily/line-of-score.cc
lily/local-key-engraver.cc
lily/local-key-item.cc
lily/lookup.cc
lily/lyric-engraver.cc
lily/lyric-performer.cc
lily/lyric-phrasing-engraver.cc
lily/main.cc
lily/mark-engraver.cc
lily/melisma-engraver.cc
lily/molecule.cc
lily/multi-measure-rest-engraver.cc
lily/music.cc
lily/my-lily-lexer.cc
lily/my-lily-parser.cc
lily/new-spacing-spanner.cc
lily/note-head-line-engraver.cc
lily/note-heads-engraver.cc
lily/note-name-engraver.cc
lily/note-performer.cc
lily/output-property-engraver.cc
lily/paper-def.cc
lily/paper-outputter.cc
lily/parser.yy
lily/percent-repeat-engraver.cc
lily/performer-group-performer.cc
lily/phrasing-slur-engraver.cc
lily/piano-pedal-engraver.cc
lily/piano-pedal-performer.cc
lily/pitch-squash-engraver.cc
lily/porrectus-engraver.cc
lily/property-engraver.cc
lily/regular-spacing-engraver.cc
lily/repeat-acknowledge-engraver.cc
lily/rest-collision-engraver.cc
lily/rest-engraver.cc
lily/rhythmic-column-engraver.cc
lily/score-engraver.cc
lily/score-performer.cc
lily/score.cc
lily/script-column-engraver.cc
lily/script-engraver.cc
lily/separating-line-group-engraver.cc
lily/simple-spacer.cc
lily/slur-engraver.cc
lily/slur.cc
lily/spacing-engraver.cc
lily/span-arpeggio-engraver.cc
lily/span-bar-engraver.cc
lily/span-dynamic-performer.cc
lily/staff-performer.cc
lily/staff-symbol-engraver.cc
lily/stanza-number-engraver.cc
lily/stem-engraver.cc
lily/swallow-engraver.cc
lily/swallow-perf.cc
lily/system-start-delimiter-engraver.cc
lily/tempo-performer.cc
lily/text-engraver.cc
lily/text-item.cc
lily/text-spanner-engraver.cc
lily/thread-devnull-engraver.cc
lily/tie-engraver.cc
lily/tie-performer.cc
lily/time-signature-engraver.cc
lily/time-signature-performer.cc
lily/timing-engraver.cc
lily/timing-translator.cc
lily/translator-ctors.cc
lily/translator-def.cc
lily/translator-group.cc
lily/translator.cc
lily/tuplet-engraver.cc
lily/type-swallow-translator.cc
lily/vertical-align-engraver.cc
lily/voice-devnull-engraver.cc
lily/volta-engraver.cc
ly/engraver-init.ly
make/out/lilypond.lsm
make/out/lilypond.mandrake.spec
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
modules/midi.c
po/da.po [new file with mode: 0644]
scm/auto-beam.scm
scm/backend-documentation-lib.scm
scm/context-description.scm [new file with mode: 0644]
scm/documentation-lib.scm
scm/engraver-documentation-lib.scm
scm/generate-documentation.scm
scm/grob-description.scm
scm/interface-description.scm
scm/lily.scm
scm/ps.scm
scm/translator-description.scm
scm/translator-property-description.scm
scripts/ly2dvi.py

diff --git a/CHANGES b/CHANGES
index fe629cb5808df33d412c4f8f575de03f649ad313..d6cbd881b6ded7d3abad53dc5d7bce6e0407739f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,16 @@
 
 * guile-1.4 compile fix.
 
+1.5.12.hwn1
+===========
+
+* Move engraver descriptions into the C code.  They are accessible
+from Scheme. Grand rehacking to make stuff work again.
+
+* Precompute which engravers are eligible to acknowledge a certain
+type of grob. Speedup: approx 10 % on interpretation phase.
+
+
 1.5.12
 ======
 
index 2c30d360d43c8968443bef5b17f14e80b574b871..85afa59a41dfe846af22e83a578b48d0d08ac3c5 100644 (file)
@@ -119,7 +119,7 @@ ifneq ($(CROSS),yes)
 # however, this triggers compilation during install, which  is a bad thing (tm).
 
 $(outdir)/lilypond-internals.nexi $(outdir)/lilypond-internals.texi: $(depth)/$(builddir)/lily/$(outconfbase)/lilypond
-       cd $(outdir) && ../$(depth)/$(builddir)/lily/$(outconfbase)/lilypond ../$(src-depth)/ly/generate-documentation
+       cd $(outdir) && GUILE_LOAD_PATH=$(topdir)/scm/ ../$(depth)/$(builddir)/lily/$(outconfbase)/lilypond ../$(src-depth)/ly/generate-documentation
        -ln $(outdir)/lilypond-internals.texi $(outdir)/lilypond-internals.nexi
 
 
index 6b9ac9828a7bc23a5232b106dd11b286b1bff370..10a69dcbfc36c8349381f880b79a0df210d6703b 100644 (file)
@@ -1346,10 +1346,6 @@ The syntax is as follows.
   \grace @var{musicexpr}
 @end example
 
-When grace music is interpreted, a score-within-a-score is set up:
-@var{musicexpr} has its own time bookkeeping, and you could (for
-example) have a separate time signature within the grace notes.  While in
-this score-within-a-score, you can create notes, beams, slurs, etc.
 Unbeamed eighth notes and shorter by default have a slash through the
 stem.
 
@@ -1364,17 +1360,14 @@ stem.
 }
 @end lilypond
 
-
 A grace note expression has duration 0; the next real note is assumed to
 be the main note. If you want the note to appear after the main note,
 set @code{Voice.graceAlignPosition} to @code{1}.
 
 @refbugs
 
-At present, slurs or ties from the grace notes to the following notes
-are not supported. Also, nesting @code{\grace} notes is not
-supported. The following may cause run-time errors:
-@example
+Nesting @code{\grace} notes is not supported. The following may cause
+run-time errors: @example
   @code{\grace @{ \grace c32 c16 @} c4}
 @end example
 Since the meaning of such a construct is unclear, we don't consider this
@@ -1383,10 +1376,6 @@ syntactically valid, but makes no sense and may cause runtime errors.
 Ending a staff or score with grace notes may also generate a run-time
 error, since there will be no main note to attach the grace notes to.
 
-The present implementation of grace notes is not robust and generally
-kludgey. We expect it to change after LilyPond 1.4. Syntax changes might
-also be implemented.
-
 @menu
 * Glissando ::                  
 * Dynamics::                    
diff --git a/VERSION b/VERSION
index c00e6694d3eed370b80e76d73d2d699636bca993..9872a2184a7a2d4f2d9fef6425725eb18540f98c 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
-PATCH_LEVEL=12
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=13
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 038a46c6617f98e7011a595329b63858bdb39deb..aa81bd7190c0e872752491625027ff7323e24a5c 100644 (file)
@@ -41,6 +41,9 @@
 /* define if you have kpse_find_tfm */
 #define HAVE_KPSE_FIND_TFM 0
 
+/* define if you have python2.0/Python.h header */
+#define HAVE_PYTHON2_0_PYTHON_H 0
+
 /* define if you have python2/Python.h header */
 #define HAVE_PYTHON2_PYTHON_H 0
 
index 93015c4e63d71eba8e4e1b891b4d398e6736fffd..3aab916d8743dcbdba20d8d477f87aa59992fa93 100755 (executable)
--- a/configure
+++ b/configure
@@ -2943,29 +2943,32 @@ EOF
 
 
     kpathsea_b=yes
+    #FIXME --with-xxx is meant for specifying a PATH too,
+    # so this should read: --enable-kpathsea,
+    # or --with-kpathsea-include=PATH --with-kpathsea-lib=PATH
     # Check whether --with-kpathsea or --without-kpathsea was given.
 if test "${with_kpathsea+set}" = set; then
   withval="$with_kpathsea"
-  kpathsea_b=$enableval
+  kpathsea_b=$with_kpathsea
 fi
 
 
-    if test "$kpathsea_b" = "yes"; then        
+    if test "$kpathsea_b" != "no"; then        
        for ac_hdr in kpathsea/kpathsea.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2959: checking for $ac_hdr" >&5
+echo "configure:2962: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2964 "configure"
+#line 2967 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2969: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2992,7 +2995,7 @@ fi
 done
 
        echo $ac_n "checking for kpse_find_file in -lkpathsea""... $ac_c" 1>&6
-echo "configure:2996: checking for kpse_find_file in -lkpathsea" >&5
+echo "configure:2999: checking for kpse_find_file in -lkpathsea" >&5
 ac_lib_var=`echo kpathsea'_'kpse_find_file | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3000,7 +3003,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lkpathsea  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3004 "configure"
+#line 3007 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -3014,7 +3017,7 @@ int main() {
 kpse_find_file()
 ; return 0; }
 EOF
-if { (eval echo configure:3018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3044,12 +3047,12 @@ fi
        for ac_func in kpse_find_file
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3048: checking for $ac_func" >&5
+echo "configure:3051: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3053 "configure"
+#line 3056 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3075,7 +3078,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3102,8 +3105,8 @@ done
 
     fi
     echo $ac_n "checking whether to use kpathsea""... $ac_c" 1>&6
-echo "configure:3106: checking whether to use kpathsea" >&5
-    if test "$kpathsea_b" = yes; then
+echo "configure:3109: checking whether to use kpathsea" >&5
+    if test "$kpathsea_b" != no; then
         echo "$ac_t""yes" 1>&6
        KPATHSEA=1
     else
@@ -3123,7 +3126,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3127: checking for $ac_word" >&5
+echo "configure:3130: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BIBTEX2HTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3164,7 +3167,7 @@ test -n "$BIBTEX2HTML" || BIBTEX2HTML="error"
 
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3168: checking for 8-bit clean memcmp" >&5
+echo "configure:3171: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3172,7 +3175,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3176 "configure"
+#line 3179 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int) throw();
@@ -3185,7 +3188,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -3203,12 +3206,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:3207: checking for vprintf" >&5
+echo "configure:3210: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3212 "configure"
+#line 3215 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -3234,7 +3237,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -3258,12 +3261,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3262: checking for _doprnt" >&5
+echo "configure:3265: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3267 "configure"
+#line 3270 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -3289,7 +3292,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -3316,12 +3319,12 @@ fi
 for ac_func in memmem snprintf vsnprintf gettext isinf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3320: checking for $ac_func" >&5
+echo "configure:3323: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3325 "configure"
+#line 3328 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3347,7 +3350,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3387,7 +3390,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3391: checking for $ac_word" >&5
+echo "configure:3394: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3419,7 +3422,7 @@ test -n "$MAKEINFO" || MAKEINFO="error"
 
     if test "$MAKEINFO" != "error"; then
        echo $ac_n "checking whether makeinfo can split html by @node""... $ac_c" 1>&6
-echo "configure:3423: checking whether makeinfo can split html by @node" >&5
+echo "configure:3426: checking whether makeinfo can split html by @node" >&5
        mkdir -p out
        makeinfo --html --output=out/split <<EOF
 \input texinfo
@@ -3447,7 +3450,7 @@ EOF
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3451: checking for $ac_word" >&5
+echo "configure:3454: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3481,21 +3484,21 @@ else
 fi
 
 
-for ac_hdr in python2/Python.h python/Python.h python1.5/Python.h Python.h
+for ac_hdr in python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3489: checking for $ac_hdr" >&5
+echo "configure:3492: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3494 "configure"
+#line 3497 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3499: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
index 636d386f3500e59c182cae414be541d70de56e85..e0fa5a2f5d1bd01e73f2d62955d321c053fa4055 100644 (file)
@@ -49,7 +49,7 @@ AC_STEPMAKE_MAKEINFO
 
 AC_PATH_PROG(PERL, perl, error)
 
-AC_HAVE_HEADERS(python2/Python.h python/Python.h python1.5/Python.h Python.h)
+AC_HAVE_HEADERS(python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h)
 
 
 AC_STEPMAKE_END
index 09d10282d7bad4ec99aa9d40c94b9edfd9145e7c..6a08f56b79d35065854b1b0cfe11d61d8f78b275 100644 (file)
@@ -18,9 +18,8 @@
 
 class A2_engraver : public Engraver
 {
-public:
-  A2_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(A2_engraver);
+
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
@@ -30,7 +29,7 @@ private:
   enum State { SOLO, SPLIT_INTERVAL, UNIRHYTHM, UNISILENCE, UNISON } state_;
 };
 
-ADD_THIS_TRANSLATOR (A2_engraver);
+
 
 A2_engraver::A2_engraver ()
 {
@@ -94,17 +93,17 @@ A2_engraver::acknowledge_grob (Grob_info i)
   
   if (text_p_)
     {
-      if (Note_head::has_interface (i.elem_l_))
+      if (Note_head::has_interface (i.grob_l_))
        {
          Grob*t = text_p_;
-         Side_position_interface::add_support (t, i.elem_l_);
+         Side_position_interface::add_support (t, i.grob_l_);
          if (Side_position_interface::get_axis (t) == X_AXIS
              && !t->parent_l (Y_AXIS))
-           t->set_parent (i.elem_l_, Y_AXIS);
+           t->set_parent (i.grob_l_, Y_AXIS);
        }
-      if (Stem::has_interface (i.elem_l_))
+      if (Stem::has_interface (i.grob_l_))
        {
-         Side_position_interface::add_support (text_p_, i.elem_l_);
+         Side_position_interface::add_support (text_p_, i.grob_l_);
        }
     }
          
@@ -139,10 +138,10 @@ A2_engraver::acknowledge_grob (Grob_info i)
   /* Must only set direction for VoiceCombines, not for StaffCombines:
      we can't detect that here, so, ugh, yet another property */
   if (!to_boolean (get_property ("noDirection"))
-      && (Stem::has_interface (i.elem_l_)
-         || Slur::has_interface (i.elem_l_)
-         // || Tie::has_interface (i.elem_l_)
-         || i.elem_l_->has_interface (ly_symbol2scm ("tie-interface"))
+      && (Stem::has_interface (i.grob_l_)
+         || Slur::has_interface (i.grob_l_)
+         // || Tie::has_interface (i.grob_l_)
+         || i.grob_l_->has_interface (ly_symbol2scm ("tie-interface"))
          
          /*
            Usually, dynamics are removed by *_devnull_engravers for the
@@ -151,9 +150,9 @@ A2_engraver::acknowledge_grob (Grob_info i)
            hand, colliding of scripts may be worse.
            So, we don't set directions for these when we're playing solo.
          */
-         || (i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))
+         || (i.grob_l_->has_interface (ly_symbol2scm ("dynamic-interface"))
              && state_ != SOLO)
-         || (i.elem_l_->has_interface (ly_symbol2scm ("text-interface"))
+         || (i.grob_l_->has_interface (ly_symbol2scm ("text-interface"))
              && state_ != SOLO)
          ))
     {
@@ -170,18 +169,18 @@ A2_engraver::acknowledge_grob (Grob_info i)
          /*
            Blunt axe method: every grob gets a propertysetting.
           */
-         i.elem_l_->set_grob_property ("direction", gh_int2scm (d));
+         i.grob_l_->set_grob_property ("direction", gh_int2scm (d));
        }
     }
 
   /*
     todo: should we have separate state variable for being "rest while
     other has solo?"  */
-  if ( Multi_measure_rest::has_interface (i.elem_l_) && d )
+  if ( Multi_measure_rest::has_interface (i.grob_l_) && d )
     if (state_ == UNIRHYTHM
        && unisilence != SCM_BOOL_T)
     {
-      i.elem_l_->set_grob_property ("staff-position", gh_int2scm (d * 6));
+      i.grob_l_->set_grob_property ("staff-position", gh_int2scm (d * 6));
     }
 }
 
@@ -196,3 +195,18 @@ A2_engraver::stop_translation_timestep ()
     }
 }
 
+ENTER_DESCRIPTION(A2_engraver,
+/* descr */       "Part combine engraver for orchestral scores.
+
+The markings @emph{a2}, @emph{Solo} and @emph{Solo II}, are
+created by this engraver.  It also acts upon instructions of the part
+combiner.  Another thing that the this engraver, is forcing of stem,
+slur and tie directions, always when both threads are not identical;
+up for the musicexpr called @code{one}, down for the musicexpr called
+@code{two}.
+
+",
+/* creats*/       "TextScript",
+/* acks  */       "grob-interface tie-interface note-head-interface ",
+/* reads */       "combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm",
+/* write */       "");
index b69aeb35bc85f7418821c4add7ecd6c8045c26bd..8a5513c3e6229a2c0757c7a4d23ba2b65e848d2a 100644 (file)
@@ -20,9 +20,7 @@
 class Arpeggio_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Arpeggio_engraver ();
-
+  TRANSLATOR_DECLARATIONS(Arpeggio_engraver); 
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
@@ -61,18 +59,18 @@ Arpeggio_engraver::acknowledge_grob (Grob_info info)
 {
   if (arpeggio_req_)
     {
-      if (Stem::has_interface (info.elem_l_))
+      if (Stem::has_interface (info.grob_l_))
        {
-         stems_.push (info.elem_l_);
+         stems_.push (info.grob_l_);
        }
       
       /*
        We can't catch local key items (accidentals) from Voice context,
        see Local_key_engraver
       */
-      else if (Rhythmic_head::has_interface (info.elem_l_))
+      else if (Rhythmic_head::has_interface (info.grob_l_))
        {
-         supports_.push (info.elem_l_);
+         supports_.push (info.grob_l_);
        }
     }
 }
@@ -111,5 +109,11 @@ Arpeggio_engraver::stop_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Arpeggio_engraver);
 
+
+ENTER_DESCRIPTION(Arpeggio_engraver,
+/* descr */       "Generate an Arpeggio from a Arpeggio_req",
+/* creats*/       "Arpeggio",
+/* acks  */       "stem-interface rhythmic-head-interface",
+/* reads */       "",
+/* write */       "");
index cc3db6529e8f8f1465943bc6b266bcfd3def6d23..97451c6a4ef6da5811bddb7d4c4f211f1636232a 100644 (file)
  */
 class Auto_beam_engraver : public Engraver
 {
-public:
-  Auto_beam_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
-
+  TRANSLATOR_DECLARATIONS(Auto_beam_engraver);
 protected:
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
@@ -70,7 +67,7 @@ private:
   Beaming_info_list*finished_grouping_p_;
 };
 
-ADD_THIS_TRANSLATOR (Auto_beam_engraver);
+
 
 Auto_beam_engraver::Auto_beam_engraver ()
 {
@@ -324,7 +321,6 @@ Auto_beam_engraver::start_translation_timestep ()
 void
 Auto_beam_engraver::stop_translation_timestep ()
 {
-  
   typeset_beam ();
 }
 
@@ -344,23 +340,23 @@ Auto_beam_engraver::acknowledge_grob (Grob_info info)
 {
   if (stem_l_arr_p_)
     {
-      if (Beam::has_interface (info.elem_l_))
+      if (Beam::has_interface (info.grob_l_))
        {
          end_beam ();
        }
-      else if (Bar::has_interface (info.elem_l_))
+      else if (Bar::has_interface (info.grob_l_))
        {
          end_beam ();
        }
-      else if (Rest::has_interface (info.elem_l_))
+      else if (Rest::has_interface (info.grob_l_))
        {
          end_beam ();
        }
     }
   
-  if (Stem::has_interface (info.elem_l_))
+  if (Stem::has_interface (info.grob_l_))
     {
-      Item* stem_l = dynamic_cast<Item *> (info.elem_l_);
+      Item* stem_l = dynamic_cast<Item *> (info.grob_l_);
                                       
       Rhythmic_req *rhythmic_req = dynamic_cast <Rhythmic_req *> (info.req_l_);
       if (!rhythmic_req)
@@ -474,3 +470,14 @@ Auto_beam_engraver::create_grobs ()
         auto-beam-engraver.cc:459: warning: value computed is not used (gcc: 2.96) */
   count_i_ = count_i_ + 1;
 }
+ENTER_DESCRIPTION(Auto_beam_engraver,
+/* descr */       "Generate beams based on measure characteristics and observed
+Stems.  Uses beatLength, measureLength and measurePosition to decide
+when to start and stop a beam.  Overriding beaming is done through
+@ref{Stem_engraver} properties stemLeftBeamCount and
+stemRightBeamCount.
+",
+/* creats*/       "Beam",
+/* acks  */       "stem-interface rest-interface beam-interface bar-line-interface",
+/* reads */       "noAutoBeaming autoBeamSettings",
+/* write */       "");
index 3c1679614737daee928ef2d242583073dd4b730e..413f1b678919274213ecc58a36a9007c814e839a 100644 (file)
@@ -28,11 +28,11 @@ protected:
   virtual Spanner* get_spanner_p () const;
   virtual void add_element (Grob*) ;
 public:  
-  VIRTUAL_COPY_CONS (Translator);
-  Axis_group_engraver ();
+TRANSLATOR_DECLARATIONS(
+  Axis_group_engraver );
 };
 
-ADD_THIS_TRANSLATOR (Axis_group_engraver);
+
 
 Axis_group_engraver::Axis_group_engraver ()
 {
@@ -94,7 +94,7 @@ Axis_group_engraver::finalize ()
 void
 Axis_group_engraver::acknowledge_grob (Grob_info i)
 {
-  elts_.push (i.elem_l_);
+  elts_.push (i.grob_l_);
 }
 
 /*
@@ -135,7 +135,7 @@ protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void add_element (Grob *e);
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Hara_kiri_engraver);
 };
 
 void
@@ -157,10 +157,27 @@ void
 Hara_kiri_engraver::acknowledge_grob (Grob_info i)
 {
   Axis_group_engraver::acknowledge_grob (i);
-  if (Rhythmic_head::has_interface (i.elem_l_)
-      || i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
+  if (Rhythmic_head::has_interface (i.grob_l_)
+      || i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
     {
-      Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.elem_l_);
+      Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.grob_l_);
     }
 }
-ADD_THIS_TRANSLATOR (Hara_kiri_engraver);
+
+Hara_kiri_engraver::Hara_kiri_engraver(){}
+
+ENTER_DESCRIPTION(Hara_kiri_engraver,
+/* descr */       "Like Axis_group_engraver, but make a hara kiri spanner, and add
+interesting items (ie. note heads, lyric syllables and normal rests)
+",
+/* creats*/       "HaraKiriVerticalGroup",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
+
+ENTER_DESCRIPTION(Axis_group_engraver,
+/* descr */       "Group all objects created in this context in a VerticalAxisGroup spanner.",
+/* creats*/       "VerticalAxisGroup",
+/* acks  */       "grob-interface",
+/* reads */       "VerticalExtent MinimumVerticalExtent ExtraVerticalExtent",
+/* write */       "");
index f298b9f6676eae02e5160cd5c47c6d0465d54301..a070e4f411ac161a2fb7b99c8b4bb9541217fb86 100644 (file)
@@ -22,8 +22,7 @@
 class Bar_engraver : public Engraver
 {
 public:
-  Bar_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(  Bar_engraver );
   void request_bar (String type_str);
     
 protected:
@@ -111,4 +110,11 @@ Bar_engraver::stop_translation_timestep ()
     typeset_bar ();
 }
 
-ADD_THIS_TRANSLATOR (Bar_engraver);
+
+ENTER_DESCRIPTION(Bar_engraver,
+/* descr */       "Create barlines. This engraver is controlled through the
+@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point",
+/* creats*/       "BarLine",
+/* acks  */       "",
+/* reads */       "whichBar stavesFound",
+/* write */       "");
index 84646867d907f08167b1eb61a22bd1afe6171c9c..d9951589249a3d00678a0744b216d2ab7178f501 100644 (file)
@@ -29,10 +29,7 @@ protected:
   virtual void initialize ();
   virtual void create_grobs ();
   void create_items ();
-
-public:
-  VIRTUAL_COPY_CONS (Translator);
-  Bar_number_engraver ();
+  TRANSLATOR_DECLARATIONS(  Bar_number_engraver );
 };
 
 
@@ -59,7 +56,7 @@ Bar_number_engraver::create_grobs ()
     }
 }
 
-ADD_THIS_TRANSLATOR (Bar_number_engraver);
+
 
 Bar_number_engraver::Bar_number_engraver ()
 {
@@ -80,11 +77,11 @@ Bar_number_engraver::initialize ()
 void
 Bar_number_engraver::acknowledge_grob (Grob_info inf)
 {
-  Grob * s = inf.elem_l_;
+  Grob * s = inf.grob_l_;
   if (Staff_symbol::has_interface (s))
     {
       SCM sts = get_property ("stavesFound");
-      SCM thisstaff = inf.elem_l_->self_scm ();
+      SCM thisstaff = inf.grob_l_->self_scm ();
       if (scm_memq (thisstaff, sts) == SCM_BOOL_F)
        daddy_trans_l_->set_property ("stavesFound", gh_cons (thisstaff, sts));
     }
@@ -124,3 +121,10 @@ Bar_number_engraver::create_items ()
   announce_grob (text_p_, 0);
 }
 
+ENTER_DESCRIPTION(Bar_number_engraver,
+/* descr */       "A bar number is created whenever measurePosition is zero. It is
+put on top of all staves, and appears only at  left side of the staff.",
+/* creats*/       "BarNumber",
+/* acks  */       "staff-symbol-interface break-aligned-interface",
+/* reads */       "currentBarNumber",
+/* write */       "");
index 122a7ecd3c28369f0c11b928870709d74f9827ea..a927a75f05638d515bf6a99d0f297a295aa8914f 100644 (file)
@@ -51,8 +51,7 @@ protected:
   virtual void process_music ();
 
 public:
-  Beam_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(  Beam_engraver );
 };
 
 
@@ -234,18 +233,18 @@ Beam_engraver::acknowledge_grob (Grob_info info)
 {
   if (beam_p_)
     {
-      if (Rest::has_interface (info.elem_l_))
+      if (Rest::has_interface (info.grob_l_))
        {
-         info.elem_l_->add_offset_callback (Beam::rest_collision_callback_proc, Y_AXIS);
+         info.grob_l_->add_offset_callback (Beam::rest_collision_callback_proc, Y_AXIS);
        }
-      else if (Stem::has_interface (info.elem_l_))
+      else if (Stem::has_interface (info.grob_l_))
        {
          Moment now = now_mom();
 
          if(bool (now.grace_part_ ) != bool (beam_start_mom_.grace_part_))
            return ;
          
-         Item *stem_l = dynamic_cast<Item*> (info.elem_l_);
+         Item *stem_l = dynamic_cast<Item*> (info.grob_l_);
          if (Stem::beam_l (stem_l))
            return;
 
@@ -285,5 +284,12 @@ Beam_engraver::acknowledge_grob (Grob_info info)
 
 
 
-ADD_THIS_TRANSLATOR (Beam_engraver);
 
+
+ENTER_DESCRIPTION(Beam_engraver,
+/* descr */       "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
+printed with flags instead of beams.",
+/* creats*/       "Beam",
+/* acks  */       "stem-interface rest-interface",
+/* reads */       "beamMelismaBusy",
+/* write */       "");
index 21551ad5b29db6b28a3c2dc813c8a251767f9e05..a463ba7bf05063b537d0d27823e3366662d36be3 100644 (file)
@@ -25,13 +25,12 @@ protected:
   void add_column (SCM);
   
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Break_align_engraver ();
+  TRANSLATOR_DECLARATIONS(Break_align_engraver);
 };
 
 
 
-ADD_THIS_TRANSLATOR (Break_align_engraver);
+
 
 void
 Break_align_engraver::add_column (SCM smob)
@@ -87,7 +86,7 @@ Break_align_engraver::Break_align_engraver ()
 void
 Break_align_engraver::acknowledge_grob (Grob_info inf)
 {
-  if (Item * item_l = dynamic_cast <Item *> (inf.elem_l_))
+  if (Item * item_l = dynamic_cast <Item *> (inf.grob_l_))
     {
       if (item_l->empty_b (X_AXIS) || item_l->parent_l (X_AXIS))
        return;
@@ -155,3 +154,9 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
       Axis_group_interface::add_element (group, item_l);
     }
 }
+ENTER_DESCRIPTION(Break_align_engraver,
+/* descr */       "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder",
+/* creats*/       "BreakAlignment BreakAlignGroup LeftEdge",
+/* acks  */       "grob-interface", // break-aligned-interface ?
+/* reads */       "breakAlignOrder",
+/* write */       "");
index 709687ce286a59c94a9ed9a2151698ffef14cc91..b47d5b0358e7e3a8c760ec21bbe647ffee2956d1 100644 (file)
@@ -140,7 +140,7 @@ Break_align_interface::do_alignment (Grob *me)
        }
 
       SCM symbol = ly_car (extra_space);
-      Real spc = gh_scm2double (gh_cadr (extra_space));
+      Real spc = gh_scm2double (ly_cadr (extra_space));
 
       dists.push (spc);
       symbol_list = gh_cons (symbol, symbol_list);
index 4207c86683825d74090f40ec37d6fe7db1962cf3..a8d47464aeb86bb5be7a0dfb2f782a5a74a70444 100644 (file)
@@ -24,8 +24,7 @@ TODO:
 
 class Breathing_sign_engraver : public Engraver {
 public:
-  Breathing_sign_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Breathing_sign_engraver);
   
 protected:
   virtual bool try_music (Music *req_l);
@@ -87,4 +86,10 @@ Breathing_sign_engraver::start_translation_timestep ()
   breathing_sign_req_l_ = 0;
 }
 
-ADD_THIS_TRANSLATOR (Breathing_sign_engraver);
+
+ENTER_DESCRIPTION(Breathing_sign_engraver,
+/* descr */       "",
+/* creats*/       "BreathingSign",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index da58ffaaf10d0ca3113814e9d0936bfb673d4aa4..61e1faab4b216ebe326bf9313dc50aaf01b43dfb 100644 (file)
@@ -21,9 +21,8 @@
 
 class Chord_name_engraver : public Engraver 
 {
-public:
-  Chord_name_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+
+  TRANSLATOR_DECLARATIONS( Chord_name_engraver);
 
 protected:
   virtual void stop_translation_timestep ();
@@ -40,7 +39,7 @@ private:
   Protected_scm last_chord_;
 };
 
-ADD_THIS_TRANSLATOR (Chord_name_engraver);
+
 
 Chord_name_engraver::Chord_name_engraver ()
 {
@@ -114,3 +113,10 @@ Chord_name_engraver::stop_translation_timestep ()
   chord_ = gh_cons (SCM_EOL, gh_cons (SCM_EOL, SCM_EOL));
 }
 
+ENTER_DESCRIPTION(Chord_name_engraver,
+/* descr */       "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
+and generate the appropriate chordname.",
+/* creats*/       "ChordName",
+/* acks  */       "grob-interface",
+/* reads */       "chordChanges",
+/* write */       "");
index 9a9017e663647cefa17ca64aa97ef188cdbfc7ed..50f16f5e5c7c3324174dbc35babf9dc4222f5026 100644 (file)
@@ -40,9 +40,7 @@
 class Chord_tremolo_engraver : public Engraver
 {
   void typeset_beam ();
-public:
-  VIRTUAL_COPY_CONS (Translator);
-  Chord_tremolo_engraver ();
+TRANSLATOR_DECLARATIONS(Chord_tremolo_engraver);
 protected:
   Repeated_music * repeat_;
 
@@ -159,9 +157,9 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info)
 {
   if (beam_p_)
     {
-      if (Stem::has_interface (info.elem_l_))
+      if (Stem::has_interface (info.grob_l_))
        {
-         Grob * s = info.elem_l_;
+         Grob * s = info.grob_l_;
          int f = Stem::flag_i (s);
          f = (f > 2) ? f - 2 : 1;
          Stem::set_beaming (s, f, LEFT);
@@ -200,17 +198,17 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info)
            }
        }
     }
-  else if (stem_tremolo_ && Stem::has_interface (info.elem_l_))
+  else if (stem_tremolo_ && Stem::has_interface (info.grob_l_))
     {
-       Stem_tremolo::set_stem (stem_tremolo_, info.elem_l_);
+       Stem_tremolo::set_stem (stem_tremolo_, info.grob_l_);
 
-       info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
+       info.grob_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
     }
 
   
-  if (repeat_ && Note_head::has_interface (info.elem_l_))
+  if (repeat_ && Note_head::has_interface (info.grob_l_))
     {
-      info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
+      info.grob_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
     }
 }
 
@@ -241,5 +239,11 @@ Chord_tremolo_engraver::stop_translation_timestep ()
   
 }
 
-ADD_THIS_TRANSLATOR (Chord_tremolo_engraver);
 
+
+ENTER_DESCRIPTION(Chord_tremolo_engraver,
+/* descr */       "Generates beams for  tremolo repeats.",
+/* creats*/       "Beam",
+/* acks  */       "stem-interface note-head-interface",
+/* reads */       "",
+/* write */       "");
index abe879cdbd299de24b8d79bc501b30d8bc27bcfa..82bfc297d77dc165f1b7d93752882d8aeed98c19 100644 (file)
@@ -27,7 +27,7 @@ ly_unique (SCM list)
   for (SCM i = list; gh_pair_p (i); i = ly_cdr (i))
     {
       if (!gh_pair_p (ly_cdr (i))
-         || !gh_equal_p (ly_car (i), gh_cadr (i)))
+         || !gh_equal_p (ly_car (i), ly_cadr (i)))
        unique = gh_cons (ly_car (i), unique);
     }
   return gh_reverse (unique);
@@ -341,7 +341,7 @@ Chord::tonic_add_sub_to_pitches (SCM tonic, SCM add, SCM sub)
     missing = lower_step (tonic, missing, gh_int2scm (0));
   
   /* if additions include any 3, don't add third */
-  SCM third = gh_cadr (base_pitches (tonic));
+  SCM third = ly_cadr (base_pitches (tonic));
   if (member_notename (third, add) != SCM_BOOL_F)
     missing = scm_delete (third, missing);
 
index d16cb8a20b5db7a4058e5ac061b73c10bc45c429..4d2da95856f0c3892bbb8d4ffcf32e4b5d105949 100644 (file)
@@ -24,8 +24,7 @@
 class Clef_engraver : public  Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Clef_engraver ();
+  TRANSLATOR_DECLARATIONS(Clef_engraver);
 
   Direction octave_dir_;
 
@@ -34,7 +33,6 @@ protected:
   virtual void start_translation_timestep ();
   virtual void process_music ();
   virtual void acknowledge_grob (Grob_info);
-  virtual void do_creation_processing ();
 private:
   Item * clef_p_;
   Item * octavate_p_;
@@ -78,10 +76,10 @@ Clef_engraver::set_glyph ()
 void
 Clef_engraver::acknowledge_grob (Grob_info info)
 {
-  Item * item =dynamic_cast <Item *> (info.elem_l_);
+  Item * item =dynamic_cast <Item *> (info.grob_l_);
   if (item)
     {
-      if (Bar::has_interface (info.elem_l_)
+      if (Bar::has_interface (info.grob_l_)
          && gh_string_p (get_property ("clefGlyph")))
        create_clef ();
 
@@ -135,18 +133,6 @@ Clef_engraver::process_music ()
   inspect_clef_properties ();
 }
 
-/*
-  this must be done in creation_proc() since grace notes will be
-  processed before Clef_engraver::prcoess_music()
-
-  Grace notes and clef changes are still broken.
-*/
-void
-Clef_engraver::do_creation_processing ()
-{
-  inspect_clef_properties ();
-}
-
 void
 Clef_engraver::inspect_clef_properties ()
 {
@@ -213,5 +199,11 @@ Clef_engraver::start_translation_timestep ()
 {
 }
 
-ADD_THIS_TRANSLATOR (Clef_engraver);
 
+
+ENTER_DESCRIPTION(Clef_engraver,
+/* descr */       "Determine and set reference point for pitches",
+/* creats*/       "Clef OctavateEight",
+/* acks  */       "bar-line-interface key-interface",
+/* reads */       "clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility",
+/* write */       "");
index ca18e2ddde1b8fe1ce3b0cf1faf1bf46f52b80ea..eb52ebd0f8f7e95fb516885ff66af1ba7ab61320 100644 (file)
@@ -24,8 +24,7 @@ protected:
   virtual void create_grobs ();
   virtual void stop_translation_timestep ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Collision_engraver ();
+  TRANSLATOR_DECLARATIONS(Collision_engraver);
 };
 
 
@@ -50,13 +49,13 @@ Collision_engraver::create_grobs ()
 void
 Collision_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Note_column::has_interface (i.elem_l_))
+  if (Note_column::has_interface (i.grob_l_))
     {
       /*should check Y axis? */
-      if (Note_column::rest_b (i.elem_l_) || i.elem_l_->parent_l (X_AXIS))
+      if (Note_column::rest_b (i.grob_l_) || i.grob_l_->parent_l (X_AXIS))
        return ;
 
-      note_column_l_arr_.push (i.elem_l_);
+      note_column_l_arr_.push (i.grob_l_);
     }
 }
 
@@ -78,4 +77,10 @@ Collision_engraver::Collision_engraver ()
 
 
 
-ADD_THIS_TRANSLATOR (Collision_engraver);
+
+ENTER_DESCRIPTION(Collision_engraver,
+/* descr */       "",
+/* creats*/       "NoteCollision",
+/* acks  */       "note-column-interface",
+/* reads */       "",
+/* write */       "");
index 27b33630743833cb93962b4d8a214be82e31112b..87d9a7671dc9267b1ed065a8d3824a8f0c910111 100644 (file)
@@ -216,16 +216,16 @@ Collision::do_shifts (Grob* me)
   
   for (; gh_pair_p (hand); hand =ly_cdr (hand))
     {
-      Grob * s = unsmob_grob (gh_caar (hand));
-      Real amount = gh_scm2double (gh_cdar (hand));
+      Grob * s = unsmob_grob (ly_caar (hand));
+      Real amount = gh_scm2double (ly_cdar (hand));
       
       s->translate_axis (amount *wid, X_AXIS);
       done.push (s);
     }
   for (; gh_pair_p (autos); autos =ly_cdr (autos))
     {
-      Grob * s = unsmob_grob (gh_caar (autos));
-      Real amount = gh_scm2double (gh_cdar (autos));
+      Grob * s = unsmob_grob (ly_caar (autos));
+      Real amount = gh_scm2double (ly_cdar (autos));
       
       if (!done.find_l (s))
        s->translate_axis (amount * wid, X_AXIS);
index 93e191401083f9bf3d71d3d19dda00e7ed22c6ca..51bb291202d72ee479ce4bd2fdb590da13a014af 100644 (file)
@@ -29,8 +29,8 @@ Key_change_req::transpose (Pitch p)
   SCM pa = get_mus_property ("pitch-alist");
   for (SCM s = pa; gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM key = gh_caar (s);
-      SCM alter = gh_cdar (s);
+      SCM key = ly_caar (s);
+      SCM alter = ly_cdar (s);
       if (gh_pair_p (key))
        {
          Pitch orig (gh_scm2int (ly_car (key)),
@@ -66,8 +66,8 @@ alist_equal_p (SCM a, SCM b)
   for (SCM s = a;
        gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM key = gh_caar (s);
-      SCM val = gh_cdar (s);
+      SCM key = ly_caar (s);
+      SCM val = ly_cdar (s);
       SCM l = scm_assoc (key, b);
 
       if (l == SCM_BOOL_F
index 55c8c73f36a54af08bb772a1b204e312012ca63f..0763cd7431205f52277b2e2fbaede9afa2c5413c 100644 (file)
 class Custos_engraver : public Engraver
 {
 public:
-  Custos_engraver ();
+TRANSLATOR_DECLARATIONS(  Custos_engraver);
   virtual void start_translation_timestep ();
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
   virtual void stop_translation_timestep ();
   virtual void finalize ();
-  VIRTUAL_COPY_CONS (Translator);
+
 
 private:
   Item * create_custos ();
@@ -69,12 +69,12 @@ Custos_engraver::start_translation_timestep ()
 void
 Custos_engraver::acknowledge_grob (Grob_info info)
 {
-  Item *item = dynamic_cast <Item *> (info.elem_l_);
+  Item *item = dynamic_cast <Item *> (info.grob_l_);
   if (item)
     {
-      if (Bar::has_interface (info.elem_l_))
+      if (Bar::has_interface (info.grob_l_))
        custos_permitted = true;
-      else if (Note_head::has_interface (info.elem_l_))
+      else if (Note_head::has_interface (info.grob_l_))
        {
 
          /*
@@ -142,5 +142,11 @@ Custos_engraver::finalize ()
   custos_arr_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Custos_engraver);
 
+
+ENTER_DESCRIPTION(Custos_engraver,
+/* descr */       "",
+/* creats*/       "Custos",
+/* acks  */       "bar-line-interface note-head-interface",
+/* reads */       "",
+/* write */       "");
index 9dec1242c2d72a58a45375d5721ab87183885e66..9523b7ea91e67f7a7fbcb5829017bdae8c3e12c9 100644 (file)
@@ -20,8 +20,8 @@ class Dot_column_engraver : public Engraver
   Grob * stem_;
   Link_array<Item> head_l_arr_;
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Dot_column_engraver ();
+  TRANSLATOR_DECLARATIONS(
+  Dot_column_engraver );
   
 protected:
   virtual void acknowledge_grob (Grob_info);
@@ -59,25 +59,31 @@ Dot_column_engraver::stop_translation_timestep ()
 void
 Dot_column_engraver::acknowledge_grob (Grob_info info)
 {
-  Grob *d = unsmob_grob (info.elem_l_->get_grob_property ("dot"));
+  Grob *d = unsmob_grob (info.grob_l_->get_grob_property ("dot"));
   if (d)
     {
       if (!dotcol_)
        {
          dotcol_ = new Item (get_property ("DotColumn"));
-
-         Dot_column::set_interface (dotcol_);
          announce_grob (dotcol_, 0);
        }
 
-      Dot_column::add_head (dotcol_, info.elem_l_);
+      Dot_column::add_head (dotcol_, info.grob_l_);
     }
-  else if (Stem::has_interface (info.elem_l_))
+  else if (Stem::has_interface (info.grob_l_))
     {
-      stem_ = info.elem_l_;
+      stem_ = info.grob_l_;
     }
 }
 
 
-ADD_THIS_TRANSLATOR (Dot_column_engraver);
 
+
+ENTER_DESCRIPTION(Dot_column_engraver,
+/* descr */       " Engraves dots on dotted notes shifted to the right of the note.
+If omitted, then dots appear on top of the notes.
+",
+/* creats*/       "DotColumn",
+/* acks  */       "dot-column-interface stem-interface",
+/* reads */       "",
+/* write */       "");
index 00237602771d85107a1080250be9a542b316386d..ba07971a1a40c79e0fb332d4f31a483bc1adfbbc 100644 (file)
 #include "axis-group-interface.hh"
 #include "stem.hh"
 
-void
-Dot_column::set_interface (Grob* me)
-{
-}
 MAKE_SCHEME_CALLBACK (Dot_column,force_shift_callback,2);
 SCM
 Dot_column::force_shift_callback (SCM element_smob, SCM axis)
index 23ae1bd02099a793af3910efdba5053dad7adcb6..32dd5b23a49af91e37bbb0fe11f273323d2d8e02 100644 (file)
@@ -56,9 +56,7 @@ class Dynamic_engraver : public Engraver
   
   void typeset_all ();
 
-public:
-  VIRTUAL_COPY_CONS (Translator);
-  Dynamic_engraver ();
+TRANSLATOR_DECLARATIONS(Dynamic_engraver );
   
 protected:
   virtual void finalize ();
@@ -69,7 +67,7 @@ protected:
   virtual void start_translation_timestep ();
 };
 
-ADD_THIS_TRANSLATOR (Dynamic_engraver);
+
 
 
 Dynamic_engraver::Dynamic_engraver ()
@@ -399,14 +397,20 @@ Dynamic_engraver::typeset_all ()
 void
 Dynamic_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Note_column::has_interface (i.elem_l_))
+  if (Note_column::has_interface (i.grob_l_))
     {
       if (line_spanner_
          /* Don't refill killed spanner */
          && line_spanner_->immutable_property_alist_ != SCM_EOL)
        {
-         Side_position_interface::add_support (line_spanner_,i.elem_l_);
-         add_bound_item (line_spanner_,dynamic_cast<Item*> (i.elem_l_));
+         Side_position_interface::add_support (line_spanner_,i.grob_l_);
+         add_bound_item (line_spanner_,dynamic_cast<Item*> (i.grob_l_));
        }
     }
 }
+ENTER_DESCRIPTION(Dynamic_engraver,
+/* descr */       "",
+/* creats*/       "DynamicLineSpanner DynamicText Hairpin TextSpanner",
+/* acks  */       "note-column-interface",
+/* reads */       "",
+/* write */       "");
index 0b5d1b73b06a1a04450268535c683eaa4f2f6255..a08c500dce4db9f35e52a867e5a07a7942afabbd 100644 (file)
 class Dynamic_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Dynamic_performer ();
-
+  TRANSLATOR_DECLARATIONS(Dynamic_performer);
 protected:
   virtual bool try_music (Music* req_l);
   virtual void stop_translation_timestep ();
@@ -36,7 +33,7 @@ private:
   Audio_dynamic* audio_p_;
 };
 
-ADD_THIS_TRANSLATOR (Dynamic_performer);
+
 
 Dynamic_performer::Dynamic_performer ()
 {
@@ -137,3 +134,5 @@ Dynamic_performer::try_music (Music* r)
   return false;
 }
 
+ENTER_DESCRIPTION(Dynamic_performer,
+                 "","","","","");
index 37516251991415672840f26ef034660b54eb5403..56fe566fcaec3bf68cf2073b387b4c54630d6ad1 100644 (file)
@@ -13,9 +13,6 @@
 #include "paper-score.hh"
 #include "grob.hh"
 
-
-ADD_THIS_TRANSLATOR (Engraver_group_engraver);
-
 void
 Engraver_group_engraver::announce_grob (Grob_info info)
 {
@@ -37,13 +34,40 @@ Engraver_group_engraver::create_grobs ()
     }
 }
 
+SCM find_acknowledge_engravers (SCM gravlist, SCM meta);
 void
 Engraver_group_engraver::acknowledge_grobs ()
 {
+  if (!announce_info_arr_.size ())
+    return ;
+  
+  SCM tab =get_property (ly_symbol2scm ("acknowledgeHashTable"));
+  SCM name_sym = ly_symbol2scm ("name");
+  SCM meta_sym = ly_symbol2scm ("meta");  
+
+  
   for (int j =0; j < announce_info_arr_.size (); j++)
     {
       Grob_info info = announce_info_arr_[j];
-      for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p))
+      
+      SCM meta = info.grob_l_->get_grob_property (meta_sym);
+      SCM nm = scm_assoc (name_sym, meta);
+      if (gh_pair_p (nm))
+       nm = ly_cdr (nm);
+      else
+       {
+         assert (info.grob_l_->immutable_property_alist_ == SCM_EOL); 
+         continue;
+       }
+      SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED);
+      if (acklist == SCM_BOOL_F)
+       {
+         acklist= find_acknowledge_engravers (simple_trans_list_, meta);
+         scm_hashq_set_x (tab, nm, acklist);
+       }
+
+      for (SCM p = acklist; gh_pair_p (p); p = ly_cdr (p))
        {
          Translator * t = unsmob_translator (ly_car (p));
          Engraver * eng = dynamic_cast<Engraver*> (t);
@@ -97,6 +121,55 @@ Engraver_group_engraver::process_music ()
     }
 }
 
+void find_all_acknowledge_engravers (SCM tab, SCM gravlist, SCM allgrobs);
+
+void
+Engraver_group_engraver::initialize ()
+{
+  SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); // magic ->
+  set_property (ly_symbol2scm ("acknowledgeHashTable"), tab);
+
+  Translator_group::initialize ();
+}
+
+Engraver_group_engraver::Engraver_group_engraver() {}
 
+ENTER_DESCRIPTION(Engraver_group_engraver,
+/* descr */       "A group of engravers taken together",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
 
 
+
+/*****************/
+
+
+bool engraver_valid (Translator*tr, SCM ifaces)
+{
+  SCM ack_ifs = scm_assoc (ly_symbol2scm ("interfaces-acked"), tr->translator_description());
+  ack_ifs = gh_cdr (ack_ifs);
+  for (SCM s = ifaces; ly_pair_p (s); s = ly_cdr (s))
+    if (scm_memq (ly_car (s), ack_ifs) != SCM_BOOL_F)
+      return true;
+  return false;
+}
+
+
+SCM
+find_acknowledge_engravers (SCM gravlist, SCM meta_alist)
+{
+  SCM ifaces = gh_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta_alist));
+
+  SCM l = SCM_EOL;
+  for (SCM s = gravlist; ly_pair_p (s);  s = ly_cdr (s))
+    {
+      Translator* tr = unsmob_translator (ly_car (s));
+      if (engraver_valid (tr, ifaces))
+       l = scm_cons (tr->self_scm (), l); 
+    }
+  l = scm_reverse_x (l, SCM_EOL);
+
+  return l;
+}
index 9059624ce660f249c0ea9b2e6a1c860f65821161..9c5c936d90aaaa7075fbe79e07a2c1cd060f9b6c 100644 (file)
@@ -56,3 +56,11 @@ Engraver::process_music ()
 {
   
 }
+
+Engraver::Engraver()
+{
+}
+
+
+ENTER_DESCRIPTION(Engraver,
+                  "", "", "", "", "");
index d3ae21945fa40cecceb08272dbf30e8dcec32fa6..af30c3ed0fd9e188e606ab5a61fed9813b208bf3 100644 (file)
@@ -33,8 +33,7 @@ class Extender_engraver : public Engraver
   Extender_req* req_l_;
   Spanner* extender_p_;
 public:
-  Extender_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Extender_engraver);
 
 protected:
   virtual void acknowledge_grob (Grob_info);
@@ -48,7 +47,7 @@ private:
 };
 
 
-ADD_THIS_TRANSLATOR (Extender_engraver);
+
 
 Extender_engraver::Extender_engraver ()
 {
@@ -62,14 +61,14 @@ void
 Extender_engraver::acknowledge_grob (Grob_info i)
 {
   // -> text_item
-  if (i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
+  if (i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
     {
-      current_lyric_l_ = i.elem_l_;
+      current_lyric_l_ = i.grob_l_;
       if (extender_p_
          && !extender_p_->get_bound (RIGHT)
            )
          {
-           Lyric_extender::set_textitem (extender_p_, RIGHT, dynamic_cast<Item*> (i.elem_l_));
+           Lyric_extender::set_textitem (extender_p_, RIGHT, dynamic_cast<Item*> (i.grob_l_));
          }
     }
 }
@@ -142,3 +141,9 @@ Extender_engraver::start_translation_timestep ()
 }
 
 
+ENTER_DESCRIPTION(Extender_engraver,
+/* descr */       "Create lyric extenders",
+/* creats*/       "LyricExtender",
+/* acks  */       "lyric-syllable-interface",
+/* reads */       "",
+/* write */       "");
index 5bad2d94fa18c742add30a3b3b0d3ea04a0f1287..dc30cf3e2c75c04b6fe31e156782e97986c93c95 100644 (file)
@@ -5,10 +5,8 @@
 
 class Figured_bass_engraver : public Engraver
 {
-public:
-  VIRTUAL_COPY_CONS(Translator);
-  Figured_bass_engraver();
-
+  
+  TRANSLATOR_DECLARATIONS(Figured_bass_engraver);
 protected:
   Link_array<Note_req> figures_;
   Rest_req * rest_req_;
@@ -101,4 +99,9 @@ Figured_bass_engraver::process_music ()
 }
 
   
-ADD_THIS_TRANSLATOR(Figured_bass_engraver);
+ENTER_DESCRIPTION(Figured_bass_engraver,
+/* descr */       "Make volta brackets",
+/* creats*/       "BassFigure",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index c50b4cb316be326c8f4f10eeb7fe345e9b0d5e18..ec7fa8ffa7af46a24297c5c74b998819cc93b357 100644 (file)
@@ -200,7 +200,7 @@ Font_interface::properties_to_font_name (SCM fonts, SCM alist_chain)
 
   for (SCM s = fonts ; gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM qlist = gh_caar (s);
+      SCM qlist = ly_caar (s);
 
       if (name != SCM_BOOL_F)
        {
@@ -231,7 +231,7 @@ Font_interface::properties_to_font_name (SCM fonts, SCM alist_chain)
        }
 
       
-      SCM qname = gh_cdar (s);
+      SCM qname = ly_cdar (s);
       return qname;
     }
 
index 4f5ba93be862b6027f7352e5c7d024beec5132f5..d22da509eeb5a8a6a81e90d1db65a350bb91d864 100644 (file)
@@ -86,7 +86,7 @@ Font_metric::Font_metric ()
   smobify_self ();
 }
 
-Font_metric::Font_metric (Font_metric const &s)
+Font_metric::Font_metric (Font_metric const &)
 {
 }
 
index 56f1555d9d317547a779faeea98bd7fa2492be9a..a8554d4453a543a5d54599b340da7021f720bae9 100644 (file)
@@ -12,9 +12,8 @@
 
 class Font_size_engraver : public Engraver
 {
-public:
-  VIRTUAL_COPY_CONS(Translator);
-  Font_size_engraver ();
+  
+  TRANSLATOR_DECLARATIONS(Font_size_engraver);
 protected:
   virtual void acknowledge_grob (Grob_info gi);
 private:
@@ -33,10 +32,17 @@ Font_size_engraver::acknowledge_grob (Grob_info gi)
 
   if (gh_number_p (sz)
       && gh_scm2int (sz)
-      && !gh_number_p (gi.elem_l_->get_grob_property ("font-relative-size")))
+      && !gh_number_p (gi.grob_l_->get_grob_property ("font-relative-size")))
     {
-      gi.elem_l_->set_grob_property ("font-relative-size", sz);
+      gi.grob_l_->set_grob_property ("font-relative-size", sz);
     }
 }
 
-ADD_THIS_TRANSLATOR(Font_size_engraver);
+
+
+ENTER_DESCRIPTION(Font_size_engraver,
+/* descr */       "Puts fontSize into font-relative-size grob property.",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "fontSize",
+/* write */       "");
index c2ed5bd0131ad53c52fe71feba9d336182b2f295..542e9698bbb96b558d589a10ff74d1bac7513d6a 100644 (file)
@@ -13,7 +13,7 @@
 
 Grob_info::Grob_info (Grob*s_l, Music *r_l)
 {
-  elem_l_ = s_l;
+  grob_l_ = s_l;
   req_l_ = r_l;
   origin_trans_l_ = 0;  
 }
@@ -21,7 +21,7 @@ Grob_info::Grob_info (Grob*s_l, Music *r_l)
 
 Grob_info::Grob_info ()
 {
-  elem_l_ = 0;
+  grob_l_ = 0;
   req_l_ = 0;
   origin_trans_l_ = 0;
 }
index cdc887eab96903d74f1efed0324ff68a6711fca4..f1f80e720a6d57a19037713f6e8e3c2b23c28f63 100644 (file)
@@ -387,6 +387,12 @@ Grob::handle_broken_grobs (SCM src, SCM criterion)
 
          /* now: sc && sc->line_l () == line */
          if (!line
+             /*
+               This was introduced in 1.3.49 as a measure to prevent
+               programming errors. It looks expensive (?). TODO:
+               benchmark , document when (what kind of programming
+               errors) this happens.
+              */
              || (sc->common_refpoint (line, X_AXIS)
                  && sc->common_refpoint (line, Y_AXIS)))
            {
@@ -672,7 +678,7 @@ Grob::name () const
   SCM meta = get_grob_property ("meta");
   SCM nm = scm_assoc (ly_symbol2scm ("name"), meta);
   nm = (gh_pair_p (nm)) ? ly_cdr (nm) : SCM_EOL;
-  return  gh_string_p (nm) ?ly_scm2string (nm) :  classname (this);  
+  return  gh_symbol_p (nm) ? ly_symbol2string (nm) :  classname (this);  
 }
 
 void
index d7ebcea02e7deced0a7253030a20b4ae37a9e4b2..2143ea9d9a0fd62fbb54f27018898ce558d864ef 100644 (file)
@@ -27,8 +27,7 @@ class Hyphen_engraver : public Engraver
   Hyphen_req* req_l_;
   Spanner* hyphen_p_;
 public:
-  Hyphen_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Hyphen_engraver);
 
 protected:
   virtual void acknowledge_grob (Grob_info);
@@ -41,7 +40,7 @@ private:
 
 };
 
-ADD_THIS_TRANSLATOR (Hyphen_engraver);
+
 
 Hyphen_engraver::Hyphen_engraver ()
 {
@@ -55,14 +54,14 @@ void
 Hyphen_engraver::acknowledge_grob (Grob_info i)
 {
   // -> text-item
-  if (i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
+  if (i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface")))
     {
-      current_lyric_l_ = i.elem_l_;
+      current_lyric_l_ = i.grob_l_;
       if (hyphen_p_
          && !hyphen_p_->get_bound (RIGHT)
            )
          {
-           Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, i.elem_l_);
+           Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, i.grob_l_);
          }
     }
 }
@@ -134,3 +133,9 @@ Hyphen_engraver::start_translation_timestep ()
 }
 
 
+ENTER_DESCRIPTION(Hyphen_engraver,
+/* descr */       "Create lyric hyphens",
+/* creats*/       "LyricHyphen",
+/* acks  */       "lyric-syllable-interface",
+/* reads */       "",
+/* write */       "");
index 6bd445c4d443cbfda0e566c30b9f72f1b4c0a5a4..65eb4c5a7559f19b3daa4bf3e8a73f0629dceb72 100644 (file)
@@ -20,7 +20,7 @@ class Dot_column              // interface
 public:
   static int compare (Grob * const&,Grob * const&);
   static void add_head (Grob * dotcol, Grob* rh );
-  static void set_interface (Grob*);
+
   static bool has_interface (Grob*);
   DECLARE_SCHEME_CALLBACK (force_shift_callback, (SCM ,SCM));
   DECLARE_SCHEME_CALLBACK (side_position, (SCM ,SCM));  
index 9b7c69d50c38007dd08fbf3fa71d261e7679064d..5f0f5c6439c66a04885d1143cdb8112d0ffd7390 100644 (file)
@@ -31,8 +31,9 @@ protected:
   
   
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Engraver_group_engraver);
 
+  virtual void initialize ();
   virtual void do_announces ();
   virtual void announce_grob (Grob_info);
   virtual void process_music ();
index 66475cd36eea32fad811029be76cf1cd5b0ea7d0..279b60511c0113ab9d15f1564c649dba18a82181 100644 (file)
@@ -49,12 +49,11 @@ protected:
   virtual void announce_grob (Grob_info);
   virtual void process_music ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
   Engraver_group_engraver * daddy_grav_l () const;
   /**
     override other ctor
    */
-  Engraver () {}
+  TRANSLATOR_DECLARATIONS(Engraver);
 };
 
 
index 4e00958060328f2c71cd7d0f6740141d9cb9822e..f758b369448ebd30dea8769ec5184df7895b14c4 100644 (file)
@@ -23,10 +23,9 @@ struct Grob_info {
   friend class Engraver;
 public:
   Link_array<Translator> origin_trans_l_arr (Translator*) const; 
-  Grob * elem_l_;
+  Grob * grob_l_;
   Music *req_l_;
 
-
   Grob_info (Grob*, Music*);
   Grob_info ();
 };
index 2d9883c2eb7a8e1abf7aeed786a3e5eaf0345a53..65ca5ebb2d392ad8755c805c3e1856b868a069f4 100644 (file)
@@ -88,56 +88,21 @@ SCM ly_type (SCM);
 bool type_check_assignment (SCM val, SCM sym,  SCM type_symbol) ;
 SCM ly_number2string (SCM s);
 
-inline SCM
-ly_cdr (SCM x)
-{
-  return SCM_CDR (x);
-}
-inline SCM
-ly_car (SCM x)
-{
-  return SCM_CAR (x);
-} 
-inline SCM
-ly_caar (SCM x)
-{
-  return SCM_CAAR (x);
-}
-inline SCM
-ly_cdar (SCM x)
-{
-  return SCM_CDAR (x);
-}
-inline SCM
-ly_cadr (SCM x)
-{
-  return SCM_CADR (x);
-}
-inline SCM
-ly_cddr (SCM x)
-{
-  return SCM_CDDR (x);
-}
-inline SCM
-ly_pair_p (SCM x)
-{
-  return scm_pair_p (x);
-}
-inline bool
-ly_symbol_p (SCM x)
-{
-  return SCM_SYMBOLP (x);
-}
-inline bool
-ly_number_p (SCM x)
-{
-  return SCM_NUMBERP (x);
-}
-inline bool
-ly_procedure_p (SCM x)
-{
-  return SCM_NFALSEP (scm_procedure_p(x));
-}
+SCM parse_symbol_list (char const *);
+
+inline SCM ly_cdr (SCM x) { return SCM_CDR (x); }
+inline SCM ly_car (SCM x) { return SCM_CAR (x); } 
+inline SCM ly_caar (SCM x) { return SCM_CAAR (x); }
+inline SCM ly_cdar (SCM x) { return SCM_CDAR (x); }
+inline SCM ly_cadr (SCM x) { return SCM_CADR (x); }
+inline SCM ly_cddr (SCM x) { return SCM_CDDR (x); }
+inline SCM ly_caddr (SCM x) { return SCM_CADDR (x); }
+inline SCM ly_cdadr (SCM x) { return SCM_CDADR (x); }
+inline SCM ly_caadr (SCM x) { return SCM_CAADR (x); }
+inline bool ly_pair_p (SCM x) { return SCM_NFALSEP (scm_pair_p (x)); }
+inline bool ly_symbol_p (SCM x) { return SCM_SYMBOLP (x); }
+inline bool ly_number_p (SCM x) { return SCM_NUMBERP (x); }
+inline bool ly_procedure_p (SCM x) { return SCM_NFALSEP (scm_procedure_p(x)); }
 
 /*
   display and print newline.
index 49751d8b0810ffa72466c013cb5f90bd02a87ae2..e6bbe25b7eeeb719e65ef4d99470afd57692a307 100644 (file)
@@ -18,7 +18,8 @@
 
   DEPRECATED.
   */
-class Line_group_engraver_group : public Engraver_group_engraver {
+class Line_group_engraver_group : public Engraver_group_engraver
+{
 protected:
   Spanner *staffline_p_;   
 
@@ -27,9 +28,7 @@ protected:
   virtual void finalize ();
   virtual void typeset_grob (Grob*);
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Line_group_engraver_group ();
+  TRANSLATOR_DECLARATIONS(Line_group_engraver_group);
 };
 
 
index 68996710f9a24b6a61a925bafd4593821c0e84e3..269d5a96587bea16e329e882d28d2b3a3e575ed0 100644 (file)
@@ -74,9 +74,9 @@ private:
   Syllable_group * lookup_context_id (const String &context_id);
 
 public:
-  Lyric_phrasing_engraver ();
+
   ~Lyric_phrasing_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(  Lyric_phrasing_engraver);
 
 private:
   /** association list of Syllable_group smobs
index 2f05ae6604bc943c8eeae3e0ab77fd235c3c7c8c..891271b499b8d76888f20caf5fa0217292efdaf8 100644 (file)
@@ -19,8 +19,8 @@
 
 class Performer_group_performer : public Performer, public virtual Translator_group {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-
+  TRANSLATOR_DECLARATIONS(Performer_group_performer);
+  
   virtual void do_announces ();
   virtual void announce_element (Audio_element_info);
 protected:
index 815f04c05ec79b1ac3984f2214f95585e910cf95..74631131bcba9a3e920742635ebbfb81301f6262 100644 (file)
@@ -31,11 +31,11 @@ class Score_engraver :
   void typeset_all ();
     
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Score_engraver);
   Paper_score * pscore_p_;
   
   void forbid_breaks ();
-  Score_engraver ();
+
   virtual Music_output *get_output_p ();  
 protected:   
   virtual void prepare (Moment);
index 09097470a6bf72495630645ac0870798dedaa749..2539c6d5a4f4f94fc3979dfef70b217e7e97bafd 100644 (file)
@@ -18,9 +18,7 @@ class Score_performer:
   public Performer_group_performer, public Global_translator 
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Score_performer ();
+  TRANSLATOR_DECLARATIONS(Score_performer);
   ~Score_performer ();
   Performance *performance_p_;
 
index edc09238fad7a466d2e13607513ecf40acd3bf41..1e6174935661529db0a42943e75a75f4cc77560b 100644 (file)
@@ -49,7 +49,6 @@ public:
   Translator_group (Translator_group const &);
   Translator_group ();
   void add_group_translator (Translator *trans_p);
-
   
   /// Score_register = 0, Staff_registers = 1, etc)
   Translator_group* ancestor_l (int l=1);
@@ -63,9 +62,8 @@ public:
   Translator_group *find_existing_translator_l (String n, String id);
   Translator_group *find_create_translator_l (String n, String id);
   Link_array<Translator_group> path_to_acceptable_translator (String alias, Music_output_def*) const;
-
   Translator_group*get_default_interpreter ();
-  
+
 public:
   bool try_music_on_nongroup_children (Music *m);
   
@@ -76,7 +74,6 @@ public:
   virtual void initialize ();
   virtual void finalize ();
   virtual void each (Method_pointer);
-
 };
 
 #endif // TRANSLATOR_GROUP_HH
index 112c21496f0e02d286b337dfa61de75286170e54..9877495be18c3bf5949c77be9571b7cefc6bbed8 100644 (file)
 #include "input.hh"
 #include "smobs.hh"
 
+#define TRANSLATOR_DECLARATIONS(NAME)                  \
+public:                                                        \
+  NAME();\
+  VIRTUAL_COPY_CONS (Translator);                              \
+  static SCM static_description_;                      \
+  virtual SCM static_translator_description () const;  \
+  virtual SCM translator_description () const;
+
 /** Make some kind of #Element#s from Requests. Elements are made by
   hierarchically grouped #Translator#s
   */
@@ -28,16 +36,15 @@ public:
   Music_output_def * output_def_l_;
   String type_str_;
   
-  virtual const char *name () const;
   bool is_alias_b (String) const;
     
-  VIRTUAL_COPY_CONS (Translator);
+
   Translator (Translator const &);
-  Translator ();
+
   
   Translator_group * daddy_trans_l_ ;
-
+  DECLARE_SCHEME_CALLBACK(name, (SCM trans));
+  DECLARE_SCHEME_CALLBACK(description,(SCM trans));
   void announces ();
 
   void removal_processing ();
@@ -60,8 +67,9 @@ public:
   
   SCM properties_scm_;
   DECLARE_SMOBS (Translator, dummy);
-public:
 
+public:
+  TRANSLATOR_DECLARATIONS(Translator);
     /**
     try to fit the request in this engraver
 
@@ -84,15 +92,52 @@ public:
   A macro to automate administration of translators.
  */
 #define ADD_THIS_TRANSLATOR(T)                         \
+SCM T::static_description_ = SCM_EOL;\
 static void  _ ## T ## _adder () {\
       T *t = new T;\
+      T::static_description_ = t->static_translator_description ();\
+      scm_permanent_object (T::static_description_);\
       t->type_str_ = classname (t);\
       add_translator (t);\
 }\
+SCM T::translator_description() const\
+{ \
+  return static_description_;\
+}\
 ADD_GLOBAL_CTOR (_ ## T ## _adder);
 
 
 
+
+#define ENTER_DESCRIPTION(classname,desc,grobs,acked,read,write)                                               \
+ADD_THIS_TRANSLATOR (classname);\
+SCM                                                                                            \
+classname::static_translator_description () const \
+{                                                                                              \
+  SCM  static_properties= SCM_EOL;                                                             \
+  /*  static_properties= acons (name ,gh_str02scm (Translator::name (self_scm ())),            \
+                             static_properties_);                                              \
+  */                                                                                           \
+  static_properties= scm_acons (ly_symbol2scm ("grobs-created"),                               \
+                             parse_symbol_list (grobs), static_properties);    \
+                                                                                               \
+  static_properties= scm_acons (ly_symbol2scm ("description"),                                 \
+                             ly_str02scm (desc), static_properties);                           \
+                                                                                               \
+  static_properties= scm_acons (ly_symbol2scm ("interfaces-acked"),                            \
+                             parse_symbol_list (acked), static_properties);                    \
+                                                                                               \
+  static_properties= scm_acons (ly_symbol2scm ("properties-read"),                             \
+                             parse_symbol_list (read), static_properties);                     \
+                                                                                               \
+  static_properties= scm_acons (ly_symbol2scm ("properties-written"),                          \
+                               parse_symbol_list (write), static_properties);                  \
+                                                                                               \
+  return static_properties;                                                                    \
+}
+
+
+
 extern Dictionary<Translator*> *global_translator_dict_p;
 void add_translator (Translator*trans_p);
 
index b352473e4e35185874a3fc339fc1ae9476a7565a..4179e7cc34210cef8223265a8284afbecf61f1a1 100644 (file)
@@ -24,15 +24,19 @@ public:
   VIRTUAL_COPY_CONS (Translator);
 };
 
-#define DECLARE_REQUEST_SWALLOWER(TYPE)  \
-struct TYPE ## _swallow_translator : public Type_swallow_translator {\
-  TYPE ## _swallow_translator () { \
-      swallow_str_ =  #TYPE;\
-  }\
-  \
-  VIRTUAL_COPY_CONS (Translator);\
-};\
-ADD_THIS_TRANSLATOR (TYPE ## _swallow_translator);\
+#define DECLARE_REQUEST_SWALLOWER(TYPE)                                        \
+struct TYPE ## _swallow_translator : public Type_swallow_translator {  \
+  TRANSLATOR_DECLARATIONS (TYPE ## _swallow_translator);  \
+};                                                                     \
+  TYPE ## _swallow_translator :: TYPE ## _swallow_translator() {\
+      swallow_str_ =  #TYPE;                                           \
+  }                                                                    \
+ENTER_DESCRIPTION(TYPE ## _swallow_translator,                         \
+                 "Swallow requests of " #TYPE " type.",                \
+                 "",                                                   \
+                 "",                                                   \
+                 "",                                                   \
+                 "");
 
 #endif // TYPESWALLOW_GRAV_HH
 
index c98bbdd7e9f23338f07a279729980b37d4ff194e..0f5e9bbbd1259fd3b40fb0c6d9e9b226e061a408 100644 (file)
@@ -23,14 +23,14 @@ class Instrument_name_engraver : public Engraver
   
   void create_text (SCM s);
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Instrument_name_engraver ();
+  TRANSLATOR_DECLARATIONS(Instrument_name_engraver);
+
   virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
 };
 
-ADD_THIS_TRANSLATOR (Instrument_name_engraver);
+
 
 Instrument_name_engraver::Instrument_name_engraver ()
 {
@@ -77,7 +77,7 @@ Instrument_name_engraver::create_text (SCM txt)
 void
 Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Bar::has_interface (i.elem_l_))
+  if (Bar::has_interface (i.grob_l_))
     {
       SCM s = get_property ("instrument");
   
@@ -91,8 +91,8 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
        create_text (s);
     }
 
-  if (dynamic_cast<Spanner*> (i.elem_l_)
-      && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface")))
+  if (dynamic_cast<Spanner*> (i.grob_l_)
+      && i.grob_l_->has_interface (ly_symbol2scm ("dynamic-interface")))
     return;
 
   /*
@@ -102,12 +102,12 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
     therefore the location of its refpoint won't be very useful.
     
   */
-  if (dynamic_cast<Spanner*> (i.elem_l_)
-      && ((Axis_group_interface::has_interface (i.elem_l_)
-          && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS)))
-      && !Align_interface::has_interface (i.elem_l_))
+  if (dynamic_cast<Spanner*> (i.grob_l_)
+      && ((Axis_group_interface::has_interface (i.grob_l_)
+          && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS)))
+      && !Align_interface::has_interface (i.grob_l_))
     {
-      SCM nl = gh_cons (i.elem_l_->self_scm (),
+      SCM nl = gh_cons (i.grob_l_->self_scm (),
                        get_property ("instrumentSupport"));
 
       daddy_trans_l_->set_property ("instrumentSupport", nl);
@@ -117,3 +117,12 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
 
 
 
+ENTER_DESCRIPTION(Instrument_name_engraver,
+/* descr */       " Prints the name of the instrument (specified by
+@code{Staff.instrument} and @code{Staff.instr})
+at the left of the
+staff.",
+/* creats*/       "InstrumentName",
+/* acks  */       "bar-line-interface axis-group-interface",
+/* reads */       "instrument instr",
+/* write */       "");
index 37b215fbd69ca3e7d85164e9bbf24c83a073d13e..17ffce32374982aa04897e62d2bd7e786f145c93 100644 (file)
@@ -28,9 +28,7 @@ class Key_engraver : public Engraver
   void read_req (Key_change_req const * r);
 
 public:
-  Key_engraver ();
-  
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Key_engraver);
 
   Key_change_req * keyreq_l_;
   Item * item_p_;
@@ -111,7 +109,7 @@ Key_engraver::try_music (Music * req_l)
 void
 Key_engraver::acknowledge_grob (Grob_info info)
 {
-  if (Clef::has_interface (info.elem_l_))
+  if (Clef::has_interface (info.grob_l_))
     {
       SCM c =  get_property ("createKeyOnClefChange");
       if (to_boolean (c))
@@ -119,7 +117,7 @@ Key_engraver::acknowledge_grob (Grob_info info)
          create_key (false);
        }
     }
-  else if (Bar::has_interface (info.elem_l_)
+  else if (Bar::has_interface (info.grob_l_)
           && gh_pair_p (get_property ("keySignature")))
     {
       create_key (true);
@@ -165,7 +163,7 @@ Key_engraver::read_req (Key_change_req const * r)
        }
     }
   for (SCM s = n ; gh_pair_p (s); s = ly_cdr (s))
-    if (gh_scm2int (gh_cdar (s)))
+    if (gh_scm2int (ly_cdar (s)))
       accs = gh_cons (ly_car (s), accs);
 
   old_accs_ = get_property ("keySignature");
@@ -187,5 +185,11 @@ Key_engraver::initialize ()
 }
 
 
-ADD_THIS_TRANSLATOR (Key_engraver);
 
+
+ENTER_DESCRIPTION(Key_engraver,
+/* descr */       "",
+/* creats*/       "KeySignature",
+/* acks  */       "bar-line-interface clef-interface",
+/* reads */       "keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature",
+/* write */       "");
index 713ae61e27ead6957a5200bc5a599a87c90167fb..563910435f8d917071c1f16111c9550272f93b8a 100644 (file)
@@ -103,8 +103,8 @@ Key_item::brew_molecule (SCM smob)
 
   for (SCM s = newas; gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM what = gh_caar (s);
-      int alter = gh_scm2int (gh_cdar (s));
+      SCM what = ly_caar (s);
+      int alter = gh_scm2int (ly_cdar (s));
       int pos = alteration_pos (what, alter, c0p);
       
       Molecule m = Font_interface::get_default_font (me)->
@@ -135,11 +135,11 @@ Key_item::brew_molecule (SCM smob)
       
       for (; gh_pair_p (old); old = ly_cdr (old))
         {
-         SCM found = scm_assoc (gh_caar (old), newas);
+         SCM found = scm_assoc (ly_caar (old), newas);
          if (found == SCM_BOOL_F
-             || ly_cdr (found) != gh_cdar (old))
+             || ly_cdr (found) != ly_cdar (old))
            {
-             SCM what = gh_caar (old);
+             SCM what = ly_caar (old);
              int alter = 0;
              int pos = alteration_pos (what, alter, c0p);
 
index e9454129248d817795e5f4f70be81748c3609f21..22a3f2c84a014719db2638ec9a412e68f8bc47cb 100644 (file)
@@ -14,9 +14,7 @@
 class Key_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Key_performer ();
+  TRANSLATOR_DECLARATIONS(Key_performer);
   ~Key_performer ();
 
 protected:
@@ -29,8 +27,6 @@ private:
   Audio_key* audio_p_;
 };
 
-ADD_THIS_TRANSLATOR (Key_performer);
-
 Key_performer::Key_performer ()
 {
   key_req_l_ = 0;
@@ -83,3 +79,4 @@ Key_performer::try_music (Music* req_l)
   return false;
 }
 
+ENTER_DESCRIPTION(Key_performer,"","","","","");
index 278dac3694a1e980a085eba4c6f34bc0b37dfa6c..12b259ea83f27edd4d93d34fde48cc14362decf3 100644 (file)
@@ -166,7 +166,8 @@ ly_gulp_file (SCM fn)
 void
 read_lily_scm_file (String fn)
 {
-  scm_c_eval_string ((char *) gulp_file_to_string (fn).ch_C ());
+  gh_eval_str ((char *) gulp_file_to_string (fn).ch_C ());
+  //  scm_c_eval_string ((char *) gulp_file_to_string (fn).ch_C ());
 }
 
 extern "C" {
@@ -446,7 +447,7 @@ ly_version ()
 {
   char const* vs =  "\' (" MAJOR_VERSION " " MINOR_VERSION " "  PATCH_LEVEL " " MY_PATCH_LEVEL ")" ;
   
-  return scm_c_eval_string ((char*)vs);
+  return gh_eval_str ((char*)vs);
 }
 
 static void
@@ -499,3 +500,29 @@ ly_assoc_chain (SCM key, SCM achain)
   else
     return SCM_BOOL_F;
 }
+
+/*
+  LIST has the form "sym1 sym2 sym3" 
+ */
+SCM
+parse_symbol_list (const char * list)
+{
+  char * s = strdup (list);
+  char *orig = s;
+  SCM create_list = SCM_EOL;
+  if (!s[0] )
+    s = 0;
+
+  while (s)
+    {
+      char *next = strchr (s, ' ');
+      if (next)
+       *next++ = 0;
+
+      create_list = gh_cons (ly_symbol2scm (s), create_list);
+      s = next;
+    }
+
+  free (orig);
+  return create_list;
+}
index d637cdeedda2b01ec2cdd520e93b9d99d03877c8..14f55b67427d4e7e75e95583eaf7ed01f1c5f166 100644 (file)
@@ -61,8 +61,10 @@ Line_group_engraver_group::create_line_spanner ()
   Axis_group_interface::set_axes (staffline_p_, Y_AXIS,Y_AXIS);
 }
 
-
-
-
-ADD_THIS_TRANSLATOR (Line_group_engraver_group);
+ENTER_DESCRIPTION(Line_group_engraver_group,
+                 "",
+                 "",
+                 "",
+                 "",
+                 "");
 
index b0a042b7c61b99729ef18037356bff070ade8e3e..e82b54448107e02dce0ad61309494a2c4e0c4561 100644 (file)
@@ -247,22 +247,22 @@ Line_of_score::output_molecule (SCM expr, Offset o)
                                                           gh_int2scm (ip->line_number ()),
                                                           gh_int2scm (ip->column_number ()),
                                                           SCM_UNDEFINED));
-         expr = gh_cadr (expr);
+         expr = ly_cadr (expr);
        }
       else  if (head ==  no_origin_sym)
        {
          pscore_l_->outputter_l_->output_scheme (scm_list_n (no_origin_sym, SCM_UNDEFINED));
-         expr = gh_cadr (expr);
+         expr = ly_cadr (expr);
        }
       else if (head == offset_sym)
        {
-         o += ly_scm2offset (gh_cadr (expr));
-         expr = gh_caddr (expr);
+         o += ly_scm2offset (ly_cadr (expr));
+         expr = ly_caddr (expr);
        }
       else if (head == combine_sym)
        {
-         output_molecule (gh_cadr (expr), o);
-         expr = gh_caddr (expr);
+         output_molecule (ly_cadr (expr), o);
+         expr = ly_caddr (expr);
        }
       else
        {
index 274883c15a585e4a797683b9d406323aad1b3b6c..8ef57ed105436310af8e92d38fe2d21bf922fdb6 100644 (file)
@@ -33,7 +33,7 @@
 struct Local_key_engraver : Engraver {
   Item *key_item_p_;
 protected:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Local_key_engraver);
   virtual void process_music ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
@@ -55,13 +55,12 @@ public:
   Link_array<Grob> support_l_arr_;
   Link_array<Item> forced_l_arr_;
   Link_array<Grob> tie_l_arr_;
-  Local_key_engraver ();
+
 };
 
 Local_key_engraver::Local_key_engraver ()
 {
   key_item_p_ =0;
-
   last_keysig_ = SCM_EOL;
 }
 
@@ -242,18 +241,18 @@ Local_key_engraver::acknowledge_grob (Grob_info info)
 {
   Note_req * note_l =  dynamic_cast <Note_req *> (info.req_l_);
 
-  if (note_l && Rhythmic_head::has_interface (info.elem_l_))
+  if (note_l && Rhythmic_head::has_interface (info.grob_l_))
     {
       mel_l_arr_.push (note_l);
-      support_l_arr_.push (info.elem_l_);
+      support_l_arr_.push (info.grob_l_);
     }
-  else if (Tie::has_interface (info.elem_l_))
+  else if (Tie::has_interface (info.grob_l_))
     {
-      tie_l_arr_.push (info.elem_l_);
+      tie_l_arr_.push (info.grob_l_);
     }
-  else if (Arpeggio::has_interface (info.elem_l_))
+  else if (Arpeggio::has_interface (info.grob_l_))
     {
-      arpeggios_.push (info.elem_l_); 
+      arpeggios_.push (info.grob_l_); 
     }
   
 }
@@ -286,5 +285,13 @@ Local_key_engraver::process_music ()
 
 
 
-ADD_THIS_TRANSLATOR (Local_key_engraver);
 
+
+ENTER_DESCRIPTION(Local_key_engraver,
+/* descr */       "Make accidentals.  Catches note heads, ties and notices key-change
+events.  Due to interaction with ties (which don't come together
+with note heads), this needs to be in a context higher than Tie_engraver. FIXME",
+/* creats*/       "Accidentals",
+/* acks  */       "rhythmic-head-interface tie-interface arpeggio-interface",
+/* reads */       "localKeySignature forgetAccidentals noResetKey",
+/* write */       "");
index aefaee8e8c18981d00fe70a4f557e5db8a46f229..ff0172616907e7eadc6513d648bd5a212cf23ab9 100644 (file)
@@ -87,17 +87,17 @@ Local_key_item::after_line_breaking (SCM smob)
   for (SCM s = accs;
        gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM opts = gh_cdar (s);
+      SCM opts = ly_cdar (s);
 
       SCM t = scm_memq (ly_symbol2scm ("tie-break-reminder"), opts);
       if (t != SCM_BOOL_F)
        {
-         Grob *tie = unsmob_grob (gh_cadr (t));
+         Grob *tie = unsmob_grob (ly_cadr (t));
          Spanner *sp = dynamic_cast<Spanner*> (tie);
          if (!sp->original_l_)
            {
              /* there should be a better way to delete part of me */
-             scm_set_car_x (s, scm_list_n (gh_caar (s),
+             scm_set_car_x (s, scm_list_n (ly_caar (s),
                                         ly_symbol2scm ("deleted"),
                                         SCM_UNDEFINED));
              me->set_grob_property ("molecule", SCM_EOL);
@@ -144,8 +144,8 @@ Local_key_item::brew_molecule (SCM smob)
   for (SCM s = accs;
        gh_pair_p (s); s = ly_cdr (s))
     {
-      Pitch p (*unsmob_pitch (gh_caar (s)));
-      SCM opts = gh_cdar (s);
+      Pitch p (*unsmob_pitch (ly_caar (s)));
+      SCM opts = ly_cdar (s);
       
       if (scm_memq (ly_symbol2scm ("deleted"), opts) != SCM_BOOL_F)
        continue;
index 6504472983e0a6fbdf0d1ca32bc137ec4cd23d44..036ba8895944abbbd2dd12bed515371f0d2aa64b 100644 (file)
@@ -371,5 +371,5 @@ Lookup::repeat_slash (Real w, Real s, Real t)
   Box b (Interval (0, w + sqrt (sqr(t/s) + sqr (t))),
         Interval (0, w * s));
 
-  return Molecule (b, slashnodot);
+  return Molecule (b, slashnodot); //  http://slashnodot.org
 }
index 929ebf819172910baca6953dfaa9a7ccee5af495..3b2e7b31c3b2c54e429f3a25e864da9df84a3e11 100644 (file)
@@ -27,15 +27,13 @@ protected:
   virtual void start_translation_timestep ();
   
 public:
-  Lyric_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
-
+  TRANSLATOR_DECLARATIONS(Lyric_engraver);
 private:
   Lyric_req * req_l_;
   Item* text_p_;
 };
 
-ADD_THIS_TRANSLATOR (Lyric_engraver);
+
 
 
 Lyric_engraver::Lyric_engraver ()
@@ -97,3 +95,9 @@ Lyric_engraver::start_translation_timestep ()
 }
 
 
+ENTER_DESCRIPTION(Lyric_engraver,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index db78f744fe32017ee62d1282c1963066fbaff473..c8e1acac024ad25af5a214888debaff6d470b7bd 100644 (file)
@@ -14,9 +14,7 @@
 
 class Lyric_performer : public Performer {
 public:
-  VIRTUAL_COPY_CONS (Translator);
- Lyric_performer ();
-
+  TRANSLATOR_DECLARATIONS(Lyric_performer);
 protected:
 
   virtual bool try_music (Music* req_l);
@@ -28,7 +26,8 @@ private:
   Audio_text* audio_p_;
 };
 
-ADD_THIS_TRANSLATOR (Lyric_performer);
+
+
 
 Lyric_performer::Lyric_performer ()
 {
@@ -74,3 +73,4 @@ Lyric_performer::try_music (Music* req_l)
   return false;
 }
 
+ENTER_DESCRIPTION(Lyric_performer,"","","","","");
index a335ca7f61b8f6f8e26f2bed3241367e6621d8db..fd5625551c990e56b58812fa55cd013f128544bc 100644 (file)
@@ -16,7 +16,7 @@
 String get_context_id (Translator_group * ancestor, const char * type);
 String trim_suffix (String &id);
 
-ADD_THIS_TRANSLATOR (Lyric_phrasing_engraver);
+
 
 /*
   TODO: this code is too hairy, and does things that should be in the
@@ -108,13 +108,13 @@ Lyric_phrasing_engraver::lookup_context_id (const String &context_id)
     if (! (gh_boolean_p (s) && !to_boolean (s))) {
       /* match found */
       // (key . ((alist_entry . old_entry) . previous_entry))
-      if (to_boolean (gh_cdadr (s))) { // it's an old entry ... make it a new one
-       SCM val = gh_cons (gh_cons (gh_caadr (s), SCM_BOOL_F), gh_cddr (s)); 
+      if (to_boolean (ly_cdadr (s))) { // it's an old entry ... make it a new one
+       SCM val = gh_cons (gh_cons (ly_caadr (s), SCM_BOOL_F), ly_cddr (s)); 
        voice_alist_ = scm_assoc_set_x (voice_alist_, ly_car (s), val);
-       return unsmob_voice_entry (gh_caar (val));
+       return unsmob_voice_entry (ly_caar (val));
       }
       else { // the entry is current ... return it.
-       SCM entry_scm = gh_caadr (s);
+       SCM entry_scm = ly_caadr (s);
        return unsmob_voice_entry (entry_scm);
       }
     }
@@ -124,7 +124,7 @@ Lyric_phrasing_engraver::lookup_context_id (const String &context_id)
                    Syllable_group::make_entry ()); 
 
   voice_alist_ = scm_acons (key, val, voice_alist_);
-  return unsmob_voice_entry (gh_caar (val));
+  return unsmob_voice_entry (ly_caar (val));
 }
 
 
@@ -154,7 +154,7 @@ Lyric_phrasing_engraver::record_extender (const String &context_id, Grob * exten
     if (! (gh_boolean_p (s) && !to_boolean (s))) {
       /* match found */
       // (key . ((alist_entry . old_entry) . previous_entry))
-      SCM previous_scm = gh_cddr (s);
+      SCM previous_scm = ly_cddr (s);
       if (previous_scm != SCM_EOL) {
        Syllable_group * v = unsmob_voice_entry (previous_scm);
        v->add_extender (extender);
@@ -178,7 +178,7 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i)
     return;
 
 
-  Grob *h = i.elem_l_;
+  Grob *h = i.grob_l_;
 
   if (Note_head::has_interface (h)) {
     /* caught a note head ... do something with it */
@@ -266,10 +266,10 @@ void Lyric_phrasing_engraver::create_grobs ()
   punc = gh_string_p (sp) ? ly_scm2string (sp) : ".,;:?!\""; 
   
   for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) {
-    SCM v_entry = gh_cdar (v);
+    SCM v_entry = ly_cdar (v);
     // ((current . oldflag) . previous)
-    if (!to_boolean (gh_cdar (v_entry))) { // not an old entry left over from a prior note ...
-      Syllable_group *entry = unsmob_voice_entry (gh_caar (v_entry));
+    if (!to_boolean (ly_cdar (v_entry))) { // not an old entry left over from a prior note ...
+      Syllable_group *entry = unsmob_voice_entry (ly_caar (v_entry));
 
       /*
        TODO: give context for warning.
@@ -297,17 +297,17 @@ void
 Lyric_phrasing_engraver::stop_translation_timestep ()
 {
   for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) {
-    SCM entry_scm = gh_cdar (v);
+    SCM entry_scm = ly_cdar (v);
     // ((alist_entry . entry_is_old) . previous_entry)
-    Syllable_group * entry = unsmob_voice_entry (gh_caar (entry_scm));
+    Syllable_group * entry = unsmob_voice_entry (ly_caar (entry_scm));
 
     // set previous_entry, set entry_is_old, and resave it to alist_
     // but only change if this current was not old.
-    if (! to_boolean (gh_cdar (entry_scm))) { 
+    if (! to_boolean (ly_cdar (entry_scm))) { 
       Syllable_group * previous_entry = unsmob_voice_entry (ly_cdr (entry_scm));
       previous_entry->copy (entry);
-      entry_scm = gh_cons (gh_cons (gh_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm));
-      voice_alist_ = scm_assoc_set_x (voice_alist_, gh_caar (v), entry_scm);
+      entry_scm = gh_cons (gh_cons (ly_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm));
+      voice_alist_ = scm_assoc_set_x (voice_alist_, ly_caar (v), entry_scm);
     }
     entry->next_lyric ();
   }
@@ -316,3 +316,9 @@ Lyric_phrasing_engraver::stop_translation_timestep ()
 
 
 
+ENTER_DESCRIPTION(Lyric_phrasing_engraver,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "lyric-syllable-interface note-head-interface lyric-extender-interface",
+/* reads */       "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
+/* write */       "");
index 226d054d7819a809fee7624a945903b0823b941f..50725df2cb9325b17f2f704183077c8e562583e7 100644 (file)
@@ -324,7 +324,7 @@ main_prog (void * closure, int, char**)
   all_fonts_global_p = new All_font_metrics (global_path.str ());
 
   init_scheme_code_string += ")";
-  scm_c_eval_string ((char *)init_scheme_code_string.ch_C());
+  gh_eval_str ((char *)init_scheme_code_string.ch_C());
   
   int p=0;
   const char *arg  = oparser_p_static->get_next_arg ();
index faaa30c800c5922fdfab89c78afc7dfc9691163e..1a366e68b4d0f359636b79e9add90b11c2a08625 100644 (file)
@@ -28,8 +28,7 @@
 class Mark_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Mark_engraver ();
+  TRANSLATOR_DECLARATIONS(Mark_engraver);
 protected:
   Item* text_p_;
   
@@ -47,7 +46,7 @@ private:
 };
 
 
-ADD_THIS_TRANSLATOR (Mark_engraver);
+
 
 
 Mark_engraver::Mark_engraver ()
@@ -63,15 +62,23 @@ Mark_engraver::initialize ()
 }
 
 
+
+
+/*
+
+which grobs carry INVISIBLE-STAFF ?
+
+*/
+
 void
 Mark_engraver::acknowledge_grob (Grob_info inf)
 {
-  Grob * s = inf.elem_l_;
+  Grob * s = inf.grob_l_;
   if (Staff_symbol::has_interface (s)
       || to_boolean (s->get_grob_property ("invisible-staff")))
     {
       SCM sts = get_property ("stavesFound");
-      SCM thisstaff = inf.elem_l_->self_scm ();
+      SCM thisstaff = inf.grob_l_->self_scm ();
       if (scm_memq (thisstaff, sts) == SCM_BOOL_F)
        daddy_trans_l_->set_property ("stavesFound", gh_cons (thisstaff, sts));
     }
@@ -208,3 +215,9 @@ Mark_engraver::process_music ()
     }
 }
 
+ENTER_DESCRIPTION(Mark_engraver,
+/* descr */       "",
+/* creats*/       "RehearsalMark",
+/* acks  */       "grob-interface", 
+/* reads */       "rehearsalMark stavesFound",
+/* write */       "");
index 83f07738761d7c1ffabb8f372a1a85894f712947..fab89dcd9c4b4a55fc14ddd671cf0c2fabbaf148 100644 (file)
 class Melisma_engraver:public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Melisma_engraver);
   bool try_music (Music *);
 };
 
-ADD_THIS_TRANSLATOR (Melisma_engraver);
+
 
 bool
 Melisma_engraver::try_music (Music *m) 
@@ -46,3 +46,12 @@ Melisma_engraver::try_music (Music *m)
   daddy_trans_l_->set_property ("melismaEngraverBusy",SCM_BOOL_F);
   return false;
 }
+Melisma_engraver::Melisma_engraver()
+{
+}
+ENTER_DESCRIPTION(Melisma_engraver,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy",
+/* write */       "");
index 5e124b2e90c3147a1bc036e9591e13b9407b1439..f1aedc2295223a249143ac8c1e821678bf760129 100644 (file)
@@ -140,7 +140,7 @@ Molecule::ly_set_molecule_extent_x (SCM mol, SCM axis, SCM np)
   if (m && ly_axis_p (axis) && ly_number_pair_p (np))
     {
       Interval iv = ly_scm2interval (np);
-      m->dim_[Axis (gh_scm2int (axis))] = ly_scm2interval (np);
+      m->dim_[Axis (gh_scm2int (axis))] = iv;
     }
   else
     warning ("ly-set-molecule-extent!: invalid arguments");
@@ -245,11 +245,13 @@ IMPLEMENT_SIMPLE_SMOBS (Molecule);
 int
 Molecule::print_smob (SCM s, SCM port, scm_print_state *)
 {
-  Molecule  *r = (Molecule *) ly_cdr (s);
      
   scm_puts ("#<Molecule ", port);
-  /*  String str (r->str ());
-  scm_puts ((char *)str.ch_C (), port);*/
+#if 0
+  Molecule  *r = (Molecule *) ly_cdr (s);
+  String str (r->str ());
+  scm_puts ((char *)str.ch_C (), port);
+#endif
   scm_puts (" >", port);
   
   return 1;
index 21c205532495045df4467a20ab6cb4d7e44990ac..239db9779fafb80fa5a5e5e7fa4d5e537da82199 100644 (file)
@@ -22,8 +22,7 @@
 class Multi_measure_rest_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Multi_measure_rest_engraver ();
+  TRANSLATOR_DECLARATIONS(Multi_measure_rest_engraver);
 
 protected:
   virtual bool try_music (Music*);
@@ -43,7 +42,7 @@ private:
   Spanner *lastrest_p_;
 };
 
-ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver);
+
 
 Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
 {
@@ -179,3 +178,12 @@ Multi_measure_rest_engraver::finalize ()
   if (lastrest_p_)
     typeset_grob (lastrest_p_);
 }
+
+ENTER_DESCRIPTION(Multi_measure_rest_engraver,
+/* descr */       "Engraves multi-measure rests that are produced with @code{R}.  Reads
+measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
+",
+/* creats*/       "MultiMeasureRest",
+/* acks  */       "",
+/* reads */       "currentBarNumber currentCommandColumn measurePosition",
+/* write */       "");
index ca3f8fe813c39dc17b5a106ce977123eb7a8ea6b..c9955845dace681e762e5c343f7e2cbc7226d244 100644 (file)
@@ -101,9 +101,9 @@ print_alist (SCM a, SCM port)
 {
   for (SCM s = a; gh_pair_p (s); s = ly_cdr (s))
     {
-      scm_display (gh_caar (s), port);
+      scm_display (ly_caar (s), port);
       scm_puts (" = ", port); 
-      scm_write (gh_cdar (s), port);
+      scm_write (ly_cdar (s), port);
       scm_puts ("\n", port);
     }
 }
index a3d2a62fa2dc654dcb9d07d83f8c9b9c3cf1d5d5..587b5548b264d7ff2d92234da8c678b53064feee 100644 (file)
@@ -49,7 +49,7 @@ static Keyword_ent the_key_tab[]={
   {"denies", DENIES},
   {"duration", DURATION},
   {"dynamicscript", DYNAMICSCRIPT},
-  {"elementdescriptions", ELEMENTDESCRIPTIONS},
+  {"grobdescriptions", GROBDESCRIPTIONS},
   {"figures",FIGURES},
   {"grace", GRACE},
   {"glissando", GLISSANDO},
index 9e699a5e82ca651456144342d38eb60d9ac93d8e..c850a721041932d89cc7c333790a7af35de60fc7 100644 (file)
@@ -122,8 +122,8 @@ My_lily_parser::paper_description ()
   SCM l = SCM_EOL;
   for (SCM s = al ; gh_pair_p (s); s = ly_cdr (s))
     {
-      Translator_def * td = unsmob_translator_def (gh_cdar (s));
-      l = gh_cons (gh_cons (gh_caar (s), td->to_alist ()),  l);
+      Translator_def * td = unsmob_translator_def (ly_cdar (s));
+      l = gh_cons (gh_cons (ly_caar (s), td->to_alist ()),  l);
     }
   return l;  
 }
index 3daabc0672f73a830a0b05ca5488b8c8727c1251..682dc0847fcee1b78fdd06dd15396b8e1f01a606 100644 (file)
@@ -55,7 +55,7 @@ New_spacing_spanner::do_measure (Grob*me, Link_array<Grob> *cols)
        cols->del (i);
     }
   
-  int n = 0;
+
   for (int i =0 ; i < cols->size (); i++)  
     {
       if (Paper_column::musical_b (cols->elem (i)))
@@ -146,8 +146,8 @@ cout << "params for cols " << Paper_column::rank_i (l) << " " << Paper_column::r
          */
          for (SCM s = seq; gh_pair_p (s); s = ly_cdr (s))
            {
-             Grob *lm = unsmob_grob (gh_caar (s));
-             Grob *rm = unsmob_grob (gh_cdar (s));
+             Grob *lm = unsmob_grob (ly_caar (s));
+             Grob *rm = unsmob_grob (ly_cdar (s));
 
              // TODO; configgable.
              hinterfleisch += -headwid + Separation_item::my_width (lm)[RIGHT] -
index 58f52a1f35467d2ba515f430a36d43aaa8f383ee..52ac159c93b2a6411b7bba03dc0ca2deb18f76fc 100644 (file)
@@ -29,8 +29,7 @@
 class Note_head_line_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Note_head_line_engraver ();
+  TRANSLATOR_DECLARATIONS(Note_head_line_engraver);
 
 protected:
   virtual void acknowledge_grob (Grob_info);
@@ -76,9 +75,9 @@ Note_head_line_engraver::try_music (Music* m)
 void
 Note_head_line_engraver::acknowledge_grob (Grob_info info)
 {
-  if (Rhythmic_head::has_interface (info.elem_l_))
+  if (Rhythmic_head::has_interface (info.grob_l_))
     {
-      head_ = info.elem_l_;
+      head_ = info.grob_l_;
       if (to_boolean (get_property ("followVoice")))
        {
          Translator_group  * tr = daddy_trans_l_;
@@ -148,5 +147,12 @@ Note_head_line_engraver::stop_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Note_head_line_engraver);
 
+
+ENTER_DESCRIPTION(Note_head_line_engraver,
+/* descr */       "Engrave a line between two note heads, for example a glissando.
+If followVoice is set, staff switches also generate a line.",
+/* creats*/       "Glissando VoiceFollower",
+/* acks  */       "rhythmic-head-interface",
+/* reads */       "followVoice",
+/* write */       "");
index 3877dad1d0e224bdd838126bf2bf9f4282889421..8fc1e6f13a111838c6612adc94a7d6671cd896c6 100644 (file)
@@ -26,7 +26,7 @@ class Note_heads_engraver : public Engraver
   Link_array<Note_req> note_req_l_arr_;
   Moment note_end_mom_;
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Note_heads_engraver);
 
 protected:
   virtual void start_translation_timestep ();
@@ -151,7 +151,12 @@ Note_heads_engraver::start_translation_timestep ()
     }
 }
 
+Note_heads_engraver::Note_heads_engraver()
+{}
 
-
-ADD_THIS_TRANSLATOR (Note_heads_engraver);
-
+ENTER_DESCRIPTION(Note_heads_engraver,
+/* descr */       "Generate one or more noteheads from Music of type Note_req.",
+/* creats*/       "NoteHead Dots",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index c6e0261b2c389079b4476b563886d0d7b4e22031..6cb890a6d0001b2c9ec6afe1cffd5a86f43c2bb5 100644 (file)
@@ -14,7 +14,8 @@
 class Note_name_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Note_name_engraver);
+
   Link_array<Note_req> req_l_arr_;
   Link_array<Item> texts_;
   virtual bool  try_music (Music*m);
@@ -65,4 +66,14 @@ Note_name_engraver::stop_translation_timestep ()
   req_l_arr_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Note_name_engraver);
+
+Note_name_engraver::Note_name_engraver()
+{
+}
+
+ENTER_DESCRIPTION(Note_name_engraver,
+/* descr */       "",
+/* creats*/       "NoteName",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index c5c522405a6d1d32efe956ebc670c7a9ce938127..a7d2907daeddb2e70b60030612f75a13c2a65abd 100644 (file)
@@ -18,7 +18,7 @@ Convert reqs to audio notes.
 */
 class Note_performer : public Performer {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Note_performer);
   
 protected:
   virtual bool try_music (Music *req_l) ;
@@ -33,8 +33,6 @@ private:
   Array<Audio_note*> delayed_p_arr_;
 };
 
-ADD_THIS_TRANSLATOR (Note_performer);
-
 void 
 Note_performer::create_audio_elements ()
 {
@@ -126,3 +124,9 @@ Note_performer::try_music (Music* req_l)
     }
   return false;
 }
+
+ENTER_DESCRIPTION(Note_performer,"","","","","");
+
+Note_performer::Note_performer()
+{
+}
index f022bf56d7a072ae7c72c7a2a0096b184ac7347e..527b0c103a98d96e777369efb184b208615329af 100644 (file)
@@ -13,8 +13,7 @@
 
 class Output_property_engraver : public Engraver
 {
-public:
-  VIRTUAL_COPY_CONS (Translator);
+TRANSLATOR_DECLARATIONS(Output_property_engraver);
 protected:
 
   /*
@@ -61,12 +60,12 @@ Output_property_engraver::acknowledge_grob (Grob_info inf)
        should typecheck pred. 
        */
       SCM result=gh_apply (pred,
-                          scm_list_n (inf.elem_l_->self_scm (), SCM_UNDEFINED));
+                          scm_list_n (inf.grob_l_->self_scm (), SCM_UNDEFINED));
       if (to_boolean (result))
        {
          SCM sym = o->get_mus_property ("grob-property");
          SCM val = o->get_mus_property ("grob-value");
-         inf.elem_l_->set_grob_property (sym, val);
+         inf.grob_l_->set_grob_property (sym, val);
        }
     }
 }
@@ -77,4 +76,14 @@ Output_property_engraver::stop_translation_timestep ()
   props_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Output_property_engraver);
+Output_property_engraver::Output_property_engraver()
+{
+}
+
+ENTER_DESCRIPTION(Output_property_engraver,
+/* descr */       "Interpret Music of Output_property type, and apply a function
+to any Graphic objects that satisfies the predicate.",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index 84bb78ff44cbe60bbdcda2b80dde26b1d00fabf1..551a757b714634feb0c3e408ff45f4126223b04a 100644 (file)
@@ -157,8 +157,8 @@ Paper_def::font_descriptions ()const
   SCM l = SCM_EOL;
   for (SCM s = scaled_fonts_; gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM desc = gh_caar (s);
-      SCM mdesc = unsmob_metrics (gh_cdar (s))->description_;
+      SCM desc = ly_caar (s);
+      SCM mdesc = unsmob_metrics (ly_cdar (s))->description_;
 
       l = gh_cons (gh_cons (mdesc, desc), l);
     }
index e88c81aaa407894fe51c7bf8021dd94b901af4c8..157115741b1b174ee7c94e76fcfbecedc85abff8 100644 (file)
@@ -123,6 +123,19 @@ Paper_outputter::output_scheme (SCM scm)
   dump_scheme (scm);
 }
 
+void flatten_write (SCM x, Paper_stream*ps)
+{
+  if (ly_pair_p (x))
+    {
+      flatten_write (ly_car (x),ps);
+      flatten_write (ly_cdr (x),ps);
+    }
+  else if (gh_string_p (x))
+    {
+      *ps  << String ( SCM_STRING_CHARS(x)) ;
+    }
+}
+
 
 /*
   UGH.
@@ -140,10 +153,7 @@ Paper_outputter::dump_scheme (SCM s)
   else
     {
       SCM result = scm_primitive_eval (s);
-      char *c=gh_scm2newstr (result, NULL);
-  
-      *stream_p_ << c;
-      free (c);
+      flatten_write (result, stream_p_);
     }
 }
 
@@ -153,8 +163,8 @@ Paper_outputter::output_scope (Scope *scope, String prefix)
   SCM al = scope->to_alist ();
   for (SCM s = al ; gh_pair_p (s); s = ly_cdr (s))
     {
-      SCM k = gh_caar (s);
-      SCM v = gh_cdar (s);
+      SCM k = ly_caar (s);
+      SCM v = ly_cdar (s);
       String s = ly_symbol2string (k);
 
       
index 5afb5648a1b1175381857039a51443db0644c002..7bdcee9d0dc555deeb7271574d58516a26e1b852 100644 (file)
@@ -101,7 +101,7 @@ set_music_properties (Music *p, SCM a)
 {
   for (SCM k = a; gh_pair_p (k); k = ly_cdr (k))
        {
-       p->set_mus_property (gh_caar (k), gh_cdar (k));
+       p->set_mus_property (ly_caar (k), ly_cdar (k));
        }
 }
 
@@ -188,7 +188,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token CONSISTS
 %token DURATION
 %token SEQUENTIAL
-%token ELEMENTDESCRIPTIONS
+%token GROBDESCRIPTIONS
 %token SIMULTANEOUS
 %token CONSISTSEND
 %token DENIES
@@ -383,11 +383,11 @@ notenames_body:
 
          SCM tab = scm_make_vector (gh_int2scm (i), SCM_EOL);
          for (SCM s = $1; gh_pair_p (s); s = ly_cdr (s)) {
-               SCM pt = gh_cdar (s);
+               SCM pt = ly_cdar (s);
                if (!unsmob_pitch (pt))
                        THIS->parser_error ("Need pitch object.");
                else
-                       scm_hashq_set_x (tab, gh_caar (s), pt);
+                       scm_hashq_set_x (tab, ly_caar (s), pt);
          }
 
          $$ = tab;
@@ -520,11 +520,11 @@ translator_spec_body:
                Translator_def*td = unsmob_translator_def ($$);
                td->type_aliases_ = gh_cons ($3, td->type_aliases_);
        }
-       | translator_spec_body ELEMENTDESCRIPTIONS embedded_scm {
+       | translator_spec_body GROBDESCRIPTIONS embedded_scm {
+               Translator_def*td = unsmob_translator_def($$);
+               // td->add_property_assign (ly_symbol2scm ("allGrobDescriptions"), $3);
                for (SCM p = $3; gh_pair_p (p); p = ly_cdr (p))
-                       unsmob_translator_def ($$)
-                       ->add_property_assign (scm_symbol_to_string (gh_caar (p)), gh_cdar (p));
-
+                       td->add_property_assign (scm_symbol_to_string (ly_caar (p)), ly_cdar (p));
        }
        | translator_spec_body CONSISTSEND STRING  {
                unsmob_translator_def ($$)->add_last_element ( $3);
index 193a350c6cc6b6f09b9aca4be2ae9cbe1d36d111..c96237a0c1aa8669e1ea9c86e3b4b652e9e46382 100644 (file)
@@ -36,8 +36,7 @@ class Percent_repeat_engraver : public Engraver
 {
   void typeset_perc ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Percent_repeat_engraver ();
+  TRANSLATOR_DECLARATIONS(Percent_repeat_engraver);
 protected:
   Repeated_music * repeat_;
 
@@ -244,6 +243,12 @@ Percent_repeat_engraver::stop_translation_timestep ()
   typeset_perc ();
 }
 
-ADD_THIS_TRANSLATOR (Percent_repeat_engraver);
 
 
+
+ENTER_DESCRIPTION(Percent_repeat_engraver,
+/* descr */       "Make beat, whole bar and double bar repeats.",
+/* creats*/       "PercentRepeat RepeatSlash DoublePercentRepeat",
+/* acks  */       "",
+/* reads */       "measureLength currentCommandColumn",
+/* write */       "");
index c13d65505c58a6f8d780d4743332ca353306c73f..20f2bc7ff04311d2eefa4dc55d0c078c4987d874 100644 (file)
 #include "debug.hh"
 
 
-ADD_THIS_TRANSLATOR (Performer_group_performer);
+ENTER_DESCRIPTION(Performer_group_performer,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
+
 
 
 void
@@ -82,3 +88,5 @@ Performer_group_performer::do_announces ()
       announce_info_arr_.clear ();
     }
 }
+
+Performer_group_performer::Performer_group_performer(){}
index ed78313be55c5664b4a02c61eb69f918b7dcfc16..f402d74f979af0435cfe614e822fbf4a9bf7e7f0 100644 (file)
@@ -29,8 +29,8 @@ protected:
   virtual void create_grobs ();
 
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Phrasing_slur_engraver ();
+  TRANSLATOR_DECLARATIONS(Phrasing_slur_engraver);
+  
 };
 
 Phrasing_slur_engraver::Phrasing_slur_engraver ()
@@ -86,9 +86,9 @@ Phrasing_slur_engraver::try_music (Music *req_l)
 void
 Phrasing_slur_engraver::acknowledge_grob (Grob_info info)
 {
-  if (Note_column::has_interface (info.elem_l_))
+  if (Note_column::has_interface (info.grob_l_))
     {
-      Grob *e =info.elem_l_;
+      Grob *e =info.grob_l_;
       for (int i = 0; i < phrasing_slur_l_stack_.size (); i++)
        Slur::add_column (phrasing_slur_l_stack_[i], e);
       for (int i = 0; i < end_phrasing_slur_l_arr_.size (); i++)
@@ -180,4 +180,10 @@ Phrasing_slur_engraver::start_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Phrasing_slur_engraver);
+
+ENTER_DESCRIPTION(Phrasing_slur_engraver,
+/* descr */       "Print phrasing slurs. Similar to Slur_engraver",
+/* creats*/       "PhrasingSlur",
+/* acks  */       "note-column-interface",
+/* reads */       "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* write */       "");
index df3238a6355a400aedcd77447210bcc9d492055a..cd83bae84089c66f5fe934b14d1663d0f3506ec3 100644 (file)
@@ -20,8 +20,7 @@
 class Piano_pedal_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Piano_pedal_engraver ();
+  TRANSLATOR_DECLARATIONS(Piano_pedal_engraver);
   ~Piano_pedal_engraver ();
 protected:
   virtual void initialize ();
@@ -44,7 +43,7 @@ private:
   Pedal_info *info_list_;
 };
 
-ADD_THIS_TRANSLATOR (Piano_pedal_engraver);
+
 
 Piano_pedal_engraver::Piano_pedal_engraver ()
 {
@@ -88,17 +87,17 @@ Piano_pedal_engraver::acknowledge_grob (Grob_info info)
     {
       if (p->item_p_)
        {
-         if (Rhythmic_head::has_interface (info.elem_l_))
+         if (Rhythmic_head::has_interface (info.grob_l_))
            {
-             Side_position_interface::add_support (p->item_p_, info.elem_l_);
+             Side_position_interface::add_support (p->item_p_, info.grob_l_);
 
              if (Side_position_interface::get_axis (p->item_p_) == X_AXIS
                  && !p->item_p_->parent_l (Y_AXIS))
-               p->item_p_->set_parent (info.elem_l_, Y_AXIS);
+               p->item_p_->set_parent (info.grob_l_, Y_AXIS);
            }
-         if (Stem::has_interface (info.elem_l_))
+         if (Stem::has_interface (info.grob_l_))
            {
-             Side_position_interface::add_support (p->item_p_,info.elem_l_);
+             Side_position_interface::add_support (p->item_p_,info.grob_l_);
            }
        }
     }
@@ -143,7 +142,7 @@ Piano_pedal_engraver::create_grobs ()
            }
          else
            {
-             s = gh_cadr (strings);
+             s = ly_cadr (strings);
            }
          p->start_req_l_ = p->req_l_drul_[START];
        }
@@ -155,7 +154,7 @@ Piano_pedal_engraver::create_grobs ()
            }
          else
            {
-             s = gh_caddr (strings);
+             s = ly_caddr (strings);
            }
          p->start_req_l_ = 0;
        }
@@ -222,3 +221,9 @@ Piano_pedal_engraver::start_translation_timestep ()
       p->req_l_drul_[START] = 0;
     }
 }
+ENTER_DESCRIPTION(Piano_pedal_engraver,
+/* descr */       "Engrave piano pedal symbols.",
+/* creats*/       "SostenutoPedal SustainPedal UnaCordaPedal",
+/* acks  */       "rhythmic-head-interface stem-interface",
+/* reads */       "pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings",
+/* write */       "");
index 8fe532e60a82e3b6030b8d197993382b0a705941..798877414ba1fc4ae6f519a61738a7e526955f6d 100644 (file)
@@ -24,8 +24,7 @@ class Piano_pedal_performer : public Performer
   };
 
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Piano_pedal_performer ();
+  TRANSLATOR_DECLARATIONS(Piano_pedal_performer);
   ~Piano_pedal_performer ();
   
 protected:
@@ -40,8 +39,6 @@ private:
   Pedal_info * info_alist_;
 };
 
-ADD_THIS_TRANSLATOR (Piano_pedal_performer);
-
 Piano_pedal_performer::Piano_pedal_performer ()
 {
   info_alist_ = 0;
@@ -142,3 +139,4 @@ Piano_pedal_performer::try_music (Music* r)
     }
   return false;
 }
+ENTER_DESCRIPTION (Piano_pedal_performer, "","","","","" );
index 4ab2d01f0a502b4dbdada80e674bbd45ae6ef145..6ea465e78151573eed6aa06ed1742d3d4f7c1fbc 100644 (file)
@@ -13,7 +13,7 @@
 
 class Pitch_squash_engraver : public Engraver {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Pitch_squash_engraver);
   virtual void acknowledge_grob (Grob_info);
 };
 
@@ -22,12 +22,24 @@ void
 Pitch_squash_engraver::acknowledge_grob (Grob_info i)
 {
   SCM newpos = get_property ("squashedPosition");
-  if (Note_head::has_interface (i.elem_l_))
+  if (Note_head::has_interface (i.grob_l_))
     {
-      i.elem_l_->set_grob_property ("staff-position", newpos);
+      i.grob_l_->set_grob_property ("staff-position", newpos);
     }
 }
 
-ADD_THIS_TRANSLATOR (Pitch_squash_engraver);
 
 
+Pitch_squash_engraver::Pitch_squash_engraver()
+{
+}
+
+ENTER_DESCRIPTION(Pitch_squash_engraver,
+/* descr */       "Treat all pitches as middle C.  Note that the notes move, but
+the locations of accidentals stay the same. 
+Set the position field of all note heads to zero. This useful for
+making a single line staff that demonstrates the rhythm of a melody.",
+/* creats*/       "",
+/* acks  */       "note-head-interface",
+/* reads */       "squashedPosition",
+/* write */       "");
index 311ef312e9ccdbc6402874784a5eab4f31edbf30..4cc35e910c55216ec673c75eb9cb9271baa7e073 100644 (file)
@@ -70,8 +70,7 @@ inline int compare (PHead_melodic_tuple const &a, PHead_melodic_tuple const &b)
 
 class Porrectus_engraver : public Engraver {
 public:
-  Porrectus_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Porrectus_engraver);
   
 protected:
   virtual bool try_music (Music *req_l);
@@ -108,12 +107,12 @@ Porrectus_engraver::try_music (Music *m)
 void
 Porrectus_engraver::acknowledge_grob (Grob_info info_l_)
 {
-  if (Rhythmic_head::has_interface (info_l_.elem_l_))
+  if (Rhythmic_head::has_interface (info_l_.grob_l_))
     {
       Note_req *note_req_l_ = dynamic_cast <Note_req *> (info_l_.req_l_);
       if (!note_req_l_)
        return;
-      right_heads_.push (PHead_melodic_tuple (info_l_.elem_l_, note_req_l_,
+      right_heads_.push (PHead_melodic_tuple (info_l_.grob_l_, note_req_l_,
                                              now_mom () +
                                              note_req_l_->length_mom ()));
     }
@@ -181,7 +180,7 @@ Porrectus_engraver::start_translation_timestep ()
     left_heads_.push (past_notes_pq_.get ());
 }
 
-ADD_THIS_TRANSLATOR (Porrectus_engraver);
+
 
 // TODO: PHead_melodic_tuple is duplicated code from tie-engraver.cc.
 // Maybe put this into public class?
@@ -222,3 +221,9 @@ PHead_melodic_tuple::time_compare (PHead_melodic_tuple const&h1,
   int result = Moment::compare(h1.end_,  h2.end_);
   return result;
 }
+ENTER_DESCRIPTION(Porrectus_engraver,
+/* descr */       "Join adjacent notes to a porrectus ligature.",
+/* creats*/       "Porrectus",
+/* acks  */       "rhythmic-head-interface",
+/* reads */       "",
+/* write */       "");
index 044f9613c4d459d7f110613362187144cf4f2341..775da363b46902b1a710bf2df9a6adfaa191a0e3 100644 (file)
@@ -32,8 +32,7 @@ protected:
   virtual void finalize ();
 public:
   ~Property_engraver ();
-  Property_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Property_engraver);
 };
 
 
@@ -70,19 +69,19 @@ Property_engraver::initialize ()
 void
 Property_engraver::acknowledge_grob (Grob_info i)
 {
- SCM ifs = i.elem_l_->get_grob_property ("interfaces");
+ SCM ifs = i.grob_l_->get_grob_property ("interfaces");
   SCM props;
   for (; gh_pair_p (ifs); ifs = ly_cdr (ifs))
     {      
       if (prop_dict_->try_retrieve (ly_car (ifs), &props))
        {
-         apply_properties (props,i.elem_l_, i.origin_trans_l_->daddy_trans_l_);
+         apply_properties (props,i.grob_l_, i.origin_trans_l_->daddy_trans_l_);
        }
     }
 
   if (prop_dict_->try_retrieve (ly_symbol2scm ("all"), &props))
     {
-      apply_properties (props, i.elem_l_, i.origin_trans_l_->daddy_trans_l_);
+      apply_properties (props, i.grob_l_, i.origin_trans_l_->daddy_trans_l_);
     }
 }
 
@@ -100,8 +99,8 @@ Property_engraver::apply_properties (SCM p, Grob *e, Translator_group*origin)
       
       SCM entry = ly_car (p);
       SCM prop_sym = ly_car (entry);
-      SCM type_p   = gh_cadr (entry);
-      SCM elt_prop_sym = gh_caddr (entry);
+      SCM type_p   = ly_cadr (entry);
+      SCM elt_prop_sym = ly_caddr (entry);
 
       SCM preset = scm_assq (elt_prop_sym, e->mutable_property_alist_);
       if (preset != SCM_BOOL_F)
@@ -152,4 +151,14 @@ Property_engraver::apply_properties (SCM p, Grob *e, Translator_group*origin)
     }
 }
 
-ADD_THIS_TRANSLATOR (Property_engraver);
+
+ENTER_DESCRIPTION(Property_engraver,
+/* descr */       "This is a engraver that converts property settings into
+back-end grob-property settings. Example: Voice.stemLength will set
+#'length in all Stem objects.
+
+Due to CPU and memory requirements, the use of this engraver is deprecated.",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "Generic_property_list",
+/* write */       "");
index e6cb1300a3336ca11c9452458654b759f1e68cde..c6590c832ef3a9c99f579a06ee46915c2133cf7b 100644 (file)
@@ -13,9 +13,7 @@
 class Regular_spacing_engraver : public Engraver
 {
 public:
-  Regular_spacing_engraver ();
-  VIRTUAL_COPY_CONS(Translator);
-
+  TRANSLATOR_DECLARATIONS(Regular_spacing_engraver);
   Moment last_moment_;
   SCM last_col_;
 protected:
@@ -57,4 +55,10 @@ Regular_spacing_engraver::process_music ()
 }
 
 
-ADD_THIS_TRANSLATOR(Regular_spacing_engraver);
+ENTER_DESCRIPTION(Regular_spacing_engraver,
+/* descr */       ".",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "regularSpacingDelta",
+/* write */       "");
+
index a134dad1ee0444c91c23269986872fb6d5cf6a2f..24f8d723d483f93b2c0b7a2c2da02ee5247bf482 100644 (file)
@@ -25,8 +25,7 @@
 class Repeat_acknowledge_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Repeat_acknowledge_engraver ();
+  TRANSLATOR_DECLARATIONS(Repeat_acknowledge_engraver);
 
   virtual void start_translation_timestep ();
   virtual void process_music ();
@@ -101,4 +100,11 @@ Repeat_acknowledge_engraver::process_music ()
     }
 }
 
-ADD_THIS_TRANSLATOR (Repeat_acknowledge_engraver);
+
+ENTER_DESCRIPTION(Repeat_acknowledge_engraver,
+/* descr */       "Acknowledge repeated music, and convert the contents of
+repeatCommands ainto an appropriate setting for whichBar",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "repeatCommands whichBar",
+/* write */       "");
index 1443d70790c8f7a8c63af9f4bf0b66dfcee551c7..1569df678477b083012bb74a9f36e7fa6d730a83 100644 (file)
@@ -22,12 +22,10 @@ protected:
   virtual void create_grobs ();
   virtual void stop_translation_timestep ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Rest_collision_engraver ();
-  
+  TRANSLATOR_DECLARATIONS(Rest_collision_engraver);  
 };
 
-ADD_THIS_TRANSLATOR (Rest_collision_engraver);
+
 
 Rest_collision_engraver::Rest_collision_engraver ()
 {
@@ -50,8 +48,8 @@ Rest_collision_engraver::create_grobs ()
 void
 Rest_collision_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Note_column::has_interface (i.elem_l_))
-    note_column_l_arr_.push (i.elem_l_);
+  if (Note_column::has_interface (i.grob_l_))
+    note_column_l_arr_.push (i.grob_l_);
 }
 
 void
@@ -64,3 +62,9 @@ Rest_collision_engraver::stop_translation_timestep ()
     }
   note_column_l_arr_.clear ();
 }
+ENTER_DESCRIPTION(Rest_collision_engraver,
+/* descr */       "Handles collisions of rests.",
+/* creats*/       "RestCollision",
+/* acks  */       "note-column-interface",
+/* reads */       "",
+/* write */       "");
index 702b98b5aa96f868b6e646c553c5155673bcb1fc..55e1c8bde05014877b66b0139bab40f6c3db63fd 100644 (file)
@@ -26,8 +26,7 @@ protected:
 
 public:
   
-  VIRTUAL_COPY_CONS (Translator);
-  Rest_engraver ();
+  TRANSLATOR_DECLARATIONS(Rest_engraver);
 };
 
 
@@ -104,4 +103,10 @@ Rest_engraver::try_music (Music *m)
 }
 
 
-ADD_THIS_TRANSLATOR (Rest_engraver);
+
+ENTER_DESCRIPTION(Rest_engraver,
+/* descr */       "",
+/* creats*/       "Rest Dots",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index 1ebea18a43b3b8d0bc7d6729ca140c52defcbd85..8c6faa3d704334bf08f8752777034d43b0730c58 100644 (file)
@@ -22,15 +22,14 @@ class Rhythmic_column_engraver :public Engraver
   Grob * stem_l_;
   Grob *ncol_p_;
   Grob *dotcol_l_;
-
+  
+  TRANSLATOR_DECLARATIONS(Rhythmic_column_engraver);
 protected:
-  VIRTUAL_COPY_CONS (Translator);
+
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
-public:
-  Rhythmic_column_engraver ();
   
 };
 
@@ -86,7 +85,7 @@ Rhythmic_column_engraver::create_grobs ()
 void
 Rhythmic_column_engraver::acknowledge_grob (Grob_info i)
 {
-  Item * item =  dynamic_cast <Item *> (i.elem_l_);
+  Item * item =  dynamic_cast <Item *> (i.grob_l_);
   if (item && Stem::has_interface (item))
     {
       stem_l_ = item;
@@ -118,5 +117,11 @@ Rhythmic_column_engraver::start_translation_timestep ()
   stem_l_ =0;
 }
 
-ADD_THIS_TRANSLATOR (Rhythmic_column_engraver);
 
+
+ENTER_DESCRIPTION(Rhythmic_column_engraver,
+/* descr */       "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
+/* creats*/       "NoteColumn",
+/* acks  */       "stem-interface note-head-interface dot-column-interface",
+/* reads */       "",
+/* write */       "");
index 733aa5a3c045400fefae61d2ed8387c2191a3b8b..814bd4d4484031e303b4f1026ec368387f20f0b4 100644 (file)
@@ -131,7 +131,7 @@ void
 Score_engraver::announce_grob (Grob_info info)
 {
   announce_info_arr_.push (info);
-  pscore_p_->line_l_->typeset_grob (info.elem_l_);
+  pscore_p_->line_l_->typeset_grob (info.grob_l_);
 }
 
 /* All elements are propagated to the top upon announcement. If
@@ -145,9 +145,7 @@ Score_engraver::announce_grob (Grob_info info)
 void
 Score_engraver::do_announces ()
 {
-  //////  do
-    Engraver_group_engraver::do_announces ();
-    //////while (announce_info_arr_.size ());
+  Engraver_group_engraver::do_announces ();
 }
 
 
@@ -295,6 +293,23 @@ Score_engraver::forbid_breaks ()
   command_column_l_->remove_grob_property ("breakable");
 }
 
-ADD_THIS_TRANSLATOR (Score_engraver);
 
 
+
+ENTER_DESCRIPTION(Score_engraver,
+/* descr */       "Top level engraver. Takes care of generating columns and the complete  system (ie. LineOfScore)
+
+
+This engraver decides whether a column is breakable. The default is
+that a column is always breakable. However, when every Bar_engraver
+that does not have a barline at a certain point will call
+Score_engraver::forbid_breaks to stop linebreaks.  In practice, this
+means that you can make a breakpoint by creating a barline (assuming
+that there are no beams or notes that prevent a breakpoint.)
+
+
+",
+/* creats*/       "LineOfScore PaperColumn NonMusicalPaperColumn",
+/* acks  */       "grob-interface",
+/* reads */       "currentMusicalColumn currentCommandColumn",
+/* write */       "");
index b1267acdce216ac3b2bdc6d164eea1c012573acc..ea2926c5bc45b176a162f5c4d065587201b8c85a 100644 (file)
 #include "debug.hh"
 #include "translator-def.hh"
 
-ADD_THIS_TRANSLATOR (Score_performer);
+
+
+ENTER_DESCRIPTION(Score_performer,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
 
 
 Score_performer::Score_performer ()
index 0b6680ae95137a3df914a9af7b157acfb953279a..024810c1b567532f5d7d5480487cbecba170c2aa 100644 (file)
@@ -51,7 +51,9 @@ Score::Score (Score const &s)
   /*
     TODO: this is not very elegant.... 
    */
-  store_locations_global_b = (scm_c_eval_string ("point-and-click") !=  SCM_BOOL_F);
+  /*  store_locations_global_b = (scm_c_eval_string ("point-and-click") !=  SCM_BOOL_F);*/
+  store_locations_global_b = (gh_eval_str ("point-and-click") !=  SCM_BOOL_F);
+      
 
   Music * m =unsmob_music (s.music_);
   music_ =  m?m->clone ()->self_scm () : SCM_EOL;
@@ -181,7 +183,7 @@ Score::mark_smob (SCM s)
 }
 
 int
-Score::print_smob (SCM s, SCM p, scm_print_state*)
+Score::print_smob (SCM , SCM p, scm_print_state*)
 {
   scm_puts ("#<Score>", p);
 
index 93083a1cb0ab7232add7fcb278db3ad997c34014..b6b53162cf242aa5f50e18695aee92eb022af6cb 100644 (file)
@@ -21,8 +21,7 @@ class Script_column_engraver : public Engraver
   Link_array<Item> script_l_arr_;
 
 public:
-  Script_column_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Script_column_engraver);
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
@@ -56,11 +55,11 @@ Script_column_engraver::start_translation_timestep ()
 void
 Script_column_engraver::acknowledge_grob (Grob_info inf) 
 {
-  Item *thing = dynamic_cast<Item*> (inf.elem_l_);
-  if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME
+  Item *thing = dynamic_cast<Item*> (inf.grob_l_);
+  if (thing && Side_position_interface::has_interface (inf.grob_l_)) // ugh FIXME
     {
       if (!Item::breakable_b (thing)
-         && Side_position_interface::get_axis (inf.elem_l_) == Y_AXIS)
+         && Side_position_interface::get_axis (inf.grob_l_) == Y_AXIS)
        {
          script_l_arr_.push (thing);
        }
@@ -85,4 +84,10 @@ Script_column_engraver::create_grobs ()
       script_l_arr_.clear ();
     }
 }
-ADD_THIS_TRANSLATOR (Script_column_engraver);
+
+ENTER_DESCRIPTION(Script_column_engraver,
+/* descr */       "",
+/* creats*/       "ScriptColumn",
+/* acks  */       "side-position-interface",
+/* reads */       "",
+/* write */       "");
index ef0c8266affba90d9a85b1ddce98f0c7691ab317..90e448e1003066dbdafc8a83636262f115bb3d33 100644 (file)
@@ -17,8 +17,7 @@ class Script_engraver : public Engraver
   Link_array<Articulation_req> script_req_l_arr_;
 
 public:
-  VIRTUAL_COPY_CONS (Translator);
-
+  TRANSLATOR_DECLARATIONS(Script_engraver);
 protected:
   virtual bool try_music (Music*);
   virtual void initialize ();
@@ -116,18 +115,18 @@ Script_engraver::process_music ()
 void
 Script_engraver::acknowledge_grob (Grob_info inf)
 {
-  if (Stem::has_interface (inf.elem_l_))
+  if (Stem::has_interface (inf.grob_l_))
     {
       for (int i=0; i < script_p_arr_.size (); i++)
        {
          Grob*e = script_p_arr_[i];
 
-         e->set_grob_property ("direction-source", inf.elem_l_->self_scm ());
-         e->add_dependency (inf.elem_l_);
-         Side_position_interface::add_support (e, inf.elem_l_);
+         e->set_grob_property ("direction-source", inf.grob_l_->self_scm ());
+         e->add_dependency (inf.grob_l_);
+         Side_position_interface::add_support (e, inf.grob_l_);
        }
     }
-  else if (Rhythmic_head::has_interface (inf.elem_l_))
+  else if (Rhythmic_head::has_interface (inf.grob_l_))
     {
       for (int i=0; i < script_p_arr_.size (); i++)
        {
@@ -135,15 +134,15 @@ Script_engraver::acknowledge_grob (Grob_info inf)
          
          if (!e->parent_l (X_AXIS))
            {
-             e->set_parent (inf.elem_l_, X_AXIS);
+             e->set_parent (inf.grob_l_, X_AXIS);
            }
          if (Side_position_interface::get_axis (e) == X_AXIS
              && !e->parent_l (Y_AXIS))
            {
-             e->set_parent (inf.elem_l_, Y_AXIS);
-             e->add_dependency (inf.elem_l_); // ??
+             e->set_parent (inf.grob_l_, Y_AXIS);
+             e->add_dependency (inf.grob_l_); // ??
            }
-         Side_position_interface::add_support (e,inf.elem_l_);
+         Side_position_interface::add_support (e,inf.grob_l_);
        }
     }  
 }
@@ -169,6 +168,14 @@ Script_engraver::start_translation_timestep ()
   script_req_l_arr_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Script_engraver);
 
 
+Script_engraver::Script_engraver(){}
+
+ENTER_DESCRIPTION(Script_engraver,
+/* descr */       "    Handles note ornaments generated by @code{\\script}.  
+",
+/* creats*/       "Script",
+/* acks  */       "stem-interface rhythmic-head-interface",
+/* reads */       "scriptDefinitions scriptHorizontal",
+/* write */       "");
index 6c3811b8e2323d4a15aa4246277c13474f0cebc0..d36a852911a59c6bded27b26746485e24c05f94d 100644 (file)
@@ -27,8 +27,7 @@ protected:
   virtual void finalize ();
   virtual void stop_translation_timestep ();
 public:
-  Separating_line_group_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Separating_line_group_engraver);
 };
 
 Separating_line_group_engraver::Separating_line_group_engraver ()
@@ -58,7 +57,7 @@ Separating_line_group_engraver::finalize ()
 void
 Separating_line_group_engraver::acknowledge_grob (Grob_info i)
 {
-  Item * it = dynamic_cast <Item *> (i.elem_l_);
+  Item * it = dynamic_cast <Item *> (i.grob_l_);
   if (!it)
     return;
   if (it->parent_l (X_AXIS)
@@ -105,5 +104,11 @@ Separating_line_group_engraver::stop_translation_timestep ()
 
 
 
-ADD_THIS_TRANSLATOR (Separating_line_group_engraver);
 
+
+ENTER_DESCRIPTION(Separating_line_group_engraver,
+/* descr */       "Generates objects for computing spacing parameters.",
+/* creats*/       "SeparationItem SeparatingGroupSpanner",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index 9a28be14cab856a77e1bc743723301cad2315ed4..e787fd091b92ae0c7f3ff31e721c5ec7d156814f 100644 (file)
@@ -182,11 +182,11 @@ Simple_spacer::add_columns (Link_array<Grob> cols)
           !gh_pair_p (spring_params) && gh_pair_p (s);
           s = ly_cdr (s))
        {
-         Grob *other = unsmob_grob (gh_caar (s));
+         Grob *other = unsmob_grob (ly_caar (s));
          if (other != cols[i+1])
            continue;
 
-         spring_params = gh_cdar (s);
+         spring_params = ly_cdar (s);
        }
 
       Spring_description desc;
@@ -223,11 +223,11 @@ Simple_spacer::add_columns (Link_array<Grob> cols)
       for (SCM s = Spaceable_grob::get_minimum_distances (cols[i]);
           gh_pair_p (s); s = ly_cdr (s))
        {
-         Grob * other = unsmob_grob (gh_caar (s));
+         Grob * other = unsmob_grob (ly_caar (s));
          int oi = cols.find_i (other);
          if (oi >= 0)
            {
-             add_rod (i, oi, gh_scm2double (gh_cdar (s)));
+             add_rod (i, oi, gh_scm2double (ly_cdar (s)));
            }
        }
     }
index 6eb8973f7700daa1ea3ba53aa4460aa49b6e4ea2..f96a4cb56d65279979c2f974b4a05ccfc7f53938 100644 (file)
@@ -31,8 +31,7 @@ protected:
   virtual void create_grobs ();
 
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Slur_engraver ();
+  TRANSLATOR_DECLARATIONS(Slur_engraver);
 };
 
 Slur_engraver::Slur_engraver ()
@@ -94,9 +93,9 @@ Slur_engraver::set_melisma (bool m)
 void
 Slur_engraver::acknowledge_grob (Grob_info info)
 {
-  if (Note_column::has_interface (info.elem_l_))
+  if (Note_column::has_interface (info.grob_l_))
     {
-      Grob *e =info.elem_l_;
+      Grob *e =info.grob_l_;
       for (int i = 0; i < slur_l_stack_.size (); i++)
        Slur::add_column (slur_l_stack_[i], e);
       for (int i = 0; i < end_slur_l_arr_.size (); i++)
@@ -195,4 +194,10 @@ Slur_engraver::start_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Slur_engraver);
+
+ENTER_DESCRIPTION(Slur_engraver,
+/* descr */       "Build slurs from Slur_reqs",
+/* creats*/       "Slur",
+/* acks  */       "note-column-interface",
+/* reads */       "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* write */       "");
index f2035877bd5215d2db489a079ea11bcefd4d8d86..4cc9bf3e5a6aadc91eadd3b99ee8617d3532df67 100644 (file)
@@ -70,8 +70,8 @@ Slur::de_uglyfy (Grob*me, Slur_bezier_bow* bb, Real default_height)
       SCM up = me->get_grob_property ("de-uglify-parameters");
       
       Real c1 = gh_scm2double (ly_car (up));
-      Real c2 = gh_scm2double (gh_cadr (up));
-      Real c3 = gh_scm2double (gh_caddr (up)); 
+      Real c2 = gh_scm2double (ly_cadr (up));
+      Real c3 = gh_scm2double (ly_caddr (up)); 
       
       if (h > c1 * f)
        {
@@ -180,12 +180,12 @@ Slur::set_extremities (Grob *me)
          for (SCM s = me->get_grob_property ("extremity-rules");
               s != SCM_EOL; s = ly_cdr (s))
            {
-             SCM r = gh_call2 (gh_caar (s), me->self_scm (),
+             SCM r = gh_call2 (ly_caar (s), me->self_scm (),
                                 gh_int2scm ((int)dir));
              if (r != SCM_BOOL_F)
                {
                  index_set_cell (me->get_grob_property ("attachment"), dir,
-                                 gh_cdar (s));
+                                 ly_cdar (s));
                  break;
                }
            }
index 198080648d046c4d83a963a1b6561b16b4e3d932..be821b012b267bd8969afce9cb2744e833af73b6 100644 (file)
@@ -43,15 +43,14 @@ class Spacing_engraver : public Engraver
   Array<Rhythmic_tuple> stopped_durations_;
 
   Spanner * spacing_p_;
+  
+  TRANSLATOR_DECLARATIONS(Spacing_engraver);
 protected:
-  VIRTUAL_COPY_CONS (Translator);
   virtual void acknowledge_grob (Grob_info);
   virtual void start_translation_timestep ();
   virtual void stop_translation_timestep ();
   virtual void initialize ();
   virtual void finalize ();
-public:
-  Spacing_engraver ();
 };
 
 inline int
@@ -93,7 +92,7 @@ Spacing_engraver::finalize ()
 void
 Spacing_engraver::acknowledge_grob (Grob_info i)
 {
-  if (to_boolean (i.elem_l_->get_grob_property ("non-rhythmic")))
+  if (to_boolean (i.grob_l_->get_grob_property ("non-rhythmic")))
     return;
   
   if (Rhythmic_req * r = dynamic_cast<Rhythmic_req*> (i.req_l_))
@@ -153,6 +152,12 @@ Spacing_engraver::start_translation_timestep ()
     stopped_durations_.push (playing_durations_.get ());
 }
 
-ADD_THIS_TRANSLATOR (Spacing_engraver);
 
 
+
+ENTER_DESCRIPTION(Spacing_engraver,
+/* descr */       "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  ",
+/* creats*/       "SpacingSpanner",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index 75e3779ab1e196031c027a5d1a60c4b39edb1916..6d59bb277fc0bca1ccfbe70b4a495983a8bc909c 100644 (file)
@@ -22,9 +22,8 @@
 class Span_arpeggio_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Span_arpeggio_engraver ();
-
+  TRANSLATOR_DECLARATIONS(Span_arpeggio_engraver);
+  
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void create_grobs ();
@@ -45,9 +44,9 @@ void
 Span_arpeggio_engraver::acknowledge_grob (Grob_info info)
 {
     if (info.origin_trans_l_arr (this).size ()
-        && Arpeggio::has_interface (info.elem_l_))
+        && Arpeggio::has_interface (info.grob_l_))
     {
-      arpeggios_.push (info.elem_l_);
+      arpeggios_.push (info.grob_l_);
     }
 }
 
@@ -101,5 +100,11 @@ Span_arpeggio_engraver::stop_translation_timestep ()
   arpeggios_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Span_arpeggio_engraver);
 
+
+ENTER_DESCRIPTION(Span_arpeggio_engraver,
+/* descr */       "",
+/* creats*/       "Arpeggio",
+/* acks  */       "arpeggio-interface",
+/* reads */       "connectArpeggios",
+/* write */       "");
index 1d8cdfc0c83a9edae37a267defb05eb991fced73..66b317e5b1d03eb09e3f0f988f0fd6e030fad87f 100644 (file)
@@ -29,8 +29,7 @@ class Span_bar_engraver : public Engraver
   Link_array<Item> bar_l_arr_;
 
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Span_bar_engraver ();
+  TRANSLATOR_DECLARATIONS(Span_bar_engraver);
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
@@ -50,9 +49,9 @@ Span_bar_engraver::acknowledge_grob (Grob_info i)
 {
   int depth = i.origin_trans_l_arr (this).size ();
   if (depth > 1
-      && Bar::has_interface (i.elem_l_))
+      && Bar::has_interface (i.grob_l_))
     {
-      Item * it = dynamic_cast<Item*> (i.elem_l_);
+      Item * it = dynamic_cast<Item*> (i.grob_l_);
       bar_l_arr_.push (it);
 
       if (bar_l_arr_.size () >= 2 && !spanbar_p_) 
@@ -86,7 +85,14 @@ Span_bar_engraver::stop_translation_timestep ()
 
 
 
-ADD_THIS_TRANSLATOR (Span_bar_engraver);
 
 
 
+
+ENTER_DESCRIPTION(Span_bar_engraver,
+/* descr */       "This engraver makes cross-staff barlines: It catches all normal
+bar lines, and draws a single span-bar across them.",
+/* creats*/       "SpanBar",
+/* acks  */       "bar-line-interface",
+/* reads */       "",
+/* write */       "");
index f76f7a88764ec641e8a718ea78ab28122cd44b71..46a3b3f8cad24b0928c429d8afe1108656a08890 100644 (file)
@@ -23,9 +23,7 @@ struct Audio_dynamic_tuple
 class Span_dynamic_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Span_dynamic_performer ();
+  TRANSLATOR_DECLARATIONS(Span_dynamic_performer);
 
 protected:
   virtual bool try_music (Music*);
@@ -45,8 +43,6 @@ private:
   Direction finished_dir_;
 };
 
-ADD_THIS_TRANSLATOR (Span_dynamic_performer);
-
 Span_dynamic_performer::Span_dynamic_performer ()
 {
   span_req_l_drul_[START] = 0;
@@ -188,3 +184,4 @@ Span_dynamic_performer::try_music (Music* r)
     }
   return false;
 }
+ENTER_DESCRIPTION (Span_dynamic_performer, "","","","","" );
index aee7edc6a0e05c96651110648e90880c3b4c6468..24418337d17c95467746be1d2c0df4b4968232df 100644 (file)
 class Staff_performer : public Performer_group_performer 
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-
-  Staff_performer ();
+  TRANSLATOR_DECLARATIONS(Staff_performer);
   ~Staff_performer ();
 
   String new_instrument_str ();
@@ -44,7 +41,7 @@ private:
   Audio_tempo* tempo_p_;
 };
 
-ADD_THIS_TRANSLATOR (Staff_performer);
+ENTER_DESCRIPTION (Staff_performer, "","","","","" );
 
 Staff_performer::Staff_performer ()
 {
index c1a27bcd1794dffe379e5a1bfb5d2781c1b4b353..caca0f8034cf87bd55b4620237b9fa09ce13cbcf 100644 (file)
@@ -20,8 +20,7 @@
 class Staff_symbol_engraver : public Engraver { 
   Spanner *span_p_;
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Staff_symbol_engraver ();
+  TRANSLATOR_DECLARATIONS(Staff_symbol_engraver);
   
 protected:
   virtual ~Staff_symbol_engraver ();
@@ -62,12 +61,19 @@ Staff_symbol_engraver::finalize ()
 void
 Staff_symbol_engraver::acknowledge_grob (Grob_info s)
 {
-  s.elem_l_->set_grob_property ("staff-symbol", span_p_->self_scm ());
+  s.grob_l_->set_grob_property ("staff-symbol", span_p_->self_scm ());
 
   // remove this. probly not necessary?
-  s.elem_l_->add_dependency (span_p_); // UGH. UGH. UGH
+  s.grob_l_->add_dependency (span_p_); // UGH. UGH. UGH
 }
 
 
-ADD_THIS_TRANSLATOR (Staff_symbol_engraver);
 
+
+ENTER_DESCRIPTION(Staff_symbol_engraver,
+/* descr */       "create the constellation of five (default)
+staff lines.",
+/* creats*/       "StaffSymbol",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index 5d4b0a5e0109cc1aecdf241d69d867a3f5f43342..ae47a7d189b24ae21fe46bb98a928805ced3d2f0 100644 (file)
 
 #include "engraver.hh"
 #include "item.hh"
-//#include "system-start-delimiter.hh"
-//#include "side-position-interface.hh"
-//#include "staff-symbol-referencer.hh"
 #include "bar.hh"
 
 class Stanza_number_engraver : public Engraver
 {
   Item *text_;
-  bool bar_b_;;
+  bool bar_b_;
 
   void create_text (SCM s);
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Stanza_number_engraver ();
+  TRANSLATOR_DECLARATIONS(Stanza_number_engraver);
 
-  virtual void acknowledge_grob (Grob_info);
+  virtual void process_music ();
   virtual void stop_translation_timestep ();
 };
 
-ADD_THIS_TRANSLATOR (Stanza_number_engraver);
+
 
 Stanza_number_engraver::Stanza_number_engraver ()
 {
@@ -38,7 +34,7 @@ Stanza_number_engraver::Stanza_number_engraver ()
 }
 
 void
-Stanza_number_engraver::acknowledge_grob (Grob_info i)
+Stanza_number_engraver::process_music ()
 {
   if (gh_string_p (get_property ("whichBar")))
     {
@@ -50,10 +46,9 @@ Stanza_number_engraver::acknowledge_grob (Grob_info i)
 
       // TODO
       if (gh_string_p (s))
-       
 
        /*
-         if (i.elem_l_->has_interface (symbol ("lyric-syllable-interface")))
+         if (i.grob_l_->has_interface (symbol ("lyric-syllable-interface")))
 
          Tried catching lyric items to generate stanza numbers, but it
          spoils lyric spacing.
@@ -96,3 +91,9 @@ Stanza_number_engraver::create_text (SCM txt)
 
 
 
+ENTER_DESCRIPTION(Stanza_number_engraver,
+/* descr */       "",
+/* creats*/       "StanzaNumber",
+/* acks  */       "",
+/* reads */       "stz stanza",
+/* write */       "");
index 9375bd9a7f18ff554ed46a0d111c035fe33db985..faf0b7ab1c8dca9163b064700bc1a575bdd71662 100644 (file)
 #include "translator-group.hh"
 #include "engraver.hh"
 
+
+
 /**
   Make stems upon receiving noteheads.
  */
 class Stem_engraver : public Engraver
 {
-
-public:
-  VIRTUAL_COPY_CONS (Translator);
-  Stem_engraver ();
-  
+  TRANSLATOR_DECLARATIONS(Stem_engraver);
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
@@ -38,8 +36,6 @@ private:
   Tremolo_req* tremolo_req_l_;
 };
 
-ADD_THIS_TRANSLATOR (Stem_engraver);
-
 Stem_engraver::Stem_engraver ()
 {
   tremolo_req_l_ = 0;
@@ -52,7 +48,7 @@ Stem_engraver::Stem_engraver ()
 void
 Stem_engraver::acknowledge_grob (Grob_info i)
 {
-  Grob* h = i.elem_l_;
+  Grob* h = i.grob_l_;
   if (Rhythmic_head::has_interface (h))
     {
       if (Rhythmic_head::stem_l (h))
@@ -175,3 +171,10 @@ Stem_engraver::try_music (Music* r)
   return false;
 }
 
+ENTER_DESCRIPTION(Stem_engraver,
+/* descr */       "Create stems and single-stem tremolos.  It also works together with
+the beam engraver for overriding beaming.",
+/* creats*/       "Stem StemTremolo",
+/* acks  */       "rhythmic-head-interface",
+/* reads */       "tremoloFlags stemLeftBeamCount stemRightBeamCount",
+/* write */       "");
index 3823f2c1f5dab58547791ceebcf27612c3d18e20..5a3dcfdfbe3aaf8d6d870feaf51b7371b0d1ad29 100644 (file)
 class Swallow_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Swallow_engraver);
 protected:
   bool try_music (Music*) ;
 };
 
-ADD_THIS_TRANSLATOR (Swallow_engraver);
+
 
 bool
 Swallow_engraver::try_music (Music*) 
index 7ff03f174f0999ced8f4bb31c4ca085902d42ac3..7b2884b9fa3d3e7d2ef66eb6148baefea40bfbf0 100644 (file)
@@ -6,8 +6,22 @@
   (c)  1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "swallow-perf.hh"
+#include "performer.hh"
 
+class Swallow_performer : public Performer
+{
+public:
+  TRANSLATOR_DECLARATIONS(Swallow_performer);
+protected:
+  virtual bool try_music (Music*) { return true; }
+};
 
+Swallow_performer::Swallow_performer()
+{}
 
-ADD_THIS_TRANSLATOR (Swallow_performer);
+ENTER_DESCRIPTION(Swallow_performer,
+/* descr */       "",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index 642c222e1107e7b151ac2b7855918209fb4391ca..969f3a07e282bcc059bc604a99ff64f208ca62f9 100644 (file)
@@ -19,8 +19,7 @@
 class System_start_delimiter_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  System_start_delimiter_engraver ();
+  TRANSLATOR_DECLARATIONS(System_start_delimiter_engraver);
 
 protected:
   Spanner * delim_;
@@ -29,22 +28,22 @@ protected:
   virtual void finalize ();
 };
 
-ADD_THIS_TRANSLATOR (System_start_delimiter_engraver);
+
 
 void
 System_start_delimiter_engraver::acknowledge_grob (Grob_info inf)
 {
-  if (Staff_symbol::has_interface (inf.elem_l_))
+  if (Staff_symbol::has_interface (inf.grob_l_))
     {
       /*
        don't add as Axis_group_interface::add_element (delim_,),
        because that would set the parent as well */
          
-      Pointer_group_interface::add_element (delim_, "elements", inf.elem_l_);
+      Pointer_group_interface::add_element (delim_, "elements", inf.grob_l_);
     }
-  else if (System_start_delimiter::has_interface (inf.elem_l_))
+  else if (System_start_delimiter::has_interface (inf.grob_l_))
     {
-      SCM gl = inf.elem_l_->get_grob_property ("glyph");
+      SCM gl = inf.grob_l_->get_grob_property ("glyph");
       SCM my_gl = delim_->get_grob_property ("glyph");
 
       /*
@@ -52,13 +51,13 @@ System_start_delimiter_engraver::acknowledge_grob (Grob_info inf)
        */
       if (gh_symbol_p (gl) && gl  == ly_symbol2scm ("brace")
          && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
-       inf.elem_l_->translate_axis (-0.8, X_AXIS); // ugh
+       inf.grob_l_->translate_axis (-0.8, X_AXIS); // ugh
       else if (gh_symbol_p (gl) && gl  == ly_symbol2scm ("bracket")
               && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
        {
-         inf.elem_l_->translate_axis ( -0.8, X_AXIS); // ugh
-         inf.elem_l_->set_grob_property ("arch-height",
-           gh_double2scm(gh_scm2double(inf.elem_l_->get_grob_property
+         inf.grob_l_->translate_axis ( -0.8, X_AXIS); // ugh
+         inf.grob_l_->set_grob_property ("arch-height",
+           gh_double2scm(gh_scm2double(inf.grob_l_->get_grob_property
                                        ("arch-height"))+0.5));
        }
     }
@@ -88,3 +87,9 @@ System_start_delimiter_engraver::finalize ()
   typeset_grob (delim_);
 }
 
+ENTER_DESCRIPTION(System_start_delimiter_engraver,
+/* descr */       "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner",
+/* creats*/       "SystemStartBar SystemStartBrace SystemStartBracket",
+/* acks  */       "system-start-delimiter-interface staff-symbol-interface",
+/* reads */       "",
+/* write */       "");
index 97be2fd709eec34ec61522592abdb8bf71b0e94e..fa2f0fd37c432a0ed494b06403e81c800d8ec770 100644 (file)
@@ -13,9 +13,7 @@
 class Tempo_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Tempo_performer ();
+  TRANSLATOR_DECLARATIONS(Tempo_performer);
   ~Tempo_performer ();
 
 protected:
@@ -29,7 +27,8 @@ private:
   Audio_tempo* audio_p_;
 };
 
-ADD_THIS_TRANSLATOR (Tempo_performer);
+ENTER_DESCRIPTION (Tempo_performer, "","","","","" );
+
 
 Tempo_performer::Tempo_performer ()
 {
index ed9473e000d3213ad08b762506a7b75b2572f7b9..3fdc1a3f71e1495885e91f863e51a64332a2d2b9 100644 (file)
@@ -24,7 +24,7 @@ class Text_engraver : public Engraver
   Link_array<Text_script_req> reqs_;
   Link_array<Item> texts_;
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Text_engraver);
 protected:
   virtual bool try_music (Music* m);
   virtual void stop_translation_timestep ();
@@ -48,30 +48,30 @@ Text_engraver::try_music (Music *m)
 void
 Text_engraver::acknowledge_grob (Grob_info inf)
 {
-  if (Rhythmic_head::has_interface (inf.elem_l_))
+  if (Rhythmic_head::has_interface (inf.grob_l_))
     {
       for (int i=0; i < texts_.size (); i++)
        {
          Grob*t = texts_[i];
-         Side_position_interface::add_support (t,inf.elem_l_);
+         Side_position_interface::add_support (t,inf.grob_l_);
 
          /*
            ugh.
           */
          if (Side_position_interface::get_axis (t) == X_AXIS
              && !t->parent_l (Y_AXIS))
-           t->set_parent (inf.elem_l_, Y_AXIS);
+           t->set_parent (inf.grob_l_, Y_AXIS);
          else if (Side_position_interface::get_axis (t) == Y_AXIS
              && !t->parent_l (X_AXIS))
-           t->set_parent (inf.elem_l_, X_AXIS);
+           t->set_parent (inf.grob_l_, X_AXIS);
        }
     }
   
-  if (Stem::has_interface (inf.elem_l_))
+  if (Stem::has_interface (inf.grob_l_))
     {
       for (int i=0; i < texts_.size (); i++)
        {
-         Side_position_interface::add_support (texts_[i],inf.elem_l_);
+         Side_position_interface::add_support (texts_[i],inf.grob_l_);
        }
     }
 }
@@ -157,5 +157,12 @@ Text_engraver::start_translation_timestep ()
   reqs_.clear ();
 }
 
-ADD_THIS_TRANSLATOR (Text_engraver);
 
+Text_engraver::Text_engraver(){}
+
+ENTER_DESCRIPTION(Text_engraver,
+/* descr */       "Create text-scripts",
+/* creats*/       "TextScript",
+/* acks  */       "rhythmic-head-interface stem-interface",
+/* reads */       "scriptHorizontal textNonEmpty",
+/* write */       "");
index 5f7c4b8a3a575ab7186b3a3a7d612350fad7b6e1..e4320a3dafee35193f2d17989dddc2f79335f832 100644 (file)
@@ -166,8 +166,8 @@ Text_item::markup_text2molecule (Grob *me, SCM markup_text,
   SCM e = ly_assoc_chain (ly_symbol2scm ("extent"), p);
   if (gh_pair_p (e) && ly_number_pair_p (ly_cdr (e)))
     {
-      extent = Interval (gh_scm2double (gh_cadr (e)) * staff_space,
-                      gh_scm2double (gh_cddr (e)) * staff_space);
+      extent = Interval (gh_scm2double (ly_cadr (e)) * staff_space,
+                      gh_scm2double (ly_cddr (e)) * staff_space);
       extent_b = true;
     }
 
@@ -201,7 +201,7 @@ Text_item::markup_text2molecule (Grob *me, SCM markup_text,
        
       SCM next_p = SCM_EOL;
       if (gh_pair_p (ly_car (text)))
-       next_p = scm_list_n (gh_call2 (f, sheet, gh_caar (text)), SCM_UNDEFINED);
+       next_p = scm_list_n (gh_call2 (f, sheet, ly_caar (text)), SCM_UNDEFINED);
       SCM next_k = ly_assoc_chain (ly_symbol2scm ("kern"), next_p);
       Real next_kern = kern[axis];
       if (gh_pair_p (next_k) && gh_number_p (ly_cdr (next_k)))
index f0321e353273aef022c78c96eefd36814b2a086f..8698c945a2554c1197023b03f6c79042237d90e6 100644 (file)
@@ -22,9 +22,7 @@
 class Text_spanner_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Text_spanner_engraver ();
-  
+  TRANSLATOR_DECLARATIONS(Text_spanner_engraver);  
 protected:
   virtual void finalize ();
   virtual void acknowledge_grob (Grob_info);
@@ -41,7 +39,7 @@ private:
   void typeset_all ();
 };
 
-ADD_THIS_TRANSLATOR (Text_spanner_engraver);
+
 
 
 Text_spanner_engraver::Text_spanner_engraver ()
@@ -136,10 +134,10 @@ Text_spanner_engraver::create_grobs ()
 void
 Text_spanner_engraver::acknowledge_grob (Grob_info info)
 {
-  if (span_ && Note_column::has_interface (info.elem_l_))
+  if (span_ && Note_column::has_interface (info.grob_l_))
     {
-      Side_position_interface::add_support (span_, info.elem_l_);
-      add_bound_item (span_, dynamic_cast<Item*> (info.elem_l_));
+      Side_position_interface::add_support (span_, info.grob_l_);
+      add_bound_item (span_, dynamic_cast<Item*> (info.grob_l_));
     }
 }
 
@@ -172,3 +170,9 @@ Text_spanner_engraver::finalize ()
     }
 }
 
+ENTER_DESCRIPTION(Text_spanner_engraver,
+/* descr */       "Create text spanner from a  Span_req ",
+/* creats*/       "TextSpanner",
+/* acks  */       "note-column-interface",
+/* reads */       "",
+/* write */       "");
index 9e995b2f741183c2c7a23dfc16c7a0e218d7763b..5fcbda14fb3b2a85367cf1548f366d2b00f58c94 100644 (file)
 class Thread_devnull_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Thread_devnull_engraver);
   
 protected:
   virtual void acknowledge_grob (Grob_info);
 };
 
-ADD_THIS_TRANSLATOR (Thread_devnull_engraver);
+
 
 void
 Thread_devnull_engraver::acknowledge_grob (Grob_info i)
@@ -40,6 +40,21 @@ Thread_devnull_engraver::acknowledge_grob (Grob_info i)
          && to_boolean (get_property ("soloADue"))))
     {
       /* Ugh, we can suicide them, but they remain living */
-      i.elem_l_->suicide ();
+      i.grob_l_->suicide ();
     }
 }
+Thread_devnull_engraver::Thread_devnull_engraver(){}
+
+ENTER_DESCRIPTION(Thread_devnull_engraver,
+/* descr */       "Kill elements whenever we are Voice called `two' and either
+unison, unisilence or soloADue is set.@footnote{On unix systems, the
+file @file{/dev/null} is special device: anything written to it is
+discarded.}. This engraver works closely together with the part
+combiner.  When the part combiner notices that two threads are
+identical, it tells the @code{Thread_devnull_engraver} to discard
+everything in the second thread.
+",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index d96acb32e973073f031dcc68ed025732e178a6cd..9f541988d4f2863c009ecad431e030b852318a63 100644 (file)
@@ -65,8 +65,7 @@ protected:
   virtual void create_grobs ();
   void typeset_tie (Grob*);
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Tie_engraver ();
+  TRANSLATOR_DECLARATIONS(Tie_engraver);
 };
 
 
@@ -107,12 +106,12 @@ Tie_engraver::set_melisma (bool m)
 void
 Tie_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Rhythmic_head::has_interface (i.elem_l_))
+  if (Rhythmic_head::has_interface (i.grob_l_))
     {
       Note_req * m = dynamic_cast<Note_req* > (i.req_l_);
       if (!m)
        return;
-      now_heads_.push (CHead_melodic_tuple (i.elem_l_, m, now_mom ()+ m->length_mom ()));
+      now_heads_.push (CHead_melodic_tuple (i.grob_l_, m, now_mom ()+ m->length_mom ()));
     }
 }
 
@@ -180,8 +179,8 @@ Tie_engraver::create_grobs ()
          Grob * p = new Spanner (basic);
          Tie::set_interface (p);
          
-         Tie::set_head (p, LEFT, dynamic_cast<Item*> (unsmob_grob (gh_caar (s))));
-         Tie::set_head (p, RIGHT, dynamic_cast<Item*> (unsmob_grob (gh_cdar (s))));
+         Tie::set_head (p, LEFT, dynamic_cast<Item*> (unsmob_grob (ly_caar (s))));
+         Tie::set_head (p, RIGHT, dynamic_cast<Item*> (unsmob_grob (ly_cdar (s))));
          
          tie_p_arr_.push (p);
          announce_grob (p, req_l_);
@@ -275,7 +274,7 @@ Tie_engraver::start_translation_timestep ()
 
 }
 
-ADD_THIS_TRANSLATOR (Tie_engraver);
+
 
 
 CHead_melodic_tuple::CHead_melodic_tuple ()
@@ -312,3 +311,9 @@ CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1,
 {
   return Moment::compare(h1.end_,  h2.end_);
 }
+ENTER_DESCRIPTION(Tie_engraver,
+/* descr */       "Generate ties between noteheads of equal pitch.",
+/* creats*/       "Tie TieColumn",
+/* acks  */       "rhythmic-head-interface",
+/* reads */       "sparseTies tieMelismaBusy",
+/* write */       "");
index e25e6cb4b2af62735e2019d6c6eb2f1a6b7a7882..f343ffaadb8bd85cdf3687da65e4be18fdfcf6e2 100644 (file)
@@ -39,8 +39,7 @@ inline int compare (CNote_melodic_tuple const &a, CNote_melodic_tuple const &b)
 class Tie_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Tie_performer ();
+  TRANSLATOR_DECLARATIONS(Tie_performer);
 private:
   bool done_;
   PQueue<CNote_melodic_tuple> past_notes_pq_;
@@ -65,20 +64,9 @@ Tie_performer::Tie_performer ()
   done_ = false;
 }
 
-ADD_THIS_TRANSLATOR (Tie_performer);
+ENTER_DESCRIPTION (Tie_performer, "", "", "", "", "");
 
 
-#if 0
-Tie_performer::Tie_performer ()
-{
-  // URG
-  // if we don't do this, lily dumps core
-  // which means that ``initialize'' and
-  // ``start_translation_timestep'' did not happen?!
-  initialize ();
-}
-#endif
-
 void
 Tie_performer::initialize ()
 {
@@ -175,6 +163,7 @@ Tie_performer::create_audio_elements ()
     }
 }
 
+
 void
 Tie_performer::stop_translation_timestep ()
 {
@@ -233,3 +222,4 @@ CNote_melodic_tuple::time_compare (CNote_melodic_tuple const&h1,
 {
   return (h1.end_ - h2.end_).main_part_.sign ();
 }
+
index 4d9f07101095602765b3efda4016180fd867939c..b7a2b26448318962d36fa3b153010627d1697b48 100644 (file)
 /**
   generate time_signatures. 
   */
-class Time_signature_engraver : public Engraver {
+class Time_signature_engraver : public Engraver
+{
+  Item * time_signature_p_;
+  SCM last_time_fraction_;
+
 protected:
   virtual void stop_translation_timestep ();
   virtual void create_grobs ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Item * time_signature_p_;
-  SCM last_time_fraction_;
-  Time_signature_engraver ();
+  TRANSLATOR_DECLARATIONS(Time_signature_engraver);
+
 };
 
 
@@ -67,6 +69,12 @@ Time_signature_engraver::stop_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Time_signature_engraver);
+
  
 
+ENTER_DESCRIPTION(Time_signature_engraver,
+/* descr */       "Create a TimeSignature whenever @code{timeSignatureFraction} changes",
+/* creats*/       "TimeSignature",
+/* acks  */       "",
+/* reads */       "",
+/* write */       "");
index c518f96ed6d0bdabc715f46380b690866628c2ce..cb3f1322a9a1ca307d78d9f408f3306dffc2be9e 100644 (file)
@@ -14,9 +14,7 @@
 class Time_signature_performer : public Performer
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  
-  Time_signature_performer ();
+  TRANSLATOR_DECLARATIONS(Time_signature_performer);
   ~Time_signature_performer ();
 
 protected:
@@ -68,5 +66,5 @@ Time_signature_performer::stop_translation_timestep ()
       audio_p_ = 0;
     }
 }
-ADD_THIS_TRANSLATOR (Time_signature_performer);
 
+ENTER_DESCRIPTION (Time_signature_performer, "","","","","" );
index fb021095830bcb4f58a7005fa4bfdc8014dec803..909039db3a01954a183a585074b1af2776f4bce2 100644 (file)
@@ -28,8 +28,7 @@ protected:
   virtual void process_music ();
 
 public:
-  Timing_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Timing_engraver);
 };
 
 
@@ -38,7 +37,7 @@ Timing_engraver::Timing_engraver ()
   last_moment_.main_part_ = Rational (-1);
 }
 
-ADD_THIS_TRANSLATOR (Timing_engraver);
+
 
 void
 Timing_engraver::start_translation_timestep ()
@@ -90,3 +89,13 @@ Timing_engraver::process_music ()
 {
   Timing_translator::process_music ();
 }
+
+ENTER_DESCRIPTION(Timing_engraver,
+/* descr */       " Responsible for synchronizing timing information from staves. 
+Normally in @code{Score}.  In order to create polyrhythmic music,
+this engraver should be removed from @code{Score} and placed in
+@code{Staff}.",
+/* creats*/       "",
+/* acks  */       "",
+/* reads */       "timeSignatureFraction barCheckNoSynchronize barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber",
+/* write */       "");
index 7c05a7d14bd5f292e01ceb8bdf815051fef4531d..79b741034c2c16876ca6354bbbe56766322a0d26 100644 (file)
@@ -80,8 +80,6 @@ Timing_translator::stop_translation_timestep ()
 }
 
 
-ADD_THIS_TRANSLATOR (Timing_translator);
-
 void
 Timing_translator::initialize ()
 {
index 3a66cefb759f856bd28b2648febe3ed531178747..0f4116910665466976a5a058e9554ae56389a4c1 100644 (file)
  */
 Dictionary<Translator*> *global_translator_dict_p=0;
 
+
+SCM
+ly_get_all_translators ()
+{
+  SCM l = SCM_EOL;
+  for (std::map<String,Translator*>::const_iterator (ci (global_translator_dict_p->begin()));
+       ci != global_translator_dict_p->end (); ci++)
+    {
+      l = scm_cons ((*ci).second->self_scm (), l);
+    }
+  return l;
+}
+
+static void
+all_trans_init()
+{
+  scm_c_define_gsubr ("ly-get-all-translators", 0, 0, 0, (Scheme_function_unknown) ly_get_all_translators);
+}
+
+ADD_SCM_INIT_FUNC(all_trans_init,all_trans_init);
+
 void
 add_translator (Translator *t)
 {
index 7f0a2bb34a336a3d3a03be2d7dfb2422a3f5f656..1d1f65aeb5037eaeb9c6c02710834b3696b0ddac 100644 (file)
@@ -270,14 +270,14 @@ Translator_def::apply_property_operations (Translator_group*tg)
       
       if (type == push_sym)
        {
-         SCM val = gh_cddr (entry);
+         SCM val = ly_cddr (entry);
          val = gh_pair_p (val) ? ly_car (val) : SCM_UNDEFINED;
 
-         apply_pushpop_property (tg, ly_car (entry), gh_cadr (entry), val);
+         apply_pushpop_property (tg, ly_car (entry), ly_cadr (entry), val);
        }
       else if (type == assign_sym)
        {
-         tg->set_property (ly_car (entry), gh_cadr (entry));
+         tg->set_property (ly_car (entry), ly_cadr (entry));
        }
     }
 }
index 763bdc8997fe92dce5ffa04d33f4e7e0acbf9ba6..bb7f8cb187db858c2c7afb31b7f6a5417a1863ab 100644 (file)
@@ -130,10 +130,12 @@ Translator_group::find_create_translator_l (String n, String id)
        {
          Translator_group * new_group = path[i]->instantiate (output_def_l_);
 
+         if (i == path.size () -1)
+           new_group->id_str_ = id;      
          current->add_group_translator (new_group);
          current = new_group;
        }
-      current->id_str_ = id;
+
       return current;
     }
 
@@ -346,7 +348,7 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va
          SCM prev = get_property (prop);
 
          SCM newprops= SCM_EOL ;
-         while (gh_pair_p (prev) && gh_caar (prev) != eltprop)
+         while (gh_pair_p (prev) && ly_caar (prev) != eltprop)
            {
              newprops = gh_cons (ly_car (prev), newprops);
              prev = ly_cdr (prev);
index a2e780f31da4e943d7ae08c8f9e9ab5385138282..68200445301bf29ae7959af9698122bfec924786 100644 (file)
 #include "moment.hh"
 #include "ly-smobs.icc"
 
-char const*
-Translator::name () const
-{
-  return classname (this);
-}
 
 Translator::~Translator ()
 {
@@ -158,6 +153,37 @@ Translator::mark_smob (SCM sm)
   return me->properties_scm_;
 }
 
+MAKE_SCHEME_CALLBACK(Translator,name,1);
+SCM
+Translator::name (SCM trans) 
+{
+  if (unsmob_translator (trans))
+    {
+      char const* nm = classname (unsmob_translator (trans));
+      return gh_str02scm (nm);
+    }
+  return
+    SCM_EOL;
+}
+
+MAKE_SCHEME_CALLBACK(Translator,description,1)
+SCM
+Translator::description (SCM me) 
+{
+  if (unsmob_translator (me))
+    return unsmob_translator(me)->translator_description ();
+  else
+    {
+      programming_error ("Translator::description ()");  
+      return SCM_EOL;
+    }
+}
+
+SCM
+Translator::translator_description () const
+{
+  return SCM_EOL;
+}
 
 int
 Translator::print_smob (SCM s, SCM port, scm_print_state *)
@@ -165,7 +191,7 @@ Translator::print_smob (SCM s, SCM port, scm_print_state *)
   Translator *sc = (Translator *) ly_cdr (s);
      
   scm_puts ("#<Translator ", port);
-  scm_puts ((char *)sc->name (), port);
+  scm_display (name (s), port);
   scm_display (sc->simple_trans_list_, port);
   /*
     don't try to print properties, that is too much hassle.
@@ -175,6 +201,12 @@ Translator::print_smob (SCM s, SCM port, scm_print_state *)
   return 1;
 }
 
+SCM
+Translator::static_translator_description ()const
+{
+  return SCM_EOL;
+}
+
 IMPLEMENT_UNSMOB (Translator, translator);
 IMPLEMENT_SMOBS (Translator);
 IMPLEMENT_DEFAULT_EQUAL_P (Translator);
index aa3f0065e54a99e546a4be89b8e1ec0dcfdef6cd..1aaa75a3c825a38b868ebb80984db09d68011bc9 100644 (file)
@@ -20,7 +20,7 @@
 class Tuplet_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Tuplet_engraver);
 
 protected:
   Link_array<Time_scaled_music> time_scaled_music_arr_;
@@ -96,11 +96,11 @@ Tuplet_engraver::create_grobs ()
 void
 Tuplet_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Note_column::has_interface (i.elem_l_))
+  if (Note_column::has_interface (i.grob_l_))
     {
       for (int j =0; j  <started_span_p_arr_.size (); j++)
        if (started_span_p_arr_[j]) 
-         Tuplet_bracket::add_column (started_span_p_arr_[j], dynamic_cast<Item*> (i.elem_l_));
+         Tuplet_bracket::add_column (started_span_p_arr_[j], dynamic_cast<Item*> (i.grob_l_));
     }
 }
 
@@ -148,6 +148,13 @@ Tuplet_engraver::finalize ()
     }  
 }
 
-ADD_THIS_TRANSLATOR (Tuplet_engraver);
 
 
+Tuplet_engraver::Tuplet_engraver(){}
+
+ENTER_DESCRIPTION(Tuplet_engraver,
+/* descr */       "Catch Time_scaled_music and generate appropriate bracket  ",
+/* creats*/       "TupletBracket",
+/* acks  */       "note-column-interface",
+/* reads */       "tupletNumberFormatFunction tupletSpannerDuration tupletInvisible",
+/* write */       "");
index e16b9e316a4a53402cab16c385e64ce7788b652f..abc1540d77c567dd4e5029f36d535bec53c36cdb 100644 (file)
@@ -18,6 +18,4 @@ Type_swallow_translator::try_music (Music*r)
   return false;
 }
 
-
-
-DECLARE_REQUEST_SWALLOWER (Skip_req);
+DECLARE_REQUEST_SWALLOWER(Skip_req);
index c91890775fdb3e4195ec640eb13f8f9356b07d7e..65eb757387e33ab86b77b06503534e8c99cf5ad7 100644 (file)
@@ -18,8 +18,7 @@ class Vertical_align_engraver : public Engraver
   Spanner * valign_p_;
   bool qualifies_b (Grob_info) const;  
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Vertical_align_engraver ();
+  TRANSLATOR_DECLARATIONS(Vertical_align_engraver);
 protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void initialize ();
@@ -53,8 +52,8 @@ Vertical_align_engraver::qualifies_b (Grob_info i) const
 {
   int sz = i.origin_trans_l_arr ((Translator*)this).size ()  ;
 
-  return sz > 1 && Axis_group_interface::has_interface (i.elem_l_)
-    && !i.elem_l_->parent_l (Y_AXIS) && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS);
+  return sz > 1 && Axis_group_interface::has_interface (i.grob_l_)
+    && !i.grob_l_->parent_l (Y_AXIS) && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS);
 }
 
 void
@@ -62,8 +61,14 @@ Vertical_align_engraver::acknowledge_grob (Grob_info i)
 {
   if (qualifies_b (i))
     {
-      Align_interface::add_element (valign_p_,i.elem_l_, get_property ("verticalAlignmentChildCallback"));
+      Align_interface::add_element (valign_p_,i.grob_l_, get_property ("verticalAlignmentChildCallback"));
     }
 }
 
-ADD_THIS_TRANSLATOR (Vertical_align_engraver);
+
+ENTER_DESCRIPTION(Vertical_align_engraver,
+/* descr */       "Catch Vertical axis groups and stack them.",
+/* creats*/       "VerticalAlignment",
+/* acks  */       "axis-group-interface",
+/* reads */       "",
+/* write */       "");
index 7a8d460f99c933b672028507c5e23e1c414faa7f..0a27f98ca1486a6e847cbd2d6a6bde34a3e1fc9a 100644 (file)
 class Voice_devnull_engraver : public Engraver
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Voice_devnull_engraver);
   
 protected:
   virtual bool try_music (Music *m);
   virtual void acknowledge_grob (Grob_info);
 };
 
-ADD_THIS_TRANSLATOR (Voice_devnull_engraver);
+
 
 static char const *eat_spanners[] = {
   "beam",
@@ -95,19 +95,26 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i)
          && (to_boolean (get_property ("unison"))
              || to_boolean (get_property ("unisilence")))))
     for (char const **p = junk_interfaces; *p; p++)
-      if (i.elem_l_->has_interface (ly_symbol2scm (*p)))
+      if (i.grob_l_->has_interface (ly_symbol2scm (*p)))
        {
 #if 0
          /* Ugh: virtual mmrest::suicide () ? */
-         if (i.elem_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface")))
-           i.elem_l_->set_grob_property ("skip-timestep", SCM_BOOL_T);
+         if (i.grob_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface")))
+           i.grob_l_->set_grob_property ("skip-timestep", SCM_BOOL_T);
          else
            ;
 #endif   
          /* Ugh, we can suicide them, but they remain living */
-         i.elem_l_->suicide ();
+         i.grob_l_->suicide ();
          return;
        }
 }
  
+Voice_devnull_engraver::Voice_devnull_engraver(){}
   
+ENTER_DESCRIPTION(Voice_devnull_engraver,
+/* descr */       "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.",
+/* creats*/       "",
+/* acks  */       "grob-interface",
+/* reads */       "",
+/* write */       "");
index 68d849c1c25896ab5a72965b59cded5679de386b..cc163f9bc93779288ca17bd990a5c27c8a7ed327 100644 (file)
@@ -22,8 +22,7 @@
 class Volta_engraver : public Engraver
 {
 public:
-  Volta_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Volta_engraver);
 protected:
 
   virtual void acknowledge_grob (Grob_info);
@@ -39,8 +38,6 @@ protected:
   SCM start_str_;
 };
 
-ADD_THIS_TRANSLATOR (Volta_engraver);
-
 Volta_engraver::Volta_engraver ()
 {
   volta_span_p_ = 0;
@@ -62,10 +59,10 @@ Volta_engraver::process_music ()
       if (gh_pair_p (c) && ly_car (c) == ly_symbol2scm ("volta")
          && gh_pair_p (ly_cdr (c)))
        {
-         if (gh_cadr (c) ==  SCM_BOOL_F)
+         if (ly_cadr (c) ==  SCM_BOOL_F)
            end = true;
          else
-           start_str_ = gh_cadr (c);
+           start_str_ = ly_cadr (c);
        }
       
       cs = ly_cdr (cs);
@@ -135,7 +132,7 @@ Volta_engraver::create_grobs ()
 void
 Volta_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Item* item = dynamic_cast<Item*> (i.elem_l_))
+  if (Item* item = dynamic_cast<Item*> (i.grob_l_))
     {
       if (Note_column::has_interface (item))
        {
@@ -182,3 +179,10 @@ Volta_engraver::stop_translation_timestep ()
 /*
   TODO: should attach volta to paper-column if no bar is found.
  */
+
+ENTER_DESCRIPTION(Volta_engraver,
+/* descr */       "Make volta brackets",
+/* creats*/       "VoltaBracket",
+/* acks  */       "bar-line-interface note-column-interface",
+/* reads */       "repeatCommands voltaSpannerDuration",
+/* write */       "");
index 1c86fc7a3b31f6dd881b2fa50d1645d9e1828989..6261811a13244229551ed15f5fa5ca89533f5348 100644 (file)
@@ -321,7 +321,6 @@ ScoreContext = \translator {
        \type Score_engraver
        \name Score
        
-
        \consists "Repeat_acknowledge_engraver"
        \consists "Timing_engraver"
        \consists "Output_property_engraver"
@@ -330,7 +329,6 @@ ScoreContext = \translator {
        \consists "Break_align_engraver"
        \consists "Spacing_engraver"
        \consists "Vertical_align_engraver"
-
        \consists "Lyric_phrasing_engraver"
        \consists "Bar_number_engraver"
        \consists "Span_arpeggio_engraver"
@@ -369,7 +367,8 @@ ScoreContext = \translator {
 
        explicitClefVisibility = #all-visible
        explicitKeySignatureVisibility = #all-visible
-       
+       autoBeamSettings = #auto-beam-settings
+
        scriptDefinitions = #default-script-alist
 
        verticalAlignmentChildCallback = #Align_interface::alignment_callback
@@ -399,7 +398,7 @@ ScoreContext = \translator {
        )
 
 
-       \elementdescriptions #all-grob-descriptions
+       \grobdescriptions #all-grob-descriptions
 }
 
 OrchestralScoreContext= \translator {
index 575def8426e0b69f49849345555c6b9f91bbbf64..cb7289fd43a3d74eebe691002eeabb0bdfa60c4b 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.5.12
-Entered-date: 23SEP01
+Version: 1.5.13
+Entered-date: 24SEP01
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.5.12.tar.gz 
+       1000k lilypond-1.5.13.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.5.12.tar.gz 
+       1000k lilypond-1.5.13.tar.gz 
 Copying-policy: GPL
 End
index bebfda00000a7bf43f79e53b890eaa62a6a915ed..307132114c9923d99b412ba04977f6e191ef433c 100644 (file)
@@ -1,5 +1,5 @@
 %define name lilypond
-%define version 1.5.12
+%define version 1.5.13
 %define release 1mdk
 
 Name: %{name}
index 3a55369af83e0db1258bebd7471e77744205c213..1f2c5eda2eaf159c030f5541942ce3bd35c04ad9 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.5.12
+Version: 1.5.13
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.12.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.13.tar.gz
 Summary: Create and print music notation 
 URL: http://www.lilypond.org/
 BuildRoot: /tmp/lilypond-install
index 6dda6f64437de7f9e5452572a904ba57a81b565a..26262549260b482290838c57c617456643fb1961 100644 (file)
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.5.12
+Version: 1.5.13
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.12.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.13.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
index 747ed1b5ab359d8720f68fe4e70a4c569ef0a448..768e6308e97e67344a89adf9ab5cfcf9698ccca3 100644 (file)
@@ -23,6 +23,8 @@ midi.parse (s)
 /* urg */
 #if HAVE_PYTHON2_PYTHON_H
 #include <python2/Python.h>
+#elif HAVE_PYTHON2_0_PYTHON_H
+#include <python2.0/Python.h>
 #elif HAVE_PYTHON1_5_PYTHON_H
 #include <python1.5/Python.h>
 #elif HAVE_PYTHON_PYTHON_H
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..990a7e2
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1406 @@
+# Danish translation of lilypond
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Keld Simonsen <keld@dkuug.dk>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lilypond 1.4.6\n"
+"POT-Creation-Date: 2001-06-14 13:22+0200\n"
+"PO-Revision-Date: 2001-09-22 21:00+0200\n"
+"Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ly2dvi.py:105
+msgid "Generate .dvi with LaTeX for LilyPond"
+msgstr "Generér .dvi med LaTeX for LilyPond"
+
+#: data-file.cc:118 input.cc:85 ly2dvi.py:190 midi-parser.cc:100 mup2ly.py:93
+#: update-lily.py:118 warn.cc:23
+msgid "warning: "
+msgstr "advarsel: "
+
+#: input.cc:90 ly2dvi.py:205 ly2dvi.py:804 mup2ly.py:98 mup2ly.py:188
+#: update-lily.py:123 update-lily.py:211 warn.cc:9 warn.cc:17
+msgid "error: "
+msgstr "fejl: "
+
+#: ly2dvi.py:206 mup2ly.py:100 update-lily.py:125
+msgid "Exiting ... "
+msgstr "Afslutter... "
+
+#: ly2dvi.py:264 mup2ly.py:158 update-lily.py:183
+#, c-format
+msgid "Usage: %s [OPTION]... FILE"
+msgstr "Brug: %s [FLAG]... FIL"
+
+#: ly2dvi.py:268 main.cc:120 main.cc:148 mup2ly.py:162 update-lily.py:187
+msgid "Options:"
+msgstr "Flag:"
+
+#: ly2dvi.py:272 main.cc:124 main.cc:171 mup2ly.py:168 update-lily.py:191
+#, c-format
+msgid "Report bugs to %s"
+msgstr ""
+"Rapportér programfejl til %s\n"
+"Rapportér fejl i oversættelsen til <dansk@klid.dk>"
+
+#: ly2dvi.py:305 mup2ly.py:185 update-lily.py:208
+#, c-format
+msgid "Invoking `%s'"
+msgstr "Starter \"%s\""
+
+#: ly2dvi.py:309 mup2ly.py:188 update-lily.py:211
+#, c-format
+msgid "command exited with value %d"
+msgstr "kommandoen afsluttede med værdi %d"
+
+#: ly2dvi.py:311 mup2ly.py:190 update-lily.py:213
+msgid "(ignored)"
+msgstr "(ignoreret)"
+
+# hær er det spørg om rensning af en temporærkatalog
+#: ly2dvi.py:321
+#, c-format
+msgid "Cleaning %s..."
+msgstr "Renser %s..."
+
+#: ly2dvi.py:336 mup2ly.py:214 update-lily.py:237
+#, c-format
+msgid "no such setting: %s"
+msgstr "indstillingen findes ikke: %s"
+
+#: ly2dvi.py:349 main.cc:112
+msgid "write Makefile dependencies for every input file"
+msgstr "skriv Makefile-afhængigheder for hver inddatafil"
+
+# forklaring af flag -h
+#: ly2dvi.py:350 main.cc:96 main.cc:108 mup2ly.py:1117 update-lily.py:251
+msgid "this help"
+msgstr "denne hjælp"
+
+#: ly2dvi.py:351 main.cc:110 main.cc:115
+msgid "DIR"
+msgstr "KATALOG"
+
+#: ly2dvi.py:351
+msgid "add DIR to LilyPond's search path"
+msgstr "tilføj KATALOG til LilyPonds søgesti"
+
+# %s er programmets navn
+#: ly2dvi.py:352
+#, c-format
+msgid "keep all output, and name the directory %s.dir"
+msgstr "behold al uddata, og navngiv kataloget %s.dir"
+
+#: ly2dvi.py:353
+msgid "don't run LilyPond"
+msgstr "kør ikke LilyPond"
+
+#: ly2dvi.py:354 main.cc:113
+msgid "produce MIDI output only"
+msgstr "lav kun MIDI-uddata"
+
+#: ly2dvi.py:355 main.cc:99 main.cc:111 main.cc:114
+msgid "FILE"
+msgstr "FIL"
+
+#: ly2dvi.py:355
+msgid "write ouput to FILE"
+msgstr "skriv uddata til FIL"
+
+#: ly2dvi.py:357
+msgid "generate PostScript output"
+msgstr "lav PostScript-uddata"
+
+#: ly2dvi.py:358
+msgid "KEY=VAL"
+msgstr "NØGLE=VÆRDI"
+
+#: ly2dvi.py:358
+msgid "change global setting KEY to VAL"
+msgstr "ændr global indstilling NØGLE til VÆRDI"
+
+# Førklaring til --verbose (borde være længre)
+#: ly2dvi.py:359 main.cc:118 mup2ly.py:1120 update-lily.py:255
+msgid "verbose"
+msgstr "udførlig uddata"
+
+#: ly2dvi.py:360 main.cc:105 main.cc:117 mup2ly.py:1121 update-lily.py:256
+msgid "print version number"
+msgstr "vis versionsnummer"
+
+#: ly2dvi.py:361 main.cc:107 main.cc:119 mup2ly.py:1122 update-lily.py:258
+msgid "show warranty and copyright"
+msgstr "vis garanti og copyright"
+
+#: ly2dvi.py:383 ly2dvi.py:578 ly2dvi.py:603
+#, c-format
+msgid "Running %s..."
+msgstr "Kør %s..."
+
+#: ly2dvi.py:396
+#, c-format
+msgid "Analyzing %s..."
+msgstr "Analyserer %s..."
+
+#: ly2dvi.py:452
+#, c-format
+msgid "no lilypond output found for %s"
+msgstr "ingen lilyponduddata fundet for %s"
+
+#: ly2dvi.py:494
+#, c-format
+msgid "invalid value: %s"
+msgstr "ugyldigt værdi: %s"
+
+# hær er det spørg om skrivning til en fil
+#: ly2dvi.py:781 scores.cc:44
+#, c-format
+msgid "dependencies output to `%s'..."
+msgstr "afhængigheder udskrevet til \"%s\"..."
+
+# hær er det spørg om skrivning til en fil (første parametern er t.ex
+# DVI, LATEX, MIDI, TEX)
+#: ly2dvi.py:791
+#, c-format
+msgid "%s output to `%s'..."
+msgstr "%s udskrevet til \"%s\"..."
+
+#: includable-lexer.cc:49 lily-guile.cc:139 ly2dvi.py:793
+#: midi-score-parser.cc:24 scores.cc:136 scores.cc:142
+#, c-format
+msgid "can't find file: `%s'"
+msgstr "kan ikke finde fil: \"%s\""
+
+#: ly2dvi.py:804
+msgid "no files specified on command line."
+msgstr "ingen filer angivne pÃ¥ kommandolinjen."
+
+#: mup2ly.py:51
+msgid "Convert mup to ly"
+msgstr "Konvertér mup til ly"
+
+# %s er progravnavnet (mup2ly)
+#: mup2ly.py:166
+#, c-format
+msgid "%s is far from completed.  Not all constructs are recognised."
+msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner."
+
+#: mup2ly.py:964
+#, c-format
+msgid "no such context: %s"
+msgstr "omgivelse findes ikke: %s"
+
+#: mup2ly.py:1115
+msgid "debug"
+msgstr "fejlsøgningsuddata"
+
+#: mup2ly.py:1116
+msgid "define macro NAME [optional expansion EXP]"
+msgstr "definér makro NAVN [valfri makroudvidelse EXP]"
+
+#: main.cc:114 mup2ly.py:1118
+msgid "write output to FILE"
+msgstr "skriv uddata til FIL"
+
+#: mup2ly.py:1119
+msgid "only pre-process"
+msgstr "kun forbehandling"
+
+#: mup2ly.py:1200
+#, c-format
+msgid "Processing `%s'..."
+msgstr "Behandler \"%s\"..."
+
+#: mup2ly.py:1219
+#, c-format
+msgid "Writing `%s'..."
+msgstr "Skriver \"%s\"..."
+
+#: update-lily.py:51
+msgid "Fetch and rebuild from latest source package"
+msgstr "Hent og byg om fra seneste kildekodepakke"
+
+#: update-lily.py:223
+#, c-format
+msgid "Cleaning `%s'..."
+msgstr "Renser \"%s\"..."
+
+#: update-lily.py:243
+#, c-format
+msgid "unpack and build in DIR [%s]"
+msgstr "udpak og byg i DIR [%s]"
+
+#: update-lily.py:244
+msgid "execute COMMAND, subtitute:"
+msgstr "kør COMMAND, erstat:"
+
+#: update-lily.py:245
+msgid "%b: build root"
+msgstr "%b: rod for opbygning"
+
+#: update-lily.py:246
+#, c-format
+msgid "%n: package name"
+msgstr "%n: pakkenavn"
+
+#: update-lily.py:247
+msgid "%r: release directory"
+msgstr "%r: katalog for programudgivelse"
+
+#: update-lily.py:248
+msgid "%t: tarball"
+msgstr "%t: tarball"
+
+#: update-lily.py:249
+msgid "%v: package version"
+msgstr "%v: pakkeversion"
+
+#: update-lily.py:252
+#, c-format
+msgid "keep all output, and name the directory %s"
+msgstr "behold al uddata, og døb kataloget til %s"
+
+#: update-lily.py:253
+msgid "upon failure notify EMAIL[,EMAIL]"
+msgstr "ved fejl, underret EMAIL[,EMAIL]"
+
+#: update-lily.py:254
+msgid "remove previous build"
+msgstr "fjern foregÃ¥ende bygning"
+
+#: update-lily.py:257
+#, c-format
+msgid "fetch and build URL [%s]"
+msgstr "hent og byg URL [%s]"
+
+#: update-lily.py:365
+#, c-format
+msgid "Listing `%s'..."
+msgstr "Lister \"%s\"..."
+
+#: update-lily.py:426
+#, c-format
+msgid "latest is: %s"
+msgstr "seneste er: %s"
+
+#: update-lily.py:427
+#, c-format
+msgid "relax, %s is up to date"
+msgstr "slap af, %s er seneste version"
+
+#: update-lily.py:435 update-lily.py:448
+#, c-format
+msgid "Fetching `%s'..."
+msgstr "Henter \"%s\"..."
+
+#: update-lily.py:457
+#, c-format
+msgid "Building `%s'..."
+msgstr "Bygger \"%s\"..."
+
+#: data-file.cc:54
+msgid "EOF in a string"
+msgstr "EOF i en streng"
+
+#: getopt-long.cc:145
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "flag \"%s\" kræver et argument"
+
+#: getopt-long.cc:149
+#, c-format
+msgid "option `%s' doesn't allow an argument"
+msgstr "flag.gan \"%s\" tillader intet argument"
+
+#: getopt-long.cc:153
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "ukendt flag: \"%s\""
+
+#: getopt-long.cc:160
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "ugyldigt argument \"%s\" til flag \"%s\""
+
+#: input.cc:96
+msgid "non fatal error: "
+msgstr "ikke-fatal fejl: "
+
+#: input.cc:104 source-file.cc:63 source-file.cc:156
+msgid "position unknown"
+msgstr "ukendt position"
+
+# det handlar om mmap hær
+#: mapped-file-storage.cc:74
+msgid "can't map file"
+msgstr "kan ikke lave \"mmap\" pÃ¥ filen"
+
+#: lilypond-stream.cc:111 mapped-file-storage.cc:87 paper-stream.cc:45
+#: scores.cc:48 simple-file-storage.cc:44 text-stream.cc:23
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "kan ikke Ã¥bne fil: \"%s\""
+
+#: simple-file-storage.cc:56
+#, c-format
+msgid "Huh?  Got %d, expected %d characters"
+msgstr "Øh? Fik %d, forventede %d tegn"
+
+#: text-stream.cc:10
+msgid "<stdin>"
+msgstr "<stdin>"
+
+#: warn.cc:36
+msgid "programming error: "
+msgstr "programmeringsfejl: "
+
+#: warn.cc:36
+msgid " (Continuing; cross thumbs)"
+msgstr " (Fortsætter, kryds fingrene)"
+
+#: afm.cc:59
+#, c-format
+msgid "can't find character number: %d"
+msgstr "kan ikke finde tegnnummer: %d"
+
+#: afm.cc:74
+#, c-format
+msgid "can't find character called: `%s'"
+msgstr "kan ikke finde tegn som hedder: \"%s\""
+
+#: afm.cc:124
+#, c-format
+msgid "Error parsing AFM file: `%s'"
+msgstr "Fejl ved tolkning af AFM-fil: \"%s\""
+
+#: all-font-metrics.cc:95
+#, c-format
+msgid "checksum mismatch for font file: `%s'"
+msgstr "fejlagtig checksum for skrifttypefil: \"%s\""
+
+#: all-font-metrics.cc:97
+#, c-format
+msgid "does not match: `%s'"
+msgstr "matcher ikke: \"%s\""
+
+#: all-font-metrics.cc:102
+msgid " Rebuild all .afm files, and remove all .pk and .tfm files.  Rerun with -V to show font paths."
+msgstr " Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med -V for at vise skrifttypesøgestier."
+
+#: all-font-metrics.cc:167
+#, c-format
+msgid "can't find font: `%s'"
+msgstr "kan ikke finde skrifttype: \"%s\""
+
+#: all-font-metrics.cc:168
+msgid "Loading default font"
+msgstr "Indlæser standardskrifttype"
+
+#: all-font-metrics.cc:183
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "kan ikke finde standardskrifttype: \"%s\""
+
+#: all-font-metrics.cc:184 includable-lexer.cc:51 scores.cc:137
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(søgesti: \"%s\")"
+
+#: all-font-metrics.cc:185
+msgid "Giving up"
+msgstr "Giver op"
+
+#: auto-change-iterator.cc:43 change-iterator.cc:59
+#: part-combine-music-iterator.cc:97
+msgid "Can't switch translators, I'm there already"
+msgstr "Kan ikke skifte oversætter, jeg er her allerede"
+
+#: beam.cc:86
+msgid "beam has less than two stems"
+msgstr "bjælke har mindre end to nodehalse"
+
+#: beam.cc:637
+msgid "weird beam vertical offset"
+msgstr "underligt lodret afstand for bjælke"
+
+#: beam-engraver.cc:91 beam-engraver.cc:124
+msgid "can't find start of beam"
+msgstr "kan ikke finde start pÃ¥ bjælke"
+
+#: beam-engraver.cc:158
+msgid "already have a beam"
+msgstr "har allerede en bjælke"
+
+#: beam-engraver.cc:222
+msgid "unterminated beam"
+msgstr "uafsluttet bjælke"
+
+#: beam-engraver.cc:260 chord-tremolo-engraver.cc:195
+msgid "stem must have Rhythmic structure"
+msgstr "nodehals skal have en rytmisk struktur"
+
+#: beam-engraver.cc:272
+msgid "stem doesn't fit in beam"
+msgstr "nodehalsen passer ikke i bjælke"
+
+#: beam-engraver.cc:273
+msgid "beam was started here"
+msgstr "bjælken startede her"
+
+#: break-align-item.cc:136
+#, c-format
+msgid "unknown spacing pair `%s', `%s'"
+msgstr "ukendt afstandspar \"%s\", \"%s\""
+
+#: change-iterator.cc:21
+#, c-format
+msgid "can't change `%s' to `%s'"
+msgstr "kan ikke Ã¦ndre \"%s\" til \"%s\""
+
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_str_  = change_l ()->change_to_id_str_;
+#.
+#: change-iterator.cc:78
+msgid "I'm one myself"
+msgstr "Jeg er selv Ã©n"
+
+#: change-iterator.cc:81
+msgid "none of these in my family"
+msgstr "ingen af disse i min familie"
+
+#: chord.cc:369
+#, c-format
+msgid "invalid subtraction: not part of chord: %s"
+msgstr "ugyldig subtraktion: ikke del af akkord: %s"
+
+# "pitch" hær skal alltsÃ¥ være en ton i et akkord
+#: chord.cc:398
+#, c-format
+msgid "invalid inversion pitch: not part of chord: %s"
+msgstr "ugyldig tone for inversion: ikke del af en akkord: %s"
+
+#: chord-tremolo-engraver.cc:141 percent-repeat-engraver.cc:192
+msgid "unterminated chord tremolo"
+msgstr "ikke-afsluttet akkordtremolo"
+
+#: chord-tremolo-iterator.cc:48
+msgid "no one to print a tremolos"
+msgstr "der er ingen som kan skrive en tremolo"
+
+#: collision.cc:127
+msgid "Too many clashing notecolumns.  Ignoring them."
+msgstr "For mange sammenhængende nodekolonner. Ignorerer dem."
+
+#: dimensions.cc:13
+msgid "NaN"
+msgstr "-"
+
+#: dynamic-engraver.cc:197 span-dynamic-performer.cc:86
+msgid "can't find start of (de)crescendo"
+msgstr "kan ikke finde starten pÃ¥ crescendo/diminuendo"
+
+#: dynamic-engraver.cc:222
+msgid "already have a crescendo"
+msgstr "har allerede et crescendo"
+
+#: dynamic-engraver.cc:223
+msgid "already have a decrescendo"
+msgstr "har allerede et diminuendo"
+
+#: dynamic-engraver.cc:317
+msgid "unterminated (de)crescendo"
+msgstr "uafsluttet crescendo/diminuendo"
+
+#: extender-engraver.cc:97
+msgid "unterminated extender"
+msgstr "uafsluttet udvider"
+
+#: extender-engraver.cc:109
+msgid "Nothing to connect extender to on the left.  Ignoring extender request."
+msgstr "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer Ã¸nsket om udvider"
+
+#: folded-repeat-iterator.cc:78
+msgid "no one to print a repeat brace"
+msgstr "det er ingen som kan skrive et gentagelsestegn"
+
+#: font-interface.cc:237
+msgid "couldn't find any font satisfying "
+msgstr "kunne ikke finde nogen skrifttype som opfylder "
+
+#: gourlay-breaking.cc:157
+msgid "No feasible line breaking found"
+msgstr "Ingen mulig linjebrydning fandtes"
+
+#: grace-iterator.cc:43
+msgid "no Grace context available"
+msgstr "ingen prydomgivelse tilgængelig"
+
+#: grace-position-engraver.cc:96
+msgid "Unattached grace notes.  Attaching to last musical column."
+msgstr "Ikke-fæstede prydsnoder. Fæster ved sidste musikkolonne."
+
+#: hairpin.cc:93
+msgid "decrescendo too small"
+msgstr "diminuendo for lille"
+
+#: hairpin.cc:94
+msgid "crescendo too small"
+msgstr "crescendo for lille"
+
+#: hyphen-engraver.cc:90
+msgid "unterminated hyphen"
+msgstr "uafsluttet bindestreg"
+
+#: hyphen-engraver.cc:102
+msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen request."
+msgstr "Det er ingenting at forbinde bindestregen mod til venstre. Ignorerer bindestregsforespørgslen."
+
+#: key-engraver.cc:99
+msgid "Conflicting key signatures found."
+msgstr "Konfliktende tonartssignaturer fundet."
+
+#: key-engraver.cc:100
+msgid "This was the other key definition."
+msgstr "Dette var den anden tonartsdefinition."
+
+#: key-performer.cc:77
+msgid "FIXME: key change merge"
+msgstr "FIX: tonartsskiftsfletning"
+
+#: lily-guile.cc:141
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(indlæsningssøgesti: \"%s\""
+
+#: line-of-score.cc:96
+#, c-format
+msgid "Element count %d."
+msgstr "Elementantal %d."
+
+#: line-of-score.cc:253 paper-score.cc:77
+#, c-format
+msgid "Element count %d "
+msgstr "Elementantal %d "
+
+#: line-of-score.cc:267
+msgid "Calculating column positions..."
+msgstr "Beregner kolonnepositioner..."
+
+#: lyric-phrasing-engraver.cc:284
+msgid "lyrics found without any matching notehead"
+msgstr "tekst fundet uden noget matchende nodehoved"
+
+#: lyric-phrasing-engraver.cc:289
+msgid "Huh? Melismatic note found to have associated lyrics."
+msgstr "Øh? Melismatisk node har tilhørende tekst."
+
+#: main.cc:104
+msgid "EXPR"
+msgstr "UDTR"
+
+#: main.cc:104
+msgid "evalute EXPR as Scheme after .scm init is read"
+msgstr "evaluér UDTR som Scheme efter .scm-init er læst"
+
+#. another bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format
+#: main.cc:107
+msgid "EXT"
+msgstr "FMT"
+
+#: main.cc:107
+msgid "use output format EXT (scm, ps, tex or as)"
+msgstr "brug uddataformat FMT (scm, ps, tex eller as)"
+
+#: main.cc:109
+msgid "FIELD"
+msgstr "FELT"
+
+#: main.cc:109
+msgid "write header field to BASENAME.FIELD"
+msgstr "skriv rubrikfælt til BASNAVN.FELT"
+
+#: main.cc:110
+msgid "add DIR to search path"
+msgstr "tilføj KATALOG til søgestien"
+
+#: main.cc:111
+msgid "use FILE as init file"
+msgstr "brug FIL som init-fil"
+
+#: main.cc:115
+msgid "prepend DIR to dependencies"
+msgstr "tilføj KATALOG efter afhængigheder"
+
+#: main.cc:116
+msgid "inhibit file output naming and exporting"
+msgstr "hindr navngivning af filuddata og eksportering"
+
+#.
+#. No version number or newline here. It confuses help2man
+#.
+#: main.cc:136
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr "Brug: %s [FLAG]... FIL..."
+
+#: main.cc:138
+msgid "Typeset music and or play MIDI from FILE"
+msgstr "Typesæt musik og/eller afspil MIDI fra FIL"
+
+#: main.cc:142
+msgid ""
+"LilyPond is a music typesetter.  It produces beautiful sheet music\n"
+"using a high level description file as input.  LilyPond is part of \n"
+"the GNU Project.\n"
+msgstr ""
+"LilyPond er en musiktypesætter. Den producerer smukke noder fra en\n"
+"højniveaubeskrivning af musikken i en fil. LilyPond er en del af\n"
+"GNU-projektet.\n"
+
+#: main.cc:152
+msgid "This binary was compiled with the following options:"
+msgstr "Dette program blev oversat med følgende flag:"
+
+#: main.cc:56 main.cc:179
+#, c-format
+msgid ""
+"This is free software.  It is covered by the GNU General Public License,\n"
+"and you are welcome to change it and/or distribute copies of it under\n"
+"certain conditions.  Invoke as `%s --warranty' for more information.\n"
+msgstr ""
+"Dette er frit programmel. Det dækkes af \"GNU General Public License\",\n"
+"og du mÃ¥ Ã¦ndre og/eller distribuere kopier af det under visse\n"
+"betingelser. Kør \"%s --warranty\" for mere information.\n"
+
+#: main.cc:63 main.cc:186 main.cc:198
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright Â© %s af"
+
+#: main.cc:196
+msgid "GNU LilyPond -- The music typesetter"
+msgstr "GNU Lilypond -- Musiktypesætteren"
+
+#: main.cc:72 main.cc:204
+msgid ""
+"    This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License version 2\n"
+"as published by the Free Software Foundation.\n"
+"\n"
+"    This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+"    You should have received a copy (refer to the file COPYING) of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+"USA.\n"
+msgstr ""
+"Dette program er frit programmel. Du kan distribuere det og/eller\n"
+"ændre det under betingelserne i GNU General Public License version 2,\n"
+"udgivet af Free Software Foundation.\n"
+"\n"
+"Dette program distribueres i hÃ¥b om at det vil være nyttigt, men\n"
+"UDEN NOGEN SOM HELST GARANTI, endog uden underforstÃ¥et garanti om\n"
+"SALGBARHED eller EGNETHED FOR NOGET SPECIELT FORMÃ…L. Se GNU General\n"
+"Public License for yderligere information.\n"
+"\n"
+"Du bør have fÃ¥et en kopi af GNU General Public License sammen med\n"
+"dette program. Hvis ikke, skriv til Free Software Foundation, Inc., 59\n"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
+
+#: midi-item.cc:139
+#, c-format
+msgid "no such instrument: `%s'"
+msgstr "instrumentet findes ikke: \"%s\""
+
+#: midi-item.cc:228
+msgid "silly duration"
+msgstr "tÃ¥belig længde"
+
+#: midi-item.cc:241
+msgid "silly pitch"
+msgstr "tÃ¥belig tone"
+
+#: musical-request.cc:28
+#, c-format
+msgid "Transposition by %s makes accidental larger than two"
+msgstr "Transponering med %s gør accicental større end to"
+
+#: music.cc:232
+msgid "ly_get_mus_property (): Not a Music"
+msgstr "ly_get_mus_property (): Ikke en \"Music\""
+
+#: music.cc:246
+msgid "ly_set_mus_property (): Not a symbol"
+msgstr "ly_set_mus_property (): ikke et symbol"
+
+#: music.cc:258
+msgid "ly_set_mus_property ():  not of type Music"
+msgstr "ly_set_mus_property (): ikke af typen \"Music\""
+
+#: music.cc:272
+msgid "ly_make_music (): Not a string"
+msgstr "ly_make_music (): Ikke en streng"
+
+#: music.cc:292
+msgid "ly_music_name (): Not a music expression"
+msgstr "ly_music_name (): Ikke et musikudtryk"
+
+#: music-output-def.cc:115
+#, c-format
+msgid "can't find `%s' context"
+msgstr "kan ikke finde omgivelsen \"%s\""
+
+#: my-lily-lexer.cc:139
+#, c-format
+msgid "Identifier name is a keyword: `%s'"
+msgstr "Identificerernavn er et nøgleord: \"%s\""
+
+#: my-lily-lexer.cc:159
+#, c-format
+msgid "error at EOF: %s"
+msgstr "fejl ved filslutning: %s"
+
+#: midi-score-parser.cc:94 my-lily-parser.cc:47
+msgid "Parsing..."
+msgstr "Tolker..."
+
+#: my-lily-parser.cc:57
+msgid "Braces don't match"
+msgstr "Krølleparenteser passer ikke"
+
+#: output-property-music-iterator.cc:20 request-chord-iterator.cc:76
+#, c-format
+msgid "Junking request: `%s'"
+msgstr "Stryger forespørgslen: \"%s\""
+
+#: paper-def.cc:109
+#, c-format
+msgid "paper output to `%s'..."
+msgstr "papirsuddata til \"%s\"..."
+
+#: lilypond-stream.cc:93 paper-outputter.cc:85 performance.cc:99
+msgid ", at "
+msgstr ", ved "
+
+#: paper-outputter.cc:232
+#, c-format
+msgid "writing header field `%s' to `%s'..."
+msgstr "skriver rubrikfelt \"%s\" til \"%s\"..."
+
+#: paper-score.cc:80
+msgid "Preprocessing elements..."
+msgstr "Forbehandler element..."
+
+#: paper-score.cc:114
+msgid "Outputting Score, defined at: "
+msgstr "Udskriver partitur, defineret ved: "
+
+#: paper-stream.cc:41
+#, c-format
+msgid "can't create directory: `%s'"
+msgstr "kan ikke oprette katalog: \"%s\""
+
+#: paper-stream.cc:55
+msgid "Error syncing file (disk full?)"
+msgstr "Fejl ved synkning af fil (disken fuld?)"
+
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_str_  = change_l ()->change_to_id_str_;
+#.
+#: part-combine-music-iterator.cc:116
+#, c-format
+msgid "I'm one myself: `%s'"
+msgstr "Jag er selv Ã©n: \"%s\""
+
+#: part-combine-music-iterator.cc:119
+#, c-format
+msgid "none of these in my family: `%s'"
+msgstr "ingen af disse i min familie: \"%s\""
+
+#: percent-repeat-engraver.cc:117
+msgid "Don't know how to handle a percent repeat of this length."
+msgstr "Véd ikke hvordan en procentgentagelse af denne længde skal hÃ¥ndteres."
+
+#: percent-repeat-iterator.cc:53
+msgid "no one to print a percent"
+msgstr "der er ingen som kan skrive en procent"
+
+#: performance.cc:51
+msgid "Track ... "
+msgstr "Spor... "
+
+#: performance.cc:83
+msgid "Creator: "
+msgstr "Skaber: "
+
+#: performance.cc:113
+#, c-format
+msgid "from musical definition: %s"
+msgstr "fra musikdefinition: %s"
+
+#: performance.cc:168
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr "MIDI-uddata til \"%s\"..."
+
+#: phrasing-slur-engraver.cc:119
+msgid "unterminated phrasing slur"
+msgstr "uafsluttet fraseringsbue"
+
+#: phrasing-slur-engraver.cc:134
+msgid "can't find start of phrasing slur"
+msgstr "kan ikke finde start pÃ¥ fraseringsbue"
+
+#: piano-pedal-engraver.cc:142 piano-pedal-engraver.cc:154
+#: piano-pedal-performer.cc:87
+#, c-format
+msgid "can't find start of piano pedal: `%s'"
+msgstr "kan ikke finde start pÃ¥ pianopedal: \"%s\""
+
+#: pitch.cc:25
+msgid "Pitch arguments out of range"
+msgstr "Toneargument udenfor intervallet"
+
+#: property-engraver.cc:121
+#, c-format
+msgid ""
+"`%s' is deprecated.  Use\n"
+" \\property %s.%s \\override #'%s = #%s"
+msgstr ""
+"\"%s\" er forældet. Brug\n"
+" \\property %s.%s \\override #'%s = #%s"
+
+#: property-engraver.cc:145
+#, c-format
+msgid "Wrong type for property: %s, type: %s, value found: %s, type: %s"
+msgstr "Forkert type for egenskab: %s, type: %s, værdi fundet: %s, type: %s"
+
+#: rest-collision.cc:194
+msgid "too many colliding rests"
+msgstr "for mange kolliderende pauser"
+
+#: rest-collision.cc:198
+msgid "too many notes for rest collision"
+msgstr "for mange noder for pausesammenstød"
+
+#: scm-option.cc:59
+msgid "Scheme options:"
+msgstr "Scheme-flag:"
+
+#: score.cc:78
+msgid "Interpreting music..."
+msgstr "Tolker musik..."
+
+#: score.cc:92
+msgid "Need music in a score"
+msgstr "Behøver musik i partitur"
+
+#. should we? hampers debugging.
+#: score.cc:105
+msgid "Errors found/*, not processing score*/"
+msgstr "Fejl fundne/*, behandler ikke partitur*/"
+
+#: score.cc:112
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "tidsforbrug: %.2f sekunder"
+
+#: score-engraver.cc:188
+#, c-format
+msgid "unbound spanner `%s'"
+msgstr "ubunden bro \"%s\""
+
+#: scores.cc:106
+msgid "Score contains errors; will not process it"
+msgstr "Partitur indholder fejl; vil ikke behandle det"
+
+#: scores.cc:152
+#, c-format
+msgid "Now processing: `%s'"
+msgstr "Behandler nu: \"%s\""
+
+#: script-engraver.cc:66
+#, c-format
+msgid "Don't know how to interpret articulation `%s'"
+msgstr "Kan ikke tolke artikulering \"%s\""
+
+#. this shouldn't happen, but let's continue anyway.
+#: separation-item.cc:47
+msgid "Separation_item:  I've been drinking too much"
+msgstr "Separation_item: Jeg har drukket for meget"
+
+#: slur.cc:48
+msgid "Putting slur over rest.  Ignoring."
+msgstr "Sætter bue over pause. Ignorerer."
+
+#: slur.cc:383
+msgid "Slur over rest?"
+msgstr "Bue over pause?"
+
+#: slur-engraver.cc:127
+msgid "unterminated slur"
+msgstr "uafsluttet bue"
+
+#. How to shut up this warning, when Voice_devnull_engraver has
+#. eaten start request?
+#: slur-engraver.cc:144
+msgid "can't find start of slur"
+msgstr "kan ikke finde start pÃ¥ bue"
+
+#: stem.cc:116
+msgid "Weird stem size; check for narrow beams"
+msgstr "Mærkelig nodehalsstørrelse; tjek for smalle bjælker"
+
+#: stem-engraver.cc:115
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr "Tilføjer nodehoved til inkompatibel bue (type = %d)"
+
+#: text-spanner.cc:121
+msgid "Text_spanner too small"
+msgstr "Tekst_bro for lille"
+
+#: text-spanner-engraver.cc:94
+msgid "can't find start of text spanner"
+msgstr "kan ikke finde start pÃ¥ tekstbro"
+
+#: text-spanner-engraver.cc:114
+msgid "already have a text spanner"
+msgstr "har allerede en tekstbro"
+
+#: text-spanner-engraver.cc:169
+msgid "unterminated text spanner"
+msgstr "uafsluttet tekstbro"
+
+#: tfm.cc:77
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr "kan ikke finde ASCII-tegn: %d"
+
+#: tfm-reader.cc:106
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr "TFM-rubrik i \"%s\" har kun %u ord"
+
+#: tfm-reader.cc:140
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan hÃ¥ndtere"
+
+#. How to shut up this warning, when no notes appeared because
+#. they were suicided by Thread_devnull_engraver?
+#: tie-engraver.cc:220 tie-performer.cc:173
+msgid "No ties were created!"
+msgstr "Ingen buer blev lavet!"
+
+#: tie-engraver.cc:240
+msgid "lonely tie"
+msgstr "ensom bue"
+
+#: time-scaled-music-iterator.cc:25
+msgid "no one to print a tuplet start bracket"
+msgstr "der findes ingen som kan skrive en startparentes for tuppel"
+
+#: timing-translator.cc:38
+#, c-format
+msgid "barcheck failed at: %s"
+msgstr "taktkontrol mislykkedes ved: %s"
+
+#: translator-ctors.cc:40
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr "ukendt oversætter: \"%s\""
+
+#: translator-def.cc:99
+msgid "Program has no such type"
+msgstr "Programmet har ingen sÃ¥dan type"
+
+#: translator-def.cc:105
+#, c-format
+msgid "Already contains: `%s'"
+msgstr "Indholder allerede: \"%s\""
+
+#: translator-def.cc:106
+#, c-format
+msgid "Not adding translator: `%s'"
+msgstr "Tilføjer ikke oversætter: \"%s\""
+
+#: translator-def.cc:224
+#, c-format
+msgid "can't find: `%s'"
+msgstr "kan ikke finde: \"%s\""
+
+#: translator-group.cc:146
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr "kan ikke finde eller oprette \"%s\" kaldet \"%s\""
+
+#: translator-group.cc:231
+#, c-format
+msgid "can't find or create: `%s'"
+msgstr "kan ikke finde eller oprette: \"%s\""
+
+#: translator-group.cc:414
+#, c-format
+msgid "Can't find property type-check for `%s'.  Perhaps you made a typing error? Doing assignment anyway."
+msgstr "Kan ikke finde egenskabstypekontrol for \"%s\". MÃ¥ske har du lavet en tastefejl? Laver tildeling alligevel."
+
+#: translator-group.cc:428
+#, c-format
+msgid "Type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\""
+
+#. programming_error?
+#: translator-group.cc:447
+msgid "ly-get-trans-property: expecting a Translator_group argument"
+msgstr "ly-get-trans-property: forventede et Translator_group-argument"
+
+#: volta-engraver.cc:87
+msgid "No volta spanner to end"
+msgstr "Ingen reprisebro til slut"
+
+#: volta-engraver.cc:104
+msgid "Already have a volta spanner.  Stopping that one prematurely."
+msgstr "Har allerede en reprisebro. Stopper denne for tidligt."
+
+#: volta-engraver.cc:108
+msgid "Also have a stopped spanner.  Giving up."
+msgstr "Har ogsÃ¥ en stoppet bro. Giver op."
+
+#: parser.yy:121
+#, c-format
+msgid "Expecting %d arguments"
+msgstr "Forventer %d argumenter"
+
+#: parser.yy:423
+msgid "Identifier should have  alphabetic characters only"
+msgstr "Identificerer mÃ¥ kun indeholde alfabetiske tegn"
+
+#: parser.yy:697
+msgid "More alternatives than repeats.  Junking excess alternatives."
+msgstr "Flere alternativer end repriser. Stryger tiloversblevne alternativer."
+
+#: parser.yy:761
+msgid "Second argument must be a symbol"
+msgstr "Andet argument skal være et symbol"
+
+#: parser.yy:766
+msgid "First argument must be a procedure taking 1 argument"
+msgstr "Første argument skal være en procedure som tager 1 argument"
+
+#: parser.yy:1263
+msgid "Expecting string as script definition"
+msgstr "Forventer streng som skriptdefinition"
+
+#: parser.yy:1273
+msgid "Can't specify direction for this request"
+msgstr "Kan ikke angive retning for denne forespørgsel"
+
+#: parser.yy:1398
+msgid "Expecting musical-pitch value"
+msgstr "Forventer nodeværdi"
+
+#: parser.yy:1409
+msgid "Must have duration object"
+msgstr "Skal have tidslængdeobjekt"
+
+#: parser.yy:1418 parser.yy:1426
+msgid "Have to be in Lyric mode for lyrics"
+msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
+
+#: parser.yy:1579 parser.yy:1636
+#, c-format
+msgid "not a duration: %d"
+msgstr "ikke en tidslængde: %d"
+
+#: parser.yy:1645
+msgid "Have to be in Note mode for notes"
+msgstr "Skal være i nodetilstand (Note mode) for noder"
+
+#: parser.yy:1731
+msgid "Have to be in Chord mode for chords"
+msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
+
+#: parser.yy:1910
+msgid "need integer number arg"
+msgstr "behøver heltalsargument"
+
+#: lexer.ll:174
+msgid "EOF found inside a comment"
+msgstr "filslutning fundet inden i en kommentar"
+
+#: lexer.ll:188
+msgid "\\maininput disallowed outside init files"
+msgstr "\\maininput forbudt udenfor init-filer"
+
+#: lexer.ll:212
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr "fejlagtig eller udefineret identificerer: \"%s\""
+
+#. backup rule
+#: lexer.ll:221
+msgid "Missing end quote"
+msgstr "Mangler slutcitationstegn"
+
+#. backup rule
+#: lexer.ll:243 lexer.ll:247
+msgid "white expected"
+msgstr "forventede mellemrum"
+
+#: lexer.ll:256
+msgid "Can't evaluate Scheme in safe mode"
+msgstr "Kan ikke evaluere Scheme i sikker tilstand"
+
+#: lexer.ll:349
+msgid "Brace found at end of lyric. Did you forget a space?"
+msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
+
+#: lexer.ll:457
+#, c-format
+msgid "invalid character: `%c'"
+msgstr "ugyldigt tegn: \"%c\""
+
+#: lexer.ll:538
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "ukendt \"escaped\" streng: \"\\%s\""
+
+#: lexer.ll:617
+#, c-format
+msgid "Oldest supported input version: %s"
+msgstr "Ældste inddataversion som understøttes: %s"
+
+#: lexer.ll:629
+#, c-format
+msgid "incorrect lilypond version: %s (%s, %s)"
+msgstr "fejlagtig lilypond-version: %s (%s, %s)"
+
+#: lexer.ll:630
+msgid "Consider converting the input with the convert-ly script"
+msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
+
+#: lilypond-item.cc:161
+#, c-format
+msgid "#32 in quarter: %d"
+msgstr "#32 i fjerdedel: %d"
+
+#: lilypond-score.cc:108
+#, c-format
+msgid "LY output to `%s'..."
+msgstr "LY-uddata til \"%s\"..."
+
+#: lilypond-score.cc:119
+#, c-format
+msgid "track %d:"
+msgstr "spor %d:"
+
+#: lilypond-score.cc:155
+msgid "Processing..."
+msgstr "Behandler..."
+
+#: lilypond-score.cc:164
+msgid "Creating voices..."
+msgstr "Laver stemmer..."
+
+#: lilypond-score.cc:168
+msgid "track "
+msgstr "spor "
+
+#: lilypond-score.cc:177
+msgid "NOT Filtering tempo..."
+msgstr "Filtrerer IKKE tempo..."
+
+#: lilypond-score.cc:186
+msgid "NOT Quantifying columns..."
+msgstr "Kvantificerer IKKE kolonner..."
+
+#: lilypond-score.cc:190
+msgid "Quantifying columns..."
+msgstr "Kvantificerer kolonner..."
+
+#: lilypond-score.cc:223
+msgid "Settling columns..."
+msgstr "Bestemmer kolonner..."
+
+#: lilypond-staff.cc:209
+msgid "% MIDI copyright:"
+msgstr "% MIDI-copyright:"
+
+#: lilypond-staff.cc:210
+msgid "% MIDI instrument:"
+msgstr "% MIDI-instrument:"
+
+#: lilypond-stream.cc:37
+#, c-format
+msgid "lily indent level: %d"
+msgstr "indenteringsniveau for lily: %d"
+
+# Kanske man ikke skal oversætta, men nÃ¥r fÃ¥r de tage bort _() i stællet for
+# at skrive en fÃ¥nig kommentar
+#. Maybe better not to translate these?
+#: lilypond-stream.cc:83
+msgid "% Creator: "
+msgstr "% Kreatør: "
+
+#: lilypond-stream.cc:88
+msgid "% Automatically generated"
+msgstr "% Automatgenereret"
+
+#: lilypond-stream.cc:97
+#, c-format
+msgid "% from input file: "
+msgstr "% fra inddatafil: "
+
+#: main.cc:94
+msgid "write exact durations, e.g.: a4*385/384"
+msgstr "skriv eksakte tidslængder, fx: a4*385/384"
+
+#: main.cc:95
+msgid "enable debugging output"
+msgstr "aktivér fejlsøgningsuddata"
+
+#: main.cc:97
+msgid "ACC[:MINOR]"
+msgstr "TONE[:MOL]"
+
+#: main.cc:97
+msgid "set key: ACC +sharps/-flads; :1 minor"
+msgstr "sæt tonart: TONE +forhøjelser/-sænkninger; :1 mol"
+
+#: main.cc:98
+msgid "don't output tuplets, double dots or rests, smallest is 32"
+msgstr "udskriv ikke tupler, dobbeltpunktninger eller pauser, mindste er 32"
+
+#: main.cc:99
+msgid "set FILE as default output"
+msgstr "sæt FIL som standarduddata"
+
+#: main.cc:100
+msgid "don't output tuplets"
+msgstr "udskriv ikke tupler"
+
+#: main.cc:101
+msgid "be quiet"
+msgstr "vær stille"
+
+#: main.cc:102
+msgid "don't output rests or skips"
+msgstr "udskriv ikke pauser eller hop"
+
+#: main.cc:103
+msgid "DUR"
+msgstr "LÆNGDE"
+
+#: main.cc:103
+msgid "set smallest duration"
+msgstr "indstil mindste længde"
+
+#: main.cc:104
+msgid "don't timestamp the output"
+msgstr "tidsstempl ikke uddata"
+
+#: main.cc:106
+msgid "be verbose"
+msgstr "vær udførlig"
+
+#: main.cc:108
+msgid "assume no double dotted notes"
+msgstr "antag ingen dobbeltpunktede noder"
+
+#: main.cc:115
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
+msgstr "Brug: %s [FLAG]... [FIL]"
+
+#: main.cc:117
+msgid "Translate MIDI-file to lilypond"
+msgstr "Oversæt MIDI-fil til lilypond"
+
+#: main.cc:131
+#, c-format
+msgid "no_double_dots: %d\n"
+msgstr "no_double_dots: %d\n"
+
+#: main.cc:133
+#, c-format
+msgid "no_rests: %d\n"
+msgstr "no_rests: %d\n"
+
+#: main.cc:135
+#, c-format
+msgid "no_quantify_b_s: %d\n"
+msgstr "no_quantify_b_s: %d\n"
+
+#: main.cc:137
+#, c-format
+msgid "no_smaller_than: %d (1/%d)\n"
+msgstr "no_smaller_than: %d (1/%d)\n"
+
+#: main.cc:140
+#, c-format
+msgid "no_tuplets: %d\n"
+msgstr "no_tuplets: %d\n"
+
+#: midi-parser.cc:64
+msgid "zero length string encountered"
+msgstr "streng med længde nul mødtes"
+
+#: midi-score-parser.cc:44
+msgid "MIDI header expected"
+msgstr "forventede MIDI-rubrik"
+
+#: midi-score-parser.cc:49
+msgid "invalid header length"
+msgstr "ugyldig rubriklængde"
+
+#: midi-score-parser.cc:52
+msgid "invalid MIDI format"
+msgstr "ugyldigt MIDI-format"
+
+#: midi-score-parser.cc:55
+msgid "invalid number of tracks"
+msgstr "ugyldigt antal spor"
+
+#: midi-score-parser.cc:58
+msgid "can't handle non-metrical time"
+msgstr "kan ikke hÃ¥ndtere ikke-metrisk tid"
+
+#: midi-track-parser.cc:68
+#, c-format
+msgid "Junking note-end event: channel = %d, pitch = %d"
+msgstr "Stryger nodeslutshændelse: kanal = %d, tone = %d"
+
+#: midi-track-parser.cc:124
+msgid "invalid running status"
+msgstr "ugyldig kørselstatus"
+
+#: midi-track-parser.cc:328
+msgid "unimplemented MIDI meta-event"
+msgstr "uimplementeret MIDI-metahændelse"
+
+#: midi-track-parser.cc:333
+msgid "invalid MIDI event"
+msgstr "ugyldig MIDI-hændelse"
+
+#: midi-track-parser.cc:348
+msgid "MIDI track expected"
+msgstr "forventede MIDI-spor"
+
+#: midi-track-parser.cc:353
+msgid "invalid track length"
+msgstr "ugyldig sporlængde"
index 4475fd390c8faa81ae4077a185783128eee9778b..88992926cfb0fe56c90b43e3887f020fa7f5b756 100644 (file)
@@ -81,7 +81,6 @@
      ((end * * 12 8) . ,(make-moment 3 8))
      ((end 1 16 12 8) . ,(make-moment 3 8))
      ((end 1 32 12 8) . ,(make-moment 1 8))
-     (meta . ,(grob-description  "autoBeamSettings"))
      ))
 
 ;;; Users may override in most cases, simply by issuing
index 4c14181208f39484fb7e45d66e9317fd4aa04d53..63d2937e15827bb2137fe05aed656202c83004dd 100644 (file)
      (node (grob-name name))
      (texi-section 2 (grob-name name) #f)
      "\n"
-
      (let* ((grob (string->symbol name))
-           (engravers
-            (apply append
-                   (map (lambda (x)
-                          (let ((engraver (car x))
-                                (objs (cadddr x)))
-                            (if (member grob objs)
-                                (list engraver)
-                                '())))
-                        engraver-description-alist))))
+           (engravers (filter-list
+                       (lambda (x) (engraver-makes-grob? name x)) all-engravers-list))
+           (engraver-names (map Translator::name engravers))
+           )
+
        (string-append
        name " grobs are created by: "
        (human-listify (map ref-ify
-                           (map engraver-name
-                                (map symbol->string engravers))))))
+                           (map engraver-name engraver-names)))))
 
-     (apply string-append ifacedoc))))
+           (apply string-append ifacedoc))))
      
+(define (engraver-makes-grob? name grav)
+  (memq name (assoc 'grobs-created (Translator::description grav)))
+  )
 
 (define (document-all-grobs name)
   (let* ((doc (apply string-append
diff --git a/scm/context-description.scm b/scm/context-description.scm
new file mode 100644 (file)
index 0000000..505bc07
--- /dev/null
@@ -0,0 +1,92 @@
+
+;; todo: move this to engraver-init.ly 
+
+(define context-description-alist
+  '(
+    (Grace . "
+    The context for handling grace notes.  It used to be instantiated
+    automatically when you use @code{\grace}.  Basically, it is an
+    `embedded' miniature of the Score context.  Since this context
+    needs special interaction with the rest of LilyPond, you should
+    not explicitly instantiate it.
+
+   DEPRECATED.
+")
+    (LyricsVoice . "
+    Corresponds to a voice with lyrics.  Handles the printing of a
+    single line of lyrics.
+")
+    (Thread . "
+    Handles note heads, and is contained in the Voice context.  You
+    have to instantiate this explicitly if you want to adjust the
+    style of individual note heads.
+")
+    (Voice . "
+    Corresponds to a voice on a staff.  This context handles the
+    conversion of dynamic signs, stems, beams, super- and subscripts,
+    slurs, ties, and rests.
+
+    You have to instantiate this explicitly if you want to have
+    multiple voices on the same staff.")
+
+    (ChordNamesVoice . "
+    A voice with chord names.  Handles printing of a line of chord
+    names.")
+
+    (ChordNames . "
+    Typesets chord names.  Can contain @code{ChordNamesVoice}
+    contexts.")
+
+    (Lyrics . "
+    Typesets lyrics.  It can contain @code{LyricsVoice} contexts.
+")
+    (Staff . "
+    Handles clefs, bar lines, keys, accidentals.  It can contain
+    @code{Voice} contexts.
+")
+    (RhythmicStaff . "
+    A context like @code{Staff} but for printing rhythms.  Pitches are
+    ignored; the notes are printed on one line.  It can contain
+    @code{Voice} contexts.
+")
+    (GrandStaff . "
+    Contains @code{Staff} or @code{RhythmicStaff} contexts.  It adds a
+    brace on the left side, grouping the staves together.  The bar
+    lines of the contained staves are connected vertically.  It can
+    contain @code{Staff} contexts.")
+
+    (PianoStaff . "
+    Just like @code{GrandStaff} but with @code{minVerticalAlign} set
+    equal to @code{maxVerticalAlign} so that interstaff beaming and
+    slurring can be used.")
+
+    (StaffGroup . "
+    Contains @code{Staff} or @code{RhythmicStaff} contexts.  Adds a
+    bracket on the left side, grouping the staves together.  The bar
+    lines of the contained staves are connected vertically.  It can
+    contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or
+    @code{Lyrics} contexts.
+")
+    (ChoirStaff . "
+    Identical to @code{StaffGroup} except that the contained staves
+    are not connected vertically.
+")
+    (Score . "
+    This is the top level notation context.  No other context can
+    contain a @code{Score} context.  This context handles the
+    administration of time signatures.  It also makes sure that items
+    such as clefs, time signatures, and key-signatures are aligned
+    across staves.  It can contain @code{Lyrics}, @code{Staff},
+    @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and
+    @code{ChoirStaff} contexts.
+
+    You cannot explicitly instantiate a Score context (since it is
+    not contained in any other context).  It is instantiated
+    automatically when an output definition (a @code{\score} or
+    @code{\paper} block) is processed.
+")
+    )
+  )
+
+(set! context-description-alist
+      (sort context-description-alist alist<?))
index ce550d3bcdce26e35cfa159221db74f90ccc5edc..3a27cbbc7772fb0e4db131f246ee5955817786e7 100644 (file)
@@ -130,6 +130,7 @@ Add a ref if REF is set
    "\n@contents"
    ))
 
+
 (define (context-name name)
   name)
 
@@ -137,7 +138,9 @@ Add a ref if REF is set
   name)
 
 (define (grob-name name)
-  name)
+  (if (symbol? name)
+      (symbol->string name)
+      name))
 
 (define (interface-name name)
   name)
index 862a1da057efa2af56a5a1a8ae1df7077cfebe5c..6183686e0c52e7fac071290ac8a59cccea85b6a9 100644 (file)
@@ -1,5 +1,5 @@
 
-;;; engraver-documentation-lib.scm -- Functions for engraver documentation
+;;; engraver-doumentation-lib.scm -- Functions for engraver documentation
 ;;;
 ;;; source file of the GNU LilyPond music typesetter
 ;;; 
 
 ;; First level Engraver description and
 ;; second level Context description
-(define (document-engraver where engraver-descr)
+(define (document-engraver where engraver)
+
   (let* (
         (level (if (eq? where 'context) 3 2))
-        (props (car (cdddr engraver-descr)))
-        (name (car engraver-descr))
+        (propsr (cdr (assoc 'properties-read (Translator::description engraver))))
+        (propsw (cdr (assoc 'properties-written (Translator::description engraver))))   
+        (name (Translator::name engraver))
         (name-sym (string->symbol name))
-        (desc (cadr engraver-descr))
-        (objs (map symbol->string (caddr engraver-descr)))
+        (desc (cdr (assoc 'description (Translator::description engraver))))
+        (grobs (cdr (assoc 'grobs-created (Translator::description engraver))))
         )
 
     (string-append
      (texi-section level (engraver-name name) (eq? where 'context))
      desc
      "\n\n"
-     (if (null? props)
+     (if (null? propsr)
         ""
         (string-append
-         (texi-section (+ level 1) "Properties" #f)
+         (texi-section (+ level 1) "Properties (read)" #f)
          (description-list->texi
-          (map (lambda (x) (document-translator-property x)) props))))
-     (if  (null? objs)
+          (map (lambda (x) (document-translator-property x)) propsr))))
+     (if (null? propsw)
+        ""
+        (string-append
+         (texi-section (+ level 1) "Properties (write)" #f)
+         (description-list->texi
+          (map (lambda (x) (document-translator-property x)) propsw))))
+     (if  (null? grobs)
          ""
          (string-append
           "This engraver creates the following grobs: \n "
-          (human-listify (map ref-ify (uniq-list (sort  objs string<? ))))
+          (human-listify (map ref-ify (uniq-list (sort  grobs string<? ))))
           ".")
          )
 
 
 
 ;; First level Engraver description
-(define (document-separate-engraver top description)
-  (let ((name (car description)))
+(define (document-separate-engraver top grav)
+  (let ((name (Translator::name grav)))
     (processing name)
     (string-append
      (node (engraver-name name))
-     (document-engraver 'self description))))
+     (document-engraver 'self grav))))
 
 ;; Second level, part of Context description
+(define (find-engraver-by-name name list)
+  (if (null? list)
+      #f
+      (if (equal? name (Translator::name (car list)))
+         (car list)
+         (find-engraver-by-name name (cdr list)))))
+
 (define (document-engraver-by-name name)
   (let*
       (
-       (eg (assoc (string->symbol name) engraver-description-alist))
+       (eg (find-engraver-by-name name all-engravers-list))
        )
 
     (if (eq? eg #f)
        (string-append "Engraver " name ", not documented.\n")
-       (document-engraver 'context (cdr eg))
+       (document-engraver 'context eg)
        )
     ))
 
 
 (define (engraver-grobs  name)
   (let* (
-        (eg (assoc (string->symbol name) engraver-description-alist))
+        (eg (find-engraver-by-name name all-engravers-list))
       )
 
     (if (eq? eg #f)
        '()
-       (map symbol->string (caddr (cdr eg)))
+       (cdr (assoc 'grobs-created (Translator::description eg)))
        )
   ))
 
                               names))
      doc)))
 
+(define all-engravers-list  (ly-get-all-translators))
 (define (document-all-engravers name)
-  (let* ((descs (map cdr engraver-description-alist))
-        (names (map symbol->string (map car engraver-description-alist)))
+  (let* ((gravs all-engravers-list)
+        (names (map Translator::name gravs))
         (doc (apply string-append
                     (map (lambda (x) (document-separate-engraver name x))
-                         descs))))
+                         gravs))))
     (string-append
      (texi-node-menu name (map (lambda (x) (cons (engraver-name x) ""))
                               names))
index 114d5f2de74a6026a71f7a7602344e3272878894..5e3f8f805f207ce67032cac57603ec0a3891ac49 100644 (file)
 ;;; Running LilyPond on this file generates the documentation
 
 
+(define load-files '("documentation-lib.scm"
+                    "engraver-documentation-lib.scm"
+                    "music-documentation-lib.scm"
+                    "backend-documentation-lib.scm"))
+
+(map load-from-path load-files)
 
-;; We use ly-gulp because these files live in
-;;
-;;     PATH=$LILYPONDPREFIX/scm:<datadir>/scm
-;;
-(eval-string
- (apply string-append
- (map ly-gulp-file '("documentation-lib.scm"
-                               "engraver-documentation-lib.scm"
-                               "music-documentation-lib.scm"
-                               "backend-documentation-lib.scm"))))
 
 ;;(define no-copies #t)  ; from 490 to 410K, but doesn't look nice yet
 ;;
index 98f29a9d6d1f401aea51fffd8049a540a6a514df..3683ebda1ed9759ff4c56412ad2b23c36070cc82 100644 (file)
@@ -1,3 +1,4 @@
+
 ;;;; grob-description.scm -- part of generated backend documentation
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
@@ -18,6 +19,7 @@
     ))
 
 
+;;; WARNING: the meta field should be the last one. 
 (define all-grob-descriptions
   `(
     (Accidentals . (
@@ -27,7 +29,7 @@
                (direction . -1)
                (left-padding . 0.2)
                (right-padding . 0.4)
-               (meta . ,(grob-description "Accidentals"  accidentals-interface font-interface side-position-interface))
+               (meta . ,(grob-description accidentals-interface font-interface side-position-interface))
        ))
 
     (Arpeggio . (
               (X-offset-callbacks . (,Side_position_interface::aligned_side))
               (direction . -1)
               (staff-position . 0.0)
-              (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface))
+              (meta . ,(grob-description arpeggio-interface side-position-interface font-interface))
               ))
 
-    (autoBeamSettings . ,auto-beam-settings)
-
     (BarLine . (
                (break-align-symbol . Staff_bar)
                (glyph . "|")
@@ -59,7 +59,7 @@
                (thin-kern . 3.0)
                (hair-thickness . 1.6)
                (thick-thickness . 6.0)
-               (meta . ,(grob-description  "BarLine" bar-line-interface font-interface))
+               (meta . ,(grob-description bar-line-interface font-interface))
        ))
 
        (BarNumber . (
@@ -71,7 +71,7 @@
                 (font-family . roman)
                (font-relative-size . -1)
                (Y-offset-callbacks . (,Side_position_interface::aligned_side))
-               (meta . ,(grob-description "BarNumber"
+               (meta . ,(grob-description
                                           side-position-interface
                        text-interface  font-interface break-aligned-interface))
        ))
@@ -83,7 +83,7 @@
                       (accidental-alist . ,default-alteration-alist)
                       (font-family . number)
                       (font-relative-size . -1)
-                      (meta . ,(grob-description "BassFigure" text-interface font-interface ))
+                      (meta . ,(grob-description text-interface font-interface ))
        ))
        (Beam . (
                 ;; todo: clean this up a bit: the list is getting
                 (space-function . ,default-beam-space-function)
                 (damping . 1)
                 (auto-knee-gap . 7)
-                (meta . ,(grob-description "Beam" beam-interface))
+                (meta . ,(grob-description beam-interface))
                 ))
         
        (BreakAlignment . (
                (stacking-dir . 1)
                (axes 0)
                (space-alist . ,default-break-align-space-alist) 
-               (meta . ,(grob-description "BreakAlignment"
+               (meta . ,(grob-description
                        axis-group-interface align-interface
                        )
                )
                (axes  . (0))
                (X-offset-callbacks . (,Break_align_interface::alignment_callback))
                
-               (meta . ,(grob-description "BreakAlignGroup" axis-group-interface))
+               (meta . ,(grob-description axis-group-interface))
        ))
 
        (BreathingSign . (
                (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))
+               (meta . ,(grob-description  break-aligned-interface))
        ))
 
        (Clef . (
           (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 ))
+          (meta . ,(grob-description clef-interface font-interface break-aligned-interface ))
        ))
 
        (ChordName . (
                (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))
+               (meta . ,(grob-description  font-interface text-interface chord-name-interface))
        ))
 
        (Custos . (
                (visibility-lambda . ,end-of-line-visible)
               (style .  vaticana)
               (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
-               (meta . ,(grob-description "Custos" custos-interface staff-symbol-referencer-interface break-aligned-interface) )
+               (meta . ,(grob-description custos-interface staff-symbol-referencer-interface break-aligned-interface) )
        ))
        
 
                (X-extent-callback . ,Axis_group_interface::group_extent_callback)
                
                (X-offset-callbacks . (,Dot_column::side_position))
-               (meta . ,(grob-description "DotColumn" dot-column-interface  axis-group-interface))
+               (meta . ,(grob-description dot-column-interface axis-group-interface))
        ))
 
        (Dots . (
                (dot-count . 1)
                (staff-position . 0.0)
                (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
-               (meta . ,(grob-description "Dots"  font-interface dots-interface ))
+               (meta . ,(grob-description  font-interface dots-interface ))
        ))
        (DoublePercentRepeat
         . ((molecule-callback . ,Percent_repeat_item_interface::double_percent)
            (thickness . 0.48)
            (break-align-symbol . Staff_bar)
            (visibility-lambda . ,begin-of-line-invisible)
-           (meta . ,(grob-description "DoublePercentRepeat" font-interface percent-repeat-interface))
+           (meta . ,(grob-description font-interface percent-repeat-interface))
            ))
        
        (DynamicText . (
                (font-family . dynamic)
                (font-shape . italic)
                (self-alignment-Y . 0)
-               (meta . ,(grob-description "DynamicText" font-interface text-interface dynamic-interface))
+               (meta . ,(grob-description font-interface text-interface dynamic-interface))
        ))
        
        (DynamicLineSpanner . (
                (padding . 0.6)
                (minimum-space . 1.2)
                (direction . -1)
-               (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface))
+               (meta . ,(grob-description 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))
+               (meta . ,(grob-description break-aligned-interface))
        ))
        
        (Fingering . (
                (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))
+               (meta . ,(grob-description finger-interface  font-interface text-script-interface text-interface side-position-interface))
        ))
 
        
                (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))
+               (meta . ,(grob-description axis-group-interface hara-kiri-group-interface))
        ))
        (Hairpin . (
                (molecule-callback . ,Hairpin::brew_molecule)
                (dash-length . 4.0)
                (self-alignment-Y . 0)
                (Y-offset-callbacks . (,Side_position_interface::aligned_on_self))
-               (meta . ,(grob-description "Hairpin" hairpin-interface dynamic-interface))
+               (meta . ,(grob-description hairpin-interface dynamic-interface))
        ))
        
        (InstrumentName . (
                (visibility-lambda . ,begin-of-line-visible)
                (baseline-skip . 2)
                (font-family . roman)
-               (meta . ,(grob-description "InstrumentName"  font-interface  text-interface break-aligned-interface))
+               (meta . ,(grob-description  font-interface  text-interface break-aligned-interface))
        ))
        
        (KeySignature . (
          (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))
+         (meta . ,(grob-description key-signature-interface  font-interface  break-aligned-interface))
        ))
        
 
                (maximum-length .  100)
                (molecule-callback . ,Hyphen_spanner::brew_molecule)
                (Y-extent-callback . ,Grob::point_dimension_callback)
-               (meta . ,(grob-description "LyricHyphen" lyric-hyphen-interface ))
+               (meta . ,(grob-description lyric-hyphen-interface ))
        ))
        
        (LineOfScore . (
                (axes . (0 1))
-               (meta . ,(grob-description "LineOfScore"  line-of-score-interface axis-group-interface))
+               (meta . ,(grob-description  line-of-score-interface axis-group-interface))
        ))
        
        (LyricExtender . (
                (height . 0.8) ; stafflinethickness;
                (right-trim-amount . 0.5)
                (Y-extent-callback . ,Grob::point_dimension_callback)
-               (meta . ,(grob-description "LyricExtender"  lyric-extender-interface))
+               (meta . ,(grob-description  lyric-extender-interface))
        ))
        
        (LyricText . (
                (word-space . 0.6)
                (font-family . roman)
                (font-shape . upright)
-               (meta . ,(grob-description "LyricText" lyric-syllable-interface text-interface font-interface ))
+               (meta . ,(grob-description lyric-syllable-interface text-interface font-interface ))
        ))
        
        (Porrectus . (
                (add-stem . #t)
                (stem-direction . 1)
                (molecule-callback . ,Porrectus::brew_molecule)
-               (meta . ,(grob-description "Porrectus"
+               (meta . ,(grob-description
                                           porrectus-interface))
        ))
 
                (font-relative-size . 1)
                (visibility-lambda . ,end-of-line-invisible)
                (padding . 0.8)
-               (meta . ,(grob-description "RehearsalMark"  mark-interface side-position-interface))
+               (meta . ,(grob-description  mark-interface side-position-interface))
        ))
        
        (MultiMeasureRest . (
                (minimum-width . 12.5) ; staffspace
                (font-family . number)
                (font-relative-size . 1)
-               (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface rest-interface font-interface ))
+               (meta . ,(grob-description multi-measure-rest-interface rest-interface font-interface ))
        ))
        (NoteCollision . (
                (axes 0 1)
                ;; Ugh, should not be hard-coded. 
                (note-width . 1.321)
-               (meta . ,(grob-description "NoteCollision"
+               (meta . ,(grob-description
                   note-collision-interface axis-group-interface
                ))
        ))
        
        (NoteColumn . (
                (axes . (0 1))
-               (meta . ,(grob-description "NoteColumn"  axis-group-interface note-column-interface))
+               (meta . ,(grob-description axis-group-interface note-column-interface))
        ))
 
        (NoteHead . (
                (style . default)
                (molecule-callback . ,Note_head::brew_molecule)
                (Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
-               (stem-attachment-function
-                . ,note-head-style->attachment-coordinates)
-               (meta . ,(grob-description  "NoteHead"
-                       rhythmic-head-interface font-interface 
-                       note-head-interface ))
+               (stem-attachment-function . ,note-head-style->attachment-coordinates)
+               (meta . ,(grob-description rhythmic-head-interface font-interface note-head-interface))
        ))
        (Glissando . (
                         (type . line)
                         (X-extent-callback . #f)
                         (Y-extent-callback . #f)                        
                         (molecule-callback . ,Line_spanner::brew_molecule)
-                        (meta . ,(grob-description "Glissando"
-                                                      line-spanner-interface))
+                        (meta . ,(grob-description line-spanner-interface))
                         ))
        (VoiceFollower . (
                         (type . line)
                         (X-extent-callback . #f)
                         (Y-extent-callback . #f)                        
                         (molecule-callback . ,Line_spanner::brew_molecule)
-                        (meta . ,(grob-description "VoiceFollower"
-                                                      line-spanner-interface))
+                        (meta . ,(grob-description line-spanner-interface))
                         ))
 
        (NoteName . (
                (molecule-callback . ,Text_item::brew_molecule)
                (font-family . roman)
-               (meta . ,(grob-description  "NoteName"
-                                              note-name-interface font-interface
-                                              ))
+               (meta . ,(grob-description note-name-interface font-interface))
                ))
 
        (OctavateEight . (
                (molecule-callback . ,Text_item::brew_molecule)
                 (font-shape . italic)
                (font-family . roman)
-               (meta . ,(grob-description "OctavateEight" text-interface font-interface ))
+               (meta . ,(grob-description 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))
+               (meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface))
        ))
        (PhrasingSlur . (
                 (molecule-callback . ,Slur::brew_molecule)
                 (attachment . (#f . #f))
                 (attachment-offset . ((0 . 0) . (0 . 0)))
                 (slope-limit . 0.8)
-                (meta . ,(grob-description "PhrasingSlur" slur-interface))
+                (meta . ,(grob-description slur-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))
+               (meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface))
         ))
 
        (PercentRepeat . (
                (thickness . 0.48)
                (minimum-width . 12.5) ; staffspace
                (font-family . music)
-               (meta . ,(grob-description "PercentRepeat" multi-measure-rest-interface  font-interface percent-repeat-interface))
+               (meta . ,(grob-description multi-measure-rest-interface  font-interface percent-repeat-interface))
        ))
 
        
                        (molecule-callback . , Percent_repeat_item_interface::beat_slash)
                        (thickness . 0.48)
                        (slope . 1.7)
-                       (meta . ,(grob-description "RepeatSlash" percent-repeat-interface))
+                       (meta . ,(grob-description percent-repeat-interface))
                        ))
        (Rest . (
                (after-line-breaking-callback . ,Rest::after_line_breaking)
                (molecule-callback . ,Rest::brew_molecule)
                (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) 
                (minimum-beam-collision-distance . 1.5)
-               (meta . ,(grob-description  "Rest"
+               (meta . ,(grob-description  
                        rhythmic-head-interface
                        staff-symbol-referencer-interface
                        rest-interface))
        ))
        (RestCollision . (
                (minimum-distance . 0.75)
-               (meta . ,(grob-description "RestCollision" rest-collision-interface ))
+               (meta . ,(grob-description rest-collision-interface ))
        ))
 
        (Script . (
                (padding . 0.29) 
                (X-offset-callbacks . (,Side_position_interface::centered_on_parent))
                (before-line-breaking-callback . ,Script::before_line_breaking)
-               (meta . ,(grob-description "Script" script-interface side-position-interface font-interface))
+               (meta . ,(grob-description script-interface side-position-interface font-interface))
        ))
        
        (ScriptColumn . (
                (before-line-breaking-callback . ,Script_column::before_line_breaking)
-               (meta . ,(grob-description "ScriptColumn" script-column-interface))
+               (meta . ,(grob-description script-column-interface))
        ))
        
        (Slur . (
                 (attachment . (#f . #f))
                 (attachment-offset . ((0 . 0) . (0 . 0)))
                 (slope-limit . 0.8)
-                (meta . ,(grob-description "Slur" slur-interface))
+                (meta . ,(grob-description slur-interface))
                 ))
              
        (SpacingSpanner . (
                (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))
+               (meta . ,(grob-description  spacing-spanner-interface))
        ))
        (SpanBar . (
                (break-align-symbol . Staff_bar)
                (thin-kern . 3.0)
                (hair-thickness . 1.6)
                (thick-thickness . 6.0)
-               (meta . ,(grob-description "SpanBar" span-bar-interface bar-line-interface ))
+               (meta . ,(grob-description span-bar-interface bar-line-interface ))
        ))
 
        (StanzaNumber . (
                (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))
+               (meta . ,(grob-description break-aligned-interface text-interface font-interface))
        ))
 
        (StaffSymbol . (
                (staff-space . 1.0)
                (line-count . 5)
                (layer . 0)
-               (meta . ,(grob-description "StaffSymbol" staff-symbol-interface ))
+               (meta . ,(grob-description staff-symbol-interface ))
        ))
        (SostenutoPedal . (
                (molecule-callback . ,Text_item::brew_molecule)
                (no-spacing-rods . #t)
                 (font-shape . italic)
                (self-alignment-X . 0)
-               (meta . ,(grob-description "SostenutoPedal" text-interface  font-interface))
+               (meta . ,(grob-description text-interface  font-interface))
        ))
 
        (Stem . (
                (X-offset-callbacks . (,Stem::off_callback))
                (X-extent-callback . ,Stem::dim_callback)       
                (Y-extent-callback . ,Stem::height)
-               (meta . ,(grob-description  "Stem" stem-interface  font-interface))
+               (meta . ,(grob-description stem-interface  font-interface))
        ))
 
        (StemTremolo . (
                (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 ))
+               (meta . ,(grob-description stem-tremolo-interface ))
        ))
 
        (SeparationItem . (
-               (meta . ,(grob-description "SeparationItem" separation-item-interface ))
+               (meta . ,(grob-description separation-item-interface ))
        ))
        (SeparatingGroupSpanner . (
                (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
-               (meta . ,(grob-description "SeparatingGroupSpanner" separation-spanner-interface))
+               (meta . ,(grob-description separation-spanner-interface))
        ))
 
        (SustainPedal . (
                                    (,Side_position_interface::aligned_side
                                     ,Side_position_interface::centered_on_parent))
 
-               (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface))
+               (meta . ,(grob-description sustain-pedal-interface side-position-interface font-interface))
        ))
 
        ;; TODO: should split in 3
                (collapse-height . 5.0)
                (font-family . braces)
                (Y-extent-callback . #f)
-               (meta . ,(grob-description "SystemStartBrace" system-start-delimiter-interface font-interface))
+               (meta . ,(grob-description system-start-delimiter-interface font-interface))
                ))
        (SystemStartBracket . (
                (Y-extent-callback . #f)
                (arch-angle . 50.0)
                (arch-thick . 0.25)
                (arch-width . 1.5)
-               (thickness . 0.25)
-               (meta . ,(grob-description "SystemStartBracket" system-start-delimiter-interface ))
                (bracket-collapse-height . 1)
+               (thickness . 0.25)
+               (meta . ,(grob-description system-start-delimiter-interface ))
        ))
        (SystemStartBar . (
                (Y-extent-callback . #f)
                (glyph . bar-line)
                (thickness . 1.6)
                (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
-               (meta . ,(grob-description "SystemStartBar" system-start-delimiter-interface ))
+               (meta . ,(grob-description system-start-delimiter-interface ))
        ))
 
        (TextScript . (
 ;; todo: add X self alignment?
                (baseline-skip . 2)
                (font-family . roman)
-               (meta . ,(grob-description "TextScript" text-script-interface text-interface side-position-interface font-interface ))
+               (meta . ,(grob-description text-script-interface text-interface side-position-interface font-interface ))
        ))
        (TextSpanner . (
                (molecule-callback . ,Text_spanner::brew_molecule)
                (width-correct . -1)
                
                (direction . 1)
-               (meta . ,(grob-description "TextSpanner" text-spanner-interface  font-interface))               
+               (meta . ,(grob-description text-spanner-interface  font-interface))             
        ))
        (Tie . (
                (molecule-callback . ,Tie::brew_molecule)
                (x-gap . 0.2)
                (y-offset . 0.6)
                (minimum-length  . 2.5)
-               (meta . ,(grob-description "Tie" tie-interface ))
+               (meta . ,(grob-description tie-interface ))
        ))
 
        (TieColumn . (
                (after-line-breaking-callback . ,Tie_column::after_line_breaking)
-               (meta . ,(grob-description "TieColumn" tie-column-interface ))
+               (meta . ,(grob-description tie-column-interface ))
        ))
 
        (TimeSignature . (
                (breakable . #t)
                (style . C)
                 (font-family . number)
-                (meta . ,(grob-description "TimeSignature" time-signature-interface  font-interface))
+                (meta . ,(grob-description time-signature-interface  font-interface))
        ))
 
        (TupletBracket . (
                (font-family . roman)
                (font-shape . italic)
                (font-relative-size . -1)
-               (meta .  ,(grob-description "TupletBracket" text-interface
+               (meta .  ,(grob-description text-interface
                           tuplet-bracket-interface font-interface))
        ))
 
                (Y-offset-callbacks .
                 (,Side_position_interface::aligned_side
                  ,Side_position_interface::centered_on_parent))
-               (meta . ,(grob-description "UnaCordaPedal" text-interface font-interface))
+               (meta . ,(grob-description text-interface font-interface))
        ))
 
        (VoltaBracket . (
                (minimum-space . 5)
                (font-family . number)
                (font-relative-size . -2)
-               (meta . ,(grob-description "VoltaBracket" volta-bracket-interface side-position-interface font-interface))
+               (meta . ,(grob-description 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))
+               (meta . ,(grob-description align-interface axis-group-interface))
        ))
-
        (VerticalAxisGroup . (
                (axes 1)
-               (meta . ,(grob-description "VerticalAxisGroup" axis-group-interface))
+               (meta . ,(grob-description axis-group-interface))
        ))
 ))
 
 
 
+
+(define (completize-grob-entry x)
+  "transplant assoc key into 'name entry of 'meta of X
+"
+  (let* ((name-sym  (car x))
+        (entry (cdr x))
+        (metaentry (cdr (assoc 'meta entry)))
+        (new-metaentry (assoc-set! metaentry 'name name-sym))
+        )
+
+    (cons name-sym (assoc-set! entry 'meta new-metaentry))
+    ))
+
+(set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
+
 ;  (display  (map pair? all-grob-descriptions))
 
index 9a375415ada435b0c4f0d2718435ecfb911d3c81..8bd3ca2ed723e055539bcf7134a805486d09b151 100644 (file)
        )
   )
 
-(define (grob-description name . interfaces)
-  (let* ((ifs (cons general-grob-interface interfaces))
+(define (grob-description . interfaces)
+  (let* ((ifs (cons 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))
@@ -42,7 +41,7 @@
 
 
 (lily-interface
- 'general-grob-interface
+ 'grob-interface
  "All grobs support this"
  '(
    X-offset-callbacks 
index b8f28858fe2bb9342ede77af788c90aabf788858..df53f375c2624db990605c35e62f9f0ba3463e21 100644 (file)
        "ascii-script.scm"
        ))
 
+(define ctor list)
+
+
+(define (ly-load x) (eval-string (ly-gulp-file x)))
+
 (if (not standalone)
-    (map (lambda (x) (eval-string (ly-gulp-file x)))
+    (map ly-load
+                                       ; load-from-path
         '("c++.scm"
           "grob-property-description.scm"
           "translator-property-description.scm"
+          "context-description.scm"
           "interface-description.scm"
           "beam.scm"
           "clef.scm"
           )))
 
 
+
index 9875dd3904cf10c589fae470aa647546359957c2..ac32281bb25fe3d363ea37c7a75239871fb840ae 100644 (file)
@@ -6,6 +6,7 @@
 ;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 
+
 (define (ps-scm action-name)
 
   ;; alist containing fontname -> fontcommand assoc (both strings)
index d83944620ffe460533bfb58bef263c7fb3b0de6e..3e5f63ab054d215a6a156ee68989f074d54d44a9 100644 (file)
 
-(define (engraver-description name description created-elts properties)
-  (list name description created-elts properties)
-  )
-
-
-(define engraver-description-alist
-  (list
-   (cons
-    'Stem_engraver
-    (engraver-description
-     "Stem_engraver"
-     "Create stems and single-stem tremolos.  It also works together with
-the beam engraver for overriding beaming."
-     '(Stem StemTremolo)
-     '(tremoloFlags
-      stemLeftBeamCount
-      stemRightBeamCount    
-      )))
-   
-   (cons
-    'Hyphen_engraver
-    (engraver-description
-     "Hyphen_engraver"
-     "Create lyric hyphens"
-     '(LyricHyphen)
-     '(
-      )))
-
-   (cons
-    'Extender_engraver
-    (engraver-description
-     "Extender_engraver"
-     "Create lyric extenders"
-     '(LyricExtender)
-     '(
-      )))
-
-   
-   (cons
-    'Separating_line_group_engraver
-    (engraver-description
-     "Separating_line_group_engraver"
-     "Generates objects for computing spacing parameters."
-     '(SeparationItem SeparatingGroupSpanner)
-     '(
-      )))
-
-   (cons
-    'Axis_group_engraver
-    (engraver-description
-     "Axis_group_engraver"
-     "Group all objects created in this context in a VerticalAxisGroup spanner."
-     '(VerticalAxisGroup)
-     '(VerticalExtent MinimumVerticalExtent ExtraVerticalExtent)
-     ))
-
-   (cons
-    'Hara_kiri_engraver
-    (engraver-description
-     "Hara_kiri_engraver"
-     "Like Axis_group_engraver, but make a hara kiri spanner, and add
-interesting items (ie. note heads, lyric syllables and normal rests)"
-     '(HaraKiriVerticalGroup)
-     '()
-     ))
-
-   
-   (cons
-    'Local_key_engraver
-    (engraver-description
-     "Local_key_engraver"
-     "Make accidentals.  Catches note heads, ties and notices key-change
-   events.  Due to interaction with ties (which don't come together
-   with note heads), this needs to be in a context higher than Tie_engraver.
-   (FIXME)."
-     '(Accidentals)
-     '(
-      localKeySignature
-      forgetAccidentals
-      noResetKey
-      
-      )))
-
-   
-   (cons
-    'Volta_engraver
-    (engraver-description
-     "Volta_engraver"
-     "Make volta brackets"
-     '(VoltaBracket)
-     '(repeatCommands voltaSpannerDuration)
-     ))
-
-   (cons
-    'Clef_engraver
-    (engraver-description
-     "Clef_engraver"
-     "Determine and set reference point for pitches"
-     '(Clef OctavateEight)
-     '( clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility )))
-   
-   (cons
-    'A2_engraver
-    (engraver-description
-     "A2_engraver"
-     "Part combine engraver for orchestral scores.
+;;
+;; TODO: this should come from the C++ code, really.
+;;
+(define engraver-description-alist-old
+'((A2_engraver 
+  (name . "A2_engraver")
+  (description . "Part combine engraver for orchestral scores.
 
 The markings @emph{a2}, @emph{Solo} and @emph{Solo II}, are
 created by this engraver.  It also acts upon instructions of the part
@@ -113,424 +14,377 @@ slur and tie directions, always when both threads are not identical;
 up for the musicexpr called @code{one}, down for the musicexpr called
 @code{two}.
 
-"
-     '(TextScript)
-     '(
-      combineParts
-      noDirection
-      soloADue
-      soloText
-      soloIIText
-      aDueText
-      split-interval
-      unison
-      solo
-      unisilence
-      unirhythm
-      )))
-
-   (cons
-    'Arpeggio_engraver
-    (engraver-description
-     "Arpeggio_engraver"
-     "Generate an Arpeggio from a Arpeggio_req"
-     '(Arpeggio)
-     '(
-      )))
-
-   (cons
-   'Auto_beam_engraver
-    (engraver-description
-     "Auto_beam_engraver"
-     "Generate beams based on measure characteristics and observed
+")
+  (grobs-created TextScript)
+  (interfaces-acked all)
+  (properties-read combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm)
+  )
+ (Arpeggio_engraver 
+
+  (name . "Arpeggio_engraver")
+  (description . "Generate an Arpeggio from a Arpeggio_req")
+  (grobs-created Arpeggio)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Auto_beam_engraver 
+
+  (name . "Auto_beam_engraver")
+  (description . "Generate beams based on measure characteristics and observed
 Stems.  Uses beatLength, measureLength and measurePosition to decide
 when to start and stop a beam.  Overriding beaming is done through
 @ref{Stem_engraver} properties stemLeftBeamCount and
 stemRightBeamCount.
-"
-     '(
-       Beam)
-     '(
-      noAutoBeaming
-      autoBeamSettings)))
-
-   (cons
-    'Bar_engraver
-    (engraver-description
-     "Bar_engraver"
-     "Create barlines. This engraver is controlled through the
-@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point"
-     '(BarLine)
-     '(
-      whichBar
-      stavesFound
-      )))
-
-
-   (cons
-    'Bar_number_engraver
-    (engraver-description
-     "Bar_number_engraver"
-     "A bar number is created whenever measurePosition is zero. It is
-put on top of all staves, and appears only at  left side of the staff."
-     '(BarNumber)
-     '(
-      currentBarNumber
-      )))
-
-
-   (cons
-    'Beam_engraver
-    (engraver-description
-     "Beam_engraver"
-     "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
-    printed with flags instead of beams."
-     '(Beam)
-     '(
-      beamMelismaBusy
-      )))
-
-   (cons
-    'Break_align_engraver
-    (engraver-description
-     "Break_align_engraver"
-     "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder"
-     '(BreakAlignment BreakAlignGroup LeftEdge)
-     '(
-      breakAlignOrder
-      
-      )))
-
-
-   (cons
-    'Breathing_sign_engraver
-    (engraver-description
-     "Breathing_sign_engraver"
-     ""
-     '(BreathingSign)
-     '(
-      )))
-
-
-   (cons
-    'Chord_name_engraver
-    (engraver-description
-     "Chord_name_engraver"
-     "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
-and generate the appropriate chordname."
-     '(ChordName)
-     '(chordChanges)))
-
-
-   (cons
-    'Chord_tremolo_engraver
-    (engraver-description
-     "Chord_tremolo_engraver"
-     "Generates beams for the \repeat X tremolo ... construct"
-     '(Beam)
-     '(
-      )))
-
-
-
-   (cons
-    'Collision_engraver
-    (engraver-description
-     "Collision_engraver"
-     ""
-     '(NoteCollision
-       )
-     '(
-      )))
-
-   (cons
-    'Custos_engraver
-    (engraver-description
-     "Custos_engraver"
-     ""
-     '(Custos)
-     '(
-      )))
-
-
-   (cons
-    'Dot_column_engraver
-    (engraver-description
-     "Dot_column_engraver"
-     " Engraves dots on dotted notes shifted to the right of the note.
+")
+  (grobs-created Beam)
+  (interfaces-acked grob-interface)
+  (properties-read noAutoBeaming autoBeamSettings)
+  )
+ (Axis_group_engraver 
+
+  (name . "Axis_group_engraver")
+  (description . "Group all objects created in this context in a VerticalAxisGroup spanner.")
+  (grobs-created VerticalAxisGroup)
+  (interfaces-acked grob-interface)
+  (properties-read VerticalExtent MinimumVerticalExtent ExtraVerticalExtent)
+  )
+ (Bar_engraver 
+
+  (name . "Bar_engraver")
+  (description . "Create barlines. This engraver is controlled through the
+@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point")
+  (grobs-created BarLine)
+  (interfaces-acked grob-interface)
+  (properties-read whichBar stavesFound)
+  )
+ (Bar_number_engraver 
+
+  (name . "Bar_number_engraver")
+  (description . "A bar number is created whenever measurePosition is zero. It is
+put on top of all staves, and appears only at  left side of the staff.")
+  (grobs-created BarNumber)
+  (interfaces-acked grob-interface)
+  (properties-read currentBarNumber)
+  )
+ (Beam_engraver 
+
+  (name . "Beam_engraver")
+  (description . "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
+printed with flags instead of beams.")
+  (grobs-created Beam)
+  (interfaces-acked grob-interface)
+  (properties-read beamMelismaBusy)
+  )
+ (Break_align_engraver 
+
+  (name . "Break_align_engraver")
+  (description . "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder")
+  (grobs-created BreakAlignment BreakAlignGroup LeftEdge)
+  (interfaces-acked grob-interface)
+  (properties-read breakAlignOrder)
+  )
+ (Breathing_sign_engraver 
+
+  (name . "Breathing_sign_engraver")
+  (description . "")
+  (grobs-created BreathingSign)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Chord_name_engraver 
+
+  (name . "Chord_name_engraver")
+  (description . "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
+and generate the appropriate chordname.")
+  (grobs-created ChordName)
+  (interfaces-acked grob-interface)
+  (properties-read chordChanges)
+  )
+ (Chord_tremolo_engraver 
+
+  (name . "Chord_tremolo_engraver")
+  (description . "Generates beams for  tremolo repeats.")
+  (grobs-created Beam)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Clef_engraver 
+
+  (name . "Clef_engraver")
+  (description . "Determine and set reference point for pitches")
+  (grobs-created Clef OctavateEight)
+  (interfaces-acked grob-interface)
+  (properties-read clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility)
+  )
+ (Collision_engraver 
+
+  (name . "Collision_engraver")
+  (description . "")
+  (grobs-created NoteCollision)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Custos_engraver 
+
+  (name . "Custos_engraver")
+  (description . "")
+  (grobs-created Custos)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Dot_column_engraver 
+
+  (name . "Dot_column_engraver")
+  (description . " Engraves dots on dotted notes shifted to the right of the note.
 If omitted, then dots appear on top of the notes.
-"
-     '(DotColumn
-       )
-     '(
-      )))
-
-
-   (cons
-    'Dynamic_engraver
-    (engraver-description
-     "Dynamic_engraver"
-     ""
-     '(DynamicLineSpanner
-       DynamicText Hairpin
-       TextSpanner)
-     '(
-      )))
-
-
-
-
-
-
-   (cons
-    'Instrument_name_engraver
-    (engraver-description
-     "Instrument_name_engraver"
-     " Prints the name of the instrument (specified by
-    @code{Staff.instrument} and @code{Staff.instr}) at the left of the
-    staff."
-     '(InstrumentName)
-     '(
-      instrument
-      instr
-      )))
-
-   (cons
-    'Engraver_group_engraver
-    (engraver-description
-     "Engraver_group_engraver"
-     "A group of engravers taken together"
-     '()
-     '(
-      )))
-
-   (cons
-    'Key_engraver
-    (engraver-description
-     "Key_engraver"
-     ""
-     '(KeySignature
-       )
-     '( keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature )))
-
-   (cons 'Lyric_engraver
-        (engraver-description
-         "Lyric_engraver"
-         ""
-         '()
-         '(
-          ;; FIXME
-          )))
-
-   (cons 'Lyric_phrasing_engraver
-        (engraver-description
-         "Lyric_phrasing_engraver"
-         ""
-         '()
-         '(
-          automaticPhrasing
-
-          melismaEngraverBusy
-          associatedVoice
-          phrasingPunctuation
-          )))
-
-   (cons
-    'Mark_engraver
-    (engraver-description
-     "Mark_engraver"
-     ""
-     '(RehearsalMark)
-     '(
-
-      rehearsalMark
-      stavesFound
-      )))
-
-
-   (cons
-    'Melisma_engraver
-    (engraver-description
-     "Melisma_engraver"
-     ""
-     '()
-     '(
-
-      melismaBusy
-      slurMelismaBusy
-      tieMelismaBusy
-      beamMelismaBusy
-      )))
-
-
-   (cons
-    'Multi_measure_rest_engraver
-    (engraver-description
-     "Multi_measure_rest_engraver"
-     "Engraves multi-measure rests that are produced with @code{R}.  Reads
+")
+  (grobs-created DotColumn)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Dynamic_engraver 
+
+  (name . "Dynamic_engraver")
+  (description . "")
+  (grobs-created DynamicLineSpanner DynamicText Hairpin TextSpanner)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Engraver_group_engraver 
+
+  (name . "Engraver_group_engraver")
+  (description . "A group of engravers taken together")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Extender_engraver 
+
+  (name . "Extender_engraver")
+  (description . "Create lyric extenders")
+  (grobs-created LyricExtender)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Font_size_engraver
+  (name . "Font_size_engraver")
+  (description . "Puts fontSize into font-relative-size grob property.")
+  (grobs-created )
+  (interfaces-acked grob-interface)
+  (properties-read fontSize)
+  )
+ (Hara_kiri_engraver 
+
+  (name . "Hara_kiri_engraver")
+  (description . "Like Axis_group_engraver, but make a hara kiri spanner, and add
+interesting items (ie. note heads, lyric syllables and normal rests)
+")
+  (grobs-created HaraKiriVerticalGroup)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Hyphen_engraver 
+
+  (name . "Hyphen_engraver")
+  (description . "Create lyric hyphens")
+  (grobs-created LyricHyphen)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Instrument_name_engraver 
+
+  (name . "Instrument_name_engraver")
+  (description . " Prints the name of the instrument (specified by
+@code{Staff.instrument} and @code{Staff.instr})
+at the left of the
+staff.")
+  (grobs-created InstrumentName)
+  (interfaces-acked bar-line-interface dynamic-interface axis-group-interface)
+  (properties-read instrument instr)
+  )
+ (Key_engraver 
+
+  (name . "Key_engraver")
+  (description . "")
+  (grobs-created KeySignature)
+  (interfaces-acked grob-interface)
+  (properties-read keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature)
+  )
+ (Local_key_engraver 
+  (name . "Local_key_engraver")
+  (description . "Make accidentals.  Catches note heads, ties and notices key-change
+events.  Due to interaction with ties (which don't come together
+with note heads), this needs to be in a context higher than Tie_engraver. FIXME")
+  (grobs-created Accidentals)
+  (interfaces-acked grob-interface)
+  (properties-read localKeySignature forgetAccidentals noResetKey)
+  )
+ (Lyric_engraver 
+
+  (name . "Lyric_engraver")
+  (description . "")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Lyric_phrasing_engraver 
+
+  (name . "Lyric_phrasing_engraver")
+  (description . "")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation)
+  )
+ (Mark_engraver 
+
+  (name . "Mark_engraver")
+  (description . "")
+  (grobs-created RehearsalMark)
+  (interfaces-acked grob-interface)
+  (properties-read rehearsalMark stavesFound)
+  )
+ (Melisma_engraver 
+
+  (name . "Melisma_engraver")
+  (description . "")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy)
+  )
+ (Multi_measure_rest_engraver 
+
+  (name . "Multi_measure_rest_engraver")
+  (description . "Engraves multi-measure rests that are produced with @code{R}.  Reads
 measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
-   "
-     '(MultiMeasureRest)
-     '(currentBarNumber currentCommandColumn measurePosition
-      )))
-
-   (cons
-    'Note_heads_engraver
-    (engraver-description
-     "Note_heads_engraver"
-     "Generate one or more noteheads from Music of type Note_req."
-     '(NoteHead Dots)
-     '(
-      )))
-
-   (cons
-    'Note_head_line_engraver
-    (engraver-description
-     "Note_head_line_engraver"
-     "Engrave a line between two note heads, for example a glissando.
-If followVoice is set, staff switches also generate a line."
-     '(Glissando VoiceFollower)
-     '(followVoice)))
-
-   (cons
-    'Note_name_engraver
-    (engraver-description
-     "Note_name_engraver"
-     ""
-     '(NoteName)
-     '(
-      )))
-
-
-   (cons
-    'Output_property_engraver
-    (engraver-description
-     "Output_property_engraver"
-     "Interpret Music of Output_property type, and apply a function
-to any Graphic objects that satisfies the predicate."
-     '()
-     '(
-      )))
-
-
-   (cons
-    'Piano_pedal_engraver
-    (engraver-description
-     "Piano_pedal_engraver"
-     "Engrave piano pedal symbols."
-     '(SostenutoPedal SustainPedal UnaCordaPedal)
-     '(pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings
-      )))
-
-   (cons 
-    'Pitch_squash_engraver
-    (engraver-description
-     "Pitch_squash_engraver"
-     "Treat all pitches as middle C.  Note that the notes move, but
+")
+  (grobs-created MultiMeasureRest)
+  (interfaces-acked grob-interface)
+  (properties-read currentBarNumber currentCommandColumn measurePosition)
+  )
+ (Note_head_line_engraver 
+
+  (name . "Note_head_line_engraver")
+  (description . "Engrave a line between two note heads, for example a glissando.
+If followVoice is set, staff switches also generate a line.")
+  (grobs-created Glissando VoiceFollower)
+  (interfaces-acked grob-interface)
+  (properties-read followVoice)
+  )
+ (Note_heads_engraver 
+
+  (name . "Note_heads_engraver")
+  (description . "Generate one or more noteheads from Music of type Note_req.")
+  (grobs-created NoteHead Dots)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Note_name_engraver 
+
+  (name . "Note_name_engraver")
+  (description . "")
+  (grobs-created NoteName)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Output_property_engraver 
+
+  (name . "Output_property_engraver")
+  (description . "Interpret Music of Output_property type, and apply a function
+to any Graphic objects that satisfies the predicate.")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Percent_repeat_engraver
+  (name . "Percent_repeat_engraver")
+  (description . "Make beat, whole bar and double bar repeats.")
+  (grobs-created PercentRepeat RepeatSlash DoublePercentRepeat)
+  (interfaces-acked grob-interface)
+  (properties-read measureLength currentCommandColumn)
+  )
+ (Piano_pedal_engraver 
+  (name . "Piano_pedal_engraver")
+  (description . "Engrave piano pedal symbols.")
+  (grobs-created SostenutoPedal SustainPedal UnaCordaPedal)
+  (interfaces-acked rhythmic-head-interface stem-interface)
+  (properties-read pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings)
+  )
+ (Pitch_squash_engraver 
+  (name . "Pitch_squash_engraver")
+  (description . "Treat all pitches as middle C.  Note that the notes move, but
 the locations of accidentals stay the same. 
 Set the position field of all note heads to zero. This useful for
-making a single line staff that demonstrates the rhythm of a melody."
-     '()
-     '(
-      squashedPosition
-      )))
-   
-   (cons
-    'Porrectus_engraver
-    (engraver-description
-     "Porrectus_engraver"
-     "Join adjacent notes to a porrectus ligature."
-     '(Porrectus)
-     '(
-      )))
-
-
-   (cons
-    'Property_engraver
-    (engraver-description
-     "Property_engraver"
-"This is a engraver that converts \property settings into
+making a single line staff that demonstrates the rhythm of a melody.")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read squashedPosition)
+  )
+ (Phrasing_slur_engraver
+  (name . "Phrasing_slur_engraver")
+  (description . "Print phrasing slurs. Similar to Slur_engraver")
+  (grobs-created PhrasingSlur)
+  (interfaces-acked grob-interface)
+  (properties-read slurBeginAttachment slurEndAttachment slurMelismaBusy)
+ )  
+ (Porrectus_engraver 
+
+  (name . "Porrectus_engraver")
+  (description . "Join adjacent notes to a porrectus ligature.")
+  (grobs-created Porrectus)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Property_engraver 
+
+  (name . "Property_engraver")
+  (description . "This is a engraver that converts property settings into
 back-end grob-property settings. Example: Voice.stemLength will set
 #'length in all Stem objects.
 
-Due to CPU and memory requirements, the use of this engraver is deprecated."
-     '()
-     '(Generic_property_list)
-      ))
-
-
-   (cons
-    'Repeat_acknowledge_engraver
-    (engraver-description
-     "Repeat_acknowledge_engraver"
-     
-     "Acknowledge repeated music, and convert the contents of
-repeatCommands ainto an appropriate setting for whichBar"
-     '()
-     '(
-      repeatCommands
-      whichBar
-      )))
-
-
-   (cons
-    'Rest_collision_engraver
-    (engraver-description
-     "Rest_collision_engraver"
-     "Handles collisions of rests."
-     '(RestCollision)
-     '(
-      )))
-
-
-   (cons
-    'Rest_engraver
-    (engraver-description
-     "Rest_engraver"
-     ""
-      '(Rest Dots)
-   '(
-      )))
-
-
-   (cons
-    'Rhythmic_column_engraver
-    (engraver-description
-     "Rhythmic_column_engraver"
-     "Generates NoteColumn, an objects that groups stems, noteheads and rests."
-     '(NoteColumn)
-     '(
-      )))
-
-
-   (cons
-    'Script_column_engraver
-    (engraver-description
-     "Script_column_engraver"
-     ""
-     '(ScriptColumn)
-     '(
-      )))
-
-
-   (cons
-    'Script_engraver
-    (engraver-description
-     "Script_engraver"
-     "    Handles note ornaments generated by @code{\script}.  
-"
-     '(Script)
-     '(
-      scriptDefinitions 
-      scriptHorizontal
-      )))
-
-   (cons
-    'Score_engraver
-    (engraver-description
-     "Score_engraver"
-     "Top level engraver. Takes care of generating columns and the complete  system (ie. LineOfScore)
+Due to CPU and memory requirements, the use of this engraver is deprecated.")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read Generic_property_list)
+  )
+ (Repeat_acknowledge_engraver 
+
+  (name . "Repeat_acknowledge_engraver")
+  (description . "Acknowledge repeated music, and convert the contents of
+repeatCommands ainto an appropriate setting for whichBar")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read repeatCommands whichBar)
+  )
+ (Rest_collision_engraver 
+
+  (name . "Rest_collision_engraver")
+  (description . "Handles collisions of rests.")
+  (grobs-created RestCollision)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Rest_engraver 
+
+  (name . "Rest_engraver")
+  (description . "")
+  (grobs-created Rest Dots)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Rhythmic_column_engraver 
+
+  (name . "Rhythmic_column_engraver")
+  (description . "Generates NoteColumn, an objects that groups stems, noteheads and rests.")
+  (grobs-created NoteColumn)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Score_engraver 
+
+  (name . "Score_engraver")
+  (description . "Top level engraver. Takes care of generating columns and the complete  system (ie. LineOfScore)
+
 
 This engraver decides whether a column is breakable. The default is
 that a column is always breakable. However, when every Bar_engraver
@@ -539,308 +393,243 @@ Score_engraver::forbid_breaks to stop linebreaks.  In practice, this
 means that you can make a breakpoint by creating a barline (assuming
 that there are no beams or notes that prevent a breakpoint.)
 
-"
-     '(LineOfScore PaperColumn NonMusicalPaperColumn)
-     '(
-      currentMusicalColumn
-      currentCommandColumn
-      )))
-   
-   (cons 'Skip_req_swallow_translator
-        (engraver-description
-         "Skip_req_swallow_translator"
-         ""
-         '()
-         '(
-          ;; FIXME
-          )))
-
-   (cons
-    'Slur_engraver
-    (engraver-description
-     "Slur_engraver"
-     "Build slurs from Slur_reqs"
-     '(Slur)
-
-     '(
-      slurBeginAttachment
-      slurEndAttachment
-      slurMelismaBusy
-      )))
-
-
-   (cons
-    'Spacing_engraver
-    (engraver-description
-     "Spacing_engraver"
-     "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  "
-     '(SpacingSpanner)
-     '(
-      )))
-
-
-   (cons
-    'Span_arpeggio_engraver
-    (engraver-description
-     "Span_arpeggio_engraver"
-     ""
-     '(Arpeggio)
-     '(
-      connectArpeggios
-      )))
-
-
-   (cons
-    'Span_bar_engraver
-    (engraver-description
-     "Span_bar_engraver"
-     "This engraver makes cross-staff barlines: It catches all normal
-bar lines, and draws a single span-bar across them."
-
-     '(SpanBar)
-     '(
-      )))
-
-
-   (cons
-    'Staff_symbol_engraver
-    (engraver-description
-     "Staff_symbol_engraver"
-     "create the constellation of five (default) staff lines."
-     '(StaffSymbol)
-     '(
-      )))
-
-
-   (cons
-    'Stanza_number_engraver
-    (engraver-description
-     "Stanza_number_engraver"
-     ""
-     '(StanzaNumber
-       )
-     '(
-      stz
-      stanza
-      )))
-
-
-
-   (cons
-    'System_start_delimiter_engraver
-    (engraver-description
-     "System_start_delimiter_engraver"
-     "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner"
-     '(SystemStartBar SystemStartBrace SystemStartBracket)
-     '(
-      )))
-
-
-   (cons
-    'Text_engraver
-    (engraver-description
-     "Text_engraver"
-     "Create text-scripts"
-     '(TextScript)
-     '(
-      scriptHorizontal
-      textNonEmpty
-      )))
-
-
-   (cons
-    'Text_spanner_engraver
-    (engraver-description
-     "Text_spanner_engraver"
-     "Create text spanner from a  Span_req "
-     '(TextSpanner)
-     '(
-      )))
-
-
-   (cons
-    'Thread_devnull_engraver
-    (engraver-description
-     "Thread_devnull_engraver"
-     "Kill elements whenever we are Voice called `two' and either
+
+")
+  (grobs-created LineOfScore PaperColumn NonMusicalPaperColumn)
+  (interfaces-acked grob-interface)
+  (properties-read currentMusicalColumn currentCommandColumn)
+  )
+ (Script_column_engraver 
+
+  (name . "Script_column_engraver")
+  (description . "")
+  (grobs-created ScriptColumn)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Script_engraver 
+
+  (name . "Script_engraver")
+  (description . "    Handles note ornaments generated by @code{\\script}.  
+")
+  (grobs-created Script)
+  (interfaces-acked grob-interface)
+  (properties-read scriptDefinitions scriptHorizontal)
+  )
+ (Separating_line_group_engraver 
+
+  (name . "Separating_line_group_engraver")
+  (description . "Generates objects for computing spacing parameters.")
+  (grobs-created SeparationItem SeparatingGroupSpanner)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Skip_req_swallow_translator 
+
+  (name . "Skip_req_swallow_translator")
+  (description . "")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Slur_engraver 
+
+  (name . "Slur_engraver")
+  (description . "Build slurs from Slur_reqs")
+  (grobs-created Slur)
+  (interfaces-acked grob-interface)
+  (properties-read slurBeginAttachment slurEndAttachment slurMelismaBusy)
+  )
+ (Spacing_engraver 
+
+  (name . "Spacing_engraver")
+  (description . "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  ")
+  (grobs-created SpacingSpanner)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Span_arpeggio_engraver 
+
+  (name . "Span_arpeggio_engraver")
+  (description . "")
+  (grobs-created Arpeggio)
+  (interfaces-acked grob-interface)
+  (properties-read connectArpeggios)
+  )
+ (Span_bar_engraver 
+
+  (name . "Span_bar_engraver")
+  (description . "This engraver makes cross-staff barlines: It catches all normal
+bar lines, and draws a single span-bar across them.")
+  (grobs-created SpanBar)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Staff_symbol_engraver 
+
+  (name . "Staff_symbol_engraver")
+  (description . "create the constellation of five (default)
+staff lines.")
+  (grobs-created Sta
+                ffSymbol)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Stanza_number_engraver 
+
+  (name . "Stanza_number_engraver")
+  (description . "")
+  (grobs-created StanzaNumber)
+  (interfaces-acked grob-interface)
+  (properties-read stz stanza)
+  )
+ (Stem_engraver 
+
+  (name . "Stem_engraver")
+  (description . "Create stems and single-stem tremolos.  It also works together with
+the beam engraver for overriding beaming.")
+  (grobs-created Stem StemTremolo)
+  (interfaces-acked rhythmic-head-interface)
+  (properties-read tremoloFlags stemLeftBeamCount stemRightBeamCount)
+  )
+ (System_start_delimiter_engraver 
+
+  (name . "System_start_delimiter_engraver")
+  (description . "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner")
+  (grobs-created SystemStartBar SystemStartBrace SystemStartBracket)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Text_engraver 
+
+  (name . "Text_engraver")
+  (description . "Create text-scripts")
+  (grobs-created TextScript)
+  (interfaces-acked grob-interface)
+  (properties-read scriptHorizontal textNonEmpty)
+  )
+ (Text_spanner_engraver 
+
+  (name . "Text_spanner_engraver")
+  (description . "Create text spanner from a  Span_req ")
+  (grobs-created TextSpanner)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Thread_devnull_engraver 
+
+  (name . "Thread_devnull_engraver")
+  (description . "Kill elements whenever we are Voice called `two' and either
 unison, unisilence or soloADue is set.@footnote{On unix systems, the
 file @file{/dev/null} is special device: anything written to it is
 discarded.}. This engraver works closely together with the part
 combiner.  When the part combiner notices that two threads are
 identical, it tells the @code{Thread_devnull_engraver} to discard
 everything in the second thread.
-"
-
-     '()
-     '()))
-
-
-   (cons
-    'Tie_engraver
-    (engraver-description
-     "Tie_engraver"
-     "Generate ties between noteheads of equal pitch."
-     '(Tie TieColumn)
-     '(sparseTies
-      tieMelismaBusy
-      )))
-
-
-   (cons
-    'Time_signature_engraver
-    (engraver-description
-     "Time_signature_engraver"
-     "Create a TimeSignature whenever @code{timeSignatureFraction} changes"
-     '(TimeSignature)
-     '(
-      )))
-
-
-   (cons
-    'Timing_engraver
-    (engraver-description
-     "Timing_engraver"
-     " Responsible for synchronizing timing information from staves. 
-    Normally in @code{Score}.  In order to create polyrhythmic music,
-    this engraver should be removed from @code{Score} and placed in
-    @code{Staff}."
-     '()
-     '(
-      timeSignatureFraction
-      barCheckNoSynchronize
-      barNonAuto
-      whichBar      
-      barAlways
-      defaultBarType
-      skipBars
-      timing
-      oneBeat
-      measureLength
-      measurePosition 
-      currentBarNumber
-      )))
-
-
-   (cons
-    'Tuplet_engraver
-    (engraver-description
-     "Tuplet_engraver"
-     "Catch Time_scaled_music and generate appropriate bracket  "
-     '( TupletBracket)
-     '(tupletNumberFormatFunction tupletSpannerDuration tupletInvisible)))
-
-
-   (cons
-    'Vertical_align_engraver
-    (engraver-description
-     "Vertical_align_engraver"
-     "Catch Vertical axis groups and stack them."
-     '(VerticalAlignment)
-     '(
-      )))
-
-
-   (cons
-    'Voice_devnull_engraver
-    (engraver-description
-     "Voice_devnull_engraver"
-     "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set."
-     '()
-     '(
-      )))
-   ))
-
-
-(set! engraver-description-alist
-      (sort engraver-description-alist alist<?))
-
-(define context-description-alist
-  '(
-(Grace . "
-    The context for handling grace notes.  It used to be instantiated
-    automatically when you use @code{\grace}.  Basically, it is an
-    `embedded' miniature of the Score context.  Since this context
-    needs special interaction with the rest of LilyPond, you should
-    not explicitly instantiate it.
-
-   DEPRECATED.
-")
-(LyricsVoice . "
-    Corresponds to a voice with lyrics.  Handles the printing of a
-    single line of lyrics.
 ")
-(Thread . "
-    Handles note heads, and is contained in the Voice context.  You
-    have to instantiate this explicitly if you want to adjust the
-    style of individual note heads.
-")
-(Voice . "
-    Corresponds to a voice on a staff.  This context handles the
-    conversion of dynamic signs, stems, beams, super- and subscripts,
-    slurs, ties, and rests.
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Tie_engraver 
 
-    You have to instantiate this explicitly if you want to have
-    multiple voices on the same staff.")
+  (name . "Tie_engraver")
+  (description . "Generate ties between noteheads of equal pitch.")
+  (grobs-created Tie TieColumn)
+  (interfaces-acked grob-interface)
+  (properties-read sparseTies tieMelismaBusy)
+  )
+ (Time_signature_engraver 
 
-(ChordNamesVoice . "
-    A voice with chord names.  Handles printing of a line of chord
-    names.")
+  (name . "Time_signature_engraver")
+  (description . "Create a TimeSignature whenever @code{timeSignatureFraction} changes")
+  (grobs-created TimeSignature)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Timing_engraver 
+
+  (name . "Timing_engraver")
+  (description . " Responsible for synchronizing timing information from staves. 
+Normally in @code{Score}.  In order to create polyrhythmic music,
+this engraver should be removed from @code{Score} and placed in
+@code{Staff}.")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read timeSignatureFraction barCheckNoSynchronize barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber)
+  )
+ (Tuplet_engraver 
 
-(ChordNames . "
-    Typesets chord names.  Can contain @code{ChordNamesVoice}
-    contexts.")
+  (name . "Tuplet_engraver")
+  (description . "Catch Time_scaled_music and generate appropriate bracket  ")
+  (grobs-created TupletBracket)
+  (interfaces-acked grob-interface)
+  (properties-read tupletNumberFormatFunction tupletSpannerDuration tupletInvisible)
+  )
+ (Vertical_align_engraver 
 
-(Lyrics . "
-    Typesets lyrics.  It can contain @code{LyricsVoice} contexts.
-")
-(Staff . "
-    Handles clefs, bar lines, keys, accidentals.  It can contain
-    @code{Voice} contexts.
-")
-(RhythmicStaff . "
-    A context like @code{Staff} but for printing rhythms.  Pitches are
-    ignored; the notes are printed on one line.  It can contain
-    @code{Voice} contexts.
-")
-(GrandStaff . "
-    Contains @code{Staff} or @code{RhythmicStaff} contexts.  It adds a
-    brace on the left side, grouping the staves together.  The bar
-    lines of the contained staves are connected vertically.  It can
-    contain @code{Staff} contexts.")
-
-(PianoStaff . "
-    Just like @code{GrandStaff} but with @code{minVerticalAlign} set
-    equal to @code{maxVerticalAlign} so that interstaff beaming and
-    slurring can be used.")
-
-(StaffGroup . "
-    Contains @code{Staff} or @code{RhythmicStaff} contexts.  Adds a
-    bracket on the left side, grouping the staves together.  The bar
-    lines of the contained staves are connected vertically.  It can
-    contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or
-    @code{Lyrics} contexts.
-")
-(ChoirStaff . "
-    Identical to @code{StaffGroup} except that the contained staves
-    are not connected vertically.
-")
-(Score . "
-    This is the top level notation context.  No other context can
-    contain a @code{Score} context.  This context handles the
-    administration of time signatures.  It also makes sure that items
-    such as clefs, time signatures, and key-signatures are aligned
-    across staves.  It can contain @code{Lyrics}, @code{Staff},
-    @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and
-    @code{ChoirStaff} contexts.
-
-    You cannot explicitly instantiate a Score context (since it is
-    not contained in any other context).  It is instantiated
-    automatically when an output definition (a @code{\score} or
-    @code{\paper} block) is processed.
-")
-)
+  (name . "Vertical_align_engraver")
+  (description . "Catch Vertical axis groups and stack them.")
+  (grobs-created VerticalAlignment)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Voice_devnull_engraver 
+
+  (name . "Voice_devnull_engraver")
+  (description . "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.")
+  (grobs-created)
+  (interfaces-acked grob-interface)
+  (properties-read)
+  )
+ (Volta_engraver 
+
+  (name . "Volta_engraver")
+  (description . "Make volta brackets")
+  (grobs-created VoltaBracket)
+  (interfaces-acked grob-interface)
+  (properties-read repeatCommands voltaSpannerDuration)
+  )
+ )
 )
+(define (alist<? x y)
+  (string<? (symbol->string (car x))
+           (symbol->string (car y))))
+
+;(set! engraver-description-alist
+;      (sort engraver-description-alist alist<?))
 
-(set! context-description-alist
-      (sort context-description-alist alist<?))
+
+(define (humane-listify l)
+  (cond
+   ((null? l) "")
+   ((null? (cdr l)) (symbol->string (car l)))
+   (else (string-append (symbol->string (car l)) " " (human-listify (cdr l)))
+        
+        )))
+   
+(define (print-entry x)
+  (define (mungle x)
+    (string-append (string-downcase (regexp-substitute/global #f "_" x 'pre "-" 'post)) ".cc"))
+  
+  (let ((cop (open-file (mungle (car x)) "a")))
+    (define (w y)
+      (write y cop))
+    (define (d y)
+      (display y cop))
+    
+    (d "ENTER_DESCRIPTION(")
+    (d (car x))
+    (d ",\n/* descr */       ")
+    (w (cdr (assoc 'description (cdr x))))
+    (d ",\n/* creats*/       ")
+    (w (human-listify (cdr (assoc 'grobs-created (cdr x)))))
+    (d ",\n/* acks  */       ")
+    (w (human-listify (cdr (assoc 'interfaces-acked (cdr x)))))
+    (d ",\n/* reads */       ")        
+    (w (human-listify (cdr (assoc 'properties-read (cdr x)))))
+    (d ",\n/* write */       \"\");\n")
+))
+
+;(map print-entry engraver-description-alist)
 
index 22c77623d3913965a0fb9087b9bdc70745bd0e7e..fe6c8252fde329cd6b4a17820ed11635b7ef14ae 100644 (file)
 
 
 
+(translator-property-description 'ExtraVerticalExtent
+                                number-pair? "extra vertical extent, same format as  MinimumVerticalExtent")
+(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 'MinimumVerticalExtent number-pair?
                                 "minimum vertical extent, same format as VerticalExtent")
-
 (translator-property-description 'VerticalExtent number-pair?
                                 "hard coded vertical extent.
 The format is a pair of dimensions, for example, this sets the sizes
@@ -36,16 +44,7 @@ and therefore only work in contexts which contain an
 @code{Axis_group_engraver}.
 ")
 
-(translator-property-description 'ExtraVerticalExtent
-                                number-pair? "extra vertical extent, same format as  MinimumVerticalExtent")
 
-(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? "Name of the Voice that has the melody for this LyricsVoice.")
 (translator-property-description 'autoBeamSettings list? "
@@ -248,6 +247,7 @@ this is done with the pedal.")
 
 (translator-property-description 'phrasingPunctuation string? "")
 (translator-property-description 'rehearsalMark number-or-string? "")
+(translator-property-description 'regularSpacingDelta moment? "TODO")
 (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 'scriptDefinitions list? "
 Description of scripts. This is used by Script_engraver for typesetting note-super/subscripts. See @file{scm/script.scm} for more information
index dbf3fc6193b5cf1fb0b97807bc398a9ea777cbad..e67d6988a31696b59ec496d1761205fa0ec04a38 100644 (file)
@@ -778,6 +778,8 @@ if files and files[0] != '-':
                os.chdir (outdir)
                cp_to_dir (PK_PATTERN, tmpdir)
 
+       # to be sure, add tmpdir *in front* of inclusion path.
+       #os.environ['TEXINPUTS'] =  tmpdir + ':' + os.environ['TEXINPUTS']
        os.chdir (tmpdir)
        
        if lily_p: