* 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
===========
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.
--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
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
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
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
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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
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"
# 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
# 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
# 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
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.
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
{ 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
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
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
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*-*-*)
# 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=
# 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
:
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
:
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
:
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*
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>
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
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
:
# 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
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.
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
{ 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
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
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
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*
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?
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; };
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
# 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
# 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
# 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
# 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
# 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
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;;
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
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
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
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. */
; 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
# 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
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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
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
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
#
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
# 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
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"
## 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
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}'`
## 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; }
# 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
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*
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
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
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
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. */
; 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
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
# 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
+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
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();
}
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
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. */
; 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
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. */
; 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
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. */
; 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
# 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
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
# 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
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*
--- /dev/null
+% \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 >
+ }
+}
+
\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!
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
\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:
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
/*
- 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"
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:
{
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
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;
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_)
{
}
- 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)
{
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);
}
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));
}
}
-* 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.
*/
{
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 ();
}
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
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
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);
{
public:
Music * body () const;
- Music_sequence * alternatives () const;
+ SCM alternatives () const;
/// how often do we repeat?
int repeat_count ( ) const;
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;
+}
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 ()
#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
{
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_)
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 ();
return dur;
}
-int
-Music_sequence::length_i () const
-{
- return scm_ilength (music_list ());
-}
+
Pitch
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);
}
}
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 ();
}
}
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 ();
%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
%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
}
;
+/*
+The representation of a list is the
+
+ (LIST . LAST-CONS)
+
+ to have efficient append.
+*/
Music_list: /* empty */ {
$$ = gh_cons (SCM_EOL, SCM_EOL);
}
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);
}
;
-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);
$$->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);
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;
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;
}
;
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));
}
*
* 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"
#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?
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 ();
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_)
{
{
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))
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);
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
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);
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;
}
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;
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
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);
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.
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
* | /
* <----->
* 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);
}
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");
}
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);
if (body ())
body ()->transpose (p);
- if (alternatives ())
- alternatives ()->transpose (p);
+ Music_sequence::transpose_list (get_mus_property ("elements"), p);
}
void
if (body ())
body ()->compress (p);
- if (alternatives ())
- alternatives ()->compress (p);
+ Music_sequence::compress_list (alternatives (), p);
}
Moment
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;
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 ();
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"));
}
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));
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)
{
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))
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
%define name lilypond
-%define version 1.5.15
+%define version 1.5.16
%define release 1mdk
Name: %{name}
%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
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/
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"))
(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 . (
'(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.")
(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")
(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")
+++ /dev/null
-
-;;
-;; 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)
-
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
.")
(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
str = open (f).read ()
midi_dump = midi.parse (str)
+
tracks = []
for t in midi_dump[1]:
tracks.append (split_track (t))