From 94375d04f45b415ad705fd444fdb344416f116d9 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 24 Sep 2001 01:04:55 +0200 Subject: [PATCH] release: 1.5.13 =========== * half-baken --with-kpathsea configuration fix. * ly2dvi: add `.' to TEXINPUTS to catch broken TEXINPUTS settings. * guile-1.4 compile fix. 1.5.12.h --- CHANGES | 10 + Documentation/user/GNUmakefile | 2 +- Documentation/user/refman.itely | 15 +- VERSION | 4 +- config.hh.in | 3 + configure | 69 +- configure.in | 2 +- lily/a2-engraver.cc | 50 +- lily/arpeggio-engraver.cc | 20 +- lily/auto-beam-engraver.cc | 29 +- lily/axis-group-engraver.cc | 35 +- lily/bar-engraver.cc | 12 +- lily/bar-number-engraver.cc | 18 +- lily/beam-engraver.cc | 20 +- lily/break-align-engraver.cc | 13 +- lily/break-align-item.cc | 2 +- lily/breathing-sign-engraver.cc | 11 +- lily/chord-name-engraver.cc | 14 +- lily/chord-tremolo-engraver.cc | 26 +- lily/chord.cc | 4 +- lily/clef-engraver.cc | 28 +- lily/collision-engraver.cc | 17 +- lily/collision.cc | 8 +- lily/command-request.cc | 8 +- lily/custos-engraver.cc | 18 +- lily/dot-column-engraver.cc | 24 +- lily/dot-column.cc | 4 - lily/dynamic-engraver.cc | 18 +- lily/dynamic-performer.cc | 9 +- lily/engraver-group-engraver.cc | 81 +- lily/engraver.cc | 8 + lily/extender-engraver.cc | 17 +- lily/figured-bass-engraver.cc | 13 +- lily/font-interface.cc | 4 +- lily/font-metric.cc | 2 +- lily/font-size-engraver.cc | 18 +- lily/grob-info.cc | 4 +- lily/grob.cc | 8 +- lily/hyphen-engraver.cc | 17 +- lily/include/dot-column.hh | 2 +- lily/include/engraver-group-engraver.hh | 3 +- lily/include/engraver.hh | 3 +- lily/include/grob-info.hh | 3 +- lily/include/lily-guile.hh | 65 +- lily/include/line-group-group-engraver.hh | 7 +- lily/include/lyric-phrasing-engraver.hh | 4 +- lily/include/performer-group-performer.hh | 4 +- lily/include/score-engraver.hh | 4 +- lily/include/score-performer.hh | 4 +- lily/include/translator-group.hh | 5 +- lily/include/translator.hh | 57 +- lily/include/type-swallow-translator.hh | 22 +- lily/instrument-name-engraver.cc | 31 +- lily/key-engraver.cc | 18 +- lily/key-item.cc | 10 +- lily/key-performer.cc | 7 +- lily/lily-guile.cc | 31 +- lily/line-group-group-engraver.cc | 10 +- lily/line-of-score.cc | 12 +- lily/local-key-engraver.cc | 27 +- lily/local-key-item.cc | 10 +- lily/lookup.cc | 2 +- lily/lyric-engraver.cc | 12 +- lily/lyric-performer.cc | 8 +- lily/lyric-phrasing-engraver.cc | 38 +- lily/main.cc | 2 +- lily/mark-engraver.cc | 23 +- lily/melisma-engraver.cc | 13 +- lily/molecule.cc | 10 +- lily/multi-measure-rest-engraver.cc | 14 +- lily/music.cc | 4 +- lily/my-lily-lexer.cc | 2 +- lily/my-lily-parser.cc | 4 +- lily/new-spacing-spanner.cc | 6 +- lily/note-head-line-engraver.cc | 16 +- lily/note-heads-engraver.cc | 13 +- lily/note-name-engraver.cc | 15 +- lily/note-performer.cc | 10 +- lily/output-property-engraver.cc | 19 +- lily/paper-def.cc | 4 +- lily/paper-outputter.cc | 22 +- lily/parser.yy | 16 +- lily/percent-repeat-engraver.cc | 11 +- lily/performer-group-performer.cc | 10 +- lily/phrasing-slur-engraver.cc | 16 +- lily/piano-pedal-engraver.cc | 25 +- lily/piano-pedal-performer.cc | 6 +- lily/pitch-squash-engraver.cc | 20 +- lily/porrectus-engraver.cc | 15 +- lily/property-engraver.cc | 25 +- lily/regular-spacing-engraver.cc | 12 +- lily/repeat-acknowledge-engraver.cc | 12 +- lily/rest-collision-engraver.cc | 16 +- lily/rest-engraver.cc | 11 +- lily/rhythmic-column-engraver.cc | 17 +- lily/score-engraver.cc | 25 +- lily/score-performer.cc | 9 +- lily/score.cc | 6 +- lily/script-column-engraver.cc | 17 +- lily/script-engraver.cc | 31 +- lily/separating-line-group-engraver.cc | 13 +- lily/simple-spacer.cc | 8 +- lily/slur-engraver.cc | 15 +- lily/slur.cc | 8 +- lily/spacing-engraver.cc | 15 +- lily/span-arpeggio-engraver.cc | 17 +- lily/span-bar-engraver.cc | 16 +- lily/span-dynamic-performer.cc | 7 +- lily/staff-performer.cc | 7 +- lily/staff-symbol-engraver.cc | 16 +- lily/stanza-number-engraver.cc | 23 +- lily/stem-engraver.cc | 19 +- lily/swallow-engraver.cc | 4 +- lily/swallow-perf.cc | 18 +- lily/system-start-delimiter-engraver.cc | 27 +- lily/tempo-performer.cc | 7 +- lily/text-engraver.cc | 23 +- lily/text-item.cc | 6 +- lily/text-spanner-engraver.cc | 18 +- lily/thread-devnull-engraver.cc | 21 +- lily/tie-engraver.cc | 19 +- lily/tie-performer.cc | 18 +- lily/time-signature-engraver.cc | 20 +- lily/time-signature-performer.cc | 6 +- lily/timing-engraver.cc | 15 +- lily/timing-translator.cc | 2 - lily/translator-ctors.cc | 21 + lily/translator-def.cc | 6 +- lily/translator-group.cc | 6 +- lily/translator.cc | 44 +- lily/tuplet-engraver.cc | 15 +- lily/type-swallow-translator.cc | 4 +- lily/vertical-align-engraver.cc | 17 +- lily/voice-devnull-engraver.cc | 19 +- lily/volta-engraver.cc | 18 +- ly/engraver-init.ly | 7 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.mandrake.spec | 2 +- make/out/lilypond.redhat.spec | 4 +- make/out/lilypond.suse.spec | 4 +- modules/midi.c | 2 + po/da.po | 1406 +++++++++++++++++++++ scm/auto-beam.scm | 1 - scm/backend-documentation-lib.scm | 23 +- scm/context-description.scm | 92 ++ scm/documentation-lib.scm | 5 +- scm/engraver-documentation-lib.scm | 58 +- scm/generate-documentation.scm | 16 +- scm/grob-description.scm | 172 +-- scm/interface-description.scm | 7 +- scm/lily.scm | 10 +- scm/ps.scm | 1 + scm/translator-description.scm | 1397 +++++++++----------- scm/translator-property-description.scm | 20 +- scripts/ly2dvi.py | 2 + 155 files changed, 3607 insertions(+), 1689 deletions(-) create mode 100644 po/da.po create mode 100644 scm/context-description.scm diff --git a/CHANGES b/CHANGES index fe629cb580..d6cbd881b6 100644 --- 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 ====== diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile index 2c30d360d4..85afa59a41 100644 --- a/Documentation/user/GNUmakefile +++ b/Documentation/user/GNUmakefile @@ -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 diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 6b9ac9828a..10a69dcbfc 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -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 c00e6694d3..9872a2184a 100644 --- 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. diff --git a/config.hh.in b/config.hh.in index 038a46c661..aa81bd7190 100644 --- a/config.hh.in +++ b/config.hh.in @@ -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 diff --git a/configure b/configure index 93015c4e63..3aab916d87 100755 --- 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 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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 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* diff --git a/configure.in b/configure.in index 636d386f35..e0fa5a2f5d 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/lily/a2-engraver.cc b/lily/a2-engraver.cc index 09d10282d7..6a08f56b79 100644 --- a/lily/a2-engraver.cc +++ b/lily/a2-engraver.cc @@ -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 */ ""); diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index b69aeb35bc..8a5513c3e6 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -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 */ ""); diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index cc3db6529e..97451c6a4e 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -26,10 +26,7 @@ */ 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 (info.elem_l_); + Item* stem_l = dynamic_cast (info.grob_l_); Rhythmic_req *rhythmic_req = dynamic_cast (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 */ ""); diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 3c16796147..413f1b6789 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -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 */ ""); diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index f298b9f667..a070e4f411 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -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 */ ""); diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 84646867d9..d995158924 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -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 */ ""); diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 122a7ecd3c..a927a75f05 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -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 (info.elem_l_); + Item *stem_l = dynamic_cast (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 */ ""); diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index 21551ad5b2..a463ba7bf0 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -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 (inf.elem_l_)) + if (Item * item_l = dynamic_cast (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 */ ""); diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index 709687ce28..b47d5b0358 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -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); diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index 4207c86683..a8d47464ae 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -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 */ ""); diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index da58ffaaf1..61e1faab4b 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -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 */ ""); diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 9a9017e663..50f16f5e5c 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -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 */ ""); diff --git a/lily/chord.cc b/lily/chord.cc index abe879cdbd..82bfc297d7 100644 --- a/lily/chord.cc +++ b/lily/chord.cc @@ -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); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index d16cb8a20b..4d2da95856 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -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 (info.elem_l_); + Item * item =dynamic_cast (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 */ ""); diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index ca18e2ddde..eb52ebd0f8 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -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 */ ""); diff --git a/lily/collision.cc b/lily/collision.cc index 27b3363074..87d9a7671d 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -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); diff --git a/lily/command-request.cc b/lily/command-request.cc index 93e1914010..51bb291202 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -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 diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc index 55c8c73f36..0763cd7431 100644 --- a/lily/custos-engraver.cc +++ b/lily/custos-engraver.cc @@ -23,13 +23,13 @@ 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 (info.elem_l_); + Item *item = dynamic_cast (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 */ ""); diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 9dec1242c2..9523b7ea91 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -20,8 +20,8 @@ class Dot_column_engraver : public Engraver Grob * stem_; Link_array 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 */ ""); diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 0023760277..ba07971a1a 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -16,10 +16,6 @@ #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) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 23ae1bd020..32dd5b23a4 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -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 (i.elem_l_)); + Side_position_interface::add_support (line_spanner_,i.grob_l_); + add_bound_item (line_spanner_,dynamic_cast (i.grob_l_)); } } } +ENTER_DESCRIPTION(Dynamic_engraver, +/* descr */ "", +/* creats*/ "DynamicLineSpanner DynamicText Hairpin TextSpanner", +/* acks */ "note-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 0b5d1b73b0..a08c500dce 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -22,10 +22,7 @@ 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, + "","","","",""); diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 3751625199..56fe566fca 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -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 (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; +} diff --git a/lily/engraver.cc b/lily/engraver.cc index 9059624ce6..9c5c936d90 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -56,3 +56,11 @@ Engraver::process_music () { } + +Engraver::Engraver() +{ +} + + +ENTER_DESCRIPTION(Engraver, + "", "", "", "", ""); diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index d3ae21945f..af30c3ed0f 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -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 (i.elem_l_)); + Lyric_extender::set_textitem (extender_p_, RIGHT, dynamic_cast (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 */ ""); diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 5bad2d94fa..dc30cf3e2c 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -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 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 */ ""); diff --git a/lily/font-interface.cc b/lily/font-interface.cc index c50b4cb316..ec7fa8ffa7 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -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; } diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 4f5ba93be8..d22da509ee 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -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 &) { } diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 56f1555d9d..a8554d4453 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -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 */ ""); diff --git a/lily/grob-info.cc b/lily/grob-info.cc index c2ed5bd013..542e9698bb 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -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; } diff --git a/lily/grob.cc b/lily/grob.cc index cdc887eab9..f1f80e720a 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -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 diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index d7ebcea02e..2143ea9d9a 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -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 */ ""); diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index 6bd445c4d4..65eb4c5a75 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -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)); diff --git a/lily/include/engraver-group-engraver.hh b/lily/include/engraver-group-engraver.hh index 9b7c69d50c..5f0f5c6439 100644 --- a/lily/include/engraver-group-engraver.hh +++ b/lily/include/engraver-group-engraver.hh @@ -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 (); diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index 66475cd36e..279b60511c 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -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); }; diff --git a/lily/include/grob-info.hh b/lily/include/grob-info.hh index 4e00958060..f758b36944 100644 --- a/lily/include/grob-info.hh +++ b/lily/include/grob-info.hh @@ -23,10 +23,9 @@ struct Grob_info { friend class Engraver; public: Link_array origin_trans_l_arr (Translator*) const; - Grob * elem_l_; + Grob * grob_l_; Music *req_l_; - Grob_info (Grob*, Music*); Grob_info (); }; diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 2d9883c2eb..65ca5ebb2d 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -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. diff --git a/lily/include/line-group-group-engraver.hh b/lily/include/line-group-group-engraver.hh index 49751d8b08..e6bbe25b7e 100644 --- a/lily/include/line-group-group-engraver.hh +++ b/lily/include/line-group-group-engraver.hh @@ -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); }; diff --git a/lily/include/lyric-phrasing-engraver.hh b/lily/include/lyric-phrasing-engraver.hh index 68996710f9..269d5a9658 100644 --- a/lily/include/lyric-phrasing-engraver.hh +++ b/lily/include/lyric-phrasing-engraver.hh @@ -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 diff --git a/lily/include/performer-group-performer.hh b/lily/include/performer-group-performer.hh index 2f05ae6604..891271b499 100644 --- a/lily/include/performer-group-performer.hh +++ b/lily/include/performer-group-performer.hh @@ -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: diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh index 815f04c05e..74631131bc 100644 --- a/lily/include/score-engraver.hh +++ b/lily/include/score-engraver.hh @@ -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); diff --git a/lily/include/score-performer.hh b/lily/include/score-performer.hh index 09097470a6..2539c6d5a4 100644 --- a/lily/include/score-performer.hh +++ b/lily/include/score-performer.hh @@ -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_; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index edc09238fa..1e61749356 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -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 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 diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 112c21496f..9877495be1 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -19,6 +19,14 @@ #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 *global_translator_dict_p; void add_translator (Translator*trans_p); diff --git a/lily/include/type-swallow-translator.hh b/lily/include/type-swallow-translator.hh index b352473e4e..4179e7cc34 100644 --- a/lily/include/type-swallow-translator.hh +++ b/lily/include/type-swallow-translator.hh @@ -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 diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index c98bbdd7e9..0f5e9bbbd1 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -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 (i.elem_l_) - && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))) + if (dynamic_cast (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 (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 (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 */ ""); diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 37b215fbd6..17ffce3237 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -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 */ ""); diff --git a/lily/key-item.cc b/lily/key-item.cc index 713ae61e27..563910435f 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -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); diff --git a/lily/key-performer.cc b/lily/key-performer.cc index e945412924..22a3f2c84a 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -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,"","","","",""); diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 278dac3694..12b259ea83 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -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; +} diff --git a/lily/line-group-group-engraver.cc b/lily/line-group-group-engraver.cc index d637cdeedd..14f55b6742 100644 --- a/lily/line-group-group-engraver.cc +++ b/lily/line-group-group-engraver.cc @@ -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, + "", + "", + "", + "", + ""); diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index b0a042b7c6..e82b544481 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -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 { diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index 274883c15a..8ef57ed105 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -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 support_l_arr_; Link_array forced_l_arr_; Link_array 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 (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 */ ""); diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index aefaee8e8c..ff01726169 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -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 (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; diff --git a/lily/lookup.cc b/lily/lookup.cc index 6504472983..036ba88959 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -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 } diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 929ebf8191..3b2e7b31c3 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -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 */ ""); diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index db78f744fe..c8e1acac02 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -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,"","","","",""); diff --git a/lily/lyric-phrasing-engraver.cc b/lily/lyric-phrasing-engraver.cc index a335ca7f61..fd5625551c 100644 --- a/lily/lyric-phrasing-engraver.cc +++ b/lily/lyric-phrasing-engraver.cc @@ -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 */ ""); diff --git a/lily/main.cc b/lily/main.cc index 226d054d78..50725df2cb 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -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 (); diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index faaa30c800..1a366e68b4 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -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 */ ""); diff --git a/lily/melisma-engraver.cc b/lily/melisma-engraver.cc index 83f0773876..fab89dcd9c 100644 --- a/lily/melisma-engraver.cc +++ b/lily/melisma-engraver.cc @@ -18,11 +18,11 @@ 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 */ ""); diff --git a/lily/molecule.cc b/lily/molecule.cc index 5e124b2e90..f1aedc2295 100644 --- a/lily/molecule.cc +++ b/lily/molecule.cc @@ -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 ("#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; diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 21c2055324..239db9779f 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -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 */ ""); diff --git a/lily/music.cc b/lily/music.cc index ca3f8fe813..c9955845da 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -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); } } diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index a3d2a62fa2..587b5548b2 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -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}, diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 9e699a5e82..c850a72104 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -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; } diff --git a/lily/new-spacing-spanner.cc b/lily/new-spacing-spanner.cc index 3daabc0672..682dc0847f 100644 --- a/lily/new-spacing-spanner.cc +++ b/lily/new-spacing-spanner.cc @@ -55,7 +55,7 @@ New_spacing_spanner::do_measure (Grob*me, Link_array *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] - diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 58f52a1f35..52ac159c93 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -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 */ ""); diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 3877dad1d0..8fc1e6f13a 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -26,7 +26,7 @@ class Note_heads_engraver : public Engraver Link_array 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 */ ""); diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index c6e0261b2c..6cb890a6d0 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -14,7 +14,8 @@ class Note_name_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Note_name_engraver); + Link_array req_l_arr_; Link_array 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 */ ""); diff --git a/lily/note-performer.cc b/lily/note-performer.cc index c5c522405a..a7d2907dae 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -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 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() +{ +} diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index f022bf56d7..527b0c103a 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -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 */ ""); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 84bb78ff44..551a757b71 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -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); } diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index e88c81aaa4..157115741b 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -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); diff --git a/lily/parser.yy b/lily/parser.yy index 5afb5648a1..7bdcee9d0d 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -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); diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 193a350c6c..c96237a0c1 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -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 */ ""); diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index c13d65505c..20f2bc7ff0 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -13,7 +13,13 @@ #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(){} diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index ed78313be5..f402d74f97 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -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 */ ""); diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index df3238a635..cd83bae840 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -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 */ ""); diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index 8fe532e60a..798877414b 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -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, "","","","","" ); diff --git a/lily/pitch-squash-engraver.cc b/lily/pitch-squash-engraver.cc index 4ab2d01f0a..6ea465e781 100644 --- a/lily/pitch-squash-engraver.cc +++ b/lily/pitch-squash-engraver.cc @@ -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 */ ""); diff --git a/lily/porrectus-engraver.cc b/lily/porrectus-engraver.cc index 311ef312e9..4cc35e910c 100644 --- a/lily/porrectus-engraver.cc +++ b/lily/porrectus-engraver.cc @@ -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 (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 */ ""); diff --git a/lily/property-engraver.cc b/lily/property-engraver.cc index 044f9613c4..775da363b4 100644 --- a/lily/property-engraver.cc +++ b/lily/property-engraver.cc @@ -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 */ ""); diff --git a/lily/regular-spacing-engraver.cc b/lily/regular-spacing-engraver.cc index e6cb1300a3..c6590c832e 100644 --- a/lily/regular-spacing-engraver.cc +++ b/lily/regular-spacing-engraver.cc @@ -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 */ ""); + diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index a134dad1ee..24f8d723d4 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -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 */ ""); diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 1443d70790..1569df6784 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -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 */ ""); diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 702b98b5aa..55e1c8bde0 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -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 */ ""); diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index 1ebea18a43..8c6faa3d70 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -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 (i.elem_l_); + Item * item = dynamic_cast (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 */ ""); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 733aa5a3c0..814bd4d448 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -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 */ ""); diff --git a/lily/score-performer.cc b/lily/score-performer.cc index b1267acdce..ea2926c5bc 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -16,7 +16,14 @@ #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 () diff --git a/lily/score.cc b/lily/score.cc index 0b6680ae95..024810c1b5 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -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 ("#", p); diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index 93083a1cb0..b6b53162cf 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -21,8 +21,7 @@ class Script_column_engraver : public Engraver Link_array 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 (inf.elem_l_); - if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME + Item *thing = dynamic_cast (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 */ ""); diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index ef0c8266af..90e448e100 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -17,8 +17,7 @@ class Script_engraver : public Engraver Link_array 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 */ ""); diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 6c3811b8e2..d36a852911 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -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 (i.elem_l_); + Item * it = dynamic_cast (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 */ ""); diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 9a28be14ca..e787fd091b 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -182,11 +182,11 @@ Simple_spacer::add_columns (Link_array 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 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))); } } } diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 6eb8973f77..f96a4cb56d 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -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 */ ""); diff --git a/lily/slur.cc b/lily/slur.cc index f2035877bd..4cc9bf3e5a 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -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; } } diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 198080648d..be821b012b 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -43,15 +43,14 @@ class Spacing_engraver : public Engraver Array 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 (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 */ ""); diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 75e3779ab1..6d59bb277f 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -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 */ ""); diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index 1d8cdfc0c8..66b317e5b1 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -29,8 +29,7 @@ class Span_bar_engraver : public Engraver Link_array 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 (i.elem_l_); + Item * it = dynamic_cast (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 */ ""); diff --git a/lily/span-dynamic-performer.cc b/lily/span-dynamic-performer.cc index f76f7a8876..46a3b3f8ca 100644 --- a/lily/span-dynamic-performer.cc +++ b/lily/span-dynamic-performer.cc @@ -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, "","","","","" ); diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index aee7edc6a0..24418337d1 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -20,10 +20,7 @@ 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 () { diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index c1a27bcd17..caca0f8034 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -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 */ ""); diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index 5d4b0a5e01..ae47a7d189 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -10,26 +10,22 @@ #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 */ ""); diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 9375bd9a7f..faf0b7ab1c 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -16,16 +16,14 @@ #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 */ ""); diff --git a/lily/swallow-engraver.cc b/lily/swallow-engraver.cc index 3823f2c1f5..5a3dcfdfbe 100644 --- a/lily/swallow-engraver.cc +++ b/lily/swallow-engraver.cc @@ -15,12 +15,12 @@ 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*) diff --git a/lily/swallow-perf.cc b/lily/swallow-perf.cc index 7ff03f174f..7b2884b9fa 100644 --- a/lily/swallow-perf.cc +++ b/lily/swallow-perf.cc @@ -6,8 +6,22 @@ (c) 1997--2001 Han-Wen Nienhuys */ -#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 */ ""); diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index 642c222e11..969f3a07e2 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -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 */ ""); diff --git a/lily/tempo-performer.cc b/lily/tempo-performer.cc index 97be2fd709..fa2f0fd37c 100644 --- a/lily/tempo-performer.cc +++ b/lily/tempo-performer.cc @@ -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 () { diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index ed9473e000..3fdc1a3f71 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -24,7 +24,7 @@ class Text_engraver : public Engraver Link_array reqs_; Link_array 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 */ ""); diff --git a/lily/text-item.cc b/lily/text-item.cc index 5f7c4b8a3a..e4320a3daf 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -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))) diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index f0321e3532..8698c945a2 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -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 (info.elem_l_)); + Side_position_interface::add_support (span_, info.grob_l_); + add_bound_item (span_, dynamic_cast (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 */ ""); diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc index 9e995b2f74..5fcbda14fb 100644 --- a/lily/thread-devnull-engraver.cc +++ b/lily/thread-devnull-engraver.cc @@ -14,13 +14,13 @@ 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 */ ""); diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index d96acb32e9..9f541988d4 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -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 (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 (unsmob_grob (gh_caar (s)))); - Tie::set_head (p, RIGHT, dynamic_cast (unsmob_grob (gh_cdar (s)))); + Tie::set_head (p, LEFT, dynamic_cast (unsmob_grob (ly_caar (s)))); + Tie::set_head (p, RIGHT, dynamic_cast (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 */ ""); diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index e25e6cb4b2..f343ffaadb 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -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 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 (); } + diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 4d9f071010..b7a2b26448 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -17,15 +17,17 @@ /** 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 */ ""); diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index c518f96ed6..cb3f1322a9 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -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, "","","","","" ); diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index fb02109583..909039db3a 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -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 */ ""); diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 7c05a7d14b..79b741034c 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -80,8 +80,6 @@ Timing_translator::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Timing_translator); - void Timing_translator::initialize () { diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc index 3a66cefb75..0f41169106 100644 --- a/lily/translator-ctors.cc +++ b/lily/translator-ctors.cc @@ -19,6 +19,27 @@ */ Dictionary *global_translator_dict_p=0; + +SCM +ly_get_all_translators () +{ + SCM l = SCM_EOL; + for (std::map::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) { diff --git a/lily/translator-def.cc b/lily/translator-def.cc index 7f0a2bb34a..1d1f65aeb5 100644 --- a/lily/translator-def.cc +++ b/lily/translator-def.cc @@ -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)); } } } diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 763bdc8997..bb7f8cb187 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -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); diff --git a/lily/translator.cc b/lily/translator.cc index a2e780f31d..6820044530 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -15,11 +15,6 @@ #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 ("#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); diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index aa3f0065e5..1aaa75a3c8 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -20,7 +20,7 @@ class Tuplet_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Tuplet_engraver); protected: Link_array 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 (i.elem_l_)); + Tuplet_bracket::add_column (started_span_p_arr_[j], dynamic_cast (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 */ ""); diff --git a/lily/type-swallow-translator.cc b/lily/type-swallow-translator.cc index e16b9e316a..abc1540d77 100644 --- a/lily/type-swallow-translator.cc +++ b/lily/type-swallow-translator.cc @@ -18,6 +18,4 @@ Type_swallow_translator::try_music (Music*r) return false; } - - -DECLARE_REQUEST_SWALLOWER (Skip_req); +DECLARE_REQUEST_SWALLOWER(Skip_req); diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index c91890775f..65eb757387 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -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 */ ""); diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc index 7a8d460f99..0a27f98ca1 100644 --- a/lily/voice-devnull-engraver.cc +++ b/lily/voice-devnull-engraver.cc @@ -14,14 +14,14 @@ 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 */ ""); diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 68d849c1c2..cc163f9bc9 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -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 (i.elem_l_)) + if (Item* item = dynamic_cast (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 */ ""); diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 1c86fc7a3b..6261811a13 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -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 { diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 575def8426..cb7289fd43 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -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 diff --git a/make/out/lilypond.mandrake.spec b/make/out/lilypond.mandrake.spec index bebfda0000..307132114c 100644 --- a/make/out/lilypond.mandrake.spec +++ b/make/out/lilypond.mandrake.spec @@ -1,5 +1,5 @@ %define name lilypond -%define version 1.5.12 +%define version 1.5.13 %define release 1mdk Name: %{name} diff --git a/make/out/lilypond.redhat.spec b/make/out/lilypond.redhat.spec index 3a55369af8..1f2c5eda2e 100644 --- a/make/out/lilypond.redhat.spec +++ b/make/out/lilypond.redhat.spec @@ -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 diff --git a/make/out/lilypond.suse.spec b/make/out/lilypond.suse.spec index 6dda6f6443..2626254926 100644 --- a/make/out/lilypond.suse.spec +++ b/make/out/lilypond.suse.spec @@ -14,11 +14,11 @@ 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/ diff --git a/modules/midi.c b/modules/midi.c index 747ed1b5ab..768e6308e9 100644 --- a/modules/midi.c +++ b/modules/midi.c @@ -23,6 +23,8 @@ midi.parse (s) /* urg */ #if HAVE_PYTHON2_PYTHON_H #include +#elif HAVE_PYTHON2_0_PYTHON_H +#include #elif HAVE_PYTHON1_5_PYTHON_H #include #elif HAVE_PYTHON_PYTHON_H diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000000..990a7e29fd --- /dev/null +++ b/po/da.po @@ -0,0 +1,1406 @@ +# Danish translation of lilypond +# Copyright (C) 2001 Free Software Foundation, Inc. +# Keld Simonsen , 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 \n" +"Language-Team: Danish \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 " + +#: 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 "" +msgstr "" + +#: 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" diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 4475fd390c..88992926cf 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -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 diff --git a/scm/backend-documentation-lib.scm b/scm/backend-documentation-lib.scm index 4c14181208..63d2937e15 100644 --- a/scm/backend-documentation-lib.scm +++ b/scm/backend-documentation-lib.scm @@ -84,25 +84,22 @@ (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 index 0000000000..505bc079cc --- /dev/null +++ b/scm/context-description.scm @@ -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 aliststring name) + name)) (define (interface-name name) name) diff --git a/scm/engraver-documentation-lib.scm b/scm/engraver-documentation-lib.scm index 862a1da057..6183686e0c 100644 --- a/scm/engraver-documentation-lib.scm +++ b/scm/engraver-documentation-lib.scm @@ -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 ;;; @@ -19,31 +19,39 @@ ;; 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 stringsymbol 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) ) )) @@ -128,12 +143,12 @@ (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))) ) )) @@ -179,12 +194,13 @@ 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)) diff --git a/scm/generate-documentation.scm b/scm/generate-documentation.scm index 114d5f2de7..5e3f8f805f 100644 --- a/scm/generate-documentation.scm +++ b/scm/generate-documentation.scm @@ -11,17 +11,13 @@ ;;; 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:/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 ;; diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 98f29a9d6d..3683ebda1e 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -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 . ( @@ -38,11 +40,9 @@ (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 @@ -110,7 +110,7 @@ (space-function . ,default-beam-space-function) (damping . 1) (auto-knee-gap . 7) - (meta . ,(grob-description "Beam" beam-interface)) + (meta . ,(grob-description beam-interface)) )) (BreakAlignment . ( @@ -118,7 +118,7 @@ (stacking-dir . 1) (axes 0) (space-alist . ,default-break-align-space-alist) - (meta . ,(grob-description "BreakAlignment" + (meta . ,(grob-description axis-group-interface align-interface ) ) @@ -128,7 +128,7 @@ (axes . (0)) (X-offset-callbacks . (,Break_align_interface::alignment_callback)) - (meta . ,(grob-description "BreakAlignGroup" axis-group-interface)) + (meta . ,(grob-description axis-group-interface)) )) (BreathingSign . ( @@ -137,7 +137,7 @@ (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 . ( @@ -148,7 +148,7 @@ (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 . ( @@ -156,7 +156,7 @@ (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 . ( @@ -166,7 +166,7 @@ (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) ) )) @@ -176,7 +176,7 @@ (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 . ( @@ -184,7 +184,7 @@ (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) @@ -195,7 +195,7 @@ (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 . ( @@ -210,7 +210,7 @@ (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 . ( @@ -218,14 +218,14 @@ (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 . ( @@ -237,7 +237,7 @@ (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)) )) @@ -245,7 +245,7 @@ (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) @@ -260,7 +260,7 @@ (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 . ( @@ -275,7 +275,7 @@ (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 . ( @@ -283,7 +283,7 @@ (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)) )) @@ -294,12 +294,12 @@ (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 . ( @@ -307,7 +307,7 @@ (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 . ( @@ -318,7 +318,7 @@ (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 . ( @@ -330,7 +330,7 @@ (add-stem . #t) (stem-direction . 1) (molecule-callback . ,Porrectus::brew_molecule) - (meta . ,(grob-description "Porrectus" + (meta . ,(grob-description porrectus-interface)) )) @@ -346,7 +346,7 @@ (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 . ( @@ -359,31 +359,28 @@ (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) @@ -392,8 +389,7 @@ (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) @@ -402,16 +398,13 @@ (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 . ( @@ -423,14 +416,14 @@ (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) @@ -451,14 +444,14 @@ (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 . ( @@ -468,7 +461,7 @@ (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)) )) @@ -476,7 +469,7 @@ (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) @@ -485,14 +478,14 @@ (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 . ( @@ -501,12 +494,12 @@ (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 . ( @@ -528,7 +521,7 @@ (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 . ( @@ -541,7 +534,7 @@ (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) @@ -561,7 +554,7 @@ (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 . ( @@ -570,7 +563,7 @@ (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 . ( @@ -578,7 +571,7 @@ (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) @@ -590,7 +583,7 @@ (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 . ( @@ -611,7 +604,7 @@ (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 . ( @@ -622,15 +615,15 @@ (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 . ( @@ -643,7 +636,7 @@ (,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 @@ -653,7 +646,7 @@ (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) @@ -663,9 +656,9 @@ (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) @@ -673,7 +666,7 @@ (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 . ( @@ -684,7 +677,7 @@ ;; 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) @@ -696,7 +689,7 @@ (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) @@ -707,12 +700,12 @@ (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 . ( @@ -722,7 +715,7 @@ (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 . ( @@ -733,7 +726,7 @@ (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)) )) @@ -748,7 +741,7 @@ (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 . ( @@ -763,25 +756,38 @@ (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)) diff --git a/scm/interface-description.scm b/scm/interface-description.scm index 9a375415ad..8bd3ca2ed7 100644 --- a/scm/interface-description.scm +++ b/scm/interface-description.scm @@ -24,15 +24,14 @@ ) ) -(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 diff --git a/scm/lily.scm b/scm/lily.scm index b8f28858fe..df53f375c2 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -119,11 +119,18 @@ "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" @@ -142,3 +149,4 @@ ))) + diff --git a/scm/ps.scm b/scm/ps.scm index 9875dd3904..ac32281bb2 100644 --- a/scm/ps.scm +++ b/scm/ps.scm @@ -6,6 +6,7 @@ ;;; Han-Wen Nienhuys + (define (ps-scm action-name) ;; alist containing fontname -> fontcommand assoc (both strings) diff --git a/scm/translator-description.scm b/scm/translator-description.scm index d83944620f..3e5f63ab05 100644 --- a/scm/translator-description.scm +++ b/scm/translator-description.scm @@ -1,110 +1,11 @@ -(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 aliststring (car x)) + (symbol->string (car y)))) + +;(set! engraver-description-alist +; (sort engraver-description-alist aliststring (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) diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 22c77623d3..fe6c8252fd 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -15,9 +15,17 @@ +(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 diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index dbf3fc6193..e67d6988a3 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -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: -- 2.39.5