# yydebug
InitParser 1
Parser 1
-InitDeclarations 1
+InitDeclarations 0
Declarations 1
# FlexLexer debug
InitLexer 1
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 71
+TOPLEVEL_PATCH_LEVEL = 72
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
changes, cadenza-mode, key changes, repeat bars
[Kudos to the FSF, all linux hackers, and --of course-- especially
-GrandMaster Linus T, for the OS-kernel and The Announce :-]
+GrandMaster Linus T, for The Kernel and The Announce :-]
Han-Wen Nienhuys <hanwen@stack.nl>
Jan Nieuwenhuizen <jan@digicash.com>
-30/Jun/97 LilyPond 0.0.71 1
+30/Jun/97 LilyPond 0.0.72 1
+++ /dev/null
-This file documents bugs which were "re-introduced" in various pl's
-
-pl 70
- * r^"simile"
-
-
-pl69
- * scales.ly
-
- * slurs.ly
-
-pl68:
- * opening rests wohltemperirt
-
- * lyrics broken,
-
- * midi broken
=item *
The MusixTeX fonts. (I use those found in MusixTeX T.59). Beware, the
-clef symbol has changed position in recent versions of MusixTeX)
+clef symbol has changed position in the Egler version, aka. OpusTeX)
=back
This is what the output looks like over here:
- hw:~/musix/spacer$ GNU LilyPond 0.0.60 #8/FlowerLib 1.1.14 #2
- Parsing ... [./input/kortjakje.ly[lots of stuff]]
- Setting up requests...Processing requests ...[8][16][24][25]
+ hw:~/musix/spacer$ lilypond input/kortjakje.ly
+ GNU LilyPond 0.0.71 #20/FlowerLib 1.1.20 #0
+ Parsing ... [/home/hw/share/lilypond/init//symbol.ini <..snip..>
+ .. .ini]][input/kortjakje.ly]
+ Creating elements ...
Preprocessing elements...
- Calculating column positions ... [3][7][12][16][20][25]
+ Calculating column positions ... [3][8][13][17][21][25]
Postprocessing elements...
TeX output to lelie.tex ...
Requests are processed and used to create elements (like balls, stems,
slurs etc). This is done by a hierarchy of "brokers" (called
-Register), which swallow requests, broadcast them and couple different
-elements.
+Translators: the ones for paper output are Engravers, for MIDI
+Performers), which swallow requests, broadcast them and couple
+different elements.
In this step data-structures for the next steps are created and filled
with data: PScore, PCol.
Voice group is a (time-dependent) collection of voices which share
some characteristics (slurs, stems) at some time.
-=head1 Request_register
+=head1 Request_engraver
In the previous section the idea of Request has been explained, but
this only solves one half of the problem. The other half is
should not be shared.
The judge in this "allocation" problem is Staff (actually, it's child
-C<Complex_staff>). It uses the C<Request_register> to do most of the
+C<Complex_staff>). It uses the C<Request_engraver> to do most of the
work. For each request C<Complex_staff> queries so-called
-C<Request_register>s if they want to accept a request eg, the
-C<Notehead_register> will accept C<Note_req>s, and turn down
-C<Slur_req>s. If C<Complex_staff> cannot find a register that wants
+C<Request_engraver>s if they want to accept a request eg, the
+C<Notehead_engraver> will accept C<Note_req>s, and turn down
+C<Slur_req>s. If C<Complex_staff> cannot find a engraver that wants
the request, it is junked (with a warning message).
-After all requests have been either assigned, or junked, the Register
+After all requests have been either assigned, or junked, the Engraver
will process the requests (which usually means creating an C<Item> or
-C<Spanner>). If a C<Request_register> creates something, it tells
+C<Spanner>). If a C<Request_engraver> creates something, it tells
C<Complex_staff>. If all requests have been processed, then each
-Register is notified of any created Staff_element.
+Engraver is notified of any created Staff_element.
=head2 example:
note_request (duration 1/4)
stem_request (duration 1/4)
-note_request will be taken by a C<Notehead_register>, stem_request
-will be taken by a C<Stem_beam_register>. C<Notehead_register> creates
-a C<Notehead>, C<Stem_beam_register> creates a C<Stem>. Both announce
-this to the Staff. Staff will tell C<Stem_beam_register> about the
+note_request will be taken by a C<Notehead_engraver>, stem_request
+will be taken by a C<Stem_beam_engraver>. C<Notehead_engraver> creates
+a C<Notehead>, C<Stem_beam_engraver> creates a C<Stem>. Both announce
+this to the Staff. Staff will tell C<Stem_beam_engraver> about the
C<Notehead>, which will add the C<Notehead> to the C<Stem> it just
created.
To decide on merging, C<Complex_staff> has grouped several
-registers. There are a few groups:
+engravers. There are a few groups:
=over 4
Staff wide, contains
- Local_key_register
- Bar_register
- Key_register
- Meter_register
- Clef_register
+ Local_key_engraver
+ Bar_engraver
+ Key_engraver
+ Meter_engraver
+ Clef_engraver
=item *
Voice group, contains
- Stem_beam_register
- Script_register
- Text_register
+ Stem_beam_engraver
+ Script_engraver
+ Text_engraver
=item *
Voice, contains
- Slur_register
- Notehead_register
+ Slur_engraver
+ Notehead_engraver
=back
A Notation editor/Sequencer for X (win95 port underway). Outputs musictex.
-Common Notation, ftp://ccrma-ftp.stanford.edu/pub/Lisp
+Common Notation, http://www-ccrma.stanford.edu/ccrma/Software/cmn/cmn.html
A versatile lisp package. Part of the Common Music system. Input is in Lisp.
-Vivace, http://
+Vivace, http://www.calband.berkeley.edu/~gmeeker/vivace
-A amateurish notation program for TclTk and X
+A amateurish notation program for TclTk and X.
MPP, http://www.stack.nl/~hanwen/mpp-english.html
A preprocessor to MusixTeX by Jan Nieuwenhuizen and Han-Wen Nienhuys.
It is outdated by its successor, LilyPond.
-Music, http://
+Music, http://www.cs.nott.ac.uk/Departement/Staff/ef/printing.html
A TROFF preprocessor by Eric Foxley
-MusicEase, ftp://ftp.secret.com/ad-ftp
-
-Described in Computer vol 29(6)
-
MusE
A-R Music Engraving, by A-R Editions, Inc. Professional engraving on
Mup, http://www.arkkra.com/
A program which creates PS from a script input. Although it comes with
-C source code, it is Shareware ($ 29).
+C source code, it is Shareware.
PMX, http://www.gmd.de/Misc/Music/
A preprocessor to MusixTeX by Chris Walshaw for way of transcribing folk
and traditional music.
-SceX
+SceX http://www.ncc.up.pt/~mig/SceX.html
A preprocessor to MusixTeX by Miguel Filgueiras. Source in prolog
available on request. (?)
Calliope, http://www.cl.cam.ac.uk/users/wfc/
-A NeXT package by William F Clocksin. Requires Adobe fonts
+A NeXT package by William F Clocksin. Requires Adobe fonts.
=head2 Proprietary
+MusicEase, http://mesa.colorado.edu/~grader/musicez.html
+
+Described in Computer vol 29(6). Shareware
+
LIME, http://datura.cerl.uiuc.edu/
Sibelius, http://www.acorn.co.uk/developers/sibelius
Personal Composer
-Mozart,
+Mozart, http://www.mozart.co.uk/
-A shareware windows package,
+A shareware windows package
Capella
-28/May/97 LilyPond 0.0.71 1
+3/Jul/97 LilyPond 0.0.72 1
-28/May/97 LilyPond 0.0.71 2
+3/Jul/97 LilyPond 0.0.72 2
-28/May/97 LilyPond 0.0.71 3
+3/Jul/97 LilyPond 0.0.72 3
+\bo The MusixTeX fonts. (I use those found in MusixTeX
T.59). Beware, the clef symbol has changed position
- in recent versions of MusixTeX)
+ in the Egler version, aka. OpusTeX)
At this time, GNU LilyPond output looks nice, but is not
of production quality. If you're not discouraged; this is
This is what the output looks like over here:
- hw:~/musix/spacer$ GNU LilyPond 0.0.60 #8/FlowerLib 1.1.14 #2
- Parsing ... [./input/kortjakje.ly[lots of stuff]]
- Setting up requests...Processing requests ...[8][16][24][25]
+ hw:~/musix/spacer$ lilypond input/kortjakje.ly
+ GNU LilyPond 0.0.71 #20/FlowerLib 1.1.20 #0
+ Parsing ... [/home/hw/share/lilypond/init//symbol.ini <..snip..>
+ .. .ini]][input/kortjakje.ly]
+ Creating elements ...
Preprocessing elements...
- Calculating column positions ... [3][7][12][16][20][25]
+ Calculating column positions ... [3][8][13][17][21][25]
Postprocessing elements...
TeX output to lelie.tex ...
create an rpm as a normal user. Be sure you have a
~/.rpmrc, and edit the RPM-dir in _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b._\bm_\ba_\bk_\be
-W\bW\bW\bWI\bI\bI\bIN\bN\bN\bND\bD\bD\bDO\bO\bO\bOZ\bZ\bZ\bZE\bE\bE\bE
- Windows NT:
-28/May/97 LilyPond 0.0.71 4
+3/Jul/97 LilyPond 0.0.72 4
INSTALL(1) LilyPond documentation INSTALL(1)
+W\bW\bW\bWI\bI\bI\bIN\bN\bN\bND\bD\bD\bDO\bO\bO\bOZ\bZ\bZ\bZE\bE\bE\bE
+ Windows NT:
+
you need the cygnus windows32 gnu port development stuff;
have a look at http://www.cygnus.com/gnu-win32.
-
-
-
-28/May/97 LilyPond 0.0.71 5
+3/Jul/97 LilyPond 0.0.72 5
+july 2
+pl 72pre
+ - paper{} syntax: var = 1.0\pt;, with an Assoc array
+ - sketch of MIDI Performer classes.
+ - bf: memleak in parser
+ - naming: Acceptor -> Translator
+ - input: bf collisions.ly, scales.ly
+ - bf: [r8 c8]
+ - naming: Register -> Engraver
+ - force \\ on identifiers
+ - doco updates
+ - musixtex T73 fonts
+
+pl 70.mb
+ - bf: find syntax in Variables.make
+*****
+july 1
pl 71pre
+ - nested \melodic and \lyric constructs
- init id's, Input_register aliases.
- bf: notehead x-swap
- bf: auto-keys.
******
june 30
+
+
pl 70pre
- bf: text Script
- bf: Script::dir_i_ checks.
- accumulate \kern in TeX output.
- bf: try to prevent long lines; TeX breaks on them.
- naming: Pointer->Link, IPointer->Pointer
- - undocced fix (MB)
+ - bf: \plet didn't work (MB)
- GMP manifesto.
pl 61.jcn4
- separate visual from rhythmic info even more
- beams over bars
- * Redo MIDI output to use Registers: (Difficult)
+ * Redo MIDI output to use Translators
- remember more horizontal info than melodics:
- tempo change
- repeat
read AFM/TFM directly, for text too)
* lines:
- - Ledger lines, should be separate item: Ledger_lines, Ledger_lines_reg
+ - Ledger lines, should be separate item: Ledger_lines, Ledger_lines
- set different line sizes / thicknesses
- stem down too far right
- beam stem showthrough, inter beam sizes (french vs german style)
* use an embedded language: Python
for:
- Score_elems
- - Registers
+ - Engraver
+ - Translators
- Complex mudela?
* y -dims in internote?
* move towards incremental algorithms.
+
+ * design meta-language like TeX and Metafont
s/\[ *([^\[\]]*)\] *([1-9]*) *\/ *([1-9]*)/[$2\/$3 $1]1\/1/g;
}
-sub convert_0_0_58_to_0_0_58
+sub convert_0_0_58_to_0_0_59
{
die "Not smart enough to convert 0.0.58 to 0.0.59\n";
}
s/(\\tempo [0-9: ]+)/$1;/;
}
+sub convert_0_0_60_to_0_0_61
+{
+ s/(\\unitspace|\\geometric|\\width)/$1=/g;
+
+}
+
###############################################################
sub last_conversion
"0.0.57" => \&convert_0_0_56_to_0_0_57,
"0.0.58" => \&convert_0_0_57_to_0_0_58,
"0.0.59" => \&convert_0_0_58_to_0_0_59,
- "0.0.60" => \&convert_0_0_59_to_0_0_60
+ "0.0.60" => \&convert_0_0_59_to_0_0_60,
+ "0.0.61" => \&convert_0_0_60_to_0_0_61
);
function setversion() {
eval `sed -n 's/^\([A-Z_]*\) *= *\(.*\)$/\1=\2/p' .version`
+
MJ=$TOPLEVEL_MAJOR_VERSION
MI=$TOPLEVEL_MINOR_VERSION
PA=$TOPLEVEL_PATCH_LEVEL
MP=$TOPLEVEL_MY_PATCH_LEVEL
NEWVER=$MJ.$MI.$PA$MP
-if [ -z $MP -o x$MP = xpre ]
+if [ x$MP = x -o x$MP = xpre ]
then
LASTVER=$MJ.$MI.`expr $PA - 1`
heredir=`pwd`
releasedir=`pwd`/../releases
patchdir=`pwd`/../patches
-make dist;
+MAKE=${MAKE:-"make"}
+TAR=${TAR:-"tar"}
+
+
+$MAKE dist;
setversion
LILYVER=$NEWVER
if [ ! -z "$RPMS" ]; then
RPMS="lilypond-$LILYVER-1.i386.rpm lilypond-$LILYVER-1.src.rpm"
fi
-tar cf updeet $tarball $patch $RPMS
-tar tfv updeet
+$TAR cf updeet $tarball $patch $RPMS
+$TAR tfv updeet
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-for ac_prog in find
+for ac_prog in tar
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:898: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_TAR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$TAR"; then
+ ac_cv_prog_TAR="$TAR" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_TAR="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+TAR="$ac_cv_prog_TAR"
+if test -n "$TAR"; then
+ echo "$ac_t""$TAR" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$TAR" && break
+done
+test -n "$TAR" || TAR="error"
+
+for ac_prog in find
+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:932: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:952: checking for $ac_word" >&5
+echo "configure:986: 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:986: checking for $ac_word" >&5
+echo "configure:1020: 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:1020: checking for $ac_word" >&5
+echo "configure:1054: 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:1054: checking for $ac_word" >&5
+echo "configure:1088: 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:1090: checking TeX/MF root dir directory" >&5
+echo "configure:1124: checking TeX/MF root dir directory" >&5
find_root_prefix="$prefix"
echo $ac_n "checking TeX input directory""... $ac_c" 1>&6
-echo "configure:1128: checking TeX input directory" >&5
+echo "configure:1162: 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:1150: checking MF input directory" >&5
+echo "configure:1184: 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:1206: checking how to run the C++ preprocessor" >&5
+echo "configure:1240: 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 1219 "configure"
+#line 1253 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1258: \"$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:1244: checking for FlexLexer.h" >&5
+echo "configure:1278: 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 1249 "configure"
+#line 1283 "configure"
#include "confdefs.h"
#include <FlexLexer.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1288: \"$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%@RANLIB@%$RANLIB%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@TAR@%$TAR%g
s%@FIND@%$FIND%g
s%@ICFLAGS@%$ICFLAGS%g
s%@ILDFLAGS@%$ILDFLAGS%g
eval "DIR_DATADIR=$datadir"
DIR_DATADIR="$DIR_DATADIR/lilypond"
echo $ac_n "checking ""... $ac_c" 1>&6
-echo "configure:1656: checking " >&5
+echo "configure:1691: checking " >&5
cat << EOF > lib/out/config.hh
AC_PROG_CXX
AC_PROG_RANLIB
AC_PROG_INSTALL
+AC_CHECK_PROGS(TAR, tar, error)
AC_CHECK_PROGS(FIND, find, error)
dnl should check out -print
MAJOR_VERSION = 1
MINOR_VERSION = 1
-PATCH_LEVEL = 20
+PATCH_LEVEL = 21
# use to send patches, always empty for released version:
MY_PATCH_LEVEL = # include separator: "-1" or ".a"
#
version 1.1:
+
+pl 21:
+pl 20.mb
+ - bf: Warning about NPRINT only if debugging requested.
+
pl 20
- List::junk_links()
pl 19
void set_flower_debug(Dstream&ds, bool b)
{
#ifdef NPRINT
- cout << "Debug printout disabled, see the installation guide." << endl;
+ if (b)
+ cout << "Debug printout disabled, see the installation guide." << endl;
#endif
flower_check_debug = b;
flower_dstream = &ds;
--- /dev/null
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+\requestengraver {
+ "Score_engraver"
+ \alias "Score";
+% \consists "Score_bar_engraver";
+ \consists "Bar_align_engraver";
+ \consists "Clef_align_engraver";
+ \consists "Key_align_engraver";
+ \consists "Meter_align_engraver";
+ \consists "Score_horizontal_align_engraver";
+
+ \contains\requestengraver {
+ "Staff_engravers"
+ \alias "Staff";
+ \consists "Bar_engraver";
+ \consists "Clef_engraver";
+ \consists "Key_engraver";
+ \consists "Meter_engraver";
+ \consists "Local_key_engraver";
+ \consists "Staff_sym_engraver";
+ \consists "Collision_engraver";
+ \consists "Rest_collision_engraver";
+ \contains \requestengraver {
+ "Voice_group_engravers"
+ \alias "Voice_group";
+ \consists "Dynamic_engraver";
+ \consists "Stem_beam_engraver";
+ \consists "Script_engraver";
+ \consists "Note_column_engraver";
+ \consists "Slur_engraver";
+ \contains \requestengraver {
+ "Voice_engravers"
+ \alias "Voice";
+ \consists "Note_head_engraver" ;
+ \consists "Tie_engraver";
+ }
+ }
+ }
+
+ \contains\requestengraver {
+ "Staff_engravers"
+ \alias "Lyric";
+ \contains\requestengraver{
+ "Voice_group_engravers"
+ \alias "Voice_group";
+ \contains\requestengraver{
+ "Voice_engravers"
+ \consists "Lyric_engraver";
+ \consists "Swallow_engraver";
+ }
+ }
+ }
+}
+
+
+
--- /dev/null
+
+ [todo]
+ * runtime
+
+%{ "french" style: interbeam = intenote;
+ "german" style: interbeam = 2/3 * interline
+%}
+ as lily's style is currently german, we'll hardcode german style
+ */
+ // it seems that "interline" means _between_ lines
+// return ball(4).dim.y.length() * 2 / 3;
+ return ball(4).dim.y.length() * 2 / 3 + 0.4; //ugh
+}
+\include "table_sixteen.ini"
+
+default_paper = paper {
+ linewidth = 15 \cm;
+ rule_thickness = 0.4\pt;
+ interline = 4\pt;
+ notewidth = 4\pt;
+ interbeam = 7\pt;
+ \symboltables { \table_sixteen }
+}
--- /dev/null
+
+\include "table16.ini"
+
+default_paper = \paper {
+ linewidth = 15.0 \cm;
+ rule_thickness = 0.4\pt;
+ interline = 4.\pt;
+ notewidth = 4.0\pt;
+ wholewidth = 5.\pt;
+ unitspace = 30.\pt;
+
+ %
+ interbeam = 2.667\pt;
+ geometric = 1.414;
+ \symboltables { \table_sixteen }
+}
+++ /dev/null
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-\requestregister {
- "Score_register"
- \alias "Score";
-% \consists "Score_bar_register";
- \consists "Bar_align_register";
- \consists "Clef_align_register";
- \consists "Key_align_register";
- \consists "Meter_align_register";
- \consists "Score_horizontal_align_register";
-
- \contains\requestregister {
- "Staff_registers"
- \alias "Staff";
- \consists "Bar_register";
- \consists "Clef_register";
- \consists "Key_register";
- \consists "Meter_register";
- \consists "Local_key_register";
- \consists "Staff_sym_register";
- \consists "Collision_register";
- \consists "Rest_collision_register";
- \contains \requestregister {
- "Voice_group_registers"
- \alias "Voice_group";
- \consists "Dynamic_register";
- \consists "Stem_beam_register";
- \consists "Script_register";
- \consists "Note_column_register";
- \consists "Slur_register";
- \contains \requestregister {
- "Voice_registers"
- \alias "Voice";
- \consists "Note_head_register" ;
- \consists "Tie_register";
- }
- }
- }
-
- \contains\requestregister {
- "Staff_registers"
- \alias "Lyric";
- \contains\requestregister{
- "Voice_group_registers"
- \alias "Voice_group";
- \contains\requestregister{
- "Voice_registers"
- \consists "Lyric_register";
- \consists "Swallow_register";
- }
- }
- }
-}
-
-
-
-\version "0.0.60";
+\version "0.0.61";
-\include "register.ini"
+\include "engraver.ini"
\include "dynamic.ini"
\include "dutch.ini" % do not include init/ path
\include "script.ini"
-\include "table_sixteen.ini"
+\include "paper16.ini"
--- /dev/null
+%
+% spacing info for LilyPond. Do not edit this if you're not a guru.
+% It has a lot of hard-wired stringconstants
+%
+
+
+table_sixteen=
+\symboltables {
+
+ \texid "\input lilyponddefs \musixsixteendefs"
+
+ % index TeXstring, xmin xmax ymin ymax
+
+ "scripts" = \table {
+ "fermata" "\fermata" 0.0\pt 0.0\pt 0.0\pt 6.0\pt
+ "-fermata" "\ifermata" 0.0\pt 0.0\pt -6.0\pt 0.0\pt
+ "portato" "\portato" 0.0\pt 4.0\pt 0.0\pt 2.0\pt
+ "-portato" "\iportato" 0.0\pt 4.0\pt -2.0\pt 0.0\pt
+ "tenuto" "\tenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
+ "-tenuto" "\itenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
+ "sforzato" "\sforzato" -0.8\pt 4.0\pt -1.92\pt 1.92\pt
+ "marcato" "\marcato" 0.0\pt 4.0\pt 0.0\pt 4.0\pt
+ "-marcato" "\imarcato" 0.0\pt 4.0\pt -4.0\pt 0.0\pt
+ "staccato" "\staccato" 0.0\pt 0.0\pt -1.1\pt 1.1\pt
+ "staccatissimo" "\staccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
+ "-staccatissimo" "\istaccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
+ "upbow" "\upbow" -1.0\pt 6.0\pt 0.0\pt 5.0\pt
+ "downbow" "\downbow" 0.0\pt 5.0\pt 0.0\pt 7.5\pt
+ "back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
+ "-front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
+ "heel" "\heel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "toe" "\toe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "bheel" "\bheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "btoe" "\btoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "fheel" "\fheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "ftoe" "\ftoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
+ "-back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
+ "front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
+ }
+
+ "style" = \table {
+ "roman" "\settext{%}" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
+ "italic" "\setitalic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
+ "dynamic" "\setdynamic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
+ }
+ "dynamics" = \table {
+
+ "mf" "\dynmf"
+ "fff" "\dynfff"
+ "ff" "\dynff"
+ "f" "\dynf"
+ "mp" "\dynmp"
+ "p" "\dynp"
+ "pp" "\dynpp"
+ "ppp" "\dynppp"
+
+ }
+ "align" = \table {
+ "-1" "\leftalign{%}"
+ "0" "\centeralign{%}"
+ "1" "\rightalign{%}"
+ }
+
+ "clefs" = \table {
+ "violin" "\violinclef" 0.0\pt 12.8\pt -10.0\pt 18.0\pt
+ "bass" "\bassclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
+ "alto" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
+ "tenor" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
+ "violin_change" "\cviolinclef" 0.0\pt 11.2\pt -12.0\pt 12.0\pt
+ "bass_change" "\cbassclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
+ "alto_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
+ "tenor_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
+ }
+
+ "balls" = \table {
+ "1" "\wholeball" 0.0\pt 6.0\pt -2.0\pt 2.0\pt
+ "2" "\halfball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
+ "4" "\quartball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
+ }
+
+ "slur" = \table {
+ "whole" "\slurchar%{%}"
+ "half" "\hslurchar%{%}"
+ }
+ "accidentals" = \table {
+ "-2" "\flatflat" 0.0\pt 8.16\pt -2.5\pt 7.5\pt
+ "-1" "\flat" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
+ "0" "\natural" 0.0\pt 4.8\pt -7.5\pt 7.5\pt
+ "1" "\sharp" 0.0\pt 3.6\pt -7.5\pt 7.5\pt
+ "2" "\sharpsharp" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
+ }
+
+ "streepjes" = \table {
+ "toplines" "\toplines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
+ "botlines" "\botlines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
+ }
+
+ "bars" = \table {
+ "empty" "\emptybar"
+ "|" "\maatstreep" 0.0\pt 0.64\pt -8.0\pt 8.0\pt
+ "||" "\doublebar" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
+ "|." "\finishbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
+ ":|" "\repeatbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
+ "|:" "\startrepeat" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
+ ":|:" "\repeatbarstartrepeat" 0.0\pt 16.0\pt -8.0\pt 8.0\pt
+
+ }
+
+ "rests" = \table {
+ "1o" "\outsidewholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
+ "1" "\wholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
+ "2" "\halfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
+ "2o" "\outsidehalfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
+ "4" "\quartrest" -5.0\pt 2.0\pt -5.0\pt 5.0\pt
+ "8" "\eighthrest" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
+ "16" "\sixteenthrest" 0.0\pt 6.0\pt 0.0\pt 12.0\pt
+ "32" "\thirtysecondrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
+ "64" "\sixtyfourthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
+ "128" "\hundredtwentyeighthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
+ }
+
+ "meters" = \table {
+ "C" "\fourfourmeter" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
+ "C2" "\allabreve" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
+ }
+
+ % dims ignored for this table
+ "param" = \table {
+ "meter" "\generalmeter{%}{%}" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
+ "linestaf" "\linestafsym{%}{%}"
+ "stem" "\stem{%}{%}"
+ "fill" "\hbox{}"
+ % ugh. 8pt
+ "crescendosym" "\crescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
+ "decrescendosym" "\decrescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
+ }
+
+ "dots" = \table {
+ "1" "\lsingledot" 0.0\pt 2.0\pt -1.0\pt 1.0\pt
+ "2" "\ldoubledot" 0.0\pt 5.0\pt -1.0\pt 1.0\pt
+ "3" "\ltripledot" 0.0\pt 8.0\pt -1.0\pt 1.0\pt
+ }
+
+ "flags" = \table {
+ "8" "\eighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "16" "\sixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "32" "\thirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "64" "\sixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "128" "\hundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "-8" "\deighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "-16" "\dsixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "-32" "\dthirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "-64" "\dsixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ "-128" "\dhundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
+ }
+
+ "beamslopes" = \table {
+ "slope" "\beamslope{%}{%}"
+ "horizontal" "\rulesym{%}{%}"
+ }
+
+}
+
+++ /dev/null
-%
-% spacing info for LilyPond. Do not edit this if you're not a guru.
-% It has a lot of hard-wired stringconstants
-%
-
-
-table_sixteen=
-\symboltables {
-
- \texid "\input lilyponddefs \musixsixteendefs"
-
- % index TeXstring, xmin xmax ymin ymax
-
- "scripts" = \table {
- "fermata" "\fermata" 0.0\pt 0.0\pt 0.0\pt 6.0\pt
- "-fermata" "\ifermata" 0.0\pt 0.0\pt -6.0\pt 0.0\pt
- "portato" "\portato" 0.0\pt 4.0\pt 0.0\pt 2.0\pt
- "-portato" "\iportato" 0.0\pt 4.0\pt -2.0\pt 0.0\pt
- "tenuto" "\tenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
- "-tenuto" "\itenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
- "sforzato" "\sforzato" -0.8\pt 4.0\pt -1.92\pt 1.92\pt
- "marcato" "\marcato" 0.0\pt 4.0\pt 0.0\pt 4.0\pt
- "-marcato" "\imarcato" 0.0\pt 4.0\pt -4.0\pt 0.0\pt
- "staccato" "\staccato" 0.0\pt 0.0\pt -1.1\pt 1.1\pt
- "staccatissimo" "\staccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
- "-staccatissimo" "\istaccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
- "upbow" "\upbow" -1.0\pt 6.0\pt 0.0\pt 5.0\pt
- "downbow" "\downbow" 0.0\pt 5.0\pt 0.0\pt 7.5\pt
- "back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "-front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "heel" "\heel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "toe" "\toe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "bheel" "\bheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "btoe" "\btoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "fheel" "\fheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "ftoe" "\ftoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "-back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- }
-
- "style" = \table {
- "roman" "\settext{%}" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
- "italic" "\setitalic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
- "dynamic" "\setdynamic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
- }
- "dynamics" = \table {
-
- "mf" "\dynmf"
- "fff" "\dynfff"
- "ff" "\dynff"
- "f" "\dynf"
- "mp" "\dynmp"
- "p" "\dynp"
- "pp" "\dynpp"
- "ppp" "\dynppp"
-
- }
- "align" = \table {
- "-1" "\leftalign{%}"
- "0" "\centeralign{%}"
- "1" "\rightalign{%}"
- }
-
- "clefs" = \table {
- "violin" "\violinclef" 0.0\pt 12.8\pt -10.0\pt 18.0\pt
- "bass" "\bassclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "alto" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "tenor" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "violin_change" "\cviolinclef" 0.0\pt 11.2\pt -12.0\pt 12.0\pt
- "bass_change" "\cbassclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- "alto_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- "tenor_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- }
-
- "balls" = \table {
- "1" "\wholeball" 0.0\pt 6.0\pt -2.0\pt 2.0\pt
- "2" "\halfball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
- "4" "\quartball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
- }
-
- "slur" = \table {
- "whole" "\slurchar%{%}"
- "half" "\hslurchar%{%}"
- }
- "accidentals" = \table {
- "-2" "\flatflat" 0.0\pt 8.16\pt -2.5\pt 7.5\pt
- "-1" "\flat" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
- "0" "\natural" 0.0\pt 4.8\pt -7.5\pt 7.5\pt
- "1" "\sharp" 0.0\pt 3.6\pt -7.5\pt 7.5\pt
- "2" "\sharpsharp" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
- }
-
- "streepjes" = \table {
- "toplines" "\toplines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
- "botlines" "\botlines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
- }
-
- "bars" = \table {
- "empty" "\emptybar"
- "|" "\maatstreep" 0.0\pt 0.64\pt -8.0\pt 8.0\pt
- "||" "\doublebar" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
- "|." "\finishbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
- ":|" "\repeatbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
- "|:" "\startrepeat" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
- ":|:" "\repeatbarstartrepeat" 0.0\pt 16.0\pt -8.0\pt 8.0\pt
-
- }
-
- "rests" = \table {
- "1o" "\outsidewholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
- "1" "\wholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
- "2" "\halfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
- "2o" "\outsidehalfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
- "4" "\quartrest" -5.0\pt 2.0\pt -5.0\pt 5.0\pt
- "8" "\eighthrest" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
- "16" "\sixteenthrest" 0.0\pt 6.0\pt 0.0\pt 12.0\pt
- "32" "\thirtysecondrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- "64" "\sixtyfourthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- "128" "\hundredtwentyeighthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- }
-
- "meters" = \table {
- "C" "\fourfourmeter" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- "C2" "\allabreve" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- }
-
- % dims ignored for this table
- "param" = \table {
- "meter" "\generalmeter{%}{%}" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- "linestaf" "\linestafsym{%}{%}"
- "stem" "\stem{%}{%}"
- "fill" "\hbox{}"
- % ugh. 8pt
- "crescendosym" "\crescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
- "decrescendosym" "\decrescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
- }
-
- "dots" = \table {
- "1" "\lsingledot" 0.0\pt 2.0\pt -1.0\pt 1.0\pt
- "2" "\ldoubledot" 0.0\pt 5.0\pt -1.0\pt 1.0\pt
- "3" "\ltripledot" 0.0\pt 8.0\pt -1.0\pt 1.0\pt
- }
-
- "flags" = \table {
- "8" "\eighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "16" "\sixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "32" "\thirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "64" "\sixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "128" "\hundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-8" "\deighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-16" "\dsixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-32" "\dthirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-64" "\dsixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-128" "\dhundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- }
-
- "beamslopes" = \table {
- "slope" "\beamslope{%}{%}"
- "horizontal" "\rulesym{%}{%}"
- }
-
-}
-default_table = \symboltables { table_sixteen }
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
cad = \melodic {
\melodic{ \cad }
\paper {
- \unitspace 14.0\mm;
- \geometric 1.4;}
+ unitspace= 14.0\mm;
+ geometric= 1.4;
+ }
% \midi { \tempo 4:90 }
}
Tested Features:test the Collision resolution
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
}
{ \stem -1;
[c8 d e f] [g a b c']
- r r r r r r r r r
+ r r r r r r r r
}
>
{ \stem 1; r r r r r r r r r r r r }
{ \stem -1; c d e f g a b c' d' e' f' g' }
>
- r8
+ r8 r4
< \multi2; r8 r8 >
< \multi2; r8 r8 r8 >
< \multi2; r8 r8 r8 r8 >
Tested Features:
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
Tested Features: example file with comments
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
% the % is a comment.
\melodie
\begeleiding
>
- \paper{
- \unitspace 2.5\cm; % a whole note takes 2.5 \cm ideally.
- }
}
%}
-\version "0.0.60";
+\version "0.0.61";
\score{
\melodic
% scales with accents.
%
-\version "0.0.60";
+\version "0.0.61";
blah = \melodic {
\meter 6/8;
\octave 'c ;
\octave c' ;
\transpose d { e f }
\octave c'' ;
- c d
- \duration 8 ;
+ c4. d
%ugr
- |[6/9 a \< a a a a a a \! a a \ff \> ]1/1
+ |[6/9 a8 \< a a a a a a \! a a \ff \> ]1/1 |
\octave c' ;
- |[6/9 a a a a a a a a \! a ]1/1
+ |[6/9 a a a a a a a a \! a ]1/1 |
\octave c'' ;
+
+ [6/9'c->-.-\fermata \< 'g->-.-\fermata
+ d->-.-\fermata a->-.-\fermata
+ e'->-.-\fermata b'-. f''-. c'''->-.-\fermata
+ \! g'''->-.-\fermata \> ]1/1
- ['c->-.-\fermata \< 'g->-.-\fermata d->-.-\fermata a->-.-\fermata
- e'->-.-\fermata b'-. f''-. c'''->-.-\fermata \! g'''->-.-\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
+ [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
- [6/9 g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! 'c->-.-\fermata ]1/1
+ [6/9'c->-.-\fermata \< 'g->-.-\fermata d->-.-\fermata
+ a->-.-\fermata
+ e'->-.-\fermata b'-. f''-.
+ c'''->-.-\fermata \! g'''->-.-\fermata \> ]1/1
+ [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' ;
[2/3 c g d' ]1/1
[2/3 g' c' f ]1/1
[2/3 g' c' f ]1/1
\meter 4/4;
-
+
c1
\duration 8;
r8-"text" r8^. r8_. r8 r8 r8 r8 r8
\score{
\melodic {\blah}
\paper{
- \unitspace 1.5 \cm;
- \geometric 1.4;
+ unitspace= 1.5 \cm;
+ geometric= 1.4;
}
}
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
%% Stuff from MPP version
% \lefttitle{Menuetto}
\score{
\melodic { \IImenuetto }
\paper{
- \width 195.0\mm;
- \unitspace 9.0\mm ;% to get lily to use only three lines
- \geometric 1.40;
+ width= 195.0\mm;
+ unitspace= 9.0\mm ;% to get lily to use only three lines
+ geometric= 1.40;
\output "scsii-menuetto.out";
}
\midi{
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
\score{
\melodic{\octave c';
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
commands = \melodic{
\skip 2.*4;
melodie = \melodic{
\meter 3/4;
- \clef\violin;
+ \clef "violin";
\key bes;
\octave c';
\duration 8;
begeleiding = \melodic{
\meter 3/4;
- \clef\bass;
+ \clef"bass";
\key bes;
\octave c';
\duration 2;
\score{
< \multi 3;
- { \id "Lyric" "1"; tekstI } % ugh
- { \id "Lyric" "2"; tekstII }
+ { \id "Lyric" "1"; \tekstI } % ugh
+ { \id "Lyric" "2"; \tekstII }
\melodic < \melodie \commands >
\melodic <\begeleiding \commands >
>
\paper{
- \width 195.\mm;
+ width= 195.\mm;
% on two pages...
- \unitspace 9.\mm;
- \geometric 1.2;
+ unitspace= 9.\mm;
+ geometric= 1.2;
\output "standchen.out";
}
\midi{
%}
-\version "0.0.60";
+\version "0.0.61";
toccata_commands = \melodic{
\meter 4/4;
Tested Features: lyrics
EndMudelaHeader
%}
-\version "0.0.60";
+\version "0.0.61";
melody = \melodic{
\clef\violin;
\melodic < \global \accompany >
>
\paper{
- \unitspace 2.5\cm;
+ unitspace= 2.5\cm;
}
\midi{
\tempo 4:120 ;
%{
title: Das Wohltemperirte Clavier I, Fuga II (c-minor)
description: following Henle's Urtext
- composer(s): JS Bach
+ composer(s): J.S. Bach
entered-by: HWN and Werner Lemberg
copyright: Public Domain
%}
-\version "0.0.60";
+\version "0.0.61";
% should add \need{dutch.ini} for
% correct parsing of note names
MAJOR_VERSION = 0
MINOR_VERSION = 0
-PATCH_LEVEL = 71
+PATCH_LEVEL = 72
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
-MY_PATCH_LEVEL =
+MY_PATCH_LEVEL = pre
paper-def.cc parser.cc lexer.cc qlp.cc qlpsolve.cc\
template1.cc template2.cc template3.cc template4.cc\
template5.cc template6.cc version.cc tex-stream.cc tex.cc\
- identifier.cc note.cc voice-regs.cc\
+ identifier.cc note.cc voice-gravs.cc\
+++ /dev/null
-/*
- acceptor.cc -- implement Acceptor
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "acceptor.hh"
-Acceptor::Acceptor()
-{
- iterator_count_ = 0;
-}
-
-IMPLEMENT_STATIC_NAME(Acceptor);
-IMPLEMENT_IS_TYPE_B(Acceptor);
--- /dev/null
+/*
+ bar-reg.cc -- implement Bar_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bar-grav.hh"
+#include "bar.hh"
+#include "command-request.hh"
+#include "time-description.hh"
+
+Bar_engraver::Bar_engraver()
+{
+ do_post_move_processing();
+}
+
+bool
+Bar_engraver::do_try_request(Request*r_l)
+{
+ Command_req* c_l = r_l->command();
+ if (!c_l|| !c_l->bar())
+ return false;
+ Bar_req * b= c_l->bar();
+ if (bar_req_l_ && bar_req_l_->compare(*b))
+ return false;
+
+ bar_req_l_ = b;
+
+ return true;
+}
+
+void
+Bar_engraver::do_process_requests()
+{
+ if (bar_req_l_ ) {
+ bar_p_ = new Bar;
+ bar_p_->type_str_=bar_req_l_->type_str_;
+ } else if (!get_staff_info().time_C_->whole_in_measure_) {
+ bar_p_ = new Bar;
+ }
+
+ if (bar_p_){
+ announce_element(Score_elem_info(bar_p_, bar_req_l_) );
+ }
+}
+
+
+void
+Bar_engraver::do_pre_move_processing()
+{
+ if (bar_p_) {
+ typeset_breakable_item(bar_p_);
+ bar_p_ =0;
+ }
+}
+
+void
+Bar_engraver::do_post_move_processing()
+{
+ bar_req_l_ = 0;
+ bar_p_ =0;
+}
+
+IMPLEMENT_STATIC_NAME(Bar_engraver);
+IMPLEMENT_IS_TYPE_B1(Bar_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Bar_engraver);
+
+
+++ /dev/null
-/*
- bar-reg.cc -- implement Bar_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "bar-reg.hh"
-#include "bar.hh"
-#include "command-request.hh"
-#include "time-description.hh"
-
-Bar_register::Bar_register()
-{
- do_post_move_processing();
-}
-
-bool
-Bar_register::do_try_request(Request*r_l)
-{
- Command_req* c_l = r_l->command();
- if (!c_l|| !c_l->bar())
- return false;
- Bar_req * b= c_l->bar();
- if (bar_req_l_ && bar_req_l_->compare(*b))
- return false;
-
- bar_req_l_ = b;
-
- return true;
-}
-
-void
-Bar_register::do_process_requests()
-{
- if (bar_req_l_ ) {
- bar_p_ = new Bar;
- bar_p_->type_str_=bar_req_l_->type_str_;
- } else if (!get_staff_info().time_C_->whole_in_measure_) {
- bar_p_ = new Bar;
- }
-
- if (bar_p_){
- announce_element(Score_elem_info(bar_p_, bar_req_l_) );
- }
-}
-
-
-void
-Bar_register::do_pre_move_processing()
-{
- if (bar_p_) {
- typeset_breakable_item(bar_p_);
- bar_p_ =0;
- }
-}
-
-void
-Bar_register::do_post_move_processing()
-{
- bar_req_l_ = 0;
- bar_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Bar_register);
-IMPLEMENT_IS_TYPE_B1(Bar_register,Request_register);
-ADD_THIS_REGISTER(Bar_register);
-
-
/*
beam.cc -- implement Beam
- source file of the GNU GNU LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
// huh? why do i need the / 2
// Real interbeam_f = s->paper()->interbeam_f();
Real interbeam_f = s->paper()->interbeam_f() / 2;
- Real interline_f = s->paper()->interline_f();
/* well eh, huh?
idealy_f_ = dir_i_ * s->stem_start_f() + beams_i_ * interbeam_f;
Stem_info info(i);
sinfo.push(info);
}
- Real leftx = sinfo[0].x;
- Least_squares l;
- for (int i=0; i < sinfo.size(); i++) {
- sinfo[i].x -= leftx;
- l.input.push(Offset(sinfo[i].x, sinfo[i].idealy_f_));
- }
+ if (! sinfo.size() )
+ slope = left_pos = 0;
+ else if (sinfo.size() == 1) {
+ slope = 0;
+ left_pos = sinfo[0].idealy_f_;
+ } else {
+
+ Real leftx = sinfo[0].x;
+ Least_squares l;
+ for (int i=0; i < sinfo.size(); i++) {
+ sinfo[i].x -= leftx;
+ l.input.push(Offset(sinfo[i].x, sinfo[i].idealy_f_));
+ }
- l.minimise(slope, left_pos);
+ l.minimise(slope, left_pos);
+ }
+
Real dy = 0.0;
for (int i=0; i < sinfo.size(); i++) {
Real y = sinfo[i].x * slope + left_pos;
left_pos *= dir_i_;
slope *= dir_i_;
- slope = 0.6 * tanh(slope); // damping
+
+ /*
+ This neat trick is by Werner Lemberg, damped = tanh(slope) corresponds
+ with some tables in [Wanske]
+ */
+ slope = 0.6 * tanh(slope);
// ugh
Real sl = slope*paper()->internote_f();
Break_algorithm::Break_algorithm(PScore&s)
:pscore_(s)
{
- linelength = s.paper_l_->linewidth;
+ linelength = s.paper_l_->linewidth_f();
}
bool
--- /dev/null
+/*
+ clef.cc -- implement Clef_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
+ Mats Bengtsson <matsb@s3.kth.se>
+*/
+
+#include "bar.hh"
+#include "clef-grav.hh"
+#include "clef-item.hh"
+#include "debug.hh"
+#include "command-request.hh"
+#include "time-description.hh"
+
+Clef_engraver::Clef_engraver()
+{
+ clef_p_ = 0;
+ clef_req_l_ =0;
+
+ set_type("violin");
+}
+
+bool
+Clef_engraver::set_type(String s)
+{
+ clef_type_str_ = s;
+ if (clef_type_str_ == "violin") {
+ c0_position_i_= -2;
+ } else if (clef_type_str_ == "alto") {
+ c0_position_i_= 4;
+ } else if (clef_type_str_ == "tenor") {
+ c0_position_i_= 6;
+ } else if (clef_type_str_ == "bass") {
+ c0_position_i_= 10;
+ } else
+ return false;
+
+ return true;
+}
+
+void
+Clef_engraver::fill_staff_info(Staff_info &i)
+{
+ i.c0_position_i_l_ = &c0_position_i_;
+}
+
+void
+Clef_engraver::read_req(Clef_change_req*c_l)
+{
+ if (!set_type(c_l->clef_str_))
+ c_l->error("unknown clef type ");
+}
+void
+Clef_engraver::acknowledge_element(Score_elem_info info)
+{
+ if (info.elem_l_->name() == Bar::static_name() ) {
+ create_clef();
+ if ( !clef_req_l_ )
+ clef_p_->default_b_ = true;
+ }
+}
+
+void
+Clef_engraver::do_creation_processing()
+{
+ create_clef();
+ clef_p_->default_b_ = false;
+}
+
+bool
+Clef_engraver::do_try_request(Request * r_l)
+{
+ Command_req* creq_l= r_l->command();
+ if (!creq_l || !creq_l->clefchange())
+ return false;
+
+ clef_req_l_ = creq_l->clefchange();
+
+ read_req(clef_req_l_);
+ return true;
+}
+
+void
+Clef_engraver::create_clef()
+{
+ if (!clef_p_) {
+ clef_p_ = new Clef_item;
+ announce_element(Score_elem_info(clef_p_,clef_req_l_));
+ }
+ clef_p_->read(*this);
+}
+
+void
+Clef_engraver::do_process_requests()
+{
+ if (clef_req_l_) {
+ create_clef();
+ clef_p_->default_b_ = false;
+ }
+}
+
+void
+Clef_engraver::do_pre_move_processing()
+{
+ if (!clef_p_)
+ return;
+ typeset_breakable_item(clef_p_);
+ clef_p_ = 0;
+}
+
+void
+Clef_engraver::do_post_move_processing()
+{
+ clef_req_l_ = 0;
+}
+
+void
+Clef_engraver::do_removal_processing()
+{
+ delete clef_p_;
+ clef_p_ =0;
+}
+
+IMPLEMENT_STATIC_NAME(Clef_engraver);
+IMPLEMENT_IS_TYPE_B1(Clef_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Clef_engraver);
#include "molecule.hh"
#include "paper-def.hh"
#include "lookup.hh"
-#include "clef-reg.hh"
+#include "clef-grav.hh"
void
y_off = 6;
}
void
-Clef_item::read(Clef_register const &k)
+Clef_item::read(Clef_engraver const &k)
{
read(k.clef_type_str_);
}
+++ /dev/null
-/*
- clef.cc -- implement Clef_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
- Mats Bengtsson <matsb@s3.kth.se>
-*/
-
-#include "bar.hh"
-#include "clef-reg.hh"
-#include "clef-item.hh"
-#include "debug.hh"
-#include "command-request.hh"
-#include "time-description.hh"
-
-Clef_register::Clef_register()
-{
- clef_p_ = 0;
- clef_req_l_ =0;
-
- set_type("violin");
-}
-
-bool
-Clef_register::set_type(String s)
-{
- clef_type_str_ = s;
- if (clef_type_str_ == "violin") {
- c0_position_i_= -2;
- } else if (clef_type_str_ == "alto") {
- c0_position_i_= 4;
- } else if (clef_type_str_ == "tenor") {
- c0_position_i_= 6;
- } else if (clef_type_str_ == "bass") {
- c0_position_i_= 10;
- } else
- return false;
-
- return true;
-}
-
-void
-Clef_register::fill_staff_info(Staff_info &i)
-{
- i.c0_position_i_l_ = &c0_position_i_;
-}
-
-void
-Clef_register::read_req(Clef_change_req*c_l)
-{
- if (!set_type(c_l->clef_str_))
- c_l->error("unknown clef type ");
-}
-void
-Clef_register::acknowledge_element(Score_elem_info info)
-{
- if (info.elem_l_->name() == Bar::static_name() ) {
- create_clef();
- if ( !clef_req_l_ )
- clef_p_->default_b_ = true;
- }
-}
-
-void
-Clef_register::do_creation_processing()
-{
- create_clef();
- clef_p_->default_b_ = false;
-}
-
-bool
-Clef_register::do_try_request(Request * r_l)
-{
- Command_req* creq_l= r_l->command();
- if (!creq_l || !creq_l->clefchange())
- return false;
-
- clef_req_l_ = creq_l->clefchange();
-
- read_req(clef_req_l_);
- return true;
-}
-
-void
-Clef_register::create_clef()
-{
- if (!clef_p_) {
- clef_p_ = new Clef_item;
- announce_element(Score_elem_info(clef_p_,clef_req_l_));
- }
- clef_p_->read(*this);
-}
-
-void
-Clef_register::do_process_requests()
-{
- if (clef_req_l_) {
- create_clef();
- clef_p_->default_b_ = false;
- }
-}
-
-void
-Clef_register::do_pre_move_processing()
-{
- if (!clef_p_)
- return;
- typeset_breakable_item(clef_p_);
- clef_p_ = 0;
-}
-
-void
-Clef_register::do_post_move_processing()
-{
- clef_req_l_ = 0;
-}
-
-void
-Clef_register::do_removal_processing()
-{
- delete clef_p_;
- clef_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Clef_register);
-IMPLEMENT_IS_TYPE_B1(Clef_register,Request_register);
-ADD_THIS_REGISTER(Clef_register);
--- /dev/null
+/*
+ collision-reg.cc -- implement Collision_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "note-column.hh"
+#include "collision-grav.hh"
+#include "collision.hh"
+
+void
+Collision_engraver::acknowledge_element(Score_elem_info i)
+{
+ if (!(i.elem_l_->name() == Note_column::static_name()))
+ return;
+
+ if (!col_p_)
+ col_p_ = new Collision;
+
+ col_p_->add((Note_column*)i.elem_l_->item());
+}
+
+void
+Collision_engraver::do_pre_move_processing()
+{
+ if (col_p_) {
+ typeset_element(col_p_);
+ col_p_ =0;
+ }
+}
+Collision_engraver::Collision_engraver()
+{
+ col_p_ =0;
+}
+
+IMPLEMENT_STATIC_NAME(Collision_engraver);
+IMPLEMENT_IS_TYPE_B1(Collision_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Collision_engraver);
+++ /dev/null
-/*
- collision-reg.cc -- implement Collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-column.hh"
-#include "collision-reg.hh"
-#include "collision.hh"
-
-void
-Collision_register::acknowledge_element(Score_elem_info i)
-{
- if (!(i.elem_l_->name() == Note_column::static_name()))
- return;
-
- if (!col_p_)
- col_p_ = new Collision;
-
- col_p_->add((Note_column*)i.elem_l_->item());
-}
-
-void
-Collision_register::do_pre_move_processing()
-{
- if (col_p_) {
- typeset_element(col_p_);
- col_p_ =0;
- }
-}
-Collision_register::Collision_register()
-{
- col_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Collision_register);
-IMPLEMENT_IS_TYPE_B1(Collision_register,Request_register);
-ADD_THIS_REGISTER(Collision_register);
grow_dir_i_ =0;
dir_i_ = -1 ;
left_dyn_b_ = right_dyn_b_ =false;
+ inside_staff_b_ = false;
}
Molecule*
--- /dev/null
+/*
+ dynamic-reg.cc -- implement Dynamic_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "debug.hh"
+#include "crescendo.hh"
+#include "dynamic-grav.hh"
+#include "musical-request.hh"
+#include "text-item.hh"
+#include "lookup.hh"
+#include "paper-def.hh"
+#include "score-column.hh"
+#include "staff-sym.hh"
+#include "note-column.hh"
+
+Dynamic_engraver::Dynamic_engraver()
+{
+ dir_i_ =0;
+ do_post_move_processing();
+ dynamic_p_ =0;
+ to_end_cresc_p_ = cresc_p_ = 0;
+ cresc_req_l_ = 0;
+}
+
+void
+Dynamic_engraver::do_post_move_processing()
+{
+ dynamic_req_l_arr_.set_size(0);
+}
+
+bool
+Dynamic_engraver::do_try_request(Request * r)
+{
+ Musical_req * m = r->musical();
+ if (!m || !m->dynamic())
+ return false;
+ dynamic_req_l_arr_.push(m->dynamic());
+ return true;
+}
+void
+Dynamic_engraver::do_process_requests()
+{
+ Crescendo* new_cresc_p=0;
+ for (int i=0; i < dynamic_req_l_arr_.size(); i++) {
+ Dynamic_req *dreq_l = dynamic_req_l_arr_[i];
+ if (dreq_l->absdynamic()) {
+ Text_def * td_p = new Text_def;
+ td_p->align_i_ = 0;
+ String loud =Dynamic_req::loudness_str(
+ dreq_l->absdynamic()->loudness_);
+
+ td_p->text_str_ = paper()->lookup_l()->dynamic(loud).tex;
+ td_p->style_str_ = "dynamic";
+
+ assert (!dynamic_p_) ; // TODO
+
+ dynamic_p_ = new Text_item(td_p);
+ announce_element(Score_elem_info(dynamic_p_, dreq_l));
+ } else if (dreq_l->span_dynamic()) {
+
+ Span_dynamic_req* span_l = dreq_l->span_dynamic();
+ if (span_l->spantype == Span_req::STOP) {
+ if (!cresc_p_) {
+ span_l->warning("Can't find cresc to end " );
+ } else {
+ assert(!to_end_cresc_p_);
+ to_end_cresc_p_ =cresc_p_;
+ cresc_p_ = 0;
+ }
+ } else if (span_l->spantype == Span_req::START) {
+ cresc_req_l_ = span_l;
+ assert(!new_cresc_p);
+ new_cresc_p = new Crescendo;
+ new_cresc_p->grow_dir_i_ = span_l->dynamic_dir_i_;
+ announce_element(Score_elem_info(new_cresc_p, span_l));
+ }
+ }
+ }
+
+ if ( new_cresc_p ) {
+ cresc_p_ = new_cresc_p;
+ cresc_p_->left_col_l_ = get_staff_info().musical_l()->pcol_l_;
+ if (dynamic_p_) {
+ cresc_p_->left_dyn_b_ = true;
+ }
+ }
+}
+
+void
+Dynamic_engraver::do_pre_move_processing()
+{
+ Staff_symbol* s_l = get_staff_info().staff_sym_l_;
+ if (dynamic_p_) {
+ dynamic_p_->set_staffsym(s_l);
+ typeset_element(dynamic_p_);
+ dynamic_p_ = 0;
+ }
+ if ( to_end_cresc_p_) {
+ if (dynamic_p_)
+ to_end_cresc_p_->right_dyn_b_=true;
+
+ to_end_cresc_p_->right_col_l_ = get_staff_info().musical_l()->pcol_l_;
+ to_end_cresc_p_->set_staffsym(s_l);
+ typeset_element(to_end_cresc_p_);
+ to_end_cresc_p_ = 0;
+ }
+}
+
+void
+Dynamic_engraver::set_feature(Feature i)
+{
+ if (i.type_ == "vdir")
+ dir_i_ = i.value_;
+}
+
+IMPLEMENT_STATIC_NAME(Dynamic_engraver);
+IMPLEMENT_IS_TYPE_B1(Dynamic_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Dynamic_engraver);
+
+Dynamic_engraver::~Dynamic_engraver()
+{
+ delete dynamic_p_;
+ delete to_end_cresc_p_;
+ if (cresc_p_) {
+ cresc_req_l_->warning("unended crescendo");
+ }
+ delete cresc_p_;
+}
+void
+Dynamic_engraver::acknowledge_element(Score_elem_info i)
+{
+ if (i.elem_l_->name() == Note_column::static_name()) {
+ if (dynamic_p_) dynamic_p_->add_support(i.elem_l_);
+ if (to_end_cresc_p_)
+ to_end_cresc_p_->add_support(i.elem_l_);
+ if (cresc_p_)
+ cresc_p_->add_support(i.elem_l_);
+ }
+}
+++ /dev/null
-/*
- dynamic-reg.cc -- implement Dynamic_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "debug.hh"
-#include "crescendo.hh"
-#include "dynamic-reg.hh"
-#include "musical-request.hh"
-#include "text-item.hh"
-#include "lookup.hh"
-#include "paper-def.hh"
-#include "score-column.hh"
-#include "staff-sym.hh"
-#include "note-column.hh"
-
-Dynamic_register::Dynamic_register()
-{
- dir_i_ =0;
- do_post_move_processing();
- dynamic_p_ =0;
- to_end_cresc_p_ = cresc_p_ = 0;
- cresc_req_l_ = 0;
-}
-
-void
-Dynamic_register::do_post_move_processing()
-{
- dynamic_req_l_arr_.set_size(0);
-}
-
-bool
-Dynamic_register::do_try_request(Request * r)
-{
- Musical_req * m = r->musical();
- if (!m || !m->dynamic())
- return false;
- dynamic_req_l_arr_.push(m->dynamic());
- return true;
-}
-void
-Dynamic_register::do_process_requests()
-{
- Crescendo* new_cresc_p=0;
- for (int i=0; i < dynamic_req_l_arr_.size(); i++) {
- Dynamic_req *dreq_l = dynamic_req_l_arr_[i];
- if (dreq_l->absdynamic()) {
- Text_def * td_p = new Text_def;
- td_p->align_i_ = 0;
- String loud =Dynamic_req::loudness_str(
- dreq_l->absdynamic()->loudness_);
-
- td_p->text_str_ = paper()->lookup_l()->dynamic(loud).tex;
- td_p->style_str_ = "dynamic";
-
- assert (!dynamic_p_) ; // TODO
-
- dynamic_p_ = new Text_item(td_p);
- announce_element(Score_elem_info(dynamic_p_, dreq_l));
- } else if (dreq_l->span_dynamic()) {
-
- Span_dynamic_req* span_l = dreq_l->span_dynamic();
- if (span_l->spantype == Span_req::STOP) {
- if (!cresc_p_) {
- span_l->warning("Can't find cresc to end " );
- } else {
- assert(!to_end_cresc_p_);
- to_end_cresc_p_ =cresc_p_;
- cresc_p_ = 0;
- }
- } else if (span_l->spantype == Span_req::START) {
- cresc_req_l_ = span_l;
- assert(!new_cresc_p);
- new_cresc_p = new Crescendo;
- new_cresc_p->grow_dir_i_ = span_l->dynamic_dir_i_;
- announce_element(Score_elem_info(new_cresc_p, span_l));
- }
- }
- }
-
- if ( new_cresc_p ) {
- cresc_p_ = new_cresc_p;
- cresc_p_->left_col_l_ = get_staff_info().musical_l()->pcol_l_;
- if (dynamic_p_) {
- cresc_p_->left_dyn_b_ = true;
- }
- }
-}
-
-void
-Dynamic_register::do_pre_move_processing()
-{
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- if (dynamic_p_) {
- dynamic_p_->set_staffsym(s_l);
- typeset_element(dynamic_p_);
- dynamic_p_ = 0;
- }
- if ( to_end_cresc_p_) {
- if (dynamic_p_)
- to_end_cresc_p_->right_dyn_b_=true;
-
- to_end_cresc_p_->right_col_l_ = get_staff_info().musical_l()->pcol_l_;
- to_end_cresc_p_->set_staffsym(s_l);
- typeset_element(to_end_cresc_p_);
- to_end_cresc_p_ = 0;
- }
-}
-
-void
-Dynamic_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Dynamic_register);
-IMPLEMENT_IS_TYPE_B1(Dynamic_register,Request_register);
-ADD_THIS_REGISTER(Dynamic_register);
-
-Dynamic_register::~Dynamic_register()
-{
- delete dynamic_p_;
- delete to_end_cresc_p_;
- if (cresc_p_) {
- cresc_req_l_->warning("unended crescendo");
- }
- delete cresc_p_;
-}
-void
-Dynamic_register::acknowledge_element(Score_elem_info i)
-{
- if (i.elem_l_->name() == Note_column::static_name()) {
- if (dynamic_p_) dynamic_p_->add_support(i.elem_l_);
- if (to_end_cresc_p_)
- to_end_cresc_p_->add_support(i.elem_l_);
- if (cresc_p_)
- cresc_p_->add_support(i.elem_l_);
- }
-}
--- /dev/null
+/*
+ engravergroup.cc -- implement Engraver_group_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "engraver-group.hh"
+#include "engraver.hh"
+#include "debug.hh"
+#include "p-score.hh"
+#include "score-elem.hh"
+#include "input-engraver.hh"
+
+Engraver_group_engraver::~Engraver_group_engraver()
+{
+ assert(removable_b());
+}
+
+void
+Engraver_group_engraver::check_removal()
+{
+ for (int i =0; i < group_l_arr_.size(); ) {
+ group_l_arr_[i]->check_removal();
+ if (group_l_arr_[i]->removable_b())
+ terminate_engraver(group_l_arr_[i]);
+ else
+ i++;
+ }
+
+}
+
+bool
+Engraver_group_engraver::removable_b()const
+{
+ return !iterator_count_&& !group_l_arr_.size() ;
+}
+
+Engraver_group_engraver::Engraver_group_engraver()
+{
+ igrav_l_ =0;
+}
+
+void
+Engraver_group_engraver::set_feature(Feature d)
+{
+ iter_top(grav_list_, i);
+ while (i.ok()) {
+ // this construction to ensure clean deletion
+ Request_engraver *grav_l = i++;
+ grav_l->set_feature(d);
+ }
+}
+
+void
+Engraver_group_engraver::sync_features()
+{
+ iter_top(grav_list_, i);
+ while (i.ok()) {
+
+ Request_engraver *grav_l = i++;
+ grav_l->sync_features();
+ }
+}
+
+void
+Engraver_group_engraver::do_pre_move_processing()
+{
+ iter_top(grav_list_, i);
+ while (i.ok()) {
+
+ Request_engraver *grav_l = i++;
+ grav_l->pre_move_processing();
+ }
+}
+
+void
+Engraver_group_engraver::do_process_requests()
+{
+ iter_top(grav_list_, i);
+ while (i.ok()) {
+
+ Request_engraver *grav_l = i++;
+ grav_l->process_requests();
+ }
+}
+
+
+void
+Engraver_group_engraver::do_post_move_processing()
+{
+ iter_top(grav_list_, i);
+ while (i.ok()) {
+ // this construction to ensure clean deletion
+ Request_engraver *grav_l = i++;
+ grav_l->post_move_processing();
+ }
+}
+
+
+bool
+Engraver_group_engraver::contains_b(Request_engraver* grav_l)const
+{
+ bool parent_b = Request_engraver::contains_b(grav_l);
+
+ if (parent_b)
+ return true;
+ for (iter_top(grav_list_, j); j.ok(); j++)
+ if (j->contains_b(grav_l))
+ return true;
+ return false;
+}
+
+
+
+bool
+Engraver_group_engraver::do_try_request(Request*req_l)
+{
+ bool hebbes_b =false;
+ for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
+ hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
+ if (!hebbes_b)
+ hebbes_b = daddy_grav_l_->try_request(req_l);
+ return hebbes_b ;
+}
+
+void
+Engraver_group_engraver::add(Request_engraver *grav_p)
+{
+ grav_list_.bottom().add(grav_p);
+ grav_p->daddy_grav_l_ = this;
+
+ if (grav_p->is_type_b(Engraver_group_engraver::static_name())) {
+ group_l_arr_.push((Engraver_group_engraver*)grav_p);
+ } else {
+ nongroup_l_arr_ .push(grav_p);
+ }
+}
+
+
+Request_engraver *
+Engraver_group_engraver::remove_engraver_p(Request_engraver*grav_l)
+{
+ group_l_arr_.substitute((Engraver_group_engraver*)grav_l,0);
+ nongroup_l_arr_.substitute(grav_l,0);
+ iterator(grav_list_) grav_cur= grav_list_.find(grav_l);
+
+ return grav_cur.remove_p();
+}
+
+void
+Engraver_group_engraver::terminate_engraver(Request_engraver*r_l)
+{
+ mtor << "Removing " << r_l->name() << " at " << get_staff_info().when() << "\n";
+ r_l->do_removal_processing();
+ Request_engraver * grav_p =remove_engraver_p(r_l);
+
+ delete grav_p;
+}
+
+IMPLEMENT_IS_TYPE_B2(Engraver_group_engraver,Request_engraver, Translator);
+IMPLEMENT_STATIC_NAME(Engraver_group_engraver);
+ADD_THIS_ENGRAVER(Engraver_group_engraver);
+
+void
+Engraver_group_engraver::do_print()const
+{
+#ifndef NPRINT
+ mtor << "ID: " << id_str_ << "\n";
+ for (iter_top(grav_list_, i); i.ok(); i++)
+ i->print();
+#endif
+}
+
+
+Engraver_group_engraver*
+Engraver_group_engraver::find_engraver_l(String n, String id)
+{
+ if (name() == n && id_str_ == id)
+ return this;
+ Engraver_group_engraver * r = 0;
+ for (int i =0; !r && i< group_l_arr_.size(); i++) {
+ r = group_l_arr_[i]->find_engraver_l(n,id);
+ }
+
+ return r;
+}
+
+Translator*
+Engraver_group_engraver::find_get_translator_l(String n,String id)
+{
+ Translator * ret=0;
+ Input_engraver * igrav_l= igrav_l_-> recursive_find ( n );
+ if (igrav_l ) {
+ ret = find_engraver_l(n,id);
+ if (!ret) {
+ Engraver_group_engraver * group =
+ igrav_l-> get_group_engraver_p();
+
+ add(group);
+ ret = group;
+
+ if (group->igrav_l_->is_name_b( n ) )
+ ret ->id_str_ = id;
+ else
+ return ret->find_get_translator_l(n,id);
+
+ }
+ } else if (daddy_grav_l_)
+ ret =daddy_grav_l_->find_get_translator_l(n,id);
+ else {
+ warning("Can't find or create `" + n + "' called `" + id + "'\n");
+ ret =0;
+ }
+ return ret;
+}
+
+int
+Engraver_group_engraver::depth_i()const
+{
+ return daddy_grav_l_->depth_i() + 1;
+}
+
+Translator*
+Engraver_group_engraver::ancestor_l(int l)
+{
+ if (!l || !daddy_grav_l_)
+ return this;
+
+ return daddy_grav_l_->ancestor_l(l-1);
+}
+
+void
+Engraver_group_engraver::announce_element(Score_elem_info info)
+{
+ announce_info_arr_.push(info);
+ Request_engraver::announce_element(info);
+}
+
+void
+Engraver_group_engraver::do_announces()
+{
+ for (int i=0; i < group_l_arr_.size(); i++) {
+ group_l_arr_[i]->do_announces();
+ }
+
+ Request dummy_req;
+
+ for (int j =0; j < announce_info_arr_.size(); j++){
+ Score_elem_info info = announce_info_arr_[j];
+
+ if (!info.req_l_)
+ info.req_l_ = &dummy_req;
+ for (int i=0; i < nongroup_l_arr_.size(); i++) {
+ if (nongroup_l_arr_[i] != info.origin_grav_l_arr_[0])
+ nongroup_l_arr_[i]->acknowledge_element(info);
+ }
+ }
+ announce_info_arr_.set_size(0);
+}
+
+
+void
+Engraver_group_engraver::do_removal_processing()
+{
+ for (iter( grav_list_.top(), i); i.ok(); i++)
+ i->do_removal_processing();
+}
+
+Staff_info
+Engraver_group_engraver::get_staff_info()const
+{
+ Staff_info inf = Request_engraver::get_staff_info();
+
+ for (int i=0; i < nongroup_l_arr_.size(); i++)
+ nongroup_l_arr_[i]->fill_staff_info(inf);
+
+ return inf;
+}
+
+Translator*
+Engraver_group_engraver::get_default_interpreter()
+{
+ if ( interpreter_l() )
+ return daddy_grav_l_->get_default_interpreter();
+
+ Engraver_group_engraver *grav_p= igrav_l_->
+ get_default_igrav_l()->get_group_engraver_p();
+ add(grav_p );
+ if (grav_p->interpreter_l())
+ return grav_p;
+ else
+ return grav_p->get_default_interpreter();
+}
--- /dev/null
+/*
+ engraver.cc -- implement Request_engraver
+
+ Sourcefile of GNU LilyPond musictypesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "music-list.hh"
+#include "musical-request.hh"
+#include "engraver.hh"
+#include "engraver-group.hh"
+#include "debug.hh"
+
+void
+Request_engraver::post_move_processing()
+{
+
+ if (status < CREATION_INITED) {
+ do_creation_processing();
+ status = CREATION_INITED;
+ }
+ if (status >= MOVE_INITED)
+ return;
+
+ do_post_move_processing();
+ status = MOVE_INITED;
+}
+
+bool
+Request_engraver::try_request(Request * r)
+{
+ if (status < MOVE_INITED)
+ post_move_processing();
+
+ return do_try_request(r);
+}
+
+void
+Request_engraver::process_requests()
+{
+ if (status < PROCESSED_REQS)
+ post_move_processing();
+ else if (status >= PROCESSED_REQS)
+ return;
+
+ status = PROCESSED_REQS;
+ do_process_requests();
+}
+
+void
+Request_engraver::pre_move_processing()
+{
+ do_pre_move_processing();
+ status = CREATION_INITED;
+}
+
+void
+Request_engraver::fill_staff_info(Staff_info&)
+{
+
+}
+
+Scalar
+Request_engraver::get_feature(String t)
+{
+ return daddy_grav_l_->get_feature(t);
+}
+
+bool
+Request_engraver::do_try_request(Request*)
+{
+ return false;
+}
+
+Request_engraver::Request_engraver()
+{
+ status = VIRGIN;
+ daddy_grav_l_ = 0;
+}
+
+void
+Request_engraver::announce_element(Score_elem_info i)
+{
+ i.origin_grav_l_arr_.push(this);
+ daddy_grav_l_->announce_element(i);
+}
+
+void
+Request_engraver::typeset_element(Score_elem*p)
+{
+ daddy_grav_l_->typeset_element(p);
+}
+
+Paper_def*
+Request_engraver::paper()const
+{
+ return daddy_grav_l_->paper();
+}
+
+void
+Request_engraver::typeset_breakable_item(Item * nobreak_p)
+{
+ daddy_grav_l_->typeset_breakable_item(nobreak_p);
+}
+
+bool
+Request_engraver::contains_b(Request_engraver *grav_l)const
+{
+ return this == grav_l;
+}
+
+Staff_info
+Request_engraver::get_staff_info() const
+{
+ return daddy_grav_l_->get_staff_info();
+}
+
+void
+Request_engraver::print() const
+{
+#ifndef NPRINT
+ mtor << "\n" << name() << " {";
+ do_print();
+ mtor << "}";
+#endif
+}
+
+IMPLEMENT_STATIC_NAME(Request_engraver);
+IMPLEMENT_IS_TYPE_B(Request_engraver);
+
+void
+Request_engraver::do_print()const
+{
+}
+
+
+++ /dev/null
-/*
- global-acceptor.cc -- implement
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "music.hh"
-#include "global-acceptor.hh"
-#include "score.hh"
-#include "score-column.hh"
-
-Global_acceptor::Global_acceptor()
-{
- score_l_ = 0;
- last_mom_ = 0;
-}
-
-Acceptor*
-Global_acceptor::ancestor_l(int)
-{
- return this;
-}
-
-void
-Global_acceptor::add_moment_to_process(Moment m)
-{
- if (m > last_mom_)
- return;
-
- for (int i=0; i < extra_mom_pq_.size(); i++)
- if (extra_mom_pq_[i] == m)
- return;
- extra_mom_pq_.insert(m);
-}
-
-int
-Global_acceptor::depth_i()const
-{
- return 0;
-}
-
-void
-Global_acceptor::set_score(Score *s)
-{
- score_l_ = s;
- last_mom_ = score_l_->music_p_->time_int().max();
-}
-
-void
-Global_acceptor::modify_next(Moment &w)
-{
- while (extra_mom_pq_.size() &&
- extra_mom_pq_.front() <= w)
-
- w =extra_mom_pq_.get();
-}
-
-int
-Global_acceptor::moments_left_i()const
-{
- return extra_mom_pq_.size();
-}
-
-void
-Global_acceptor::prepare(Moment)
-{
-}
--- /dev/null
+/*
+ global-gravs.cc -- implement
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "input-engraver.hh"
+#include "debug.hh"
+#include "engraver.hh"
+
+struct Request_engraver_table_entry {
+ String name_str_;
+ Grav_ctor ctor_l_;
+ Request_engraver_table_entry(String s, Grav_ctor f) {
+ name_str_ =s;
+ ctor_l_ = f;
+ }
+ Request_engraver_table_entry()
+ {
+ ctor_l_ =0;
+ }
+};
+
+static Array<Request_engraver_table_entry> *grav_table=0;
+
+void
+add_request_engraver(String s, Grav_ctor f)
+{
+ if (!grav_table)
+ grav_table = new Array<Request_engraver_table_entry>;
+
+ grav_table->push(Request_engraver_table_entry(s, f));
+}
+
+
+Request_engraver*
+get_engraver_p(String s)
+{
+ for (int i=0; i < grav_table->size(); i++) {
+ if ((*grav_table)[i].name_str_ == s)
+ return (*(*grav_table)[i].ctor_l_)();
+ }
+ error("Unknown engraver `" + s +"\'");
+ return 0;
+}
+++ /dev/null
-/*
- global-regs.cc -- implement
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "input-register.hh"
-#include "debug.hh"
-#include "register.hh"
-
-struct Request_register_table_entry {
- String name_str_;
- Reg_ctor ctor_l_;
- Request_register_table_entry(String s, Reg_ctor f) {
- name_str_ =s;
- ctor_l_ = f;
- }
- Request_register_table_entry()
- {
- ctor_l_ =0;
- }
-};
-
-static Array<Request_register_table_entry> *reg_table=0;
-
-void
-add_request_register(String s, Reg_ctor f)
-{
- if (!reg_table)
- reg_table = new Array<Request_register_table_entry>;
-
- reg_table->push(Request_register_table_entry(s, f));
-}
-
-
-Request_register*
-get_register_p(String s)
-{
- for (int i=0; i < reg_table->size(); i++) {
- if ((*reg_table)[i].name_str_ == s)
- return (*(*reg_table)[i].ctor_l_)();
- }
- error("Unknown register `" + s +"\'");
- return 0;
-}
--- /dev/null
+/*
+ global-translator.cc -- implement
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "music.hh"
+#include "global-translator.hh"
+#include "score.hh"
+#include "score-column.hh"
+
+Global_translator::Global_translator()
+{
+ score_l_ = 0;
+ last_mom_ = 0;
+}
+
+Translator*
+Global_translator::ancestor_l(int)
+{
+ return this;
+}
+
+void
+Global_translator::add_moment_to_process(Moment m)
+{
+ if (m > last_mom_)
+ return;
+
+ for (int i=0; i < extra_mom_pq_.size(); i++)
+ if (extra_mom_pq_[i] == m)
+ return;
+ extra_mom_pq_.insert(m);
+}
+
+int
+Global_translator::depth_i()const
+{
+ return 0;
+}
+
+void
+Global_translator::set_score(Score *s)
+{
+ score_l_ = s;
+ last_mom_ = score_l_->music_p_->time_int().max();
+}
+
+void
+Global_translator::modify_next(Moment &w)
+{
+ while (extra_mom_pq_.size() &&
+ extra_mom_pq_.front() <= w)
+
+ w =extra_mom_pq_.get();
+}
+
+int
+Global_translator::moments_left_i()const
+{
+ return extra_mom_pq_.size();
+}
+
+void
+Global_translator::prepare(Moment)
+{
+}
--- /dev/null
+/*
+ headreg.cc -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "note-head.hh"
+#include "head-grav.hh"
+#include "paper-def.hh"
+#include "musical-request.hh"
+
+Note_head_engraver::Note_head_engraver()
+{
+ note_p_ = 0;
+ do_post_move_processing();
+}
+
+bool
+Note_head_engraver::do_try_request(Request *req_l)
+{
+ if (note_req_l_)
+ return false;
+
+ if (req_l->musical() && (req_l->musical()->note() || req_l->musical()->rest()))
+ note_req_l_=req_l->musical()->rhythmic();
+ else
+ return false;
+
+ return true;
+}
+
+void
+Note_head_engraver::do_process_requests()
+{
+ if (!note_req_l_)
+ return;
+
+ Note_head*n_p = new Note_head(8); // ugh
+ note_p_ = n_p;
+ n_p->set_rhythmic(note_req_l_->rhythmic());
+
+ if (note_req_l_->note()) {
+ n_p->position_i_ = note_req_l_->note()->height() +
+ *get_staff_info().c0_position_i_l_;
+ } else if (note_req_l_->rest()) {
+ n_p->rest_b_ = true;
+ }
+
+ Score_elem_info itinf(note_p_,note_req_l_);
+ announce_element(itinf);
+}
+
+void
+Note_head_engraver::do_pre_move_processing()
+{
+ if (note_p_) {
+ typeset_element(note_p_);
+ note_p_ = 0;
+ }
+}
+void
+Note_head_engraver::do_post_move_processing()
+{
+ note_req_l_ = 0;
+}
+
+IMPLEMENT_STATIC_NAME(Note_head_engraver);
+IMPLEMENT_IS_TYPE_B1(Note_head_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Note_head_engraver);
+++ /dev/null
-/*
- headreg.cc -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-head.hh"
-#include "head-reg.hh"
-#include "paper-def.hh"
-#include "musical-request.hh"
-
-Note_head_register::Note_head_register()
-{
- note_p_ = 0;
- do_post_move_processing();
-}
-
-bool
-Note_head_register::do_try_request(Request *req_l)
-{
- if (note_req_l_)
- return false;
-
- if (req_l->musical() && (req_l->musical()->note() || req_l->musical()->rest()))
- note_req_l_=req_l->musical()->rhythmic();
- else
- return false;
-
- return true;
-}
-
-void
-Note_head_register::do_process_requests()
-{
- if (!note_req_l_)
- return;
-
- Note_head*n_p = new Note_head(8); // ugh
- note_p_ = n_p;
- n_p->set_rhythmic(note_req_l_->rhythmic());
-
- if (note_req_l_->note()) {
- n_p->position_i_ = note_req_l_->note()->height() +
- *get_staff_info().c0_position_i_l_;
- } else if (note_req_l_->rest()) {
- n_p->rest_b_ = true;
- }
-
- Score_elem_info itinf(note_p_,note_req_l_);
- announce_element(itinf);
-}
-
-void
-Note_head_register::do_pre_move_processing()
-{
- if (note_p_) {
- typeset_element(note_p_);
- note_p_ = 0;
- }
-}
-void
-Note_head_register::do_post_move_processing()
-{
- note_req_l_ = 0;
-}
-
-IMPLEMENT_STATIC_NAME(Note_head_register);
-IMPLEMENT_IS_TYPE_B1(Note_head_register,Request_register);
-ADD_THIS_REGISTER(Note_head_register);
*/
#include <assert.h>
-
+#include "paper-def.hh"
#include "score.hh"
#include "identifier.hh"
#include "my-lily-lexer.hh"
#include "debug.hh"
-#include "input-register.hh"
+#include "input-engraver.hh"
#include "symtable.hh"
#include "lookup.hh"
#include "script-def.hh"
#include "request.hh"
-#include "input-register.hh"
+#include "input-engraver.hh"
IMPLEMENT_STATIC_NAME(Identifier);
IMPLEMENT_IS_TYPE_B(Identifier);
DEFAULT_PRINT(Music_id,Music , music);
DEFAULT_PRINT(Request_id, Request, request);
DEFAULT_PRINT(Score_id, Score, score);
-DEFAULT_PRINT(Input_regs_id, Input_register, iregs);
-
+DEFAULT_PRINT(Input_gravs_id, Input_engraver, igravs);
+DEFAULT_PRINT(Paper_def_id,Paper_def, paperdef);
void
Real_id::do_print() const
{
implement_id_class(Music_id, Music, music);
implement_id_class(Score_id, Score, score);
implement_id_class(Request_id, Request, request);
-implement_id_class(Input_regs_id, Input_register, iregs);
+implement_id_class(Input_gravs_id, Input_engraver, igravs);
+implement_id_class(Paper_def_id, Paper_def, paperdef);
Identifier::Identifier(Identifier const&)
{
virtual_accessor(Music_id, Music, music);
default_accessor(Score_id, Score, score);
virtual_accessor(Request_id, Request, request);
-default_accessor(Input_regs_id, Input_register, iregs);
+default_accessor(Input_gravs_id, Input_engraver, igravs);
+default_accessor(Paper_def_id, Paper_def, paperdef);
/*
- acceptor.hh -- declare Acceptor
+ acceptor.hh -- declare Translator
source file of the GNU LilyPond music typesetter
#include "interpreter.hh"
#include "virtual-methods.hh"
-class Acceptor {
+class Translator {
public:
String id_str_;
virtual Interpreter * interpreter_l() { return 0; }
- /// Score_register = 0, Staff_registers = 1, etc)
+ /// Score_engraver = 0, Staff_engravers = 1, etc)
virtual int depth_i()const=0;
- virtual Acceptor *find_get_acceptor_l(String name, String id)=0;
- virtual Acceptor *ancestor_l(int l=1)=0;
- virtual ~Acceptor(){}
+ virtual Translator *find_get_translator_l(String name, String id)=0;
+ virtual Translator *ancestor_l(int l=1)=0;
+ virtual ~Translator(){}
NAME_MEMBERS();
- Acceptor();
- virtual Acceptor *get_default_interpreter()=0;
+ Translator();
+ virtual Translator *get_default_interpreter()=0;
};
-class Interpreter : public virtual Acceptor {
+class Interpreter : public virtual Translator {
public:
virtual bool interpret_request_b(Request*) { return false;}
};
--- /dev/null
+/*
+ bar-align-grav.hh -- declare
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BAR_ALIGN_GRAV_HH
+#define BAR_ALIGN_GRAV_HH
+
+#endif // BAR_ALIGN_GRAV_HH
+++ /dev/null
-/*
- bar-align-reg.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef BAR_ALIGN_REG_HH
-#define BAR_ALIGN_REG_HH
-
-#endif // BAR_ALIGN_REG_HH
--- /dev/null
+/*
+ bar-grav.hh -- declare Bar_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BARGRAV_HH
+#define BARGRAV_HH
+#include "engraver.hh"
+
+/**
+ generate bars. Either user ("|:"), or default (new measure)
+ */
+class Bar_engraver : public Request_engraver {
+ Bar_req * bar_req_l_;
+ Bar * bar_p_;
+public:
+ Bar_engraver();
+ NAME_MEMBERS();
+
+
+protected:
+ virtual bool do_try_request(Request *req_l);
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+};
+
+#endif // BARGRAV_HH
+++ /dev/null
-/*
- bar-reg.hh -- declare Bar_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef BARREG_HH
-#define BARREG_HH
-#include "register.hh"
-
-/**
- generate bars. Either user ("|:"), or default (new measure)
- */
-class Bar_register : public Request_register {
- Bar_req * bar_req_l_;
- Bar * bar_p_;
-public:
- Bar_register();
- NAME_MEMBERS();
-
-
-protected:
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-};
-
-#endif // BARREG_HH
--- /dev/null
+/*
+ clef.hh -- part of GNU LilyPond
+
+ (c) 1996,97 Han-Wen Nienhuys
+*/
+
+#ifndef CLEF_HH
+#define CLEF_HH
+
+#include "scalar.hh"
+#include "varray.hh"
+#include "engraver.hh"
+
+/// where is c-0 in the staff?
+class Clef_engraver : public Request_engraver {
+ Clef_item *clef_p_;
+ Clef_change_req * clef_req_l_;
+ void create_clef();
+ void read_req(Clef_change_req*);
+ bool set_type(String);
+protected:
+ virtual void do_process_requests();
+ virtual void fill_staff_info(Staff_info&);
+ virtual void do_pre_move_processing();
+ virtual void do_removal_processing();
+ virtual void do_creation_processing();
+ virtual void do_post_move_processing();
+ virtual bool do_try_request(Request*);
+ virtual void acknowledge_element(Score_elem_info);
+public:
+ int c0_position_i_;
+ String clef_type_str_;
+
+ /* ************** */
+
+ Clef_engraver();
+ NAME_MEMBERS();
+
+};
+#endif // CLEF_HH
+
NAME_MEMBERS();
SCORE_ELEM_CLONE(Clef_item);
Clef_item();
- void read(Clef_register const&);
+ void read(Clef_engraver const&);
void read(String);
};
+++ /dev/null
-/*
- clef.hh -- part of GNU LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef CLEF_HH
-#define CLEF_HH
-
-#include "scalar.hh"
-#include "varray.hh"
-#include "register.hh"
-
-/// where is c-0 in the staff?
-class Clef_register : public Request_register {
- Clef_item *clef_p_;
- Clef_change_req * clef_req_l_;
- void create_clef();
- void read_req(Clef_change_req*);
- bool set_type(String);
-protected:
- virtual void do_process_requests();
- virtual void fill_staff_info(Staff_info&);
- virtual void do_pre_move_processing();
- virtual void do_removal_processing();
- virtual void do_creation_processing();
- virtual void do_post_move_processing();
- virtual bool do_try_request(Request*);
- virtual void acknowledge_element(Score_elem_info);
-public:
- int c0_position_i_;
- String clef_type_str_;
-
- /* ************** */
-
- Clef_register();
- NAME_MEMBERS();
-
-};
-#endif // CLEF_HH
-
--- /dev/null
+/*
+ collision-grav.hh -- declare Collision_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef COLLISION_GRAV_HH
+#define COLLISION_GRAV_HH
+
+#include "engraver.hh"
+
+class Collision_engraver : public Request_engraver {
+ Collision* col_p_;
+
+protected:
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+public:
+ Collision_engraver();
+ NAME_MEMBERS();
+};
+#endif // COLLISION_GRAV_HH
+++ /dev/null
-/*
- collision-reg.hh -- declare Collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef COLLISION_REG_HH
-#define COLLISION_REG_HH
-
-#include "register.hh"
-
-class Collision_register : public Request_register {
- Collision* col_p_;
-
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-public:
- Collision_register();
- NAME_MEMBERS();
-};
-#endif // COLLISION_REG_HH
--- /dev/null
+/*
+ dynamic-grav.hh -- declare Dynamic_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef DYNAMIC_GRAV_HH
+#define DYNAMIC_GRAV_HH
+
+#include "engraver.hh"
+
+class Dynamic_engraver : public Request_engraver {
+ int dir_i_;
+ Text_item * dynamic_p_;
+ Crescendo * to_end_cresc_p_;
+ Crescendo * cresc_p_;
+ Span_dynamic_req * cresc_req_l_;
+ Array<Dynamic_req*> dynamic_req_l_arr_;
+ /* ************** */
+public:
+ Dynamic_engraver();
+ ~Dynamic_engraver();
+ NAME_MEMBERS();
+protected:
+ virtual void acknowledge_element(Score_elem_info);
+ virtual bool do_try_request(Request *req_l);
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+ virtual void set_feature(Feature);
+};
+
+#endif // DYNAMIC_GRAV_HH
+++ /dev/null
-/*
- dynamic-reg.hh -- declare Dynamic_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef DYNAMIC_REG_HH
-#define DYNAMIC_REG_HH
-
-#include "register.hh"
-
-class Dynamic_register : public Request_register {
- int dir_i_;
- Text_item * dynamic_p_;
- Crescendo * to_end_cresc_p_;
- Crescendo * cresc_p_;
- Span_dynamic_req * cresc_req_l_;
- Array<Dynamic_req*> dynamic_req_l_arr_;
- /* ************** */
-public:
- Dynamic_register();
- ~Dynamic_register();
- NAME_MEMBERS();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void set_feature(Feature);
-};
-
-#endif // DYNAMIC_REG_HH
--- /dev/null
+/*
+ engravergroup.hh -- declare Engraver_group_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef ENGRAVERGROUP_HH
+#define ENGRAVERGROUP_HH
+
+#include "parray.hh"
+#include "plist.hh"
+#include "score-elem-info.hh"
+#include "engraver.hh"
+#include "translator.hh"
+
+
+/**
+ Group a number of engravers. Usually delegates everything to its contents.
+ Postfix: group
+ */
+class Engraver_group_engraver : public Request_engraver, public virtual Translator {
+protected:
+
+ Pointer_list<Request_engraver*> grav_list_;
+ Link_array<Engraver_group_engraver> group_l_arr_;
+ Link_array<Request_engraver> nongroup_l_arr_;
+
+ Array<Score_elem_info> announce_info_arr_;
+
+ virtual void do_print()const;
+
+ virtual bool removable_b()const;
+
+public:
+ Input_engraver * igrav_l_;
+ void check_removal();
+ Engraver_group_engraver();
+ ~Engraver_group_engraver();
+
+
+
+ /**
+ Junk #grav_l#.
+ Pre:
+ #grav_l# is in #grav_list_#
+ */
+ virtual void terminate_engraver(Request_engraver * grav_l);
+
+ NAME_MEMBERS();
+
+ /**
+ Remove #grav_l# from the list, and return it.
+ */
+ virtual Request_engraver * remove_engraver_p(Request_engraver*grav_l);
+ virtual void set_feature(Feature i);
+ virtual void sync_features() ;
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+
+ virtual void do_removal_processing();
+ virtual bool do_try_request(Request*);
+ virtual void do_process_requests();
+
+ virtual Staff_info get_staff_info()const;
+
+ virtual Engraver_group_engraver * find_engraver_l(String name,String id);
+ virtual void do_announces();
+ virtual void announce_element(Score_elem_info);
+
+
+ virtual void add(Request_engraver* grav_p);
+
+ virtual bool contains_b(Request_engraver*)const;
+
+ virtual Translator* find_get_translator_l(String name, String id);
+ virtual Translator * get_default_interpreter();
+ /**
+ Go up in the tree. default: choose next parent
+ */
+ Translator * ancestor_l(int l=1);
+ int depth_i() const;
+
+};
+
+#endif // ENGRAVERGROUP_HH
+
+
--- /dev/null
+/*
+ engraver.hh -- declare Request_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef ENGRAVER_HH
+#define ENGRAVER_HH
+
+#include "lily-proto.hh"
+#include "varray.hh"
+#include "request.hh"
+#include "score-elem-info.hh"
+#include "staff-info.hh"
+
+
+
+
+/**
+ a struct which processes requests, and creates the #Score_elem#s.
+ It may use derived classes. Hungarian postfix: grav
+
+ */
+
+class Request_engraver {
+
+ friend class Engraver_group_engraver;
+ /**
+ You cannot copy a Request_engraver
+ */
+ Request_engraver(const Request_engraver&){}
+
+ enum {
+ VIRGIN,
+ CREATION_INITED,
+ MOVE_INITED,
+ ACCEPTED_REQS,
+ PROCESSED_REQS,
+ ACKED_REQS,
+ MOVE_DONE
+ } status;
+
+protected:
+
+
+ /// utility
+ virtual Paper_def * paper() const;
+
+
+ /// make items/spanners with the requests you got
+ virtual void do_process_requests(){}
+
+ /** typeset any items/spanners. Default: do nothing
+ */
+ virtual void do_pre_move_processing(){}
+ /** reset any appropriate data. Default: do nothing
+ */
+ virtual void do_post_move_processing(){}
+
+
+ virtual void do_creation_processing () {}
+ virtual void do_removal_processing() {}
+
+ /**
+ typeset a "command" item. Default: pass on to daddy.
+ If the column is not breakable, #pre_p# and #post_p# are junked
+ */
+ virtual void typeset_breakable_item(Item * nobreak_p);
+ /**
+ Invoke walker method to typeset element. Default: pass on to daddy.
+ */
+ virtual void typeset_element(Score_elem*elem_p);
+
+ /**
+ take note of item/spanner
+ put item in spanner. Adjust local key; etc.
+
+ Default: ignore the info
+ */
+ virtual void acknowledge_element(Score_elem_info) {}
+ /**
+ Announce element. Default: pass on to daddy. Utility
+ */
+ virtual void announce_element(Score_elem_info);
+ /**
+ Set Feature of the engraver(s). Default: ignore Feature.
+ */
+ virtual void set_feature(Feature){}
+ /**
+ ask daddy for a feature
+ */
+ virtual Scalar get_feature(String type_str);
+ /**
+ Does this equal or contain a certain engraver?
+ */
+
+ virtual void sync_features() {}
+
+ virtual bool contains_b(Request_engraver*grav_l)const;
+ /**
+ Get information on the staff. Default: ask daddy.
+ */
+ virtual Staff_info get_staff_info()const;
+ virtual void fill_staff_info(Staff_info&);
+
+
+ virtual void do_print()const;
+ /*
+ @see{try_request}
+ Default: always return false
+ */
+ virtual bool do_try_request(Request *req_l);
+public:
+ void pre_move_processing();
+ void process_requests();
+ /**
+ try to fit the request in this engraver
+
+ @return
+ false: not noted, not taken.
+
+ true: request swallowed. Don't try to put the request elsewhere.
+
+ */
+ bool try_request(Request*);
+
+ void post_move_processing();
+
+ Engraver_group_engraver * daddy_grav_l_;
+
+ Request_engraver();
+ virtual ~Request_engraver(){}
+ NAME_MEMBERS();
+ void print() const;
+};
+
+/**
+ A macro to automate administration of engravers.
+ */
+#define ADD_THIS_ENGRAVER(c) \
+struct c ## init { \
+ static Request_engraver * globalctor (){ \
+ return new c; \
+ } \
+ c ## init () { \
+ add_request_engraver(c::static_name(), globalctor); \
+ \
+ } \
+} _ ## c ## init;
+
+typedef Request_engraver*(*Grav_ctor)(void);
+void add_request_engraver(String s, Grav_ctor f);
+
+#endif // ENGRAVER_HH
+
+++ /dev/null
-/*
- global-acceptor.hh -- declare Global_acceptor
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef GLOBAL_ACCEPTOR_HH
-#define GLOBAL_ACCEPTOR_HH
-
-#include "acceptor.hh"
-#include "pqueue.hh"
-
-class Global_acceptor : public virtual Acceptor {
- PQueue<Moment> extra_mom_pq_;
- Moment last_mom_;
-public:
- Score *score_l_;
- Global_acceptor();
- int moments_left_i()const;
- void modify_next(Moment&);
- void add_moment_to_process(Moment);
-
- virtual void set_score(Score*);
- virtual void prepare(Moment);
- virtual void process() {}
- virtual void finish() {}
-
-protected:
- virtual int depth_i() const;
- virtual Acceptor *ancestor_l(int);
-};
-
-
-
-#endif // GLOBAL_ACCEPTOR_HH
--- /dev/null
+/*
+ global-acceptor.hh -- declare Global_acceptor
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef GLOBAL_ACCEPTOR_HH
+#define GLOBAL_ACCEPTOR_HH
+
+#include "acceptor.hh"
+#include "pqueue.hh"
+
+class Global_translator : public virtual Translator {
+ PQueue<Moment> extra_mom_pq_;
+ Moment last_mom_;
+public:
+ Score *score_l_;
+ Global_translator();
+ int moments_left_i()const;
+ void modify_next(Moment&);
+ void add_moment_to_process(Moment);
+
+ virtual void set_score(Score*);
+ virtual void prepare(Moment);
+ virtual void process() {}
+ virtual void finish() {}
+
+protected:
+ virtual int depth_i() const;
+ virtual Translator *ancestor_l(int);
+};
+
+
+
+#endif // Global_translator_HH
--- /dev/null
+/*
+ head-grav.hh -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef HEADGRAV_HH
+#define HEADGRAV_HH
+#include "engraver.hh"
+
+struct Note_head_engraver : Request_engraver {
+ Note_head* note_p_;
+ Rhythmic_req * note_req_l_;
+
+ /* *************** */
+ Note_head_engraver();
+ virtual bool do_try_request(Request *req_l) ;
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+ NAME_MEMBERS();
+};
+
+
+#endif // HEADGRAV_HH
+++ /dev/null
-/*
- headreg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef HEADREG_HH
-#define HEADREG_HH
-#include "register.hh"
-
-struct Note_head_register : Request_register {
- Note_head* note_p_;
- Rhythmic_req * note_req_l_;
-
- /* *************** */
- Note_head_register();
- virtual bool do_try_request(Request *req_l) ;
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- NAME_MEMBERS();
-};
-
-
-#endif // HEADREG_HH
NAME_MEMBERS();
void error(String);
IDACCESSOR(Music, music)
- IDACCESSOR(Input_register, iregs)
+ IDACCESSOR(Input_engraver, igravs)
IDACCESSOR(General_script_def, script)
IDACCESSOR(Symtables, symtables)
+ IDACCESSOR(Paper_def, paperdef)
IDACCESSOR(Lookup,lookup)
IDACCESSOR(Real,real)
IDACCESSOR(Request, request)
declare_id_class(Int_id, int, intid);
declare_id_class(Score_id, Score, score);
declare_id_class(Request_id, Request, request);
-declare_id_class(Input_regs_id, Input_register, iregs);
-
+declare_id_class(Input_gravs_id, Input_engraver, igravs);
+declare_id_class(Paper_def_id,Paper_def, paperdef);
#endif // IDENTIFIER_
--- /dev/null
+/*
+ input-engraver.hh -- declare Input_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef INPUT_ENGRAVER_HH
+#define INPUT_ENGRAVER_HH
+
+#include "plist.hh"
+#include "string.hh"
+#include "lily-proto.hh"
+#include "input.hh"
+#include "string.hh"
+#include "varray.hh"
+
+struct Input_engraver : Input {
+ Pointer_list<Input_engraver*> contains_igrav_p_list_;
+ Array<String> consists_str_arr_;
+ Array<String> alias_str_arr_;
+ String name_str_;
+
+ void add(Input_engraver *);
+ bool is_name_b(String);
+ bool accept_req_b();
+ bool accepts_b(String);
+ void print() const;
+ Engraver_group_engraver * get_group_engraver_p();
+ Input_engraver * get_default_igrav_l();
+ Input_engraver * recursive_find(String nm);
+ Input_engraver * find_igrav_l(String nm);
+};
+
+
+void add_global_input_engraver(Input_engraver* igrav_p);
+Input_engraver*lookup_grav(String);
+Request_engraver*get_engraver_p(String s);
+
+#endif // INPUT_ENGRAVER_HH
+++ /dev/null
-/*
- input-register.hh -- declare Input_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef INPUT_REGISTER_HH
-#define INPUT_REGISTER_HH
-
-#include "plist.hh"
-#include "string.hh"
-#include "lily-proto.hh"
-#include "input.hh"
-#include "string.hh"
-#include "varray.hh"
-
-struct Input_register : Input {
- Pointer_list<Input_register*> contains_ireg_p_list_;
- Array<String> consists_str_arr_;
- Array<String> alias_str_arr_;
- String name_str_;
-
- void add(Input_register *);
- bool is_name_b(String);
- bool accept_req_b();
- bool accepts_b(String);
- void print() const;
- Register_group_register * get_group_register_p();
- Input_register * get_default_ireg_l();
- Input_register * recursive_find(String nm);
- Input_register * find_ireg_l(String nm);
-};
-
-
-void add_global_input_register(Input_register* ireg_p);
-Input_register*lookup_reg(String);
-Request_register*get_register_p(String s);
-
-#endif // INPUT_REGISTER_HH
+++ /dev/null
-/*
- interpretor.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef Interpreter_HH
-#define Interpreter_HH
-
-class Interpreter {
-public:
- /// link to my definition
- Input_register * ireg_l_;
- void interpret_request(Request *);
- NAME_MEMBERS();
- ~Interpreter();
- /** typeset any items/spanners. Default: do nothing
- */
- virtual void do_pre_move_processing(){}
-};
-
-class Paper_interpreter : Interpreter {
-
-};
-
-class Midi_interpreter : Interpreter {
-};
-
-#endif // Interpreter_HH
--- /dev/null
+/*
+ key-grav.hh -- declare Key_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef KEYGRAV_HH
+#define KEYGRAV_HH
+
+#include "engraver.hh"
+#include "key.hh"
+
+struct Key_engraver : Request_engraver {
+ Key key_;
+ Key_change_req * keyreq_l_;
+ Key_item * kit_p_;
+ Array<int> accidental_idx_arr_;
+ bool default_key_b_;
+ bool change_key_b_;
+
+ virtual bool do_try_request(Request *req_l);
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+ virtual void acknowledge_element(Score_elem_info);
+ Key_engraver();
+ NAME_MEMBERS();
+private:
+ void create_key();
+
+ void read_req(Key_change_req * r);
+};
+
+#endif // KEYGRAV_HH
Key_item(int cposition);
void add(int pitch, int acc);
- void read(const Key_register&);
+ void read(const Key_engraver&);
void set_c_position(int);
virtual void do_pre_processing();
Molecule* brew_molecule_p()const;
+++ /dev/null
-/*
- key-reg.hh -- declare Key_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef KEYREG_HH
-#define KEYREG_HH
-
-#include "register.hh"
-#include "key.hh"
-
-struct Key_register : Request_register {
- Key key_;
- Key_change_req * keyreq_l_;
- Key_item * kit_p_;
- Array<int> accidental_idx_arr_;
- bool default_key_b_;
- bool change_key_b_;
-
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void acknowledge_element(Score_elem_info);
- Key_register();
- NAME_MEMBERS();
-private:
- void create_key();
-
- void read_req(Key_change_req * r);
-};
-
-#endif // KEYREG_HH
struct My_lily_lexer;
struct Absolute_dynamic_req;
-struct Acceptor;
+struct Translator;
struct Atom;
struct Bar;
-struct Bar_register;
+struct Bar_engraver;
struct Bar_req;
struct Barcheck_req;
struct Beam;
struct Chord;
struct Clef_change_req;
struct Clef_item;
-struct Clef_register;
+struct Clef_engraver;
struct Col_hpositions;
struct Chord;
struct Colinfo;
struct Collision;
-struct Collision_register;
+struct Collision_engraver;
struct Command_req;
struct Command_script_req;
struct Complex_music;
struct Element_group_item;
struct Feature;
struct General_script_def;
-struct Global_acceptor;
+struct Global_translator;
struct Group_change_req;
struct Group_feature_req;
struct Horizontal_align_item;
struct Identifier;
struct Interpreter;
struct Input_file;
-struct Input_register;
+struct Input_engraver;
struct Input_score;
struct Item;
struct Key;
struct Key_change_req;
struct Key_item;
-struct Key_register;
+struct Key_engraver;
struct Keyword;
struct Keyword_table;
struct Lily_stream;
struct Linestaff;
struct Local_key;
struct Local_key_item;
-struct Local_key_register;
+struct Local_key_engraver;
struct Lookup;
struct Lyric_item;
struct Lyric_req;
struct Melodic_req;
struct Meter;
struct Meter_change_req;
-struct Meter_register;
+struct Meter_engraver;
struct Midi_def;
struct Midi_duration;
struct Midi_header;
struct Music_list;
struct My_lily_parser;
struct Note_column;
-struct Note_column_register;
+struct Note_column_engraver;
struct Note_req;
struct Note_head;
-struct Note_head_register;
+struct Note_head_engraver;
struct Notename_table;
struct Offset;
struct Output;
struct Pulk_voice;
struct Pulk_voices;
struct Rational;
-struct Register_group_register;
+struct Engraver_group_engraver;
struct Request;
struct Request_column;
-struct Request_register;
+struct Request_engraver;
struct Rest;
struct Rest_collision;
-struct Rest_collision_register;
+struct Rest_collision_engraver;
struct Rest_column;
struct Rest_req;
struct Rhythmic_grouping;
struct Script;
struct Script_column;
struct Script_def;
-struct Script_register;
+struct Script_engraver;
struct Script_req;
struct Simple_music;
struct Skip_req;
struct Slur;
-struct Slur_register;
+struct Slur_engraver;
struct Slur_req;
struct Spacing_req ;
struct Span_dynamic_req;
struct Staff_side;
struct Staff_symbol;
struct Stem;
-struct Stem_beam_register;
+struct Stem_beam_engraver;
struct Stem_req;
struct String;
struct Subtle_req;
struct Text_def;
struct Text_gob;
struct Text_item ;
-struct Text_register;
+struct Text_engraver;
struct Text_req;
struct Tie;
-struct Tie_register;
+struct Tie_engraver;
struct Tie_req;
struct Time_description;
struct Timing_req;
struct Voice;
struct Voice_element;
-struct Voice_group_registers;
+struct Voice_group_engravers;
struct Voice_list;
-struct Voice_registers;
+struct Voice_engravers;
struct Voicegroup;
-struct Walker_registers;
+struct Walker_engravers;
typedef Rational Moment;
#endif // LILY_PROTO_HH
--- /dev/null
+/*
+ local-key-grav.hh -- declare Local_key_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef LOCALKEYGRAV_HH
+#define LOCALKEYGRAV_HH
+
+#include "engraver.hh"
+#include "key.hh"
+#include "parray.hh"
+
+struct Local_key_engraver : Request_engraver {
+ Key local_key_;
+ Key const *key_C_;
+ Array<Note_req* > mel_l_arr_;
+ Array<Item* > support_l_arr_;
+ Link_array<Item > forced_l_arr_;
+ Link_array<Item > tied_l_arr_;
+ /* *************** */
+ virtual void do_process_requests();
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+ Local_key_engraver();
+ NAME_MEMBERS();
+};
+
+#endif // LOCALKEYGRAV_HH
+++ /dev/null
-/*
- local-key-reg.hh -- declare Local_key_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef LOCALKEYREG_HH
-#define LOCALKEYREG_HH
-
-#include "register.hh"
-#include "key.hh"
-#include "parray.hh"
-
-struct Local_key_register : Request_register {
- Key local_key_;
- Key const *key_C_;
- Array<Note_req* > mel_l_arr_;
- Array<Item* > support_l_arr_;
- Link_array<Item > forced_l_arr_;
- Link_array<Item > tied_l_arr_;
- /* *************** */
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- Local_key_register();
- NAME_MEMBERS();
-};
-
-#endif // LOCALKEYREG_HH
/// intuitive interface to symbol table
struct Lookup {
+ Paper_def * paper_l_;
Symtables *symtables_;
String texsetting;
/* *************** */
void add(String, Symtable*);
void print()const;
- Real internote_f()const;
- Real interbeam_f()const;
Symbol linestaff(int n, Real w)const;
Symbol fill(Box b)const;
--- /dev/null
+/*
+ lyric-engraver.hh -- declare Lyric_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef LYRIC_ENGRAVER_HH
+#define LYRIC_ENGRAVER_HH
+#include "engraver.hh"
+#include "varray.hh"
+
+#include "lily-proto.hh"
+
+class Lyric_engraver : public Request_engraver {
+ Array<Lyric_req*> lreq_arr_;
+ virtual bool do_try_request(Request*);
+ virtual void do_process_requests();
+ virtual void do_post_move_processing();
+public:
+ NAME_MEMBERS();
+ Lyric_engraver();
+};
+#endif // LYRIC_ENGRAVER_HH
+++ /dev/null
-/*
- lyric-register.hh -- declare Lyric_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef LYRIC_REGISTER_HH
-#define LYRIC_REGISTER_HH
-#include "register.hh"
-#include "varray.hh"
-
-#include "lily-proto.hh"
-
-class Lyric_register : public Request_register {
- Array<Lyric_req*> lreq_arr_;
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void do_post_move_processing();
-public:
- NAME_MEMBERS();
- Lyric_register();
-};
-#endif // LYRIC_REGISTER_HH
--- /dev/null
+/*
+ meter-grav.hh -- declare Meter_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef METERGRAV_HH
+#define METERGRAV_HH
+#include "engraver.hh"
+#include "time-description.hh"
+#include "grouping.hh"
+
+/**
+ generate meters.
+ */
+class Meter_engraver : public Request_engraver {
+public:
+ Time_description time_;
+ Rhythmic_grouping default_grouping_;
+
+ Meter_change_req * meter_req_l_;
+ Meter * meter_p_;
+
+ virtual void fill_staff_info(Staff_info&);
+ virtual bool do_try_request(Request *req_l);
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_creation_processing();
+ virtual void do_post_move_processing();
+ Meter_engraver();
+ NAME_MEMBERS();
+};
+#endif // METERGRAV_HH
+++ /dev/null
-/*
- meter-reg.hh -- declare Meter_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef METERREG_HH
-#define METERREG_HH
-#include "register.hh"
-#include "time-description.hh"
-#include "grouping.hh"
-
-/**
- generate meters.
- */
-class Meter_register : public Request_register {
-public:
- Time_description time_;
- Rhythmic_grouping default_grouping_;
-
- Meter_change_req * meter_req_l_;
- Meter * meter_p_;
-
- virtual void fill_staff_info(Staff_info&);
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_creation_processing();
- virtual void do_post_move_processing();
- Meter_register();
- NAME_MEMBERS();
-};
-#endif // METERREG_HH
#if 0
-// sketch. . .
-class Midi_register {
-};
-
-class Midi_group_reg : public Midi_register, public Acceptor {
+/*
+ sketch. . .
+
+ It would be totally cool to share code with the Engraver hierarchy,
+ but this is very tough i think.
+
+ */
+class Performer {
+ Performer_group_performer * daddy_perf_l_;
+ virtual bool try_request(Request*r)
+ {
+ return daddy_perf_l_->try_request(r);
+ }
+ virtual void play_event( Midi_item i ) { daddy_perf_l_->play_event (i ); }
};
-class Midi_staff_reg : public Midi_group_reg {
-};
-
-
-class Midi_note_reg : public Midi_register {
+class Performer_group_performer : public Performer, public Translator {
+ Pointer_list<Performer*> perf_p_list_;
-};
-
-class Midi_voice_reg : public Midi_group_reg, public Interpreter {
+ Link_array<Performer_group_performer> group_l_arr_;
+ Link_array<Performer> nongroup_l_arr_;
+
+ bool try_request(Request*r)
+ {
+ bool hebbes_b =false;
+ for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
+ hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
+ if (!hebbes_b)
+ hebbes_b = daddy_grav_l_->try_request(req_l);
+ return hebbes_b ;
+ }
};
-class Midi_score_reg: public Midi_group_reg, public Global_acceptor {
+class Staff_performer : public Performer_group_performer
+{
+ int midi_track_i_;
+ String instrument_str() {
+ return Translator::id_str_;
+ }
+ virtual void play_event ( Midi_item i)
+ {
+ i.track_i_ = midi_track_i_;
+ Performer::play_event(i);
+ }
};
+class Voice_performer_group_performer : public Performer_group_performer {
-#include "grouping.hh"
-#include "staff-walker.hh"
-#include "pcursor.hh"
-#include "pqueue.hh"
-
-
-struct Note_event : PQueue_ent<Moment,Melodic_req*>
-{
- bool ignore_b_;
- Note_event() {
- ignore_b_ = false;
- }
};
-int compare(Note_event const&, Note_event const&);
+class Note_performer : public Performer {
+ Melodic_req * current_l_;
+ Moment switch_off_at_,switch_on_at_;
-/**
- a simple walker which collects midi stuff, and then outputs.
- Should derive from Staff_walker
- */
-class Midi_walker : public PCursor<Staff_column*>
+ virtual void process_request() {
+ if (when() == switch_off_at_ )
+ play_event( Note_event(current_l_->pitch() ))
+};
+
+class Voice_performer :
+ public Performer_group_performer, public Interpreter
{
- Midi_track *track_l_;
- PQueue< Note_event > stop_notes;
-
- Moment last_moment_;
+};
- /* *************** */
- void do_stop_notes(Moment);
- void do_start_note(Note_req *note_l);
- void output_event(Midi_item&, Moment);
-public:
-
- Midi_walker(Staff*, Midi_track*);
- void do_process_requests();
- ~Midi_walker();
+class Score_performer:
+ public Performer_group_performer, public Global_translator
+{
+ Midi_file * file_p_;
+ Moment prev_;
+ virtual void play_event(Midi_item i)
+ {
+ file_p_->output (i);
+ }
+ virtual void prepare(Moment m){
+ file_p_->move ( m -prev_ );
+ }
};
+
#endif
#endif // MIDIWALKER_HH
public:
Music_iterator *daddy_iter_l_;
NAME_MEMBERS();
- Acceptor *report_to_l_;
+ Translator *report_to_l_;
- static Music_iterator* static_get_iterator_p(Music*,Acceptor*);
+ static Music_iterator* static_get_iterator_p(Music*,Translator*);
Music_iterator* get_iterator_p(Music*)const;
- void set_acceptor(Acceptor*);
+ void set_translator(Translator*);
Music_iterator();
virtual void next(Moment until);
virtual Moment next_moment()const;
virtual ~Music_iterator();
virtual void construct_children();
void print()const;
- virtual Acceptor * get_req_acceptor_l();
+ virtual Translator * get_req_translator_l();
};
// duh.
--- /dev/null
+/*
+ note-column-grav.hh -- declare Note_column_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef NOTE_COLUMN_GRAV_HH
+#define NOTE_COLUMN_GRAV_HH
+
+#include "engraver.hh"
+
+class Note_column_engraver :public Request_engraver {
+ Rest_column * rest_col_l();
+ Note_column * note_col_l();
+
+ Array< Script * > script_l_arr_;
+ Stem * stem_l_;
+ Note_column *ncol_p_;
+ Rest_column *restcol_p_;
+ bool h_shift_b_;
+ int dir_i_;
+
+ /* *************** */
+ bool acceptable_elem_b(Score_elem const*)const;
+protected:
+ virtual void set_feature(Feature);
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+public:
+ Note_column_engraver();
+ NAME_MEMBERS();
+};
+#endif // NOTE_COLUMN_GRAV_HH
+++ /dev/null
-/*
- note-column-reg.hh -- declare Note_column_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef NOTE_COLUMN_REG_HH
-#define NOTE_COLUMN_REG_HH
-
-#include "register.hh"
-
-class Note_column_register :public Request_register {
- Rest_column * rest_col_l();
- Note_column * note_col_l();
-
- Array< Script * > script_l_arr_;
- Stem * stem_l_;
- Note_column *ncol_p_;
- Rest_column *restcol_p_;
- bool h_shift_b_;
- int dir_i_;
-
- /* *************** */
- bool acceptable_elem_b(Score_elem const*)const;
-protected:
- virtual void set_feature(Feature);
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-public:
- Note_column_register();
- NAME_MEMBERS();
-};
-#endif // NOTE_COLUMN_REG_HH
#ifndef PAPER_DEF_HH
#define PAPER_DEF_HH
#include "lily-proto.hh"
+
#include "real.hh"
#include "string.hh"
#include "moment.hh"
add support for multiple fontsizes
split into "Input_paper_def" and Paper_def
+
add support for other len->wid conversions.
-
+
+ Input_engraver should be in here.
*/
class Paper_def {
Lookup *lookup_p_;
-public:
- String outfile;
-
- Real linewidth;
+ Assoc<String, Real> *real_vars_p_;
- /// how much space does a whole note take (ideally?)
- Real whole_width;
-
- /// ideal = geometric_ ^ log2(duration)
- Real geometric_;
+public:
+ String outfile_str_;
+
/* *************** */
+ void set_var(String, Real);
+ Real get_var (String)const;
void reinit();
- Paper_def(Lookup*);
+ Paper_def();
void set(Lookup*);
~Paper_def();
Paper_def(Paper_def const&);
/// thickness of the standard line
Real rule_thickness()const;
-
+ Real whole_width()const;
+ Real linewidth_f()const;
/// height of the staff
Real standard_height()const;
/// width of a quaver ball
Real note_width() const;
void print() const;
+
Lookup const * lookup_l(); // TODO naming
/** convert a duration to an idealspacing
- influence using the geometric_ and whole_width parameters.
+ influence using the geometric_ and parameters.
*/
Real duration_to_dist(Moment);
};
+++ /dev/null
-/*
- registergroup.hh -- declare Register_group_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REGISTERGROUP_HH
-#define REGISTERGROUP_HH
-
-#include "parray.hh"
-#include "plist.hh"
-#include "score-elem-info.hh"
-#include "register.hh"
-#include "acceptor.hh"
-
-
-/**
- Group a number of registers. Usually delegates everything to its contents.
- Postfix: group
- */
-class Register_group_register : public Request_register, public virtual Acceptor {
-protected:
-
- Pointer_list<Request_register*> reg_list_;
- Link_array<Register_group_register> group_l_arr_;
- Link_array<Request_register> nongroup_l_arr_;
-
- Array<Score_elem_info> announce_info_arr_;
-
- virtual void do_print()const;
-
- virtual bool removable_b()const;
-
-public:
- Input_register * ireg_l_;
- void check_removal();
- Register_group_register();
- ~Register_group_register();
-
-
-
- /**
- Junk #reg_l#.
- Pre:
- #reg_l# is in #reg_list_#
- */
- virtual void terminate_register(Request_register * reg_l);
-
- NAME_MEMBERS();
-
- /**
- Remove #reg_l# from the list, and return it.
- */
- virtual Request_register * remove_register_p(Request_register*reg_l);
- virtual void set_feature(Feature i);
- virtual void sync_features() ;
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-
- virtual void do_removal_processing();
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
-
- virtual Staff_info get_staff_info()const;
-
- virtual Register_group_register * find_register_l(String name,String id);
- virtual void do_announces();
- virtual void announce_element(Score_elem_info);
-
-
- virtual void add(Request_register* reg_p);
-
- virtual bool contains_b(Request_register*)const;
-
- virtual Acceptor* find_get_acceptor_l(String name, String id);
- virtual Acceptor * get_default_interpreter();
- /**
- Go up in the tree. default: choose next parent
- */
- Acceptor * ancestor_l(int l=1);
- int depth_i() const;
-
-};
-
-#endif // REGISTERGROUP_HH
-
-
+++ /dev/null
-/*
- register.hh -- declare Request_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REGISTER_HH
-#define REGISTER_HH
-
-#include "lily-proto.hh"
-#include "varray.hh"
-#include "request.hh"
-#include "score-elem-info.hh"
-#include "staff-info.hh"
-
-
-
-
-/**
- a struct which processes requests, and creates the #Score_elem#s.
- It may use derived classes. Hungarian postfix: register
- */
-class Request_register {
- friend class Register_group_register;
- /**
- You cannot copy a Request_register
- */
- Request_register(const Request_register&){}
-
- enum {
- VIRGIN,
- CREATION_INITED,
- MOVE_INITED,
- ACCEPTED_REQS,
- PROCESSED_REQS,
- ACKED_REQS,
- MOVE_DONE
- } status;
-
-protected:
-
-
- /// utility
- virtual Paper_def * paper() const;
-
-
- /// make items/spanners with the requests you got
- virtual void do_process_requests(){}
-
- /** typeset any items/spanners. Default: do nothing
- */
- virtual void do_pre_move_processing(){}
- /** reset any appropriate data. Default: do nothing
- */
- virtual void do_post_move_processing(){}
-
-
- virtual void do_creation_processing () {}
- virtual void do_removal_processing() {}
-
- /**
- typeset a "command" item. Default: pass on to daddy.
- If the column is not breakable, #pre_p# and #post_p# are junked
- */
- virtual void typeset_breakable_item(Item * nobreak_p);
- /**
- Invoke walker method to typeset element. Default: pass on to daddy.
- */
- virtual void typeset_element(Score_elem*elem_p);
-
- /**
- take note of item/spanner
- put item in spanner. Adjust local key; etc.
-
- Default: ignore the info
- */
- virtual void acknowledge_element(Score_elem_info) {}
- /**
- Announce element. Default: pass on to daddy. Utility
- */
- virtual void announce_element(Score_elem_info);
- /**
- Set Feature of the register(s). Default: ignore Feature.
- */
- virtual void set_feature(Feature){}
- /**
- ask daddy for a feature
- */
- virtual Scalar get_feature(String type_str);
- /**
- Does this equal or contain a certain register?
- */
-
- virtual void sync_features() {}
-
- virtual bool contains_b(Request_register*reg_l)const;
- /**
- Get information on the staff. Default: ask daddy.
- */
- virtual Staff_info get_staff_info()const;
- virtual void fill_staff_info(Staff_info&);
-
-
- virtual void do_print()const;
- /*
- @see{try_request}
- Default: always return false
- */
- virtual bool do_try_request(Request *req_l);
-public:
- void pre_move_processing();
- void process_requests();
- /**
- try to fit the request in this register
-
- @return
- false: not noted, not taken.
-
- true: request swallowed. Don't try to put the request elsewhere.
-
- */
- bool try_request(Request*);
-
- void post_move_processing();
-
- Register_group_register * daddy_reg_l_;
-
- Request_register();
- virtual ~Request_register(){}
- NAME_MEMBERS();
- void print() const;
-};
-
-/**
- A macro to automate administration of registers.
- */
-#define ADD_THIS_REGISTER(c) \
-struct c ## init { \
- static Request_register * globalctor (){ \
- return new c; \
- } \
- c ## init () { \
- add_request_register(c::static_name(), globalctor); \
- \
- } \
-} _ ## c ## init;
-
-typedef Request_register*(*Reg_ctor)(void);
-void add_request_register(String s, Reg_ctor f);
-
-#endif // REGISTER_HH
-
--- /dev/null
+/*
+ rest-collision-grav.hh -- declare Rest_collision_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef REST_COLLISION_GRAV_HH
+#define REST_COLLISION_GRAV_HH
+
+#include "varray.hh"
+#include "engraver.hh"
+
+class Rest_collision_engraver : public Request_engraver {
+ Rest_collision* rest_collision_p_;
+ Array< Collision *> collision_l_arr_;
+protected:
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_print() const;
+ virtual void do_pre_move_processing();
+public:
+ Rest_collision_engraver();
+ NAME_MEMBERS();
+};
+#endif // REST_COLLISION_GRAV_HH
+++ /dev/null
-/*
- rest-collision-reg.hh -- declare Rest_collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REST_COLLISION_REG_HH
-#define REST_COLLISION_REG_HH
-
-#include "varray.hh"
-#include "register.hh"
-
-class Rest_collision_register : public Request_register {
- Rest_collision* rest_collision_p_;
- Array< Collision *> collision_l_arr_;
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_print() const;
- virtual void do_pre_move_processing();
-public:
- Rest_collision_register();
- NAME_MEMBERS();
-};
-#endif // REST_COLLISION_REG_HH
--- /dev/null
+/*
+ score-align-grav.hh -- declare Score_align_reg
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCORE_ALIGN_GRAV_HH
+#define SCORE_ALIGN_GRAV_HH
+
+#include "engraver.hh"
+
+class Score_align_engraver: public Request_engraver
+{
+ Horizontal_group_item * align_p_;
+public:
+
+ const char* type_ch_C_;
+ int priority_i_;
+ Score_align_engraver();
+ NAME_MEMBERS();
+protected:
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+};
+#endif // SCORE_ALIGN_GRAV_HH
+++ /dev/null
-/*
- score-align-reg.hh -- declare Score_align_reg
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_ALIGN_REG_HH
-#define SCORE_ALIGN_REG_HH
-
-#include "register.hh"
-
-class Score_align_register: public Request_register
-{
- Horizontal_group_item * align_p_;
-public:
-
- const char* type_ch_C_;
- int priority_i_;
- Score_align_register();
- NAME_MEMBERS();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_ALIGN_REG_HH
class Score_column {
friend class Score;
- friend class Score_register;
+ friend class Score_engraver;
bool musical_b_;
Moment when_;
Score_elem * elem_l_;
Request*req_l_;
Voice const * voice_l_;
- Array<Request_register*> origin_reg_l_arr_;
+ Array<Request_engraver*> origin_grav_l_arr_;
/* *** */
Score_elem_info(Score_elem*, Request*);
--- /dev/null
+/*
+ score-grav.hh -- declare Score_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCORE_GRAV_HH
+#define SCORE_GRAV_HH
+
+#include "engraver-group.hh"
+#include "global-translator.hh"
+
+class Score_engraver :
+ public Engraver_group_engraver, public Global_translator
+{
+ Line_of_score * scoreline_l_;
+
+
+ Array<Item*> nobreak_item_p_arr_;
+ Link_array<Score_elem> musical_item_p_arr_;
+
+ Score_column* command_column_l_;
+ Score_column* musical_column_l_;
+
+ friend class Score;
+ void set_cols(Score_column*,Score_column*);
+ void typeset_all();
+
+public:
+ NAME_MEMBERS();
+
+ Score_engraver();
+
+protected:
+ /* Global_translator interface */
+ virtual void set_score(Score * score_l);
+ virtual void prepare(Moment);
+ virtual void finish();
+ virtual void process();
+ virtual int depth_i() const { return Global_translator::depth_i();}
+ virtual Translator* ancestor_l(int l) { return Global_translator::ancestor_l(l);}
+
+protected:
+ /* Engraver_group_engraver interface */
+ virtual Staff_info get_staff_info()const;
+ virtual bool do_try_request(Request*);
+ virtual void do_creation_processing();
+ virtual void do_removal_processing();
+ virtual void announce_element(Score_elem_info);
+ virtual void typeset_breakable_item(Item * nobreak_p);
+ virtual void do_announces();
+ virtual void typeset_element(Score_elem*elem_p);
+ virtual Paper_def * paper() const;
+ virtual void do_pre_move_processing();
+};
+
+#endif // SCORE_GRAV_HH
--- /dev/null
+/*
+ score-halign-grav.hh -- declare Score_horizontal_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCORE_HALIGN_GRAV_HH
+#define SCORE_HALIGN_GRAV_HH
+#include "engraver.hh"
+class Score_horizontal_align_engraver : public Request_engraver {
+
+ Break_align_item * halign_p_;
+public:
+ NAME_MEMBERS();
+ Score_horizontal_align_engraver();
+protected:
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+};
+#endif // SCORE_HALIGN_GRAV_HH
+++ /dev/null
-/*
- score-halign-reg.hh -- declare Score_horizontal_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_HALIGN_REG_HH
-#define SCORE_HALIGN_REG_HH
-#include "register.hh"
-class Score_horizontal_align_register : public Request_register {
-
- Break_align_item * halign_p_;
-public:
- NAME_MEMBERS();
- Score_horizontal_align_register();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_HALIGN_REG_HH
+++ /dev/null
-/*
- score-reg.hh -- declare Score_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_REG_HH
-#define SCORE_REG_HH
-
-#include "register-group.hh"
-#include "global-acceptor.hh"
-
-class Score_register : public Register_group_register, public Global_acceptor {
- Line_of_score * scoreline_l_;
-
-
- Array<Item*> nobreak_item_p_arr_;
- Link_array<Score_elem> musical_item_p_arr_;
-
- Score_column* command_column_l_;
- Score_column* musical_column_l_;
-
- friend class Score;
- void set_cols(Score_column*,Score_column*);
- void typeset_all();
-
-public:
- NAME_MEMBERS();
-
- Score_register();
-
-protected:
- /* Global_acceptor interface */
- virtual void set_score(Score * score_l);
- virtual void prepare(Moment);
- virtual void finish();
- virtual void process();
- virtual int depth_i() const { return Global_acceptor::depth_i();}
- virtual Acceptor* ancestor_l(int l) { return Global_acceptor::ancestor_l(l);}
-
-protected:
- /* Register_group_register interface */
- virtual Staff_info get_staff_info()const;
- virtual bool do_try_request(Request*);
- virtual void do_creation_processing();
- virtual void do_removal_processing();
- virtual void announce_element(Score_elem_info);
- virtual void typeset_breakable_item(Item * nobreak_p);
- virtual void do_announces();
- virtual void typeset_element(Score_elem*elem_p);
- virtual Paper_def * paper() const;
- virtual void do_pre_move_processing();
-};
-
-#endif // SCORE_REG_HH
/// find a column.
PCursor<Score_column *> find_col(Moment,bool);
- /// when does the last *musical* element finish?
- Moment last() const;
-
Score(Score const&);
private:
- void run_acceptor(Global_acceptor*);
+ void run_translator(Global_translator*);
void paper_output();
/// do midi stuff
void midi();
--- /dev/null
+/*
+ script-grav.hh -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCRIPTGRAV_HH
+#define SCRIPTGRAV_HH
+
+#include "engraver.hh"
+
+
+class Script_engraver : public Request_engraver {
+ Array<Script *> script_p_arr_;
+ Array<Script_req *> script_req_l_arr_;
+
+ /* *************** */
+ bool acceptable_elem_b(Score_elem*);
+public:
+ NAME_MEMBERS();
+ Script_engraver();
+protected:
+ virtual bool do_try_request(Request*);
+ virtual void do_process_requests();
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+
+};
+
+#endif // SCRIPTGRAV_HH
+++ /dev/null
-/*
- script-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCRIPTREG_HH
-#define SCRIPTREG_HH
-
-#include "register.hh"
-
-
-class Script_register : public Request_register {
- Array<Script *> script_p_arr_;
- Array<Script_req *> script_req_l_arr_;
-
- /* *************** */
- bool acceptable_elem_b(Score_elem*);
-public:
- NAME_MEMBERS();
- Script_register();
-protected:
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-
-};
-
-#endif // SCRIPTREG_HH
--- /dev/null
+/*
+ slur-grav.hh -- declare Slur_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SLURGRAV_HH
+#define SLURGRAV_HH
+
+#include "engraver.hh"
+
+class Slur_engraver :public Request_engraver {
+ Array<Slur_req*> requests_arr_;
+ Array<Slur_req*> new_slur_req_l_arr_;
+ Array<Slur *> slur_l_stack_;
+ Array<Slur*> end_slur_l_arr_;
+ int dir_i_;
+ /* *************** */
+protected:
+ virtual ~Slur_engraver();
+ virtual bool do_try_request(Request*);
+ virtual void set_feature(Feature);
+ virtual void do_process_requests();
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+public:
+ Slur_engraver();
+ NAME_MEMBERS();
+};
+
+#endif // SLURGRAV_HH
+++ /dev/null
-/*
- slur-reg.hh -- declare Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SLURREG_HH
-#define SLURREG_HH
-
-#include "register.hh"
-
-class Slur_register :public Request_register {
- Array<Slur_req*> requests_arr_;
- Array<Slur_req*> new_slur_req_l_arr_;
- Array<Slur *> slur_l_stack_;
- Array<Slur*> end_slur_l_arr_;
- int dir_i_;
- /* *************** */
-protected:
- virtual ~Slur_register();
- virtual bool do_try_request(Request*);
- virtual void set_feature(Feature);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-public:
- Slur_reg();
- NAME_MEMBERS();
-};
-
-#endif // SLURREG_HH
--- /dev/null
+/*
+ staff-gravs.hh -- declare Staff_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef STAFF_GRAVS_HH
+#define STAFF_GRAVS_HH
+
+#include "engraver-group.hh"
+
+/**
+ Engravers which manage a Staff (one 5-line linestaff)
+
+ */
+class Staff_engravers : public Engraver_group_engraver {
+ Line_of_staff *staffline_p_;
+ Link_array<Score_elem> staff_elem_l_arr_;
+
+ void group_staff_elems();
+protected:
+ virtual void do_pre_move_processing();
+ virtual void do_creation_processing();
+ virtual void do_removal_processing();
+ virtual void typeset_element(Score_elem*);
+ virtual void typeset_breakable_item( Item * it_p);
+
+public:
+
+ NAME_MEMBERS();
+ Staff_engravers();
+};
+
+#endif // STAFF_GRAVS_HH
#include "lily-proto.hh"
-/// struct to pass staff info along a Request_register hierarchy.
+/// struct to pass staff info along a Request_engraver hierarchy.
struct Staff_info {
int *c0_position_i_l_;
Staff_symbol*staff_sym_l_;
+++ /dev/null
-/*
- staff-regs.hh -- declare Staff_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STAFF_REGS_HH
-#define STAFF_REGS_HH
-
-#include "register-group.hh"
-
-/**
- Registers which manage a Staff (one 5-line linestaff)
-
- */
-class Staff_registers : public Register_group_register {
- Line_of_staff *staffline_p_;
- Link_array<Score_elem> staff_elem_l_arr_;
-
- void group_staff_elems();
-protected:
- virtual void do_pre_move_processing();
- virtual void do_creation_processing();
- virtual void do_removal_processing();
- virtual void typeset_element(Score_elem*);
- virtual void typeset_breakable_item( Item * it_p);
-
-public:
-
- NAME_MEMBERS();
- Staff_registers();
-};
-
-#endif // STAFF_REGS_HH
--- /dev/null
+/*
+ staff-sym-grav.hh -- declare
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef STAFF_SYM_GRAV_HH
+#define STAFF_SYM_GRAV_HH
+#include "engraver.hh"
+#include "moment.hh"
+
+/**
+ Manage the staff symbol.
+ */
+class Staff_sym_engraver : public Request_engraver {
+ Staff_symbol *span_p_;
+public:
+ Staff_sym_engraver();
+ NAME_MEMBERS();
+protected:
+ virtual void do_process_requests();
+ virtual void fill_staff_info(Staff_info&);
+ virtual void do_removal_processing();
+ virtual void do_creation_processing();
+
+};
+#endif // STAFF_SYM_GRAV_HH
+++ /dev/null
-/*
- staff-sym-reg.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STAFF_SYM_REG_HH
-#define STAFF_SYM_REG_HH
-#include "register.hh"
-#include "moment.hh"
-
-/**
- Manage the staff symbol.
- */
-class Staff_sym_register : public Request_register {
- Staff_symbol *span_p_;
-public:
- Staff_sym_register();
- NAME_MEMBERS();
-protected:
- virtual void do_process_requests();
- virtual void fill_staff_info(Staff_info&);
- virtual void do_removal_processing();
- virtual void do_creation_processing();
-
-};
-#endif // STAFF_SYM_REG_HH
--- /dev/null
+/*
+ stem-beam-grav.hh -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef STEMBEAMGRAV_HH
+#define STEMBEAMGRAV_HH
+#include "engraver.hh"
+
+/**
+ TODO:
+ override default_grouping if setting a n-plet
+
+ */
+class Stem_beam_engraver : public Request_engraver {
+ Stem * stem_p_;
+ Beam * beam_p_;
+ Beam_req * beam_req_l_;
+ Stem_req * stem_req_l_;
+ Beam_req * start_req_l_;
+ bool end_beam_b_;
+ Rhythmic_grouping *current_grouping;
+ int default_dir_i_;
+public:
+ /* *************** */
+ NAME_MEMBERS();
+ Stem_beam_engraver();
+
+protected:
+ ~Stem_beam_engraver();
+ virtual void set_feature(Feature dir_i_);
+ virtual bool do_try_request(Request*);
+ virtual void do_process_requests();
+ virtual void acknowledge_element(Score_elem_info);
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+};
+#endif // STEMBEAMGRAV_HH
+++ /dev/null
-/*
- stem-beam-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STEMBEAMREG_HH
-#define STEMBEAMREG_HH
-#include "register.hh"
-
-/**
- TODO:
- override default_grouping if setting a n-plet
-
- */
-class Stem_beam_register : public Request_register {
- Stem * stem_p_;
- Beam * beam_p_;
- Beam_req * beam_req_l_;
- Stem_req * stem_req_l_;
- Beam_req * start_req_l_;
- bool end_beam_b_;
- Rhythmic_grouping *current_grouping;
- int default_dir_i_;
-public:
- /* *************** */
- NAME_MEMBERS();
- Stem_beam_register();
-
-protected:
- ~Stem_beam_register();
- virtual void set_feature(Feature dir_i_);
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-};
-#endif // STEMBEAMREG_HH
--- /dev/null
+/*
+ swallow-grav.hh -- declare Swallow_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SWALLOW_GRAV_HH
+#define SWALLOW_GRAV_HH
+
+#include "engraver.hh"
+
+/**
+ This engraver swallows everything given to it silently. The purpose of
+ this is to prevent spurious "request junked" warnings.
+ */
+class Swallow_engraver : public Request_engraver {
+protected:
+ bool acceptable_request_b(Request*) const;
+ bool do_try_request(Request*) ;
+public:
+ NAME_MEMBERS();
+};
+#endif // SWALLOW_GRAV_HH
+++ /dev/null
-/*
- swallow-reg.hh -- declare Swallow_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SWALLOW_REG_HH
-#define SWALLOW_REG_HH
-
-#include "register.hh"
-
-/**
- This register swallows everything given to it silently. The purpose of
- this is to prevent spurious "request junked" warnings.
- */
-class Swallow_register : public Request_register {
-protected:
- bool acceptable_request_b(Request*) const;
- bool do_try_request(Request*) ;
-public:
- NAME_MEMBERS();
-};
-#endif // SWALLOW_REG_HH
--- /dev/null
+/*
+ text-grav.hh -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef TEXTGRAV_HH
+#define TEXTGRAV_HH
+#include "engraver.hh"
+
+class Text_engraver : public Request_engraver{
+ Text_item * text_p_;
+ Text_req * text_req_l_;
+ int dir_i_;
+ /* *************** */
+protected:
+ virtual void set_feature(Feature );
+ virtual bool do_try_request(Request*);
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+ virtual void acknowledge_element(Score_elem_info);
+public:
+ Text_engraver();
+ NAME_MEMBERS();
+};
+
+#endif // TEXTGRAV_HH
+++ /dev/null
-/*
- text-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef TEXTREG_HH
-#define TEXTREG_HH
-#include "register.hh"
-
-class Text_register : public Request_register{
- Text_item * text_p_;
- Text_req * text_req_l_;
- int dir_i_;
- /* *************** */
-protected:
- virtual void set_feature(Feature );
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void acknowledge_element(Score_elem_info);
-public:
- Text_register();
- NAME_MEMBERS();
-};
-
-#endif // TEXTREG_HH
--- /dev/null
+/*
+ tie-grav.hh -- declare Tie_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef TIE_GRAV_HH
+#define TIE_GRAV_HH
+
+#include "engraver.hh"
+
+class Tie_engraver : public Request_engraver {
+ Tie * end_tie_p_;
+ Tie * tie_p_;
+ Moment end_mom_;
+ Tie_req * req_l_;
+ int dir_i_;
+ Tie_req *end_req_l_;
+ Melodic_req * end_melodic_req_l_;
+ Melodic_req * melodic_req_l_;
+
+protected:
+ virtual ~Tie_engraver();
+ virtual void acknowledge_element(Score_elem_info);
+ virtual bool do_try_request(Request*);
+ virtual bool acceptable_request_b(Request*);
+ virtual void sync_features();
+ virtual void do_process_requests();
+ virtual void do_post_move_processing();
+ virtual void do_pre_move_processing();
+ virtual void set_feature(Feature);
+public:
+ Tie_engraver();
+ NAME_MEMBERS();
+};
+
+#endif // TIE_GRAV_HH
+++ /dev/null
-/*
- tie-reg.hh -- declare Tie_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef TIE_REG_HH
-#define TIE_REG_HH
-
-#include "register.hh"
-
-class Tie_register : public Request_register {
- Tie * end_tie_p_;
- Tie * tie_p_;
- Moment end_mom_;
- Tie_req * req_l_;
- int dir_i_;
- Tie_req *end_req_l_;
- Melodic_req * end_melodic_req_l_;
- Melodic_req * melodic_req_l_;
-
-protected:
- virtual ~Tie_register();
- virtual void acknowledge_element(Score_elem_info);
- virtual bool do_try_request(Request*);
- virtual bool acceptable_request_b(Request*);
- virtual void sync_features();
- virtual void do_process_requests();
- virtual void do_post_move_processing();
- virtual void do_pre_move_processing();
- virtual void set_feature(Feature);
-public:
- Tie_register();
- NAME_MEMBERS();
-};
-
-#endif // TIE_REG_HH
--- /dev/null
+/*
+ acceptor.hh -- declare Translator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef ACCEPTOR_HH
+#define ACCEPTOR_HH
+
+#include "string.hh"
+#include "lily-proto.hh"
+#include "interpreter.hh"
+#include "virtual-methods.hh"
+
+class Translator {
+public:
+ String id_str_;
+
+ int iterator_count_;
+
+ virtual Interpreter * interpreter_l() { return 0; }
+
+ /// Score_register = 0, Staff_registers = 1, etc)
+ virtual int depth_i()const=0;
+ virtual Translator *find_get_translator_l(String name, String id)=0;
+ virtual Translator *ancestor_l(int l=1)=0;
+ virtual ~Translator(){}
+ NAME_MEMBERS();
+ Translator();
+ virtual Translator *get_default_interpreter()=0;
+};
+
+class Interpreter : public virtual Translator {
+public:
+ virtual bool interpret_request_b(Request*) { return false;}
+};
+#endif // ACCEPTOR_HH
--- /dev/null
+/*
+ voice-gravs.hh -- declare Voice_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef VOICEGRAVS_HH
+#define VOICEGRAVS_HH
+
+#include "engraver-group.hh"
+#include "interpreter.hh"
+
+class Voice_engravers : public Interpreter, public Engraver_group_engraver {
+public:
+ NAME_MEMBERS();
+
+protected:
+ virtual bool interpret_request_b(Request*);
+ virtual Interpreter* interpreter_l() { return this; }
+};
+
+
+#endif // VOICEGRAVS_HH
--- /dev/null
+/*
+ voice-group-gravs.hh -- declare Voice_group_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef VOICEGROUPGRAVS_HH
+#define VOICEGROUPGRAVS_HH
+
+#include "engraver-group.hh"
+
+/**
+ A group of voices which share certain characteristics (such as beams. ).
+ */
+class Voice_group_engravers : public Engraver_group_engraver {
+ Moment termination_mom_;
+ int dir_i_;
+
+protected:
+ virtual void do_print() const;
+ virtual Scalar get_feature(String);
+ virtual bool do_try_request(Request*);
+public:
+
+
+ NAME_MEMBERS();
+ static bool static_acceptable_request_b(Request*);
+ Voice_group_engravers();
+};
+#endif // VOICEGROUPGRAVS_HH
+++ /dev/null
-/*
- voice-group-regs.hh -- declare Voice_group_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEGROUPREGS_HH
-#define VOICEGROUPREGS_HH
-
-#include "register-group.hh"
-
-/**
- A group of voices which share certain characteristics (such as beams. ).
- */
-class Voice_group_registers : public Register_group_register {
- Moment termination_mom_;
- int dir_i_;
-
-protected:
- virtual void do_print() const;
- virtual Scalar get_feature(String);
- virtual bool do_try_request(Request*);
-public:
-
-
- NAME_MEMBERS();
- static bool static_acceptable_request_b(Request*);
- Voice_group_registers();
-};
-#endif // VOICEGROUPREGS_HH
+++ /dev/null
-/*
- voice-regs.hh -- declare Voice_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEREGS_HH
-#define VOICEREGS_HH
-
-#include "register-group.hh"
-#include "interpreter.hh"
-
-class Voice_registers : public Interpreter, public Register_group_register {
-public:
- NAME_MEMBERS();
-
-protected:
- virtual bool interpret_request_b(Request*);
- virtual Interpreter* interpreter_l() { return this; }
-};
-
-
-#endif // VOICEREGS_HH
--- /dev/null
+/*
+ input-engraver.cc -- implement Input_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "debug.hh"
+#include "engraver.hh"
+#include "input-engraver.hh"
+#include "parray.hh"
+#include "input-engraver.hh"
+#include "engraver-group.hh"
+
+bool
+Input_engraver::is_name_b(String n)
+{
+ bool b = (n == name_str_);
+ for (int i=0; !b && i < alias_str_arr_.size(); i++)
+ b = b || (alias_str_arr_[i] == n);
+ return b;
+}
+
+void
+Input_engraver::print() const
+{
+#ifndef NPRINT
+ mtor << "name " << name_str_;
+ mtor << "Consists of ";
+ for (int i=0; i< consists_str_arr_.size(); i++)
+ mtor << consists_str_arr_[i] << ',';
+ mtor << "contains " ;
+ for (iter(contains_igrav_p_list_.top(), i); i.ok(); i++)
+ i->print();
+#endif
+}
+
+/*
+ UGH. Global.
+ */
+Link_array<Input_engraver> igravs_p_arr;
+
+void
+add_global_input_engraver(Input_engraver *grav_p)
+{
+ igravs_p_arr.push(grav_p);
+}
+
+Input_engraver *
+lookup_grav(String nm)
+{
+ for (int i=0; i < igravs_p_arr.size(); i++)
+ if (igravs_p_arr[i]->is_name_b(nm))
+ return igravs_p_arr[i];
+
+ error("can't find reg `" + nm + "'");
+}
+
+
+
+Input_engraver *
+Input_engraver::recursive_find(String nm)
+{
+ if ( is_name_b( nm) )
+ return this;
+
+ Input_engraver * r =0;
+ for (iter(contains_igrav_p_list_.top(), i); !r &&i.ok(); i++)
+ r = i->recursive_find(nm);
+
+ return r;
+}
+Input_engraver *
+Input_engraver::find_igrav_l(String nm)
+{
+ for (iter(contains_igrav_p_list_.top(), i); i.ok(); i++)
+ if (i->is_name_b( nm))
+ return i;
+
+ return 0;
+}
+
+
+Engraver_group_engraver *
+Input_engraver::get_group_engraver_p()
+{
+ Engraver_group_engraver * grav_p = (Engraver_group_engraver*)
+ get_engraver_p(name_str_);
+
+
+
+ for (int i=0; i < consists_str_arr_.size(); i++) {
+ grav_p->add( get_engraver_p( consists_str_arr_[i]) );
+ }
+ grav_p -> igrav_l_ = this;
+ return grav_p;
+}
+
+
+bool
+Input_engraver::accept_req_b()
+{
+ return ! contains_igrav_p_list_.size();
+}
+
+void
+Input_engraver::add(Input_engraver *ip)
+{
+ contains_igrav_p_list_.bottom().add(ip);
+}
+
+Input_engraver*
+Input_engraver::get_default_igrav_l()
+{
+ return contains_igrav_p_list_.top();
+}
+++ /dev/null
-/*
- input-register.cc -- implement Input_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "register.hh"
-#include "input-register.hh"
-#include "parray.hh"
-#include "input-register.hh"
-#include "register-group.hh"
-
-bool
-Input_register::is_name_b(String n)
-{
- bool b = (n == name_str_);
- for (int i=0; !b && i < alias_str_arr_.size(); i++)
- b = b || (alias_str_arr_[i] == n);
- return b;
-}
-
-void
-Input_register::print() const
-{
-#ifndef NPRINT
- mtor << "name " << name_str_;
- mtor << "Consists of ";
- for (int i=0; i< consists_str_arr_.size(); i++)
- mtor << consists_str_arr_[i] << ',';
- mtor << "contains " ;
- for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++)
- i->print();
-#endif
-}
-
-/*
- UGH. Global.
- */
-Link_array<Input_register> iregs_p_arr;
-
-void
-add_global_input_register(Input_register *reg_p)
-{
- iregs_p_arr.push(reg_p);
-}
-
-Input_register *
-lookup_reg(String nm)
-{
- for (int i=0; i < iregs_p_arr.size(); i++)
- if (iregs_p_arr[i]->is_name_b(nm))
- return iregs_p_arr[i];
-
- error("can't find reg `" + nm + "'");
-}
-
-
-
-Input_register *
-Input_register::recursive_find(String nm)
-{
- if ( is_name_b( nm) )
- return this;
-
- Input_register * r =0;
- for (iter(contains_ireg_p_list_.top(), i); !r &&i.ok(); i++)
- r = i->recursive_find(nm);
-
- return r;
-}
-Input_register *
-Input_register::find_ireg_l(String nm)
-{
- for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++)
- if (i->is_name_b( nm))
- return i;
-
- return 0;
-}
-
-
-Register_group_register *
-Input_register::get_group_register_p()
-{
- Register_group_register * reg_p = (Register_group_register*)
- get_register_p(name_str_);
-
-
-
- for (int i=0; i < consists_str_arr_.size(); i++) {
- reg_p->add( get_register_p( consists_str_arr_[i]) );
- }
- reg_p -> ireg_l_ = this;
- return reg_p;
-}
-
-
-bool
-Input_register::accept_req_b()
-{
- return ! contains_ireg_p_list_.size();
-}
-
-void
-Input_register::add(Input_register *ip)
-{
- contains_ireg_p_list_.bottom().add(ip);
-}
-
-Input_register*
-Input_register::get_default_ireg_l()
-{
- return contains_ireg_p_list_.top();
-}
--- /dev/null
+/*
+ key-reg.cc -- implement Key_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+
+
+ Todo: key undo, special keys.
+
+ */
+#include "key-grav.hh"
+#include "key-item.hh"
+#include "command-request.hh"
+#include "local-key-grav.hh"
+#include "musical-request.hh"
+#include "local-key-item.hh"
+#include "bar.hh"
+#include "time-description.hh"
+
+Key_engraver::Key_engraver()
+{
+ kit_p_ = 0;
+ do_post_move_processing();
+}
+
+void
+Key_engraver::create_key()
+{
+ if (!kit_p_) {
+ int c0_i= *get_staff_info().c0_position_i_l_;
+
+ kit_p_ = new Key_item(c0_i);
+ announce_element(Score_elem_info(kit_p_,keyreq_l_));
+ kit_p_->read(*this);
+ }
+}
+
+bool
+Key_engraver::do_try_request(Request * req_l)
+{
+ Command_req* creq_l= req_l->command();
+ if (!creq_l|| !creq_l->keychange())
+ return false;
+
+ if (keyreq_l_)
+ return false; // TODO
+ keyreq_l_ = creq_l->keychange();
+ read_req(keyreq_l_);
+ return true;
+}
+
+void
+Key_engraver::acknowledge_element(Score_elem_info info)
+{
+ Command_req * r_l = info.req_l_->command() ;
+ if (r_l && r_l->clefchange()) {
+ create_key();
+ } else if (info.elem_l_->name() == Bar::static_name()) {
+ if ( !keyreq_l_)
+ default_key_b_ = true;
+ create_key();
+ }
+
+}
+
+void
+Key_engraver::do_process_requests()
+{
+ if (key_.multi_octave_b_)
+ assert(false); // TODO .
+ else if (keyreq_l_) {
+ create_key();
+ }
+}
+
+void
+Key_engraver::do_pre_move_processing()
+{
+ if (kit_p_) {
+ kit_p_->default_b_ = default_key_b_;
+ typeset_breakable_item( kit_p_);
+ kit_p_ = 0;
+ }
+}
+
+
+
+void
+Key_engraver::read_req(Key_change_req * r)
+{
+ key_.multi_octave_b_ = r->multi_octave_b_;
+ accidental_idx_arr_.set_size(0);
+ for (int i = 0; i < r->melodic_p_arr_.size(); i ++) {
+ Melodic_req * m_l =r->melodic_p_arr_[i];
+ int n_i =m_l->notename_i_;
+ int a_i = m_l->accidental_i_;
+ int o_i = m_l->octave_i_;
+ if (r->multi_octave_b_)
+ key_.set(o_i, n_i, a_i);
+ else
+ key_.set(n_i, a_i);
+ accidental_idx_arr_.push(n_i);
+ }
+}
+
+void
+Key_engraver::do_post_move_processing()
+{
+ keyreq_l_ = 0;
+ default_key_b_ = false;
+}
+
+IMPLEMENT_STATIC_NAME(Key_engraver);
+IMPLEMENT_IS_TYPE_B1(Key_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Key_engraver);
#include "molecule.hh"
#include "paper-def.hh"
#include "lookup.hh"
-//#include "clef-reg.hh"
-#include "key-reg.hh"
+//#include "clef-grav.hh"
+#include "key-grav.hh"
const int FLAT_TOP_PITCH=2; /* fes,ges,as and bes typeset in lower octave */
const int SHARP_TOP_PITCH=4; /* ais and bis typeset in lower octave */
}
void
-Key_item::read(Key_register const & key_reg_r)
+Key_item::read(Key_engraver const & key_grav_r)
{
- assert(!key_reg_r.key_.multi_octave_b_);
- const Array<int> &idx_arr =key_reg_r.accidental_idx_arr_;
+ assert(!key_grav_r.key_.multi_octave_b_);
+ const Array<int> &idx_arr =key_grav_r.accidental_idx_arr_;
for (int i = 0 ; i< idx_arr.size(); i++) {
int note = idx_arr[i];
- int acc = ((Key &) key_reg_r.key_).oct(0).acc(note);
+ int acc = ((Key &) key_grav_r.key_).oct(0).acc(note);
add(note, acc);
}
+++ /dev/null
-/*
- key-reg.cc -- implement Key_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
-
- Todo: key undo, special keys.
-
- */
-#include "key-reg.hh"
-#include "key-item.hh"
-#include "command-request.hh"
-#include "local-key-reg.hh"
-#include "musical-request.hh"
-#include "local-key-item.hh"
-#include "bar.hh"
-#include "time-description.hh"
-
-Key_register::Key_register()
-{
- kit_p_ = 0;
- do_post_move_processing();
-}
-
-void
-Key_register::create_key()
-{
- if (!kit_p_) {
- int c0_i= *get_staff_info().c0_position_i_l_;
-
- kit_p_ = new Key_item(c0_i);
- announce_element(Score_elem_info(kit_p_,keyreq_l_));
- kit_p_->read(*this);
- }
-}
-
-bool
-Key_register::do_try_request(Request * req_l)
-{
- Command_req* creq_l= req_l->command();
- if (!creq_l|| !creq_l->keychange())
- return false;
-
- if (keyreq_l_)
- return false; // TODO
- keyreq_l_ = creq_l->keychange();
- read_req(keyreq_l_);
- return true;
-}
-
-void
-Key_register::acknowledge_element(Score_elem_info info)
-{
- Command_req * r_l = info.req_l_->command() ;
- if (r_l && r_l->clefchange()) {
- create_key();
- } else if (info.elem_l_->name() == Bar::static_name()) {
- if ( !keyreq_l_)
- default_key_b_ = true;
- create_key();
- }
-
-}
-
-void
-Key_register::do_process_requests()
-{
- if (key_.multi_octave_b_)
- assert(false); // TODO .
- else if (keyreq_l_) {
- create_key();
- }
-}
-
-void
-Key_register::do_pre_move_processing()
-{
- if (kit_p_) {
- kit_p_->default_b_ = default_key_b_;
- typeset_breakable_item( kit_p_);
- kit_p_ = 0;
- }
-}
-
-
-
-void
-Key_register::read_req(Key_change_req * r)
-{
- key_.multi_octave_b_ = r->multi_octave_b_;
- accidental_idx_arr_.set_size(0);
- for (int i = 0; i < r->melodic_p_arr_.size(); i ++) {
- Melodic_req * m_l =r->melodic_p_arr_[i];
- int n_i =m_l->notename_i_;
- int a_i = m_l->accidental_i_;
- int o_i = m_l->octave_i_;
- if (r->multi_octave_b_)
- key_.set(o_i, n_i, a_i);
- else
- key_.set(n_i, a_i);
- accidental_idx_arr_.push(n_i);
- }
-}
-
-void
-Key_register::do_post_move_processing()
-{
- keyreq_l_ = 0;
- default_key_b_ = false;
-}
-
-IMPLEMENT_STATIC_NAME(Key_register);
-IMPLEMENT_IS_TYPE_B1(Key_register,Request_register);
-ADD_THIS_REGISTER(Key_register);
yylval.id = id;
return id->token_code_i_;
}
+ LexerError( "Unknown escaped string: `" + str + "'");
mtor << "(string)";
String *sp = new String( str);
yylval.string=sp;
return NOTENAME_ID;
}
}
+#if 0
if (YYSTATE != notes) {
// ugr. Should do this in note mode?
- Identifier * id = lookup_identifier(str);
+ // Identifier * id = lookup_identifier(str);
if (id) {
mtor << "(identifier)\n";
yylval.id = id;
return id->token_code_i_;
}
}
+#endif
+
yylval.string=new String( str );
return STRING;
}
--- /dev/null
+/*
+ local-key-reg.cc -- implement Local_key_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "musical-request.hh"
+#include "command-request.hh"
+#include "local-key-grav.hh"
+#include "local-key-item.hh"
+#include "key-grav.hh"
+#include "debug.hh"
+#include "key-item.hh"
+#include "tie.hh"
+#include "note-head.hh"
+#include "time-description.hh"
+
+Local_key_engraver::Local_key_engraver()
+{
+ key_C_ = 0;
+}
+
+void
+Local_key_engraver::do_pre_move_processing()
+{
+ Local_key_item *key_item_p = 0;
+ if (mel_l_arr_.size()) {
+ 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) &&
+ !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(support_l);
+ local_key_.oct(note_l->octave_i_)
+ .set(note_l->notename_i_, note_l->accidental_i_);
+ }
+
+ }
+ 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);
+ forced_l_arr_.set_size(0);
+}
+
+void
+Local_key_engraver::acknowledge_element(Score_elem_info info)
+{
+ Score_elem * elem_l = info.elem_l_;
+ 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();
+
+ mel_l_arr_.push(note_l );
+ support_l_arr_.push(item_l);
+
+ } else if (info.req_l_->command()
+ && info.req_l_->command()->keychange()) {
+ Key_engraver * key_grav_l =
+ (Key_engraver*)info.origin_grav_l_arr_[0];
+ key_C_ = &key_grav_l->key_;
+ local_key_ = *key_C_;
+ } else if (elem_l->name() == Key_item::static_name()) {
+ Key_engraver * key_grav_l =
+ (Key_engraver*)info.origin_grav_l_arr_[0];
+ key_C_ = &key_grav_l->key_;
+ } else if (elem_l->name() == Tie::static_name()) {
+ Tie * tie_l = (Tie*)elem_l->spanner();
+ if (tie_l->same_pitch_b_)
+ tied_l_arr_.push(tie_l-> right_head_l_ );
+ }
+}
+
+void
+Local_key_engraver::do_process_requests()
+{
+ Time_description const * time_C_ = get_staff_info().time_C_;
+ if (! time_C_->whole_in_measure_){
+ if (key_C_)
+ local_key_= *key_C_;
+ else if(0&& time_C_->when_ >Moment(0))
+ warning ("Help me! can't figure out current key");
+ }
+}
+
+IMPLEMENT_STATIC_NAME(Local_key_engraver);
+IMPLEMENT_IS_TYPE_B1(Local_key_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Local_key_engraver);
+++ /dev/null
-/*
- local-key-reg.cc -- implement Local_key_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musical-request.hh"
-#include "command-request.hh"
-#include "local-key-reg.hh"
-#include "local-key-item.hh"
-#include "key-reg.hh"
-#include "debug.hh"
-#include "key-item.hh"
-#include "tie.hh"
-#include "note-head.hh"
-#include "time-description.hh"
-
-Local_key_register::Local_key_register()
-{
- key_C_ = 0;
-}
-
-void
-Local_key_register::do_pre_move_processing()
-{
- Local_key_item *key_item_p = 0;
- if (mel_l_arr_.size()) {
- 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) &&
- !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(support_l);
- local_key_.oct(note_l->octave_i_)
- .set(note_l->notename_i_, note_l->accidental_i_);
- }
-
- }
- 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);
- forced_l_arr_.set_size(0);
-}
-
-void
-Local_key_register::acknowledge_element(Score_elem_info info)
-{
- Score_elem * elem_l = info.elem_l_;
- 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();
-
- 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 =
- (Key_register*)info.origin_reg_l_arr_[0];
- key_C_ = &key_reg_l->key_;
- local_key_ = *key_C_;
- } else if (elem_l->name() == Key_item::static_name()) {
- Key_register * key_reg_l =
- (Key_register*)info.origin_reg_l_arr_[0];
- key_C_ = &key_reg_l->key_;
- } else if (elem_l->name() == Tie::static_name()) {
- Tie * tie_l = (Tie*)elem_l->spanner();
- if (tie_l->same_pitch_b_)
- tied_l_arr_.push(tie_l-> right_head_l_ );
- }
-}
-
-void
-Local_key_register::do_process_requests()
-{
- Time_description const * time_C_ = get_staff_info().time_C_;
- if (! time_C_->whole_in_measure_){
- if (key_C_)
- local_key_= *key_C_;
- else if(0&& time_C_->when_ >Moment(0))
- warning ("Help me! can't figure out current key");
- }
-}
-
-IMPLEMENT_STATIC_NAME(Local_key_register);
-IMPLEMENT_IS_TYPE_B1(Local_key_register,Request_register);
-ADD_THIS_REGISTER(Local_key_register);
#include "dimen.hh"
#include "tex.hh"
#include "scalar.hh"
-
+#include "paper-def.hh"
Lookup::Lookup()
{
+ paper_l_ = 0;
texsetting = "\\unknowntexsetting";
symtables_ = new Symtables;
}
Lookup::Lookup(Lookup const &s)
{
+ paper_l_ = s.paper_l_;
texsetting = s.texsetting;
symtables_ = new Symtables(*s.symtables_);
}
}
-Real
-Lookup::internote_f() const
-{
- return ball(4).dim.y.length()/2;
-}
-
-Real
-Lookup::interbeam_f() const
-{
- /*
- [todo]
- * runtime
-
- "french" style: interbeam = intenote;
- "german" style: interbeam = 2/3 * interline
-
- as lily's style is currently german, we'll hardcode german style
- */
- // it seems that "interline" means _between_ lines
-// return ball(4).dim.y.length() * 2 / 3;
- return ball(4).dim.y.length() * 2 / 3 + 0.4; //ugh
-}
Symbol
Lookup::ball(int j) const
Symbol
Lookup::linestaff(int lines, Real wid) const
{
+ Real internote_f = paper_l_ ->internote_f();
Symbol s;
s.dim.x = Interval(0,wid);
- Real dy = (lines >0) ? (lines-1)*internote_f()*2 : 0;
+ Real dy = (lines >0) ? (lines-1)*internote_f : 0;
s.dim.y = Interval(0,dy);
Array<String> a;
--- /dev/null
+/*
+ lyric-engraver.cc -- implement Lyric_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "lyric-engraver.hh"
+#include "musical-request.hh"
+#include "text-item.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+
+Lyric_engraver::Lyric_engraver()
+{
+}
+
+bool
+Lyric_engraver::do_try_request(Request*r)
+{
+ Musical_req * m =r->musical();
+ if (!m || ! m->lreq_l())
+ return false;
+ lreq_arr_.push(m->lreq_l());
+
+ return true;
+}
+
+void
+Lyric_engraver::do_process_requests()
+{
+ Text_item * last_item_l =0;
+ for (int i=0; i < lreq_arr_.size(); i++) {
+ Text_item *lp = new Text_item(lreq_arr_[i]->tdef_p_ );
+ lp->dir_i_ = -1;
+ lp->fat_b_ = true;
+ if (last_item_l)
+ lp->add_support(last_item_l);
+ last_item_l = lp;
+ typeset_element(lp);
+ }
+}
+
+void
+Lyric_engraver::do_post_move_processing()
+{
+ lreq_arr_.set_size(0);
+}
+
+
+IMPLEMENT_STATIC_NAME(Lyric_engraver);
+IMPLEMENT_IS_TYPE_B1(Lyric_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Lyric_engraver);
+++ /dev/null
-/*
- lyric-register.cc -- implement Lyric_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "lyric-register.hh"
-#include "musical-request.hh"
-#include "text-item.hh"
-#include "paper-def.hh"
-#include "lookup.hh"
-
-Lyric_register::Lyric_register()
-{
-}
-
-bool
-Lyric_register::do_try_request(Request*r)
-{
- Musical_req * m =r->musical();
- if (!m || ! m->lreq_l())
- return false;
- lreq_arr_.push(m->lreq_l());
-
- return true;
-}
-
-void
-Lyric_register::do_process_requests()
-{
- Text_item * last_item_l =0;
- for (int i=0; i < lreq_arr_.size(); i++) {
- Text_item *lp = new Text_item(lreq_arr_[i]->tdef_p_ );
- lp->dir_i_ = -1;
- lp->fat_b_ = true;
- if (last_item_l)
- lp->add_support(last_item_l);
- last_item_l = lp;
- typeset_element(lp);
- }
-}
-
-void
-Lyric_register::do_post_move_processing()
-{
- lreq_arr_.set_size(0);
-}
-
-
-IMPLEMENT_STATIC_NAME(Lyric_register);
-IMPLEMENT_IS_TYPE_B1(Lyric_register,Request_register);
-ADD_THIS_REGISTER(Lyric_register);
--- /dev/null
+/*
+ meter-reg.cc -- implement Meter_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "meter-grav.hh"
+#include "meter.hh"
+#include "command-request.hh"
+#include "score-grav.hh"
+
+Meter_engraver::Meter_engraver()
+{
+ meter_req_l_ = 0;
+ meter_p_ =0;
+ default_grouping_ = Rhythmic_grouping(MInterval(0,4),4); // ugh
+}
+
+void
+Meter_engraver::fill_staff_info(Staff_info&inf)
+{
+ inf.time_C_ = &time_;
+ inf.rhythmic_C_ = &default_grouping_;
+}
+
+bool
+Meter_engraver::do_try_request(Request*r)
+{
+ bool gotcha = false;
+
+ if (r->command() && r->command()->timing()) {
+ gotcha = true;
+ Timing_req * tr_l = r->command()->timing();
+ Meter_change_req *m_l = tr_l->meterchange();
+ if (m_l) {
+ meter_req_l_ = m_l;
+
+ int b_i= m_l->beats_i_;
+ int o_i = m_l->one_beat_i_;
+ if (! time_.allow_meter_change_b() )
+ tr_l->warning("Meter change not allowed here");
+ else{
+ time_.set_meter(b_i, o_i);
+ default_grouping_ =
+ Rhythmic_grouping(MInterval(0,Moment(b_i, o_i)), b_i);
+ }
+ } else if (tr_l->partial()) {
+ Moment m = tr_l->partial()->duration_;
+ String error = time_.try_set_partial_str(m);
+ if (error != "") {
+ tr_l->warning(error);
+ } else
+ time_.setpartial(m);
+ } else if (tr_l->barcheck()) {
+ if (time_.whole_in_measure_) {
+ tr_l ->warning( "Barcheck failed");
+
+ time_.whole_in_measure_ = 0; // resync
+ time_.error_b_ = true;
+ }
+
+ } else if (tr_l->cadenza()) {
+ time_.set_cadenza(tr_l->cadenza()->on_b_);
+
+ } else if (tr_l->measuregrouping()) {
+ default_grouping_ = parse_grouping(
+ tr_l->measuregrouping()->beat_i_arr_,
+ tr_l->measuregrouping()->elt_length_arr_);
+
+ }
+ }
+
+ return gotcha;
+}
+
+void
+Meter_engraver::do_creation_processing()
+{
+ time_.when_ = get_staff_info().when();
+}
+
+void
+Meter_engraver::do_process_requests()
+{
+ if (meter_req_l_ ) {
+ Array<Scalar> args;
+ args.push(meter_req_l_->beats_i_);
+ args.push(meter_req_l_->one_beat_i_);
+
+ meter_p_ = new Meter(args);
+ }
+
+ if (meter_p_)
+ announce_element(Score_elem_info(meter_p_, meter_req_l_) );
+}
+
+void
+Meter_engraver::do_pre_move_processing()
+{
+ if (meter_p_) {
+ typeset_breakable_item(meter_p_);
+ meter_p_ =0;
+ meter_req_l_ = 0;
+ }
+
+ Engraver_group_engraver * grav_l = daddy_grav_l_;
+ while (grav_l->daddy_grav_l_) {
+ grav_l = grav_l->daddy_grav_l_;
+ }
+
+ assert( grav_l->name() == Score_engraver::static_name());
+ if (!time_.cadenza_b_)
+ ((Score_engraver*)grav_l)->add_moment_to_process( time_.next_bar_moment());
+}
+
+void
+Meter_engraver::do_post_move_processing()
+{
+ time_.add( get_staff_info().when() - time_.when_ );
+}
+
+IMPLEMENT_STATIC_NAME(Meter_engraver);
+ADD_THIS_ENGRAVER(Meter_engraver);
+IMPLEMENT_IS_TYPE_B1(Meter_engraver,Request_engraver);
+++ /dev/null
-/*
- meter-reg.cc -- implement Meter_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "meter-reg.hh"
-#include "meter.hh"
-#include "command-request.hh"
-#include "score-reg.hh"
-
-Meter_register::Meter_register()
-{
- meter_req_l_ = 0;
- meter_p_ =0;
- default_grouping_ = Rhythmic_grouping(MInterval(0,4),4); // ugh
-}
-
-void
-Meter_register::fill_staff_info(Staff_info&inf)
-{
- inf.time_C_ = &time_;
- inf.rhythmic_C_ = &default_grouping_;
-}
-
-bool
-Meter_register::do_try_request(Request*r)
-{
- bool gotcha = false;
-
- if (r->command() && r->command()->timing()) {
- gotcha = true;
- Timing_req * tr_l = r->command()->timing();
- Meter_change_req *m_l = tr_l->meterchange();
- if (m_l) {
- meter_req_l_ = m_l;
-
- int b_i= m_l->beats_i_;
- int o_i = m_l->one_beat_i_;
- if (! time_.allow_meter_change_b() )
- tr_l->warning("Meter change not allowed here");
- else{
- time_.set_meter(b_i, o_i);
- default_grouping_ =
- Rhythmic_grouping(MInterval(0,Moment(b_i, o_i)), b_i);
- }
- } else if (tr_l->partial()) {
- Moment m = tr_l->partial()->duration_;
- String error = time_.try_set_partial_str(m);
- if (error != "") {
- tr_l->warning(error);
- } else
- time_.setpartial(m);
- } else if (tr_l->barcheck()) {
- if (time_.whole_in_measure_) {
- tr_l ->warning( "Barcheck failed");
-
- time_.whole_in_measure_ = 0; // resync
- time_.error_b_ = true;
- }
-
- } else if (tr_l->cadenza()) {
- time_.set_cadenza(tr_l->cadenza()->on_b_);
-
- } else if (tr_l->measuregrouping()) {
- default_grouping_ = parse_grouping(
- tr_l->measuregrouping()->beat_i_arr_,
- tr_l->measuregrouping()->elt_length_arr_);
-
- }
- }
-
- return gotcha;
-}
-
-void
-Meter_register::do_creation_processing()
-{
- time_.when_ = get_staff_info().when();
-}
-
-void
-Meter_register::do_process_requests()
-{
- if (meter_req_l_ ) {
- Array<Scalar> args;
- args.push(meter_req_l_->beats_i_);
- args.push(meter_req_l_->one_beat_i_);
-
- meter_p_ = new Meter(args);
- }
-
- if (meter_p_)
- announce_element(Score_elem_info(meter_p_, meter_req_l_) );
-}
-
-void
-Meter_register::do_pre_move_processing()
-{
- if (meter_p_) {
- typeset_breakable_item(meter_p_);
- meter_p_ =0;
- meter_req_l_ = 0;
- }
-
- Register_group_register * reg_l = daddy_reg_l_;
- while (reg_l->daddy_reg_l_) {
- reg_l = reg_l->daddy_reg_l_;
- }
-
- assert( reg_l->name() == Score_register::static_name());
- if (!time_.cadenza_b_)
- ((Score_register*)reg_l)->add_moment_to_process( time_.next_bar_moment());
-}
-
-void
-Meter_register::do_post_move_processing()
-{
- time_.add( get_staff_info().when() - time_.when_ );
-}
-
-IMPLEMENT_STATIC_NAME(Meter_register);
-ADD_THIS_REGISTER(Meter_register);
-IMPLEMENT_IS_TYPE_B1(Meter_register,Request_register);
+++ /dev/null
-/*
- midi-walker.cc -- implement Midi_walker
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwenhuizen <jan@digicash.com>
-
- TODO
-
- Ideally this should also use a register system, to process slurs,
- dynamics, etc.
-
-*/
-
-#include "command-request.hh"
-#include "musical-request.hh"
-#include "p-score.hh"
-#include "midi-walker.hh"
-#include "midi-item.hh"
-#include "midi-stream.hh"
-#include "debug.hh"
-#if 0
-Midi_walker::Midi_walker(Staff *st_l, Midi_track* track_l)
- : PCursor<Staff_column*>(st_l->cols_)
-{
- track_l_ = track_l;
- last_moment_= 0;
-}
-
-/**
- output notestop events for all notes which end before #max_moment#
- */
-void
-Midi_walker::do_stop_notes(Moment max_moment)
-{
- while (stop_notes.size() && stop_notes.front().key <= max_moment) {
- Note_event ent=stop_notes.get();
- if (ent.ignore_b_)
- continue;
-
- Moment stop_moment = ent.key;
- Melodic_req * req_l = ent.val;
-
- Midi_note note(req_l, track_l_->number_i_, false);
- output_event(note, stop_moment);
- }
-}
-/**
- Find out if start_note event is needed, and do it if needed.
- */
-void
-Midi_walker::do_start_note(Note_req*note_l)
-{
- Moment stop = note_l->duration() + ptr()->when();
- for(int i=0; i < stop_notes.size(); i++) {
- if (stop_notes[i].val->melodic()->pitch() ==
- note_l->pitch()) {
- if ( stop_notes[i].key < stop){
- stop_notes[i].ignore_b_=true;
- }
- else
- return; // skip the stop note
- }
- }
- Note_event e;
- e.val = note_l;
- e.key = stop;
-
- stop_notes.insert(e);
-
- Midi_note note(note_l, track_l_->number_i_, true);
- output_event(note, ptr()->when());
-}
-
-
-/** advance the track to #now#, output the item, and adjust current
- "moment". */
-void
-Midi_walker::output_event(Midi_item &i, Moment now)
-{
- Moment delta_t = now - last_moment_ ;
- last_moment_ += delta_t;
- track_l_->add(delta_t, &i );
-}
-
-void
-Midi_walker::do_process_requests()
-{
- do_stop_notes(ptr()->when());
-
- for ( int i = 0; i < ptr()->commandreq_l_arr_.size(); i++ ) {
- Command_req *c_l = ptr()->commandreq_l_arr_[i]->command();
- Meter_change_req* meter_l = c_l->meterchange();
- if ( meter_l )
- output_event( Midi_time( meter_l->beats_i_, meter_l->one_beat_i_, 18 ), ptr()->when() );
- Key_change_req* key_l = c_l->keychange();
- if ( key_l ) {
- int sharps_i = key_l->sharps_i();
- int flats_i = key_l->flats_i();
- // midi cannot handle non-conventional keys
- if ( !( flats_i && sharps_i ) )
- output_event( Midi_key( sharps_i - flats_i, key_l->minor_b() ), ptr()->when() );
- }
- }
-
- for ( int i = 0; i < ptr()->musicalreq_l_arr_.size(); i++ ) {
- 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();
- if (!note_l)
- continue;
- do_start_note(note_l);
- }
-}
-
-Midi_walker::~Midi_walker()
-{
- do_stop_notes( last_moment_ + Moment(10,1)); // ugh
-}
-
-
-int
-compare(Note_event const&e1, Note_event const&e2)
-{
- return sign(e1.key - e2.key);
-}
-#endif
#include "music-list.hh"
#include "music-iterator.hh"
-#include "acceptor.hh"
+#include "translator.hh"
#include "request.hh"
#include "interpreter.hh"
#include "debug.hh"
#endif
}
-Acceptor*
-Music_iterator::get_req_acceptor_l()
+Translator*
+Music_iterator::get_req_translator_l()
{
assert(report_to_l_);
if (report_to_l_->interpreter_l() )
return report_to_l_;
- set_acceptor( report_to_l_->get_default_interpreter() );
+ set_translator( report_to_l_->get_default_interpreter() );
return report_to_l_;
}
void
-Music_iterator::set_acceptor(Acceptor*reg)
+Music_iterator::set_translator(Translator*reg)
{
if (report_to_l_==reg)
return;
Music_iterator::~Music_iterator()
{
- set_acceptor(0);
+ set_translator(0);
}
Moment
Music_iterator*
Music_iterator::static_get_iterator_p(Music *m,
- Acceptor *report_l)
+ Translator *report_l)
{
Music_iterator * p =0;
if (m->is_type_b( Change_reg::static_name()))
if ( m->is_type_b( Music_list::static_name())) {
Music_list* ml = (Music_list*) m;
if (ml -> type_str_ != "") {
- Acceptor * a =report_l->
- find_get_acceptor_l(ml-> type_str_, ml->id_str_);
+ Translator * a =report_l->
+ find_get_translator_l(ml-> type_str_, ml->id_str_);
- p->set_acceptor( a);
+ p->set_translator( a);
}
}
if (! p->report_to_l_ )
- p ->set_acceptor(report_l);
+ p ->set_translator(report_l);
return p;
}
for(iter(chord_C_->music_p_list_.top(), i); i.ok(); j++, i++) {
Music_iterator * mi = get_iterator_p( i.ptr());
- set_acceptor(mi->report_to_l_->ancestor_l( chord_C_->multi_level_i_ ));
+ set_translator(mi->report_to_l_->ancestor_l( chord_C_->multi_level_i_ ));
if ( mi->ok() )
children_p_list_.bottom().add( mi );
else
if (ok()) {
iter_p_ = Music_iterator::get_iterator_p( ptr() );
if (iter_p_->report_to_l_->depth_i() > report_to_l_->depth_i())
- set_acceptor(iter_p_->report_to_l_);
+ set_translator(iter_p_->report_to_l_);
}
}
Change_iterator::next(Moment mom)
{
#if 0
- Register_group_register *group_l =
- report_to_l_->find_get_reg_l(change_l_->type_str_,
+ Engraver_group_engraver *group_l =
+ report_to_l_->find_get_grav_l(change_l_->type_str_,
change_l_->id_str_);
- report_to_l_->daddy_reg_l_->remove_register_p(report_to_l_);
+ report_to_l_->daddy_grav_l_->remove_engraver_p(report_to_l_);
group_l->add(report_to_l_);
#endif
Music_iterator::next(mom);
void
Voice_element_iterator::construct_children()
{
- get_req_acceptor_l();
+ get_req_translator_l();
/*
if ( daddy_iter_l_
&& daddy_iter_l_->is_type_b(Voice_iterator::static_name() )) {
- set_acceptor(daddy_iter_l_-> get_req_acceptor_l());
+ set_translator(daddy_iter_l_-> get_req_translator_l());
} else if (daddy_iter_l_
&& daddy_iter_l_-> is_type_b( Chord_iterator::static_name() )) {
- get_req_acceptor_l();
+ get_req_translator_l();
}
*/
Chord_iterator::construct_children();
{"id", ID},
{"in", IN_T},
{"init_end", INIT_END},
- {"requestregister", REQUESTREGISTER},
+ {"requestengraver", REQUESTENGRAVER},
{"lyric", LYRIC},
{"key", KEY},
{"melodic" , MELODIC},
--- /dev/null
+/*
+ note-column-reg.cc -- implement Note_column_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "note-column-grav.hh"
+#include "note-head.hh"
+#include "stem.hh"
+#include "note-column.hh"
+#include "script.hh"
+#include "rest-column.hh"
+
+bool
+Note_column_engraver::acceptable_elem_b(Score_elem const*elem_C)const
+{
+ char const*nC = elem_C->name();
+ return (nC == Script::static_name() || nC == Note_head::static_name()
+ || nC == Stem::static_name());
+}
+Note_column*
+Note_column_engraver::note_col_l()
+{
+ if (!ncol_p_){
+ ncol_p_ = new Note_column;
+ announce_element(Score_elem_info(ncol_p_, 0));
+ }
+ return ncol_p_;
+}
+
+Rest_column *
+Note_column_engraver::rest_col_l()
+{
+ if (!restcol_p_) {
+ restcol_p_ = new Rest_column;
+ announce_element(Score_elem_info(restcol_p_,0));
+ }
+ return restcol_p_;
+}
+
+void
+Note_column_engraver::acknowledge_element(Score_elem_info i)
+{
+ if (!acceptable_elem_b(i.elem_l_))
+ return;
+
+
+ char const*nC = i.elem_l_->name();
+
+ if (nC == Script::static_name()) {
+ script_l_arr_.push((Script*)i.elem_l_->item());
+ } else if (nC == Note_head::static_name()) {
+ Note_head * h_l = (Note_head*)i.elem_l_->item();
+ if (h_l->rest_b_)
+ rest_col_l()->add(h_l);
+ else
+ note_col_l()->add(h_l);
+ }
+ else if (nC == Stem::static_name()){
+ stem_l_ = (Stem*)i.elem_l_->item();
+ }
+}
+
+void
+Note_column_engraver::do_pre_move_processing()
+{
+ Script_column *col_l = ( ncol_p_ ) ? ncol_p_ : restcol_p_;
+ if (!col_l)
+ return;
+
+ for (int i=0; i < script_l_arr_.size(); i++)
+ col_l->add(script_l_arr_[i]);
+
+ if (stem_l_) {
+ if (ncol_p_)
+ ncol_p_->add(stem_l_);
+ if (restcol_p_)
+ restcol_p_->add(stem_l_);
+ }
+ if (restcol_p_) {
+ if (! restcol_p_ -> dir_i_)
+ restcol_p_->dir_i_ = dir_i_;
+ typeset_element(restcol_p_);
+ restcol_p_ =0;
+ }
+ if (ncol_p_) {
+ if (! ncol_p_->dir_i_ )
+ ncol_p_->dir_i_ = dir_i_;
+ if (! ncol_p_->h_shift_b_)
+ ncol_p_->h_shift_b_ = h_shift_b_;
+ typeset_element(ncol_p_);
+ ncol_p_ =0;
+ }
+}
+
+void
+Note_column_engraver::do_post_move_processing()
+{
+ script_l_arr_.set_size(0);
+ stem_l_ =0;
+}
+
+void
+Note_column_engraver::set_feature(Feature i)
+{
+ if (i.type_ == "vdir")
+ dir_i_ = i.value_;
+ if (i.type_ == "hshift")
+ h_shift_b_ = (bool)(int)i.value_;
+}
+
+Note_column_engraver::Note_column_engraver()
+{
+ dir_i_ =0;
+ h_shift_b_ = false;
+
+ ncol_p_=0;
+ restcol_p_ =0;
+ do_post_move_processing();
+}
+IMPLEMENT_STATIC_NAME(Note_column_engraver);
+IMPLEMENT_IS_TYPE_B1(Note_column_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Note_column_engraver);
+++ /dev/null
-/*
- note-column-reg.cc -- implement Note_column_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-column-reg.hh"
-#include "note-head.hh"
-#include "stem.hh"
-#include "note-column.hh"
-#include "script.hh"
-#include "rest-column.hh"
-
-bool
-Note_column_register::acceptable_elem_b(Score_elem const*elem_C)const
-{
- char const*nC = elem_C->name();
- return (nC == Script::static_name() || nC == Note_head::static_name()
- || nC == Stem::static_name());
-}
-Note_column*
-Note_column_register::note_col_l()
-{
- if (!ncol_p_){
- ncol_p_ = new Note_column;
- announce_element(Score_elem_info(ncol_p_, 0));
- }
- return ncol_p_;
-}
-
-Rest_column *
-Note_column_register::rest_col_l()
-{
- if (!restcol_p_) {
- restcol_p_ = new Rest_column;
- announce_element(Score_elem_info(restcol_p_,0));
- }
- return restcol_p_;
-}
-
-void
-Note_column_register::acknowledge_element(Score_elem_info i)
-{
- if (!acceptable_elem_b(i.elem_l_))
- return;
-
-
- char const*nC = i.elem_l_->name();
-
- if (nC == Script::static_name()) {
- script_l_arr_.push((Script*)i.elem_l_->item());
- } else if (nC == Note_head::static_name()) {
- Note_head * h_l = (Note_head*)i.elem_l_->item();
- if (h_l->rest_b_)
- rest_col_l()->add(h_l);
- else
- note_col_l()->add(h_l);
- }
- else if (nC == Stem::static_name()){
- stem_l_ = (Stem*)i.elem_l_->item();
- }
-}
-
-void
-Note_column_register::do_pre_move_processing()
-{
- Script_column *col_l = ( ncol_p_ ) ? ncol_p_ : restcol_p_;
- if (!col_l)
- return;
-
- for (int i=0; i < script_l_arr_.size(); i++)
- col_l->add(script_l_arr_[i]);
-
- if (stem_l_) {
- if (ncol_p_)
- ncol_p_->add(stem_l_);
- if (restcol_p_)
- restcol_p_->add(stem_l_);
- }
- if (restcol_p_) {
- if (! restcol_p_ -> dir_i_)
- restcol_p_->dir_i_ = dir_i_;
- typeset_element(restcol_p_);
- restcol_p_ =0;
- }
- if (ncol_p_) {
- if (! ncol_p_->dir_i_ )
- ncol_p_->dir_i_ = dir_i_;
- if (! ncol_p_->h_shift_b_)
- ncol_p_->h_shift_b_ = h_shift_b_;
- typeset_element(ncol_p_);
- ncol_p_ =0;
- }
-}
-
-void
-Note_column_register::do_post_move_processing()
-{
- script_l_arr_.set_size(0);
- stem_l_ =0;
-}
-
-void
-Note_column_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
- if (i.type_ == "hshift")
- h_shift_b_ = (bool)(int)i.value_;
-}
-
-Note_column_register::Note_column_register()
-{
- dir_i_ =0;
- h_shift_b_ = false;
-
- ncol_p_=0;
- restcol_p_ =0;
- do_post_move_processing();
-}
-IMPLEMENT_STATIC_NAME(Note_column_register);
-IMPLEMENT_IS_TYPE_B1(Note_column_register,Request_register);
-ADD_THIS_REGISTER(Note_column_register);
*/
#include <math.h>
+#include "string.hh"
+#include "assoc.hh"
#include "misc.hh"
#include "paper-def.hh"
#include "debug.hh"
#include "dimen.hh"
+void
+Paper_def::set_var(String s, Real r)
+{
+ real_vars_p_->elem(s) = r;
+}
+
+Real
+Paper_def::get_var(String s)const
+{
+ if(! real_vars_p_->elt_b(s))
+ error ( "unknown paper variable `" + s+"'");
+ return real_vars_p_->elem(s);
+}
+
+Real
+Paper_def::linewidth_f() const
+{
+ return get_var("linewidth");
+}
Real
Paper_def::duration_to_dist(Moment d)
if (!d)
return 0;
- return whole_width * pow(geometric_, log_2(d));
+ return get_var("unitspace") * pow(get_var("geometric"), log_2(d));
}
-Real
-Paper_def::rule_thickness()const
-{
- return 0.4 PT;
-}
-Paper_def::Paper_def(Lookup *l)
+Paper_def::Paper_def()
{
- lookup_p_ = l;
- linewidth = 15 *CM_TO_PT; // in cm for now
- whole_width = 8 * note_width();
- geometric_ = sqrt(2);
- outfile = "lelie.tex";
+ lookup_p_ = 0;
+ real_vars_p_ = new Assoc<String,Real>;
+ outfile_str_ = "lelie.tex";
}
Paper_def::~Paper_def()
{
+ delete real_vars_p_;
delete lookup_p_;
}
+
Paper_def::Paper_def(Paper_def const&s)
{
- lookup_p_ = new Lookup(*s.lookup_p_);
- geometric_ = s.geometric_;
- whole_width = s.whole_width;
- outfile = s.outfile;
- linewidth = s.linewidth;
+ lookup_p_ = s.lookup_p_? new Lookup(*s.lookup_p_) : 0;
+ lookup_p_->paper_l_ = this;
+ real_vars_p_ = new Assoc<String,Real> (*s.real_vars_p_);
+ outfile_str_ = s.outfile_str_;
}
void
assert(l != lookup_p_);
delete lookup_p_;
lookup_p_ = l;
+ lookup_p_->paper_l_ = this;
}
Real
Paper_def::interline_f() const
{
- return lookup_p_->ball(4).dim.y.length();
+ return get_var("interline");
}
+
Real
-Paper_def::interbeam_f() const
+Paper_def::rule_thickness()const
{
- return lookup_p_->interbeam_f();
+ return get_var("rule_thickness");
}
+
Real
-Paper_def::internote_f() const
+Paper_def::interbeam_f() const
{
- return lookup_p_->internote_f();
+ return get_var("interbeam");
}
Real
-Paper_def::note_width()const
+Paper_def::internote_f() const
{
- return lookup_p_->ball(4).dim.x.length( );
+ return interline_f() / 2;
}
+
Real
-Paper_def::standard_height() const
+Paper_def::note_width()const
{
- return 20 PT;
+ return get_var("notewidth");
}
void
Paper_def::print() const
{
#ifndef NPRINT
- mtor << "Paper {width: " << print_dimen(linewidth);
- mtor << "whole: " << print_dimen(whole_width);
- mtor << "out: " <<outfile;
+ mtor << "Paper {";
+ mtor << "out: " <<outfile_str_;
lookup_p_->print();
mtor << "}\n";
#endif
Lookup const *
Paper_def::lookup_l()
{
+ assert( lookup_p_ );
return lookup_p_;
}
%{ // -*-Fundamental-*-
#include <iostream.h>
-#define MUDELA_VERSION "0.0.60"
+#define MUDELA_VERSION "0.0.61"
#include "script-def.hh"
#include "symtable.hh"
#include "musical-request.hh"
#include "my-lily-parser.hh"
#include "text-def.hh"
-#include "input-register.hh"
+#include "input-engraver.hh"
#include "score.hh"
#include "music-list.hh"
Chord * chord;
Duration *duration;
Identifier *id;
- Input_register * iregs;
+ Input_engraver * iregs;
Music *music;
Music_list *musiclist;
Score *score;
%token GEOMETRIC
%token GROUPING
%token GROUP
-%token REQUESTREGISTER
+%token REQUESTENGRAVER
%token HSHIFT
%token IN_T
%token ID
%token <id> REAL_IDENTIFIER
%token <id> INT_IDENTIFIER
%token <id> SCORE_IDENTIFIER
+%token <id> PAPER_IDENTIFIER
%token <id> REQUEST_IDENTIFIER
%token <real> REAL
%token <string> DURATION RESTNAME
%type <id> old_identifier
%type <symbol> symboldef
%type <symtable> symtable symtable_body
-%type <iregs> input_register_spec input_register_spec_body
+%type <iregs> input_engraver_spec input_engraver_spec_body
%left PRIORITY
| mudela error
| mudela check_version { }
| mudela add_notenames { }
- | mudela input_register_spec { add_global_input_register($2); }
+ | mudela input_engraver_spec { add_global_input_engraver($2); }
;
check_version:
$$ = new Score_id(*$1, $3, SCORE_IDENTIFIER);
delete $1;
}
+ | declarable_identifier '=' paper_block {
+ $$ = new Paper_def_id(*$1, $3, PAPER_IDENTIFIER);
+ delete $1;
+ }
| declarable_identifier '=' script_definition {
$$ = new Script_id(*$1, $3, SCRIPT_IDENTIFIER);
delete $1;
-input_register_spec:
- REQUESTREGISTER '{' input_register_spec_body '}'
+input_engraver_spec:
+ REQUESTENGRAVER '{' input_engraver_spec_body '}'
{ $$ = $3; }
;
-input_register_spec_body:
+input_engraver_spec_body:
STRING {
- $$ = new Input_register;
+ $$ = new Input_engraver;
$$->name_str_ =*$1;
delete $1;
}
- | input_register_spec_body ALIAS STRING ';' {
+ | input_engraver_spec_body ALIAS STRING ';' {
$$-> alias_str_arr_.push(*$3);
delete $3;
}
- | input_register_spec_body CONSISTS STRING ';' {
+ | input_engraver_spec_body CONSISTS STRING ';' {
$$-> consists_str_arr_.push(*$3);
delete $3;
}
- | input_register_spec_body CONTAINS input_register_spec {
+ | input_engraver_spec_body CONTAINS input_engraver_spec {
$$->add($3);
}
;
paper_body:
/* empty */ {
$$ = THIS->default_paper();
-
}
- | paper_body WIDTH dim ';' { $$->linewidth = $3;}
- | paper_body OUTPUT STRING ';' { $$->outfile = *$3;
+ | paper_body OUTPUT STRING ';' { $$->outfile_str_ = *$3;
delete $3;
}
| paper_body symtables { $$->set($2); }
- | paper_body UNITSPACE dim ';' { $$->whole_width = $3; }
- | paper_body GEOMETRIC REAL ';' { $$->geometric_ = $3; }
+ | paper_body STRING '=' dim ';' {
+ $$->set_var(*$2, $4);
+ }
+ | paper_body STRING '=' REAL ';' {
+ $$->set_var(*$2, $4);
+ }
| paper_body error {
}
| GROUP STRING ';' { // ugh ugh ugh
Change_reg *chr_p = new Change_reg;
$$ = chr_p;
- chr_p-> type_str_ = "Voice_group_registers"; //ugh
+ chr_p-> type_str_ = "Voice_group_engravers"; //ugh
chr_p-> id_str_ = *$2;
delete $2;
}
$$ = new Lookup;
}
| IDENTIFIER {
- $$ = new Lookup(*$1->lookup(true));
+ $$ = $1->lookup(true);
}
| symtables_body TEXID STRING {
$$->texsetting = *$3;
Paper_def*
My_lily_parser::default_paper()
{
- return new Paper_def(
- lexer_p_->lookup_identifier("default_table")->lookup(true));
+ Identifier *id = lexer_p_->lookup_identifier( "default_paper" );
+ return id ? id->paperdef(true) : new Paper_def ;
}
+++ /dev/null
-/*
- registergroup.cc -- implement Register_group_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "register-group.hh"
-#include "register.hh"
-#include "debug.hh"
-#include "p-score.hh"
-#include "score-elem.hh"
-#include "input-register.hh"
-
-Register_group_register::~Register_group_register()
-{
- assert(removable_b());
-}
-
-void
-Register_group_register::check_removal()
-{
- for (int i =0; i < group_l_arr_.size(); ) {
- group_l_arr_[i]->check_removal();
- if (group_l_arr_[i]->removable_b())
- terminate_register(group_l_arr_[i]);
- else
- i++;
- }
-
-}
-
-bool
-Register_group_register::removable_b()const
-{
- return !iterator_count_&& !group_l_arr_.size() ;
-}
-
-Register_group_register::Register_group_register()
-{
- ireg_l_ =0;
-}
-
-void
-Register_group_register::set_feature(Feature d)
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
- // this construction to ensure clean deletion
- Request_register *reg_l = i++;
- reg_l->set_feature(d);
- }
-}
-
-void
-Register_group_register::sync_features()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->sync_features();
- }
-}
-
-void
-Register_group_register::do_pre_move_processing()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->pre_move_processing();
- }
-}
-
-void
-Register_group_register::do_process_requests()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->process_requests();
- }
-}
-
-
-void
-Register_group_register::do_post_move_processing()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
- // this construction to ensure clean deletion
- Request_register *reg_l = i++;
- reg_l->post_move_processing();
- }
-}
-
-
-bool
-Register_group_register::contains_b(Request_register* reg_l)const
-{
- bool parent_b = Request_register::contains_b(reg_l);
-
- if (parent_b)
- return true;
- for (iter_top(reg_list_, j); j.ok(); j++)
- if (j->contains_b(reg_l))
- return true;
- return false;
-}
-
-
-
-bool
-Register_group_register::do_try_request(Request*req_l)
-{
- bool hebbes_b =false;
- for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
- hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
- if (!hebbes_b)
- hebbes_b = daddy_reg_l_->try_request(req_l);
- return hebbes_b ;
-}
-
-void
-Register_group_register::add(Request_register *reg_p)
-{
- reg_list_.bottom().add(reg_p);
- reg_p->daddy_reg_l_ = this;
-
- if (reg_p->is_type_b(Register_group_register::static_name())) {
- group_l_arr_.push((Register_group_register*)reg_p);
- } else {
- nongroup_l_arr_ .push(reg_p);
- }
-}
-
-
-Request_register *
-Register_group_register::remove_register_p(Request_register*reg_l)
-{
- group_l_arr_.substitute((Register_group_register*)reg_l,0);
- nongroup_l_arr_.substitute(reg_l,0);
- iterator(reg_list_) reg_cur= reg_list_.find(reg_l);
-
- return reg_cur.remove_p();
-}
-
-void
-Register_group_register::terminate_register(Request_register*r_l)
-{
- mtor << "Removing " << r_l->name() << " at " << get_staff_info().when() << "\n";
- r_l->do_removal_processing();
- Request_register * reg_p =remove_register_p(r_l);
-
- delete reg_p;
-}
-
-IMPLEMENT_IS_TYPE_B2(Register_group_register,Request_register, Acceptor);
-IMPLEMENT_STATIC_NAME(Register_group_register);
-ADD_THIS_REGISTER(Register_group_register);
-
-void
-Register_group_register::do_print()const
-{
-#ifndef NPRINT
- mtor << "ID: " << id_str_ << "\n";
- for (iter_top(reg_list_, i); i.ok(); i++)
- i->print();
-#endif
-}
-
-
-Register_group_register*
-Register_group_register::find_register_l(String n, String id)
-{
- if (name() == n && id_str_ == id)
- return this;
- Register_group_register * r = 0;
- for (int i =0; !r && i< group_l_arr_.size(); i++) {
- r = group_l_arr_[i]->find_register_l(n,id);
- }
-
- return r;
-}
-
-Acceptor*
-Register_group_register::find_get_acceptor_l(String n,String id)
-{
- Acceptor * ret=0;
- Input_register * ireg_l= ireg_l_-> recursive_find ( n );
- if (ireg_l ) {
- ret = find_register_l(n,id);
- if (!ret) {
- Register_group_register * group =
- ireg_l-> get_group_register_p();
-
- add(group);
- ret = group;
-
- if (group->ireg_l_->is_name_b( n ) )
- ret ->id_str_ = id;
- else
- return ret->find_get_acceptor_l(n,id);
-
- }
- } else if (daddy_reg_l_)
- ret =daddy_reg_l_->find_get_acceptor_l(n,id);
- else {
- warning("Can't find or create `" + n + "' called `" + id + "'\n");
- ret =0;
- }
- return ret;
-}
-
-int
-Register_group_register::depth_i()const
-{
- return daddy_reg_l_->depth_i() + 1;
-}
-
-Acceptor*
-Register_group_register::ancestor_l(int l)
-{
- if (!l || !daddy_reg_l_)
- return this;
-
- return daddy_reg_l_->ancestor_l(l-1);
-}
-
-void
-Register_group_register::announce_element(Score_elem_info info)
-{
- announce_info_arr_.push(info);
- Request_register::announce_element(info);
-}
-
-void
-Register_group_register::do_announces()
-{
- for (int i=0; i < group_l_arr_.size(); i++) {
- group_l_arr_[i]->do_announces();
- }
-
- Request dummy_req;
-
- for (int j =0; j < announce_info_arr_.size(); j++){
- Score_elem_info info = announce_info_arr_[j];
-
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
- for (int i=0; i < nongroup_l_arr_.size(); i++) {
- if (nongroup_l_arr_[i] != info.origin_reg_l_arr_[0])
- nongroup_l_arr_[i]->acknowledge_element(info);
- }
- }
- announce_info_arr_.set_size(0);
-}
-
-
-void
-Register_group_register::do_removal_processing()
-{
- for (iter( reg_list_.top(), i); i.ok(); i++)
- i->do_removal_processing();
-}
-
-Staff_info
-Register_group_register::get_staff_info()const
-{
- Staff_info inf = Request_register::get_staff_info();
-
- for (int i=0; i < nongroup_l_arr_.size(); i++)
- nongroup_l_arr_[i]->fill_staff_info(inf);
-
- return inf;
-}
-
-Acceptor*
-Register_group_register::get_default_interpreter()
-{
- if ( interpreter_l() )
- return daddy_reg_l_->get_default_interpreter();
-
- Register_group_register *reg_p= ireg_l_->
- get_default_ireg_l()->get_group_register_p();
- add(reg_p );
- if (reg_p->interpreter_l())
- return reg_p;
- else
- return reg_p->get_default_interpreter();
-}
+++ /dev/null
-/*
- register.cc -- implement Request_register
-
- Sourcefile of GNU LilyPond musictypesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "music-list.hh"
-#include "musical-request.hh"
-#include "register.hh"
-#include "register-group.hh"
-#include "debug.hh"
-
-void
-Request_register::post_move_processing()
-{
-
- if (status < CREATION_INITED) {
- do_creation_processing();
- status = CREATION_INITED;
- }
- if (status >= MOVE_INITED)
- return;
-
- do_post_move_processing();
- status = MOVE_INITED;
-}
-
-bool
-Request_register::try_request(Request * r)
-{
- if (status < MOVE_INITED)
- post_move_processing();
-
- return do_try_request(r);
-}
-
-void
-Request_register::process_requests()
-{
- if (status < PROCESSED_REQS)
- post_move_processing();
- else if (status >= PROCESSED_REQS)
- return;
-
- status = PROCESSED_REQS;
- do_process_requests();
-}
-
-void
-Request_register::pre_move_processing()
-{
- do_pre_move_processing();
- status = CREATION_INITED;
-}
-
-void
-Request_register::fill_staff_info(Staff_info&)
-{
-
-}
-
-Scalar
-Request_register::get_feature(String t)
-{
- return daddy_reg_l_->get_feature(t);
-}
-
-bool
-Request_register::do_try_request(Request*)
-{
- return false;
-}
-
-Request_register::Request_register()
-{
- status = VIRGIN;
- daddy_reg_l_ = 0;
-}
-
-void
-Request_register::announce_element(Score_elem_info i)
-{
- i.origin_reg_l_arr_.push(this);
- daddy_reg_l_->announce_element(i);
-}
-
-void
-Request_register::typeset_element(Score_elem*p)
-{
- daddy_reg_l_->typeset_element(p);
-}
-
-Paper_def*
-Request_register::paper()const
-{
- return daddy_reg_l_->paper();
-}
-
-void
-Request_register::typeset_breakable_item(Item * nobreak_p)
-{
- daddy_reg_l_->typeset_breakable_item(nobreak_p);
-}
-
-bool
-Request_register::contains_b(Request_register *reg_l)const
-{
- return this == reg_l;
-}
-
-Staff_info
-Request_register::get_staff_info() const
-{
- return daddy_reg_l_->get_staff_info();
-}
-
-void
-Request_register::print() const
-{
-#ifndef NPRINT
- mtor << "\n" << name() << " {";
- do_print();
- mtor << "}";
-#endif
-}
-
-IMPLEMENT_STATIC_NAME(Request_register);
-IMPLEMENT_IS_TYPE_B(Request_register);
-
-void
-Request_register::do_print()const
-{
-}
-
-
--- /dev/null
+/*
+ rest-collision-reg.cc -- implement Rest_collision_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "debug.hh"
+#include "rest-collision.hh"
+#include "rest-collision-grav.hh"
+#include "collision.hh"
+#include "rest-column.hh"
+#include "note-column.hh"
+
+IMPLEMENT_STATIC_NAME(Rest_collision_engraver);
+IMPLEMENT_IS_TYPE_B1(Rest_collision_engraver, Request_engraver);
+ADD_THIS_ENGRAVER(Rest_collision_engraver);
+
+Rest_collision_engraver::Rest_collision_engraver()
+{
+ rest_collision_p_ =0;
+}
+
+void
+Rest_collision_engraver::acknowledge_element(Score_elem_info i)
+{
+ char const * nC = i.elem_l_->name();
+ if (nC == Collision::static_name()) {
+ collision_l_arr_.push((Collision*)i.elem_l_->item());
+ }
+ else if (nC == Note_column::static_name()) {
+ // what should i do, what should _engraver do?
+ if (!rest_collision_p_)
+ rest_collision_p_ = new Rest_collision;
+ rest_collision_p_->add((Note_column*)i.elem_l_->item());
+ }
+ else if (nC == Rest_column::static_name()) {
+ if (!rest_collision_p_)
+ rest_collision_p_ = new Rest_collision;
+ rest_collision_p_->add((Rest_column*)i.elem_l_->item());
+ }
+}
+
+void
+Rest_collision_engraver::do_pre_move_processing()
+{
+ if (rest_collision_p_) {
+ typeset_element(rest_collision_p_);
+ rest_collision_p_ = 0;
+ }
+}
+
+void
+Rest_collision_engraver::do_print() const
+{
+#ifndef NPRINT
+ mtor << "collisions: " << collision_l_arr_.size();
+ if ( rest_collision_p_ )
+ rest_collision_p_->print();
+#endif
+}
+++ /dev/null
-/*
- rest-collision-reg.cc -- implement Rest_collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "rest-collision.hh"
-#include "rest-collision-reg.hh"
-#include "collision.hh"
-#include "rest-column.hh"
-#include "note-column.hh"
-
-IMPLEMENT_STATIC_NAME(Rest_collision_register);
-IMPLEMENT_IS_TYPE_B1(Rest_collision_register, Request_register);
-ADD_THIS_REGISTER(Rest_collision_register);
-
-Rest_collision_register::Rest_collision_register()
-{
- rest_collision_p_ =0;
-}
-
-void
-Rest_collision_register::acknowledge_element(Score_elem_info i)
-{
- char const * nC = i.elem_l_->name();
- if (nC == Collision::static_name()) {
- collision_l_arr_.push((Collision*)i.elem_l_->item());
- }
- else if (nC == Note_column::static_name()) {
- // what should i do, what should _register do?
- if (!rest_collision_p_)
- rest_collision_p_ = new Rest_collision;
- rest_collision_p_->add((Note_column*)i.elem_l_->item());
- }
- else if (nC == Rest_column::static_name()) {
- if (!rest_collision_p_)
- rest_collision_p_ = new Rest_collision;
- rest_collision_p_->add((Rest_column*)i.elem_l_->item());
- }
-}
-
-void
-Rest_collision_register::do_pre_move_processing()
-{
- if (rest_collision_p_) {
- typeset_element(rest_collision_p_);
- rest_collision_p_ = 0;
- }
-}
-
-void
-Rest_collision_register::do_print() const
-{
-#ifndef NPRINT
- mtor << "collisions: " << collision_l_arr_.size();
- if ( rest_collision_p_ )
- rest_collision_p_->print();
-#endif
-}
--- /dev/null
+/*
+ score-align-reg.cc -- implement Score_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "elem-group-item.hh"
+#include "score-align-grav.hh"
+#include "item.hh"
+
+Score_align_engraver::Score_align_engraver()
+{
+ type_ch_C_ = 0;
+ priority_i_ =0;
+ align_p_=0;
+}
+
+void
+Score_align_engraver::do_pre_move_processing()
+{
+ if (align_p_) {
+ typeset_breakable_item( align_p_);
+ align_p_ =0;
+ }
+}
+
+void
+Score_align_engraver::acknowledge_element(Score_elem_info inf)
+{
+ if (inf.elem_l_->name() == type_ch_C_ ) {
+
+ if (! align_p_ ) {
+ align_p_ = new Horizontal_group_item;
+ announce_element(Score_elem_info(align_p_,0));
+ }
+
+ align_p_->add_element(inf.elem_l_);
+ }
+}
+
+IMPLEMENT_STATIC_NAME(Score_align_engraver)
+IMPLEMENT_IS_TYPE_B1(Score_align_engraver,Request_engraver);
--- /dev/null
+/*
+ score-align-gravs.cc -- implement different alignment engravers.
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "key-item.hh"
+#include "clef-item.hh"
+#include "meter.hh"
+#include "bar.hh"
+#include "score-align-grav.hh"
+
+#define IMPLEMENT_ALIGN_REG(C,T,p)\
+class C ## _align_engraver : public Score_align_engraver \
+{ \
+public: \
+ NAME_MEMBERS(); \
+ C ## _align_engraver() : Score_align_engraver() \
+ { type_ch_C_ = T::static_name();\
+ priority_i_ = p;} \
+}; \
+IMPLEMENT_STATIC_NAME(C ## _align_engraver) ; \
+ADD_THIS_ENGRAVER(C ## _align_engraver); \
+IMPLEMENT_IS_TYPE_B1(C ## _align_engraver, Score_align_engraver) ;
+
+
+IMPLEMENT_ALIGN_REG(Key,Key_item,3);
+IMPLEMENT_ALIGN_REG(Clef,Clef_item,2);
+IMPLEMENT_ALIGN_REG(Meter,Meter,4);
+IMPLEMENT_ALIGN_REG(Bar, Bar,0);
+
+++ /dev/null
-/*
- score-align-reg.cc -- implement Score_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#include "elem-group-item.hh"
-#include "score-align-reg.hh"
-#include "item.hh"
-
-Score_align_register::Score_align_register()
-{
- type_ch_C_ = 0;
- priority_i_ =0;
- align_p_=0;
-}
-
-void
-Score_align_register::do_pre_move_processing()
-{
- if (align_p_) {
- typeset_breakable_item( align_p_);
- align_p_ =0;
- }
-}
-
-void
-Score_align_register::acknowledge_element(Score_elem_info inf)
-{
- if (inf.elem_l_->name() == type_ch_C_ ) {
-
- if (! align_p_ ) {
- align_p_ = new Horizontal_group_item;
- announce_element(Score_elem_info(align_p_,0));
- }
-
- align_p_->add_element(inf.elem_l_);
- }
-}
-
-IMPLEMENT_STATIC_NAME(Score_align_register)
-IMPLEMENT_IS_TYPE_B1(Score_align_register,Request_register);
+++ /dev/null
-/*
- score-align-regs.cc -- implement different alignment registers.
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "key-item.hh"
-#include "clef-item.hh"
-#include "meter.hh"
-#include "bar.hh"
-#include "score-align-reg.hh"
-
-#define IMPLEMENT_ALIGN_REG(C,T,p)\
-class C ## _align_register : public Score_align_register \
-{ \
-public: \
- NAME_MEMBERS(); \
- C ## _align_register() : Score_align_register() \
- { type_ch_C_ = T::static_name();\
- priority_i_ = p;} \
-}; \
-IMPLEMENT_STATIC_NAME(C ## _align_register) ; \
-ADD_THIS_REGISTER(C ## _align_register); \
-IMPLEMENT_IS_TYPE_B1(C ## _align_register, Score_align_register) ;
-
-
-IMPLEMENT_ALIGN_REG(Key,Key_item,3);
-IMPLEMENT_ALIGN_REG(Clef,Clef_item,2);
-IMPLEMENT_ALIGN_REG(Meter,Meter,4);
-IMPLEMENT_ALIGN_REG(Bar, Bar,0);
-
--- /dev/null
+/*
+ score-reg.cc -- implement Score_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "super-elem.hh"
+#include "scoreline.hh"
+#include "debug.hh"
+#include "score-elem.hh"
+#include "bar.hh" // needed for Bar::static_name
+#include "staffline.hh"
+#include "score-grav.hh"
+#include "p-col.hh"
+#include "p-score.hh"
+#include "score.hh"
+#include "musical-request.hh"
+#include "score-column.hh"
+
+
+void
+Score_engraver::set_score(Score *s)
+{
+ Global_translator::set_score(s);
+ scoreline_l_ = s->pscore_p_->super_elem_l_->line_of_score_l_;
+}
+
+Score_engraver::Score_engraver()
+{
+ scoreline_l_ =0;
+ command_column_l_ =0;
+ musical_column_l_ =0;
+}
+
+
+void
+Score_engraver::prepare(Moment w)
+{
+ Score_column* c1 = new Score_column(w);
+ Score_column* c2 = new Score_column(w);
+
+ c1->musical_b_ = false;
+ c2->musical_b_ = true;
+
+ score_l_->cols_.bottom().add(c1);
+ score_l_->cols_.bottom().add(c2);
+ set_cols(c1,c2);
+
+
+ post_move_processing();
+}
+void
+Score_engraver::finish()
+{
+ check_removal();
+ do_removal_processing();
+}
+
+void
+Score_engraver::do_creation_processing()
+{
+ scoreline_l_->left_col_l_ = get_staff_info().command_pcol_l();
+ scoreline_l_->left_col_l_ ->set_breakable();
+ Engraver_group_engraver::do_creation_processing();
+}
+
+void
+Score_engraver::set_cols(Score_column*c1,Score_column*c2)
+{
+ command_column_l_ = c1;
+ musical_column_l_ = c2;
+}
+
+void
+Score_engraver::do_removal_processing()
+{
+ Engraver_group_engraver::do_removal_processing();
+ scoreline_l_->right_col_l_ = get_staff_info().command_pcol_l();
+ scoreline_l_->right_col_l_ ->set_breakable();
+ typeset_all();
+}
+
+void
+Score_engraver::process()
+{
+ process_requests();
+ do_announces();
+ pre_move_processing();
+ check_removal();
+}
+
+void
+Score_engraver::announce_element(Score_elem_info info)
+{
+ info.origin_grav_l_arr_.push(this);
+ if (info.elem_l_->name() == Bar::static_name()) {
+ get_staff_info().command_pcol_l()->set_breakable();
+ } else if ( info.elem_l_->is_type_b( Line_of_staff::static_name() ) &&
+ !scoreline_l_->contains_b( info.elem_l_) )
+
+ scoreline_l_->add(info.elem_l_);
+
+ announce_info_arr_.push(info);
+}
+void
+Score_engraver::do_announces()
+{
+ /* All elements are propagated to the top upon announcement. If
+ something was created during one run of
+ Engraver_group_engraver::do_announces, then
+ announce_info_arr_.size() will be nonzero again
+
+ */
+ while (announce_info_arr_.size()) {
+ for (int i=0; i <announce_info_arr_.size(); i++)
+ /*
+ TODO
+
+ More subtle spacing
+ */
+ if (announce_info_arr_[i].req_l_) {
+ Musical_req *m = announce_info_arr_[i].req_l_->musical();
+ if (m&&m->rhythmic()) {
+ musical_column_l_->add_duration( m->duration());
+ }
+ }
+ Engraver_group_engraver::do_announces();
+ }
+}
+
+
+void
+Score_engraver::typeset_element(Score_elem *elem_p)
+{
+ musical_item_p_arr_.push(elem_p);
+}
+
+void
+Score_engraver::typeset_breakable_item(Item * nobreak_p)
+{
+ if (nobreak_p) {
+ nobreak_item_p_arr_.push(nobreak_p);
+ }
+}
+
+void
+Score_engraver::typeset_all()
+{
+ PCol * c= get_staff_info().command_pcol_l();
+ PScore *ps_l = score_l_->pscore_p_;
+
+ for (int i =0; i < nobreak_item_p_arr_.size(); i++) {
+ ps_l->typeset_item(nobreak_item_p_arr_[i], c, 0);
+ scoreline_l_->add(nobreak_item_p_arr_[i]);
+ }
+ nobreak_item_p_arr_.set_size(0);
+
+ for (int i=0; i < musical_item_p_arr_.size(); i++) {
+ PCol* m = get_staff_info().musical_pcol_l();
+ Score_elem *elem_p = musical_item_p_arr_[i];
+
+ scoreline_l_->add(elem_p);
+ if (elem_p->spanner()) {
+ ps_l->typeset_unbroken_spanner(elem_p->spanner());
+ } else if (elem_p->item()) {
+ ps_l->typeset_item(elem_p->item(), m, 0);
+ } else
+ assert(false);
+ }
+ musical_item_p_arr_.set_size(0);
+}
+
+
+void
+Score_engraver::do_pre_move_processing()
+{
+ // this generates all items.
+ Engraver_group_engraver::do_pre_move_processing();
+
+ typeset_all();
+}
+
+
+Staff_info
+Score_engraver::get_staff_info()const
+{
+ Staff_info inf;
+
+ inf.command_l_ = command_column_l_;
+ inf.musical_l_ = musical_column_l_;
+ return inf;
+}
+
+Paper_def*
+Score_engraver::paper()const
+{
+ return score_l_->paper_p_;
+}
+
+
+
+bool
+Score_engraver::do_try_request(Request*r)
+{
+ bool gotcha = false;
+ for (int i =0; !gotcha && i < nongroup_l_arr_.size() ; i++)
+ gotcha = nongroup_l_arr_[i]->try_request(r);
+
+ return gotcha;
+}
+
+IMPLEMENT_IS_TYPE_B1(Score_engraver,Engraver_group_engraver);
+IMPLEMENT_STATIC_NAME(Score_engraver);
+ADD_THIS_ENGRAVER(Score_engraver);
+
--- /dev/null
+/*
+ score-halign-reg.cc -- implement Score_horizontal_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bar.hh"
+#include "break-align-item.hh"
+#include "score-halign-grav.hh"
+#include "score-align-grav.hh"
+
+Score_horizontal_align_engraver::Score_horizontal_align_engraver()
+{
+ halign_p_ =0;
+}
+
+void
+Score_horizontal_align_engraver::do_pre_move_processing()
+{
+ if (halign_p_) {
+ typeset_breakable_item(halign_p_);
+ halign_p_ =0;
+ }
+
+}
+
+void
+Score_horizontal_align_engraver::acknowledge_element(Score_elem_info i)
+{
+ Request_engraver* reg = i.origin_grav_l_arr_[0];
+ if (reg->is_type_b(
+ Score_align_engraver::static_name()) )
+ {
+ Score_align_engraver * align_grav_l = (Score_align_engraver*) reg;
+ if (!halign_p_) {
+ halign_p_ = new Break_align_item;
+ announce_element(Score_elem_info(halign_p_,0));
+ }
+ Item * it = i.elem_l_->item();
+ if (align_grav_l->type_ch_C_ == Bar::static_name())
+ halign_p_->center_l_ = it;
+
+ halign_p_->add(it, align_grav_l->priority_i_);
+ }
+}
+IMPLEMENT_STATIC_NAME(Score_horizontal_align_engraver);
+IMPLEMENT_IS_TYPE_B1(Score_horizontal_align_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Score_horizontal_align_engraver);
+++ /dev/null
-/*
- score-halign-reg.cc -- implement Score_horizontal_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "bar.hh"
-#include "break-align-item.hh"
-#include "score-halign-reg.hh"
-#include "score-align-reg.hh"
-
-Score_horizontal_align_register::Score_horizontal_align_register()
-{
- halign_p_ =0;
-}
-
-void
-Score_horizontal_align_register::do_pre_move_processing()
-{
- if (halign_p_) {
- typeset_breakable_item(halign_p_);
- halign_p_ =0;
- }
-
-}
-
-void
-Score_horizontal_align_register::acknowledge_element(Score_elem_info i)
-{
- Request_register* reg = i.origin_reg_l_arr_[0];
- if (reg->is_type_b(
- Score_align_register::static_name()) )
- {
- Score_align_register * align_reg_l = (Score_align_register*) reg;
- if (!halign_p_) {
- halign_p_ = new Break_align_item;
- announce_element(Score_elem_info(halign_p_,0));
- }
- Item * it = i.elem_l_->item();
- if (align_reg_l->type_ch_C_ == Bar::static_name())
- halign_p_->center_l_ = it;
-
- halign_p_->add(it, align_reg_l->priority_i_);
- }
-}
-IMPLEMENT_STATIC_NAME(Score_horizontal_align_register);
-IMPLEMENT_IS_TYPE_B1(Score_horizontal_align_register,Request_register);
-ADD_THIS_REGISTER(Score_horizontal_align_register);
+++ /dev/null
-/*
- score-reg.cc -- implement Score_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "super-elem.hh"
-#include "scoreline.hh"
-#include "debug.hh"
-#include "score-elem.hh"
-#include "bar.hh" // needed for Bar::static_name
-#include "staffline.hh"
-#include "score-reg.hh"
-#include "p-col.hh"
-#include "p-score.hh"
-#include "score.hh"
-#include "musical-request.hh"
-#include "score-column.hh"
-
-
-void
-Score_register::set_score(Score *s)
-{
- Global_acceptor::set_score(s);
- scoreline_l_ = s->pscore_p_->super_elem_l_->line_of_score_l_;
-}
-
-Score_register::Score_register()
-{
- scoreline_l_ =0;
- command_column_l_ =0;
- musical_column_l_ =0;
-}
-
-
-void
-Score_register::prepare(Moment w)
-{
- Score_column* c1 = new Score_column(w);
- Score_column* c2 = new Score_column(w);
-
- c1->musical_b_ = false;
- c2->musical_b_ = true;
-
- score_l_->cols_.bottom().add(c1);
- score_l_->cols_.bottom().add(c2);
- set_cols(c1,c2);
-
-
- post_move_processing();
-}
-void
-Score_register::finish()
-{
- check_removal();
- do_removal_processing();
-}
-
-void
-Score_register::do_creation_processing()
-{
- scoreline_l_->left_col_l_ = get_staff_info().command_pcol_l();
- scoreline_l_->left_col_l_ ->set_breakable();
- Register_group_register::do_creation_processing();
-}
-
-void
-Score_register::set_cols(Score_column*c1,Score_column*c2)
-{
- command_column_l_ = c1;
- musical_column_l_ = c2;
-}
-
-void
-Score_register::do_removal_processing()
-{
- Register_group_register::do_removal_processing();
- scoreline_l_->right_col_l_ = get_staff_info().command_pcol_l();
- scoreline_l_->right_col_l_ ->set_breakable();
- typeset_all();
-}
-
-void
-Score_register::process()
-{
- process_requests();
- do_announces();
- pre_move_processing();
- check_removal();
-}
-
-void
-Score_register::announce_element(Score_elem_info info)
-{
- info.origin_reg_l_arr_.push(this);
- if (info.elem_l_->name() == Bar::static_name()) {
- get_staff_info().command_pcol_l()->set_breakable();
- } else if ( info.elem_l_->is_type_b( Line_of_staff::static_name() ) &&
- !scoreline_l_->contains_b( info.elem_l_) )
-
- scoreline_l_->add(info.elem_l_);
-
- announce_info_arr_.push(info);
-}
-void
-Score_register::do_announces()
-{
- /* All elements are propagated to the top upon announcement. If
- something was created during one run of
- Register_group_register::do_announces, then
- announce_info_arr_.size() will be nonzero again
-
- */
- while (announce_info_arr_.size()) {
- for (int i=0; i <announce_info_arr_.size(); i++)
- /*
- TODO
-
- More subtle spacing
- */
- if (announce_info_arr_[i].req_l_) {
- Musical_req *m = announce_info_arr_[i].req_l_->musical();
- if (m&&m->rhythmic()) {
- musical_column_l_->add_duration( m->duration());
- }
- }
- Register_group_register::do_announces();
- }
-}
-
-
-void
-Score_register::typeset_element(Score_elem *elem_p)
-{
- musical_item_p_arr_.push(elem_p);
-}
-
-void
-Score_register::typeset_breakable_item(Item * nobreak_p)
-{
- if (nobreak_p) {
- nobreak_item_p_arr_.push(nobreak_p);
- }
-}
-
-void
-Score_register::typeset_all()
-{
- PCol * c= get_staff_info().command_pcol_l();
- PScore *ps_l = score_l_->pscore_p_;
-
- for (int i =0; i < nobreak_item_p_arr_.size(); i++) {
- ps_l->typeset_item(nobreak_item_p_arr_[i], c, 0);
- scoreline_l_->add(nobreak_item_p_arr_[i]);
- }
- nobreak_item_p_arr_.set_size(0);
-
- for (int i=0; i < musical_item_p_arr_.size(); i++) {
- PCol* m = get_staff_info().musical_pcol_l();
- Score_elem *elem_p = musical_item_p_arr_[i];
-
- scoreline_l_->add(elem_p);
- if (elem_p->spanner()) {
- ps_l->typeset_unbroken_spanner(elem_p->spanner());
- } else if (elem_p->item()) {
- ps_l->typeset_item(elem_p->item(), m, 0);
- } else
- assert(false);
- }
- musical_item_p_arr_.set_size(0);
-}
-
-
-void
-Score_register::do_pre_move_processing()
-{
- // this generates all items.
- Register_group_register::do_pre_move_processing();
-
- typeset_all();
-}
-
-
-Staff_info
-Score_register::get_staff_info()const
-{
- Staff_info inf;
-
- inf.command_l_ = command_column_l_;
- inf.musical_l_ = musical_column_l_;
- return inf;
-}
-
-Paper_def*
-Score_register::paper()const
-{
- return score_l_->paper_p_;
-}
-
-
-
-bool
-Score_register::do_try_request(Request*r)
-{
- bool gotcha = false;
- for (int i =0; !gotcha && i < nongroup_l_arr_.size() ; i++)
- gotcha = nongroup_l_arr_[i]->try_request(r);
-
- return gotcha;
-}
-
-IMPLEMENT_IS_TYPE_B1(Score_register,Register_group_register);
-IMPLEMENT_STATIC_NAME(Score_register);
-ADD_THIS_REGISTER(Score_register);
-
#include "midi-output.hh"
#include "midi-def.hh"
#include "p-col.hh"
-#include "score-reg.hh"
+#include "score-grav.hh"
#include "music-iterator.hh"
#include "music.hh"
#include "music-list.hh"
-#include "input-register.hh"
+#include "input-engraver.hh"
extern String default_out_fn;
}
void
-Score::run_acceptor(Global_acceptor * acc_l)
+Score::run_translator(Global_translator * acc_l)
{
acc_l->set_score (this);
Music_iterator * iter = Music_iterator::static_get_iterator_p(music_p_,
*mlog << "\nCreating elements ..." << flush;
pscore_p_ = new PScore(paper_p_);
- Score_register * score_reg =
- (Score_register*)lookup_reg("Score_register")->get_group_register_p();
- run_acceptor( score_reg );
- delete score_reg;
+ Score_engraver * score_grav=
+ (Score_engraver*)lookup_grav("Score_engraver")->get_group_engraver_p();
+ run_translator( score_grav );
+ delete score_grav;
if( errorlevel_i_){
// should we? hampers debugging.
}
}
-Moment
-Score::last() const
-{
- Moment l = 0;
- // TODO
- return l;
-}
-
void
Score::set(Paper_def *pap_p)
{
void
Score::paper_output()
{
- if (paper_p_->outfile=="")
- paper_p_->outfile = default_out_fn + ".out";
+ if (paper_p_->outfile_str_=="")
+ paper_p_->outfile_str_ = default_out_fn + ".out";
if ( errorlevel_i_ ) {
- *mlog << "lilypond: warning: no output to: " << paper_p_->outfile
+ *mlog << "lilypond: warning: no output to: " << paper_p_->outfile_str_
<< " (errorlevel=" << errorlevel_i_ << ")" << endl;
return;
}
- *mlog << "TeX output to " << paper_p_->outfile << " ...\n";
+ *mlog << "TeX output to " << paper_p_->outfile_str_ << " ...\n";
- Tex_stream the_output(paper_p_->outfile);
+ Tex_stream the_output(paper_p_->outfile_str_);
the_output << "% outputting Score, defined at: " <<
location_str() << "\n";
--- /dev/null
+/*
+ script-reg.cc -- implement Script_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "script-grav.hh"
+#include "script.hh"
+#include "musical-request.hh"
+#include "stem.hh"
+#include "staff-sym.hh"
+
+Script_engraver::Script_engraver()
+{
+ do_post_move_processing();
+}
+
+bool
+Script_engraver::do_try_request(Request *r_l)
+{
+ 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_req_l_arr_.push( r_l->script());
+
+ return true;
+}
+
+void
+Script_engraver::do_process_requests()
+{
+ for (int i=0; i < script_req_l_arr_.size(); i++){
+ Script_req* l=script_req_l_arr_[i];
+ Script *p =new Script;
+ p->dir_i_ = l->dir_i_;
+ p->specs_l_ = l->scriptdef_p_;
+ script_p_arr_.push(p);
+ announce_element(Score_elem_info(p, l));
+ }
+}
+
+bool
+Script_engraver::acceptable_elem_b(Score_elem*s_l)
+{
+ char const *nC = s_l->name();
+ return (nC == Stem::static_name());
+}
+
+void
+Script_engraver::acknowledge_element(Score_elem_info info)
+{
+ Score_elem *elem_l = info.elem_l_;
+ if (!acceptable_elem_b(elem_l))
+ return;
+
+ for (int i=0; i < script_p_arr_.size(); i++) {
+ Script*script_l = script_p_arr_[i];
+ if (elem_l->name() == Stem::static_name())
+ script_l->set_stem((Stem*)elem_l->item());
+ }
+}
+
+void
+Script_engraver::do_pre_move_processing()
+{
+ Staff_symbol* s_l = get_staff_info().staff_sym_l_;
+ for (int i=0; i < script_p_arr_.size(); i++) {
+
+ Script*script_p = script_p_arr_[i];
+ script_p->set_staffsym( s_l);
+ typeset_element(script_p);
+ }
+ script_p_arr_.set_size(0);
+}
+
+void
+Script_engraver::do_post_move_processing()
+{
+ script_req_l_arr_.set_size(0);
+}
+
+IMPLEMENT_STATIC_NAME(Script_engraver);
+IMPLEMENT_IS_TYPE_B1(Script_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Script_engraver);
+++ /dev/null
-/*
- script-reg.cc -- implement Script_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "script-reg.hh"
-#include "script.hh"
-#include "musical-request.hh"
-#include "stem.hh"
-#include "staff-sym.hh"
-
-Script_register::Script_register()
-{
- do_post_move_processing();
-}
-
-bool
-Script_register::do_try_request(Request *r_l)
-{
- 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_req_l_arr_.push( r_l->script());
-
- return true;
-}
-
-void
-Script_register::do_process_requests()
-{
- for (int i=0; i < script_req_l_arr_.size(); i++){
- Script_req* l=script_req_l_arr_[i];
- Script *p =new Script;
- p->dir_i_ = l->dir_i_;
- p->specs_l_ = l->scriptdef_p_;
- script_p_arr_.push(p);
- announce_element(Score_elem_info(p, l));
- }
-}
-
-bool
-Script_register::acceptable_elem_b(Score_elem*s_l)
-{
- char const *nC = s_l->name();
- return (nC == Stem::static_name());
-}
-
-void
-Script_register::acknowledge_element(Score_elem_info info)
-{
- Score_elem *elem_l = info.elem_l_;
- if (!acceptable_elem_b(elem_l))
- return;
-
- for (int i=0; i < script_p_arr_.size(); i++) {
- Script*script_l = script_p_arr_[i];
- if (elem_l->name() == Stem::static_name())
- script_l->set_stem((Stem*)elem_l->item());
- }
-}
-
-void
-Script_register::do_pre_move_processing()
-{
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- for (int i=0; i < script_p_arr_.size(); i++) {
-
- Script*script_p = script_p_arr_[i];
- script_p->set_staffsym( s_l);
- typeset_element(script_p);
- }
- script_p_arr_.set_size(0);
-}
-
-void
-Script_register::do_post_move_processing()
-{
- script_req_l_arr_.set_size(0);
-}
-
-IMPLEMENT_STATIC_NAME(Script_register);
-IMPLEMENT_IS_TYPE_B1(Script_register,Request_register);
-ADD_THIS_REGISTER(Script_register);
--- /dev/null
+/*
+ slur-reg.cc -- implement Slur_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "musical-request.hh"
+#include "slur-grav.hh"
+#include "slur.hh"
+#include "debug.hh"
+#include "note-column.hh"
+
+bool
+Slur_engraver::do_try_request(Request *req_l)
+{
+ Musical_req *mus_l = req_l->musical();
+ if(!mus_l || !mus_l->slur())
+ return false;
+
+ new_slur_req_l_arr_.push(mus_l->slur());
+ return true;
+}
+
+void
+Slur_engraver::acknowledge_element(Score_elem_info info)
+{
+ if (info.elem_l_->name() == Note_column::static_name()) {
+ Note_column *col_l =(Note_column*) info.elem_l_->item() ;// ugh
+ for (int i = 0; i < slur_l_stack_.size(); i++)
+ slur_l_stack_[i]->add(col_l );
+ for (int i = 0; i < end_slur_l_arr_.size(); i++)
+ end_slur_l_arr_[i]->add(col_l);
+ }
+}
+
+void
+Slur_engraver::set_feature(Feature f)
+{
+ if (f.type_ == "vdir")
+ dir_i_ = f.value_ ;
+}
+
+/*
+ abracadabra
+ */
+Slur_engraver::Slur_engraver()
+{
+ dir_i_ =0;
+}
+void
+Slur_engraver::do_process_requests()
+{
+ Array<Slur*> start_slur_l_arr_;
+ for (int i=0; i< new_slur_req_l_arr_.size(); i++) {
+ Slur_req* slur_req_l = new_slur_req_l_arr_[i];
+ // end slur: move the slur to other array
+ if (slur_req_l->spantype == Span_req::STOP) {
+ if (slur_l_stack_.empty())
+
+ slur_req_l->warning("can't find slur to end");
+ else {
+ end_slur_l_arr_.push(slur_l_stack_.pop());
+ requests_arr_.pop();
+ }
+ } else if (slur_req_l->spantype == Span_req::START) {
+ // push a new slur onto stack.
+ //(use temp. array to wait for all slur STOPs)
+ Slur * s_p =new Slur;
+ requests_arr_.push(slur_req_l);
+ start_slur_l_arr_.push(s_p);
+ announce_element(Score_elem_info(s_p, slur_req_l));
+ }
+ }
+ for (int i=0; i < start_slur_l_arr_.size(); i++)
+ slur_l_stack_.push(start_slur_l_arr_[i]);
+}
+
+void
+Slur_engraver::do_pre_move_processing()
+{
+ for (int i = 0; i < end_slur_l_arr_.size(); i++) {
+ if (dir_i_)
+ end_slur_l_arr_[i]->dir_i_ = dir_i_;
+ typeset_element(end_slur_l_arr_[i]);
+ }
+ end_slur_l_arr_.set_size(0);
+}
+
+void
+Slur_engraver::do_post_move_processing()
+{
+ new_slur_req_l_arr_.set_size(0);
+}
+Slur_engraver::~Slur_engraver()
+{
+ for (int i=0; i < requests_arr_.size(); i++) {
+ requests_arr_[i]->warning("unterminated slur");
+ }
+}
+IMPLEMENT_STATIC_NAME(Slur_engraver);
+IMPLEMENT_IS_TYPE_B1(Slur_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Slur_engraver);
+++ /dev/null
-/*
- slur-reg.cc -- implement Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "musical-request.hh"
-#include "slur-reg.hh"
-#include "slur.hh"
-#include "debug.hh"
-#include "note-column.hh"
-
-bool
-Slur_register::do_try_request(Request *req_l)
-{
- Musical_req *mus_l = req_l->musical();
- if(!mus_l || !mus_l->slur())
- return false;
-
- new_slur_req_l_arr_.push(mus_l->slur());
- return true;
-}
-
-void
-Slur_register::acknowledge_element(Score_elem_info info)
-{
- if (info.elem_l_->name() == Note_column::static_name()) {
- Note_column *col_l =(Note_column*) info.elem_l_->item() ;// ugh
- for (int i = 0; i < slur_l_stack_.size(); i++)
- slur_l_stack_[i]->add(col_l );
- for (int i = 0; i < end_slur_l_arr_.size(); i++)
- end_slur_l_arr_[i]->add(col_l);
- }
-}
-
-void
-Slur_register::set_feature(Feature f)
-{
- if (f.type_ == "vdir")
- dir_i_ = f.value_ ;
-}
-
-/*
- abracadabra
- */
-Slur_register::Slur_register()
-{
- dir_i_ =0;
-}
-void
-Slur_register::do_process_requests()
-{
- Array<Slur*> start_slur_l_arr_;
- for (int i=0; i< new_slur_req_l_arr_.size(); i++) {
- Slur_req* slur_req_l = new_slur_req_l_arr_[i];
- // end slur: move the slur to other array
- if (slur_req_l->spantype == Span_req::STOP) {
- if (slur_l_stack_.empty())
-
- slur_req_l->warning("can't find slur to end");
- else {
- end_slur_l_arr_.push(slur_l_stack_.pop());
- requests_arr_.pop();
- }
- } else if (slur_req_l->spantype == Span_req::START) {
- // push a new slur onto stack.
- //(use temp. array to wait for all slur STOPs)
- Slur * s_p =new Slur;
- requests_arr_.push(slur_req_l);
- start_slur_l_arr_.push(s_p);
- announce_element(Score_elem_info(s_p, slur_req_l));
- }
- }
- for (int i=0; i < start_slur_l_arr_.size(); i++)
- slur_l_stack_.push(start_slur_l_arr_[i]);
-}
-
-void
-Slur_register::do_pre_move_processing()
-{
- for (int i = 0; i < end_slur_l_arr_.size(); i++) {
- if (dir_i_)
- end_slur_l_arr_[i]->dir_i_ = dir_i_;
- typeset_element(end_slur_l_arr_[i]);
- }
- end_slur_l_arr_.set_size(0);
-}
-
-void
-Slur_register::do_post_move_processing()
-{
- new_slur_req_l_arr_.set_size(0);
-}
-Slur_register::~Slur_register()
-{
- for (int i=0; i < requests_arr_.size(); i++) {
- requests_arr_[i]->warning("unterminated slur");
- }
-}
-IMPLEMENT_STATIC_NAME(Slur_register);
-IMPLEMENT_IS_TYPE_B1(Slur_register,Request_register);
-ADD_THIS_REGISTER(Slur_register);
--- /dev/null
+/*
+ staff-gravs.cc -- implement Staff_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "staff-sym.hh"
+#include "voice-group-gravs.hh"
+#include "voice-gravs.hh"
+#include "staff-gravs.hh"
+#include "command-request.hh"
+#include "bar.hh"
+#include "debug.hh"
+#include "input-engraver.hh"
+#include "meter-grav.hh"
+#include "staffline.hh"
+
+
+Staff_engravers::Staff_engravers()
+{
+ staffline_p_ =0;
+}
+
+void
+Staff_engravers::typeset_element(Score_elem *elem_p)
+{
+ staff_elem_l_arr_.push(elem_p);
+ Engraver_group_engraver::typeset_element(elem_p);
+}
+
+void
+Staff_engravers::typeset_breakable_item( Item * nobreak_p)
+{
+ staff_elem_l_arr_.push(nobreak_p);
+ Engraver_group_engraver::typeset_breakable_item(nobreak_p);
+}
+
+void
+Staff_engravers::do_pre_move_processing()
+{
+ Engraver_group_engraver::do_pre_move_processing();
+ group_staff_elems();
+}
+
+void
+Staff_engravers::group_staff_elems()
+{
+ for (int i=0; i <staff_elem_l_arr_.size(); i++)
+ staffline_p_->add_element(staff_elem_l_arr_[i]);
+ staff_elem_l_arr_.set_size(0);
+}
+
+void
+Staff_engravers::do_removal_processing()
+{
+ /* this is a "destructor type function", first do children, then self. */
+ Engraver_group_engraver::do_removal_processing();
+ group_staff_elems();
+
+ staffline_p_->right_col_l_ = get_staff_info().command_pcol_l();
+ Request_engraver::typeset_element(staffline_p_);
+ staffline_p_ = 0;
+}
+
+void
+Staff_engravers::do_creation_processing()
+{
+ staffline_p_ = new Line_of_staff;
+ staffline_p_->left_col_l_ = get_staff_info().command_pcol_l();
+
+ // don't broadcast to self.
+ Request_engraver::announce_element(Score_elem_info(staffline_p_,0));
+ Engraver_group_engraver::do_creation_processing();
+}
+
+
+IMPLEMENT_STATIC_NAME(Staff_engravers);
+IMPLEMENT_IS_TYPE_B1(Staff_engravers,Engraver_group_engraver);
+ADD_THIS_ENGRAVER(Staff_engravers);
+
+++ /dev/null
-/*
- staff-regs.cc -- implement Staff_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staff-sym.hh"
-#include "voice-group-regs.hh"
-#include "voice-regs.hh"
-#include "staff-regs.hh"
-#include "command-request.hh"
-#include "bar.hh"
-#include "debug.hh"
-#include "input-register.hh"
-#include "meter-reg.hh"
-#include "staffline.hh"
-
-
-Staff_registers::Staff_registers()
-{
- staffline_p_ =0;
-}
-
-void
-Staff_registers::typeset_element(Score_elem *elem_p)
-{
- staff_elem_l_arr_.push(elem_p);
- Register_group_register::typeset_element(elem_p);
-}
-
-void
-Staff_registers::typeset_breakable_item( Item * nobreak_p)
-{
- staff_elem_l_arr_.push(nobreak_p);
- Register_group_register::typeset_breakable_item(nobreak_p);
-}
-
-void
-Staff_registers::do_pre_move_processing()
-{
- Register_group_register::do_pre_move_processing();
- group_staff_elems();
-}
-
-void
-Staff_registers::group_staff_elems()
-{
- for (int i=0; i <staff_elem_l_arr_.size(); i++)
- staffline_p_->add_element(staff_elem_l_arr_[i]);
- staff_elem_l_arr_.set_size(0);
-}
-
-void
-Staff_registers::do_removal_processing()
-{
- /* this is a "destructor type function", first do children, then self. */
- Register_group_register::do_removal_processing();
- group_staff_elems();
-
- staffline_p_->right_col_l_ = get_staff_info().command_pcol_l();
- Request_register::typeset_element(staffline_p_);
- staffline_p_ = 0;
-}
-
-void
-Staff_registers::do_creation_processing()
-{
- staffline_p_ = new Line_of_staff;
- staffline_p_->left_col_l_ = get_staff_info().command_pcol_l();
-
- // don't broadcast to self.
- Request_register::announce_element(Score_elem_info(staffline_p_,0));
- Register_group_register::do_creation_processing();
-}
-
-
-IMPLEMENT_STATIC_NAME(Staff_registers);
-IMPLEMENT_IS_TYPE_B1(Staff_registers,Register_group_register);
-ADD_THIS_REGISTER(Staff_registers);
-
--- /dev/null
+/*
+ staff-sym-reg.cc -- implement Staff_sym_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "staff-sym-grav.hh"
+#include "staff-sym.hh"
+#include "score.hh"
+#include "p-col.hh"
+
+const NO_LINES = 5;
+void
+Staff_sym_engraver::fill_staff_info(Staff_info&i)
+{
+ i.staff_sym_l_ = span_p_;
+}
+
+Staff_sym_engraver::Staff_sym_engraver()
+{
+ span_p_ = 0;
+}
+
+void
+Staff_sym_engraver::do_creation_processing()
+{
+ span_p_ = new Staff_symbol(NO_LINES);
+ span_p_->left_col_l_ = get_staff_info().command_pcol_l(); // ugh
+}
+
+void
+Staff_sym_engraver::do_removal_processing()
+{
+ span_p_->right_col_l_ = get_staff_info().command_pcol_l();
+ typeset_element(span_p_);
+ span_p_ =0;
+}
+
+void
+Staff_sym_engraver::do_process_requests()
+{
+ announce_element(Score_elem_info(span_p_, 0));
+}
+
+
+IMPLEMENT_STATIC_NAME(Staff_sym_engraver);
+IMPLEMENT_IS_TYPE_B1(Staff_sym_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Staff_sym_engraver);
+++ /dev/null
-/*
- staff-sym-reg.cc -- implement Staff_sym_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staff-sym-reg.hh"
-#include "staff-sym.hh"
-#include "score.hh"
-#include "p-col.hh"
-
-const NO_LINES = 5;
-void
-Staff_sym_register::fill_staff_info(Staff_info&i)
-{
- i.staff_sym_l_ = span_p_;
-}
-
-Staff_sym_register::Staff_sym_register()
-{
- span_p_ = 0;
-}
-
-void
-Staff_sym_register::do_creation_processing()
-{
- span_p_ = new Staff_symbol(NO_LINES);
- span_p_->left_col_l_ = get_staff_info().command_pcol_l(); // ugh
-}
-
-void
-Staff_sym_register::do_removal_processing()
-{
- span_p_->right_col_l_ = get_staff_info().command_pcol_l();
- typeset_element(span_p_);
- span_p_ =0;
-}
-
-void
-Staff_sym_register::do_process_requests()
-{
- announce_element(Score_elem_info(span_p_, 0));
-}
-
-
-IMPLEMENT_STATIC_NAME(Staff_sym_register);
-IMPLEMENT_IS_TYPE_B1(Staff_sym_register,Request_register);
-ADD_THIS_REGISTER(Staff_sym_register);
--- /dev/null
+/*
+ stem-beam-reg.cc -- part of GNU LilyPond
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "musical-request.hh"
+#include "stem-beam-grav.hh"
+#include "beam.hh"
+#include "stem.hh"
+#include "grouping.hh"
+#include "text-spanner.hh"
+#include "debug.hh"
+#include "grouping.hh"
+#include "note-head.hh"
+#include "time-description.hh"
+
+Stem_beam_engraver::Stem_beam_engraver()
+{
+ do_post_move_processing();
+
+ current_grouping = 0;
+ beam_p_ = 0;
+ default_dir_i_ =0;
+ start_req_l_ = 0;
+}
+
+bool
+Stem_beam_engraver::do_try_request(Request*req_l)
+{
+
+ 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_ , *mus_l->beam()))
+ return false;
+
+ beam_req_l_ = mus_l->beam();
+ return true;
+ }
+
+ 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_, *mus_l->stem()))
+ return false;
+
+ stem_req_l_ = mus_l->stem();
+ return true;
+ }
+ return false;
+}
+
+void
+Stem_beam_engraver::do_process_requests()
+{
+ if (beam_req_l_) {
+ if (beam_req_l_->spantype == Span_req::STOP) {
+ end_beam_b_ = true;
+ start_req_l_ = 0;
+ } else {
+ beam_p_ = new Beam;
+ start_req_l_ = beam_req_l_;
+ beam_p_->left_col_l_ = get_staff_info().musical_pcol_l();
+ 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_);
+ defp->align_i_ = 0;
+ defp->text_str_ = beam_req_l_->nplet;
+ defp->style_str_="italic";
+ t->spec_p_ = defp;
+ typeset_element(t);
+ }
+
+ }
+ }
+
+ if (stem_req_l_) {
+ stem_p_ = new Stem(8);
+ if (current_grouping)
+ current_grouping->add_child(
+ get_staff_info().time_C_->whole_in_measure_,
+ stem_req_l_->duration());
+
+ stem_p_->flag_i_ = stem_req_l_->duration_.type_i_;
+
+ if (beam_p_) {
+ if (stem_req_l_->duration_.type_i_<= 4)
+ stem_req_l_->warning( "stem doesn't fit in Beam");
+ else
+ beam_p_->add(stem_p_);
+ stem_p_->print_flag_b_ = false;
+ } else {
+ stem_p_->print_flag_b_ = true;
+ }
+
+ announce_element(Score_elem_info(stem_p_, stem_req_l_));
+ }
+}
+
+void
+Stem_beam_engraver::acknowledge_element(Score_elem_info info)
+{
+ if (!stem_p_)
+ return;
+
+ if (info.elem_l_->name() == Note_head::static_name() &&
+ 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);
+ }
+}
+void
+Stem_beam_engraver::do_pre_move_processing()
+{
+ if (stem_p_) {
+ if (default_dir_i_)
+ stem_p_->dir_i_ = default_dir_i_;
+
+ typeset_element(stem_p_);
+ stem_p_ = 0;
+ }
+ if (beam_p_ && end_beam_b_) {
+ Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
+ rg_C->extend(current_grouping->interval());
+ beam_p_->set_grouping(*rg_C, *current_grouping);
+ beam_p_->right_col_l_ = get_staff_info().musical_pcol_l();
+ typeset_element(beam_p_);
+ delete current_grouping;
+ current_grouping = 0;
+ beam_p_ = 0;
+ }
+ end_beam_b_ = false;
+}
+void
+Stem_beam_engraver::do_post_move_processing()
+{
+ stem_p_ = 0;
+ beam_req_l_ = 0;
+ stem_req_l_ = 0;
+ end_beam_b_ = false;
+}
+
+Stem_beam_engraver::~Stem_beam_engraver()
+{
+ if (beam_p_)
+ start_req_l_->warning("unterminated beam");
+}
+
+void
+Stem_beam_engraver::set_feature(Feature i)
+{
+ if (i.type_ == "vdir")
+ default_dir_i_ = i.value_;
+}
+
+IMPLEMENT_STATIC_NAME(Stem_beam_engraver);
+IMPLEMENT_IS_TYPE_B1(Stem_beam_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Stem_beam_engraver);
+++ /dev/null
-/*
- stem-beam-reg.cc -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musical-request.hh"
-#include "stem-beam-reg.hh"
-#include "beam.hh"
-#include "stem.hh"
-#include "grouping.hh"
-#include "text-spanner.hh"
-#include "debug.hh"
-#include "grouping.hh"
-#include "note-head.hh"
-#include "time-description.hh"
-
-Stem_beam_register::Stem_beam_register()
-{
- do_post_move_processing();
-
- current_grouping = 0;
- beam_p_ = 0;
- default_dir_i_ =0;
- start_req_l_ = 0;
-}
-
-bool
-Stem_beam_register::do_try_request(Request*req_l)
-{
-
- 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_ , *mus_l->beam()))
- return false;
-
- beam_req_l_ = mus_l->beam();
- return true;
- }
-
- 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_, *mus_l->stem()))
- return false;
-
- stem_req_l_ = mus_l->stem();
- return true;
- }
- return false;
-}
-
-void
-Stem_beam_register::do_process_requests()
-{
- if (beam_req_l_) {
- if (beam_req_l_->spantype == Span_req::STOP) {
- end_beam_b_ = true;
- start_req_l_ = 0;
- } else {
- beam_p_ = new Beam;
- start_req_l_ = beam_req_l_;
- beam_p_->left_col_l_ = get_staff_info().musical_pcol_l();
- 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_);
- defp->align_i_ = 0;
- defp->text_str_ = beam_req_l_->nplet;
- defp->style_str_="italic";
- t->spec_p_ = defp;
- typeset_element(t);
- }
-
- }
- }
-
- if (stem_req_l_) {
- stem_p_ = new Stem(8);
- if (current_grouping)
- current_grouping->add_child(
- get_staff_info().time_C_->whole_in_measure_,
- stem_req_l_->duration());
-
- stem_p_->flag_i_ = stem_req_l_->duration_.type_i_;
-
- if (beam_p_) {
- if (stem_req_l_->duration_.type_i_<= 4)
- stem_req_l_->warning( "stem doesn't fit in Beam");
- else
- beam_p_->add(stem_p_);
- stem_p_->print_flag_b_ = false;
- } else {
- stem_p_->print_flag_b_ = true;
- }
-
- announce_element(Score_elem_info(stem_p_, stem_req_l_));
- }
-}
-
-void
-Stem_beam_register::acknowledge_element(Score_elem_info info)
-{
- if (!stem_p_)
- return;
-
- if (info.elem_l_->name() == Note_head::static_name() &&
- 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);
- }
-}
-void
-Stem_beam_register::do_pre_move_processing()
-{
- if (stem_p_) {
- if (default_dir_i_)
- stem_p_->dir_i_ = default_dir_i_;
-
- typeset_element(stem_p_);
- stem_p_ = 0;
- }
- if (beam_p_ && end_beam_b_) {
- Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
- rg_C->extend(current_grouping->interval());
- beam_p_->set_grouping(*rg_C, *current_grouping);
- beam_p_->right_col_l_ = get_staff_info().musical_pcol_l();
- typeset_element(beam_p_);
- delete current_grouping;
- current_grouping = 0;
- beam_p_ = 0;
- }
- end_beam_b_ = false;
-}
-void
-Stem_beam_register::do_post_move_processing()
-{
- stem_p_ = 0;
- beam_req_l_ = 0;
- stem_req_l_ = 0;
- end_beam_b_ = false;
-}
-
-Stem_beam_register::~Stem_beam_register()
-{
- if (beam_p_)
- start_req_l_->warning("unterminated beam");
-}
-
-void
-Stem_beam_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- default_dir_i_ = i.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Stem_beam_register);
-IMPLEMENT_IS_TYPE_B1(Stem_beam_register,Request_register);
-ADD_THIS_REGISTER(Stem_beam_register);
--- /dev/null
+/*
+ swallow-reg.cc -- implement Swallow_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "swallow-grav.hh"
+
+IMPLEMENT_STATIC_NAME(Swallow_engraver);
+IMPLEMENT_IS_TYPE_B1(Swallow_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Swallow_engraver);
+
+
+bool
+Swallow_engraver::do_try_request(Request*)
+{
+ return true;
+}
+++ /dev/null
-/*
- swallow-reg.cc -- implement Swallow_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "swallow-reg.hh"
-
-IMPLEMENT_STATIC_NAME(Swallow_register);
-IMPLEMENT_IS_TYPE_B1(Swallow_register,Request_register);
-ADD_THIS_REGISTER(Swallow_register);
-
-
-bool
-Swallow_register::do_try_request(Request*)
-{
- return true;
-}
#include "symbol.hh"
#include "request.hh"
-#include "input-register.hh"
+#include "input-engraver.hh"
#include "molecule.hh"
#include "plist.tcc"
#include "pcursor.tcc"
IPL_instantiate(Atom);
-IPL_instantiate(Input_register);
+IPL_instantiate(Input_engraver);
#include "proto.hh"
#include "plist.tcc"
-#include "register.hh"
+#include "engraver.hh"
-IPL_instantiate(Request_register);
+IPL_instantiate(Request_engraver);
+/*
+ tex-slur.cc -- implement Lookup::*slur
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include <math.h>
#include "misc.hh"
#include "lookup.hh"
#include "molecule.hh"
#include "dimen.hh"
#include "debug.hh"
+#include "paper-def.hh"
+
+
static
char direction_char(int y_sign)
Real slur_extra =abs(dy) /2.0 + 2;
int l_dy = int(Real (dy)/2 + slur_extra*dir);
int r_dy = dy - l_dy;
-
+
+ Real internote_f = paper_l_->internote_f();
Real left_wid = dx/4.0;
Real right_wid = left_wid;
Molecule mol;
mol.add(l);
Atom a(m);
- a.translate_y(slur_extra * internote_f());
+ a.translate_y(slur_extra * internote_f);
mol.add_right(m);
mol.add_right(r);
- mol.translate_y( l_dy * internote_f());
+ mol.translate_y( l_dy * internote_f);
Symbol s;
s.tex = mol.TeX_string();
s.dim = mol.extent();
--- /dev/null
+/*
+ text-reg.cc -- implement Text_engraver
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+
+ Obsolete.
+*/
+#include "note-column.hh"
+#include "musical-request.hh"
+#include "text-grav.hh"
+#include "text-item.hh"
+
+Text_engraver::Text_engraver()
+{
+ text_p_ = 0;
+ dir_i_ =0;
+ do_post_move_processing();
+}
+
+bool
+Text_engraver::do_try_request(Request*req_l)
+{
+ Musical_req *m = req_l->musical();
+ if (!m || ! m->text())
+ return false;
+ if (text_req_l_ &&
+ Text_req::compare(*m->text(), *text_req_l_))
+
+ return false;
+
+ text_req_l_ = m->text();
+ return true;
+}
+void
+Text_engraver::acknowledge_element(Score_elem_info i)
+{
+ if (text_p_ && i.elem_l_->name() == Note_column::static_name()) {
+ text_p_->add_support(i.elem_l_);
+ }
+}
+void
+Text_engraver::do_process_requests()
+{
+ if (text_req_l_) {
+ text_p_ = new Text_item(text_req_l_->tdef_p_, text_req_l_->dir_i_); // ugh
+ announce_element(Score_elem_info(text_p_, text_req_l_));
+ }
+}
+void
+Text_engraver::do_pre_move_processing()
+{
+ if (text_p_) {
+ if (dir_i_ && !text_p_->dir_i_)
+ text_p_->dir_i_ = dir_i_;
+ Staff_symbol* s_l = get_staff_info().staff_sym_l_;
+ text_p_->set_staffsym(s_l);
+ typeset_element(text_p_);
+
+ text_p_ = 0;
+ }
+}
+void
+Text_engraver::set_feature(Feature i)
+{
+ if (i.type_ == "vdir")
+ dir_i_ = i.value_;
+}
+void
+Text_engraver::do_post_move_processing()
+{
+ text_req_l_ = 0;
+}
+IMPLEMENT_STATIC_NAME(Text_engraver);
+IMPLEMENT_IS_TYPE_B1(Text_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Text_engraver);
+++ /dev/null
-/*
- text-reg.cc -- implement Text_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- Obsolete.
-*/
-#include "note-column.hh"
-#include "musical-request.hh"
-#include "text-reg.hh"
-#include "text-item.hh"
-
-Text_register::Text_register()
-{
- text_p_ = 0;
- dir_i_ =0;
- do_post_move_processing();
-}
-
-bool
-Text_register::do_try_request(Request*req_l)
-{
- Musical_req *m = req_l->musical();
- if (!m || ! m->text())
- return false;
- if (text_req_l_ &&
- Text_req::compare(*m->text(), *text_req_l_))
-
- return false;
-
- text_req_l_ = m->text();
- return true;
-}
-void
-Text_register::acknowledge_element(Score_elem_info i)
-{
- if (text_p_ && i.elem_l_->name() == Note_column::static_name()) {
- text_p_->add_support(i.elem_l_);
- }
-}
-void
-Text_register::do_process_requests()
-{
- if (text_req_l_) {
- text_p_ = new Text_item(text_req_l_->tdef_p_, text_req_l_->dir_i_); // ugh
- announce_element(Score_elem_info(text_p_, text_req_l_));
- }
-}
-void
-Text_register::do_pre_move_processing()
-{
- if (text_p_) {
- if (dir_i_ && !text_p_->dir_i_)
- text_p_->dir_i_ = dir_i_;
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- text_p_->set_staffsym(s_l);
- typeset_element(text_p_);
-
- text_p_ = 0;
- }
-}
-void
-Text_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
-}
-void
-Text_register::do_post_move_processing()
-{
- text_req_l_ = 0;
-}
-IMPLEMENT_STATIC_NAME(Text_register);
-IMPLEMENT_IS_TYPE_B1(Text_register,Request_register);
-ADD_THIS_REGISTER(Text_register);
--- /dev/null
+/*
+ tie-reg.cc -- implement Tie_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "tie-grav.hh"
+#include "tie.hh"
+#include "note-head.hh"
+#include "musical-request.hh"
+#include "music-list.hh"
+
+Tie_engraver::Tie_engraver()
+{
+ end_tie_p_ = 0;
+ tie_p_ = 0;
+ req_l_ =0;
+ end_req_l_ =0;
+ end_mom_ = -1;
+ melodic_req_l_ = 0;
+ end_melodic_req_l_ =0;
+ dir_i_ = 0;
+}
+
+void
+Tie_engraver::sync_features()
+{
+ dir_i_ = get_feature("vdir");
+}
+
+
+void
+Tie_engraver::do_post_move_processing()
+{
+ if (tie_p_ && get_staff_info().when() == end_mom_) {
+ end_tie_p_ = tie_p_;
+ end_req_l_ = req_l_;
+ end_melodic_req_l_ = melodic_req_l_;
+ tie_p_ =0;
+ req_l_ =0;
+ end_mom_ = -1;
+ }
+}
+
+bool
+Tie_engraver::acceptable_request_b(Request*r)
+{
+ return r->musical() && r->musical()->tie();
+}
+
+bool
+Tie_engraver::do_try_request(Request*r)
+{
+ if(!acceptable_request_b(r))
+ return false;
+ if (req_l_ ) {
+ return false;
+ }
+ req_l_ = r->musical()->tie();
+ end_mom_ = r->parent_music_l_->time_int().length()
+ + get_staff_info().when();
+ return true;
+}
+
+void
+Tie_engraver::do_process_requests()
+{
+ if (req_l_ && ! tie_p_) {
+ tie_p_ = new Tie;
+ }
+}
+
+void
+Tie_engraver::acknowledge_element(Score_elem_info i)
+{
+ if (i.elem_l_->name() == Note_head::static_name()) {
+ if (tie_p_) {
+ tie_p_->set_head(-1, (Note_head*)i.elem_l_->item());
+ melodic_req_l_ = i.req_l_->musical()->melodic();
+ }
+
+ if (end_tie_p_) {
+ end_tie_p_->set_head(1, (Note_head*)i.elem_l_->item());
+ if (!Melodic_req::compare ( *end_melodic_req_l_, *melodic_req_l_))
+ end_tie_p_->same_pitch_b_ = true;
+ announce_element(Score_elem_info(end_tie_p_,end_req_l_));
+ }
+ }
+}
+
+void
+Tie_engraver::do_pre_move_processing()
+{
+ if (end_tie_p_) {
+ if (dir_i_)
+ end_tie_p_->dir_i_ = dir_i_;
+
+ typeset_element(end_tie_p_);
+ end_tie_p_ =0;
+ end_req_l_ =0;
+ }
+
+}
+
+Tie_engraver::~Tie_engraver()
+{
+ if (tie_p_) {
+ req_l_->warning("unended Tie");
+ delete tie_p_;
+ }
+}
+
+void
+Tie_engraver::set_feature(Feature f)
+{
+ if (f.type_ == "vdir")
+ dir_i_ = f.value_;
+}
+
+IMPLEMENT_STATIC_NAME(Tie_engraver);
+IMPLEMENT_IS_TYPE_B1(Tie_engraver,Request_engraver);
+ADD_THIS_ENGRAVER(Tie_engraver);
+++ /dev/null
-/*
- tie-reg.cc -- implement Tie_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "tie-reg.hh"
-#include "tie.hh"
-#include "note-head.hh"
-#include "musical-request.hh"
-#include "music-list.hh"
-
-Tie_register::Tie_register()
-{
- end_tie_p_ = 0;
- tie_p_ = 0;
- req_l_ =0;
- end_req_l_ =0;
- end_mom_ = -1;
- melodic_req_l_ = 0;
- end_melodic_req_l_ =0;
- dir_i_ = 0;
-}
-
-void
-Tie_register::sync_features()
-{
- dir_i_ = get_feature("vdir");
-}
-
-
-void
-Tie_register::do_post_move_processing()
-{
- if (tie_p_ && get_staff_info().when() == end_mom_) {
- end_tie_p_ = tie_p_;
- end_req_l_ = req_l_;
- end_melodic_req_l_ = melodic_req_l_;
- tie_p_ =0;
- req_l_ =0;
- end_mom_ = -1;
- }
-}
-
-bool
-Tie_register::acceptable_request_b(Request*r)
-{
- return r->musical() && r->musical()->tie();
-}
-
-bool
-Tie_register::do_try_request(Request*r)
-{
- if(!acceptable_request_b(r))
- return false;
- if (req_l_ ) {
- return false;
- }
- req_l_ = r->musical()->tie();
- end_mom_ = r->parent_music_l_->time_int().length()
- + get_staff_info().when();
- return true;
-}
-
-void
-Tie_register::do_process_requests()
-{
- if (req_l_ && ! tie_p_) {
- tie_p_ = new Tie;
- }
-}
-
-void
-Tie_register::acknowledge_element(Score_elem_info i)
-{
- if (i.elem_l_->name() == Note_head::static_name()) {
- if (tie_p_) {
- tie_p_->set_head(-1, (Note_head*)i.elem_l_->item());
- melodic_req_l_ = i.req_l_->musical()->melodic();
- }
-
- if (end_tie_p_) {
- end_tie_p_->set_head(1, (Note_head*)i.elem_l_->item());
- if (!Melodic_req::compare ( *end_melodic_req_l_, *melodic_req_l_))
- end_tie_p_->same_pitch_b_ = true;
- announce_element(Score_elem_info(end_tie_p_,end_req_l_));
- }
- }
-}
-
-void
-Tie_register::do_pre_move_processing()
-{
- if (end_tie_p_) {
- if (dir_i_)
- end_tie_p_->dir_i_ = dir_i_;
-
- typeset_element(end_tie_p_);
- end_tie_p_ =0;
- end_req_l_ =0;
- }
-
-}
-
-Tie_register::~Tie_register()
-{
- if (tie_p_) {
- req_l_->warning("unended Tie");
- delete tie_p_;
- }
-}
-
-void
-Tie_register::set_feature(Feature f)
-{
- if (f.type_ == "vdir")
- dir_i_ = f.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Tie_register);
-IMPLEMENT_IS_TYPE_B1(Tie_register,Request_register);
-ADD_THIS_REGISTER(Tie_register);
--- /dev/null
+/*
+ Translator.cc -- implement Translator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "translator.hh"
+Translator::Translator()
+{
+ iterator_count_ = 0;
+}
+
+IMPLEMENT_STATIC_NAME(Translator);
+IMPLEMENT_IS_TYPE_B(Translator);
--- /dev/null
+/*
+ voice-gravs.cc -- implement Voice_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "command-request.hh"
+#include "musical-request.hh"
+#include "voice-gravs.hh"
+#include "engraver.hh"
+#include "debug.hh"
+
+
+ADD_THIS_ENGRAVER(Voice_engravers);
+IMPLEMENT_IS_TYPE_B1(Voice_engravers, Engraver_group_engraver);
+IMPLEMENT_STATIC_NAME(Voice_engravers);
+
+bool
+Voice_engravers::interpret_request_b(Request*r)
+{
+ return try_request(r);
+}
+
--- /dev/null
+/*
+ voicegroup.cc -- implement Voice_group_engravers
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "music-list.hh"
+#include "proto.hh"
+#include "plist.hh"
+#include "musical-request.hh"
+#include "voice-gravs.hh"
+#include "voice-group-gravs.hh"
+#include "engraver.hh"
+#include "command-request.hh"
+#include "debug.hh"
+#include "input-engraver.hh"
+#include "time-description.hh"
+
+
+Voice_group_engravers::Voice_group_engravers()
+{
+ dir_i_ =0;
+}
+
+bool
+Voice_group_engravers::do_try_request(Request*r_l)
+{
+ Command_req* c_l = r_l->command();
+ if (c_l&& c_l->groupfeature()) {
+ Feature f;
+ f.type_ = c_l->groupfeature()->type_str_;
+ f.value_ = c_l->groupfeature()->value_str_;
+ set_feature(f);
+ return true;
+ }
+ return Engraver_group_engraver::do_try_request(r_l);
+}
+
+
+IMPLEMENT_STATIC_NAME(Voice_group_engravers);
+IMPLEMENT_IS_TYPE_B1(Voice_group_engravers,Engraver_group_engraver);
+
+void
+Voice_group_engravers::do_print() const
+{
+#ifndef NPRINT
+ Engraver_group_engraver::do_print();
+#endif
+}
+
+
+
+Scalar
+Voice_group_engravers::get_feature(String f)
+{
+ if (f == "vdir")
+ return dir_i_;
+ Engraver_group_engraver::get_feature(f);
+}
+
+ADD_THIS_ENGRAVER(Voice_group_engravers);
+++ /dev/null
-/*
- voicegroup.cc -- implement Voice_group_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "music-list.hh"
-#include "proto.hh"
-#include "plist.hh"
-#include "musical-request.hh"
-#include "voice-regs.hh"
-#include "voice-group-regs.hh"
-#include "register.hh"
-#include "command-request.hh"
-#include "debug.hh"
-#include "input-register.hh"
-#include "time-description.hh"
-
-
-Voice_group_registers::Voice_group_registers()
-{
- dir_i_ =0;
-}
-
-bool
-Voice_group_registers::do_try_request(Request*r_l)
-{
- Command_req* c_l = r_l->command();
- if (c_l&& c_l->groupfeature()) {
- Feature f;
- f.type_ = c_l->groupfeature()->type_str_;
- f.value_ = c_l->groupfeature()->value_str_;
- set_feature(f);
- return true;
- }
- return Register_group_register::do_try_request(r_l);
-}
-
-
-IMPLEMENT_STATIC_NAME(Voice_group_registers);
-IMPLEMENT_IS_TYPE_B1(Voice_group_registers,Register_group_register);
-
-void
-Voice_group_registers::do_print() const
-{
-#ifndef NPRINT
- Register_group_register::do_print();
-#endif
-}
-
-
-
-Scalar
-Voice_group_registers::get_feature(String f)
-{
- if (f == "vdir")
- return dir_i_;
- Register_group_register::get_feature(f);
-}
-
-ADD_THIS_REGISTER(Voice_group_registers);
+++ /dev/null
-/*
- voice-regs.cc -- implement Voice_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "command-request.hh"
-#include "musical-request.hh"
-#include "voice-regs.hh"
-#include "register.hh"
-#include "debug.hh"
-
-
-ADD_THIS_REGISTER(Voice_registers);
-IMPLEMENT_IS_TYPE_B1(Voice_registers, Register_group_register);
-IMPLEMENT_STATIC_NAME(Voice_registers);
-
-bool
-Voice_registers::interpret_request_b(Request*r)
-{
- return try_request(r);
-}
-
prefix = @prefix@
TEXPREFIX = @TEXPREFIX@
TEXDIR = @TEXDIR@
+TAR= @TAR@
MFDIR = @MFDIR@
mandir = @mandir@
exec_prefix = @exec_prefix@
$(MAKE) localdist
chmod -Rf a+rX $(distdir)
- (cd ./$(depth); tar cfz $(DIST_NAME).tar.gz $(DIST_NAME))
+ (cd ./$(depth); $(TAR) cf $(DIST_NAME).tar $(DIST_NAME);)
+ (cd $(depth); gzip -9 $(DIST_NAME).tar)
# should be trapped
rm -rf $(distdir)/
moduledist:
-mkdir $(module-distdir)
$(MAKE) localmoduledist
- (cd ./$(depth); tar cfz $(MODULE_DIST_NAME).tar.gz $(MODULE_DIST_NAME))
+ (cd ./$(depth); $(TAR) cfz $(MODULE_DIST_NAME).tar.gz $(MODULE_DIST_NAME))
rm -rf $(module-distdir)/
localmoduledist:
# .hh should be first. Don't know why
# take some trouble to vauto ignore sources and obsolete stuff.
-progdocs=$(shell find ./ -name '*.hh' |egrep -v 'obsolete/|out/') $(shell find -name '*.cc'|egrep -v 'out/|obsolete/')
+progdocs=$(shell $(FIND) ./ -name '*.hh' |egrep -v 'obsolete/|out/') $(shell $(FIND) ./ -name '*.cc'|egrep -v 'out/|obsolete/')
pod2html=pod2html
Begin3
Title: LilyPond
-Version: 0.0.71pre
-Entered-date: 07/01/97
+Version: 0.0.72pre
+Entered-date: 07/03/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.71pre.tar.gz
+ 300k lilypond-0.0.72pre.tar.gz
Alternate-site:
Original-site:
Platform: unix/win32, GNU C++
Name: lilypond
-Version: 0.0.71pre
+Version: 0.0.72pre
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.71pre.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.72pre.tar.gz
Summary: A preprocessor to make TeX typeset music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
-This is from the package MusixTeX, version T.59 or T.64 (Taupin
-version.)
+This is from the package MusixTeX, version T.73 (Taupin version.)
The documentation states:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% this is musixgen.mf (c)
%
+% Version T.70 [March 97]
+% - double shap corrected by Julian Gilbey (strange paths)
+%
% Version T.59 [September 96]
% - added one more gregorian symbol (126)
%
penpos2(max(1,thin),45);
%%% a 'nicer' look for 'high'res-printers gives
if pixels_per_inch > 500:
- fill z1..{dir-125}z3'{dir35}..{se}z2l--z2r--z1--cycle;
- fill z1..{dir35}z4'{dir-125}..{se}z2r--z2l--z1--cycle; % ***
+ fill z1..{dir-125}z3'{dir35}..{se}z2l--z2r--(z1+(eps,0))--cycle;
+ fill z1..{dir35}z4'{dir-125}..{se}z2r--z2l--(z1-(eps,0))--cycle; % ***
else :
%%% but this causes 'strange path' on lower resolutions
- fill z1..{dir-110}z3'{dir30}..{se}z2l--z2r--z1--cycle;
- fill z1..{dir20}z4'{dir-120}..{se}z2r--z2l--z1--cycle; % ***
+ fill z1..{dir-110}z3'{dir30}..{se}z2l--z2r--(z1+(eps,0))--cycle;
+ fill z1..{dir20}z4'{dir-120}..{se}z2r--z2l--(z1-(eps,0))--cycle; % ***
fi
%{{{
currentpen:= pencircle; draw z1--(x2+1,y2-1);% draw (x3'+1,y3'+1)--z5';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% this is xgreggen.mf (c)
%
-% Version T.63 [October 96]
+% Version T.67 [January 97]
%
nhw#:=1.2*nhh#;
diamwidth:=.96 gregwidth; greg_min_diam:=gregwidth-diamwidth;
diamheight:=1.33 gregwidth;
-deminutae:=0.6; gregwidth_dem:=gregwidth*deminutae;
+deminutae:=0.66; gregwidth_dem:=gregwidth*deminutae;
aucta_fact:=0.33gregwidth;
shave:=.3gregwidth;