TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 66
+TOPLEVEL_PATCH_LEVEL = 67
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
-19/May/97 LilyPond 0.0.66 1
+19/May/97 LilyPond 0.0.67 1
=item *
-A Unix system with GNU tools. GNU LilyPond is known to run on Linux,
-AIX, Digital Unix and Solaris.
+A Unix system with GNU tools. GNU LilyPond is known to run on these
+unices: Linux, AIX, Digital Unix and Solaris.
-If you have the Cygnus WINDOWS32 port of the GNU utils, it will
-even work in Lose NT/95, but don't promise to support it.
+If you have the Cygnus WINDOWS32 port of the GNU utils, it will even
+work in Windows NT/95, but don't promise to support it.
=item *
GNU C++ v2.7 or better, with libg++ installed. Version 2.7.2
-or better recommended. I almost positive that it will not compile with
-AT&T CC.
+or better recommended.
=item *
=back
-
-
=head1 CONFIGURING and COMPILING
to install GNU LilyPond, simply type:
=item --enable-shared
-Make a shared library (linux, solaris (?) only )
+Make a shared library (gnu/linux, solaris (?) only )
=item --enable-printing
to make GNU LilyPond under, brr, aargh, well, simply type:
bash configure
- make win32
+ make windows32
=head1 PLATFORMS
Unix:
- * linux 2.0.x, g++ 2.7.2[.1]
+ * gnu/linux 2.0.x, g++ 2.7.2[.1]
* aix 4.1, g++ 2.7.2
+ * solaris 2.5, g++ 2.7.2
Other:
* windows-nt 4.0, cygnus gnu-windows32 beta17.1 (~=g++ 2.7.2)
- * linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2) [exec. untested]
+ * gnu/linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2) [exec. untested]
=head1 AUTHORS
If the problem persists, then please mail me.
+Q: Some of your neat scripts fail, what directories do you use:
+
+A:
+
+ ~/something
+ lilypond # the directory as unpacked from the tarball
+ releases # directory for .tar.gz releases
+ patches # directory for patches between different releases
+
+~/something/lilypond/bin is in the PATH, and contains symlinks to the
+compiled executables.
=head2 Language: mudela
Q: I want a DOS/NT/W95 port.
-A.0: Reconsider. Try Linux/GNU. It's fun!
+A.0: Reconsider. Try Linux. It's fun!
A.1: Currently (patchlevel 27), GNU LilyPond (and flowerLib) compiles, links
and runs on windhoos-nt, using the cygnus gnu port (release b17.1).
=head1 DESCRIPTION
-Technically GNU LilyPond is a preprocessor which generates TeX
-(or LaTeX) output which contains information to typeset a musical
-score. Practically it is a typesetter, which only uses TeX as an
-output medium. (this is handy because there exist music fonts for TeX)
+GNU LilyPond is a program to typeset music: it generates TeX (or
+LaTeX) output from file input.
As a bonus, you can also output a MIDI file of what you typed.
-It translates script files (mudela files or F<*.ly>'s) into TeX input.
-Typesetting music is a complex task, whereas the message that printed
-music conveys is usually a simple one. GNU LilyPond is a try at providing
-a simple interface for setting music.
+<a href=example_output.html
+>
+examples of what LilyPond can do: MIDI, PS, .gif and input.
+</a
+>
=head1 DOCUMENTATION
+
=item *
<a href=INSTALL.html
>
</a
>
-=item *
-<a href=example_output.html
->
-examples: MIDI, PS, .gif and input.
-</a
->
-
=item *
<a href=TODO.txt
=head1 DESCRIPTION
A list of resources on music printing/writing and engraving. Please
-note that don't have access to most material (except a library copy of
-Chlapik)
+note that don't have access to most material (except Wanske and a
+library copy of Chlapik)
More on GNU Music: http://dept-info.labri.u-bordeaux.fr/~strandh/Gsharp
[partly by Mark Basinski <basinski@arizona.edu>]
-Herbert Chlapik, Die Praxis des Notengraphikers. Doblinger, 1987.
+Chlapik, Herbert. ``Die Praxis des Notengraphikers''. Doblinger, 1987.
+ISBN 3-9000 035-96-2.
-Helene Wanske, ?, Schott-Verlag Mainz.
+Wanske, Helene. ``Musiknotation --- Von der Syntax des Notenstichs
+zum EDV-gesteuerten-1 Notensatz'', Schott-Verlag, Mainz 1988. ISBN
+3-7957-2886-x. 1) e(lektronischen) D(aten)v(erarbeitung).
Maxwell Weaner and Walter Boelke, Standard Music Notation Practice,
revised edition by Arnold Broido and Daniel Dorff. Music Publisher's
=head2 Words
-Keywords are preceded by a backslash "\". They contain alphabetic
+Keywords are preceded by a backslash: '\'. They contain alphabetic
characters only.
Identifiers in their normal form consist start with a alpha character,
aid the eye in reading, for chords the < and the > are used as
nesting braces.
+=head2 Constants
+
+Please note that -.5 is no Real.
+
+ "I am a string"
+ -1.2e3 % a real
+ 12 % an int
+
+
+
=head2 Identifiers
=head2 Hierarchical structures
[c8 e8(] [)g8 <c'8] e'8>
% NO nesting!
- [c8 c8 c8]2/3 % a triplet
+ [2/3 c8 c8 c8]1/1 % a triplet
=head2 Slurs and Ties
For compilation you need.
+\bo A Unix system with GNU tools. GNU LilyPond is known
- to run on Linux, AIX, Digital Unix and Solaris.
+ to run on these unices: Linux, AIX, Digital Unix and
+ Solaris.
If you have the Cygnus WINDOWS32 port of the GNU
- utils, it will even work in Lose NT/95, but don't
+ utils, it will even work in Windows NT/95, but don't
promise to support it.
+\bo GNU C++ v2.7 or better, with libg++ installed.
- Version 2.7.2 or better recommended. I almost
- positive that it will not compile with AT&T CC.
+ Version 2.7.2 or better recommended.
+\bo GNU make.
-28/May/97 LilyPond 0.0.66 1
+28/May/97 LilyPond 0.0.67 1
other options include:
--enable-shared
- Make a shared library (linux, solaris (?) only )
+ Make a shared library (gnu/linux, solaris (?) only )
--enable-printing
Enable debugging print routines (lilypond -\b-\b-\b-d\bd\bd\bd option)
-28/May/97 LilyPond 0.0.66 2
+28/May/97 LilyPond 0.0.67 2
-28/May/97 LilyPond 0.0.66 3
+28/May/97 LilyPond 0.0.67 3
-28/May/97 LilyPond 0.0.66 4
+28/May/97 LilyPond 0.0.67 4
to make GNU LilyPond under, brr, aargh, well, simply type:
bash configure
- make win32
+ make windows32
P\bP\bP\bPL\bL\bL\bLA\bA\bA\bAT\bT\bT\bTF\bF\bF\bFO\bO\bO\bOR\bR\bR\bRM\bM\bM\bMS\bS\bS\bS
Unix:
- * linux 2.0.x, g++ 2.7.2[.1]
+ * gnu/linux 2.0.x, g++ 2.7.2[.1]
* aix 4.1, g++ 2.7.2
+ * solaris 2.5, g++ 2.7.2
Other:
* windows-nt 4.0, cygnus gnu-windows32 beta17.1 (~=g++ 2.7.2)
- * linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2) [exec. untested]
+ * gnu/linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2) [exec. untested]
A\bA\bA\bAU\bU\bU\bUT\bT\bT\bTH\bH\bH\bHO\bO\bO\bOR\bR\bR\bRS\bS\bS\bS
-
-28/May/97 LilyPond 0.0.66 5
+28/May/97 LilyPond 0.0.67 5
+pl 67
+ - sketch of Music classes
+ - General_script_def as baseclass for Text_def and Script_def
+ - bf: clean lib/out/liblily.a
+ - bf: rests shorter than 1/4
+
+pl 66.jcn3
+ - bf: make uninstall
+ - conflily
+ - f: some pedaling
+ - plet hack removed :-( [ c c c ]2/3 -> [2/3 c c c ]1/1
+
+pl 66.jcn2
+ - bf: bar, Hilfslinie
+ - bf: configure for mingw32
+
+pl 66.jcn1
+ - WIN32 -> WINDOWS32, more win32->windows32
+ - some GNU/Linux changes
+ - cygnus b18 / mingw update
+ - doze compile; bf: p-score.cc compares
+ - reincluded toccata fixes
+ - small stuff: vi tags, typos, bibl
+
+******
+may 27
pl 66
- make_website --jpeg, --png and --gif
- win32 -> windows32
******
may 26
+
pl 65
- bf pathfind /root/file
- massive Score_elem rewrite:
IMPORTANT
- * add mi2mu example output (.midi.ly and .gif) to website
* piano staff
* decent TeX page layout
- * per staff item-widths [JCN]
-
* script priority
* a Hands on tutorial [HKN]
PARSER
* Duration -> Musical_duration, typedef Rational Duration?
-**********************
HKN buglist:
-noten staan vaak te dicht aan de rechterkant van de maatstreep.
-
tekst staat erg ver van notenbalken af
waarom geen ; achter dingen in \paper? (\textwidth 180\mm)
Onduidelijk wanneer wel en geen \ voor een woord. Maak liever
verplichte regels
-****************
-
BUGS
- * RPM permissions -> redhat!
-
* spurious Weird stem size warnings
* staccato dot positions.
* lilypond - -> crash
* standchen triool beam up/down
-
+
+ * (where are the) gcc compile warnings on linux
+
SEVERELY LACKING:
* SPEED!
* abbreviations c4=16
- * doublebar "||", finishbar "|||" (or "||." ?)
-
INPUTLANGUAGE
* should have \require{package.ly} to read req'd packages.
SMALLISH PROJECTS
+ * A range for context errors (eg. mark both { and }. )
+
+ * text in staff (sharpsharp in staff, text below)
+
* replace Score_elem member access by get()/set() methods, to enable
future embedded code.
s/\(([ \]\[|\t-\.>]|\\[<!>a-z]+)*\)/\~ $1/g;
}
+sub convert_0_0_57_to_0_0_58
+{
+ s/\[ *([^\[\]]*)\] *([1-9]*) *\/ *([1-9]*)/[$2\/$3 $1]1\/1/g;
+}
+
###############################################################
sub last_conversion
54 => \&convert_0_0_53_to_0_0_54,
55 => \&convert_0_0_54_to_0_0_55,
56 => \&convert_0_0_55_to_0_0_56,
- 57 => \&convert_0_0_56_to_0_0_57
+ 57 => \&convert_0_0_56_to_0_0_57,
+ 58 => \&convert_0_0_57_to_0_0_58
);
}
my $ret = ( system ($cmd));
- if (!$ignoreret && $ret) {
- print STDERR "\nmake_website: failed on command \`$cmd\' (status $ret)\n";
- exit 2;
+ if ($ret) {
+ if ($ignoreret) {
+ print STDERR "ignoring failed command \`$cmd\' (status $ret)\n";
+ }else {
+ print STDERR "\nmake_website: failed on command \`$cmd\' (status $ret)\n";
+ exit 2;
+ }
}
}
}
local $base="lilypond/";
-local @examples=("wohltemperirt" ,"standchen", "scsii-menuetto", "rhythm", "collisions");
+local @examples=("wohltemperirt" ,"standchen", "toccata-fuga-E", "scsii-menuetto", "rhythm", "collisions");
sub gen_html
{
print "generating HTML list\n";
open HTMLLIST, ">example_output.html";
- print HTMLLIST "<html><body><title>LilyPond examples</title>\n";
+ print HTMLLIST "<html><body><title>LilyPond examples</title>\n
+These example files are taken from the LilyPond distribution.\n
+LilyPond currently only outputs TeX and MIDI. The pictures and\n
+ PostScript files were generated using TeX, Ghostscript and some graphics tools. \n
+The GIF files have been scaled to eliminate aliasing.";
foreach $a (@examples) {
$name=$a;
print HTMLLIST "<h1>example file: $name</h1>\n<XMP>\n";
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
- enable-printing turn on debug printing"
+ enable-printing turn on debug printing"
ac_help="$ac_help
- disable-checking set runtime checks (assert calls)"
+ disable-checking set runtime checks (assert calls)"
ac_help="$ac_help
- disable-debugging set debug info "
+ disable-debugging set debug info "
ac_help="$ac_help
- enable-optimise use maximal speed optimisations"
+ enable-optimise use maximal speed optimisations"
ac_help="$ac_help
- enable-profiling compile with gprof support"
+ enable-profiling compile with gprof support"
ac_help="$ac_help
- tex-prefix=DIR set the tex-directory to find TeX subdirectories. (default: PREFIX)"
+ mingw-prefix=DIR set the mingw32 directory (standalone windows32 exes)"
ac_help="$ac_help
- tex-dir=DIR set the directory to put LilyPond TeX files in. "
+ tex-prefix=DIR set the tex-directory to find TeX subdirectories. (default: PREFIX)"
ac_help="$ac_help
- mf-dir=DIR set the directory to put LilyPond MetaFont files in."
+ tex-dir=DIR set the directory to put LilyPond TeX files in. "
+ac_help="$ac_help
+ mf-dir=DIR set the directory to put LilyPond MetaFont files in."
# Initialize some variables set by options.
# The variables have the same names as the options, with
+
# if given here, these vars are initted at the checking point.
printing_b=no
checking_b=yes
fi
-
# Check whether --enable-profiling or --disable-profiling was given.
if test "${enable_profiling+set}" = set; then
enableval="$enable_profiling"
fi
+# Check whether --enable-mingw32 or --disable-mingw32 was given.
+if test "${enable_mingw32+set}" = set; then
+ enableval="$enable_mingw32"
+ MINGWPREFIX=$enableval
+else
+ MINGWPREFIX=$enableval
+fi
+
+
# Check whether --enable-tex-prefix or --disable-tex-prefix was given.
if test "${enable_tex_prefix+set}" = set; then
enableval="$enable_tex_prefix"
TEXDIR=auto
fi
+
# Check whether --enable-mf-dir or --disable-mf-dir was given.
if test "${enable_mf_dir+set}" = set; then
enableval="$enable_mf_dir"
DEFINES="$DEFINES -DNDEBUG=1"
fi
+# however, C++ support in mingw32 v 0.1.4 is still flaky
+if test $MINGWPREFIX != no; then // huh?
+ ICFLAGS="-I$MINGWPREFIX/include"
+ ILDFLAGS="-$MINGWPREFIX/lib"
+fi
+
if test $optimise_b = yes; then
DEFINES="$DEFINES -O2 -DSTRING_UTILS_INLINED"
fi
AUTOHEADER="This file was automatically generated by configure"
+CPPFLAGS=${CPPFLAGS:-""} # we don't want -g -O junk
CXXFLAGS=${CXXFLAGS:-""} # we don't want -g -O junk
+
for ac_prog in $CCC c++ g++ gcc CC cxx cc++
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:644: checking for $ac_word" >&5
+echo "configure:664: 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:675: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:695: 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.
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 685 "configure"
+#line 705 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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:709: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:729: 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:714: checking whether we are using GNU C++" >&5
+echo "configure:734: 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:723: \"$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:743: \"$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:738: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:758: 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
# 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:768: checking for $ac_word" >&5
+echo "configure:788: 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
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:824: checking for a BSD compatible install" >&5
+echo "configure:844: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 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:878: checking for $ac_word" >&5
+echo "configure:898: 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
+
+
for ac_prog in bison
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:928: checking for $ac_word" >&5
+echo "configure:950: 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:962: checking for $ac_word" >&5
+echo "configure:984: 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:996: checking for $ac_word" >&5
+echo "configure:1018: 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:1030: checking for $ac_word" >&5
+echo "configure:1052: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_PODMAN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6
-echo "configure:1066: checking TeX/MF root dir directory" >&5
+echo "configure:1088: checking TeX/MF root dir directory" >&5
find_root_prefix="$prefix"
echo $ac_n "checking TeX input directory""... $ac_c" 1>&6
-echo "configure:1104: checking TeX input directory" >&5
+echo "configure:1126: checking TeX input directory" >&5
find_dirdir=`(cd $find_texprefix;
$FIND ./ -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
echo $ac_n "checking MF input directory""... $ac_c" 1>&6
-echo "configure:1126: checking MF input directory" >&5
+echo "configure:1148: checking MF input directory" >&5
find_dirdir=`(cd $find_texprefix;
$FIND ./ -type d -a -name source -print |sort|head -1|sed 's#^\./##')`
fi
echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1182: checking how to run the C++ preprocessor" >&5
+echo "configure:1204: 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 1195 "configure"
+#line 1217 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1220: checking for FlexLexer.h" >&5
+echo "configure:1242: 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 1225 "configure"
+#line 1247 "configure"
#include "confdefs.h"
#include <FlexLexer.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
rm -rf conftest*
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@FIND@%$FIND%g
+s%@ICFLAGS@%$ICFLAGS%g
+s%@ILDFLAGS@%$ILDFLAGS%g
s%@DEFINES@%$DEFINES%g
s%@COMPILEINFO@%$COMPILEINFO%g
s%@AUTOHEADER@%$AUTOHEADER%g
eval "DIR_DATADIR=$datadir"
DIR_DATADIR="$DIR_DATADIR/lilypond"
echo $ac_n "checking ""... $ac_c" 1>&6
-echo "configure:1630: checking " >&5
+echo "configure:1654: checking " >&5
cat << EOF > lib/out/config.hh
dnl should cache result.
dnl should look in $prefix first.
-
AC_DEFUN(AC_TEX_PREFIX, [
AC_INIT(flower/choleski.cc)
+
# if given here, these vars are initted at the checking point.
printing_b=no
checking_b=yes
AC_LANG_CPLUSPLUS
AC_ARG_ENABLE(printing,
- [ enable-printing turn on debug printing],
+ [ enable-printing turn on debug printing],
[printing_b=$enableval])
AC_ARG_ENABLE(checking,
- [ disable-checking set runtime checks (assert calls)],
+ [ disable-checking set runtime checks (assert calls)],
[checking_b=$enableval] )
AC_ARG_ENABLE(debugging,
- [ disable-debugging set debug info ],
+ [ disable-debugging set debug info ],
[debug_b=$enableval])
AC_ARG_ENABLE(optimise,
- [ enable-optimise use maximal speed optimisations],
+ [ enable-optimise use maximal speed optimisations],
[optimise_b=$enableval])
-
AC_ARG_ENABLE(profiling,
- [ enable-profiling compile with gprof support],
+ [ enable-profiling compile with gprof support],
[profile_b=$enableval])
+AC_ARG_ENABLE(mingw32,
+ [ mingw-prefix=DIR set the mingw32 directory (standalone windows32 exes)],
+ [MINGWPREFIX=$enableval],
+ [MINGWPREFIX=$enableval])
+
AC_ARG_ENABLE(tex-prefix,
- [ tex-prefix=DIR set the tex-directory to find TeX subdirectories. (default: PREFIX)],
+ [ tex-prefix=DIR set the tex-directory to find TeX subdirectories. (default: PREFIX)],
[TEXPREFIX=$enableval],
[TEXPREFIX=auto] )
AC_ARG_ENABLE(tex-dir,
- [ tex-dir=DIR set the directory to put LilyPond TeX files in. ],
+ [ tex-dir=DIR set the directory to put LilyPond TeX files in. ],
[TEXDIR=$enableval],
[TEXDIR=auto] )
+
AC_ARG_ENABLE(mf-dir,
- [ mf-dir=DIR set the directory to put LilyPond MetaFont files in.],
+ [ mf-dir=DIR set the directory to put LilyPond MetaFont files in.],
[MFDIR=$enableval],
[MFDIR=auto] )
DEFINES="$DEFINES -DNDEBUG=1"
fi
+# however, C++ support in mingw32 v 0.1.4 is still flaky
+if test $MINGWPREFIX != no; then // huh?
+ ICFLAGS="-I$MINGWPREFIX/include"
+ ILDFLAGS="-$MINGWPREFIX/lib"
+fi
+
if test $optimise_b = yes; then
DEFINES="$DEFINES -O2 -DSTRING_UTILS_INLINED"
fi
dnl COMPILEINFO="$HOST $host $TARGET $target"
AUTOHEADER="This file was automatically generated by configure"
+CPPFLAGS=${CPPFLAGS:-""} # we don't want -g -O junk
CXXFLAGS=${CXXFLAGS:-""} # we don't want -g -O junk
+
AC_PROG_CXX
AC_PROG_RANLIB
AC_PROG_INSTALL
fi
AC_SUBST(CXX)
+AC_SUBST(ICFLAGS)
+AC_SUBST(ILDFLAGS)
AC_SUBST(DEFINES)
AC_SUBST(COMPILEINFO)
AC_SUBST(AUTOHEADER)
virtual bool trans_ok(int i, int j) const;
virtual void trans_next(int &i, int &j) const;
virtual Matrix_storage * clone();
- NAME_MEMBERS(Full_storage);
+ NAME_MEMBERS();
virtual bool try_right_multiply(Matrix_storage * dest, Matrix_storage const * );
};
/**
RTTI.
*/
- NAME_MEMBERS(Matrix_storage);
+ NAME_MEMBERS();
};
The static_name() can *not* be inlined (this might have the effect that
s->name() != S::static_name(). Overlapping strings need not be merged in C++
*/
-#define NAME_MEMBERS(c) \
+#define NAME_MEMBERS() \
static char const *static_name();\
-virtual char const *name() const{ return c::static_name(); } \
+virtual char const *name() const{ return static_name(); } \
int a_stupid_nonexistent_function_to_allow_the_semicolon_come_out()
#define IMPLEMENT_STATIC_NAME(c)\
-\version "0.0.57";
+\version "0.0.58";
\include "register.ini"
\include "dynamic.ini"
% It has a lot of hard-wired stringconstants
%
+
table_sixteen=
\symboltables {
"upbow" "\upbow" -1\pt 6\pt 0\pt 5\pt
"downbow" "\downbow" 0\pt 5\pt 0\pt 7.5\pt
"back" "\backorfront" 0\pt 6\pt 0\pt 3\pt
- "-front" "\backorfront" -3\pt 5\pt 0\pt 3\pt
-% oeps, segfault
-% "heel" "\heel" 0\pt 6\pt -.5\pt 2\pt
+ "-front" "\backorfront" 0\pt 6\pt 0\pt 3\pt
"heel" "\heel" 0\pt 6\pt -1\pt 5\pt
"toe" "\toe" 0\pt 6\pt -1\pt 5\pt
"bheel" "\bheel" 0\pt 6\pt -1\pt 5\pt
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
cad = \melodic {
\duration 16; [d cis d e]
f4~ [f e d c]
'b4
- \octave c'; [d'8 c'8 a8]2/3
+ \octave c'; [2/3 d'8 c'8 a8]1/1
g2
\bar \empty ;
[g c e g] [c' e g c']\octave c'';
Tested Features:test the Collision resolution
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
% (maybe even sooner :-)
%
-\version "0.0.57";
+\version "0.0.58";
alto = \melodic{
-\version "0.0.57";
+\version "0.0.58";
\include "this-is-hopefully-a-nonexisting-file"
Tested Features:
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
Tested Features: local key, key, forced accidentals
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
blah = \melodic{
Tested Features: example file with comments
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
% the % is a comment.
% \lbheel \lbheel \lfheel \lftoe
% \rbheel \rbtoe \rfheel \rftoe
-\version "0.0.57";
+\version "0.0.58";
\score{
\staff{ melodicregs
unsynced bars
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
%
% Ive' got rhythm!
%
% add any impressive examples here, please
-\version "0.0.57";
+\version "0.0.58";
ritme = \staff {
melodicregs
% divide measure in 5 equal parts. Usually it 2+3 or 3+2
\grouping 16*5 ;
[c8 c16 c8 ] | % watch THIS!
- [c16 c16 c16 c16]5/4 |
+ [5/4 c16 c16 c16 c16]1/1 |
\meter 2/8;
c4 |
c4 c4 c4 c4
% scales with accents.
%
-\version "0.0.57";
+\version "0.0.58";
blah = \staff{ melodicregs
\melodic {
\meter 6/8;
c d
\duration 8 ;
%ugr
- |[ a \< a a a a a a \! a a \ff \> ]6/9
+ |[6/9 a \< a a a a a a \! a a \ff \> ]1/1
\octave c' ;
- |[ a a a a a a a a \! a ]6/9
+ |[6/9 a a a a a a a a \! a ]1/1
\octave c'' ;
['c->-.-\fermata \< 'g->-.-\fermata d->-.-\fermata a->-.-\fermata
e'->-.-\fermata b'-. f''-. c'''->-.-\fermata \! g'''->-.-\fermata \> ]6/9
- [g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! 'c->-.-\fermata ]6/9
+ [6/9 g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! 'c->-.-\fermata ]1/1
\octave c;
['c->-.-\fermata \< 'g->-.-\fermata d->-.-\fermata a->-.-\fermata
e'->-.-\fermata b'-. f''-. c'''->-.-\fermata \! g'''->-.-\fermata \> ]6/9
- [g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! 'c->-.-\fermata ]6/9
+ [6/9 g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! 'c->-.-\fermata ]1/1
\octave c' ;
\octave c' ;
- [ c g d' ]2/3
- [ d' g c ]2/3
- [ f c' g' ]2/3
- [ g' c' f ]2/3
+ [2/3 c g d' ]1/1
+ [2/3 d' g c ]1/1
+ [2/3 f c' g' ]1/1
+ [2/3 g' c' f ]1/1
\octave c ;
- [ c g d' ]2/3
- [ d' g c ]2/3
- [ f c' g' ]2/3
- [ g' c' f ]2/3
- [ g' c' f ]2/3
+ [2/3 c g d' ]1/1
+ [2/3 d' g c ]1/1
+ [2/3 f c' g' ]1/1
+ [2/3 g' c' f ]1/1
+ [2/3 g' c' f ]1/1
\meter 4/4;
c1
Tested Features: scripts, text.
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
blah = \staff{ melodicregs
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
%% Stuff from MPP version
% \lefttitle{Menuetto}
% \tempo{Moderato}
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
\score{\staff{
melodicregs
EndMudelaHeader
%}
-\version "0.0.57";
-\version "0.0.57";
+\version "0.0.58";
commands = \melodic{
\skip 2.*4;
%%4
r < [ 'a cis > e < 'a cis > e < 'a cis ] > |
%%5
- [ a~ bes a ]2/3 d'4. a |
+ [2/3 a~ bes a ]1/1 d'4. a |
%%6
- [ g~ a g ]2/3 d'4 g r |
+ [2/3 g~ a g ]1/1 d'4 g r |
%%7
- a4.^> g [ g~ f e ]2/3 |
+ a4.^> g [2/3 g~ f e ]1/1 |
%%8
f2 r4 |
%%9
- < { a'4.~ g' [ g'( f' )e' ]2/3 }
+ < { a'4.~ g' [2/3 g'( f' )e' ]1/1 }
{ cis'4. e'_"dolce" \plet 2/3; e' \plet 1/1; } > |
%%10
< f'2. d'2. > |
%%11
- [ a ~ bes a ]2/3 f'4. a |
+ [2/3 a ~ bes a ]1/1 f'4. a |
%%12
- [ g~ a g ]2/3 e'4. d' |
+ [2/3 g~ a g ]1/1 e'4. d' |
%%13
- c'4. bes [ bes~ a g ]2/3 |
+ c'4. bes [2/3 bes~ a g ]1/1 |
%%14
a2 r
- < { d'~ c'4. g [ bes a g ]2/3 }
+ < { d'~ c'4. g [2/3 bes a g ]1/1 }
{ f \p ~ e4._"dolce" bes
\plet 2/3; g
\plet 1/1;
[ d'8. a16 ] f4. d |
%%19
%#% c'\grace\stemup
- [ bes ~ a bes ]2/3 d'4. bes |
+ [2/3 bes ~ a bes ]1/1 d'4. bes |
%%20
a2. |
%%21
%#% a\grace
- [ g~ fis g ]2/3 bes4.^> g |
+ [2/3 g~ fis g ]1/1 bes4.^> g |
%%22
f!2. |
%%23
%%24
[ d'8. a16 ] fis4. d |
%%25
- [ b \mf~ ais b ]2/3 d'4. b |
+ [2/3 b \mf~ ais b ]1/1 d'4. b |
%%26
< a2. fis2. > |
%%27
- [ e' \f~ dis' e' ]2/3 g'4. cis' |
+ [2/3 e' \f~ dis' e' ]1/1 g'4. cis' |
%%28
< d'2. fis2. > |
%#%\volta1
%%29
- < { bes2( [ d'8.~ )g16 ] }
- { g2 \mf [ bes8. bes16 ] } > |
+ < { bes2( [ d'8.~ )bes16 ] }
+ { g2 \mf [ bes8. g16 ] } > |
%%30
< { a4. [ a-. a-. a-. ] }
{ fis4. [ fis-.( fis-. )fis-. ] } > |
%%32
< a2 fis2 \pp > < a4 fis4 > |
%%33
- < { b2( [ d'8.~ g16 ] }
- { g2 [ b8. b16 ] } > |
+ < { b2( [ d'8.~ )b16 ] }
+ { g2 [ b8. g16 ] } > |
%%34
< { a4. [ a-. a-. a-. ] }
{ fis4. [ fis-.( fis-. )fis-. ] } > |
%%40
cis'2 r4 |
%%41
- < fis'4. \> cis'4. \f > e' [ e'~ d' \! cis' ]2/3 |
+ < fis'4. \> cis'4. \f > e' [2/3 e'~ d' \! cis' ]1/1 |
%%42
[ b8. cis'16 ] d'4^> b r |
%%43
%%44
[ b8. \> cis'16 ] d'4^> b \! r |
%%45
- [ b \p ~ ais b ]2/3 d'4. b |
+ [2/3 b \p ~ ais b ]1/1 d'4. b |
%%46
<a!2. fis2. > |
%%47
- [ e' \f~ dis' e' ]2/3 g'4.^> cis' |
+ [2/3 e' \f~ dis' e' ]1/1 g'4.^> cis' |
%%48
\textstyle "italic";
<
_ _ _
_ _ _
% 5
- [ Lei- se8 ]2/3 fleh-4. en8
- [ mei- ne8 ]2/3 Lie- der8 _8
- Durch4. die8 [ Nacht zu8 ]2/3
+ [2/3 Lei- se8 ]1/1 fleh-4. en8
+ [2/3 mei- ne8 ]1/1 Lie- der8 _8
+ Durch4. die8 [2/3 Nacht zu8 ]1/1
dir;2 _
_ _ _
_ _ _
% 11
- [ In den8 ]2/3 stil-4. len8
- [ Hain her-8 ]2/3 nie-4. der,8
- Lieb4. chen,8 [ komm zu8 ]2/3
+ [2/3 In den8 ]1/1 stil-4. len8
+ [2/3 Hain her-8 ]1/1 nie-4. der,8
+ Lieb4. chen,8 [2/3 komm zu8 ]1/1
mir!2 _
_ _ _
_ _ _
% 17
Fl\"us-8. ternd16 schlan-4. ke8
Wip-8. fel16 rau-4. schen8
- [ In des8 ]2/3 Mon-4. des8
+ [2/3 In des8 ]1/1 Mon-4. des8
Licht;2.
_ _ _
_ _ _
% 23
Des8. Ver-16 r\"a-4. ters8
feind-8. lich16 Lau-4. schen8
- [ F\"urch- te,8 ]2/3 Hol-4. de,8
+ [2/3 F\"urch- te,8 ]1/1 Hol-4. de,8
nicht.2.
_ _ _
_ _ _
mich!2 _
Be-8. bend16 harr' ich8 _8
dir8. ent-16 ge- gen!8 _8
- [ Komm, be-8 ]2/3 gl\"u4. cke8
+ [2/3 Komm, be-8 ]1/1 gl\"u4. cke8
mich!2.
_ _ _ _ _ _
% 47
_ _ _
_ _ _
% 5
- [ H\"orst die8 ]2/3 Nach-4. ti-8
- [ gal- len8 ]2/3 schla- gen?8 _8
- Ach!4. sie8 [ fleh- en8 ]2/3
+ [2/3 H\"orst die8 ]1/1 Nach-4. ti-8
+ [2/3 gal- len8 ]1/1 schla- gen?8 _8
+ Ach!4. sie8 [2/3 fleh- en8 ]1/1
dich,2 _
_ _ _
_ _ _
% 11
- [ Mit der8 ]2/3 T\"o-4. ne8
- [ s\"u\ss- en8 ]2/3 Kla-4. gen8
- Fleh-4. en8 [ sie f\"ur8 ]2/3
+ [2/3 Mit der8 ]1/1 T\"o-4. ne8
+ [2/3 s\"u\ss- en8 ]1/1 Kla-4. gen8
+ Fleh-4. en8 [2/3 sie f\"ur8 ]1/1
mich.2 _
_ _ _
_ _ _
% 17
Sie-8. ver-16 stehn4. des8
Bus-8. ens16 Seh-4. nen,8
- [ Ken- nen8 ]2/3 Lieb-4. es-8
+ [2/3 Ken- nen8 ]1/1 Lieb-4. es-8
schmerz,2.
_ _ _
_ _ _
% 23
R\"uh-8. ren16 mit4. den8
Sil-8. ber-16 t\"o-4. nen8
- [ Jed- es8 ]2/3 wei-4. che8
+ [2/3 Jed- es8 ]1/1 wei-4. che8
Herz.2.
_ _ _
_ _ _
%}
-\version "0.0.57";
+\version "0.0.58";
toccata_commands = \melodic{
\meter 4/4;
% 13 -- how to type -- where to split -- this more neatly ?
\octave c';
<\multivoice
- { \stem 1; \hshift 1; r4 dis'4 e'4.-. e'8~ e'4 [d'8 fis'8] gis'4 [gis'8 fis'16 e'16] | fis'4~ [fis'8 e'16 dis'16] e'4 r8 e'8 }
- { \stem 1; r4 bis4 cis'4-. cis'4 | ais'4~ [ais'16 gis'16 ais'16 b'16] dis'4 cis'4~ [cis'8 dis'16 ais16] bis4 cis'4 r8 b8 }
- { \stem -1; r4 < gis4 fis4 dis4 > gis4-. gis4 | ais4. cis'8 gis2 | fis4 gis4 gis4 r8 e8 }
+ { \stem 1; r4 dis'4 e'4.-. e'8( | \hshift 1; )e'4 [d'8 fis'8] \hshift 0; gis'4 [gis'8 fis'16 e'16] | fis'4~ [fis'8 e'16 dis'16] e'4 r8 e'8 }
+ { \stem 1; \hshift 1; r4 bis4 cis'4-. cis'4 | \hshift 0; a'4~ [a'16 gis'16 a'16 b'16] \hshift 1; dis'4 cis'4~ [cis'8 dis'16 a16] bis4 cis'4 r8 b8 }
+ { \stem -1; r4 < gis4 fis4 dis4 > gis4-. gis4 | a4. cis'8 gis2 | fis4 gis4 gis4 r8 e8 }
> |
% 16
}
\clef bass;
% 13
<\multivoice
- { \stem 1; bis2 cis'4-. cis'4~ [cis'8 ais'8 d'8 cis'8] [bis8 gis8] cis'4 | dis'2 cis'4 r8 cis'8 }
- { \stem 1; \hshift 1; r4 gis4. gis8~ gis4 | \stem -1; \hshift 0; ais4. fis8 gis4. ais8~ ais4 gis4-. gis4 r8 gis8 }
+ { \stem 1; bis2 cis'4-. cis'4~ [cis'8 a8 d'8 cis'8] [bis8 gis8] cis'4 | dis'2 cis'4 r8 cis'8 }
+ { \stem 1; \hshift 1; r4 gis4. gis8~ gis4 | \stem -1; \hshift 0; a4. fis8 gis4. a8~ a4 gis4-. gis4 r8 gis8 }
{ \stem -1; r4 < dis4 fis4 > < cis4 e4 > }
> |
% 16
% 15
\octave c';
<\multivoice
- { \stem 1; b8 fis8 b4 }
+ { \stem 1; [b8 fis8] b4 }
{ \stem -1; fis2 }
>
- <% \multivoice % heu?
- { e'4 }
- { cis'4 }
- { ais4 }
- { fis4 }
+ %{ this chord is usually set like this:
+ |
+ x||
+ x||
+ x|
+ |x
+ |
+ %}
+ < \multivoice
+ { \stem 1; \hshift 0; e'4 }
+ { \stem 1; \hshift 1; cis'4 }
+ { \stem 1; \hshift 2; ais4 }
+ { \stem -1; fis4 }
> |
% 16
<\multivoice
{ \stem 1; dis'2 dis'4 | cis'2 cis'4 | b4~ [b8 cis'8 dis'8 e'8] }
- { \stem 1; \hshift 1; b8 fis8 b2~ [b8 a16 g16] a2 | a4 gis2 }
+ { \stem 1; \hshift 1; [b8 fis8] b2~ [b8 a16 g16] a2 | a4 gis2 }
{ \stem -1; fis2.~ fis2.~ fis4 e2 }
> |
% 19
Tested Features: lyrics
EndMudelaHeader
%}
-\version "0.0.57";
+\version "0.0.58";
melody = \melodic{
\clef\violin;
%}
-\version "0.0.57";
+\version "0.0.58";
% should add \need{dutch.ini} for
% correct parsing of note names
default: $(MAINTARGET)
#
+localclean:
+ rm -f $(MAINTARGET)
+
# generic targets and rules:
#
include ./$(depth)/make/Targets.make
include ./$(depth)/make/Rules.make
-#
-
-# list of depend files:
-#
-
-#
# auto dependencies:
#
#ifndef INPUT_HH
#define INPUT_HH
+#include "proto.hh"
+
/**
Base class for anything that records its poisition in the parse file.
*/
//
// windhoos-suck-suck-suck-thank-you-cygnus.hh
//
-#ifdef _WIN32
+// mmap() should work now (cygnus beta 18), but let's keep it here
+// for people using old cygnus releases
+#if 0 //def _WINDOWS32
#ifndef WINDHOOS_SUCK_SUCK_SUCK_HH
#define WINDHOOS_SUCK_SUCK_SUCK_HH
int munmap(caddr_t addr, size_t len);
#endif // WINDHOOS_SUCK_SUCK_SUCK_HH
-#endif // _WIN32 //
+#endif // _WINDOWS32 //
//
// windhoos.cc
//
-#ifdef _WIN32
+// mmap() should work now (cygnus beta 18), but let's keep it here
+// for people using old cygnus releases
+#if 0 // def _WINDOWS32
#include <sys/types.h>
#include <sys/mman.h>
#endif // !HAVE_GET_OSFHANDLE //
-#endif // _WIN32 //
+#endif // _WINDOWS32 //
MAJOR_VERSION = 0
MINOR_VERSION = 0
-PATCH_LEVEL = 66
-
+PATCH_LEVEL = 67
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
-MY_PATCH_LEVEL =
+MY_PATCH_LEVEL =
--- /dev/null
+/*
+ atom.cc -- implement Atom
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "symbol.hh"
+#include "tex.hh"
+#include "interval.hh"
+#include "dimen.hh"
+#include "string.hh"
+#include "varray.hh"
+#include "debug.hh"
+
+
+
+void
+Atom::print() const
+{
+ mtor << "texstring: " <<sym.tex<<"\n";
+}
+
+Box
+Atom::extent() const
+{
+ Box b( sym.dim);
+ b.translate(off);
+ return b;
+}
+
+Atom::Atom(Symbol s)
+{
+ sym=s;
+}
+
+
+String
+Atom::TeX_string() const
+{
+ /* infinity checks. */
+ assert( abs(off.x) < 100 CM);
+ assert( abs(off.y) < 100 CM);
+
+ // whugh.. Hard coded...
+ String s("\\placebox{%}{%}{%}");
+ Array<String> a;
+ a.push(print_dimen(off.y));
+ a.push(print_dimen(off.x));
+ a.push(sym.tex);
+ return substitute_args(s, a);
+}
*/
#include "varray.hh"
-
#include "proto.hh"
#include "dimen.hh"
#include "beam.hh"
/* *************** */
-void
-Beam::do_break_at(PCol*l, PCol*r)
-{
- assert (l->line_l_ == r->line_l_);
-}
#include "bow.hh"
#include "paper-def.hh"
+#include "molecule.hh"
#include "lookup.hh"
Bow::Bow()
#include "debug.hh"
#include "musical-request.hh"
-
+void
+Command_script_req::do_print() const
+{}
+IMPLEMENT_STATIC_NAME(Command_script_req);
IMPLEMENT_STATIC_NAME(Cadenza_req);
void
Key_change_req::Key_change_req(Key_change_req const&c)
{
for (int i=0; i < c.melodic_p_arr_.size(); i++)
- melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->melodic() );
+ melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->musical()->melodic() );
minor_b_ = c.minor_b_;
multi_octave_b_ = c.multi_octave_b_;
}
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
+#include "molecule.hh"
#include "dimen.hh"
#include "crescendo.hh"
#include "lookup.hh"
--- /dev/null
+/*
+ general-script-def.cc -- implement General_script_def
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "general-script-def.hh"
+#include "debug.hh"
+#include "symbol.hh"
+int
+General_script_def::staff_dir_i()const
+{
+ return -1;
+}
+int
+General_script_def::rel_stem_dir_i()const
+{
+ return 0;
+}
+int
+General_script_def::priority_i()const
+{
+ return 1000;
+}
+
+bool
+General_script_def::inside_b()const
+{
+ return false;
+}
+
+bool
+General_script_def::equal_b(General_script_def const&g)const
+{
+ if (name() != g.name())
+ return false;
+
+ return do_equal_b(g);
+}
+
+bool
+General_script_def::do_equal_b(General_script_def const&)const
+{
+ return true;
+}
+
+
+void
+General_script_def::print() const
+{
+ mtor << name() << "{";
+ do_print();
+ mtor << "}";
+}
+
+void
+General_script_def::do_print() const
+{
+}
+
+Atom
+General_script_def::get_atom(Paper_def*, int)const
+{
+ Symbol s;
+ return Atom(s);
+}
+IMPLEMENT_STATIC_NAME(General_script_def);
bool
Note_head_register::try_request(Request *req_l)
{
- if (req_l->note() || req_l->rest())
- note_req_l_=req_l->rhythmic();
+ if (req_l->musical() && (req_l->musical()->note() || req_l->musical()->rest()))
+ note_req_l_=req_l->musical()->rhythmic();
else
return false;
--- /dev/null
+/*
+ atom.hh -- declare
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef ATOM_HH
+#define ATOM_HH
+
+#include "symbol.hh"
+#error
+
+
+#endif // ATOM_HH
virtual void pre_move_processing();
virtual void post_move_processing();
Bar_register();
- NAME_MEMBERS(Bar_register);
+ NAME_MEMBERS();
};
#endif // BARREG_HH
public:
String type;
- NAME_MEMBERS(Bar);
+ NAME_MEMBERS();
Bar(String type);
private:
void do_print() const;
/* *************** */
- NAME_MEMBERS(Beam);
+ NAME_MEMBERS();
Beam();
void add(Stem*);
protected:
virtual Interval do_width()const;
virtual Offset center() const;
- virtual void do_break_at(PCol *, PCol *);
virtual void set_default_dir();
virtual void do_pre_processing();
virtual void do_post_processing();
Molecule*brew_molecule_p()const;
public:
Bow();
- NAME_MEMBERS(Bow);
+ NAME_MEMBERS();
Offset center() const;
};
#endif // BOW_HH
bool change;
/* *************** */
-NAME_MEMBERS(Clef_item);
+NAME_MEMBERS();
Clef_item();
void read(Clef_register const&);
void read(String);
/* ************** */
Clef_register();
- NAME_MEMBERS(Clef_register);
+ NAME_MEMBERS();
};
#endif // CLEF_HH
virtual void pre_move_processing();
public:
Collision_register();
- NAME_MEMBERS(Collision_register);
+ NAME_MEMBERS();
};
#endif // COLLISION_REG_HH
virtual void do_pre_processing();
public:
Link_array<Note_column> clash_l_arr_;
- NAME_MEMBERS(Collision);
+ NAME_MEMBERS();
void add (Note_column*ncol_l);
Collision();
virtual Terminate_voice_req *terminate() {return 0;}
virtual Group_change_req * groupchange() { return 0;}
virtual Group_feature_req * groupfeature() { return 0; }
-
virtual Measure_grouping_req * measuregrouping() { return 0; }
virtual Clef_change_req * clefchange() { return 0; }
virtual Key_change_req * keychange() { return 0; }
virtual Bar_req *bar() { return 0; }
virtual Cadenza_req *cadenza() { return 0; }
virtual Timing_req*timing() { return 0; }
+ virtual Command_script_req*commandscript() { return 0;}
};
+class Command_script_req : public Command_req, public Script_req {
+public:
+ REQUESTMETHODS(Command_script_req, commandscript);
+};
+
+
+
/** Baseclass for meter/partial req. It has to be handled by
Staff_{walker,column} baseclass. */
class Timing_req : public Command_req {
protected:
SPANNER_CLONE(Crescendo)
virtual Molecule*brew_molecule_p()const;
- NAME_MEMBERS(Crescendo);
+ NAME_MEMBERS();
private:
public:
Dynamic_register();
~Dynamic_register();
- NAME_MEMBERS(Dynamic_register);
+ NAME_MEMBERS();
protected:
virtual void acknowledge_element(Score_elem_info);
virtual bool try_request(Request *req_l);
public:
Element_group();
Element_group(Element_group const&);
- NAME_MEMBERS(Element_group);
+ NAME_MEMBERS();
virtual void translate(Offset);
virtual void add_element(Score_elem*);
virtual String TeX_string()const;
--- /dev/null
+/*
+ general-script-def.hh -- declare General_script_def
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef GENERAL_SCRIPT_DEF_HH
+#define GENERAL_SCRIPT_DEF_HH
+
+#include "lily-proto.hh"
+#include "input.hh"
+#include "virtual-methods.hh"
+/**
+ Definition of anything that is put aside staff/notes.
+ */
+class General_script_def : public Input {
+public:
+ VIRTUAL_COPY_CONS(General_script_def,General_script_def)
+ NAME_MEMBERS();
+ virtual int staff_dir_i()const;
+ void print() const;
+ virtual int rel_stem_dir_i()const;
+ virtual int priority_i()const;
+ virtual bool inside_b()const;
+ virtual Atom get_atom(Paper_def* p, int dir_i_)const;
+ bool equal_b(General_script_def const&)const;
+ virtual ~General_script_def() {}
+
+protected:
+ virtual bool do_equal_b(General_script_def const &)const;
+ virtual void do_print()const;
+};
+
+#endif // GENERAL_SCRIPT_DEF_HH
#ifndef GROUPING_HH
#define GROUPING_HH
-#include "moment.hh"
-#include "interval.hh"
+#include "minterval.hh"
#include "varray.hh"
-typedef Interval_t<Moment> MInterval;
-
/** data structure which represents rhythmic units this is a tree. It groupes notes according to rules
TODO Documentation. Unhairing
virtual void process_requests();
virtual void pre_move_processing();
virtual void post_move_processing();
- NAME_MEMBERS(Note_head_register);
+ NAME_MEMBERS();
};
*/
struct Input_music {
virtual Voice_list convert()const=0;
- void check_plet(Voice_element* velt_l);
virtual Moment length()const=0;
virtual void translate_time(Moment dt)=0;
virtual ~Input_music(){}
virtual void print() const =0;
virtual void set_default_group(String)=0;
- virtual bool find_plet_start_b(char c, Moment& moment_r) = 0;
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i) = 0;
virtual void transpose(Melodic_req const&) const =0;
virtual Voice_list convert()const;
virtual void translate_time(Moment dt);
virtual void print() const;
- virtual bool find_plet_start_b(char c, Moment& moment_r);
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
virtual Input_music *clone() const {
return new Simple_music(*this);
}
Complex_music(Complex_music const &);
virtual void print() const ;
void concatenate(Complex_music*);
- virtual bool find_plet_start_b(char c, Moment& moment_r);
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
};
virtual Item *item() { return this; }
Item();
Real hpos_f() const;
- NAME_MEMBERS(Item);
+ NAME_MEMBERS();
virtual Line_of_score * line_l() const;
protected:
virtual void do_print()const;
/* *************** */
-NAME_MEMBERS(Key_item);
+NAME_MEMBERS();
Key_item(int cposition);
void add(int pitch, int acc);
void read(const Key_register&);
virtual void post_move_processing();
virtual void acknowledge_element(Score_elem_info);
Key_register();
- NAME_MEMBERS(Key_register);
+ NAME_MEMBERS();
private:
void read_req(Key_change_req * r);
struct Collision;
struct Collision_register;
struct Command_req;
+struct Command_script_req;
struct Complex_music;
struct Complex_walker;
struct Cresc_req;
struct Dynamic_req;
struct Element_group;
struct Feature;
+struct General_script_def;
struct Group_change_req;
struct Group_feature_req;
struct Idealspacing;
struct Mixed_qp;
struct Molecule;
struct Music_general_chord;
+struct Musical_script_req;
struct Music_voice;
struct Musical_req;
struct My_lily_parser;
struct Paper_def;
struct Partial_measure_req;
struct Plet;
-struct Plet_req;
struct Pulk_voice;
struct Pulk_voices;
struct Rational;
update item if Items are removed
*/
struct Local_key_item : Item {
- NAME_MEMBERS(Local_key_item);
+ NAME_MEMBERS();
Array<Local_acc> accs;
Link_array<Item> support_items_;
int c0_position;
/* *************** */
Local_key_item(int c0position);
- void add(Item*);
+ void add_support(Item*);
void add(int oct, int pitch, int acc);
void add(Melodic_req*);
public:
virtual void acknowledge_element(Score_elem_info);
virtual void pre_move_processing();
Local_key_register();
- NAME_MEMBERS(Local_key_register);
+ NAME_MEMBERS();
};
#endif // LOCALKEYREG_HH
virtual void process_requests();
virtual void post_move_processing();
public:
- NAME_MEMBERS(Lyric_register);
+ NAME_MEMBERS();
Lyric_register();
};
#endif // LYRIC_REGISTER_HH
virtual void pre_move_processing();
virtual void post_move_processing();
Meter_register();
- NAME_MEMBERS(Meter_register);
+ NAME_MEMBERS();
};
#endif // METERREG_HH
Molecule*brew_molecule_p() const;
public:
Meter(Array<Scalar> args) ;
- NAME_MEMBERS(Meter);
+ NAME_MEMBERS();
};
#endif // METER_HH
--- /dev/null
+/*
+ minterval.hh -- declare MInterval
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef MINTERVAL_HH
+#define MINTERVAL_HH
+
+#include "interval.hh"
+#include "moment.hh"
+
+typedef Interval_t<Moment> MInterval;
+
+#endif // MINTERVAL_HH
#include "lily-proto.hh"
#include "plist.hh"
#include "boxes.hh"
-#include "symbol.hh"
-
-/// a symbol which can be translated, and freely copied
-struct Atom {
- Offset off;
- Symbol sym;
-
- /* *************** */
-
- void translate(Offset o) {
- off += o;
- }
-
- /// how big is #this#?
- Box extent() const;
- Atom(Symbol s);
-
- void print() const;
-
- String TeX_string() const;
-};
/** a group of individually translated symbols. You can add molecules
/* *************** */
Molecule() { }
- Molecule(Atom a) { add(a) ; }
+ Molecule(Atom const &a) { add(a) ;}
void add_right(const Molecule &m);
void add_left(const Molecule &m);
void add_bottom(const Molecule &m);
void add(Molecule const &m);
void translate(Offset);
- void add(Atom a) { ats.bottom().add(new Atom(a)); }
+ void add(Atom const & a) ;
/// how big is #this#?
Box extent() const;
--- /dev/null
+/*
+ music.hh -- declare Music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+
+#ifndef MUSIC_HH
+#define MUSIC_HH
+
+#include "plist.hh"
+#include "virtual-methods.hh"
+#include "input.hh"
+#include "minterval.hh"
+#include "lily-proto.hh"
+
+class Music:public Input {
+public:
+ virtual MInterval time_int()const;
+ virtual ~Music(){}
+ void print() const;
+ virtual void transpose(Melodic_req const *);
+ virtual void translate(Moment dt);
+ VIRTUAL_COPY_CONS(Music,Music)
+ NAME_MEMBERS();
+ Music();
+protected:
+ virtual void do_print() const;
+
+};
+
+class Music_list : public Music {
+public:
+ Music_list(Music_list const&);
+ Music_list();
+ NAME_MEMBERS();
+ VIRTUAL_COPY_CONS(Music_list,Music)
+ virtual void add(Music*);
+ virtual void transpose(Melodic_req const *);
+protected:
+ Pointer_list<Music*> music_p_list_;
+
+ virtual void do_print() const;
+};
+
+
+class Chord : public Music_list {
+public:
+ NAME_MEMBERS();
+ VIRTUAL_COPY_CONS(Chord,Music)
+ virtual void translate(Moment dt);
+ virtual MInterval time_int()const;
+};
+
+
+class MVoice : public Music_list {
+public:
+ NAME_MEMBERS();
+ VIRTUAL_COPY_CONS(MVoice, Music)
+ virtual void translate(Moment dt);
+ virtual MInterval time_int()const;
+};
+
+#endif // MUSIC_HH
+
+
+
class Musical_req : public virtual Request {
public:
+ virtual Lyric_req* lreq_l() { return 0; }
+ virtual Note_req *note() { return 0;}
+ virtual Stem_req *stem() { return 0;}
+ virtual Melodic_req *melodic() { return 0; }
+ virtual Slur_req *slur() { return 0 ; }
+ virtual Beam_req *beam() { return 0 ; }
+ virtual Rhythmic_req*rhythmic() { return 0; }
+ virtual Musical_script_req*musicalscript() { return 0; }
virtual Skip_req* skip() { return 0; }
virtual Dynamic_req* dynamic() { return 0; }
virtual Absolute_dynamic_req * absdynamic() { return 0; }
};
-/**
- request for backward plet generation.
-
- ugr. Place in hierarchy?
- */
-class Plet_req : public virtual Request {
-public:
- char type_c_;
- int dur_i_;
- int type_i_;
- Plet_req();
-
- REQUESTMETHODS(Plet_req,plet);
-};
-
/** Start / stop a beam at this note. if #nplet# is set, the staff
will try to put an appropriate number over the beam */
class Beam_req : public Span_req {
};
-
-/** Put a script above or below this ``note''. eg upbow, downbow. Why
- a request? These symbols may conflict with slurs and brackets, so
- this also a request */
-class Script_req : public Musical_req {
+class Musical_script_req : public Musical_req, public Script_req {
public:
- int dir_i_;
- Script_def *scriptdef_p_;
-
- /* *************** */
- static int compare(const Script_req &, const Script_req &);
- Script_req(int d, Script_def*);
- REQUESTMETHODS(Script_req,script);
- ~Script_req();
- Script_req(Script_req const&);
+ REQUESTMETHODS(Musical_script_req, musicalscript);
};
+
/** A helper in the hierarchy. Each dynamic is bound to one note ( a
crescendo spanning multiple notes is thought to be made of two
"dynamics": a start and a stop). Dynamic changes can occur in a
virtual void post_move_processing();
public:
Note_column_register();
- NAME_MEMBERS(Note_column_register);
+ NAME_MEMBERS();
};
#endif // NOTE_COLUMN_REG_HH
int dir_i_;
- NAME_MEMBERS(Note_column);
+ NAME_MEMBERS();
Note_column();
void add(Note_head *);
void add(Stem *);
class Note_head : public Item {
public:
- NAME_MEMBERS(Note_head);
+ NAME_MEMBERS();
bool rest_b_;
int position_i_;
static int compare(Note_head * const &a, Note_head *const &b) ;
protected:
virtual void do_print()const;
+ virtual void do_pre_processing();
virtual Molecule* brew_molecule_p()const;
};
#endif // NOTEHEAD_HH
String * get_scriptdef(char c);
Request* get_script_req(char);
-Request* get_plet_request( char c, int dur_i, int type_i );
Request*get_script_req(int d , Script_def*def);
Request*get_text_req(int d , Text_def*def);
Request* get_stemdir_req(int);
*/
virtual void terminate_register(Request_register * reg_l);
- NAME_MEMBERS(Register_group_register);
+ NAME_MEMBERS();
/**
Remove #reg_l# from the list, and return it.
Request_register();
virtual ~Request_register(){}
- NAME_MEMBERS(Request_register);
+ NAME_MEMBERS();
void print() const;
};
Request(Request const&);
virtual ~Request(){}
- NAME_MEMBERS(Request);
+ NAME_MEMBERS();
virtual Request* clone() const { return new Request(*this); }
void print()const ;
maybe checkout RTTI
*/
virtual Barcheck_req *barcheck() { return 0; }
- virtual Note_req *note() { return 0;}
virtual Script_req *script() { return 0;}
- virtual Stem_req *stem() { return 0;}
virtual Text_req*text() { return 0; }
virtual Rest_req *rest() { return 0; }
virtual Span_req *span() { return 0; }
- virtual Beam_req *beam() { return 0 ; }
- virtual Plet_req* plet() { return 0; }
- virtual Slur_req *slur() { return 0 ; }
- virtual Rhythmic_req*rhythmic() { return 0; }
- virtual Lyric_req* lreq_l() { return 0; }
- virtual Melodic_req *melodic() { return 0; }
- virtual Spacing_req * spacing() { return 0; }
+ virtual Spacing_req * spacing() { return 0; }
virtual Blank_req * blank() { return 0; }
virtual Musical_req *musical() { return 0; }
virtual Command_req * command() { return 0; }
#define REQUESTMETHODS(T,accessor) \
virtual T * accessor() { return this;}\
-NAME_MEMBERS(T);\
+NAME_MEMBERS();\
VIRTUAL_COPY_CONS(T, Request)\
virtual void do_print() const
+
+
+/** Put a script above or below this ``note'' or bar. eg upbow, downbow. Why
+ a request? These symbols may conflict with slurs and brackets, so
+ this also a request */
+class Script_req : public virtual Request {
+public:
+ int dir_i_;
+ General_script_def *scriptdef_p_;
+
+ /* *************** */
+ static int compare(const Script_req &, const Script_req &);
+ Script_req();
+ REQUESTMETHODS(Script_req,script);
+ ~Script_req();
+ Script_req(Script_req const&);
+};
+
+
#endif
virtual void pre_move_processing();
public:
Rest_collision_register();
- NAME_MEMBERS(Rest_collision_register);
+ NAME_MEMBERS();
};
#endif // REST_COLLISION_REG_HH
public:
void add(Rest_column*);
void add(Collision*);
- NAME_MEMBERS(Rest_collision);
+ NAME_MEMBERS();
protected:
virtual void do_post_processing();
virtual void do_substitute_dependency(Score_elem*,Score_elem*);
public:
int dir_i_;
void add(Note_head *);
- NAME_MEMBERS(Rest_column);
+ NAME_MEMBERS();
void translate_y(Real dy);
Rest_column();
protected:
#include "parray.hh"
#include "lily-proto.hh"
#include "offset.hh"
-#include "molecule.hh"
#include "virtual-methods.hh"
#include "directed-graph.hh"
virtual ~Score_elem();
Score_elem();
- NAME_MEMBERS(Score_elem);
+ NAME_MEMBERS();
virtual bool is_type_b(const char *);
Interval width() const;
virtual String TeX_string() const;
/* *************** */
- NAME_MEMBERS(Line_of_score);
+ NAME_MEMBERS();
Line_of_score();
void add_line(Spanner_elem_group *);
public:
Link_array<Script> script_l_arr_;
Link_array<Item> support_l_arr_;
- NAME_MEMBERS(Script_column);
+ NAME_MEMBERS();
void add(Script *);
void add_support(Item*);
#ifndef SCRIPTDEF_HH
#define SCRIPTDEF_HH
#include "string.hh"
+#include "general-script-def.hh"
/** The characteristics of a certain kind of accent. It is not the
accent itself. */
-struct Script_def {
+class Script_def : public General_script_def {
+ /// invert if below staff?
+ bool invertsym_b_;
+ String symidx;
+
/// on the other side of the stem?
int rel_stem_dir_i_;
/// follow the ball inside staff?
bool inside_staff_b_;
- /// invert if below staff?
- bool invertsym_b_;
- String symidx;
+public:
+ virtual int staff_dir_i()const;
+ virtual int rel_stem_dir_i()const;
+ virtual int priority_i()const;
+ virtual bool inside_b()const;
+ virtual Atom get_atom(Paper_def* p, int dir_i_)const;
+ NAME_MEMBERS();
- /* *************** */
- int compare(Script_def const &);
+ virtual bool do_equal_b(General_script_def const &)const;
void print() const;
- Script_def(String, bool, int, int ,bool);
+ Script_def();
+ void set_from_input(String, bool, int, int ,bool);
+protected:
+ VIRTUAL_COPY_CONS(Script_def,General_script_def)
+
};
+
+
+
#endif // SCRIPTDEF_HH
/* *************** */
bool acceptable_elem_b(Score_elem*);
public:
- NAME_MEMBERS(Script_register);
+ NAME_MEMBERS();
Script_register();
protected:
virtual bool try_request(Request*);
Accents that are put over a note-group.
*/
class Script : public Item, public Staff_side {
- /**
- Vertical dir of symbol. -1 means invert the symbol.
- */
- int symdir_i_;
int pos_i_;
- Script_def *specs_l_;
+ General_script_def *specs_l_;
Stem *stem_l_;
/* *************** */
virtual void do_pre_processing();
virtual Interval do_width() const;
private:
- void set_symdir();
+
void set_default_dir();
void set_default_index();
Symbol symbol()const;
static int compare(Script *const&, Script *const&) ;
Script(Script_req*);
void set_stem(Stem*);
- NAME_MEMBERS(Script);
+ NAME_MEMBERS();
};
virtual void pre_move_processing();
virtual void post_move_processing();
public:
- NAME_MEMBERS(Slur_register);
+ Slur_reg();
+ NAME_MEMBERS();
};
#endif // SLURREG_HH
void add(Note_column*);
protected:
virtual void set_default_dir();
- virtual void do_break_at( PCol*, PCol*) ;
virtual void do_post_processing();
virtual void do_substitute_dependency(Score_elem*, Score_elem*);
virtual void do_pre_processing();
SPANNER_CLONE(Slur)
- NAME_MEMBERS(Slur);
+ NAME_MEMBERS();
};
#endif // SLUR_HH
class Spanner_elem_group : public Spanner, public Element_group {
protected:
- void do_break_at(PCol*,PCol*);
virtual Interval do_width()const;
virtual void do_print() const;
SPANNER_CLONE(Spanner_elem_group)
- NAME_MEMBERS(Spanner_elem_group);
+ NAME_MEMBERS();
};
#endif // SPANNER_ELEM_GROUP_HH
PCol *left_col_l_, *right_col_l_;
/* *************** */
- NAME_MEMBERS(Spanner);
+ NAME_MEMBERS();
virtual Spanner* spanner() { return this; }
Spanner();
bool broken_b() const;
public:
/* *************** */
- NAME_MEMBERS(Staff_registers);
+ NAME_MEMBERS();
void change_group(Group_change_req * greq_l,
Voice_registers *voice_regs_l,
Voice_group_registers * old_group);
Moment last_mom_;
public:
Staff_sym_register();
- NAME_MEMBERS(Staff_sym_register);
+ NAME_MEMBERS();
protected:
virtual void process_requests();
~Staff_sym_register();
void set_extent(PCol* p1, PCol* p2);
- NAME_MEMBERS(Staff_symbol);
+ NAME_MEMBERS();
Staff_symbol(int lines);
Real inter_note_f()const;
int steps_i()const;
SPANNER_CLONE(Line_of_staff)
public:
- NAME_MEMBERS(Line_of_staff);
+ NAME_MEMBERS();
/* *************** */
/**
int default_dir_i_;
public:
/* *************** */
- NAME_MEMBERS(Stem_beam_register);
+ NAME_MEMBERS();
Stem_beam_register();
protected:
/// ensure that this Stem also encompasses the Notehead #n#
void add(Note_head*n);
- NAME_MEMBERS(Stem);
+ NAME_MEMBERS();
Real hpos_f()const;
virtual void handle_broken_dependencies();
virtual void do_add_processing();
- NAME_MEMBERS(Super_elem);
+ NAME_MEMBERS();
};
#endif // SUPER_ELEM_HH
bool acceptable_request_b(Request*) const;
bool try_request(Request*) ;
public:
- NAME_MEMBERS(Swallow_register);
+ NAME_MEMBERS();
};
#endif // SWALLOW_REG_HH
+/*
+ symbol.hh -- declare Symbol, Atom
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#ifndef SYMBOL_HH
#define SYMBOL_HH
String str()const; // for printing.
};
+
+/// a symbol which can be translated, and freely copied
+struct Atom {
+ Offset off;
+ Symbol sym;
+
+ /* *************** */
+
+ void translate(Offset o) {
+ off += o;
+ }
+
+ /// how big is #this#?
+ Box extent() const;
+ Atom(Symbol s);
+
+ void print() const;
+
+ String TeX_string() const;
+};
#endif
#ifndef TEXT_DEF_HH
#define TEXT_DEF_HH
+#include "general-script-def.hh"
#include "string.hh"
#include "lily-proto.hh"
#include "input.hh"
-class Text_def : public Input {
+class Text_def : public General_script_def {
+protected:
+ virtual Atom get_atom(Paper_def* p, int dir_i_)const;
+ NAME_MEMBERS();
+ VIRTUAL_COPY_CONS(Text_def,General_script_def)
public:
/**
centered , or aligned?
-1 = raggedright, 0 = center, 1 = raggedleft
*/
int align_i_;
- Paper_def* pdef_l_;
+
String text_str_;
String style_str_;
/* *************** */
virtual ~Text_def() {};
- bool compare(const Text_def&);
+ bool do_equal_b(const Text_def&)const;
Text_def();
virtual void print() const;
- Atom create_atom() const;
- Interval width() const;
+ Interval width(Paper_def*) const;
};
#endif // TEXT_DEF_HH
void init(Text_def* tdef_l);
public:
- Text_def * tdef_l();
- Text_def const* tdef_c_l();
+
int pos_i_;
/// do I have width?
/* ***************/
- Text_item(Text_def*,int dir=0);
+ Text_item(General_script_def*,int dir=0);
virtual ~Text_item();
- NAME_MEMBERS(Text_item);
+ NAME_MEMBERS();
protected:
- Text_def* tdef_p_;
+ General_script_def * tdef_p_;
virtual void set_default_index();
virtual Molecule* brew_molecule_p() const;
virtual void acknowledge_element(Score_elem_info);
public:
Text_register();
- NAME_MEMBERS(Text_register);
+ NAME_MEMBERS();
};
#endif // TEXTREG_HH
class Text_spanner : public Spanner {
public:
Directional_spanner * support;
- Text_def spec;
+ General_script_def * spec_p_;
Offset text_off_;
- NAME_MEMBERS(Text_spanner);
+ NAME_MEMBERS();
void set_support(Directional_spanner*);
Text_spanner();
protected:
SPANNER_CLONE(Text_spanner)
-
+ ~Text_spanner();
virtual void do_substitute_dependency(Score_elem*,Score_elem*);
virtual void do_pre_processing();
virtual void do_post_processing();
virtual void set_feature(Feature);
public:
Tie_register();
- NAME_MEMBERS(Tie_register);
+ NAME_MEMBERS();
};
#endif // TIE_REG_HH
void set_head(int, Note_head*head_l);
Tie();
- NAME_MEMBERS(Tie);
+ NAME_MEMBERS();
SPANNER_CLONE(Tie)
};
#endif // TIE_HH
Voice_element(Voice_element const & src );
void add(Request*);
- bool find_plet_start_b(char c, Moment& moment_r);
void print ()const;
void set_default_group(String id);
- void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
};
#endif // VOICE-ELEMENT_HH
Array<Voice_registers*> voice_reg_l_arr_;
/* *************** */
- NAME_MEMBERS(Voice_group_registers);
+ NAME_MEMBERS();
static bool static_acceptable_request_b(Request*);
virtual void add(Request_register*);
Voice_group_registers(String id, Input_register const *);
/* *************** */
Voice_registers(Voice*, Input_register const*);
- NAME_MEMBERS(Voice_registers);
+ NAME_MEMBERS();
protected:
virtual void pre_move_processing();
+/*
+ voice.hh -- declare Voice
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#ifndef VOICE_HH
#define VOICE_HH
Moment last() const;
void transpose(Melodic_req const &)const;
void add(Voice_element*);
- bool find_plet_start_b(char c, Moment& moment_r);
void print() const;
void set_default_group(String id);
- void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
};
#endif
#include "command-request.hh"
#include "voice-element.hh"
-void
-Input_music::check_plet(Voice_element* velt_l)
-{
- for (iter_top(velt_l->req_p_list_,i); i.ok(); i++)
- if ( i->plet() ) {
- Moment start_moment = 0;
- if ( !find_plet_start_b( i->plet()->type_c_, start_moment ) ) {
- i ->error( "begin of plet not found");
- break;
- }
- Moment moment = 0;
- set_plet_backwards( moment, start_moment, i->plet()->dur_i_, i->plet()->type_i_ );
- i.del();
- break;
- }
-}
-
void
Simple_music::transpose(Melodic_req const &d)const
{
mtor << "}\n";
#endif
}
-bool
-Simple_music::find_plet_start_b(char c, Moment& moment_r)
-{
- return voice_.find_plet_start_b(c, moment_r);
-}
-void
-Simple_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment,
- int num_i, int den_i)
-{
- voice_.set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
-}
/* *************** */
for (iter_top(elts,i); i.ok(); i++)
i->set_default_group(g);
}
-bool
-Complex_music::find_plet_start_b(char c, Moment& moment_r)
-{
- for (iter_bot(elts,i); i.ok(); i--) {
- if ( i->find_plet_start_b(c, moment_r) )
- return true;
- }
- return false;
-}
-void
-Complex_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
-{
- for (iter_bot(elts,i); i.ok(); i--) {
- i->set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
- }
-}
/* *************************************************************** */
void
c = elts.bottom();
Simple_music *s = c->simple();
s->add(v);
-
- check_plet(v);
}
Moment
Simple_music*vs = new Simple_music;
vs->add(v);
elts.bottom().add(vs);
-
- check_plet(v);
}
void
}
void
-Local_key_item::add(Item*head_l)
+Local_key_item::add_support(Item*head_l)
{
support_items_.push(head_l);
add_dependency(head_l);
void
Local_key_register::pre_move_processing()
{
+ Local_key_item *key_item_p = 0;
if (mel_l_arr_.size()) {
- Local_key_item *key_item_p = 0;
for (int i=0; i < mel_l_arr_.size(); i++) {
Item * support_l = support_l_arr_[i];
-
Note_req * note_l = mel_l_arr_[i];
+
if (tied_l_arr_.find_l(support_l) &&
- !forced_l_arr_.find_l(support_l))
+ !note_l->forceacc_b_)
continue;
+ if( !note_l->forceacc_b_ &&
+ local_key_.oct(note_l->octave_i_).acc(note_l->notename_i_)
+ == note_l->accidental_i_)
+ continue;
+
+
+
if (!key_item_p)
key_item_p = new Local_key_item(*get_staff_info().c0_position_i_l_);
key_item_p->add(note_l);
- key_item_p->add(support_l);
+ key_item_p->add_support(support_l);
local_key_.oct(note_l->octave_i_)
.set(note_l->notename_i_, note_l->accidental_i_);
}
- if (key_item_p)
- typeset_element(key_item_p);
+
+ }
+ if (key_item_p) {
+ for(int i=0; i < support_l_arr_.size(); i++)
+ key_item_p->add_support(support_l_arr_[i]);
+
+ typeset_element(key_item_p);
}
+
mel_l_arr_.set_size(0);
tied_l_arr_.set_size(0);
support_l_arr_.set_size(0);
Local_key_register::acknowledge_element(Score_elem_info info)
{
Score_elem * elem_l = info.elem_l_;
- if (info.req_l_->note()) {
- Note_req * note_l = info.req_l_->note();
+ if (info.req_l_->musical() && info.req_l_->musical()->note()) {
+ Note_req * note_l = info.req_l_->musical()->note();
Item * item_l = info.elem_l_->item();
- if( note_l->forceacc_b_ ||
- local_key_.oct(note_l->octave_i_).acc(note_l->notename_i_)
- != note_l->accidental_i_) {
- mel_l_arr_.push(note_l );
- support_l_arr_.push(item_l);
- if (note_l->forceacc_b_)
- forced_l_arr_.push(item_l);
- }
+ mel_l_arr_.push(note_l );
+ support_l_arr_.push(item_l);
+
} else if (info.req_l_->command()
&& info.req_l_->command()->keychange()) {
Key_register * key_reg_l =
y = 67 *2 PT;
}
- int idx = (y/2.0 - 20 ) + 148;
+ int idx = int(rint((y/2.0 - 20 ) + 148));
Symbol s = (*symtables_)("param")->lookup("brace");
}
for ( int i = 0; i < ptr()->musicalreq_l_arr_.size(); i++ ) {
- Rhythmic_req *n = ptr()->musicalreq_l_arr_[i]->rhythmic();
+ Musical_req *m = ptr()->musicalreq_l_arr_[i]->musical();
+ if (!m)
+ return;
+ Rhythmic_req *n = m->rhythmic();
if ( !n)
continue;
Note_req * note_l = n->note();
-#include "varray.hh"
+/*
+ molecule.cc -- implement Molecule
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include "interval.hh"
#include "dimen.hh"
#include "string.hh"
#include "debug.hh"
#include "tex.hh"
-void
-Atom::print() const
-{
- mtor << "texstring: " <<sym.tex<<"\n";
-}
-
-Box
-Atom::extent() const
-{
- Box b( sym.dim);
- b.translate(off);
- return b;
-}
-
-Atom::Atom(Symbol s)
-{
- sym=s;
-}
-
-
-String
-Atom::TeX_string() const
-{
- /* infinity checks. */
- assert( abs(off.x) < 100 CM);
- assert( abs(off.y) < 100 CM);
-
- // whugh.. Hard coded...
- String s("\\placebox{%}{%}{%}");
- Array<String> a;
- a.push(print_dimen(off.y));
- a.push(print_dimen(off.x));
- a.push(sym.tex);
- return substitute_args(s, a);
-}
/* *************** */
for (iter_top(ats,c); c.ok(); c++)
c->print();
}
+
+void
+Molecule::add(Atom const &a)
+{
+ ats.bottom().add(new Atom(a));
+}
--- /dev/null
+/*
+ music-list.cc -- implement Music_list,
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "music.hh"
+#include "debug.hh"
+
+Music_list::Music_list(Music_list const&s)
+{
+ for (iter(s.music_p_list_.top(), i); i.ok(); i++)
+ add(i->clone());
+}
+
+
+IMPLEMENT_STATIC_NAME(Music_list);
+
+void
+Music_list::add(Music*mus_p)
+{
+ music_p_list_.bottom().add(mus_p);
+}
+
+void
+Music_list::transpose(Melodic_req const*m)
+{
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ i->transpose(m);
+}
+
+void
+Music_list::do_print() const
+{
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ i->print();
+}
+
+IMPLEMENT_STATIC_NAME(Chord);
+
+void
+Chord::translate(Moment dt)
+{
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ i->translate(dt);
+}
+
+MInterval
+Chord::time_int()const
+{
+ MInterval m;
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ m.unite(i->time_int());
+ return m;
+}
+
+MInterval
+MVoice::time_int() const
+{
+ Moment last=0;
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ last += i->time_int().length();
+ return MInterval (0,last);
+}
+
+void
+MVoice::translate(Moment dt)
+{
+ for (iter(music_p_list_.top(), i); i.ok(); i++)
+ i->translate(dt);
+}
+
+IMPLEMENT_STATIC_NAME(MVoice);
--- /dev/null
+/*
+ music.cc -- implement Music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "music.hh"
+#include "debug.hh"
+
+MInterval
+Music::time_int() const
+{
+ return MInterval(0,0);
+}
+void
+Music::print()const
+{
+ #ifndef NPRINT
+ mtor << name() << "{" ;
+ do_print();
+ mtor << "}\n";
+ #endif
+}
+void
+Music::transpose(Melodic_req const*)
+{
+
+}
+
+void
+Music::translate(Moment )
+{
+}
+
+void
+Music::do_print()const
+{
+}
+
+IMPLEMENT_STATIC_NAME(Music);
+
+
+
+Music::Music(){}
return pitch_byte_a[ notename_i_ % 7 ] + accidental_i_ + octave_i_ * 12;
}
-Plet_req::Plet_req()
-{
- type_c_ = ']';
- dur_i_ = 1;
- type_i_ = 1;
-}
-
-IMPLEMENT_STATIC_NAME(Plet_req);
-
-void
-Plet_req::do_print() const
-{
-#ifndef NPRINT
- mtor << "plet: " << type_c_ << ": " << dur_i_ << "/" << type_i_;
-#endif
-}
-
/* *************** */
int
Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2)
}
/* *************** */
-Script_req::Script_req(int d , Script_def*def)
+Script_req::Script_req(Script_req const&s)
{
- dir_i_ = d;
- scriptdef_p_ = def;
+ dir_i_ = s.dir_i_;
+ scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone() : 0;
}
int
Script_req::compare(Script_req const &d1, Script_req const &d2)
{
return d1.dir_i_ == d2.dir_i_ &&
- d1.scriptdef_p_->compare(*d2.scriptdef_p_);
+ d1.scriptdef_p_->equal_b(*d2.scriptdef_p_);
}
-Script_req::Script_req(Script_req const &s)
- : Request( s )
+Script_req::Script_req()
{
- dir_i_ = s.dir_i_;
- scriptdef_p_ = new Script_def(*s.scriptdef_p_);
+ dir_i_ = 0;
+ scriptdef_p_ = 0;
}
IMPLEMENT_STATIC_NAME(Script_req);
scriptdef_p_->print();
}
+void
+Musical_script_req::do_print() const
+{}
+
+IMPLEMENT_STATIC_NAME(Musical_script_req);
+
Script_req::~Script_req()
{
Text_req:: compare(Text_req const &r1, Text_req const &r2)
{
bool b1 = (r1.dir_i_ == r2.dir_i_);
- bool b2 = (r1.tdef_p_ ->compare(*r2.tdef_p_));
+ bool b2 = (r1.tdef_p_ ->equal_b(*r2.tdef_p_));
return b1 && b2;
}
Text_req::~Text_req()
}
IMPLEMENT_STATIC_NAME(Tie_req);
+
+
#include "musical-request.hh"
#include "command-request.hh"
#include "voice.hh"
-
+#include "script.hh"
#include "identifier.hh"
#include "varray.hh"
#include "text-def.hh"
#include "voice-element.hh"
-Request*
-get_plet_request( char c, int dur_i, int type_i )
-{
- Plet_req* plet_req_p = new Plet_req;
- plet_req_p->dur_i_ = dur_i;
- plet_req_p->type_i_ = type_i;
- plet_req_p->type_c_ = c;
- return plet_req_p;
-}
-
String *
get_scriptdef(char c)
{
Request*
get_script_req(int d , Script_def*def)
{
- Script_req* script_req_p = new Script_req(d, def);
+ Musical_script_req* script_req_p = new Musical_script_req;
+ script_req_p->dir_i_ =d;
+ script_req_p->scriptdef_p_=def;
return script_req_p;
}
+/*
+ notehead.cc -- implement Note_head
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include "misc.hh"
#include "note-head.hh"
#include "dimen.hh"
rest_b_ = false;
}
+void
+Note_head::do_pre_processing()
+{
+ // 8 ball looks the same as 4 ball:
+ if (balltype_i_ > 4 && !rest_b_)
+ balltype_i_ = 4;
+}
+
void
Note_head::set_rhythmic(Rhythmic_req*r_req_l)
{
balltype_i_ = r_req_l->duration_.type_i_;
- if (balltype_i_ > 4)
- balltype_i_ = 4;
dots_i_ = r_req_l->duration_.dots_i_;
}
PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
-
- while ( start < stop ) {
+
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 ) {
if (start->breakable_b())
ret.push(start);
start++;
PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
ret.push(l);
- while ( start < stop )
+
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 )
ret.push(start++);
ret.push(r);
return ret;
PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
- while ( start < stop ) {
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 ) {
if (start->breakable_b() && !start->line_l_ )
ret.push(start);
start++;
%{ // -*-Fundamental-*-
#include <iostream.h>
-#define MUDELA_VERSION "0.0.57"
+#define MUDELA_VERSION "0.0.58"
#include "script-def.hh"
#include "symtable.hh"
%type <box> box
-%type <c> open_request_parens close_request_parens close_plet_parens
+%type <c> open_request_parens close_request_parens
+%type <c> open_plet_parens close_plet_parens
%type <chord> music_chord music_chord_body init_music_chord
%type <el> voice_elt full_element lyrics_elt command_elt
%type <i> int
$2->set_spot( THIS->here_input());
THIS->post_reqs.push($2);
}
- | post_requests close_plet_parens INT '/' INT {
- THIS->post_reqs.push( THIS->get_parens_request($2) );
- THIS->post_reqs.push( get_plet_request( $2, $3, $5 ) );
- }
;
post_request:
$$->set_spot( THIS->here_input());
}
;
+
pure_post_request_choice:
close_request_parens {
$$ = THIS->get_parens_request($1);
*/
steno_melodic_req:
NOTENAME_ID {
- $$ = $1->clone()->melodic();
+ $$ = $1->clone()->musical()->melodic();
$$->octave_i_ += THIS->default_octave_i_;
}
| steno_melodic_req POST_QUOTES {
;
close_plet_parens:
- ']' {
+ ']' INT '/' INT {
$$ = ']';
+ THIS->default_duration_.set_plet($2,$4);
}
;
| ']' {
$$ = ']';
}
+ | close_plet_parens {
+ }
| E_SMALLER {
$$ = '<';
}
}
;
+open_plet_parens:
+ '[' INT '/' INT {
+ $$ = '[';
+ THIS->default_duration_.set_plet($2,$4);
+ }
+ ;
+
open_request_parens:
E_EXCLAMATION {
$$ = '!';
| '[' {
$$='[';
}
+ | open_plet_parens {
+ }
;
script_body:
STRING int int int int {
- $$ = new Script_def(*$1,$2, $3,$4,$5);
+ $$ = new Script_def;
+ $$->set_from_input(*$1,$2, $3,$4,$5);
delete $1;
}
;
$$ = new Array<Melodic_req*>;
}
| pitch_list NOTENAME_ID {
- $$->push($2->clone()->melodic());
+ $$->push($2->clone()->musical()->melodic());
}
;
+/*
+ script-def.cc -- implement
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include "debug.hh"
#include "script-def.hh"
+#include "symbol.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+
+Script_def::Script_def()
+{
+ inside_staff_b_ = false;
+ symidx = "unknown" ;
+ rel_stem_dir_i_ =0;
+ staff_dir_i_ = -1;
+ invertsym_b_ = 0;
+ priority_i_ =0;
+}
-Script_def::Script_def(String idx, bool follow, int stem, int staff ,bool invert)
+void
+Script_def::set_from_input(String idx, bool follow, int stem, int staff ,bool invert)
{
inside_staff_b_ = follow;
symidx = idx ;
priority_i_ =0;
}
+
void
Script_def::print() const
{
mtor << "Script_def{ idx: " << symidx
<< " direction, stem: " << rel_stem_dir_i_ << " staff : " << staff_dir_i_ << "}\n";
}
-int
-Script_def::compare(Script_def const & c)
+
+bool
+Script_def::do_equal_b(General_script_def const &g)const
{
+ Script_def const & c = (Script_def const&) g;
return !(symidx == c.symidx &&
- rel_stem_dir_i_ == c.rel_stem_dir_i_&&
- staff_dir_i_ == c.staff_dir_i_&&
- invertsym_b_ == c.invertsym_b_);
+ rel_stem_dir_i_ == c.rel_stem_dir_i_&&
+ staff_dir_i_ == c.staff_dir_i_&&
+ invertsym_b_ == c.invertsym_b_);
+}
+
+int
+Script_def::staff_dir_i() const
+{
+ return staff_dir_i_;
+}
+
+int
+Script_def::rel_stem_dir_i() const
+{
+ return rel_stem_dir_i_;
+}
+
+bool
+Script_def::inside_b() const
+{
+ return inside_staff_b_;
+}
+
+Atom
+Script_def::get_atom(Paper_def *p , int d)const
+{
+ String preidx_str ="";
+ if (invertsym_b_&& d < 0)
+ preidx_str = "-";
+
+ return p->lookup_l()->script(preidx_str + symidx);
+}
+
+IMPLEMENT_STATIC_NAME(Script_def);
+
+int
+Script_def::priority_i()const
+{
+ return priority_i_;
}
+
+
+
bool
Script_register::try_request(Request *r_l)
{
- if (!r_l->script())
+ if (!r_l->musical() || ! r_l->musical()->musicalscript())
return false ;
+
for (int i=0; i < script_req_l_arr_.size(); i++)
if ( !Script_req::compare(*script_req_l_arr_[i], *r_l->script())) {
return true;
Script::Script(Script_req* rq)
{
specs_l_ = rq->scriptdef_p_;
- inside_staff_b_ = specs_l_->inside_staff_b_;
+ inside_staff_b_ = specs_l_->inside_b();
stem_l_ = 0;
pos_i_ = 0;
- symdir_i_=1;
dir_i_ =rq->dir_i_;
}
-
-void
-Script::set_symdir()
-{
- if (specs_l_->invertsym_b_)
- symdir_i_ = (dir_i_ < 0) ? -1:1;
-}
-
void
Script::set_default_dir()
{
- int s_i=specs_l_->rel_stem_dir_i_;
+ int s_i=specs_l_->rel_stem_dir_i();
if (s_i && stem_l_)
dir_i_ = stem_l_->dir_i_ * s_i;
else {
- dir_i_ =specs_l_->staff_dir_i_;
+ dir_i_ =specs_l_->staff_dir_i();
}
}
void
Script::set_default_index()
{
- pos_i_ = get_position_i(symbol().dim.y);
+ pos_i_ = get_position_i(specs_l_->get_atom(paper(), dir_i_).extent().y);
}
Interval
Script::do_width() const
{
- return symbol().dim.x;
-}
-
-Symbol
-Script::symbol()const
-{
- String preidx_str = (symdir_i_ < 0) ?"-" :"";
- return paper()->lookup_l()->script(preidx_str + specs_l_->symidx);
+ return specs_l_->get_atom(paper(), dir_i_).extent().x;
}
void
{
if (!dir_i_)
set_default_dir();
- set_symdir();
+
}
void
{
Real dy = paper()->internote_f();
- Molecule*out = new Molecule(Atom(symbol()));
+ Molecule*out = new Molecule(specs_l_->get_atom(paper(), dir_i_));
out->translate(Offset(0,dy * pos_i_));
return out;
}
+
IMPLEMENT_STATIC_NAME(Script);
int
Script::compare(Script *const&l1, Script *const&l2)
{
- return l1->specs_l_->priority_i_ - l2->specs_l_->priority_i_;
+ return l1->specs_l_->priority_i() - l2->specs_l_->priority_i();
}
bool
Slur_register::acceptable_request_b(Request*req_l)
{
- return req_l->musical() && req_l->musical()->slur();
+ Musical_req *mus_l = req_l->musical();
+
+ return mus_l && mus_l->slur();
}
bool
Slur_register::try_request(Request *req_l)
{
- if(!req_l->slur())
+ Musical_req *mus_l = req_l->musical();
+ if(!mus_l || !mus_l->slur())
return false;
- new_slur_req_l_arr_.push(req_l->slur());
+ new_slur_req_l_arr_.push(mus_l->slur());
return true;
}
left_col_l_ = encompass_arr_[0]->pcol_l_;
}
-void
-Slur::do_break_at(PCol*l, PCol*r)
-{
- assert(l->line_l_ == r->line_l_);
-
- Array<Note_column*> old_encompass_arr = encompass_arr_;
- encompass_arr_.set_size(0);
- for (int i =0; i < old_encompass_arr.size(); i++) {
- if (old_encompass_arr[i]->pcol_l_->line_l_==l->line_l_)
- encompass_arr_.push(old_encompass_arr[i]);
- }
-}
void
Slur::do_substitute_dependency(Score_elem*o, Score_elem*n)
#include "p-col.hh"
#include "spanner-elem-group.hh"
-void
-Spanner_elem_group::do_break_at(PCol*c1, PCol*c2 )
-{
- Line_of_score * line_C = c1->line_l_;
- Array<Score_elem*> old_elems=elem_l_arr_;
- elem_l_arr_.set_size(0);
- for (int i=0; i < old_elems.size(); i++) {
- if (old_elems[i]->line_l() == line_C) {
- add_element(old_elems[i]);
- }
- }
-}
IMPLEMENT_STATIC_NAME(Spanner_elem_group);
!c_l->measuregrouping())
setup_one_request(j);
} else {
- if (j->rhythmic()) {
- req_col_l_->musical_column_l_->add_duration(j->rhythmic()->duration());
- }
if (j->musical()) {
+
Musical_req*m = j->musical();
+ if (m->rhythmic()) {
+ req_col_l_->musical_column_l_->add_duration(m->rhythmic()->duration());
+ }
if(m->skip())
continue;
}
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
+#include "interval.hh"
#include "paper-def.hh"
#include "dimen.hh"
#include "staff-side.hh"
#include "staff-sym.hh"
#include "lookup.hh"
#include "paper-def.hh"
+#include "molecule.hh"
#include "debug.hh"
bool
Stem_beam_register::try_request(Request*req_l)
{
- if ( req_l->beam() ) {
- if (bool(beam_p_ ) == bool(req_l->beam()->spantype == Span_req::START))
+
+ Musical_req* mus_l = req_l->musical();
+ /* Debiele puntkomma's. Laat je er eentje per ongeluk achter een
+ if(..) staan, lijkt het net op een luis in gcc.
+
+ (ofwel Python rules)
+ */
+ if (!mus_l)
+ return false;
+
+
+ if ( mus_l->beam() ) {
+ if (bool(beam_p_ ) == bool(mus_l->beam()->spantype == Span_req::START))
return false;
- if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *req_l->beam()))
+ if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *mus_l->beam()))
return false;
- beam_req_l_ = req_l->beam();
+ beam_req_l_ = mus_l->beam();
return true;
}
- if ( req_l->stem() ) {
+ if ( mus_l->stem() ) {
if (current_grouping && !current_grouping->child_fit_b(
get_staff_info().time_C_->whole_in_measure_))
return false;
- if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *req_l->stem()))
+ if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *mus_l->stem()))
return false;
- stem_req_l_ = req_l->stem();
+ stem_req_l_ = mus_l->stem();
return true;
}
return false;
current_grouping = new Rhythmic_grouping;
if (beam_req_l_->nplet) {
Text_spanner* t = new Text_spanner();
+ Text_def *defp = new Text_def;
t->set_support(beam_p_);
- t->spec.align_i_ = 0;
- t->spec.text_str_ = beam_req_l_->nplet;
- t->spec.style_str_="italic";
+ defp->align_i_ = 0;
+ defp->text_str_ = beam_req_l_->nplet;
+ defp->style_str_="italic";
+ t->spec_p_ = defp;
typeset_element(t);
}
return;
if (info.elem_l_->name() == Note_head::static_name() &&
- stem_req_l_->duration() == info.req_l_->rhythmic()->duration()){
+ stem_req_l_->duration()
+ == info.req_l_->musical()->rhythmic()->duration()){
Note_head * n_l= (Note_head*)info.elem_l_->item();
stem_p_->add(n_l);
}
#include "super-elem.hh"
#include "scoreline.hh"
#include "p-score.hh"
+#include "string.hh"
String
Super_elem::TeX_string()const
#include "spanner.hh"
#include "scoreline.hh"
#include "staffline.hh"
-
#include "pcursor.tcc"
#include "plist.tcc"
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
+#include "music.hh"
#include "symbol.hh"
#include "voice.hh"
#include "voice-element.hh"
IPL_instantiate(Voice);
+IPL_instantiate(Music);
+/*
+ template3.cc -- instantiate Atom
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "symbol.hh"
#include "request.hh"
#include "input-score.hh"
#include "input-staff.hh"
+/*
+ text-def.cc -- implement Text_def
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include "debug.hh"
#include "lookup.hh"
#include "paper-def.hh"
#include "dimen.hh"
Interval
-Text_def::width() const
+Text_def::width(Paper_def * p) const
{
- Atom a = create_atom();
+ Atom a = get_atom(p,0);
Real guess_width_f = text_str_.length_i() * a.sym.dim.x.length(); // ugh
Interval i(0, guess_width_f);
Text_def::Text_def()
{
align_i_ = 1; // right
- pdef_l_ = 0;
style_str_ = "roman";
}
bool
-Text_def::compare(Text_def const &def)
+Text_def::do_equal_b(Text_def const &def)const
{
return align_i_ == def.align_i_ && text_str_ == def.text_str_
&& style_str_ == def.style_str_;
}
Atom
-Text_def::create_atom() const
+Text_def::get_atom(Paper_def *p, int ) const
{
- return pdef_l_->lookup_l()->text(style_str_, text_str_, -align_i_);
+ return p->lookup_l()->text(style_str_, text_str_, -align_i_);
}
void
mtor << "Text `" << text_str_ << "\', style " <<
style_str_ << "align " << align_i_ << '\n';
}
+IMPLEMENT_STATIC_NAME(Text_def);
#include "molecule.hh"
#include "lookup.hh"
-Text_item::Text_item(Text_def *tdef_l, int d)
+Text_item::Text_item(General_script_def*tdef_l, int d)
{
dir_i_ = d;
fat_b_ = false;
- tdef_p_ = new Text_def(*tdef_l);
+ tdef_p_ = tdef_l->clone();
pos_i_ =0;
}
-Text_def*
-Text_item::tdef_l()
-{
- return tdef_p_;
-}
-
Text_item::~Text_item()
{
delete tdef_p_;
void
Text_item::set_default_index()
{
- pos_i_ = get_position_i(tdef_p_->create_atom().extent().y );
+ pos_i_ = get_position_i(
+ tdef_p_->get_atom(paper(), dir_i_).extent().y );
}
void
{
if (!dir_i_)
dir_i_ = -1;
- tdef_p_->pdef_l_ = paper();
}
void
Molecule*
Text_item::brew_molecule_p() const
{
- Atom a(tdef_p_->create_atom());
-
- if ( fat_b_)
- a.sym.dim.x = tdef_p_->width();
+ Atom a(tdef_p_->get_atom(paper(), dir_i_));
+/*
+ if ( fat_b_)
+ a.sym.dim.x = tdef_p_->width(paper());
+ */
Molecule* mol_p = new Molecule(a);
if(dir_i_<0 ) // should do something better anyway.
#include "text-def.hh"
#include "debug.hh"
#include "paper-def.hh"
-
+#include "symbol.hh"
void
Text_spanner::Text_spanner()
{
+ spec_p_ = 0;
support = 0;
}
void
Text_spanner::do_print() const
{
- spec.print();
+ spec_p_->print();
}
void
Text_spanner::do_post_processing()
{
- switch(spec.align_i_) {
- case 0:
- text_off_ = support->center() +
- Offset(0,support->dir_i_ * paper()->internote_f() * 4); // todo
- break;
- default:
- assert(false);
- break;
- }
+ text_off_ = support->center() +
+ Offset(0,support->dir_i_ * paper()->internote_f() * 4); // todo
}
Molecule*
Text_spanner::brew_molecule_p() const
{
- Atom tsym (spec.create_atom());
+ Atom tsym (spec_p_->get_atom(paper(),0));
tsym.translate(text_off_);
Molecule*output = new Molecule;
right_col_l_ = support->right_col_l_;
left_col_l_ = support->left_col_l_;
assert(left_col_l_ && right_col_l_);
- spec.pdef_l_ = paper();
}
Interval
support = (Directional_spanner*) n->spanner();
}
+
+Text_spanner::~Text_spanner()
+{
+ delete spec_p_;
+}
add(i->clone());
}
-bool
-Voice_element::find_plet_start_b(char c, Moment& moment_r)// b unused?
-{
- assert( c == ']' );
- moment_r += duration_;
- for ( PCursor<Request*> i( req_p_list_.top() ); i.ok(); i++ ) {
- if (i->beam() && i->beam()->spantype == Span_req::START )
- return true;
- }
- return false;
-}
void
Voice_element::set_default_group(String s)
add(greq);
}
-void
-Voice_element::set_plet_backwards(Moment& now_moment_r,
- Moment until_moment, int num_i, int den_i)
-{
- now_moment_r += duration_;
- if ( now_moment_r > until_moment )
- return;
- for ( PCursor<Request*> i( req_p_list_.top() ); i.ok(); i++ ) {
- if (i->beam() && i->beam()->spantype == Span_req::START )
- i->beam()->nplet = den_i;
- if (i->rhythmic()) {
- i->rhythmic()->duration_.plet_.type_i_ = den_i;
- i->rhythmic()->duration_.plet_.iso_i_ = num_i;
-
- }
- }
-}
elts_.top()->set_default_group(s);
}
-bool
-Voice::find_plet_start_b(char c, Moment& moment_r)
-{
- for (iter_bot(elts_, i); i.ok(); i--)
- if ( i->find_plet_start_b(c, moment_r) )
- return true;
- return false;
-}
-
-void
-Voice::set_plet_backwards(Moment& now_moment_r, Moment until_moment,
- int num_i, int den_i)
-{
- for (iter_bot(elts_, i); i.ok(); i--)
- if ( now_moment_r <= until_moment )
- i->set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
- else
- return;
-}
-
Voice::Voice(Voice const&src)
{
for (iter_top(src.elts_, i); i.ok(); i++)
# @configure_input@
INSTALL = @INSTALL@
-USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
+USER_CXXFLAGS =
+USER_LDFLAGS =
CXX = @CXX@
+ICFLAGS = @ICFLAGS@
+ILDFLAGS = @ILDFLAGS@
libdir = @libdir@
prefix = @prefix@
TEXPREFIX = @TEXPREFIX@
build = $(outdir)/.build
-all-tag-sources=$(CCFILES) $(HHFILES)
+all-tag-sources=$(CCFILES) $(HHFILES) $(TCCFILES)
rm -f $@
ln `find ${depth}/Documentation -name $@|head -1` .
+$(outdir)/%.xpm: %.gif
+ giftopnm $< | ppmtoxpm > $@
dummydep: $(DUMMYDEPS)
#
-# value of $(OSTYPE) on windhoos; "make $OSTYPE" if you use bash :-)
+# value of $(OSTYPE) on windhoos...; "make $OSTYPE" if you use bash :-)
#
-win32:
- $(MAKE) -C . CXX=g++
+win32: windows32 # win/lose?
+#
+windows32:
+ $(MAKE) -C . "CXX=g++ -D_WINDOWS32"
#
# xcompile to doze:
#
doze: dos
dos:
- $(MAKE) -C . CXX="gcc-go32 -I/usr/i386-go32/include -I/usr/i386-go32/include/g++ -D_WIN32 -Dcaddr_t=char* -DMAP_SHARED=0"
+ $(MAKE) -C . CXX="gcc-go32 -I/usr/i386-go32/include -I/usr/i386-go32/include/g++ -D_WINDOWS32 -Dcaddr_t=char* -DMAP_SHARED=0"
#
# target help:
@echo " all clean config dist distclean doc doc++"
@echo " exe help lib moduledist TAGS"
@echo " dos: xcomplile to dos"
- @echo " win32: native cygnus-win32 compile"
+ @echo " windows32: native cygnus-gnu compile"
#
doc:
TAGS:$(all-tag-sources)
ifdef all-tag-sources
- -etags -CT $(all-tag-sources) /dev/null
+ -etags -CT $(all-tag-sources) $(ERROR_LOG)
+ -ctags -CT $(all-tag-sources) $(ERROR_LOG)
endif
ifdef SUBDIRS
set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i TAGS ; done
# RedHat rpm package:
#
-rpm:
+rpm: $(doc-dir)/$(outdir)/lelie_icon.xpm
-cp $(depth)/lilypond-$(TOPLEVEL_VERSION).tar.gz $(rpm-sources)
- -cp $(doc-dir)/*.gif $(rpm-sources)
+ -cp $< $(rpm-sources)
$(MAKE) -C $(make-dir) spec
rpm -ba $(makeout)/lilypond.spec
#
$(INSTALL) -m 755 $(EXECUTABLES) $(bindir)
uninstallexe:
- for a in $(EXECUTABLES); do rm -f $(bindir)/`basename $a`; done
+ for a in $(EXECUTABLES); do rm -f $(bindir)/`basename $$a`; done
ifneq ($(DEPFILES),)
include $(DEPFILES)
# compile and link options:
#
ARFLAGS = ru
-CFLAGS = $(DEFINES) $(INCLUDES) $(USER_CFLAGS) $(EXTRA_CFLAGS)
+CFLAGS = $(ICFLAGS) $(DEFINES) $(INCLUDES) $(USER_CFLAGS) $(EXTRA_CFLAGS)
# added two warnings that are treated by cygwin32's gcc 2.7.2 as errors.
# huh, but still, no warnings even provoced with linux's gcc 2.7.2.1?
CXXFLAGS = $(CFLAGS) $(USER_CXXFLAGS) $(EXTRA_CXXFLAGS) $(MODULE_CXXFLAGS)
INCLUDES = -Iinclude -I$(outdir) -I$(include-lib) -I$(libout) -I$(include-flower) -I$(flowerout)
CXX_OUTPUT_OPTION = $< -o $@
-LDFLAGS = $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L$(depth)/lib/out -L$(depth)/flower/out
+LDFLAGS = $(ILDFLAGS) $(USER_LDFLAGS) $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L$(depth)/lib/out -L$(depth)/flower/out
LOADLIBES = $(EXTRA_LIBES) $(MODULE_LIBES) -lg++ # need lg++ for win32, really!
#
Begin3
Title: LilyPond
-Version: 0.0.66
-Entered-date: 05/28/97
+Version: 0.0.67
+Entered-date: 05/29/97
Description: LilyPond is a program which converts a music-script (mudela) into
TeX output, or MIDI to produce multi-staff scores. Features include multiple
meters, clefs, keys, lyrics, versatile input-language, cadenzas
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: pcnov095.win.tue.nl /pub/lilypond/
- 300k lilypond-0.0.66.tar.gz
+ 300k lilypond-0.0.67.tar.gz
Alternate-site:
Original-site:
Platform: unix/win32, GNU C++
Name: lilypond
-Version: 0.0.66
+Version: 0.0.67
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.66.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.67.tar.gz
Summary: A preprocessor to make TeX typeset music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
-Icon: lelie_icon.gif
+Icon: lelie_icon.xpm
Buildroot: /tmp/lilypond_build
%description
/usr/lib/texmf/texmf/tex/lilypond/
/usr/lib/texmf/texmf/fonts/source/lilypond/
/usr/share/lilypond/
-
%post
-echo please run texhash to update TeX directory listings
+echo please run texhash to update TeX directory listings 1>&2
Summary: A preprocessor to make TeX typeset music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
-Icon: lelie_icon.gif
+Icon: lelie_icon.xpm
Buildroot: /tmp/lilypond_build
%description
/usr/lib/texmf/texmf/tex/lilypond/
/usr/lib/texmf/texmf/fonts/source/lilypond/
/usr/share/lilypond/
-
%post
-echo please run texhash to update TeX directory listings
+echo please run texhash to update TeX directory listings 1>&2
IMPORTANT
+ * remove silly #warning using midi_voice list
+
+ * add mi2mu example output (.midi.ly and .gif) to website
+
* important? lily is important, go work on lily!
* faq about mi2mu midi t1. ?
*os_p_ << "% from input file: ";
*os_p_ << midi_parser_l_g->filename_str_;
*os_p_ << "\n\n";
- *os_p_ << "\\version \"0.0.57\";\n";
+ *os_p_ << "\\version \"0.0.58\";\n";
}
/*
snapnie: dit kan toch automaties? Zie ook dstream.
main( int argc_i, char* argv_sz_a[] )
{
Long_option_init long_option_init_a[] = {
- {0, "be-blonde", 'b'},
+ {0, "no-quantify", 'b'},
{0, "debug", 'd'},
{0, "help", 'h'},
{0, "no-silly", 'n'},
%
% A tex file to help determine dims.
%
-\font\musicfont=musixsps
+\font\musicfont=musix20
\font\slurfont=xslu16
\def\thefont{\musicfont}
\def\SkipLilydefs{}
\fi
\SkipLilydefs
-% should use \endinput
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% macros to shorten other definitions
\newdimen\smallspace
\newdimen\interlinedist
\newcount\n
-\newdimen\balkhoog
+\newdimen\balkheight
\newdimen\notewidth
\newdimen\noteheight
-\newdimen\notewidthhalf
-\newdimen\notewidthdouble
-\newdimen\notewidthquart
\newdimen\staffrulethickness
\newdimen\interstaffrule
-\newdimen\balkhalf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set fonts and primary dimensions
\font\italicfont=cmti10
\font\dynfont=cmbxti10 scaled \magstep1
\font\mathfont=cmsy10
- \balkhoog=20pt
+ \balkheight=20pt
\notewidth=6pt
\noteheight=5pt
\staffrulethickness=0.4pt
\font\dynfont=cmbxti12
\font\musicdraw=musixsps
\font\mathfont=cmsy8
- \balkhoog=16pt
+ \balkheight=16pt
\staffrulethickness=0.4pt
\notewidth=5pt
\noteheight=4pt
\def\musixcalc{
\interlinedist=\fontdimen5\musicfnt
\smallspace=.3\interlinedist
- \interstaffrule=\balkhoog
+ \interstaffrule=\balkheight
\divide\interstaffrule by 4
- \notewidthhalf=\notewidth
- \notewidthquart=\notewidth
- \notewidthdouble=\notewidth
- \rationalmultiply \notewidthhalf*1/2
- \rationalmultiply\notewidthquart*1/4
- \multiply \notewidthdouble by 2
- \balkhalf=\balkhoog
- \rationalmultiply\balkhalf*1/2
}
% dynamics take extra kerning
\def\dynfff{\dynff\kdynf}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% provide interface to musixtex fonts
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\mdef\quartball{'007}
-\mdef\halfball{'010}
-\mdef\wholeball{'011}
-\mdef\halfrest{'074}
-\mdef\wholerest{'075}
-\mdef\quartrest{62}
-\mdef\eighthrest{63}
-\mdef\sixteenthrest{64}
-\mdef\thirtysecondrest{65}
-\mdef\sixtyfourthrest{66}
-\mdef\hundredtwentyeighthrest{67}
-\mdef\sharp{52}
-\mdef\flat{50}
-\mdef\natural{54}
-\mdef\sharpsharp{53}
-\mdef\flatflat{51}
-
-\mdef\singledot{'00}
-\mdef\doubledot{'01}
-\mdef\tripledot{'02}
-\mdef\mussepline{155}
-
-\mdef\violinclef{71}
-\mdef\bassclef{73}
-\mdef\altoclef{75}
-\mdef\cviolinclef{72}
-\mdef\cbassclef{74}
-\mdef\caltoclef{76}
-
-\mdef\deighthflag{45}
-\mdef\dsixteenthflag{46}
-\mdef\dthirtysecondflag{47}
-\mdef\dsixtyfourthflag{48}
-\mdef\dhundredtwentyeighthflag{49}
-
-% pointing up
-\mdef\ueighthflag{40}
-\mdef\usixteenthflag{41}
-\mdef\uthirtysecondflag{42}
-\mdef\usixtyfourthflag{43}
-\mdef\uhundredtwentyeighthflag{44}
-
-\maccentdef\repeatcolon{55}{2/1}
-\def\eighthflag{\topalign{\ueighthflag}}
-\def\sixteenthflag{\topalign{\usixteenthflag}}
-\def\thirtysecondflag{\topalign{\uthirtysecondflag}}
-\def\sixtyfourthflag{\topalign{\usixtyfourthflag}}
-\def\hundredtwentyeighthflag{\topalign{\uhundredtwentyeighthflag}}
-
-\def\cquartrest{\vertcenter\quartrest}
-\def\ceighthrest{\vertcenter\eighthrest}
-\def\csixteenthrest{\vertcenter\sixteenthrest}
-\def\cthirtysecondrest{\vertcenter\thirtysecondrest}
-\def\csixtyfourthrest{\vertcenter\sixtyfourthrest}
-\def\chundredtwentyeighthrest{\vertcenter\hundredtwentyeighthrest}
-
-\def\lsingledot{\kern-\notewidth\singledot}
-\def\ldoubledot{\kern-\notewidth\doubledot}
-\def\ltripledot{\kern-\notewidth\tripledot}
-
-\maccentdef\sforzato{30}{-3/2}
-\maccentdef\marcato{20}{-1/1}
-\maccentdef\imarcato{21}{1/1}
-\maccentdef\staccato{24}{-1/3}
-\maccentdef\istaccato{25}{1/3}
-\maccentdef\staccatissimo{28}{-5/5}
-\maccentdef\istaccatissimo{29}{2/5}
-\maccentdef\portato{18}{-6/5}
-\maccentdef\iportato{19}{3/5}
-\maccentdef\tenuto{26}{-1/1}
-\maccentdef\itenuto{27}{1/1}
-\maccentdef\fermata{80}{-1/1}
-\maccentdef\ifermata{81}{1/1}
-
-\mdef\spicato{28}
-\mdef\ispicato{29}
-\mdef\upbow{23}
-\mdef\downbow{22}
+\input taupindefs
\mathdef\cup{91} % \cup
\mathdef\wedge{94} % \wedge
\mathdef\striepke{0} % heu?
%% custom characters --- this should go: add to (meta!) font
-\def\myheel{\kern-.5ex\vbox{\cup}\kern-.5ex}
-\def\mytoe{\kern-.5ex\vbox{\wedge}\kern-.5ex}
-\def\mystriepke{\kern-1.1ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.1ex}
+% \def\myheel{\kern-.5ex\vbox{\cup}\kern-.5ex}
+% \def\mytoe{\kern-.5ex\vbox{\wedge}\kern-.5ex}
+\def\myheel{\vbox{\cup}}
+\def\mytoe{\vbox{\wedge}}
+% \def\mystriepke{\kern-1.1ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.1ex}
+\def\mystriepke{\kern-1.8ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.8ex}
\def\heel{\vbox{\myheel}}
\def\toe{\vbox{\mytoe}}
\def\emptybar{}
-\def\thinbar{\vrule height\balkhoog width0.8pt} % TODO parametric.
-\def\thickbar{\vrule height\balkhoog width 2\smallspace}
+\def\thinbar{\vrule height\balkheight width 1.6\staffrulethickness} % TODO parametric.
+\def\thickbar{\vrule height\balkheight width 2\smallspace}
\def\maatstreep{\thinbar}
%? what-s wrong with rightalign?
\def\hslurcharu#1{{\hslurufont\char#1}}
\def\hslurchard#1{{\hslurdfont\char#1}}
% stacked numbers
-\def\generalmeter#1#2{\botalign{\vbox to\balkhalf{\vss \meterfont#1}%
+\def\generalmeter#1#2{\botalign{\vbox to0.5\balkheight{\vss \meterfont#1}%
\nointerlineskip
- \vbox to \balkhalf{\vss\meterfont #2}}}
+ \vbox to 0.5\balkheight{\vss\meterfont #2}}}
% stacked horizontal lines
-\def\lines#1#2{%
+\def\lines#1#2#3{%
\vbox{\kern-\interstaffrule
\n=0\nointerlineskip%
\loop\ifnum\n<#1\advance\n by1%
\kern\interstaffrule
\nointerlineskip
- \vbox to 0pt{\hrule height \staffrulethickness width#2%
+ \vbox to 0pt{\hrule height #3 width#2%
\vss}\nointerlineskip
\repeat
}}
% Ugh. Need to redo this. Wish we had PS.
%
\def\toplines#1{ % why space needed here?
- \topalign{\hbox{\kern-\notewidth\lines{#1}{\notewidthdouble}}}}
+ \topalign{\hbox{\kern-\notewidth\lines{#1}{1.6\notewidth}{1.6\staffrulethickness}}}}
\def\botlines#1{ % idem ditto
- \botalign{\hbox{\kern-\notewidth\lines{#1}{\notewidthdouble}}}}
+ \botalign{\hbox{\kern-\notewidth\lines{#1}{1.6\notewidth}{1.6\staffrulethickness}}}}
%
% a staffsymbol with #1 lines, width #2
% bottom at baseline
-\def\linestafsym#1#2{\leftalign{\botalign{\lines{#1}{#2}}}}
+\def\linestafsym#1#2{\leftalign{\botalign{\lines{#1}{#2}{\staffrulethickness}}}}
\def\stem#1#2{\vrule height#2 depth-#1}
--- /dev/null
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% provide interface to musixtex fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mdef\quartball{'007}
+\mdef\halfball{'010}
+\mdef\wholeball{'011}
+\mdef\halfrest{'074}
+\mdef\wholerest{'075}
+\mdef\quartrest{62}
+\mdef\eighthrest{63}
+\mdef\sixteenthrest{64}
+\mdef\thirtysecondrest{65}
+\mdef\sixtyfourthrest{66}
+\mdef\hundredtwentyeighthrest{67}
+\mdef\sharp{52}
+\mdef\flat{50}
+\mdef\natural{54}
+\mdef\sharpsharp{53}
+\mdef\flatflat{51}
+
+\mdef\singledot{'00}
+\mdef\doubledot{'01}
+\mdef\tripledot{'02}
+\mdef\mussepline{155}
+
+\mdef\violinclef{71}
+\mdef\bassclef{73}
+\mdef\altoclef{75}
+\mdef\cviolinclef{72}
+\mdef\cbassclef{74}
+\mdef\caltoclef{76}
+
+\mdef\deighthflag{45}
+\mdef\dsixteenthflag{46}
+\mdef\dthirtysecondflag{47}
+\mdef\dsixtyfourthflag{48}
+\mdef\dhundredtwentyeighthflag{49}
+
+% pointing up
+\mdef\ueighthflag{40}
+\mdef\usixteenthflag{41}
+\mdef\uthirtysecondflag{42}
+\mdef\usixtyfourthflag{43}
+\mdef\uhundredtwentyeighthflag{44}
+
+\maccentdef\repeatcolon{55}{2/1}
+\def\eighthflag{\topalign{\ueighthflag}}
+\def\sixteenthflag{\topalign{\usixteenthflag}}
+\def\thirtysecondflag{\topalign{\uthirtysecondflag}}
+\def\sixtyfourthflag{\topalign{\usixtyfourthflag}}
+\def\hundredtwentyeighthflag{\topalign{\uhundredtwentyeighthflag}}
+
+\def\cquartrest{\vertcenter\quartrest}
+\def\ceighthrest{\vertcenter\eighthrest}
+\def\csixteenthrest{\vertcenter\sixteenthrest}
+\def\cthirtysecondrest{\vertcenter\thirtysecondrest}
+\def\csixtyfourthrest{\vertcenter\sixtyfourthrest}
+\def\chundredtwentyeighthrest{\vertcenter\hundredtwentyeighthrest}
+
+\def\lsingledot{\kern-\notewidth\singledot}
+\def\ldoubledot{\kern-\notewidth\doubledot}
+\def\ltripledot{\kern-\notewidth\tripledot}
+
+\maccentdef\sforzato{30}{-3/2}
+\maccentdef\marcato{20}{-1/1}
+\maccentdef\imarcato{21}{1/1}
+\maccentdef\staccato{24}{-1/3}
+\maccentdef\istaccato{25}{1/3}
+\maccentdef\staccatissimo{28}{-5/5}
+\maccentdef\istaccatissimo{29}{2/5}
+\maccentdef\portato{18}{-6/5}
+\maccentdef\iportato{19}{3/5}
+\maccentdef\tenuto{26}{-1/1}
+\maccentdef\itenuto{27}{1/1}
+\maccentdef\fermata{80}{-1/1}
+\maccentdef\ifermata{81}{1/1}
+
+\mdef\spicato{28}
+\mdef\ispicato{29}
+\mdef\upbow{23}
+\mdef\downbow{22}