]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 0.0.72pre release/0.0.72pre
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 3 Jul 1997 14:00:54 +0000 (16:00 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 3 Jul 1997 14:00:54 +0000 (16:00 +0200)
199 files changed:
.dstreamrc
.version
ANNOUNCE
AUTHORS.text
BUGS [deleted file]
Documentation/INSTALL.pod
Documentation/lilygut.pod
Documentation/other-packages.pod
INSTALL.text
NEWS
TODO
bin/convert-mudela
bin/release
configure
configure.in
flower/.version
flower/NEWS
flower/flower-debug.cc
init/engraver.ini [new file with mode: 0644]
init/paper.ini [new file with mode: 0644]
init/paper16.ini [new file with mode: 0644]
init/register.ini [deleted file]
init/symbol.ini
init/table16.ini [new file with mode: 0644]
init/table_sixteen.ini [deleted file]
input/cadenza.ly
input/collisions.ly
input/header.ly
input/kortjakje.ly
input/multi.ly
input/scales.ly
input/scsii-menuetto.ly
input/slurs.ly
input/standchen.ly
input/toccata-fuga-E.ly
input/twinkle.ly
input/wohltemperirt.ly
lily/.version
lily/Stable.make
lily/acceptor.cc [deleted file]
lily/bar-grav.cc [new file with mode: 0644]
lily/bar-reg.cc [deleted file]
lily/beam.cc
lily/break.cc
lily/clef-grav.cc [new file with mode: 0644]
lily/clef-item.cc
lily/clef-reg.cc [deleted file]
lily/collision-grav.cc [new file with mode: 0644]
lily/collision-reg.cc [deleted file]
lily/crescendo.cc
lily/dynamic-grav.cc [new file with mode: 0644]
lily/dynamic-reg.cc [deleted file]
lily/engraver-group.cc [new file with mode: 0644]
lily/engraver.cc [new file with mode: 0644]
lily/global-acceptor.cc [deleted file]
lily/global-gravs.cc [new file with mode: 0644]
lily/global-regs.cc [deleted file]
lily/global-translator.cc [new file with mode: 0644]
lily/head-grav.cc [new file with mode: 0644]
lily/head-reg.cc [deleted file]
lily/identifier.cc
lily/include/acceptor.hh
lily/include/bar-align-grav.hh [new file with mode: 0644]
lily/include/bar-align-reg.hh [deleted file]
lily/include/bar-grav.hh [new file with mode: 0644]
lily/include/bar-reg.hh [deleted file]
lily/include/clef-grav.hh [new file with mode: 0644]
lily/include/clef-item.hh
lily/include/clef-reg.hh [deleted file]
lily/include/collision-grav.hh [new file with mode: 0644]
lily/include/collision-reg.hh [deleted file]
lily/include/dynamic-grav.hh [new file with mode: 0644]
lily/include/dynamic-reg.hh [deleted file]
lily/include/engraver-group.hh [new file with mode: 0644]
lily/include/engraver.hh [new file with mode: 0644]
lily/include/global-acceptor.hh [deleted file]
lily/include/global-translator.hh [new file with mode: 0644]
lily/include/head-grav.hh [new file with mode: 0644]
lily/include/head-reg.hh [deleted file]
lily/include/identifier.hh
lily/include/input-engraver.hh [new file with mode: 0644]
lily/include/input-register.hh [deleted file]
lily/include/interpretor.hh [deleted file]
lily/include/key-grav.hh [new file with mode: 0644]
lily/include/key-item.hh
lily/include/key-reg.hh [deleted file]
lily/include/lily-proto.hh
lily/include/local-key-grav.hh [new file with mode: 0644]
lily/include/local-key-reg.hh [deleted file]
lily/include/lookup.hh
lily/include/lyric-engraver.hh [new file with mode: 0644]
lily/include/lyric-register.hh [deleted file]
lily/include/meter-grav.hh [new file with mode: 0644]
lily/include/meter-reg.hh [deleted file]
lily/include/midi-walker.hh
lily/include/music-iterator.hh
lily/include/note-column-grav.hh [new file with mode: 0644]
lily/include/note-column-reg.hh [deleted file]
lily/include/paper-def.hh
lily/include/register-group.hh [deleted file]
lily/include/register.hh [deleted file]
lily/include/rest-collision-grav.hh [new file with mode: 0644]
lily/include/rest-collision-reg.hh [deleted file]
lily/include/score-align-grav.hh [new file with mode: 0644]
lily/include/score-align-reg.hh [deleted file]
lily/include/score-column.hh
lily/include/score-elem-info.hh
lily/include/score-grav.hh [new file with mode: 0644]
lily/include/score-halign-grav.hh [new file with mode: 0644]
lily/include/score-halign-reg.hh [deleted file]
lily/include/score-reg.hh [deleted file]
lily/include/score.hh
lily/include/script-grav.hh [new file with mode: 0644]
lily/include/script-reg.hh [deleted file]
lily/include/slur-grav.hh [new file with mode: 0644]
lily/include/slur-reg.hh [deleted file]
lily/include/staff-gravs.hh [new file with mode: 0644]
lily/include/staff-info.hh
lily/include/staff-regs.hh [deleted file]
lily/include/staff-sym-grav.hh [new file with mode: 0644]
lily/include/staff-sym-reg.hh [deleted file]
lily/include/stem-beam-grav.hh [new file with mode: 0644]
lily/include/stem-beam-reg.hh [deleted file]
lily/include/swallow-grav.hh [new file with mode: 0644]
lily/include/swallow-reg.hh [deleted file]
lily/include/text-grav.hh [new file with mode: 0644]
lily/include/text-reg.hh [deleted file]
lily/include/tie-grav.hh [new file with mode: 0644]
lily/include/tie-reg.hh [deleted file]
lily/include/translator.hh [new file with mode: 0644]
lily/include/voice-gravs.hh [new file with mode: 0644]
lily/include/voice-group-gravs.hh [new file with mode: 0644]
lily/include/voice-group-regs.hh [deleted file]
lily/include/voice-regs.hh [deleted file]
lily/input-engraver.cc [new file with mode: 0644]
lily/input-register.cc [deleted file]
lily/key-grav.cc [new file with mode: 0644]
lily/key-item.cc
lily/key-reg.cc [deleted file]
lily/lexer.l
lily/local-key-grav.cc [new file with mode: 0644]
lily/local-key-reg.cc [deleted file]
lily/lookup.cc
lily/lyric-engraver.cc [new file with mode: 0644]
lily/lyric-register.cc [deleted file]
lily/meter-grav.cc [new file with mode: 0644]
lily/meter-reg.cc [deleted file]
lily/midi-walker.cc [deleted file]
lily/music-iterator.cc
lily/my-lily-lexer.cc
lily/note-column-grav.cc [new file with mode: 0644]
lily/note-column-reg.cc [deleted file]
lily/paper-def.cc
lily/parser.y
lily/register-group.cc [deleted file]
lily/register.cc [deleted file]
lily/rest-collision-grav.cc [new file with mode: 0644]
lily/rest-collision-reg.cc [deleted file]
lily/score-align-grav.cc [new file with mode: 0644]
lily/score-align-gravs.cc [new file with mode: 0644]
lily/score-align-reg.cc [deleted file]
lily/score-align-regs.cc [deleted file]
lily/score-grav.cc [new file with mode: 0644]
lily/score-halign-grav.cc [new file with mode: 0644]
lily/score-halign-reg.cc [deleted file]
lily/score-reg.cc [deleted file]
lily/score.cc
lily/script-grav.cc [new file with mode: 0644]
lily/script-reg.cc [deleted file]
lily/slur-grav.cc [new file with mode: 0644]
lily/slur-reg.cc [deleted file]
lily/staff-gravs.cc [new file with mode: 0644]
lily/staff-regs.cc [deleted file]
lily/staff-sym-grav.cc [new file with mode: 0644]
lily/staff-sym-reg.cc [deleted file]
lily/stem-beam-grav.cc [new file with mode: 0644]
lily/stem-beam-reg.cc [deleted file]
lily/swallow-grav.cc [new file with mode: 0644]
lily/swallow-reg.cc [deleted file]
lily/template3.cc
lily/template6.cc
lily/tex-slur.cc
lily/text-grav.cc [new file with mode: 0644]
lily/text-reg.cc [deleted file]
lily/tie-grav.cc [new file with mode: 0644]
lily/tie-reg.cc [deleted file]
lily/translator.cc [new file with mode: 0644]
lily/voice-gravs.cc [new file with mode: 0644]
lily/voice-group-gravs.cc [new file with mode: 0644]
lily/voice-group-regs.cc [deleted file]
lily/voice-regs.cc [deleted file]
make/Configure_variables.make.in
make/Targets.make
make/Variables.make
make/lilypond.lsm
make/lilypond.spec
mf/README
mf/musixgen.mf
mf/xgreggen.mf

index 8087569c36d6b747db23e9792a23fd96f2f71587..0d6086e1ea192e0ad5a06b542ab0920b5f812ccc 100644 (file)
@@ -15,7 +15,7 @@ Idealspacing          0
 # yydebug
 InitParser             1
 Parser                 1
-InitDeclarations       1
+InitDeclarations       0
 Declarations           1
 # FlexLexer debug
 InitLexer              1
index e8b651c3d12ffccf49edc45efae7312ce9cd25bf..7be2ab2ceced61505f244bf5ba6d1e94680d19e6 100644 (file)
--- a/.version
+++ b/.version
@@ -1,6 +1,6 @@
 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
 
index 3c1450f607980c12282c57fcba44e57c94c98c9d..96ae973635d97cdfd8511465d63175ed24aa7b41 100644 (file)
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -121,7 +121,7 @@ dynamics (both absolute and hairpin style) clef changes, meter
 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>
index c5e26b01bcd52c20d49b24ab4b86c0a0d52cbd05..52c105b36ca387cf476d3403023e593f5846fc7e 100644 (file)
@@ -61,6 +61,6 @@ C\bC\bC\bCO\bO\bO\bON\bN\bN\bNT\bT\bT\bTR\bR\bR\bRI\bI\bI\bIB\bB\bB\bBU\bU\bU\bUT\bT\bT\bTO\bO\bO\bOR\bR\bR\bRS\bS
 
 
 
-30/Jun/97                LilyPond 0.0.71                        1
+30/Jun/97                LilyPond 0.0.72                        1
 
 
diff --git a/BUGS b/BUGS
deleted file mode 100644 (file)
index 76d2ecd..0000000
--- a/BUGS
+++ /dev/null
@@ -1,17 +0,0 @@
-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
index 23a464b0a4452fb9873a0e4d5a3381006337abf5..2fc99a09335dc9a82eb898b70e9fabb9b0569084 100644 (file)
@@ -209,7 +209,7 @@ TeX
 =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
 
@@ -222,11 +222,13 @@ quality. If you're not discouraged; this is what I type in my xterm:
 
 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 ...
 
index 52f787c2f7504cc879ec5b8735d1fa6b2b153c8e..ef3249ec8a478f14e4ee0c0cbdbfef514b6bd688 100644 (file)
@@ -36,8 +36,9 @@ to
 
 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.
@@ -158,7 +159,7 @@ from the start of its note.
 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
@@ -176,18 +177,18 @@ should be merged. The slurs OTOH are specific for each voice, so they
 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:
 
@@ -198,15 +199,15 @@ produces:
        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
 
@@ -214,26 +215,26 @@ registers. There are a few groups:
 
 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
 
index 55ecd4c6df984a19981679cab97deaf641a22157..c52c1dbb00015f115bd9c695e39c07a89ddce368 100644 (file)
@@ -17,27 +17,23 @@ Rosegarden, http://www.math.bath.ac.uk/~masjpf/rose.html
 
 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
@@ -46,7 +42,7 @@ Sun boxen.
 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/
 
@@ -63,7 +59,7 @@ ABC2MTeX, 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. (?)
@@ -78,10 +74,14 @@ Schofer & Andrea Steinbach. With some fonts
 
 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
@@ -92,9 +92,9 @@ Score
 
 Personal Composer
 
-Mozart,
+Mozart, http://www.mozart.co.uk/
 
-A shareware windows package, 
+A shareware windows package  
 
 Capella
 
index 8d6679153378f8c31efb63b60e204651bef38079..3710c04ef9e4d2321823fccb06802e284fc2b3e5 100644 (file)
@@ -61,7 +61,7 @@ C\bC\bC\bCO\bO\bO\bON\bN\bN\bNF\bF\bF\bFI\bI\bI\bIG\bG\bG\bGU\bU\bU\bUR\bR\bR\bRI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG a\b
 
 
 
-28/May/97                LilyPond 0.0.71                        1
+3/Jul/97                 LilyPond 0.0.72                        1
 
 
 
@@ -127,7 +127,7 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
 
 
-28/May/97                LilyPond 0.0.71                        2
+3/Jul/97                 LilyPond 0.0.72                        2
 
 
 
@@ -193,7 +193,7 @@ R\bR\bR\bRU\bU\bU\bUN\bN\bN\bNN\bN\bN\bNI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG
 
 
 
-28/May/97                LilyPond 0.0.71                        3
+3/Jul/97                 LilyPond 0.0.72                        3
 
 
 
@@ -213,7 +213,7 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
        +\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
@@ -225,11 +225,13 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
        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 ...
 
@@ -253,13 +255,11 @@ R\bR\bR\bRE\bE\bE\bED\bD\bD\bDH\bH\bH\bHA\bA\bA\bAT\bT\bT\bT L\bL\bL\bLI\bI\bI\bIN\bN\bN\bNU\bU\bU\bUX\bX\bX\bX
        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
 
 
 
@@ -268,6 +268,9 @@ W\bW\bW\bWI\bI\bI\bIN\bN\bN\bND\bD\bD\bDO\bO\bO\bOZ\bZ\bZ\bZE\bE\bE\bE
 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.
 
@@ -322,9 +325,6 @@ A\bA\bA\bAU\bU\bU\bUT\bT\bT\bTH\bH\bH\bHO\bO\bO\bOR\bR\bR\bRS\bS\bS\bS
 
 
 
-
-
-
-28/May/97                LilyPond 0.0.71                        5
+3/Jul/97                 LilyPond 0.0.72                        5
 
 
diff --git a/NEWS b/NEWS
index 78e451c794a00a6a8b07f593a150bb4ba1a3589d..71128cd93f37af0a5554114d6ecddf0c4df07f79 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,22 @@
+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.
@@ -14,6 +32,8 @@ pl 71pre
 
 ******
 june 30
+
+
 pl 70pre
        - bf: text Script
        - bf: Script::dir_i_ checks.
@@ -190,7 +210,7 @@ pl 63
        - 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
diff --git a/TODO b/TODO
index 1b65c99ac00d41f86f0b7d7ab343e80fe8ab9ef3..cd3a973460654442f83055d715cd8f8244c9a2b3 100644 (file)
--- a/TODO
+++ b/TODO
@@ -71,7 +71,7 @@ PROJECTS
        - 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
@@ -88,7 +88,7 @@ PROJECTS
        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)
@@ -323,7 +323,8 @@ IDEAS
        * use an embedded language: Python
        for: 
                - Score_elems
-               - Registers
+               - Engraver
+               - Translators
                - Complex mudela?
 
        * y -dims in internote?
@@ -361,3 +362,5 @@ IDEAS
 
        * move towards incremental algorithms.
 
+
+       * design meta-language like TeX and Metafont
index 744059c67c357ce701446a64147c2473c825ac2a..000f5059cb7a7c84b42f64f562b2349a1f88ac71 100755 (executable)
@@ -87,7 +87,7 @@ sub convert_0_0_57_to_0_0_58
     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";
 }
@@ -99,6 +99,12 @@ sub convert_0_0_59_to_0_0_60
     s/(\\tempo  [0-9: ]+)/$1;/;
 }
 
+sub convert_0_0_60_to_0_0_61
+{
+    s/(\\unitspace|\\geometric|\\width)/$1=/g;
+   
+}
+
 ###############################################################
 
 sub    last_conversion
@@ -137,7 +143,8 @@ my %minor_conversions = ("0.0.50" => \&no_conv,
                         "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
                         );
  
 
index 58de89b692fcabdb3dd9bce499f4c60222ae58fb..0cd180d68b1be563d64138dac9ceb1668ce8fa46 100755 (executable)
@@ -11,12 +11,13 @@ fi
 
 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`
 
@@ -35,7 +36,11 @@ echo
 heredir=`pwd`
 releasedir=`pwd`/../releases
 patchdir=`pwd`/../patches
-make dist; 
+MAKE=${MAKE:-"make"}
+TAR=${TAR:-"tar"}
+
+
+$MAKE dist; 
 setversion
 LILYVER=$NEWVER
 
@@ -63,6 +68,6 @@ ln $patchdir//$patch .
 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
 
index 69cb91109bccebab8de2a0c10c0bbf49be66f7be..e409e1430d21dd8cb170be08efd8fbae05e93913 100755 (executable)
--- a/configure
+++ b/configure
@@ -889,12 +889,46 @@ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
 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
@@ -948,7 +982,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure: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
@@ -982,7 +1016,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure: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
@@ -1016,7 +1050,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure: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
@@ -1050,7 +1084,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure: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
@@ -1086,7 +1120,7 @@ if test "x$TEXPREFIX" = xauto ; then
     
 
     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"
     
@@ -1124,7 +1158,7 @@ if test "x$TEXDIR" = xauto ; then
     
     
     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#^\./##')`
     
@@ -1146,7 +1180,7 @@ if test "x$MFDIR" = xauto; then
     
     
     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#^\./##')`
     
@@ -1202,7 +1236,7 @@ else
 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
@@ -1215,12 +1249,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 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
   :
@@ -1240,17 +1274,17 @@ echo "$ac_t""$CXXCPP" 1>&6
 
 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*
@@ -1421,6 +1455,7 @@ s%@CXX@%$CXX%g
 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
@@ -1652,7 +1687,7 @@ fi
 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
 
index 9cffeaeae8900160ae1e5fe29eb230ee47666e58..5fbb758a3e010d1f7c7930647a5d772be2a2e08a 100644 (file)
@@ -158,6 +158,7 @@ CXXFLAGS=${CXXFLAGS:-""}    # we don't want -g -O junk
 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
index 7a6f85cea4e147504fd763e5d943f15b8e9edf08..4575a2e82a71da397bed8524e4c4c93ef63bc0a3 100644 (file)
@@ -1,6 +1,6 @@
 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"
 #
index a642a93eba4b922ca47bf9bb19e5019ab5f9ee5c..40740f0bb18d93d9b5812a7944a5d9260ebf3ef3 100644 (file)
@@ -1,4 +1,9 @@
 version 1.1:
+
+pl 21:
+pl 20.mb
+       - bf: Warning about NPRINT only if debugging requested.
+
 pl 20
        - List::junk_links()
 pl 19
index 702304e71fba71d8160198841ae4cdd7d5c0f1a9..7e0e519f574858f143a7ba48d9e633ba6db3cf6e 100644 (file)
@@ -13,7 +13,8 @@ Dstream *flower_dstream  = &default_flower_stream;
 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;
diff --git a/init/engraver.ini b/init/engraver.ini
new file mode 100644 (file)
index 0000000..086e378
--- /dev/null
@@ -0,0 +1,59 @@
+%
+% 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";
+                       }
+               }
+       }
+}
+
+
+
diff --git a/init/paper.ini b/init/paper.ini
new file mode 100644 (file)
index 0000000..1c15975
--- /dev/null
@@ -0,0 +1,23 @@
+
+      [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 }
+}
diff --git a/init/paper16.ini b/init/paper16.ini
new file mode 100644 (file)
index 0000000..7854e38
--- /dev/null
@@ -0,0 +1,16 @@
+
+\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 }
+}
diff --git a/init/register.ini b/init/register.ini
deleted file mode 100644 (file)
index 16b868b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-%
-% 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";
-                       }
-               }
-       }
-}
-
-
-
index df9c040652d7465e6567181e6e3bba66bd1577a2..bb067af6b2ce2d3d233239cca3f26f5c8a7a6d6d 100644 (file)
@@ -1,9 +1,9 @@
-\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"
 
 
diff --git a/init/table16.ini b/init/table16.ini
new file mode 100644 (file)
index 0000000..62abd29
--- /dev/null
@@ -0,0 +1,163 @@
+%
+% 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{%}{%}"
+     }
+
+}
+
diff --git a/init/table_sixteen.ini b/init/table_sixteen.ini
deleted file mode 100644 (file)
index f012438..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-%
-% 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 }
index 3bdc51e5a30dfc81f72c6b8ed2b61cece4874c04..90f7c45c8f617443bf888f3c5e5035f83e5f5ef1 100644 (file)
@@ -10,7 +10,7 @@
 EndMudelaHeader
 %}
 
-\version "0.0.60";
+\version "0.0.61";
 
 
 cad = \melodic  {
@@ -59,7 +59,8 @@ cad = \melodic  {
        \melodic{ \cad }
        \paper {
        
-               \unitspace 14.0\mm;
-               \geometric 1.4;}
+               unitspace= 14.0\mm;
+               geometric= 1.4;
+       }
 %      \midi { \tempo 4:90 }
 }
index de6805fed93ae0b8a87ed7d446c76dba04bf3623..fa1c3f71c0112ce545b90a93d032bfbee08b8ad6 100644 (file)
@@ -10,7 +10,7 @@
  Tested Features:test the Collision resolution 
 EndMudelaHeader
 %}
-\version "0.0.60";
+\version "0.0.61";
 
 
 
@@ -52,7 +52,7 @@ rests = \melodic
        } 
        { \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 
        }
        >
 
@@ -66,7 +66,7 @@ restsII = \melodic {
                                { \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 >
index e983bcb8dff6b37eb13496f5e3c1f91594e53864..f7ab263e0afa3461108d702a6fc1ed02ac9dbb08 100644 (file)
@@ -10,4 +10,4 @@
  Tested Features:
 EndMudelaHeader
 %}
-\version "0.0.60";
+\version "0.0.61";
index 91e733abe3da2ff7c71b67c6d0639c1652dc6967..16099a6ec939034dc735e588ac673005cd9565c7 100644 (file)
@@ -10,7 +10,7 @@
  Tested Features: example file with comments
 EndMudelaHeader
 %}
-\version "0.0.60";
+\version "0.0.61";
 
 
 % the % is a comment.
@@ -63,8 +63,5 @@ begeleiding = \melodic{
         \melodie
         \begeleiding 
        >
-       \paper{
-               \unitspace 2.5\cm;      % a whole note takes 2.5 \cm ideally.
-       }
 }
 
index caafc66d16d2e99b0bca5235b91dfd28cda1cc42..275db4110255ff060b657b5b4ba1545ac294c30f 100644 (file)
@@ -12,7 +12,7 @@ EndMudelaHeader
 %}
 
 
-\version "0.0.60";
+\version "0.0.61";
 
 \score{
        \melodic 
index 7f7b935fcbb62bf80cc290b88410d946d4414c57..c1f32c13bc85b7351d4b7096e7f4e84305448fa0 100644 (file)
@@ -2,7 +2,7 @@
 % scales with accents.
 %
 
-\version "0.0.60";
+\version "0.0.61";
 blah =         \melodic {
                \meter 6/8;     
                \octave  'c ;
@@ -14,21 +14,31 @@ blah =      \melodic {
                \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 
@@ -42,7 +52,7 @@ blah =        \melodic {
                 [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
@@ -66,7 +76,7 @@ c1
 \score{
        \melodic {\blah}
        \paper{
-               \unitspace 1.5 \cm;
-               \geometric 1.4;
+               unitspace= 1.5 \cm;
+               geometric= 1.4;
        }
 }
index 1af7644ba5583e256d0e9d5348d911c7c9a494f9..8f4b5daa77d816bb1026fcfa67a31d4b5a4d94ba 100644 (file)
@@ -13,7 +13,7 @@
 EndMudelaHeader
 %}
 
-\version "0.0.60";
+\version "0.0.61";
 
 %% Stuff from MPP version
 % \lefttitle{Menuetto}
@@ -103,9 +103,9 @@ IImenuetto = \melodic{
 \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{ 
index 8da7292ed5015edaf209ec89dbd3f9ce6e1368bc..29ad8cf5c094f8782c8b6b5b41d0b97db203d6d1 100644 (file)
@@ -11,7 +11,7 @@
 EndMudelaHeader
 %}
 
-\version "0.0.60";
+\version "0.0.61";
 
 \score{
        \melodic{\octave c';
index a4dd55c3fdacfc67e0e42f3f6d6c35404d60ef25..516a503309f1184d94fa747194497e00a3dd8110 100644 (file)
@@ -13,7 +13,7 @@
 EndMudelaHeader
 %}
 
-\version "0.0.60";
+\version "0.0.61";
 
 commands = \melodic{
        \skip 2.*4;
@@ -29,7 +29,7 @@ commands = \melodic{
 
 melodie = \melodic{ 
        \meter 3/4;
-       \clef\violin;
+       \clef "violin";
        \key bes;
        \octave c';
        \duration 8;
@@ -184,7 +184,7 @@ melodie = \melodic{
 
 begeleiding = \melodic{ 
        \meter 3/4;
-       \clef\bass;
+       \clef"bass";
        \key bes;
        \octave c';
        \duration 2;
@@ -466,19 +466,19 @@ tekstII = \lyric{
 
 \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{
index f34df1976109b9e636d905cec9eb002df76aa761..b912fb5f0b2d0141d69e4d5271c6c3f2cf2c75e0 100644 (file)
@@ -20,7 +20,7 @@ EndMudelaHeader
 %}
 
 
-\version "0.0.60";
+\version "0.0.61";
 
 toccata_commands = \melodic{
        \meter 4/4;
index fb986f1ae4e7e564ad15733475381693fd66507a..e3f0619b63bfb75349e7f8876c8e7c9f7caf3aeb 100644 (file)
@@ -14,7 +14,7 @@
  Tested Features: lyrics
 EndMudelaHeader
 %}
-\version "0.0.60";
+\version "0.0.61";
 
 melody = \melodic{
        \clef\violin;
@@ -124,7 +124,7 @@ textiii = \lyric{
                \melodic < \global \accompany >
        >
        \paper{
-               \unitspace 2.5\cm;
+               unitspace= 2.5\cm;
        }
        \midi{ 
                \tempo 4:120 ;
index ff2f0a6ef974221185364d98bf80ad39daabf77b..89970f8776985b55d46f809cfece00eb30f9d1b9 100644 (file)
@@ -1,7 +1,7 @@
 %{
  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 
 
@@ -9,7 +9,7 @@
 
 %}
 
-\version "0.0.60";
+\version "0.0.61";
 
                                     % should add \need{dutch.ini} for
                                     % correct parsing of note names
index 27a118a8d6f368ea760e669bb5566e3645a5a379..01a36845dced467e4b52f155a6e6d7380b77c519 100644 (file)
@@ -1,7 +1,7 @@
 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
index 3d50ce826157519eb71fc8df2fe615dd81aaca5e..71e49f46c87812e3a33c8b7de35343bf342f6e0a 100644 (file)
@@ -7,4 +7,4 @@ stablecc=atom.cc command-request.cc musical-request.cc bar.cc boxes.cc \
        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\
diff --git a/lily/acceptor.cc b/lily/acceptor.cc
deleted file mode 100644 (file)
index 0164b83..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  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);
diff --git a/lily/bar-grav.cc b/lily/bar-grav.cc
new file mode 100644 (file)
index 0000000..4282803
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+  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);
+
+
diff --git a/lily/bar-reg.cc b/lily/bar-reg.cc
deleted file mode 100644 (file)
index 46f7bf3..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-  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);
-
-
index 990299823511f19eec471a63ea9542afbf33a899..9e9f30eaff4d2c7f0400510fec553bb88ce54de1 100644 (file)
@@ -1,7 +1,7 @@
 /*
   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>
 
@@ -69,7 +69,6 @@ Stem_info::Stem_info(Stem const *s)
     // 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; 
@@ -169,14 +168,23 @@ Beam::solve_slope()
        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;
@@ -189,7 +197,12 @@ Beam::solve_slope()
     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();
index 1513046a9121b1049e541e36ac55efc3a3dc4528..0f0aabe68113f4166402e6e6b0b028b29d7fbf98 100644 (file)
@@ -74,7 +74,7 @@ Break_algorithm::solve_line(Line_of_cols curline) const
 Break_algorithm::Break_algorithm(PScore&s)
     :pscore_(s)
 {
-    linelength = s.paper_l_->linewidth;
+    linelength = s.paper_l_->linewidth_f();
 }
 
 bool
diff --git a/lily/clef-grav.cc b/lily/clef-grav.cc
new file mode 100644 (file)
index 0000000..ab51776
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+  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);
index 626cfe64becdadeac6d4c37d55cafd251fe2df17..7e399f37c32e3c7dba5287d68a99415d0130cb3c 100644 (file)
@@ -11,7 +11,7 @@
 #include "molecule.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
-#include "clef-reg.hh"
+#include "clef-grav.hh"
 
 
 void
@@ -46,7 +46,7 @@ Clef_item::read(String t)
        y_off = 6;
 }
 void
-Clef_item::read(Clef_register const &k)
+Clef_item::read(Clef_engraver const &k)
 {
     read(k.clef_type_str_);
 }
diff --git a/lily/clef-reg.cc b/lily/clef-reg.cc
deleted file mode 100644 (file)
index 3f4c311..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-  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);
diff --git a/lily/collision-grav.cc b/lily/collision-grav.cc
new file mode 100644 (file)
index 0000000..428924d
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  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);
diff --git a/lily/collision-reg.cc b/lily/collision-reg.cc
deleted file mode 100644 (file)
index 8a895d7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  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);
index d3731bed19ced89ff812e3294f63b65b53fd14fa..995e45b476ee52245e826f38ab0f6a5261dd40a0 100644 (file)
@@ -18,6 +18,7 @@ Crescendo::Crescendo()
     grow_dir_i_ =0;
     dir_i_ = -1 ;
     left_dyn_b_ = right_dyn_b_ =false;
+    inside_staff_b_ = false;
 }
 
 Molecule*
diff --git a/lily/dynamic-grav.cc b/lily/dynamic-grav.cc
new file mode 100644 (file)
index 0000000..716abae
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+  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_);
+    }
+}
diff --git a/lily/dynamic-reg.cc b/lily/dynamic-reg.cc
deleted file mode 100644 (file)
index 3e953a6..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-  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_);
-    }
-}
diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc
new file mode 100644 (file)
index 0000000..bcfa32a
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+  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();
+}
diff --git a/lily/engraver.cc b/lily/engraver.cc
new file mode 100644 (file)
index 0000000..78fa6ca
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+  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
+{
+}
+
+
diff --git a/lily/global-acceptor.cc b/lily/global-acceptor.cc
deleted file mode 100644 (file)
index 057881a..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-  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)
-{
-}
diff --git a/lily/global-gravs.cc b/lily/global-gravs.cc
new file mode 100644 (file)
index 0000000..6dcc07b
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+  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;
+}
diff --git a/lily/global-regs.cc b/lily/global-regs.cc
deleted file mode 100644 (file)
index ca027af..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  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;
-}
diff --git a/lily/global-translator.cc b/lily/global-translator.cc
new file mode 100644 (file)
index 0000000..62cbb28
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+  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)
+{
+}
diff --git a/lily/head-grav.cc b/lily/head-grav.cc
new file mode 100644 (file)
index 0000000..bc70563
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+  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);
diff --git a/lily/head-reg.cc b/lily/head-reg.cc
deleted file mode 100644 (file)
index b55f36b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-  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);
index 7e1e43e45f7da767943116f6e62ca6f773d40180..60831cef1344bf243c146d91dc6987d7bc8a9e7c 100644 (file)
@@ -7,17 +7,17 @@
 */
 
 #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);
@@ -65,8 +65,8 @@ DEFAULT_PRINT(Symtables_id, Symtables, symtables);
 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
 {
@@ -110,7 +110,8 @@ implement_id_class(Symtables_id, Symtables, symtables);
 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&)
 {
@@ -125,4 +126,5 @@ default_accessor(Symtables_id, Symtables, symtables);
 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);
index f2989510813edd9dbc7a1e219ed051d15870f9a4..aabbcf53373dd04b69db773f05459226a3d23209 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  acceptor.hh -- declare Acceptor
+  acceptor.hh -- declare Translator
 
   source file of the GNU LilyPond music typesetter
 
@@ -15,7 +15,7 @@
 #include "interpreter.hh"
 #include "virtual-methods.hh"
 
-class Acceptor {
+class Translator {
 public:
     String id_str_;
     
@@ -23,17 +23,17 @@ public:
     
     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;}
 };
diff --git a/lily/include/bar-align-grav.hh b/lily/include/bar-align-grav.hh
new file mode 100644 (file)
index 0000000..7da9dfa
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+  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
diff --git a/lily/include/bar-align-reg.hh b/lily/include/bar-align-reg.hh
deleted file mode 100644 (file)
index 7219cf4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-  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
diff --git a/lily/include/bar-grav.hh b/lily/include/bar-grav.hh
new file mode 100644 (file)
index 0000000..173d15e
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  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
diff --git a/lily/include/bar-reg.hh b/lily/include/bar-reg.hh
deleted file mode 100644 (file)
index 8a6d160..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  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
diff --git a/lily/include/clef-grav.hh b/lily/include/clef-grav.hh
new file mode 100644 (file)
index 0000000..5346c0b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  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
+
index a3c9053b3434a51b0e35dbeac885853df697325a..162cf813ebaa0b8ba0ae741992d8b0a6eff3f9b4 100644 (file)
@@ -30,7 +30,7 @@ public:
     NAME_MEMBERS();
     SCORE_ELEM_CLONE(Clef_item);
     Clef_item();
-    void read(Clef_register const&);
+    void read(Clef_engraver const&);
     void read(String);
 };
 
diff --git a/lily/include/clef-reg.hh b/lily/include/clef-reg.hh
deleted file mode 100644 (file)
index 91dd8d5..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  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
-
diff --git a/lily/include/collision-grav.hh b/lily/include/collision-grav.hh
new file mode 100644 (file)
index 0000000..0b46db5
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+  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
diff --git a/lily/include/collision-reg.hh b/lily/include/collision-reg.hh
deleted file mode 100644 (file)
index d0affb0..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-  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
diff --git a/lily/include/dynamic-grav.hh b/lily/include/dynamic-grav.hh
new file mode 100644 (file)
index 0000000..791b2f1
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+  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
diff --git a/lily/include/dynamic-reg.hh b/lily/include/dynamic-reg.hh
deleted file mode 100644 (file)
index 4e13d25..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-  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
diff --git a/lily/include/engraver-group.hh b/lily/include/engraver-group.hh
new file mode 100644 (file)
index 0000000..fc76fd7
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+  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
+
+
diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh
new file mode 100644 (file)
index 0000000..320bdd3
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+  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
+
diff --git a/lily/include/global-acceptor.hh b/lily/include/global-acceptor.hh
deleted file mode 100644 (file)
index 6d18720..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  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
diff --git a/lily/include/global-translator.hh b/lily/include/global-translator.hh
new file mode 100644 (file)
index 0000000..ce34cfb
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+  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
diff --git a/lily/include/head-grav.hh b/lily/include/head-grav.hh
new file mode 100644 (file)
index 0000000..07f7210
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  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
diff --git a/lily/include/head-reg.hh b/lily/include/head-reg.hh
deleted file mode 100644 (file)
index e4e3c1e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  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
index bd45068ab4ddc6c84abb957b78f1e9c85e05964e..1fca04eee3f4f780c390d2602352026aa47f9b46 100644 (file)
@@ -31,9 +31,10 @@ struct Identifier : public Input {
     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)
@@ -65,6 +66,6 @@ declare_id_class(Music_id, Music, music);
 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_
diff --git a/lily/include/input-engraver.hh b/lily/include/input-engraver.hh
new file mode 100644 (file)
index 0000000..5894a1d
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  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
diff --git a/lily/include/input-register.hh b/lily/include/input-register.hh
deleted file mode 100644 (file)
index f1988b0..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  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
diff --git a/lily/include/interpretor.hh b/lily/include/interpretor.hh
deleted file mode 100644 (file)
index b13582f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  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
diff --git a/lily/include/key-grav.hh b/lily/include/key-grav.hh
new file mode 100644 (file)
index 0000000..8f9b9ec
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  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
index 0d8505d4257dd43152b3b7c82f79ecc26f6cef7c..759e6d11238c7f40b3e5ef022fce84441cb67165 100644 (file)
@@ -25,7 +25,7 @@ struct Key_item : Item {
 
     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;
diff --git a/lily/include/key-reg.hh b/lily/include/key-reg.hh
deleted file mode 100644 (file)
index ec9b5a2..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  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
index 5a2a9345789209990db0e3e6f28b63786b5a1d3d..321ea3382c26584f397aaaabd1f0a80ef366bb6a 100644 (file)
 
 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;
@@ -30,12 +30,12 @@ struct Change_reg;
 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;
@@ -50,7 +50,7 @@ struct Element_group;
 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;
@@ -61,13 +61,13 @@ struct Idealspacing;
 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;
@@ -76,7 +76,7 @@ struct Line_of_staff;
 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;
@@ -84,7 +84,7 @@ struct Measure_grouping_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;
@@ -104,10 +104,10 @@ struct Music;
 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;
@@ -119,13 +119,13 @@ struct Plet;
 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;
@@ -138,12 +138,12 @@ struct Score_elem_info;
 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;
@@ -152,7 +152,7 @@ struct Spanner;
 struct Staff_side;
 struct Staff_symbol;
 struct Stem;
-struct Stem_beam_register;
+struct Stem_beam_engraver;
 struct Stem_req;
 struct String;
 struct Subtle_req;
@@ -165,10 +165,10 @@ struct Tex_stream;
 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;
@@ -178,10 +178,10 @@ struct Vertical_group;
 
 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
diff --git a/lily/include/local-key-grav.hh b/lily/include/local-key-grav.hh
new file mode 100644 (file)
index 0000000..6ed5d78
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+  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
diff --git a/lily/include/local-key-reg.hh b/lily/include/local-key-reg.hh
deleted file mode 100644 (file)
index 41088f7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  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
index 4b1479090a47a8a503d52bacf1524c7bd5a73ba1..aff20862d72c14d90637a24f0bb69497ef4c2d73 100644 (file)
 
 /// 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;
diff --git a/lily/include/lyric-engraver.hh b/lily/include/lyric-engraver.hh
new file mode 100644 (file)
index 0000000..8771d4b
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  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
diff --git a/lily/include/lyric-register.hh b/lily/include/lyric-register.hh
deleted file mode 100644 (file)
index e8468f0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  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
diff --git a/lily/include/meter-grav.hh b/lily/include/meter-grav.hh
new file mode 100644 (file)
index 0000000..38fe040
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+  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
diff --git a/lily/include/meter-reg.hh b/lily/include/meter-reg.hh
deleted file mode 100644 (file)
index 26f9eaf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-  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
index dea2478d24006fe5d38b9570c995d35bdd837dda..d99b6efe67c9ad3b365d855a2be506468db296c9 100644 (file)
 
 #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
index d2326a6e53639f9e0e05b62a37e462ce93150b82..c4fc80655c1a61da0a801fae1db3c264686e6386 100644 (file)
@@ -22,11 +22,11 @@ protected:
 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;
@@ -34,7 +34,7 @@ public:
     virtual ~Music_iterator();
     virtual void construct_children();
     void print()const;
-    virtual Acceptor * get_req_acceptor_l();
+    virtual Translator * get_req_translator_l();
 };
 
 // duh.
diff --git a/lily/include/note-column-grav.hh b/lily/include/note-column-grav.hh
new file mode 100644 (file)
index 0000000..141fe4b
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  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
diff --git a/lily/include/note-column-reg.hh b/lily/include/note-column-reg.hh
deleted file mode 100644 (file)
index a15cd91..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  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
index 21423cf5bc5171a0dc58588f150d0dfde3bc5f8a..98c9e11acdd4f4b42f8ad2a2252740dd56e201de 100644 (file)
@@ -10,6 +10,7 @@
 #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&);
@@ -60,17 +60,19 @@ public:
 
     /// 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);
 };
diff --git a/lily/include/register-group.hh b/lily/include/register-group.hh
deleted file mode 100644 (file)
index 466b473..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-  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
-
-
diff --git a/lily/include/register.hh b/lily/include/register.hh
deleted file mode 100644 (file)
index 18a6e41..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-  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
-
diff --git a/lily/include/rest-collision-grav.hh b/lily/include/rest-collision-grav.hh
new file mode 100644 (file)
index 0000000..2d67a1b
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  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
diff --git a/lily/include/rest-collision-reg.hh b/lily/include/rest-collision-reg.hh
deleted file mode 100644 (file)
index ecde3d6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  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
diff --git a/lily/include/score-align-grav.hh b/lily/include/score-align-grav.hh
new file mode 100644 (file)
index 0000000..72777e2
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+  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
diff --git a/lily/include/score-align-reg.hh b/lily/include/score-align-reg.hh
deleted file mode 100644 (file)
index 3f7e15c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  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
index fb7f10872934d1619ba91e25ae640bde8b1623cb..b8daacd1761f9ae5950a7f2e591ddc3a2fe2a8de 100644 (file)
@@ -27,7 +27,7 @@
 
 class Score_column {
     friend class Score;
-    friend class Score_register;
+    friend class Score_engraver;
 
     bool musical_b_;
     Moment when_;
index b4d4fb748ae604663f3d593f1047b54e69496e10..871634214f7ff19115496b3549daa7ffc2c160cb 100644 (file)
@@ -19,7 +19,7 @@ struct Score_elem_info {
     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*);
diff --git a/lily/include/score-grav.hh b/lily/include/score-grav.hh
new file mode 100644 (file)
index 0000000..92b659a
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+  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
diff --git a/lily/include/score-halign-grav.hh b/lily/include/score-halign-grav.hh
new file mode 100644 (file)
index 0000000..fef5091
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+  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
diff --git a/lily/include/score-halign-reg.hh b/lily/include/score-halign-reg.hh
deleted file mode 100644 (file)
index 8a0559f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-  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
diff --git a/lily/include/score-reg.hh b/lily/include/score-reg.hh
deleted file mode 100644 (file)
index 3c4c668..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-  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
index 56e29b851374a1fcc86b6b4c40ad58179cb1b0ba..b11118f17fc43bd2271fa68c79a0e37296f67a8e 100644 (file)
@@ -58,13 +58,10 @@ public:
     /// 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();
diff --git a/lily/include/script-grav.hh b/lily/include/script-grav.hh
new file mode 100644 (file)
index 0000000..fc8f029
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  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
diff --git a/lily/include/script-reg.hh b/lily/include/script-reg.hh
deleted file mode 100644 (file)
index 41dccfb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  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
diff --git a/lily/include/slur-grav.hh b/lily/include/slur-grav.hh
new file mode 100644 (file)
index 0000000..34ac3fa
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  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
diff --git a/lily/include/slur-reg.hh b/lily/include/slur-reg.hh
deleted file mode 100644 (file)
index 4fae2f9..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  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
diff --git a/lily/include/staff-gravs.hh b/lily/include/staff-gravs.hh
new file mode 100644 (file)
index 0000000..4dffdae
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  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
index 1f65f20f00bbe4a88f4c971681b05998d25ab7b8..5afe06186042159cea6043727cf64b9198b040fe 100644 (file)
@@ -12,7 +12,7 @@
 
 #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_;
diff --git a/lily/include/staff-regs.hh b/lily/include/staff-regs.hh
deleted file mode 100644 (file)
index 783a743..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  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
diff --git a/lily/include/staff-sym-grav.hh b/lily/include/staff-sym-grav.hh
new file mode 100644 (file)
index 0000000..382a6f6
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+  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
diff --git a/lily/include/staff-sym-reg.hh b/lily/include/staff-sym-reg.hh
deleted file mode 100644 (file)
index b21e697..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  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
diff --git a/lily/include/stem-beam-grav.hh b/lily/include/stem-beam-grav.hh
new file mode 100644 (file)
index 0000000..37565d8
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  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
diff --git a/lily/include/stem-beam-reg.hh b/lily/include/stem-beam-reg.hh
deleted file mode 100644 (file)
index a162e72..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  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
diff --git a/lily/include/swallow-grav.hh b/lily/include/swallow-grav.hh
new file mode 100644 (file)
index 0000000..4376402
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  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
diff --git a/lily/include/swallow-reg.hh b/lily/include/swallow-reg.hh
deleted file mode 100644 (file)
index 937f890..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  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
diff --git a/lily/include/text-grav.hh b/lily/include/text-grav.hh
new file mode 100644 (file)
index 0000000..de5843d
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+  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
diff --git a/lily/include/text-reg.hh b/lily/include/text-reg.hh
deleted file mode 100644 (file)
index 7b8213b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  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
diff --git a/lily/include/tie-grav.hh b/lily/include/tie-grav.hh
new file mode 100644 (file)
index 0000000..fc5a519
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  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
diff --git a/lily/include/tie-reg.hh b/lily/include/tie-reg.hh
deleted file mode 100644 (file)
index a1ea3ed..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  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
diff --git a/lily/include/translator.hh b/lily/include/translator.hh
new file mode 100644 (file)
index 0000000..0dc7047
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  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
diff --git a/lily/include/voice-gravs.hh b/lily/include/voice-gravs.hh
new file mode 100644 (file)
index 0000000..8bda699
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  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
diff --git a/lily/include/voice-group-gravs.hh b/lily/include/voice-group-gravs.hh
new file mode 100644 (file)
index 0000000..cdac707
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  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
diff --git a/lily/include/voice-group-regs.hh b/lily/include/voice-group-regs.hh
deleted file mode 100644 (file)
index 3dda106..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  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
diff --git a/lily/include/voice-regs.hh b/lily/include/voice-regs.hh
deleted file mode 100644 (file)
index 8d34121..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  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
diff --git a/lily/input-engraver.cc b/lily/input-engraver.cc
new file mode 100644 (file)
index 0000000..9e6b12b
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+  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();
+}
diff --git a/lily/input-register.cc b/lily/input-register.cc
deleted file mode 100644 (file)
index d1a8b58..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-  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();
-}
diff --git a/lily/key-grav.cc b/lily/key-grav.cc
new file mode 100644 (file)
index 0000000..802b34a
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+  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);
index bf64b3e97983ab5a9877ac3322374c3a12fc09d6..ae15a9532491e2528490cf3e5085b5dc3060d0e0 100644 (file)
@@ -4,8 +4,8 @@
 #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 */
@@ -17,13 +17,13 @@ Key_item::Key_item(int c)
 }
 
 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);
     }
diff --git a/lily/key-reg.cc b/lily/key-reg.cc
deleted file mode 100644 (file)
index 70dea98..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-  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);
index 31bc1674d4ad37c80d57d8fa7e028ecb6f85c6fc..f942a19cc307be87b18cad50658192aebc9082ce 100644 (file)
@@ -336,6 +336,7 @@ My_lily_lexer::scan_escaped_word(String str)
                yylval.id = id;
                return id->token_code_i_;
        }
+       LexerError( "Unknown escaped string: `" + str + "'");   
        mtor << "(string)";
        String *sp = new String( str);
        yylval.string=sp;
@@ -354,15 +355,18 @@ My_lily_lexer::scan_bare_word(String str)
                    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;
 }
diff --git a/lily/local-key-grav.cc b/lily/local-key-grav.cc
new file mode 100644 (file)
index 0000000..5128f9a
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+  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);
diff --git a/lily/local-key-reg.cc b/lily/local-key-reg.cc
deleted file mode 100644 (file)
index 268f281..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-  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);
index a4dd9caeb1e9621ac79c9a4f936179ccdd48a2d7..dd33fa3df68296836333cdd4d6a969048252d268 100644 (file)
 #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_);
 }
@@ -66,28 +68,6 @@ Lookup::text(String style, String text, int dir) const
 }
 
 
-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
@@ -203,9 +183,10 @@ Lookup::hairpin(Real &wid, bool decresc) 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;
diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc
new file mode 100644 (file)
index 0000000..515bc7a
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+  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);
diff --git a/lily/lyric-register.cc b/lily/lyric-register.cc
deleted file mode 100644 (file)
index 396fae3..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-  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);
diff --git a/lily/meter-grav.cc b/lily/meter-grav.cc
new file mode 100644 (file)
index 0000000..326f74e
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+  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); 
diff --git a/lily/meter-reg.cc b/lily/meter-reg.cc
deleted file mode 100644 (file)
index e0e3829..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-  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); 
diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc
deleted file mode 100644 (file)
index 3068c98..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-  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
index 3e8befb193c4b9bcf1305835fad9544e9adf879b..d07e7bde63e6eadb4056c679770b5450ea2d875d 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "music-list.hh"
 #include "music-iterator.hh"
-#include "acceptor.hh"
+#include "translator.hh"
 #include "request.hh"
 #include "interpreter.hh"
 #include "debug.hh"
@@ -34,19 +34,19 @@ Music_iterator::print() const
 #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;
@@ -68,7 +68,7 @@ Music_iterator::construct_children()
 
 Music_iterator::~Music_iterator()
 {
-    set_acceptor(0);
+    set_translator(0);
 }
 
 Moment
@@ -91,7 +91,7 @@ Music_iterator::ok()const
 
 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()))
@@ -108,16 +108,16 @@ Music_iterator::static_get_iterator_p(Music *m,
      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;
 }
@@ -152,7 +152,7 @@ Chord_iterator::construct_children()
     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 
@@ -229,7 +229,7 @@ Voice_iterator::construct_children()
     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_);
     }
 }
 
@@ -345,11 +345,11 @@ void
 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);
@@ -365,15 +365,15 @@ IMPLEMENT_IS_TYPE_B1(Voice_element_iterator,Chord_iterator);
 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();
index f80534ed2e0ed2f9759d370c3c407ad757b8ec20..c0a0edb89ea1de7f2f773da199c91227622db99d 100644 (file)
@@ -38,7 +38,7 @@ static Keyword_ent the_key_tab[]={
     {"id", ID},
     {"in", IN_T},
     {"init_end", INIT_END},
-    {"requestregister", REQUESTREGISTER},
+    {"requestengraver", REQUESTENGRAVER},
     {"lyric", LYRIC},
     {"key", KEY},
     {"melodic" , MELODIC},
diff --git a/lily/note-column-grav.cc b/lily/note-column-grav.cc
new file mode 100644 (file)
index 0000000..2a95a72
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+  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);
diff --git a/lily/note-column-reg.cc b/lily/note-column-reg.cc
deleted file mode 100644 (file)
index 44142ac..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-  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);
index 18158eba08a107f77503c937c27e76306b4ccdb8..6a7dd244175da9188fcc10e7127610207b58dd78 100644 (file)
@@ -7,6 +7,8 @@
 */
 
 #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)
@@ -21,35 +42,29 @@ 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
@@ -58,42 +73,45 @@ Paper_def::set(Lookup*l)
     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
@@ -101,5 +119,6 @@ Paper_def::print() const
 Lookup const *
 Paper_def::lookup_l()
 {
+    assert( lookup_p_ );
     return lookup_p_;
 }
index cf4b75c8c2d63ce35637eb5cdaf9a2293bf8b372..0c31d45fe8ed0347204bcd5c648b5666672b179a 100644 (file)
@@ -1,7 +1,7 @@
 %{ // -*-Fundamental-*-
 #include <iostream.h>
 
-#define MUDELA_VERSION "0.0.60"
+#define MUDELA_VERSION "0.0.61"
 
 #include "script-def.hh"
 #include "symtable.hh"
@@ -20,7 +20,7 @@
 #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"
 
@@ -47,7 +47,7 @@
     Chord * chord;
     Duration *duration;
     Identifier *id;    
-    Input_register * iregs;
+    Input_engraver * iregs;
     Music *music;
     Music_list *musiclist;
     Score *score;
@@ -106,7 +106,7 @@ yylex(YYSTYPE *s,  void * v_l)
 %token GEOMETRIC
 %token GROUPING
 %token GROUP
-%token REQUESTREGISTER
+%token REQUESTENGRAVER
 %token HSHIFT
 %token IN_T
 %token ID
@@ -161,6 +161,7 @@ yylex(YYSTYPE *s,  void * v_l)
 %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
@@ -202,7 +203,7 @@ yylex(YYSTYPE *s,  void * v_l)
 %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
 
@@ -216,7 +217,7 @@ mudela:     /* empty */
        | 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:
@@ -284,6 +285,10 @@ declaration:
                $$ = 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;
@@ -313,26 +318,26 @@ declaration:
 
 
 
-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);
        }
        ;
@@ -392,15 +397,17 @@ paper_block:
 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 {
 
        }
@@ -539,7 +546,7 @@ command_elt:
        | 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;
        }
@@ -976,7 +983,7 @@ symtables_body:
                $$ = new Lookup;
        }
        | IDENTIFIER            {
-               $$ = new Lookup(*$1->lookup(true));
+               $$ = $1->lookup(true);
        }
        | symtables_body TEXID STRING           {
                $$->texsetting = *$3;
@@ -1045,7 +1052,7 @@ My_lily_parser::do_yyparse()
 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 ;
 }
 
diff --git a/lily/register-group.cc b/lily/register-group.cc
deleted file mode 100644 (file)
index 5812b2f..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
-  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();
-}
diff --git a/lily/register.cc b/lily/register.cc
deleted file mode 100644 (file)
index dd228e1..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-  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
-{
-}
-
-
diff --git a/lily/rest-collision-grav.cc b/lily/rest-collision-grav.cc
new file mode 100644 (file)
index 0000000..df04beb
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+  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
+}
diff --git a/lily/rest-collision-reg.cc b/lily/rest-collision-reg.cc
deleted file mode 100644 (file)
index 259e33c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-  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
-}
diff --git a/lily/score-align-grav.cc b/lily/score-align-grav.cc
new file mode 100644 (file)
index 0000000..79ab3ca
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+  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);
diff --git a/lily/score-align-gravs.cc b/lily/score-align-gravs.cc
new file mode 100644 (file)
index 0000000..236ca21
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  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);
+
diff --git a/lily/score-align-reg.cc b/lily/score-align-reg.cc
deleted file mode 100644 (file)
index 3b118db..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  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);
diff --git a/lily/score-align-regs.cc b/lily/score-align-regs.cc
deleted file mode 100644 (file)
index bde4757..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  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);
-
diff --git a/lily/score-grav.cc b/lily/score-grav.cc
new file mode 100644 (file)
index 0000000..5db5782
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+  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);
+
diff --git a/lily/score-halign-grav.cc b/lily/score-halign-grav.cc
new file mode 100644 (file)
index 0000000..24116b2
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+  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);
diff --git a/lily/score-halign-reg.cc b/lily/score-halign-reg.cc
deleted file mode 100644 (file)
index 748c018..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  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);
diff --git a/lily/score-reg.cc b/lily/score-reg.cc
deleted file mode 100644 (file)
index 35de3a3..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-  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);
-
index f2899451e7612e10c821d63254156e3c56174d3b..86c10934b6f2f337e09ee235aff2cb7e5f80ba81 100644 (file)
 #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;
 
@@ -34,7 +34,7 @@ Score::Score(Score const &s)
 }
 
 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_, 
@@ -72,10 +72,10 @@ Score::paper()
     *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. 
@@ -138,14 +138,6 @@ Score::do_cols()
     }
 }
 
-Moment
-Score::last() const
-{    
-    Moment l = 0;
-    // TODO
-    return l;
-}
-
 void
 Score::set(Paper_def *pap_p)
 {
@@ -209,18 +201,18 @@ Score::~Score()
 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";
diff --git a/lily/script-grav.cc b/lily/script-grav.cc
new file mode 100644 (file)
index 0000000..27c281e
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+  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);
diff --git a/lily/script-reg.cc b/lily/script-reg.cc
deleted file mode 100644 (file)
index 90bf7ce..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-  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);
diff --git a/lily/slur-grav.cc b/lily/slur-grav.cc
new file mode 100644 (file)
index 0000000..cabb4b1
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+  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);
diff --git a/lily/slur-reg.cc b/lily/slur-reg.cc
deleted file mode 100644 (file)
index 2a4963c..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-  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);
diff --git a/lily/staff-gravs.cc b/lily/staff-gravs.cc
new file mode 100644 (file)
index 0000000..de19475
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+  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);
+
diff --git a/lily/staff-regs.cc b/lily/staff-regs.cc
deleted file mode 100644 (file)
index cd595e5..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-  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);
-
diff --git a/lily/staff-sym-grav.cc b/lily/staff-sym-grav.cc
new file mode 100644 (file)
index 0000000..fc93241
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+  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);
diff --git a/lily/staff-sym-reg.cc b/lily/staff-sym-reg.cc
deleted file mode 100644 (file)
index c309351..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  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);
diff --git a/lily/stem-beam-grav.cc b/lily/stem-beam-grav.cc
new file mode 100644 (file)
index 0000000..bf479bc
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+  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);
diff --git a/lily/stem-beam-reg.cc b/lily/stem-beam-reg.cc
deleted file mode 100644 (file)
index 1630f4b..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-  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);
diff --git a/lily/swallow-grav.cc b/lily/swallow-grav.cc
new file mode 100644 (file)
index 0000000..39e8426
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+  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;
+}
diff --git a/lily/swallow-reg.cc b/lily/swallow-reg.cc
deleted file mode 100644 (file)
index 6f182fb..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-  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;
-}
index 54ce79274478ea918e846f611622a9a5096159f1..247b2f0978b4e905a13fb6700d6aa35b2c6d1f36 100644 (file)
@@ -8,10 +8,10 @@
 
 #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);
index d543208d8dcfab978472997693734263be3313c6..b0612eb0b8b972722781a657d67fb7fc70738641 100644 (file)
@@ -1,5 +1,5 @@
 #include "proto.hh"
 #include "plist.tcc"
-#include "register.hh"
+#include "engraver.hh"
 
-IPL_instantiate(Request_register);
+IPL_instantiate(Request_engraver);
index 76d1de2060e19f5840eb9e1aa50ed4ad3f17b940..70f3e5179759414f2ce44cb09fe59ab57d97c3da 100644 (file)
@@ -1,9 +1,20 @@
+/*
+  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)
@@ -182,7 +193,8 @@ Lookup::big_slur(int dy , Real &dx, int dir) const
     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;
 
@@ -195,10 +207,10 @@ Lookup::big_slur(int dy , Real &dx, int dir) const
     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();
diff --git a/lily/text-grav.cc b/lily/text-grav.cc
new file mode 100644 (file)
index 0000000..5d6e0d9
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+  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);
diff --git a/lily/text-reg.cc b/lily/text-reg.cc
deleted file mode 100644 (file)
index ed793ee..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  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);
diff --git a/lily/tie-grav.cc b/lily/tie-grav.cc
new file mode 100644 (file)
index 0000000..43a0221
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+  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);
diff --git a/lily/tie-reg.cc b/lily/tie-reg.cc
deleted file mode 100644 (file)
index 725c02c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-  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);
diff --git a/lily/translator.cc b/lily/translator.cc
new file mode 100644 (file)
index 0000000..148b833
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+  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);
diff --git a/lily/voice-gravs.cc b/lily/voice-gravs.cc
new file mode 100644 (file)
index 0000000..ff63b59
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  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);
+}
+
diff --git a/lily/voice-group-gravs.cc b/lily/voice-group-gravs.cc
new file mode 100644 (file)
index 0000000..222ae42
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+  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);
diff --git a/lily/voice-group-regs.cc b/lily/voice-group-regs.cc
deleted file mode 100644 (file)
index b2fdd6c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-  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);
diff --git a/lily/voice-regs.cc b/lily/voice-regs.cc
deleted file mode 100644 (file)
index cc141ff..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  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);
-}
-
index d162fe2f70414d963fef982f393dabc905f982e4..9a3cbef487421e9642cf6e54d244d86163bae946 100644 (file)
@@ -13,6 +13,7 @@ libdir = @libdir@
 prefix = @prefix@
 TEXPREFIX = @TEXPREFIX@
 TEXDIR = @TEXDIR@
+TAR= @TAR@
 MFDIR = @MFDIR@
 mandir  =  @mandir@
 exec_prefix = @exec_prefix@
index a93ae1e1b2e282b3e6bdaf8a903f53d14cdcd883..1795fd7a41421433f0dbc019715de49f798d9c9c 100644 (file)
@@ -140,7 +140,8 @@ dist:
        $(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)/
 
@@ -155,7 +156,7 @@ endif
 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:
index fb024505012be0835252fb303bf51c5af92bd36b..337598ff3061eb6c52a7942cbb9dd1bc80ca096c 100644 (file)
@@ -188,7 +188,7 @@ DOCDIR=$(depth)/$(outdir)
 
 # .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
index 4900432eea9cddc4d9eaafc95825aecfd91fb5d2..e716833aadc7a38dfd95ea3075a1ffdd1cf2fea6 100644 (file)
@@ -2,8 +2,8 @@
 
 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
@@ -13,7 +13,7 @@ Author: hanwen@stack.nl (Han-Wen Nienhuys)
        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++
index fcf5c03a722b5cc6804dd418d7182898b192ff47..3e118e3cedcd14adaa740339fae75cd076df809d 100644 (file)
@@ -1,9 +1,9 @@
 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>
index f6878bc0f081d43577a8c0772194d713823ea645..98ec47cec3e6fcfc3b530ccdf51d9f4d64d5f7a3 100644 (file)
--- a/mf/README
+++ b/mf/README
@@ -1,5 +1,4 @@
-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:
 
index e408f8a7878a72344312688edb32e1430d70219a..622f8d763f3422f7b1eb436aafd8ca4d49de1cc3 100644 (file)
@@ -4,6 +4,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %  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)
 %
@@ -431,12 +434,12 @@ def doublesharp (expr mw, xshift)=
   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';
index 6b2f4b5a20e50f746b2fff667c94ba75a4853154..43f14ec162948fb4e48bb9ea0f659118b4d6129e 100644 (file)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %  this is xgreggen.mf (c)
 %
-%  Version T.63 [October 96]
+%  Version T.67 [January 97]
 %
 
 nhw#:=1.2*nhh#;
@@ -38,7 +38,7 @@ orisuangle:=40; orisruangle:=180+orisuangle;
 
 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;