]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.5.16 release/1.5.16
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Oct 2001 22:04:37 +0000 (00:04 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Oct 2001 22:04:37 +0000 (00:04 +0200)
===========

* Fixes for latest guile cvs.

* Add --enable-optimising flag to configure (Huh?).

* Only inline string utlis when optimising.

* Compile fix.

1.5.15.

35 files changed:
CHANGES
VERSION
configure
input/test/accidentals.ly [new file with mode: 0644]
input/test/ancient-font.ly
lily/accidental-engraver.cc
lily/beam.cc
lily/folded-repeat-iterator.cc
lily/include/lily-guile.hh
lily/include/music-sequence.hh
lily/include/porrectus.hh
lily/include/repeated-music.hh
lily/lily-guile.cc
lily/lyric-combine-music.cc
lily/music-sequence.cc
lily/parser.yy
lily/part-combine-music.cc
lily/porrectus-engraver.cc
lily/porrectus.cc
lily/repeated-music.cc
lily/sequential-music.cc
lily/simultaneous-music-iterator.cc
lily/simultaneous-music.cc
lily/unfolded-repeat-iterator.cc
make/out/lilypond.lsm
make/out/lilypond.mandrake.spec
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
modules/midi.c
scm/grob-description.scm
scm/grob-property-description.scm
scm/music-property-description.scm
scm/translator-description.scm [deleted file]
scm/translator-property-description.scm
scripts/midi2ly.py

diff --git a/CHANGES b/CHANGES
index 8f29695d35a6c2131b8c54c7197fb5b8e76c8362..7eac9d8357a07205359188d7b0624a076893fd33 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -9,8 +9,37 @@
 
 * Compile fix.
 
-1.5.15
-======
+1.5.15.rz1
+==========
+
+* added property autoReminders, automatically creating reminder
+  accidentals. - major changes to accidental-engraver.
+
+1.5.15.hwn1
+===========
+
+* Junk translator-description.scm
+
+* Make Repeated_music use 'element and 'elements in stead of 'body and
+'alternatives.  Associated changes in parser and music-sequence.cc.
+
+* Change Part_combine_music and Lyric_combine_music to use 'elements
+music property.
+
+* Porrectus patch (Juergen Reuter)
+
+ - Rewrote code for vaticana style porrectus grob; the solid shape is
+  now drawn as a single bezier sandwich rather than composed from a
+  couple of misused slurs.  Looks now much nicer.
+
+ - Added code to forbid line-breaking inbetween a porrectus
+  (preliminary; to be moved to ligature engraver framework).
+
+ - Added auto-properties property for automatic determination of grob
+  properties add-stem and stem-direction from musical context.
+
+ - Small clean-ups.
+
 
 1.5.14.jcn6
 ===========
diff --git a/VERSION b/VERSION
index e5b6a8e3181a269056495128f888538d0569d4fa..39881eb45d4bc09d2bcfe6645f5111b58b2a22d2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
-PATCH_LEVEL=15
-MY_PATCH_LEVEL=jcn1
+PATCH_LEVEL=16
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 3aab916d8743dcbdba20d8d477f87aa59992fa93..3f9f6b4dcd9f177666f61717c46d3d746c17df60 100755 (executable)
--- a/configure
+++ b/configure
@@ -71,6 +71,8 @@ ac_help="$ac_help
   --enable-checking       set runtime checks (assert calls).  Default: on"
 ac_help="$ac_help
   --enable-debugging      compile with debugging info.  Default: on"
+ac_help="$ac_help
+  --enable-optimising      compile with optimising.  Default: on"
 ac_help="$ac_help
   --enable-profiling      compile with gprof support.  Default: off"
 ac_help="$ac_help
@@ -626,12 +628,12 @@ fi
     fi
 
     echo $ac_n "checking Package""... $ac_c" 1>&6
-echo "configure:630: checking Package" >&5
+echo "configure:632: checking Package" >&5
     if test "x$PACKAGE" = "xSTEPMAKE"; then
        echo "$ac_t""Stepmake package!" 1>&6
 
        echo $ac_n "checking builddir""... $ac_c" 1>&6
-echo "configure:635: checking builddir" >&5
+echo "configure:637: checking builddir" >&5
        if test "$srcdir" = "."; then
            builddir=.
        else
@@ -669,7 +671,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
         echo "$ac_t""$PACKAGE" 1>&6
 
        echo $ac_n "checking builddir""... $ac_c" 1>&6
-echo "configure:673: checking builddir" >&5
+echo "configure:675: checking builddir" >&5
        if test "$srcdir" = "."; then
            builddir=.
            srcdir_build=no
@@ -689,7 +691,7 @@ echo "configure:673: checking builddir" >&5
        fi
 
        echo $ac_n "checking for stepmake""... $ac_c" 1>&6
-echo "configure:693: checking for stepmake" >&5
+echo "configure:695: checking for stepmake" >&5
        # Check for installed stepmake
        if test -d $stepmake; then
            echo "$ac_t""$stepmake" 1>&6
@@ -811,7 +813,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:815: checking host system type" >&5
+echo "configure:817: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -836,7 +838,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:840: checking for $ac_word" >&5
+echo "configure:842: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -871,7 +873,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:875: checking for $ac_word" >&5
+echo "configure:877: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -908,7 +910,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:912: checking for $ac_word" >&5
+echo "configure:914: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_TAR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -943,7 +945,7 @@ test -n "$TAR" || TAR="error"
        # Extract the first word of "bash", so it can be a program name with args.
 set dummy bash; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:947: checking for $ac_word" >&5
+echo "configure:949: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -983,7 +985,7 @@ fi
        # Extract the first word of "bash", so it can be a program name with args.
 set dummy bash; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:987: checking for $ac_word" >&5
+echo "configure:989: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SHELL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1020,7 +1022,7 @@ fi
        # Extract the first word of "bash", so it can be a program name with args.
 set dummy bash; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1024: checking for $ac_word" >&5
+echo "configure:1026: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1061,7 +1063,7 @@ fi
     # Extract the first word of "${PYTHON:-python}", so it can be a program name with args.
 set dummy ${PYTHON:-python}; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1065: checking for $ac_word" >&5
+echo "configure:1067: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1227,6 +1229,13 @@ if test "${enable_debugging+set}" = set; then
 fi
 
 
+    # Check whether --enable-optimising or --disable-optimising was given.
+if test "${enable_optimising+set}" = set; then
+  enableval="$enable_optimising"
+  optimise_b=$enableval
+fi
+
+
     # Check whether --enable-profiling or --disable-profiling was given.
 if test "${enable_profiling+set}" = set; then
   enableval="$enable_profiling"
@@ -1262,7 +1271,7 @@ EOF
     # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1266: checking for $ac_word" >&5
+echo "configure:1275: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1292,7 +1301,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1296: checking for $ac_word" >&5
+echo "configure:1305: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1343,7 +1352,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1347: checking for $ac_word" >&5
+echo "configure:1356: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1375,7 +1384,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1379: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1388: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1386,12 +1395,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1390 "configure"
+#line 1399 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1417,12 +1426,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1421: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1430: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1426: checking whether we are using GNU C" >&5
+echo "configure:1435: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1431,7 +1440,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1435: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1450,7 +1459,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1454: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1463: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1488,7 +1497,7 @@ fi
     CPPFLAGS=${CPPFLAGS:-""}
 
     echo $ac_n "checking for IEEE-conformance compiler flags""... $ac_c" 1>&6
-echo "configure:1492: checking for IEEE-conformance compiler flags" >&5
+echo "configure:1501: checking for IEEE-conformance compiler flags" >&5
     save_cflags="$CFLAGS"
     case "$host" in
         alpha*-*-*)
@@ -1510,7 +1519,7 @@ echo "configure:1492: checking for IEEE-conformance compiler flags" >&5
 
 # AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1514: checking how to run the C preprocessor" >&5
+echo "configure:1523: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1525,13 +1534,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1529 "configure"
+#line 1538 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1535: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1544: \"$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
   :
@@ -1542,13 +1551,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1546 "configure"
+#line 1555 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1561: \"$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
   :
@@ -1559,13 +1568,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1563 "configure"
+#line 1572 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1578: \"$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
   :
@@ -1593,17 +1602,17 @@ for ac_hdr in assert.h sys/stat.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1597: checking for $ac_hdr" >&5
+echo "configure:1606: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1602 "configure"
+#line 1611 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1616: \"$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*
@@ -1630,12 +1639,12 @@ fi
 done
 
 echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:1634: checking whether stat file-mode macros are broken" >&5
+echo "configure:1643: checking whether stat file-mode macros are broken" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1639 "configure"
+#line 1648 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1686,14 +1695,8 @@ EOF
 fi
 
 
-DEFINES="$DEFINES -DSTRING_UTILS_INLINED"
-cat >> confdefs.h <<\EOF
-#define STRINGS_UTILS_INLINED 1
-EOF
-
-
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1697: checking how to run the C++ preprocessor" >&5
+echo "configure:1700: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1706,12 +1709,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 1710 "configure"
+#line 1713 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1718: \"$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
   :
@@ -1748,7 +1751,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:1752: checking for $ac_word" >&5
+echo "configure:1755: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1780,7 +1783,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1784: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1787: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1791,12 +1794,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1795 "configure"
+#line 1798 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1822,12 +1825,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1826: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1829: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1831: checking whether we are using GNU C++" >&5
+echo "configure:1834: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1836,7 +1839,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1855,7 +1858,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1859: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1862: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1889,17 +1892,17 @@ fi
 
     ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1893: checking for FlexLexer.h" >&5
+echo "configure:1896: checking for FlexLexer.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1898 "configure"
+#line 1901 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1906: \"$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*
@@ -1936,7 +1939,7 @@ fi
 
 
     echo $ac_n "checking "g++ version"""... $ac_c" 1>&6
-echo "configure:1940: checking "g++ version"" >&5
+echo "configure:1943: checking "g++ version"" >&5
     cxx_version=`$CXX --version`
     echo "$ac_t"""$cxx_version"" 1>&6
         # urg, egcs: how to check for egcs >= 1.1?
@@ -1954,12 +1957,12 @@ echo "configure:1940: checking "g++ version"" >&5
 
 
     echo $ac_n "checking whether explicit instantiation is needed""... $ac_c" 1>&6
-echo "configure:1958: checking whether explicit instantiation is needed" >&5
+echo "configure:1961: checking whether explicit instantiation is needed" >&5
 if eval "test \"`echo '$''{'lily_cv_need_explicit_instantiation'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1963 "configure"
+#line 1966 "configure"
 #include "confdefs.h"
 
     template <class T> struct foo { static int baz; };
@@ -1969,7 +1972,7 @@ int main() {
  return foo<int>::baz; 
 ; return 0; }
 EOF
-if { (eval echo configure:1973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lily_cv_need_explicit_instantiation=no
 else
@@ -1996,7 +1999,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:2000: checking for $ac_word" >&5
+echo "configure:2003: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2039,7 +2042,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:2043: checking for $ac_word" >&5
+echo "configure:2046: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2074,7 +2077,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:2078: checking for $ac_word" >&5
+echo "configure:2081: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2142,7 +2145,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:2146: checking for $ac_word" >&5
+echo "configure:2149: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2175,7 +2178,7 @@ test -n "$AR" || AR="error"
     # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2179: checking for $ac_word" >&5
+echo "configure:2182: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2230,7 +2233,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:2234: checking language" >&5    
+echo "configure:2237: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
            lang=English;;
@@ -2266,7 +2269,7 @@ EOF
 
 
     echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:2270: checking for gettext in -lintl" >&5
+echo "configure:2273: checking for gettext in -lintl" >&5
 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2274,7 +2277,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2278 "configure"
+#line 2281 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -2288,7 +2291,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:2292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2295: \"$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
@@ -2318,12 +2321,12 @@ fi
     for ac_func in gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2322: checking for $ac_func" >&5
+echo "configure:2325: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2327 "configure"
+#line 2330 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2349,7 +2352,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2356: \"$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
@@ -2381,7 +2384,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:2385: checking for $ac_word" >&5
+echo "configure:2388: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2412,7 +2415,7 @@ done
 test -n "$MSGFMT" || MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh "
 
     echo $ac_n "checking whether msgfmt accepts -o""... $ac_c" 1>&6
-echo "configure:2416: checking whether msgfmt accepts -o" >&5
+echo "configure:2419: checking whether msgfmt accepts -o" >&5
     msgfmt_output="`msgfmt -o bla 2>&1 | grep usage`"
     if test "$msgfmt_output" = ""; then
        echo "$ac_t""yes" 1>&6
@@ -2440,7 +2443,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:2444: checking for $ac_word" >&5
+echo "configure:2447: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_METAFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2476,7 +2479,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:2480: checking for $ac_word" >&5
+echo "configure:2483: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2514,7 +2517,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:2518: checking for $ac_word" >&5
+echo "configure:2521: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_METAPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2550,7 +2553,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:2554: checking for $ac_word" >&5
+echo "configure:2557: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2589,7 +2592,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:2593: checking for $ac_word" >&5
+echo "configure:2596: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMETAFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2625,7 +2628,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:2629: checking for $ac_word" >&5
+echo "configure:2632: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2663,7 +2666,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:2667: checking for $ac_word" >&5
+echo "configure:2670: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMETAPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2699,7 +2702,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:2703: checking for $ac_word" >&5
+echo "configure:2706: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2733,7 +2736,7 @@ test -n "$INIMPOST" || INIMPOST="-echo no inimp or inimpost"
     fi
 
     echo $ac_n "checking for working metafont mode""... $ac_c" 1>&6
-echo "configure:2737: checking for working metafont mode" >&5
+echo "configure:2740: checking for working metafont mode" >&5
     modelist='ljfour lj4 lj3 lj2 ljet laserjet'
     for MFMODE in $modelist; do
        $METAFONT "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
@@ -2744,7 +2747,7 @@ echo "configure:2737: checking for working metafont mode" >&5
     echo "$ac_t""$MFMODE" 1>&6
 
     echo $ac_n "checking for mfplain.mp""... $ac_c" 1>&6
-echo "configure:2748: checking for mfplain.mp" >&5
+echo "configure:2751: checking for mfplain.mp" >&5
     #
     # For now let people define these in their environments
     #
@@ -2752,7 +2755,7 @@ echo "configure:2748: checking for mfplain.mp" >&5
     echo "$ac_t""$MFPLAIN_MP" 1>&6
 
     echo $ac_n "checking for inimetapost flags""... $ac_c" 1>&6
-echo "configure:2756: checking for inimetapost flags" >&5
+echo "configure:2759: checking for inimetapost flags" >&5
     if test  ${INIMETAPOST} = "inimp" ; then
        : ${INIMETAPOST_FLAGS=''}
     else
@@ -2785,7 +2788,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:2789: checking for $ac_word" >&5
+echo "configure:2792: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_KPSEWHICH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2816,7 +2819,7 @@ done
 test -n "$KPSEWHICH" || KPSEWHICH="no"
 
     echo $ac_n "checking for tfm path""... $ac_c" 1>&6
-echo "configure:2820: checking for tfm path" >&5
+echo "configure:2823: checking for tfm path" >&5
 
     TFM_FONTS="cmr msam"
 
@@ -2844,13 +2847,13 @@ echo "configure:2820: checking for tfm path" >&5
 
     ## First, let's just see if we can find Guile at all.
     echo $ac_n "checking "for guile-config"""... $ac_c" 1>&6
-echo "configure:2848: checking "for guile-config"" >&5
+echo "configure:2851: checking "for guile-config"" >&5
     for guile_config in guile-config $target-guile-config $build-guile-config; do
        echo "$ac_t"""$guile_config"" 1>&6
        if ! $guile_config --version > /dev/null 2>&1 ; then
            echo "configure: warning: "cannot execute $guile_config"" 1>&2
            echo $ac_n "checking "if we are cross compiling"""... $ac_c" 1>&6
-echo "configure:2854: checking "if we are cross compiling"" >&5
+echo "configure:2857: checking "if we are cross compiling"" >&5
            guile_config=error
        else
            break
@@ -2861,7 +2864,7 @@ echo "configure:2854: checking "if we are cross compiling"" >&5
        exit 1
     fi
     echo $ac_n "checking "Guile version"""... $ac_c" 1>&6
-echo "configure:2865: checking "Guile version"" >&5
+echo "configure:2868: checking "Guile version"" >&5
     need_guile_version="1.3.4"
     need_guile_version_numeric=100304
     guile_version=`$guile_config --version 2>&1 | awk '{print $NF}'`
@@ -2882,7 +2885,7 @@ else {last =0}}
         
 ## The GUILE_FLAGS macro.
   echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2886: checking for Guile" >&5
+echo "configure:2889: checking for Guile" >&5
   if ! $guile_config link > /dev/null ; then
       echo "$ac_t"""cannot execute $guile_config"" 1>&6
       { echo "configure: error: "cannot find guile-config; is Guile installed?"" 1>&2; exit 1; }
@@ -2897,7 +2900,7 @@ echo "configure:2886: checking for Guile" >&5
     # Extract the first word of "guile", so it can be a program name with args.
 set dummy guile; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2901: checking for $ac_word" >&5
+echo "configure:2904: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GUILE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2958,17 +2961,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2962: checking for $ac_hdr" >&5
+echo "configure:2965: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2967 "configure"
+#line 2970 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2975: \"$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*
@@ -2995,7 +2998,7 @@ fi
 done
 
        echo $ac_n "checking for kpse_find_file in -lkpathsea""... $ac_c" 1>&6
-echo "configure:2999: checking for kpse_find_file in -lkpathsea" >&5
+echo "configure:3002: 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
@@ -3003,7 +3006,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lkpathsea  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3007 "configure"
+#line 3010 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -3017,7 +3020,7 @@ int main() {
 kpse_find_file()
 ; return 0; }
 EOF
-if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3024: \"$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
@@ -3047,12 +3050,12 @@ fi
        for ac_func in kpse_find_file
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3051: checking for $ac_func" >&5
+echo "configure:3054: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3056 "configure"
+#line 3059 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3078,7 +3081,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3085: \"$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
@@ -3105,7 +3108,7 @@ done
 
     fi
     echo $ac_n "checking whether to use kpathsea""... $ac_c" 1>&6
-echo "configure:3109: checking whether to use kpathsea" >&5
+echo "configure:3112: checking whether to use kpathsea" >&5
     if test "$kpathsea_b" != no; then
         echo "$ac_t""yes" 1>&6
        KPATHSEA=1
@@ -3126,7 +3129,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:3130: checking for $ac_word" >&5
+echo "configure:3133: 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
@@ -3166,8 +3169,18 @@ test -n "$BIBTEX2HTML" || BIBTEX2HTML="error"
 
 
 
+if test "$optimise_b" = yes; then
+    DEFINES="$DEFINES -DSTRING_UTILS_INLINED"
+    cat >> confdefs.h <<\EOF
+#define STRINGS_UTILS_INLINED 1
+EOF
+
+fi
+
+
+
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3171: checking for 8-bit clean memcmp" >&5
+echo "configure:3184: 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
@@ -3175,7 +3188,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3179 "configure"
+#line 3192 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int) throw();
@@ -3188,7 +3201,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3205: \"$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
@@ -3206,12 +3219,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:3210: checking for vprintf" >&5
+echo "configure:3223: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3215 "configure"
+#line 3228 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -3237,7 +3250,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3254: \"$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
@@ -3261,12 +3274,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3265: checking for _doprnt" >&5
+echo "configure:3278: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3270 "configure"
+#line 3283 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -3292,7 +3305,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3309: \"$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
@@ -3319,12 +3332,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:3323: checking for $ac_func" >&5
+echo "configure:3336: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3328 "configure"
+#line 3341 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3350,7 +3363,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3367: \"$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
@@ -3390,7 +3403,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:3394: checking for $ac_word" >&5
+echo "configure:3407: 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
@@ -3422,7 +3435,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:3426: checking whether makeinfo can split html by @node" >&5
+echo "configure:3439: checking whether makeinfo can split html by @node" >&5
        mkdir -p out
        makeinfo --html --output=out/split <<EOF
 \input texinfo
@@ -3450,7 +3463,7 @@ EOF
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3454: checking for $ac_word" >&5
+echo "configure:3467: 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
@@ -3488,17 +3501,17 @@ for ac_hdr in python2.0/Python.h python2/Python.h python/Python.h python1.5/Pyth
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3492: checking for $ac_hdr" >&5
+echo "configure:3505: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3497 "configure"
+#line 3510 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3515: \"$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/input/test/accidentals.ly b/input/test/accidentals.ly
new file mode 100644 (file)
index 0000000..294ca11
--- /dev/null
@@ -0,0 +1,23 @@
+% \version "1.5.15.rz1"
+
+mel = \notes {
+ d4  dis dis d | d dis disis dis | d des disis d | dis deses d dis ~ | dis dis ~ dis dis ~ | \break
+ dis dis cis c | c cis cisis cis | c ces cisis c | cis ceses c cis ~ | cis cis ~ cis cis \bar "|."  | \break
+}
+
+\score { \notes \context Staff \transpose c''' {
+   \key d \major
+   \mel
+   \property Score.autoReminders = #'cautionary
+   < s1^"$\\backslash$property Score.autoReminders = \\#'cautionary" \mel >
+   \property Score.autoReminders = #'accidental
+   < s1^"$\\backslash$property Score.autoReminders = \\#'accidental" \mel >
+   \property Score.autoReminders = ##f
+   \property Score.forgetAccidentals = ##t
+   < s1^"$\\backslash$property Score.forgetAccidentals = \\#\\#t" \mel >
+   \property Score.forgetAccidentals = ##f
+   \property Score.noResetKey = ##t
+   < s1^"$\\backslash$property Score.noResetKey = \\#\\#t" \mel >
+  }
+}
+
index cfc7e498a30aef267873af6b687c94de8b6de7e1..33e234db23638257786b96a786e4776553660f3c 100644 (file)
@@ -31,6 +31,7 @@ upperVoice =  \context Staff = upperVoice <
        \property Voice.Porrectus \override #'solid = ##t
        \property Voice.Porrectus \override #'add-stem = ##t
        \property Voice.Porrectus \override #'stem-direction = #-1
+       \property Voice.Porrectus \override #'line-thickness = #0.5
        \key es \major
        \clef "vaticana_fa2"
        c!1 des! e! f! ges!
@@ -44,7 +45,7 @@ upperVoice =  \context Staff = upperVoice <
        a! b!
        \property Staff.BarLine \override #'bar-size = #3.0 \bar "|"
        \property Voice.NoteHead \override #'style = #'vaticana_virga
-       ces' b! ces'! \~ ges! \~ fes!
+       ces' b! des'! \~ ges! \~ fes!
        \breathe
        \clef "vaticana_fa1"
        \property Voice.NoteHead \override #'style = #'vaticana_quilisma
@@ -129,7 +130,8 @@ lowerVoice =  \context Staff = lowerNotes <
        \property Voice.Porrectus \override #'add-stem = ##t
        \property Voice.Porrectus \override #'stem-direction = #1
        \property Voice.Porrectus \override #'line-thickness = #0.7
-       % \property Voice.Porrectus \override #'porrectus-width = #3.0
+%      \property Voice.Porrectus \override #'auto-properties = ##t
+%      \property Voice.Porrectus \override #'porrectus-width = #3.0
        \key a \major
 
        % IMPORTANT NOTE:
@@ -186,11 +188,6 @@ lowerVoice =  \context Staff = lowerNotes <
        e2 f g
        \clef "mensural_g"
 
-       % FIXME: In the second and all subsequent lines of score, the
-       % stems and accidentals of the junked notes keep visible on
-       % porrectus grobs.  Is this an initialization bug in the line
-       % breaking algorithm?
-
        bes'! \~ as'! \~ cis''!
        bes'! \~ fis'! as'! \~ ges'!
        \property Staff.forceClef = ##t
index 46914f6d20ec5861b0c35df84ca1f89602dec1b2..e9daee13c3f043368c995b8eb4673afe17e3db2b 100644 (file)
@@ -1,7 +1,8 @@
 /*
-  local-key-engraver.cc -- implement accidental_engraver
+  accidental-engraver.cc -- implement accidental_engraver
 
   (c)  1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Modified 2001 by Rune Zedeler <rz@daimi.au.dk>
 */
 
 #include "musical-request.hh"
@@ -38,6 +39,7 @@ protected:
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
   virtual void initialize ();
+  virtual int  number_accidentals (SCM sig, Note_req *);
   virtual void create_grobs ();
   virtual void finalize ();
 public:
@@ -69,6 +71,34 @@ Accidental_engraver::initialize ()
 {
   last_keysig_ = get_property ("keySignature");
   daddy_trans_l_->set_property ("localKeySignature",  last_keysig_);  
+  daddy_trans_l_->set_property ("lazyKeySignature",   last_keysig_);  
+}
+
+/** calculates the number of accidentals on basis of the current local time sig
+  * (passed as argument).
+  * Returns number of accidentals (0, 1 or 2).
+  *   Negative (-1 or -2) if accidental has changed.
+  **/
+int
+Accidental_engraver::number_accidentals (SCM sig, Note_req * note_l)
+{
+  int n = unsmob_pitch (note_l->get_mus_property ("pitch"))->notename_i_;
+  int o = unsmob_pitch (note_l->get_mus_property ("pitch"))->octave_i () ;
+  int a = unsmob_pitch (note_l->get_mus_property ("pitch"))->alteration_i_;
+  
+  SCM prev = scm_assoc (gh_cons (gh_int2scm (o), gh_int2scm (n)), sig);
+  if (prev == SCM_BOOL_F)
+    prev = scm_assoc (gh_int2scm (n), sig);
+  SCM prev_acc = (prev == SCM_BOOL_F) ? gh_int2scm (0) : ly_cdr (prev);
+  bool different = !gh_equal_p (prev_acc , gh_int2scm (a));
+  int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0;
+
+  int num;
+  if (a==p && !to_boolean (note_l->get_mus_property ("force-accidental"))) num=0;
+  else if ( (abs(a)<abs(p) || p*a<0) && a!=0 ) num=2;
+  else num=1;
+  
+  return a==p ? num : -num;
 }
 
 void
@@ -77,26 +107,37 @@ Accidental_engraver::create_grobs ()
   if (!key_item_p_ && mel_l_arr_.size ()) 
     {
       SCM localsig = get_property ("localKeySignature");
-  
+      SCM lazysig = get_property ("lazyKeySignature");
+
       for (int i=0; i  < mel_l_arr_.size (); i++) 
        {
          Grob * support_l = support_l_arr_[i];
          Note_req * note_l = mel_l_arr_[i];
 
-         int n = unsmob_pitch (note_l->get_mus_property ("pitch"))->notename_i_;
-         int o = unsmob_pitch (note_l->get_mus_property ("pitch"))->octave_i () ;
-         int a = unsmob_pitch (note_l->get_mus_property ("pitch"))->alteration_i_;
-         
+         int local_num = number_accidentals(localsig,note_l);
+         bool local_diff = local_num<0; local_num = abs(local_num);
+         int lazy_num = number_accidentals(lazysig,note_l);
+         bool lazy_diff = lazy_num<0; lazy_num = abs(lazy_num);
+
+         int num = local_num;;
+         bool different= local_diff;
+         bool cautionary = to_boolean (note_l->get_mus_property ("cautionary"));
+         if (to_boolean (get_property ("noResetKey"))) {
+           num = lazy_num;
+           different = lazy_diff;
+         }
+         else if (gh_equal_p (get_property ("autoReminders"),ly_symbol2scm("cautionary"))
+                  || gh_equal_p (get_property ("autoReminders"),ly_symbol2scm("accidental"))) {
+           num = max(local_num,lazy_num);
+           if (gh_equal_p (get_property ("autoReminders"),ly_symbol2scm("cautionary"))
+               && lazy_num>local_num)
+             cautionary = true;
+         }
+
          /* see if there's a tie that "changes" the accidental */
          /* works because if there's a tie, the note to the left
             is of the same pitch as the actual note */
 
-         SCM prev = scm_assoc (gh_cons (gh_int2scm (o), gh_int2scm (n)), localsig);
-         if (prev == SCM_BOOL_F)
-           prev = scm_assoc (gh_int2scm (n), localsig);
-         SCM prev_acc = (prev == SCM_BOOL_F) ? gh_int2scm (0) : ly_cdr (prev);
-         bool different = !gh_equal_p (prev_acc , gh_int2scm (a));
-         int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0;
 
          Grob *tie_break_reminder = 0;
          bool tie_changes = false;
@@ -115,17 +156,7 @@ Accidental_engraver::create_grobs ()
                break;
              }
 
-         /* When do we want accidentals:
-
-            1. when property force-accidental is set, and not
-            tie_changes
-            2. when different and not tie-changes
-            3. maybe when at end of a tie: we must later see if
-            we're after a line break */
-         if (( (to_boolean (note_l->get_mus_property ("force-accidental"))
-               || different)
-              && !tie_changes)
-             || tie_break_reminder)
+         if (num)
            {
              if (!key_item_p_) 
                {
@@ -142,37 +173,36 @@ Accidental_engraver::create_grobs ()
                }
 
              
-             bool extra_natural =
-               sign (p) * (p - a) == 1
-               && abs (p) == 2;
-
              Local_key_item::add_pitch (key_item_p_, *unsmob_pitch (note_l->get_mus_property ("pitch")),
-                                        to_boolean (note_l->get_mus_property ("cautionary")),
-                                        extra_natural,
+                                        cautionary,
+                                        num==2,
                                         tie_break_reminder);
              Side_position_interface::add_support (key_item_p_,support_l);
            }
          
+
          /*
            We should not record the accidental if it is the first
            note and it is tied from the previous measure.
 
            Checking whether it is tied also works mostly, but will it
            always do the correct thing?
-
+           (???? -Rune )
           */
+         int n = unsmob_pitch (note_l->get_mus_property ("pitch"))->notename_i_;
+         int o = unsmob_pitch (note_l->get_mus_property ("pitch"))->octave_i () ;
+         int a = unsmob_pitch (note_l->get_mus_property ("pitch"))->alteration_i_;
+         SCM ON = gh_cons (gh_int2scm (o), gh_int2scm (n));
          bool forget = to_boolean (get_property ("forgetAccidentals"));
          if (tie_changes)
            {
              /*
                Remember an alteration that is different both from
                that of the tied note and of the key signature.
-
+               (????? -Rune )
               */
-             localsig = scm_assoc_set_x (localsig, gh_cons (gh_int2scm (o),
-                                                            gh_int2scm (n)),
-                                         SCM_BOOL_T); 
-
+             localsig = scm_assoc_set_x (localsig, ON, SCM_BOOL_T); 
+             lazysig = scm_assoc_set_x  (lazysig,  ON, SCM_BOOL_T); 
            }
          else if (!forget)
            {
@@ -180,17 +210,13 @@ Accidental_engraver::create_grobs ()
                not really really correct if there are more than one
                noteheads with the same notename.
               */
-             localsig = scm_assoc_set_x (localsig, gh_cons (gh_int2scm (o),
-                                                            gh_int2scm (n)),
-                                         gh_int2scm (a)); 
-
+             localsig = scm_assoc_set_x (localsig, ON, gh_int2scm (a)); 
+             lazysig = scm_assoc_set_x  (lazysig,  ON, gh_int2scm (a)); 
            }
         }
-
-
-  
   
       daddy_trans_l_->set_property ("localKeySignature",  localsig);
+      daddy_trans_l_->set_property ("lazyKeySignature",   lazysig);
     }
   
 
@@ -274,11 +300,11 @@ Accidental_engraver::process_music ()
   if (last_keysig_ != sig) 
     {
       daddy_trans_l_->set_property ("localKeySignature",  ly_deep_copy (sig));
+      daddy_trans_l_->set_property ("lazyKeySignature",  ly_deep_copy (sig));
       last_keysig_ = sig;
     }
   else if (!mp.to_bool () )
     {
-      if (!to_boolean (get_property ("noResetKey")))
        daddy_trans_l_->set_property ("localKeySignature",  ly_deep_copy (sig));
     }
 }
index 9e433827b64bc8ca0ac95f460db68c33d536585f..f744b4fff6bbdf75b2e7836a47e15d33060faba7 100644 (file)
@@ -14,7 +14,9 @@
   -* shorter! (now +- 1000 lines)
   
   -* less hairy code
-  
+
+  -* Remove #'direction from beam. The beam has no direction per se.
+  It may only set directions for stems.
   */
 
 
index 18cfe09204d44fdd842efaea557dbd81ddfe5499..58b1decf54da23986825673f5882d7e84ab50cff 100644 (file)
@@ -118,8 +118,8 @@ Folded_repeat_iterator::enter_alternative ()
     {
       Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
       s->separate_contexts_b_ = true;
-      s->init_translator (mus->alternatives (), report_to_l ());
-  
+      s->init_translator (mus, report_to_l ());
+      
       alternative_iter_p_ = s;
       alternative_iter_p_->construct_children ();
     }
index 30c154cac59be09607676b80e0154d3a6d9a1c8d..7cc9232bf26b921c51120566d2de168252895a70 100644 (file)
@@ -75,6 +75,8 @@ SCM ly_last (SCM list);
 SCM ly_str02scm (char const*c);
 SCM ly_write2scm (SCM s);
 SCM ly_deep_copy (SCM);
+SCM ly_truncate_list (int k, SCM l );
+
 #define CACHE_SYMBOLS
 #ifdef CACHE_SYMBOLS
 
index b22d029582cee9a313e472f712b9ec531b2ffe67..699098fab43319e46215c0df11ca7914f91795e5 100644 (file)
@@ -25,19 +25,18 @@ public:
   VIRTUAL_COPY_CONS (Music);
   
   Pitch do_relative_octave (Pitch p, bool b);
+  static void transpose_list (SCM , Pitch);
+  static void compress_list (SCM, Moment);
+  
   virtual void transpose (Pitch );
-  void truncate (int k);
   virtual void compress (Moment);
-  int length_i () const;
-  Moment cumulative_length () const;
-  Moment maximum_length () const;
 
-  Moment first_start () const;
-  Moment minimum_start () const;
+  static Moment cumulative_length (SCM) ;
+  static Moment maximum_length (SCM) ;
+  static Moment first_start (SCM list) ;
+  static Moment minimum_start (SCM list);
   
 protected:
   virtual Pitch to_relative_octave (Pitch);
-
-
 };
 #endif
index 3b4a97a0468a3189f62147f42909982acd8d9e84..9fa037ab9c344950e7f894d67b9450caf27edf36 100644 (file)
@@ -30,6 +30,7 @@ private:
   static Molecule brew_mensural_molecule (Item *, Real,
                                          bool, Real, Real,
                                          bool, Direction);
+  static Molecule brew_bezier_sandwich (Bezier, Bezier);
   static Molecule brew_horizontal_slope (Real, Real, Real);
   static Molecule create_ledger_line (Interval, Grob *);
   static Molecule create_streepjes (Grob *, int, int, Interval);
index 61c966182300a54c1d8af9fa4ec1eddaff6674c2..4b84bb140ecb4dbc35b019e403716ecd3a2bf544 100644 (file)
@@ -50,7 +50,7 @@ class Repeated_music : public Music
 {
 public:
   Music * body () const;
-  Music_sequence * alternatives () const;
+  SCM alternatives () const;
 
   /// how often do we repeat?
   int repeat_count ( ) const;
index f554b13f9dc47324ae09aa35ef33bfd378ceb472..77c3ce55061ad114bc4d77f056d05e312d0a3ba0 100644 (file)
@@ -519,3 +519,26 @@ parse_symbol_list (const char * list)
   free (orig);
   return create_list;
 }
+
+
+SCM
+ly_truncate_list (int k, SCM l )
+{
+  if (k == 0)
+    {
+      l = SCM_EOL;
+    }
+  else
+    {
+      SCM s = l;
+      k--;
+      for (; gh_pair_p (s) && k--; s = ly_cdr (s))
+       ;
+
+      if (gh_pair_p (s))
+       {
+         gh_set_cdr_x (s, SCM_EOL);
+       }
+    }
+  return l;
+}
index de706373bdeae3ab35c30d8961e814e90842ec3c..b7b6196418fef18b52ec9b9be5770a24350eb6b3 100644 (file)
@@ -46,16 +46,28 @@ Lyric_combine_music::compress (Moment m)
   music_l ()->compress (m);
 }
 
+
+
 Music*
 Lyric_combine_music::music_l () const
 {
-  return unsmob_music (get_mus_property ("music"));
+  SCM l = get_mus_property ("elements");
+  if (!gh_pair_p (l))
+    return 0;
+  return unsmob_music (gh_car (l));
 }
 
+
 Music*
 Lyric_combine_music::lyrics_l () const
 {
-  return unsmob_music (get_mus_property ("lyrics"));
+  SCM l = get_mus_property ("elements");
+  if (!gh_pair_p (l))
+    return 0;
+  l = gh_cdr (l);
+  if (!gh_pair_p (l))
+    return 0;
+  return unsmob_music (gh_car (l));
 }
 
 Lyric_combine_music::Lyric_combine_music ()
index 207913331444ec1b22a25159bd9934bb61924260..5ea3514611523d3a320988feae67cd2ae8f14257 100644 (file)
 #include "pitch.hh"
 
 
-void
-Music_sequence::truncate (int k)
-{
-  SCM l = get_mus_property ("elements");
-  if (k == 0)
-    {
-      l = SCM_EOL;
-    }
-  else
-    {
-      SCM s = l;
-      k--;
-      for (; gh_pair_p (s) && k--; s = ly_cdr (s))
-       ;
-
-      if (gh_pair_p (s))
-       {
-         gh_set_cdr_x (s, SCM_EOL);
-       }
-    }
-  set_mus_property ("elements", l);
-}
-
 SCM
 Music_sequence::music_list ()const
 {
@@ -59,20 +36,23 @@ Music_sequence::Music_sequence (SCM l)
 void
 Music_sequence::transpose (Pitch rq)
 {
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
-    unsmob_music (ly_car (s))->transpose (rq);    
+  transpose_list (music_list (), rq);
 }
 
-
-
+void
+Music_sequence::transpose_list (SCM l,  Pitch rq)
+{
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
+    unsmob_music (ly_car (s))->transpose (rq);    
+}
 
 Moment
-Music_sequence::cumulative_length () const
+Music_sequence::cumulative_length (SCM l) 
 {
   Moment cumulative;
-  
-  Moment last_len ; 
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
+  Moment last_len; 
+
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
     {
       Moment l = unsmob_music (ly_car (s))->length_mom ();
       if (last_len.grace_part_ && l.main_part_)
@@ -97,10 +77,10 @@ Music_sequence::to_relative_octave (Pitch p)
 
 
 Moment
-Music_sequence::maximum_length () const
+Music_sequence::maximum_length (SCM l)
 {
   Moment dur = 0;
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
     {
       Music * m = unsmob_music (ly_car (s));
       Moment l = m->length_mom ();
@@ -109,11 +89,7 @@ Music_sequence::maximum_length () const
 
   return dur;
 }
-int
-Music_sequence::length_i () const
-{
-  return scm_ilength (music_list ());
-}
+
 
 Pitch
 Music_sequence::do_relative_octave (Pitch p, bool ret_first)
@@ -138,7 +114,13 @@ Music_sequence::do_relative_octave (Pitch p, bool ret_first)
 void
 Music_sequence::compress (Moment m)
 {
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
+  compress_list (music_list (), m);
+}
+
+void
+Music_sequence::compress_list (SCM l, Moment m)
+{
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
     unsmob_music (ly_car (s))->compress (m);
 }
 
@@ -151,11 +133,11 @@ Music_sequence::Music_sequence ()
 }
 
 Moment
-Music_sequence::minimum_start () const
+Music_sequence::minimum_start (SCM l)
 {
   Moment m;
   
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
     {
       m = m <? unsmob_music (ly_car (s))->start_mom ();
     }
@@ -163,11 +145,11 @@ Music_sequence::minimum_start () const
 }
 
 Moment
-Music_sequence::first_start () const
+Music_sequence::first_start (SCM l) 
 {
   Moment m;
   
-  for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
+  for (SCM s = l; gh_pair_p (s);  s = ly_cdr (s))
     {
       Music * mus = unsmob_music (ly_car (s));
       Moment l = mus->length_mom ();
index 7bdcee9d0dc555deeb7271574d58516a26e1b852..85278a58f7daaab764e7511f8afde08b613f4ebd 100644 (file)
@@ -275,7 +275,8 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <request> request_with_dir request_that_take_dir verbose_request
 %type <i>      sub_quotes sup_quotes
 %type <music>  simple_element  request_chord command_element Simple_music  Composite_music 
-%type <music>  Alternative_music Repeated_music
+%type <music>  Repeated_music
+%type <scm>     Alternative_music
 %type <i>      tremolo_type
 %type <i>      bare_int  bare_unsigned
 %type <i>      script_dir
@@ -296,7 +297,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <scm>    duration_length fraction
 
 %type <scm>  embedded_scm scalar
-%type <music>  Music Sequential_music Simultaneous_music Music_sequence
+%type <music>  Music Sequential_music Simultaneous_music 
 %type <music>  relative_music re_rhythmed_music part_combined_music
 %type <music>  property_def translator_change
 %type <scm> Music_list
@@ -663,6 +664,13 @@ tempo_request:
        }
        ;
 
+/*
+The representation of a  list is the
+
+  (LIST . LAST-CONS)
+
+ to have  efficient append.
+*/
 Music_list: /* empty */ {
                $$ = gh_cons (SCM_EOL, SCM_EOL);
        }
@@ -688,41 +696,35 @@ Music:
 
 Alternative_music:
        /* empty */ {
-               $$ = 0;
+               $$ = SCM_EOL;
        }
-       | ALTERNATIVE Music_sequence {
-               $$ = $2;
-               $2->set_spot (THIS->here_input ());
+       | ALTERNATIVE '{' Music_list '}' {
+               $$ = $3;
        }
        ;
 
-
-
-
 Repeated_music:
        REPEAT string bare_unsigned Music Alternative_music
        {
-               Music_sequence* alts = dynamic_cast <Music_sequence*> ($5);
-               if (alts && $3 < alts->length_i ())
-                       $5->origin ()->warning (_ ("More alternatives than repeats.  Junking excess alternatives."));
                Music *beg = $4;
                int times = $3;
+               SCM alts = gh_pair_p ($5) ? gh_car ($5) : SCM_EOL;
+               if (times < scm_ilength (alts)) {
+                 unsmob_music (gh_car (alts))
+                   ->origin ()->warning (
+                   _("More alternatives than repeats.  Junking excess alternatives."));
+                 alts = ly_truncate_list (times, alts);
+               }
 
                Repeated_music * r = new Repeated_music (SCM_EOL);
-
                if (beg)
                        {
-                       r-> set_mus_property ("body", beg->self_scm ());
+                       r-> set_mus_property ("element", beg->self_scm ());
                        scm_gc_unprotect_object (beg->self_scm ());
                        }
                r->set_mus_property ("repeat-count", gh_int2scm (times >? 1));
 
-               if (alts)
-                       {
-                       alts->truncate (times);
-                       r-> set_mus_property ("alternatives", alts->self_scm ());
-                       scm_gc_unprotect_object (alts->self_scm ());  
-                       }
+               r-> set_mus_property ("elements",alts);
                SCM func = scm_primitive_eval (ly_symbol2scm ("repeat-name-to-ctor"));
                SCM result = gh_call1 (func, $2);
 
@@ -733,12 +735,6 @@ Repeated_music:
        }
        ;
 
-Music_sequence: '{' Music_list '}'     {
-               $$ = new Music_sequence (SCM_EOL);
-               $$->set_mus_property ("elements", ly_car ($2));
-       }
-       ;
-
 Sequential_music:
        SEQUENTIAL '{' Music_list '}'           {
                $$ = new Sequential_music (SCM_EOL);
@@ -852,8 +848,6 @@ Composite_music:
                $$->set_mus_property ("element", $2->self_scm ());
                scm_gc_unprotect_object ($2->self_scm ());
 #endif
-
-
        }
        | CONTEXT string '=' string Music {
                Context_specced_music *csm =  new Context_specced_music (SCM_EOL);
@@ -971,8 +965,7 @@ relative_music:
 re_rhythmed_music:
        ADDLYRICS Music Music {
          Lyric_combine_music * l = new Lyric_combine_music (SCM_EOL);
-         l->set_mus_property ("music", $2->self_scm ());
-         l->set_mus_property ("lyrics", $3->self_scm ());
+         l->set_mus_property ("elements", gh_list ($2->self_scm (), $3->self_scm (), SCM_UNDEFINED));
          scm_gc_unprotect_object ($3->self_scm ());
          scm_gc_unprotect_object ($2->self_scm ());
          $$ = l;
@@ -984,13 +977,11 @@ part_combined_music:
                Part_combine_music * p = new Part_combine_music (SCM_EOL);
 
                p->set_mus_property ("what", $2);
-               p->set_mus_property ("one", $3->self_scm ());
-               p->set_mus_property ("two", $4->self_scm ());  
+               p->set_mus_property ("elements", gh_list ($3->self_scm (),$4->self_scm (), SCM_UNDEFINED));  
 
                scm_gc_unprotect_object ($3->self_scm ());
                scm_gc_unprotect_object ($4->self_scm ());  
 
-
                $$ = p;
        }
        ;
index 316d4a117b9fa78679d3d58b31c9444add6a4959..11ccc59f85f88ea0cc821a2bc57213b07fa91caa 100644 (file)
@@ -50,13 +50,23 @@ Part_combine_music::compress (Moment m)
 Music*
 Part_combine_music::first_l () const
 {
-  return unsmob_music (get_mus_property ("one"));
+  SCM l = get_mus_property ("elements");
+  if (!gh_pair_p (l))
+    return 0;
+  return unsmob_music (gh_car (l));
 }
 
+
 Music*
 Part_combine_music::second_l () const
 {
-  return unsmob_music (get_mus_property ("two"));
+  SCM l = get_mus_property ("elements");
+  if (!gh_pair_p (l))
+    return 0;
+  l = gh_cdr (l);
+  if (!gh_pair_p (l))
+    return 0;
+  return unsmob_music (gh_car (l));
 }
 
 
index 4cc35e910c55216ec673c75eb9cb9271baa7e073..28166e63ea1adb8a51ce7f60c793561cf7893dae 100644 (file)
  *
  * TODO: Hufnagel support.
  *
- * TODO: Fine-tuning of vaticana-style porrectus shape; in particular,
- * ensure solidity if solid is set to #t and thickness is very small.
- *
- * TODO: For white mensural (i.e. #'style=#'mensural, #'solid=##f)
- * porrectus grobs, it is possible to automatically determine all
- * porrectus specific properties (add-stem, stem-direction) solely
- * from the duration of the contributing notes and time-signature.
- * Introduce a boolean grob property called auto-config, so that, if
- * turned on, lily automatically sets the properties add-stem and
- * stem-direction properly.
- *
  * TODO: The following issues are currently not handled by this
- * engraver: (1) accidentals placement, (2) avoiding line breaking
- * inbetween porrectus, (3) spacing.  (Han-Wen says: for (2), look at
- * beam engraver.)  For example, currently only the accidental for the
- * second note (cp. the above FIXME) is printed.  These issues should
- * be resolved by some sort of ligature context that encloses use of
- * this engraver, using syntax like: \ligature { e \~ c }.
+ * engraver: (1) accidentals placement, (2) spacing.  For example,
+ * currently only the accidental for the second note (cp. the above
+ * FIXME) is printed.  These issues should be resolved by some sort of
+ * ligature context that encloses use of this engraver, using syntax
+ * like: \ligature { e \~ c }.
  *
  * TODO: Do not allow a series of adjacent porrectus requests, as in:
  * e \~ d \~ c.
  *
  * TODO: Junk duplicate (or rather triple) implementation of
- * create_ledger_line in porrectus.cc, custos.cc and note-head.cc.  */
+ * create_ledger_line in porrectus.cc, custos.cc and note-head.cc.
+ */
 
 #include "staff-symbol-referencer.hh"
 #include "porrectus.hh"
@@ -47,7 +36,9 @@
 #include "rhythmic-head.hh"
 #include "item.hh"
 #include "engraver.hh"
+#include "score-engraver.hh"
 #include "pqueue.hh"
+#include "warn.hh"
 
 // TODO: PHead_melodic_tuple is duplicated code from tie-engraver.cc.
 // Maybe put this into public class?
@@ -74,6 +65,7 @@ public:
   
 protected:
   virtual bool try_music (Music *req_l);
+  virtual void process_music ();
   virtual void create_grobs ();
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
@@ -104,6 +96,28 @@ Porrectus_engraver::try_music (Music *m)
     return false;
 }
 
+void
+Porrectus_engraver::process_music ()
+{
+  if (porrectus_req_l_)
+    {
+      // TODO: Move code that forbids breaking into ligature music
+      // wrapper?
+      Score_engraver *engraver = 0;
+      for (Translator *translator = daddy_grav_l ();
+          translator && !engraver;
+          translator = translator->daddy_trans_l_)
+       {
+         engraver = dynamic_cast<Score_engraver*> (translator);
+       }
+      
+      if (!engraver)
+       programming_error ("No score engraver!");
+      else
+       engraver->forbid_breaks ();
+    }
+}
+
 void
 Porrectus_engraver::acknowledge_grob (Grob_info info_l_)
 {
index a227330e0013daf4015955561de7393037b66d4f..e05da73520753026d03052b83d586cc5164c8378 100644 (file)
@@ -157,6 +157,15 @@ Porrectus::brew_molecule (SCM smob)
 {
   Item *me = (Item *)unsmob_grob (smob);
 
+  Item *left_head = get_left_head (me);
+  Item *right_head = get_right_head (me);
+  if (!left_head || !right_head)
+    {
+      warning (_ ("junking lonely porrectus"));
+      me->suicide ();
+      return SCM_EOL;
+    }
+
   SCM scm_style = me->get_grob_property ("style");
   String style;
   if ((gh_symbol_p (scm_style)) && (scm_style != SCM_EOL))
@@ -175,13 +184,45 @@ Porrectus::brew_molecule (SCM smob)
   if (!stem_direction)
     stem_direction = DOWN;
 
-  Item *left_head = get_left_head (me);
-  Item *right_head = get_right_head (me);
-  if (!left_head || !right_head)
+  bool auto_properties = to_boolean (me->get_grob_property ("auto-properties"));
+  if (auto_properties)
+      // determine add_stem and stem_direction automatically from durations
     {
-      warning (_ ("junking lonely porrectus"));
-      me->suicide ();
-      return SCM_EOL;
+      if (String::compare_i (style, "mensural") != 0)
+       warning (String("auto-property should be used for\r\n") +
+                String("mensural style porrectus only; trying anyway"));
+
+      int left_duration =
+         gh_scm2int (left_head->get_grob_property ("duration-log"));
+      int right_duration =
+         gh_scm2int (right_head->get_grob_property ("duration-log"));
+
+      if ((left_duration == -1) && (right_duration == -1))
+        {
+         // brevis -- brevis:
+         // cum proprietate et sine perfectione (c.s.)
+         add_stem = true;
+         stem_direction = DOWN;
+       }
+      else if ((left_duration == -2) && (right_duration == -1))
+        {
+         // longa -- brevis:
+         // sine proprietate et sine perfectione (s.s.)
+         add_stem = false;
+       }
+      else if ((left_duration == 0) && (right_duration == 0))
+        {
+         // semibrevis -- semibrevis:
+         // cum opposita proprietate (c.o.p.)
+         add_stem = true;
+         stem_direction = UP;
+       }
+      else
+        {
+         warning (String("auto-property: failed determining porrectus\r\n") +
+                  String("properties due to improper durations; ") +
+                  String("using user-supplied properties"));
+       }
     }
 
   Real left_position_f = Staff_symbol_referencer::position_f (left_head);
@@ -255,27 +296,32 @@ Porrectus::brew_vaticana_molecule (Item *me,
                                   bool add_stem,
                                   Direction stem_direction)
 {
-  Real space = Staff_symbol_referencer::staff_space (me);
-  Molecule molecule = Molecule ();
-
   if (interval >= 0.0)
     {
       warning (_ ("ascending vaticana style porrectus"));
     }
 
+  Real space = Staff_symbol_referencer::staff_space (me);
+  Molecule molecule = Molecule ();
+  Real right_height = 0.6 * space;
+
+  // Compensate thickness that appears to be smaller in steep section
+  // of bend.
+  Real left_height = right_height + min (0.12 * abs(interval), 0.3) * space;
+
   if (add_stem)
     {
       bool consider_interval =
        stem_direction * interval > 0.0;
 
-      Interval stem_box_x (-thickness/2, +thickness/2);
+      Interval stem_box_x (0, thickness);
       Interval stem_box_y;
 
       if (consider_interval)
-        {
-         Real y_length = interval / 2.0;
-         if (y_length < 1.2 * space)
-           y_length = 1.2 * space;
+       {
+         Real y_length = max (abs(interval)/2.0*space +
+                              (right_height-left_height),
+                              1.2*space);
          stem_box_y = Interval (0, y_length);
        }
       else
@@ -283,8 +329,8 @@ Porrectus::brew_vaticana_molecule (Item *me,
 
       Real y_correction =
        (stem_direction == UP) ?
-       0.3 * space :
-       - 0.3 * space - stem_box_y.length();
+       +0.5*left_height :
+       -0.5*left_height - stem_box_y.length();
 
       Box stem_box (stem_box_x, stem_box_y);
       Molecule stem = Lookup::filledbox (stem_box);
@@ -292,36 +338,66 @@ Porrectus::brew_vaticana_molecule (Item *me,
       molecule.add_molecule(stem);
     }
 
-  Box vertical_edge (Interval (-thickness/2, +thickness/2),
-                    Interval (-4*thickness/2, +4*thickness/2));
-  Molecule left_edge = Lookup::filledbox (vertical_edge);
-  Molecule right_edge = Lookup::filledbox (vertical_edge);
-  right_edge.translate_axis (width, X_AXIS);
-  right_edge.translate_axis (interval / 2.0, Y_AXIS);
-  molecule.add_molecule(left_edge);
-  molecule.add_molecule(right_edge);
-
-  Bezier bezier;
-  bezier.control_[0] = Offset (0.00 * width, 0.0);
-  bezier.control_[1] = Offset (0.33 * width, interval / 2.0);
-  bezier.control_[2] = Offset (0.66 * width, interval / 2.0);
-  bezier.control_[3] = Offset (1.00 * width, interval / 2.0);
-
-  Molecule slice;
-  slice = Lookup::slur (bezier, 0.0, thickness);
-  slice.translate_axis (-3 * thickness/2, Y_AXIS);
-  molecule.add_molecule (slice);
+  // Compensate optical illusion regarding vertical position of left
+  // and right endings due to curved shape.
+  Real ypos_correction = -0.1*space * sign(interval);
+  Real interval_correction = 0.2*space * sign(interval);
+  Real corrected_interval = interval*space + interval_correction;
+
+  // middle curve of vaticana style porrectus
+  Bezier curve;
+  curve.control_[0] = Offset (0.00 * width, 0.0);
+  curve.control_[1] = Offset (0.33 * width, corrected_interval / 2.0);
+  curve.control_[2] = Offset (0.66 * width, corrected_interval / 2.0);
+  curve.control_[3] = Offset (1.00 * width, corrected_interval / 2.0);
+
+  Bezier top_curve = curve, bottom_curve = curve;
+  for (int i = 0; i < 4; i++)
+    {
+      Real thickness = 0.33 * ((3 - i)*left_height + i*right_height);
+      top_curve.control_[i] += Offset (0, +0.5*thickness);
+      bottom_curve.control_[i] += Offset (0, -0.5*thickness);
+    }
+
   if (solid)
-    for (int i = -2; i < +2; i++)
-      {
-       slice = Lookup::slur (bezier, 0.0, thickness);
-       slice.translate_axis (i * thickness/2, Y_AXIS);
-       molecule.add_molecule (slice);
-      }
-  slice = Lookup::slur (bezier, 0.0, thickness);
-  slice.translate_axis (+3 * thickness/2, Y_AXIS);
-  molecule.add_molecule (slice);
+    {
+      Molecule solid_head =
+       brew_bezier_sandwich (top_curve, bottom_curve);
+      molecule.add_molecule (solid_head);
+    }
+  else // outline
+    {
+      Bezier inner_top_curve = top_curve;
+      inner_top_curve.translate (Offset (0.0, -thickness));
+      Molecule top_edge =
+       brew_bezier_sandwich (top_curve, inner_top_curve);
+      molecule.add_molecule(top_edge);
 
+      Bezier inner_bottom_curve = bottom_curve;
+      inner_bottom_curve.translate (Offset (0.0, +thickness));
+      Molecule bottom_edge =
+       brew_bezier_sandwich (bottom_curve, inner_bottom_curve);
+      molecule.add_molecule(bottom_edge);
+
+      // TODO: Use horizontal slope with proper slope value rather
+      // than filled box for left edge, since the filled box stands
+      // out from the porrectus shape if the interval is big and the
+      // line thickness small.  The difficulty here is to compute a
+      // proper slope value, as it should roughly be equal with the
+      // slope of the left end of the bezier curve.
+      Box left_edge_box (Interval (0, thickness),
+                        Interval (-0.5*left_height, +0.5*left_height));
+      Molecule left_edge = Lookup::filledbox (left_edge_box);
+      molecule.add_molecule(left_edge);
+
+      Box right_edge_box (Interval (-thickness, 0),
+                         Interval (-0.5*right_height, +0.5*right_height));
+      Molecule right_edge = Lookup::filledbox (right_edge_box);
+      right_edge.translate_axis (width, X_AXIS);
+      right_edge.translate_axis (corrected_interval / 2.0, Y_AXIS);
+      molecule.add_molecule(right_edge);
+    }
+  molecule.translate_axis (ypos_correction, Y_AXIS);
   return molecule;
 }
 
@@ -335,13 +411,11 @@ Porrectus::brew_mensural_molecule (Item *me,
                                   Direction stem_direction)
 {
   Real space = Staff_symbol_referencer::staff_space (me);
+  Real height = 0.6 * space;
   Molecule molecule = Molecule ();
 
   if (add_stem)
     {
-      // Uugh.  This is currently the same as in
-      // brew_vaticana_molecule, but may eventually be changed.
-
       bool consider_interval =
        stem_direction * interval > 0.0;
 
@@ -350,9 +424,7 @@ Porrectus::brew_mensural_molecule (Item *me,
 
       if (consider_interval)
         {
-         Real y_length = interval / 2.0;
-         if (y_length < 1.2 * space)
-           y_length = 1.2 * space;
+         Real y_length = max (interval/2.0*space, 1.2*space);
          stem_box_y = Interval (0, y_length);
        }
       else
@@ -360,8 +432,8 @@ Porrectus::brew_mensural_molecule (Item *me,
 
       Real y_correction =
        (stem_direction == UP) ?
-       0.3 * space :
-       - 0.3 * space - stem_box_y.length();
+       +0.5*height :
+       -0.5*height - stem_box_y.length();
 
       Box stem_box (stem_box_x, stem_box_y);
       Molecule stem = Lookup::filledbox (stem_box);
@@ -369,7 +441,7 @@ Porrectus::brew_mensural_molecule (Item *me,
       molecule.add_molecule(stem);
     }
 
-  Real slope = (interval / 2.0) / width;
+  Real slope = (interval / 2.0 * space) / width;
 
   // Compensate optical illusion regarding vertical position of left
   // and right endings due to slope.
@@ -380,41 +452,95 @@ Porrectus::brew_mensural_molecule (Item *me,
   if (solid)
     {
       Molecule solid_head =
-       brew_horizontal_slope (width, corrected_slope, 0.6*space);
+       brew_horizontal_slope (width, corrected_slope, height);
       molecule.add_molecule (solid_head);
     }
-  else
+  else // outline
     {
       Molecule left_edge =
-         brew_horizontal_slope (thickness, corrected_slope, 0.6*space);
+         brew_horizontal_slope (thickness, corrected_slope, height);
       molecule.add_molecule(left_edge);
 
       Molecule right_edge =
-         brew_horizontal_slope (thickness, corrected_slope, 0.6*space);
+         brew_horizontal_slope (thickness, corrected_slope, height);
       right_edge.translate_axis (width-thickness, X_AXIS);
       right_edge.translate_axis (corrected_slope * (width-thickness), Y_AXIS);
       molecule.add_molecule(right_edge);
 
       Molecule bottom_edge =
          brew_horizontal_slope (width, corrected_slope, thickness);
-      bottom_edge.translate_axis (-0.3*space, Y_AXIS);
+      bottom_edge.translate_axis (-0.5*height, Y_AXIS);
       molecule.add_molecule (bottom_edge);
 
       Molecule top_edge =
          brew_horizontal_slope (width, corrected_slope, thickness);
-      top_edge.translate_axis (+0.3*space, Y_AXIS);
+      top_edge.translate_axis (+0.5*height, Y_AXIS);
       molecule.add_molecule (top_edge);
     }
   molecule.translate_axis (ypos_correction, Y_AXIS);
   return molecule;
 }
 
+/*
+ * Bezier Sandwich:
+ *
+ *                               .|
+ *                        .       |
+ *              top .             |
+ *              . curve           |
+ *          .                     |
+ *       .                        |
+ *     .                          |
+ *    |                           |
+ *    |                          .|
+ *    |                     .
+ *    |         bottom .
+ *    |            . curve
+ *    |         .
+ *    |      .
+ *    |   .
+ *    | .
+ *    |.
+ *    |
+ *
+ */
+// TODO: Move this to class Lookup?
+Molecule
+Porrectus::brew_bezier_sandwich (Bezier top_curve, Bezier bottom_curve)
+{
+  /*
+    Need the weird order b.o. the way PS want its arguments  
+   */
+  SCM list = SCM_EOL;
+  list = gh_cons (ly_offset2scm (bottom_curve.control_[3]), list);
+  list = gh_cons (ly_offset2scm (bottom_curve.control_[0]), list);
+  list = gh_cons (ly_offset2scm (bottom_curve.control_[1]), list);
+  list = gh_cons (ly_offset2scm (bottom_curve.control_[2]), list);
+  list = gh_cons (ly_offset2scm (top_curve.control_[0]), list);
+  list = gh_cons (ly_offset2scm (top_curve.control_[3]), list);
+  list = gh_cons (ly_offset2scm (top_curve.control_[2]), list);
+  list = gh_cons (ly_offset2scm (top_curve.control_[1]), list);
+
+  SCM horizontal_bend = scm_list_n (ly_symbol2scm ("bezier-sandwich"),
+                                   ly_quote_scm (list),
+                                   gh_double2scm (0.0),
+                                   SCM_UNDEFINED);
+
+  Interval x_extent = top_curve.extent (X_AXIS);
+  x_extent.unite (bottom_curve.extent (X_AXIS));
+  Interval y_extent = top_curve.extent (Y_AXIS);
+  y_extent.unite (bottom_curve.extent (Y_AXIS));
+  Box b (x_extent, y_extent);
+
+  return Molecule (b, horizontal_bend);
+}
+
 /*
  * Horizontal Slope:
  *
  *            /|   ^
  *           / |   |
- *          /  |   | thickness
+ *          /  |   | height
  *         /   |   |
  *        /    |   v
  *       |    /
@@ -426,16 +552,17 @@ Porrectus::brew_mensural_molecule (Item *me,
  *       <----->
  *        width
  */
+// TODO: Move this to class Lookup?
 Molecule
-Porrectus::brew_horizontal_slope(Real width, Real slope, Real thickness)
+Porrectus::brew_horizontal_slope (Real width, Real slope, Real height)
 {
   SCM width_scm = gh_double2scm (width);
   SCM slope_scm = gh_double2scm (slope);
-  SCM thickness_scm = gh_double2scm (thickness);
+  SCM height_scm = gh_double2scm (height);
   SCM horizontal_slope = scm_list_n (ly_symbol2scm ("beam"),
-                                 width_scm, slope_scm,
-                                 thickness_scm, SCM_UNDEFINED);
+                                    width_scm, slope_scm,
+                                    height_scm, SCM_UNDEFINED);
   Box b (Interval (0, width),
-        Interval (-thickness/2, thickness/2 + width*slope));
+        Interval (-height/2, height/2 + width*slope));
   return Molecule (b, horizontal_slope);
 }
index 13471ed2562cf736330836735f8484d7749363af..550424c5d0718caedd92cf740629d6f816b2785e 100644 (file)
 Music *
 Repeated_music::body ()const
 {
-  return unsmob_music (get_mus_property ("body"));
+  return unsmob_music (get_mus_property ("element"));
 }
 
-Music_sequence*
+SCM
 Repeated_music::alternatives ()const
 {
-  return dynamic_cast<Music_sequence*> (unsmob_music (get_mus_property ("alternatives")));
+  return get_mus_property ("elements");
 }
 
 
@@ -40,7 +40,7 @@ Repeated_music::to_relative_octave (Pitch p)
 
   Pitch last = p ; 
   if (alternatives ())
-    for (SCM s = alternatives ()->music_list (); gh_pair_p (s);  s = ly_cdr (s))
+    for (SCM s = alternatives (); gh_pair_p (s);  s = ly_cdr (s))
       unsmob_music (ly_car (s))->to_relative_octave (p);
      
 
@@ -53,8 +53,7 @@ Repeated_music::transpose (Pitch p)
   if (body ())
     body ()->transpose (p);
 
-  if (alternatives ())
-    alternatives ()->transpose (p);  
+  Music_sequence::transpose_list (get_mus_property ("elements"), p);
 }
 
 void
@@ -63,8 +62,7 @@ Repeated_music::compress (Moment p)
   if (body ())
     body ()->compress (p);
 
-  if (alternatives ())
-    alternatives ()->compress (p);  
+  Music_sequence::compress_list (alternatives (), p);
 }
 
 Moment
@@ -74,17 +72,17 @@ Repeated_music::alternatives_length_mom (bool fold) const
     return 0;
   
   if (fold)
-    return alternatives ()->maximum_length ();
+    return Music_sequence::maximum_length (alternatives ());
 
   Moment m =0;
   int done =0;
 
-  SCM p = alternatives ()->music_list ();
+  SCM p = alternatives ();
   while (gh_pair_p (p) && done < repeat_count ())
     {
       m = m + unsmob_music (ly_car (p))->length_mom ();
       done ++;
-      if (repeat_count () - done < alternatives ()->length_i ())
+      if (repeat_count () - done < scm_ilength (alternatives ()))
        p = ly_cdr (p);
     }
   return m;
@@ -101,7 +99,7 @@ Repeated_music::alternatives_volta_length_mom () const
     return 0;
 
   Moment m;
-  SCM p = alternatives ()->music_list ();
+  SCM p = alternatives ();
   while (gh_pair_p (p))
     {
       m = m + unsmob_music (ly_car (p))->length_mom ();
index 8e38c38c8e16056f0d1e60cc60193924dc83ba84..0933d28e5308da8555914fbf5089b72a9c75826e 100644 (file)
@@ -19,12 +19,12 @@ Sequential_music::Sequential_music ()
 Moment
 Sequential_music::length_mom () const
 {
-  return cumulative_length ();
+  return Music_sequence::cumulative_length (get_mus_property ("elements"));
 }
 ADD_MUSIC (Sequential_music);
 
 Moment
 Sequential_music::start_mom () const
 {
-  return first_start ();
+  return Music_sequence::first_start (get_mus_property ("elements"));
 }
index 390849e2263cae3fcfe742b080a037cdb9b6d7bb..ca309ecff81db9dbbe1a607d31e17f3662b30297 100644 (file)
@@ -49,9 +49,8 @@ void
 Simultaneous_music_iterator::construct_children ()
 {
   int j = 0;
-  Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l ());
 
-  SCM i = sim->music_list ();
+  SCM i = music_l ()->get_mus_property ("elements");
   for (; gh_pair_p (i); i = ly_cdr (i), j++)
     {
       Music *mus = unsmob_music (ly_car (i));
index 51bc21397421b381677d9e77c780473ca0f4c668..85a3b8136fd8de2222f4454b13bd9008004289d9 100644 (file)
@@ -7,17 +7,15 @@
 Moment
 Simultaneous_music::length_mom () const
 {
-  return maximum_length ();
+  return Music_sequence::maximum_length (get_mus_property ("elements"));
 }
 
 Moment
 Simultaneous_music::start_mom () const
 {
-  return minimum_start ();
+  return Music_sequence::minimum_start (get_mus_property ("elements"));
 }
 
-
-
 Simultaneous_music::Simultaneous_music (SCM head)
   : Music_sequence (head)
 {
index 46ad0a4be934810a9f8c08e16572af6722bb24d8..315149a47803e6e63a86cf3a0962f32f4a967963 100644 (file)
@@ -259,7 +259,7 @@ Unfolded_repeat_iterator::construct_children ()
   Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l ());
   
   alternative_cons_ = (mus->alternatives ())
-    ? mus->alternatives ()->music_list ()
+    ? mus->alternatives ()
     : SCM_EOL;
 
   for (SCM p = alternative_cons_; gh_pair_p (p); p = ly_cdr (p))
index eb460454291278888d169d9ecd1d18087b6382ef..d9edc07d9cdeb8d88b41f46e9d7363195529b1e2 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.5.15
-Entered-date: 05OKT01
+Version: 1.5.16
+Entered-date: 09OKT01
 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.15.tar.gz 
+       1000k lilypond-1.5.16.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.5.15.tar.gz 
+       1000k lilypond-1.5.16.tar.gz 
 Copying-policy: GPL
 End
index f1add83b521d51b49523219f91f2bc3e48fd3a1f..552f298cacc5de7876d372e4fa7ee4caa836fc26 100644 (file)
@@ -1,5 +1,5 @@
 %define name lilypond
-%define version 1.5.15
+%define version 1.5.16
 %define release 1mdk
 
 Name: %{name}
index 7ee9630603f3b9a5ff7f4ee8dbf30f4a5bbb2fa8..6017b93fb26685214bdb3592038b4b15107b2891 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.5.15
+Version: 1.5.16
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.15.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.16.tar.gz
 Summary: Create and print music notation 
 URL: http://www.lilypond.org/
 BuildRoot: /tmp/lilypond-install
index 1aa450a47576c1a1fd6da8275f21c01408607643..25c3b2d41d2f9aa679741a3564b022d1e1d2a301 100644 (file)
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.5.15
+Version: 1.5.16
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.15.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.16.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
index 28216e66b7494e4c23f2feec4168cd36a0ce4978..e3cbea720182696c8275806489a69a750e6e2912 100644 (file)
@@ -279,11 +279,6 @@ midi_parse_track (unsigned char **track, unsigned char *track_end)
   debug_print ("%s", "\n");
   
   track_size = track_end - *track;
-#if 0
-  /* need this for direct midi.parse_track (s) on midi file */
-  if (strcmp (*track, "MTrk"))
-    *track = memmem (*track, track_size - 1, "MTrk", 4);
-#endif
 
   debug_print ("%s", "\n");
   if (strcmp (*track, "MTrk"))
index 3683ebda1ed9759ff4c56412ad2b23c36070cc82..55cece0c443c3ef73e8115444c18a85932f29525 100644 (file)
        
        (Porrectus . (
                (style . mensural)
-               (auto-properties . #t)
+               (auto-properties . #f)
                (solid . #f)
                (porrectus-width . 2.4)
                (line-thickness . 1.0)
                (add-stem . #t)
                (stem-direction . 1)
                (molecule-callback . ,Porrectus::brew_molecule)
-               (meta . ,(grob-description
-                                          porrectus-interface))
+               (meta . ,(grob-description porrectus-interface))
        ))
 
        (RehearsalMark . (
index 3f808ba8bf0a5e0d61f442120ce4f5e5e2764eec..85a6b931f412d0650d18af3ff804e7a7b8530fe2 100644 (file)
@@ -55,6 +55,7 @@ terms of note head bounding box.")
 '(LEFT-offset . RIGHT-offset).  This offset is added to the
 attachments to prevent ugly slurs.  [fixme: we need more documentation here].
 .")
+(grob-property-description 'auto-properties boolean? "if true, as many properties of this grob as possible will be determined automatically from the musical context.")
 (grob-property-description 'auto-knee-gap number-or-boolean? "the minimal smallest gap between two adjacent beamed chords for which beam will create auto-knees.  Set to false for no auto knees." )
 (grob-property-description 'axes list? "list of axis numbers.
 In the case of alignment grobs, this should contain only one number.")
index bcc035a1c4d6e2f5727f52fe87c5f4a582538a8f..39957ee4417f662e8461dc43fc518febd97c8555 100644 (file)
@@ -25,7 +25,6 @@
 (music-property-description 'duration duration? "Duration of this note/lyric.")
 (music-property-description 'metronome-count number? "How many beats in a minute?")
 (music-property-description 'span-type symbol? "What kind of spanner should be created?")
-(music-property-description 'alternatives music? "Music_sequence of alternatives for repeated music.")
 (music-property-description 'articulation-type symbol? "key for scriptDefinitions alist")
 (music-property-description 'bass boolean? "Set if this note is a bass note in a chord")
 (music-property-description 'body music? "The body of a repeat ")
 (music-property-description 'denominator integer? "denominator in a time signature")
 (music-property-description 'direction dir? "Print this up or down?")
 (music-property-description 'text-type symbol? "Particular type of text script (eg. finger, dynamic).")
-(music-property-description 'element music? "The single child of a Music_wrapper music object.")
+(music-property-description 'element music? "The single child of a Music_wrapper music object, or the body of a repeat.")
+(music-property-description 'elements list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
+(music-property-description 'force-accidental boolean? "If set, a cautionary accidental should always be printed on this note")
 (music-property-description 'grob-property symbol? "The symbol of the grob property to set. ")
 (music-property-description 'grob-value scheme? "The value of the grob property to set")
-(music-property-description 'elements list? "A list of elements for sequential of simultaneous music")
-(music-property-description 'force-accidental boolean? "If set, a cautionary accidental should always be printed on this note")
 (music-property-description 'inversion boolean? "If set, this chord note is inverted.")
 (music-property-description 'label string? "label of a mark.")
 (music-property-description 'last-pitch pitch? "The last pitch after relativization.")
 (music-property-description 'length procedure? "How to compute the duration of this music")
-(music-property-description 'lyrics music? "second argument of a addlyrics")
 (music-property-description 'numerator integer? "numerator of a time signature")
-(music-property-description 'one music? "first argument of partcombine."); part-combine, fixme, naming.
 (music-property-description 'origin ly-input-location? "where was this piece of music defined?")
 (music-property-description 'penalty number? "Penalty for break hint.")
 (music-property-description 'pitch pitch? "the pitch of this note")
@@ -60,6 +57,5 @@
 (music-property-description 'symbols list? "List of Grob names (symbols) to perform an override/revert on.")
 (music-property-description 'text string? "markup expression to be printed");; markup?
 (music-property-description 'tremolo-type integer? "")
-(music-property-description 'two music? "2nd argument of a part-combine"); part-combine, fixme, naming.
 
 (music-property-description 'what string? "What to change for auto-change. FIXME, naming")
diff --git a/scm/translator-description.scm b/scm/translator-description.scm
deleted file mode 100644 (file)
index 3e5f63a..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-
-;;
-;; 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
-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}.
-
-")
-  (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.
-")
-  (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.
-")
-  (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
-")
-  (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.")
-  (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.")
-  (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
-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.)
-
-
-")
-  (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.
-")
-  (grobs-created)
-  (interfaces-acked grob-interface)
-  (properties-read)
-  )
- (Tie_engraver 
-
-  (name . "Tie_engraver")
-  (description . "Generate ties between noteheads of equal pitch.")
-  (grobs-created Tie TieColumn)
-  (interfaces-acked grob-interface)
-  (properties-read sparseTies tieMelismaBusy)
-  )
- (Time_signature_engraver 
-
-  (name . "Time_signature_engraver")
-  (description . "Create a TimeSignature whenever @code{timeSignatureFraction} changes")
-  (grobs-created TimeSignature)
-  (interfaces-acked grob-interface)
-  (properties-read)
-  )
- (Timing_engraver 
-
-  (name . "Timing_engraver")
-  (description . " Responsible for synchronizing timing information from staves. 
-Normally in @code{Score}.  In order to create polyrhythmic music,
-this engraver should be removed from @code{Score} and placed in
-@code{Staff}.")
-  (grobs-created)
-  (interfaces-acked grob-interface)
-  (properties-read timeSignatureFraction barCheckNoSynchronize barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber)
-  )
- (Tuplet_engraver 
-
-  (name . "Tuplet_engraver")
-  (description . "Catch Time_scaled_music and generate appropriate bracket  ")
-  (grobs-created TupletBracket)
-  (interfaces-acked grob-interface)
-  (properties-read tupletNumberFormatFunction tupletSpannerDuration tupletInvisible)
-  )
- (Vertical_align_engraver 
-
-  (name . "Vertical_align_engraver")
-  (description . "Catch Vertical axis groups and stack them.")
-  (grobs-created VerticalAlignment)
-  (interfaces-acked grob-interface)
-  (properties-read)
-  )
- (Voice_devnull_engraver 
-
-  (name . "Voice_devnull_engraver")
-  (description . "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.")
-  (grobs-created)
-  (interfaces-acked grob-interface)
-  (properties-read)
-  )
- (Volta_engraver 
-
-  (name . "Volta_engraver")
-  (description . "Make volta brackets")
-  (grobs-created VoltaBracket)
-  (interfaces-acked grob-interface)
-  (properties-read repeatCommands voltaSpannerDuration)
-  )
- )
-)
-(define (alist<? x y)
-  (string<? (symbol->string (car x))
-           (symbol->string (car y))))
-
-;(set! engraver-description-alist
-;      (sort engraver-description-alist alist<?))
-
-
-(define (humane-listify l)
-  (cond
-   ((null? l) "")
-   ((null? (cdr l)) (symbol->string (car l)))
-   (else (string-append (symbol->string (car l)) " " (human-listify (cdr l)))
-        
-        )))
-   
-(define (print-entry x)
-  (define (mungle x)
-    (string-append (string-downcase (regexp-substitute/global #f "_" x 'pre "-" 'post)) ".cc"))
-  
-  (let ((cop (open-file (mungle (car x)) "a")))
-    (define (w y)
-      (write y cop))
-    (define (d y)
-      (display y cop))
-    
-    (d "ENTER_DESCRIPTION(")
-    (d (car x))
-    (d ",\n/* descr */       ")
-    (w (cdr (assoc 'description (cdr x))))
-    (d ",\n/* creats*/       ")
-    (w (human-listify (cdr (assoc 'grobs-created (cdr x)))))
-    (d ",\n/* acks  */       ")
-    (w (human-listify (cdr (assoc 'interfaces-acked (cdr x)))))
-    (d ",\n/* reads */       ")        
-    (w (human-listify (cdr (assoc 'properties-read (cdr x)))))
-    (d ",\n/* write */       \"\");\n")
-))
-
-;(map print-entry engraver-description-alist)
-
index ed548ddeeea23a26478547b9e3673588b47669e2..97abc27d8d842975ef3b731bae4e07629e887a3d 100644 (file)
@@ -90,6 +90,9 @@ set, \addlyrics will assume that beams, slurs and ties signal
 melismata, and align lyrics accordingly.
 ")
 
+(translator-property-description 'autoReminders symbol? "If set to @samp{accidental} or @samp{cautionary},
+a (reminder) accidental automatically is inserted whenever an accidental is reverted - even after a bar.")
+
 (translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
 ")
 (translator-property-description 'barCheckNoSynchronize boolean? "If set, don't reset measurePosition when finding a bbarcheck. This
@@ -308,6 +311,8 @@ is erased.
 .")
 (translator-property-description 'stemRightBeamCount integer? "idem, for the right side.")
 (translator-property-description 'stz string? "Abbreviated form for a stanza, see also Stanza property.")
+(translator-property-description 'subdivideBeams boolean? "If set, multiple beams will be subdivided at beat
+positions - by only drawing one beam over the beat.")
 (translator-property-description 'textNonEmpty boolean? " If set
 to true then text placed above or below the staff is not assumed to
 have zero width.  @code{\fatText} and @code{\emptyText} are predefined
index ec72a6a07a61c5b1a00f737dd2c8229decc22f42..0c3b42ae05c923a92e6f0b34a1184f1d9df544c7 100644 (file)
@@ -289,6 +289,7 @@ def convert_midi (f):
        str = open (f).read ()
        midi_dump = midi.parse (str)
 
+
        tracks = []
        for t in midi_dump[1]:
                tracks.append (split_track (t))