]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.0.13
authorfred <fred>
Tue, 26 Mar 2002 21:27:00 +0000 (21:27 +0000)
committerfred <fred>
Tue, 26 Mar 2002 21:27:00 +0000 (21:27 +0000)
219 files changed:
Documentation/tex/GNUmakefile
Documentation/tex/glossary-forms.el
Documentation/tex/glossary-table.data
Documentation/tex/glossary.yo
Documentation/tex/refman.yo
Documentation/tex/tutorial.yo
buildscripts/genheader.py
flower/dictionary.cc
flower/dstream.cc
flower/include/assoc.hh
flower/include/interval.hh
flower/include/interval.tcc
init/book-fragment.ly
init/book-init.ly
init/center-fragment.ly
init/center.ly
init/engraver.ly
init/fragment.ly
init/init.fly
init/init.ly
init/paper16.ly
init/paper20.ly
init/performer.ly
init/property.ly
input/example-3.ly
input/keys.ly
input/kortjakje.ly
input/part.ly
input/pedal.ly
input/praeludium-fuga-E.ly
input/rhythm.ly
input/scales.ly
input/scripts.ly
input/test/abbrev.ly
input/test/bar-scripts.ly
input/test/beam-chord.ly
input/test/beam-pos.ly
input/test/beams.ly
input/test/broken.ly
input/test/clefs.ly
input/test/collisions.ly
input/test/defaultbars.ly
input/test/denneboom.ly
input/test/dotted-slur.ly
input/test/find-quarts.ly
input/test/font-body.ly
input/test/font.ly
input/test/font16.ly
input/test/gourlay.ly
input/test/grace.ly
input/test/hara-kiri.ly
input/test/keys.ly
input/test/knee.ly
input/test/mark.ly
input/test/multi-rest.ly
input/test/orchestalpart.ly [new file with mode: 0644]
input/test/ossia.ly
input/test/score-bar-scripts.ly
input/test/sleur.ly
input/test/slur-bug.ly
input/test/slur-damping.ly
input/test/slur-swap.ly
input/test/slurs.ly
input/test/spacing.ly
input/test/stem.ly
input/test/test-lyrics.ly
input/test/tie-bug.ly
input/test/tie.ly
input/test/time.fly
input/test/title.ly
input/test/transposition.ly
input/test/vertical-align.ly
input/tril.ly
input/twinkle-pop.ly
input/twinkle.ly
lily/GNUmakefile
lily/abbrev.cc
lily/afm.cc
lily/atom.cc
lily/change-iterator.cc
lily/clef-engraver.cc
lily/dynamic-engraver.cc
lily/engraver-group.cc
lily/engraver.cc
lily/header.cc
lily/identifier.cc
lily/include/afm.hh
lily/include/atom.hh
lily/include/engraver.hh
lily/include/header.hh
lily/include/identifier.hh
lily/include/lily-proto.hh
lily/include/main.hh
lily/include/music-output-def.hh
lily/include/p-score.hh
lily/include/paper-def.hh
lily/include/paper-outputter.hh [new file with mode: 0644]
lily/include/paper-stream.hh [new file with mode: 0644]
lily/include/performer.hh
lily/include/ps-lookup.hh [new file with mode: 0644]
lily/include/ps-outputter.hh [new file with mode: 0644]
lily/include/ps-stream.hh [new file with mode: 0644]
lily/include/symtable.hh
lily/include/tex-lookup.hh [new file with mode: 0644]
lily/include/tex-outputter.hh
lily/include/tex-stream.hh
lily/include/timing-engraver.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/local-key-engraver.cc
lily/main.cc
lily/music-output-def.cc
lily/my-lily-lexer.cc
lily/p-score.cc
lily/paper-def.cc
lily/paper-outputter.cc [new file with mode: 0644]
lily/paper-stream.cc [new file with mode: 0644]
lily/parser.yy
lily/performance.cc
lily/performer.cc
lily/ps-lookup.cc [new file with mode: 0644]
lily/ps-outputter.cc [new file with mode: 0644]
lily/ps-stream.cc [new file with mode: 0644]
lily/scope.cc
lily/score-priority-engraver.cc
lily/scores.cc
lily/staff-performer.cc
lily/symtable.cc
lily/tex-lookup.cc [new file with mode: 0644]
lily/tex-outputter.cc
lily/tex-stream.cc
lily/time-signature-engraver.cc
lily/time-signature.cc
lily/translator-ctors.cc
lily/translator-group.cc
lily/translator.cc
mf/feta-timesig.mf
mi2mu/GNUmakefile
mudela-mode.el
mutopia/Coriolan/bassi-part.ly
mutopia/Coriolan/clarinetti-part.ly
mutopia/Coriolan/clarinetti.ly
mutopia/Coriolan/clarinetto-1.ly
mutopia/Coriolan/clarinetto-2.ly
mutopia/Coriolan/contrabasso-part.ly
mutopia/Coriolan/contrabasso.ly
mutopia/Coriolan/coriolan-part-paper.ly [new file with mode: 0644]
mutopia/Coriolan/coriolan.ly
mutopia/Coriolan/corni-part.ly
mutopia/Coriolan/corni.ly
mutopia/Coriolan/corno-1.ly
mutopia/Coriolan/corno-2.ly
mutopia/Coriolan/fagotti-part.ly
mutopia/Coriolan/fagotti.ly
mutopia/Coriolan/fagotto-1.ly
mutopia/Coriolan/fagotto-2.ly
mutopia/Coriolan/flauti-part.ly
mutopia/Coriolan/flauti.ly
mutopia/Coriolan/flauto-1.ly
mutopia/Coriolan/flauto-2.ly
mutopia/Coriolan/global.ly
mutopia/Coriolan/oboe-1.ly
mutopia/Coriolan/oboe-2.ly
mutopia/Coriolan/oboi-part.ly
mutopia/Coriolan/oboi.ly
mutopia/Coriolan/timpani.ly
mutopia/Coriolan/trombe-part.ly
mutopia/Coriolan/trombe.ly
mutopia/Coriolan/trombo-1.ly
mutopia/Coriolan/trombo-2.ly
mutopia/Coriolan/viola-1.ly
mutopia/Coriolan/viola-2.ly
mutopia/Coriolan/viola-part.ly
mutopia/Coriolan/violino-1-part.ly
mutopia/Coriolan/violino-1.ly
mutopia/Coriolan/violino-2-part.ly
mutopia/Coriolan/violino-2.ly
mutopia/Coriolan/violoncello-part.ly
mutopia/Coriolan/violoncello.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Allemande.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Sinfonia.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-1.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-2.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-4.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-5.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-6.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/scs-paper.ly
mutopia/J.S.Bach/wtk1-fugue1.ly
mutopia/J.S.Bach/wtk1-fugue2.ly
mutopia/J.S.Bach/wtk1-prelude1.ly
mutopia/W.A.Mozart/cadenza.ly
mutopia/W.A.Mozart/horn-concerto-3.ly
mutopia/gallina.ly
mutopia/los-toros-oboe.ly
mutopia/standchen-16.ly
mutopia/standchen-20.ly
mutopia/standchen.ly
scripts/convert-mudela.py
stepmake/NEWS
stepmake/VERSION
stepmake/bin/table-to-html.py
stepmake/stepmake/documentation-rules.make
stepmake/stepmake/generic-targets.make
stepmake/stepmake/tex-rules.make
tex/fetdefs.tex
tex/lilypond-latex.tex
tex/lilyponddefs.tex

index beff5d81a9fe7ad11386d0a47e6617df52a6c9dc..8b4a15a5d457edcb101f47db9340e47dd0f8158f 100644 (file)
@@ -21,11 +21,11 @@ PS_FILES = $(DVI_FILES:.dvi=.ps)
 STEPMAKE_TEMPLATES=tex documentation
 LOCALSTEPMAKE_TEMPLATES=lilypond mudela
 
-
+export BIBINPUTS:=$(shell pwd)//$(PATHSEP)$(BIBINPUTS)
 include $(depth)/make/stepmake.make 
 
 
-export BIBINPUTS:="$(topdir)/Documentation/tex//"$(PATHSEP)$(BIBINPUTS)
+
 
 
 
@@ -40,6 +40,15 @@ default:
 GENHTMLS = engraving colorado glossary computer-notation
 OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
 
+#urg should generalise and move Lilypond -> StepMake
+# URG.  Lilypond specific. Move out. 
+$(outdir)/%.html: %.data $(depth)/VERSION
+       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' --package=$(topdir) -o $@ $<
+       $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $@
+
+$(outdir)/%.tex: %.data $(depth)/VERSION
+       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' --package=$(topdir) -o $@ --latex $<
+
 
 $(outdir)/glossary.dvi: $(outdir)/glossary-table.tex
 $(outdir)/glossary.html: $(outdir)/glossary-table.html
index 0ad71b35af2e652c560d7c611a5bd6ff1a4afa4d..3ab4a48de2e3883c535c866f562c3673f4e4fd1e 100644 (file)
@@ -7,7 +7,7 @@
 (setq forms-number-of-fields 7)
 (setq forms-read-only nil)                 ; to make sure
 (setq forms-field-sep "@")
-(setq forms-multi-line nil)
+(setq forms-multi-line "\C-m")
 
 (setq forms-format-list
       (list
index f5ffac0a408a9761f34dd7eb929960321f7f39b9..981de9bf6712b4d85e0ed09e9c18f9f710f1a4f3 100644 (file)
@@ -9,12 +9,12 @@ accidental@alt
 adjacent keys@tons voisins@@@@@
 alto@alto@@@alt@@
 ancient form??? (diatonic minor scale)@forme du mode mineur ancien@@@@@
-appoggiatura@appogiature, ports de voix, notes d'agr\'ement@langer Vorschl\"age@@@appogiature@
-arbitrary number of bars' rest)@bâton de pause@@@@@
+appoggiatura@appogiature, ports de voix, notes d'agr\'ement@langer Vorschl\"age@@lange voorslag@appogiature@
+arbitrary number of bars' rest)@bâton de pause@@@meermaats rust@@
 arpeggio@arpège, arpègement@Brechungen@@gebroken akoord@arpeggio@
 artificial measure@mesure artificielle@@@@@
 artificial rest@respiration@@@@@
-ascending interval@intervalle ascendant@@@@@
+ascending interval@intervalle ascendant@@@stijgend interval@@
 augmented (interval)@augmenté (intervalle)@@@overmatig interval@@
 B@si@@@@@
 backfall, forefall@accent, chute, port de voix@Vorschlag@@korte voorslag@appogiature@
@@ -25,14 +25,14 @@ bass clef@cl
 bass@basse@@@bas@@
 beam@barre@Balken@@waardestreep/balk@barra@
 beat@temps@@@tel@@
-brace@accolade@Klammer@@@accolada@Symbol at the start of a system that connects staffs.
+brace@accolade@Klammer@@accolade, haak@accolada@Symbol at the start of a system that connects staffs.
 brass@@@@koper (blazers)@@
 C clef@clé d'ut@@@C sleutel, alt sleutel@chiave di tenore@
 C@do@@@C@@
 C@ut@@@@@
 cadence@cadence@@@cadens@@
 cadenza@fioriture@@@cadens@cadenza@
-cent@@@@@@1/1200 of an octave (1/100 of an equally tempered semitone)
+cent@@@@cent@@1/1200 of an octave (1/100 of an equally tempered semitone)
 chain of trills@chaîne de trilles@@@triller@@
 character@caractère@@@@@
 chevron@chevron@@@@@
@@ -41,19 +41,19 @@ chromatic scale@gamme chromatique@@@chromatische toonladder@@
 chromatic semitone@demi-ton chromatique@@@chromatische halve toon@@
 chromatic transposition@transposition chromatique@@@@@
 chromatic type@genre chromatique@@@@@
-church mode, ecclesiastical mode@mode ecclésiastique@@@@@
-clef@clé@Schl\"ussel@@Sleutel@la chiave (pl. le chiavi)@
-comma@comma@@@@@Difference in pitch of a note when the note is derived from a different tuning system.
+church mode, ecclesiastical mode@mode ecclésiastique@@@kerk toonladder@@
+clef@clé@Schl\"ussel@@sleutel@la chiave (pl. le chiavi)@
+comma@comma@@@komma@@Difference in pitch of a note when the note is derived from a different tuning system.
 compound interval@intervalle composé@@@@@
-compound measure@mesure composée@@@@@
+compound measure@mesure composée@@@samengestelde maat@@
 conjunct movement@mouvement conjoint@@@@@
 consonant interval; consonance@consonance@@@consonant@@
 contralto@contralto@@@@@
 contro-time@contre-temps@@@@@
 crescendo@crescendo@@@@crescendo@written with an extended opening angular bracket, indicates increasing volume
-cue-notes@@Stichnoten@@stichnoten@@
+cue-notes@@Stichnoten@@stichnoten@@In an orchestral part, notes for a different instrument that hint when to\rstart playing.  Usually printed in smaller type.
 D@ré@@@@@
-dash over/below@pizzicato@@@@@
+dash over/below@@@@@pizzicato@With plucked strings
 decrescendo@@@@@decrescendo@written with an extended closing angular bracket, indicates decreasing volume
 degree [of the scale]@degré [de la gamme]@@@trap [van de toonladder]@@
 descending interval@intervalle descendant@@@dalend interval@@
@@ -68,27 +68,27 @@ dissonant interval; dissonance@dissonance@@@dissonant interval; dissonant@@
 dominant ninth chord@accord de neuvième dominante@@@dominant noon akkoord@@
 dominant seventh chord@accord de septième dominante@@@dominant septiem akkoord@@
 dominant@dominante@@@dominant@@A tone that creates tension;the fifth degree of the scale.
-dorian mode@@@@@@Mode obtained by raising the sixth in minor mode.  A Dorian scale can be played from D to D with no sharps or flats.
-dot (augmentation dot) @point@Punkt@@punt@punto@
+dorian mode@@@@dorische toonladder@@Mode obtained by raising the sixth in minor mode.  A Dorian scale can be played from D to D with no sharps or flats.
+dot (augmentation dot) @point@Punkt@@punt@punto@An augmentation dot after note adds multiplies the duration by one and a half.
 dot and curved line combined@point et liaison combinés@@@@@
-dot over/below@@@@staccato@staccato@
+dot over/below@@@@staccato@staccato@Play each note short.
 dot@point@@@punt@@
 dotted note@note pointée@@@@@
 double appoggiatura@appogiature double@@@@@
-double bar line@double barre@Doppeltaktstrich@@dubbele streep@doppia barra@
+double bar line@double barre@Doppeltaktstrich@@dubbele streep@doppia barra@Indicates the end of a section within a movement.
 double dotted note@note doublement pointée@@@@@
 double flat@double bémol@Doppel-Be@@dubbelmol@doppio bemolle@
-double sharp@double dièse@Doppelkreuz@@dubbelkruis@doppio diesis@
-double trill@trille double@@@@@
+double sharp@double dièse@Doppelkreuz@@dubbelkruis@doppio diesis@Raise pitch by two semitones
+double trill@trille double@@@@@A trill on a chord
 double triplet@double triolet@@@dubbele triool@@
-double whole note@@@breve@brevis@breve@
+double whole note@@@breve@brevis@breve@Note during twice as long as a whole note. Mainly used in pre-1650 music.
 duple meter@temps binaire@@@tweedelige maatsoort@@
 duplet@duolet@@@duool@@
 duration@durée@@@duur, lengte@@
 E@mi@@@@@
 eighth note@croche@@quaver@achtste noot@@
 eighth rest@demi-soupir@@quaver rest@achtste rust@@
-engraving@@notenstechen@@steken@@
+engraving@@notenstechen@@steken@@The traditional process of music printing: cutting in a plate of metal.\rNow also the term for the art of music typography.
 enharmonic@enharmonique@@@enharmonisch@@Two notes, intervals, or scales are enharmonic if they have different names but sound the same.  Examples: C sharp and D flat, diminished fourth and major third
 equal temperament@tempérament Ã©gal@@@getempereerde stemming@@Tuning system in which each semitone is precisely 100 cents.
 essential alteration@altération essentielle@@@@@
@@ -97,22 +97,22 @@ extension of interval@extension d'intervalle@@@@@
 F@fa@@@@@
 fermata@pauses@Fermate@@fermate@fermata@Prolonged sound or silence of indefinite duration
 fifth@quinte@@@kwint@@
-flag, hook, tail, pennant@crochet@F\"anchen@@vlaggetje@coda uncinata@
-flat@bémol@Be@@mol@bemolle@
+flag, hook, tail, pennant@crochet@F\"anchen@@vlaggetje@coda uncinata@Ornament at the end of the stem of a note. The number of flags\rdetermines the lengths of notes shorter than a quarter note.
+flat@bémol@Be@@mol@bemolle@Lower pitch by a semitone
 four-bar rest@bâton de pause@@@@@
 fourth@quarte@@@kwart@@
 G@sol@@@@@
-glissando@glissement@Glissando@@glissando@glissando@
+glissando@glissement@Glissando@@glissando@glissando@Letting the pitch  slide fluently from one note to the other
 graces@petites notes@kurz Vorschl\"age, Manieren (?)@@versieringen@appogiature@
 grand staff@@@@piano systeem@@A combination of two staffs with a brace.  Usually used for piano music.
 half note@blanche@@minim@halve noot@@
 half rest@demi-pause@@minim rest@halve rust@@
-harmonic cadence@cadence harmonique@@@cadens@@
+harmonic cadence@cadence harmonique@@@harmonische cadens@@Sequence of chords that terminate a musical phrase or section.
 harmonic form (diatonic minor scale)@forme harmonique@@@@@
 harmonic interval@intervalle harmonique@@@@@
 incomplete measure@mesure incomplète@@@@@
 interval@intervalle@@@interval@@Difference in pitch between two notes
-inversion of interval@renversement d'intervalle@@@inversie@@
+inversion of interval@renversement d'intervalle@@@interval inversie@@
 irregular contro-time@contre-temps irrégulier@@@@@
 irregular group@groupe irrégulier@@@@@
 irregular measure@mesure irrégulière@@@@@
@@ -124,7 +124,7 @@ kind of rest@figure de silence@@@@@
 leading note@sensible@@@@@
 ledger line, leger line@ligne supplémentaire@Hilfslinien, Kopfstriche (?)@@hulplijntje@lineette@A ledger line is an extension of the staff.  
 legato curve@liaison rythmique@@@legato boog@@
-lilypond@étang de lis@lilyteich@lily pond@lelievijver@stagno del giglio@
+lilypond@étang de lis@lilyteich@lily pond@lelievijver@stagno del giglio@A pond with  lilies floating in it, also the name of a music typesetter.
 line@ligne@@@lijn@@
 long appoggiatura@appogiature longue@@@@@
 lower number@chiffre inférieur@@@@@
@@ -132,13 +132,13 @@ major (interval)@majeur (intervalle)@@@groot (interval)@@
 major mode@mode majeur@@@@@
 meantone temperament@tempérament mésotonique@@@@@Tuning based on a fifth that is 16 cents smaller than the natural fifth.  
 mediant@médiante@@@mediant@@The third degree of a scale
-melodic cadence@cadence mélodique@@@cadens@@
+melodic cadence@cadence mélodique@@@cadens@@A free-form section at the end of a solo-concerto, where the soloist\rcan demonstrate his/her virtuosity.
 melodic form (diatonic minor scale)@forme mélodique@@@@@
 meter, time@m\`etre@Takt, Metrum@@maatsoort@@A recurring pattern of stress
-metronome@métronome@@@metronoom@@
-metronomic indication@indication métronomique@@@@@
+metronome@métronome@@@metronoom@@Device which sounds a steady beat
+metronomic indication@indication métronomique@@@@@Exact tempo indication (in beats per minute).  Also denoted by M.M. (M\"azels Metronom)
 mezzo-soprano@mezzo-soprano@@@@@
-middle C@do central@@@centrale C@@
+middle C@do central@@@centrale C@@First C below the 440 Hz A.
 minor (interval)@mineur (intervalle)@@@@@
 minor mode@mode mineur@@@@@
 modal note@note modale@@@@@
@@ -147,8 +147,8 @@ modulation@modulation@@@modulatie@@
 mordent@mordant, pinc\'e@Pralltriller, Mordent@@mordent@mordente@
 motive@incise@@@motief@@
 musical ladder@échelle musicale@@@@@
-mixolydian mode@@@@@@Mode obtained by lowering the seventh in major.  A mixolydian scale can be obtained by playing G to G with no sharps or flats.
-natural sign@bécarre@Aufl\"osungszeichen@@herstellingsteken@bequadro@
+mixolydian mode@@@@Mixolydische toonladder@@Mode obtained by lowering the seventh in major.  A mixolydian scale can be obtained by playing G to G with no sharps or flats.
+natural sign@bécarre@Aufl\"osungszeichen@@herstellingsteken@bequadro@Do not play the following note flat or sharp.
 ninth@@@@noon@@
 note head@@Notenkopf@@noot balletje@@
 note@note@Note@@noot@nota@
@@ -164,7 +164,7 @@ perfect (interval)@juste (intervalle)@@@rein (interval)@@
 perfect major chord@accord parfait majeur@@@@@
 perfect minor chord@accord parfait mineur@@@@@
 phrase member@membre de phrase@@@@@
-phrase@phrase@@@@@
+phrase@phrase@@@frase, zin@@
 phrasing@phrasé@@@@@
 pitch pipe; tuning fork@diapason@@@stemfluitje; stemvork@@
 pitch@hauteur@@@toonhoogte@@
@@ -230,7 +230,7 @@ tonal note@note tonale@@@@@
 tonality@tonalité@@@tonaliteit@@
 tone@ton@@@toon@@
 tonic@tonique@@@tonica@@
-transposition@transposition@@@transpositie@@
+transposition@transposition@@@transpositie@@Shifting a melody up or down in pitch, while keeping the same relative pitches.
 treble clef@clé de sol@G Schl\"ussel@@G sleutel, viool sleutel@chiave di violino@
 tremolo@tr\'emolo@Tremolo@@tremolo@tremolo@
 trill; shake@trille, tremblement, battement (cadence)@Triller@@triller@trillo@
@@ -240,7 +240,7 @@ tritone@triton@@@@@
 turn; gruppetto@bris\'e, groupe, doubl\'e, grupetto@Doppelschlag@@dubbelslag@grupetto@
 two-bar rest@bâton de pause@@@@@
 underline over/below@portamento@@@@@
-unison@unisson@@@@unisono@
+unison@unisson@@@@unisono@Different instruments playing exactly the same melody.
 unit of beat@unité de temps@@@@@
 unit of measure@unité de mesure@@@@@
 upper number@chiffre supérieur@@@@@
index 3fb23a5f58193f44be066502af52fa7bef1d9655..eb929dd2e38e8b8f098a034030bffc2d0d3e0a18 100644 (file)
@@ -31,7 +31,7 @@ whentexinfo(notableofcontents())
 
 article(Glossary of notation terms)
       (Han-Wen Nienhuys and Jan Nieuwenhuizen)
-      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
+      ()
 
 COMMENT(
 
@@ -74,6 +74,9 @@ whenlatex(latexcommand(
        \inlanguage{Nederlands}{#5}\inlanguage{Italiano}{#6}}
       \input glossary-table
     }
+
+    \bibliography{engraving}    
+    \bibliographystyle{plain}
 ))
 
 whenhtml(
index 40e025e9112e6ed649bc1620fc6c15eec778afe2..826b4569e4a1b3115fcfbe3ee237b92a646e3765 100644 (file)
@@ -3,6 +3,10 @@ COMMENT(-*-text-*-)
 redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
     whenhtml(sc(ARG1)))
 
+
+redef(mycode)(1)(tt(ARG1))
+
+
 COMMENT( This document contains Mudela fragments.  You need at least
 Yodl-1.30.18 to convert this to tex or html.
 
@@ -20,15 +24,14 @@ latexlayoutcmds(
 \setlength{\textwidth}{5.875in} 
 \setlength{\oddsidemargin}{0.25in}   
 \setlength{\evensidemargin}{0.25in}
-\usepackage[T1]{fontenc}
 \input mudela-book
 )
 
-whenlatex(notableofcontents())
+COMMENT(whenlatex(notableofcontents()))
 whentexinfo(notableofcontents())
 
-article(Mudela, reference manual)
-      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
+article(Mudela Reference Manual)
+      (Andrew Moriano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
 
 COMMENT(
@@ -57,8 +60,9 @@ includefile(html-disclaimer.yo-urg)
 bf(This document is not up to date).  All rendered examples of course
 are current, but the rest probably isn't.  Adjusting the tutorial was
 considered more important than writing the reference manual.  We
-apologize for the inconvenience.
-
+apologize for the inconvenience.  For a complete and up-to-date
+definition, see file(lily/parser.yy), file(lily/lexer.ll), and the
+init files.
 
 This document describes the the GNU LilyPond input format, which is an
 effective language for defining music.  We call this language (rather
@@ -77,105 +81,164 @@ making use of identifiers, that allows for flexible input, and
 definition reuse. See the documentation file file(MANIFESTO), included
 with the LilyPond sources for reasons and design considerations.
 
-The below is included for explanatory purposes only (i.e., for a
-complete and up-to-date definition, see file(lily/parser.yy) and
-file(lily/lexer.ll)).
-
-As a related note, you should take a look at the examples and the init
-files, as this document does not cover every aspect of Mudela yet, and
-may be out of date.footnote(Ok, I am being pessimistic here.  This
-just is a disclaimer.  Docs usually are written after the program
-itself.)  This document intends to give an idea of how it works. It is
-not a guide on how to use it.
-
 
 sect(Running LilyPond)
 
-When invoked with a filename that has no extension, LilyPond will add
-a file(.ly) extension.  When invoked with a filename  ending  in
-file(.fly),  LilyPond processes  the file as a music fragment  using
-file(init.fly).  When file(foo.fly) is read, LilyPond does something
-like this:
-\verb(\score {
+When invoked with a filename that has no extension, LilyPond will try adding
+a file(.fly) extension first, and a file(.ly) extension second.  
+If the filename ends with 
+file(.fly),  LilyPond processes  the file as music using
+file(init.fly).  In this case, LilyPond does something
+like:
+verb(\score {
   \notes\relative c {
-    \input "foo.fly"
+    \input "yourfile.fly"
   }
   \paper{}
   \midi{}
 })
+If you invoke LilyPond with a file file(foo.)var(ext) that doesn't
+have the file(.ly) extension then LilyPond will look for a file called
+file(init.)var(ext) and process this file.  The file
+file(init.)var(ext) must contain the code(\maininput) keyword or LilyPond
+will not read the user specified file.
 
 
 sect(Syntax)
 
-A Mudela files consists of statements, generally
-separated by spaces, tabs or newlines.  A one line comment is
-introduced by a code(%) character.  Block comments are started by
-code(%{) and ended by code(%}).  They cannot be nested.
-
-Mudela supports several data types.  Four types of simple constants
-are supported: integers, reals, strings, and notes.  An integer is a
-sequence of digits such as code(12).  A real is fromed from an
-optional minus sign and a sequence of digits followed by a decimal
-point and an optional exponent such as code(-1.2e3).  A string is
-started and ended with the code(") character.  To include a code(")
-character in a string, you must write code(\").  Various other
-backslash sequences have special interpretations as in the C language.
-A string that contains no spaces can be written without the quotes.  A
-note consists of a note name followed by an optional duration.  See
-section ref(notedesc) for details on this type.  A dimension consists
-of a real followed by one of the dimension keywords: code(\mm),
-code(\pt), code(\in), or code(\cm).  Dimensions are converted
-immediately to a real which gives the dimension in points, so they can
-be mixed with reals.
+subsect(Basic Mudela)
+
+A Mudela file consists of keywords with arguments and identifier
+assignments separated by spaces, tabs or newlines.  (Semicolons are
+used by some keywords but are not generally required.)  A one line
+comment is introduced by a code(%) character.  Block comments are
+started by code(%{) and ended by code(%}).  They cannot be nested.
+
+Mudela supports several types:
+
+description(
+
+dit(integer) 
+Formed from an optional minus sign followed by digits.  Arithmetic
+operations cannot be done with integers, and integers cannot be mixed
+with reals.
+
+dit(real) 
+Formed from an optional minus sign and a sequence of digits followed
+by a emph(required) decimal point and an optional exponent such as
+code(-1.2e3).  Reals can be built up using the usual operations:
+code(+), code(-), code(*), and code(/), with parentheses for grouping.
+
+dit(string) 
+Begins and ends with the code(") character.  To include a code(")
+character in a string write code(\").  Various other backslash
+sequences have special interpretations as in the C language.  A string
+that contains no spaces can be written without the quotes.  See
+Section ref(modes) for details on unquoted strings; their
+interpretation varies depending on the situation.  On the right side
+of identifier assignments and within the code(\header) keyword,
+strings can be concatenated using the code(+) character.
+
+dit(dimension) Consists of a real followed by one of the dimension
+keywords: code(\mm), code(\pt), code(\in), or code(\cm).  Dimensions
+are converted immediately to a real which gives the dimension in
+points, so they can be mixed with reals, but the result is no longer
+of type dimension.  The keywords that require a dimension
+(code(\shape) and code(\symboltables)) will not accept this.
+
+dit(pitch) 
+A pitch is a string which is the name of a pitch.  Example: code(a).
+The pitch names can be redefined with the code(\notenames) keyword.
+See Section(notelang) for pitch names in different languages.  Pitches
+can only be specified inside note mode which is specified with
+code(\notes).  Therefore, keywords which require pitch arguments must
+appear inside code(\notes).  
+
+dit(music) 
+Music is a compound type: arbitrarily complicated expressions with a
+hierarchical structure can be formed from simple building blocks.  The
+simplest expression of type music is a single note.  A note is formed
+from a pitch and an optional duration and must be specified within
+code(\notes).  See Section ref(notedesc) for details.  More
+complicated expressions of type music are formed by surrounding a
+sequence of expressions of type music with braces code({) and code(})
+or with angle brackets code(<) and code(>).  Items appearing in braces
+will be treated as serial. Items in angle brackets will be
+simultaneous.  So for example code({ c e g }) represents an arpeggio
+and code(< c e g >) represents a chord.  These items can be nested any
+way you like.  This simple example shows how three chords can be
+expressed in two different ways:
+mudela(fragment,verbatim,center)(
+\notes<{a b  c'}{c' d' e'}{e' f' g'}>
+\notes{<a c' e'><b  d' f'><c' e' g'>}
+)
 
+)
+
+
+COMMENT(
 Compound types are built up from the simple types.  The compound types
 are: arglist, assignlist and musiclist.  An arglist is a
 white space separated list of integers, reals and or strings surrounded
 by braces code({) and code(}).  An assignlist is a list of 
 identifier assignments, which have the form var(key)code(=)var(value).
-The simplest musiclist is a single note.  More complicated music lists
-are formed by surrounding a list of musiclists with braces code({) and
-code(}) or with angle brackets code(<) and code(>).  Items appearing
-in braces will be treated as serial. Items in angle brackets will be
-simultaneous. 
-
 A statement in Mudela has one of three forms:
 verb(\keyword argument
 \keyword argument1 argument2 ... ;
 string=value)
-        
-To assign an identifier you use:
-verb(string = ...)
-To use an identifier, you must preceed it with a backslash: code(\).
-verb(oboe = \notes { ... }
-\score{ \notes { \oboe }})
-The left-hand part of the assignment is really a string, so 
-verb("Foo bar 4 2 " = \notes { ... })
-is also a valid assignment (but you would have trouble referencing it)
-If you reuse identifiers, then the previous contents will be thrown
-away after the right hand is evaluated, e.g.
-verb(bla = \notes { \bla })
-is legal.
-
-COMMENT(It's not clear to me what things are allowed on the RHS of 
-an identifier assignment.)
-
-The following words are keywords.  You can define an identifer whose
-name is a keyword, but you will not be able to reference it.
-
-verb(absdynamic  font           mm             pt              time       
-accepts     grouping       musicalpitch   relative        translator 
-bar         header         notenames      score           transpose  
-cadenza     in             notes          script          type       
-clear       include        octave         shape           version    
-clef        key            output         skip        
-cm          keysignature   paper          spandynamic 
-consists    lyric          partial        symboltables
-contains    mark           penalty        table       
-duration    midi           property       tempo )
-
-COMMENT( I don't know the proper way to make this kind of table in
-yodl. )
+)
+
+subsect(Identifiers)
+
+Identifiers allow names to be assigned to constants, music, or other
+Mudela structures.  To assign an identifier you use
+var(name)=var(value) and to refer to an identifier, you preceed its
+name with a backslash: code(\)var(name).  It is legal to redefine an
+identifier in terms of its old value: code(foo = \foo * 2.0).
+Identifier assignments must appear at the top level in the Mudela
+file.
+
+An identifier can be created with any string for its name, but you
+will only be able to refer to identifiers whose names begin with a
+letter and are entirely alphanumeric.  It is also impossible to refer
+to an identifier whose name is the same as the name of a keyword.  The
+following words are keywords:
+verb(absdynamic   header         musicalpitch   score         transpose
+accepts             in             notenames      script        type     
+bar         include        notes          shape         version  
+cadenza             key            output         skip        
+clef        keysignature   paper          spandynamic 
+cm          lyric          partial        symboltables
+consists     maininput      penalty        table       
+duration     mark           property       tempo       
+font        midi           pt             time        
+grouping     mm             relative       translator)
+
+The right hand side of an identifier assignment is parsed completely
+when the assignment is made.  It therefore must have any context
+specified in the definition.  For example, you must write
+code(foo=\notes{a8 b c}) rather than code(foo={a8 b c}).  Even though
+the context is specified in the definition, you must refer to the
+identifier inside the correct context:
+verb(foo = \paper{ linewidth = 6.0\in }
+\score{
+  \notes{ ... }
+  \paper{ \foo }
+})
+If code(\foo) is used here without the surrounding code(\paper) then
+an error will result.
+
+Identifiers can be set equal to integers, reals, strings, music,
+durations (specified with code(\duration)), note ornaments (specified
+with code(\script), dynamics commands, or code(:)), translator
+definitions, the code(\paper) block, the code(\midi) block or the
+code(\score) block.  When identifiers are used for translators, the
+code(\paper), code(\midi), and code(\score) blocks, they may only be
+referred to as the first item in a block.  So code(\paper{\one \two})
+is illegal because the identifier code(\two) is not the first thing in
+the block.
+
+
 
 COMMENT(
 subsect(Hierarchical structures)
@@ -200,13 +263,14 @@ Mudela becoming tedious
 )
 
 
-
-sect(Modes)
+subsect(Modes)
+label(modes)
 
 To simplify different aspects of music definition (entering the notes
-and manipulating them) Mudela has a number of different input "modes".
+and manipulating them) Mudela has three different input modes which
+affect how unquoted strings are interpreted.
 In each mode, words are identified on the input.  If code("word") is
-encountered, it is treated as a string.  If code("\word") is
+encountered, it is treated as a string.  If code(\word) is
 encountered it is treated as a keyword or as an identifier.  The
 behavior of the modes differs in two ways: different modes treat
 unquoted words different, and different modes have different rules for
@@ -228,24 +292,31 @@ treated as a string.  If you mistype a notename, the parser will most
 likely complain that you should be in code(\lyric) mode to do lyrics. 
 
 dit(Lyric mode) Lyrics mode is introduced by the keyword
-  code(\lyric).  Because of the various control characters that can
-  appear in lyrics, e.g., foreign language accents, the inputting a
-  string containing these has been made very easy.  Every sequence of
-non-digit and non-white characters starting with an alphabetic
-character or the code(_) is considered a word.  When code("word") is
-encountered it is treated as a lyric (without the quotes).  Likewise,
-when code(word) is encountered, it is treated as a lyric.  The code(_)
-character is converted to a space; it provides a mechanism for
-creating words that contain spaces.  
+code(\lyric).  This mode is has rules that make it easy to include
+punctuation and diacritical marks in words.  A word in Lyrics mode
+begins with: an alphabetic character, code(_),
+code(?), code(!), code(:), code('), 
+the control characters code(^A) through code(^F), code(^Q) through
+code(^W), code(^Y), code(^^), any 8-bit character with ASCII code over
+127, or a two character combination of a backslash followed by one
+of code(`), code('), code(") or code(^).  
+Subsequent characters of a word can be any character that is not a
+digit and not white space.  One important consequence of this is that
+a word can end with code(}), which may be confusing if you thought the
+code(}) was going to terminate lyrics mode.  Any code(_) characters
+which appear in an unquoted word are converted to spaces, providing a
+mechanism for introducing spaces into words without using quotes.  
+Quoted words can also be used in lyrics mode to specify words that
+cannot be specified with the above rules.  Here are some examples.
+Not all of these words are printable by TeX().  
 verb(a&@&@&TSI|{[    % a word
-1THtrhortho     % not a "word"
+\'afoo}                % a word
+1THtrhortho     % not a word because it starts with a digit
+``Hello''       % not a word because it starts with `
 Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
-_ _ _ _         % 4 words: 4 spaces
+_ _ _ _         % 4 words, each one a space
 ))
 
-COMMENT(Well, " seems to present some problems.  Also `` seems to be
-problematic.  So the above statement isn't quite right.  Unless these
-characters are considered to be "white")
 
 COMMENT(
 These modes are of a lexical nature. Normal and Note mode largely
@@ -269,16 +340,14 @@ names are the Dutch note names.  The notes are specified by the
 letters code(c) through code(b), where code(c) is an octave below
 middle C and the letters span the ocatave above that C.  
 In Dutch, a sharp is formed by adding
-code(is).  A flat is formed by adding code(es).
-Double sharps and double flats are obtained by adding code(isis) or
-code(eses).  
+code(-is) to the end of a pitch name.  A flat is formed by adding code(-es).
+Double sharps and double flats are obtained by adding code(-isis) or
+code(-eses).  
 Lily has predefined sets of notenames
-for various nop(languages)footnote(These 
-are Dutch, English, German, Italian and Swedish.
-Simply include the language specific init file file(language.ly).).
-Rests are specified with the note name code(r).  There is also a note
-name code(s) which produces a nonprinting note of the specified
-duration.  
+for various nop(languages).  See Section ref(notelang) for details.
+Rests are specified with the note name code(r) or code(R).  
+There is also a note name code(s) which produces a nonprinting note of the
+specified duration.
 
 The optional octave specification takes the form of a series of single
 quote 
@@ -310,7 +379,7 @@ Whenever a C-sharp is desired,  you must specify a C-sharp.  LilyPond
 will determine what accidentals to  typeset  depending on the  key and
 context.   
 A reminder accidental can be forced by
-using the optional exclamation mark `code(!)'
+using the  optional exclamation mark `code(!)'
 on a pitch.
 mudela(fragment,verbatim,center)(
 cis' d' e' cis'  c'! d' e' c' 
@@ -337,11 +406,22 @@ a'4. b'4.
 In addition, the duration can be followed by a multiplier which is
 introduced with the asterisk code(*) and can be an integer or a
 fraction.  The multiplier changes the duration that LilyPond uses
-internally for the note, but it does not change the symbol that is
-printed.  
+internally for the note, but for notes it 
+does not change the symbol that is printed.  
 mudela(fragment,verbatim,center)(
 c'4*2 c'4*2 d'8*2/3 d'8*2/3
 )
+For long rests with durations equal to an integer number of whole notes,
+LilyPond produces output that indicates the duration of the rest.  If you use
+code(r) then one rest symbol will be printed and several measures left blank.
+If you use code(R) then all of the measure will be filled with whole rests.
+If you set the code(Score.SkipBars) property, then only one measure will be
+printed; with code(R), a number indicating the length of the rest will be
+displayed.  
+mudela(fragment,verbatim,center)(
+r1*3 R1*3
+\property Score.SkipBars=1
+r1*3 R1*3)
 
 Extra long notes can be obtained using the code(\breve) and
 code(longa) durations:
@@ -350,7 +430,7 @@ c'\breve gis'\longa
 )
 
 
-subsect(Beams and Tuplets)
+subsect(Note Spanners: Beams, Tuplets, Slurs and Ties)
 
 A beam is specified by surrounding the beamed notes with brackets
 code([) and code(]).  
@@ -380,50 +460,41 @@ mudela(fragment,verbatim,center)(
 [/3 b'8 b' b' ]/1  \[/3 a'4 a'8\]/1
 )
 
-COMMENT(The rest of this section needs to be rewritten.  I don't
-understand what's going on at all here.  The meaning of the lone ] is
-unclear.  And the : syntax is also unclear.  --Adrian)   
+COMMENT(This next bit needs to be fixed...or the language needs to be
+fixed.)
 
 Here is a combination
 mudela(fragment,verbatim,center)(
 [/3 a'8 a'16 a'] a'8 \]
 )
 
-Abbreviations
+Another type of spanner is the slur.  Slurs connects chords and try to
+avoid crossing stems.  A slur is started with code(CHAR(40)) and stopped with
+code(CHAR(41)).  The starting code(CHAR(40)) appears to the right of the first note
+in the slur.  The terminal code(CHAR(41)) apppears to the left of the first
+note in the slur.  This makes it possible to put a note in slurs from
+both sides:
 mudela(fragment,verbatim,center)(
-c'1:16 [:16 e'1 g']
-)
-
-mudela(fragment,verbatim,center)(
-c'4:32 [:16 c'8 d'8]
+f'()g'()a' [a'8 b']( a'4 g' )f'
 )
 
-
-
-subsect(Slurs and Ties)
-
-A tie connects two adjacent note heads
+A tie connects two adjacent note heads.  When used with chords, it
+connects all of the note heads.  Ties are indicated using the tilde symbol
+code(~) by analogy with TeX()'s tie which connects words.  For ties
+between chords, the input convention is somewhat peculiar.  You cannot
+write code(<c g>~<c g>), but rather must put the tilde after
+a note within the first chord.  
 
 mudela(fragment,verbatim,center)(
-e' ~ e'
+e' ~ e' <c'~ e' g'><c' e' g'>
 )
 
-Whereas a slur rather connects `chords', 
-and tries to avoid crossing stems
-
-mudela(fragment,verbatim,center)(
-e'( )e'
-)
-
-And of course, such a (legato) slur can span several notes
-mudela(fragment,verbatim,center)(
-c'( d' e' )f'
-)
 
 subsect(Note Ornaments)
 
 A variety of symbols can appear above and below notes to indicate
-different characteristics of the performance.  These symbols can be
+different characteristics of the performance.  
+These symbols can be
 added to a note with `var(note)code(-\)var(name)'.  Numerous different
 symbols are defined in file(script.ly).  Each symbol is defined using
 the code(\script) keyword which specifies where symbols appear.
@@ -454,48 +525,163 @@ mudela()(
 }
 )
 
+COMMENT( The following are defined in script.ly but do not work:
+
+portato lbheel rbheel lbtoe rbtoe lfheel rfheel lftoe rftoe )
+
 In addition, it is possible to place arbitrary strings of text or
 TeX() above or below notes by using a string instead of an identifier:
 `code(c^"text")'.  Fingerings can be placed by simply using digits.
+All of these note ornaments appear in the printed output but have no
+effect on the MIDI rendering of the music.
 
 To save typing,  a few common symbols  can  be  abbreviated  with
 single characters:
 mudela()(
 \score{ \notes {
-       \property Voice.textstyle = typewriter
+        \property Voice.textstyle = typewriter
         c''4-._"c-." s4
-        c''4--_"c--"  s4
+        c''4--_"c-{}-"  s4
         c''4-+_"c-+" s4
         c''4-|_"c-|" s4
         c''4->_"c->"  s4
         c''4-^_"c-\\^{ }"  s4 }
-       \paper { linewidth = 12.\cm; }})
+        \paper { linewidth = 12.\cm; }})
 
-Dynamic marks are specified by using an identifier after
-a note without a dash: code(c4 \ff).  The available  dynamic marks
-are:  code(\ppp),  code(\pp), code(\p), code(\mp), code(\mf),
-code(\f), code(\ff),  code(\fff), code(\fp), code(sf), and code(\sfz).
+Dynamic marks are specified by using an identifier after a note
+without a dash: code(c4 \ff).  Note that this syntax is inconsistent
+with the syntax for other types of ornaments.  The available dynamic
+marks are: code(\ppp), code(\pp), code(\p), code(\mp), code(\mf),
+code(\f), code(\ff), code(\fff), code(\fp), code(sf), and code(\sfz).
 
 A crescendo mark is started with code(\cr) and terminated with
 code(\rc).  A decrescendo mark is started with code(\decr) and
 terminated with code(\rced).
 
+Tremolo marks can be printed by a note by adding code(:)[var(length)]
+after the note.  The length must be at least 8.  A var(length) value
+of 8 gives one line across the note stem.  
+If the length is omitted,
+then the last value is used, or the value of the code(Abbrev)
+property if there was no last value.  To place tremolo marks in
+between two notes, begin with code([:)var(length) and end with code(]).
+The tremolo marks will appear instead of beams.  Putting more than two
+notes in such a construction will produce odd effects. 
+mudela(fragment,verbatim,center)(
+c'2:8 c':32 [:16 e'1 g'] [:8 e'4 f']
+)
+
+COMMENT(
+Is the last paragraph correct?  Is it called "tremolo"?  Why is
+"abbreviation" used?  (What is the unabreviated form?)
 
 
+mudela(fragment,verbatim,center)(
+c'4:32 [:16 c'8 d'8]
+)
+
+)
+
+
+sect(Other Ways to Enter Pitches)
+
+subsect(Pitch Names in Other Languages)
+label(notelang)
+
+The pitch names can be easily redefined using the code(\notenames) command.
+Note name definitions have been provided in various languages.  
+Simply include the language specific init file.  For example:
+code(\include "english.ly").  The available language files and the names
+they define are:
+
+verb(                        Note Names               sharp       flat
+nederlands.ly  c   d   e   f   g   a   bes b   -is         -es
+english.ly     c   d   e   f   g   a   bf  b   -s/-sharp   -f/-flat
+deutsch.ly     c   d   e   f   g   a   b   h   -is         -es
+norsk.ly       c   d   e   f   g   a   b   h   -iss/-is    -ess/-es
+svenska.ly     c   d   e   f   g   a   b   h   -iss        -ess
+italiano.ly    do  re  mi  fa  sol la  sid si  -d          -b)
+
+subsect(Relative Pitch Specification)
+label(relative)
+
+One very common error when entering music is to place notes in the wrong
+octave.  One way to avoid being confused by large numbers of octave changing
+marks is to use
+the code(\relative) keyword. 
+Music which appears within code(\relative) is
+interpreted differently.  The octave of a note is determined by making it as
+close to the previous note as possible.  The octave changing marks code(') and
+code(,) can then be added to raise or lower this note by octaves.  You have to
+specify a starting pitch because the first note of a list has no predecessor.  
+
+mudela(fragment,verbatim,center)(
+\relative c'' { c d b c, d b c' d 
+                b c,, d b }
+)
+
+When the preceeding item is a chord, the first note of the chord is used to
+determine the first note of the next chord.  But other notes within the second
+chord are determined by looking at the immediately preceeding note.  
+
+mudela(fragment,verbatim,center)(
+\relative c' { <c e g> 
+    <c' e g> <c, e' g> }
+) 
+
+The code(\relative) keyword can only appear in music, so there must be a
+surrounding code(\notes) keyword which does not appear in the fragments shown
+above.  Also note that if the music passed to a code(\relative) keyword 
+contains a code(\transpose) keyword, the tranposed music will not be
+processed in relative mode.  An additional code(\relative) must be placed
+inside the code(\transpose).  
+
+
+subsect(Tranposition of Pitches)
+label(transpose)
+
+Another way to modify the meaning of the note names is to use the
+code(\transpose) keyword.  This keyword allows you to transpose music.
+To use transposition, specify the pitch that middle C should be tranposed to.
+It is important to distinguish between enharmonic pitches as they can produce
+different transpositions.  To transpose up half a step, for example, either 
+code(\transpose cis') or code(\transpose des') will work.  But the first
+version will print sharps and the second version will print flats.  
+In this example, a scale in the key of E is transposed to F, or to E-sharp 
+with odd results.
+mudela(fragment,verbatim,center)(
+\relative c' { \key e; 
+  e fis gis a b cis dis e }
+)
+mudela(fragment,verbatim,center)(
+\transpose des' \relative c' { \key e; 
+   e fis gis a b cis dis e }
+)
+mudela(fragment,verbatim,center)(
+\transpose cis' \relative c' { \key e; 
+    e fis gis a b cis dis e }
+)
+If you want to use both code(\transpose) and code(\relative), then you must use
+code(\transpose) first.  Any code(\relative) keywords that are outside the 
+code(\transpose) have no effect on notes that appear inside the
+code(\transpose).  
+
 sect(Lyrics)
 
 Lyrics are entered like notes, with pitches replaced
 by text.  For example code(Twin-4 kle4 twin-4 kle4) enters four
-syllables, each with quarter note duration.  
+syllables, each with quarter note duration.  Note that the hyphen has
+no special meaning for lyrics, and does not introduce special symbols.
+See Section ref(modes) for a description of what is interpreted as a lyric.
 
 In order to instruct LilyPond to write lyrics underneath the
 staff, you must enter the lyrics context with code(\type Lyrics).  
 Lyrics should be entered in lyrics mode which is entered with code(\lyric).
 
-Two syllables or words that compose a single
-duration entry are bound together using an underscore: 
-code(He_could4 not4).  Here is a full example:
-mudela(verbatim)(\score{ 
+Spaces can be introduced into a lyric either by using quotes (code("))
+or by using an underscore without quotes: code(He_could4 not4).  All
+unquoted underscores are converted to spaces.  Here is a full example: 
+mudela(verbatim)(\score{
   <  \notes \transpose c'' {c d e c | c d e c | e f g'2 | 
                               e'4 f g'2 \bar "|."; }
      \type Lyrics \lyric { 
@@ -508,9 +694,11 @@ COMMENT(
 URG
                         Fr\`e-4 re Ja- que
                         Fr\`e- re Ja- que
+Why does this warrant an URG?
 )
 
 
+COMMENT(
 
 sect(Chords and Voices)
 
@@ -536,13 +724,15 @@ mudela(fragment,verbatim)(
 >
 )
 
+)
 
 sect(Time)  
 
 LilyPond aligns all musical objects according to the amount of time
 they occupy.  All of these objects have a duration.  When music is
-written in series using braces the duration is the sum of the 
-durations of the elements.  When music is stacked using angle
+written sequentially using braces the duration is the sum of the 
+durations of the elements.  When music is stacked into simultaneous music 
+using angle
 brackets, the duration is the maximum of the durations of the
 elements.  
 
@@ -568,7 +758,7 @@ default grouping can be changed using the \grouping keyword which
 takes a list of durations to specify the grouping. 
 
 
-
+COMMENT(
 sect(Composition: forming bigger structures)
 label(sec:grammar)
 
@@ -633,27 +823,31 @@ verb(
 { c <c e> <c e g> <c e g \transpose d' dis > }  % 4 increasing chords
 )
 
-
+)
 
 
 sect(Keywords)
 
-Keywords sometimes appear alone, but usually they require arguments. 
-A keyword may have a single argument, or a sequence of arguments separated
-by spaces and terminated by a semicolon:
-`code(\keyword argument argument ... ;)'
+Keywords sometimes appear alone, but usually they require arguments.
+A keyword may have a single argument, a sequence of arguments in
+braces, or a sequence of arguments separated by spaces and terminated
+by a semicolon.  The precise syntax of each keyword is shown below.
+Keywords must appear in the right context.  If you use a keyword in
+the wrong place, even if the usage is syntactically correct, you will
+get the message ``parse error'' from LilyPond.
 
 
 description(
 
-dit(code(\absdynamic) code({) var(code) code(})) Internal command for
+dit(code(\absdynamic) code({) var(code) code(})) Internal keyword for
 printing dynamic marks such as $f$ under music.  The parameter
 var(code) is unsigned and specifies the dynamic mark to print.
 Normally you should use the more user friendly abbreviations defined
 in the init file file(dynamic.ly).
 
-dit(code(\accepts) var(string)code(;)) This command can appear only within a
-code(\translator) block.  It specifies what contexts are allowed
+dit(code(\accepts) var(string)code(;)) This keyword can appear only within a
+code(\translator) block.  It specifies what contexts are allowed with the
+context that is being defined.  See Section ref(translators).  
 
 dit(code(\bar) var(bartype)code(;)) Prints a special bar symbol, or at
 measure boundaries, replaces the regular bar symbol with a special
@@ -666,23 +860,20 @@ If var(bartype) is set to code("empty") then nothing is printed, but a
 line break is allowed at that spot.  Note that the printing of special bars
 has no effect on the MIDI output.
 
-dit(code(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
+dit(mycode(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
 of bar lines.  If var(togglevalue) is 0 then bar line generation is
 turne off.   If var(togglevalue) is  1  then a bar is  immediately
 printed and bar generation is turned  on.
 
-dit(code(\clear)) Allowed only within code(\notename).  Clears all the
-previously defined note names.  
-
 dit(code(\clef) var(clefname)code(;)) Allowed only in music.  
 Sets the current clef.  The argument is
 a string which specifies the name of the clef.  Several clef names are
 supported.  If code(_8) or code(^8) is added to the end of a clef
 name then the clef lowered or raised an octave will be generated.  
 Here are the supported clef names with middle C shown in each clef:
-mudela()(
+mudela(center)(
 \score{
-  \notes{  
+  \notes{ \cadenza 1;
    %\property Voice.textstyle = typewriter
    \clef subbass; c'4-"\kern-10mm subbass" 
            \clef bass;    c'4^"\kern -8mm bass"
@@ -690,55 +881,17 @@ mudela()(
            \clef varbaritone; c'4^"\kern -10mm varbaritone"
            \clef tenor;     c'4_"\kern -10mm tenor"
            \clef "G_8";   c'4^"\kern -6mm G\_8"  }  
-\paper{ linewidth= 4.5 \in;
-Staff = \translator {
-        \type "Line_group_engraver_group";
-
-        defaultclef = violin;
-
-%       \consists "Bar_engraver";
-        \consists "Clef_engraver";
-        \consists "Key_engraver";
-        \consists "Local_key_engraver";
-        \consists "Time_signature_engraver";
-        \consists "Staff_sym_engraver";
-        \consists "Collision_engraver";
-        \consists "Rest_collision_engraver";
-        \consists "Separating_line_group_engraver";
-          
-        \accepts "Voice";
-        }
-
-}
-
+   \paper{ linewidth= 4.5 \in }
 }
 )
-mudela()(
+mudela(center)(
 \score{
-  \notes{\clef alto;    c'4_"\kern -10mm alto"
+  \notes{\cadenza 1; \clef alto;    c'4_"\kern -10mm alto"
            \clef mezzosoprano; c'4^"\kern -10mm mezzosoprano"
            \clef soprano;  c'4_"\kern -10mm soprano"
            \clef treble;  c'4^"\kern -6mm treble"
            \clef french;  c'4_"\kern -10mm french" }  
-\paper{ linewidth= 4.5 \in;
-Staff = \translator {
-        \type "Line_group_engraver_group";
-
-        defaultclef = violin;
-
-%       \consists "Bar_engraver";
-        \consists "Clef_engraver";
-        \consists "Key_engraver";
-        \consists "Local_key_engraver";
-        \consists "Time_signature_engraver";
-        \consists "Staff_sym_engraver";
-        \consists "Collision_engraver";
-        \consists "Rest_collision_engraver";
-        \consists "Separating_line_group_engraver";
-          
-        \accepts "Voice";
-        }
-}
+  \paper{ linewidth= 4.5 \in }
 }
 )
 The treble  clef  can also  be obtained using  the  names code(G) or
@@ -746,12 +899,9 @@ code(violin).  The bass clef is also available by code(\clef  F).
 
 dit(code(\cm)) Specify a dimension in centimeters. 
 
-dit(code(\consists) var(string)code(;)) This command can appear only within a
+dit(code(\consists) var(string)code(;)) This keyword can appear only within a
 code(\translator) block.  It specifies that an engraver named
-var(string) should be added to the translator.
-
-dit(code(\contains)) Produces a parse error.  (There is no rule in the
-grammar that refers to this token.)
+var(string) should be added to the translator.  See Section ref(translators).
 
 dit(code(\duration) code({) var(length) var(dotcount) code(})) Specify note
 duration.  The parameter var(length) is the negative logarithm (base
@@ -759,7 +909,7 @@ duration.  The parameter var(length) is the negative logarithm (base
 note, etc.  The number of dots  after  the  note is given by
 var(dotcount). 
 
-dit(code(\font) var(string)) Internal command.  Used within
+dit(code(\font) var(string)) Internal keyword.  Used within
 code(\symboltables) to specify the font.
 
 dit(code(\grouping) var(durationseq); )  Sets  the  metric structure of
@@ -768,14 +918,20 @@ For example, code(\duration 16*5;) specifies a grouping of five beats
 together in 5/16 time.  The default grouping is to have as many groups
 of 3 as possible followed by groups of two.  
 
+dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
+Specifies information about the music.  A header should appear at the
+top of the file describing the file's contents.  If a file has
+multiple code(\score) blocks, then a header should appear in
+each score block describing its contents.  Tools like code(ly2dvi) can
+use this information for generating titles.   Some possible key values
+are: title, opus, description, composer, enteredby, and copyright.
+
 dit(code(\in)) Specify a dimension in inches.  
 
 dit(code(\include) var(file)) Include the specified file.  The
 argument var(file) is a string.  The full filename including the
 file(.ly) extension must be given. 
 
-dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
-
 dit(code(\key) var(pitch)) Change key signature to that of
 var(pitch)-major.
 
@@ -783,8 +939,21 @@ dit(code(\keysignature) var(pitchseq);)
 Specify an arbitrary key signature.  The pitches from var(pitch) will
 be printed in the key signature in the order that they appear on the list.
 
+dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
+
+dit(code(\maininput)) Internal command.  This command is used for creating init
+files like file(init.fly) that read the user file into the middle of another
+file.  Using it in a user file will lead to an infinite loop.
+        
 dit(code(\mark) var(unsigned) or code(\mark) var(string)) Allowed in
-music only.  What does this do?
+music only.  Prints a mark over or under (?) the staff.  You must add
+code(Mark_engraver) to the Score context and it only seems to work if the
+mark appears at the beginning of a line.  
+
+dit(code(\midi) var(statementlist)) Appears in a score block to
+indicate that musical output should be produced.  See code(\tempo).
+
+dit(code(\mm)) Specify a dimension in millimeters. 
 
 dit(code(\musicalpitch) code({) var(octave) var(note) var(shift) code(})) 
 Specify note pitch.  The octave is specified by an integer,
@@ -793,47 +962,30 @@ to 7, with 0 corresponding to C and 7 corresponding to B.  The shift
 is zero for a natural, negative to add flats, or positive to add
 sharps.
 
-dit(code(\notes) var(music)) Enter note mode and process the
-specified music. 
-
-dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
-signature.  The default time signature  is 4/4.  
-
-dit(code(\midi) var(statementlist)) Appears in a score block to
-indicate that musical output should be produced.  See code(\tempo).
-
-dit(code(\mm)) Specify a dimension in millimeters. 
-
-dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
-Specifies information about the music.  A header should appear at the
-top of the file describing the file's contents.  If a file has
-multiple code(\score) blocks, then a header should appear in
-each score block describing its contents.  Tools like code(ly2dvi) can
-use this information for generating titles.   Some possible key values
-are: title, opus, description, composer, enteredby, and copyright.
-
 dit(code(\notenames) var(assignmentlist)) Define new note names.  
 The argument is a list of definitions of  the form
 var(name) = var(pitch),  where var(pitch) is specified with the
-code(\musicalpitch) command.  Another possibility is code(\clear)
-which can appear instead of an assignment.  
+code(\musicalpitch) keyword.  
 
-dit(code(\octave)) Generate a parse error.  Never referred to in the
-grammar.
+dit(code(\notes) var(music)) Enter note mode and process the
+specified music. 
 
-dit(code(\output) var(string)code(;)) Allowed only in
+dit(code(\)code(output) var(string)code(;)) Allowed only in
 code(\paper) block.  The parameter var(string) specifies an alternate
 name for the TeX() output.  A file(.tex) extension will be added to
 var(string) to produce the output file name.
 
-dit(code(\partial) var(duration)) Specify that the first measure of
-the music lasts only for the specified duration.
-
 dit(code(\paper) var(statmentlist)) 
 Appears in a score block to indicate that the music should be printed.
+The var(statmentlist) contains statements that change features of the
+output.  See Section ref(paper).  
 
-dit(code(\penalty) code(=) var(int)) Allowed only in musiclists.
-Discourages line breaks.
+dit(code(\partial) var(duration)) Specify that the first measure of
+the music lasts only for the specified duration.
+
+dit(code(\penalty) code(=) var(int)) Allowed only in music.
+Discourage or encourage line breaks.  See identifiers code(\break) and
+code(\nobreak) in Section ref(ident). 
 
 dit(code(\property) var(contextname)code(.)var(propname) code(=) var(value))
 Sets the var(propname) property of the context var(contextname) to the
@@ -843,28 +995,19 @@ dit(code(\pt)) Specify a dimension in points.
 
 dit(code(\relative) var(pitch) var(music)) Processes the specified
 var(music) in relative pitch
-mode.  In this mode, the octave of a pitch note is chosen so that the
-note is closest to the preceeding note.  
+mode.  In this mode, the octave of a pitch is chosen so that the
+pitch is closest to the preceeding pitch.  
 The argument var(pitch) is
 the starting pitch for this comparision.  In the case of chords, the
-first note of a chord is used as the base for the pitches in the next
-chord.  
-
-Because transposing changes both note names and octaves relativizing
-transposed music doesn't make any sense.  If you want to transpose
-relative music, do code(\transpose var(pitch) \relative var(pitch)
-var(music)), i.e., first enter the music in relative mode, and then
-transpose it by prepending the code(\transpose) keyword.
-code(\relative var(pitch) \transpose var(pitch)) has no effect.
+first note of a chord is used as the base for the first pitches in the next
+chord.  See Section ref(relative).
 
-For the same reason the first code(\relative) in code(\relative
-var(pitch1) \relative var(pitch2) var(music)) has no effect.
-
-
-dit(code(\score) var(statementlist)) Define music.
+dit(code(\score) var(statementlist)) Create a Score context.  This
+is the top level notation context.  
+COMMENT(this still needs work)
 
 dit(code(\script) code({) var(name) var(instaff) var(withstem)
-var(location) var(invertible) var(priority) code(})) This command is
+var(location) var(invertible) var(priority) code(})) This keyword is
 used the initialization file(script.ly) to define the various symbols
 that can appear above and below notes.  The first argument is the name
 of the symbol.  The second argument var(instaff) is 1 if the symbol
@@ -896,54 +1039,63 @@ printed.  It works in Note Mode or Lyrics Mode (but generates a
 mysterious error in lyrics).
 
 dit(code(\spandynamic) code({) var(kind) var(toggle) code(})) Internal
-command for crescendo and decrescendo symbols.  The first parameter
+keyword for crescendo and decrescendo symbols.  The first parameter
 var(kind) is set to 1 for a crescendo and -1 for a decrescendo.  The
 second parameter is set to 1 to start the mark and 2 to stop it.
 Users should use the abbreviations which are defined in the
 initialization file file(dynamic.ly).
 
-dit(code(\symboltables)) Internal command.  Used to create symbol
+dit(code(\symboltables)) Internal keyword.  Used to create symbol
 tables.  See initialization files file(paper*.ly), file(feta*.ly), and
 file(table*.ly).  
 
-dit(code(\table)) Internal command.  Used within code(\symboltables)
-to specify the tables.  See initialization  files. 
+dit(code(\table)) Internal keyword.  Used within code(\symboltables)
+to specify the tables.  See initialization files. 
 
 dit(code(\tempo) var(duration) = var(perminute)) Used within
 code(\midi) to specify the tempo.  For example, 
 `code(\midi { \tempo 4 = 76})' requests output with 76 quarter notes
 per minute. 
 
+
+dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
+signature.  The default time signature  is 4/4.  
+
+
 dit(code(\translator) var(statements) or code(\translator)
 var(context) = var(name)) The first variant appears only within
 code(\paper) and specifies a translator for
 converting music to notation.  The translator is specified with a
 single code(\type) statement and a series of code(\accepts), and
-code(\consists) statements.  The second variant appears in a
-musiclist.  It specifies that the current the contexts
+code(\consists) statements.  See Section ref(translators). 
+The second variant appears in 
+music.  It specifies that the current the contexts
 contained within the specified context should be shifted to the
 context with the specified name.  
 
 COMMENT( \translator seems like a strange name for the second
 operation, and is the overloading desireable? )
 
-dit(code(\type) var(contexttype) [code(=) var(contextname)]
-var(musiclist) or code(\type) var(translatortype)code(;)) The first
-variant is used only within musiclists to 
-create a instance of a context.  The new context
-can optionally be given a name.  The second variant appears within a
-code(\translator) block and specifies the type of translator being
-created.
-
 dit(code(\transpose) var(pitch) var(music)) Transposes the specified
-music.  Middle C is tranposed to var(pitch). 
+music.  Middle C is tranposed to var(pitch).  This is allowed in music only,
+and if it appears inside code(\relative), then any notes specified for
+transposition should be specified inside another code(\relative).  See Section
+ref(transpose).  
+
+dit(code(\type) var(contexttype) [code(=) var(contextname)]
+var(music) or code(\type) var(translatortype)code(;)) The first
+variant is used only within music to create an instance of a
+context.  The new context can optionally be given a name.  The
+specified var(music) is processed in the new context. The second
+variant appears within a code(\translator) block and specifies the
+type of translator being created.
 
 dit(code(\version) var(string)) Specify the version of Mudela that a
 file was written for.  The argument is the version number, for example
 code("1.0.1").  Note that the Mudela version is different from the
 LilyPond version.
 
-)
+)  
 
 
 sect(Notation Contexts)
@@ -951,47 +1103,48 @@ sect(Notation Contexts)
 Notation contexts provide information that appears in printed music
 but not in the music itself.  A new musical context is created using
 the code(\type) keyword: `code(\type) var(contexttype) [code(=)
-var(contextname)] var(musiclist)'.  The following context types are
+var(contextname)] var(music)'.  The following context types are
 allowed.
 
 description(
 
-dit(code(Lyrics)) Typesets lyrics.
+dit(code(LyricVoice)) Corresponds to a voice with lyrics.  Handles the printing
+of a single line of lyrics.  
 
 dit(code(Voice)) Corresponds to a voice on a staff.
   This context handles the conversion of noteheads,
   dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests.
 
+dit(code(Lyrics)) Typesets lyrics.  It can contain code(LyricVoice) contexts.
+
 dit(code(Staff)) Handles clefs, bar lines, keys,
-  accidentals.  It can contain code(Voice) or code(Lyrics) contexts.
+  accidentals.  It can contain code(Voice) contexts.
 
 dit(code(RhythmicStaff)) A context like code(Staff) but for printing
 rhythms.  Pitches are ignored; the notes are printed on one line.  
-It can contain code(Voice) or code(Lyrics) contexts. 
+It can contain code(Voice) contexts. 
 
 dit(code(GrandStaff)) Contains code(Staff) or code(RhythmicStaff)
 contexts.  It adds a brace on the left side grouping the staffs
 together. The bar lines of the contained staffs are connected vertically.
-It can contain code(Staff), code(RhythmicStaff) or code(Lyrics) contexts.
+It can contain code(Staff) contexts.
 
 dit(code(StaffGroup)) Contains code(Staff) or code(RhythmicStaff)
 contexsts.  Adds a bracket on the left side, grouping the staffs
 together.  The bar lines of the contained staffs are connected vertically.
-It can contain code(Staff), code(RhythmicStaff) or code(Lyrics) contexts.  
+It can contain code(Staff), code(RhythmicStaff), code(GrandStaff) or code(Lyrics) contexts.  
 
-dit(code(ChoireStaff)) Identical to code(StaffGroup) except that the
+dit(code(ChoirStaff)) Identical to code(StaffGroup) except that the
 contained staffs are not connected vertically.  
 
-COMMENT(Odd spelling of "choir".)
-
-dit(code(Score)) This is the top level notation context.  It is entered with
-the code(\score) command rather than the code(\type) command.  No
+dit(code(Score)) This is the top level notation context.  It is specified with
+the code(\score) keyword rather than the code(\type) command.  No
 other context can contain a code(Score) context.  This context handles
 the administration of time signatures.  It also makes sure that items
 such as clefs, time signatures, and key-signatures are aligned across
 staffs.  It can contain code(Lyrics), code(Staff),
 code(RhythmicStaff), code(GrandStaff), code(StaffGroup), and
-code(ChoireStaff) contexts.
+code(ChoirStaff) contexts.
 
 )
 
@@ -1000,161 +1153,258 @@ properties can be changed using the code(\property) command:
 `code(\property) var(context)code(.)var(propname) code(=) var(value)'.
 Properties can also be set within the code(\translator) block
 corresponding to the appropriate context.  In this case, they are
-assigned by `var(propname) code(=) var(value)'.
-
+assigned by `var(propname) code(=) var(value)'.  The settings made with
+code(\property) are processed after settings made in the code(\translator)
+block, so the code(\property) settings will override code(\translator)
+settings.  
+
+The code(\property) keyword will create any property you specify.
+There is no guarantee that a property will actually be used.  If you
+spell a property name wrong, there will be no error message.  In order to find
+out what properties are used, you must search the source code 
+for code(get_property).  
+Properties that are set in one context are inherited by all of the
+contained contexts.  This means that a property valid for the Voice
+context can be set in the Score context (for example) and thus take
+effect in all Voice contexts.  
+
+subsubsubsect(Lyrics properties)
 
 description(
-  dit(Lyrics properties)
 
-     description(
-        dit(code(textstyle)) Set the font for lyrics.  The available
-font choices are code(normaltext), code(roman), code(italic), code(bold)
+dit(code(textstyle)) Set the font for lyrics.  The available font
+choices are code(normaltext), code(roman), code(italic), code(bold)
 code(normaltext), code(large), code(Large), code(huge), and
-code(finger).  The code(finger) font can only display numbers.  
-Note also that you must be careful when using code(\property) in
-Lyrics mode.  Because of the way strings are parsed, either put quotes
-around the arguments to code(\property) or be sure to leave a space on
-both sides of the dot.  
-    dit(code(textalignment))
-Controls alignment of lyrics.
-Set to -1 to align the left end of the lyric with
-the note; set to 1 to align the right end of the lyric with the note.
-Set to 0 to align the center of the lyric with the note.  
-       )
-   dit(Voice properties)
-
-     description(  
-     dit(code(ydirection)) Determines the direction of
-stems, subscripts, beams, slurs, and ties.  Set to -1 to force them
-down, 1 to force them up, or 0 to let LilyPond decide.  This can be
-used to distinguish between voices on the same staff.  The
+code(finger).  The code(finger) font can only display numbers.  Note
+also that you must be careful when using code(\property) in Lyrics
+mode.  Because of the way strings are parsed, either put quotes around
+the arguments to code(\property) or be sure to leave a space on both
+sides of the dot.
+
+dit(code(textalignment)) Controls alignment of lyrics.  Set to \left
+to align the left end of the lyric with the note; set to \right to
+align the right end of the lyric with the note.  Set to \center to
+align the center of the lyric with the note.  
+
+)
+
+subsubsubsect(Voice properties)
+
+description(  
+
+dit(code(midi_instrument)) Sets  the  instrument for MIDI  output. 
+
+dit(code(transposing)) Tranpose the MIDI output.  Set this property to
+the number of half-steps to transpose by.
+
+dit(code(ydirection)) Determines the direction of stems, subscripts,
+beams, slurs, and ties.  Set to code(\down) to force them down,
+code(\up) to force them up, or code(\free) to let LilyPond decide.
+This can be used to distinguish between voices on the same staff.  The
 code(\stemdown), code(\stemup), and code(\stemboth) identifiers set
-this property.  
-   dit(code(slurydirection)) Set to 0 for free choice of slur
-direction, set to 1 to force slurs up, set to 0 to force slurs down.
-The shorthands code(\slurup), code(\slurdown), and code(\slurboth) are
-available.  
+this property.  See also the identifiers code(\voiceone),
+code(\voicetwo), code(\voicethree) and code(\voicefour).
+
+dit(code(slurydirection)) Set to code(\free) for free choice of slur
+direction, set to code(\up) to force slurs up, set to code(\down) to
+force slurs down.  The shorthands code(\slurup), code(\slurdown), and
+code(\slurboth) are available.
 
-   dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs,
-and a larger value for dashed slurs.  Identifiers code(\slurnormal)
-  and code(\slurdotted) are  predefined  to  set the first two settings.
+dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs, and
+a larger value for dashed slurs.  Identifiers code(\slurnormal) and
+code(\slurdotted) are predefined to set the first two settings.
 
-   dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
+dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
 horizontally if they collide with other notes.  This is useful when
 typesetting many voices on one staff.  The identifier code(\shift) is
-defined to enable this.  
+defined to enable this.
+
+dit(code(dynamicdir)) Determines location of dynamic marks.  Set to
+code(\up) to print marks above the staff; set to code(\down) to print
+marks below the staff.
 
-   dit(code(textalignment)) Controls alignment of superscripted and
-subscripted text.  Set to -1 to align the left end of the text with
-the note; set to 1 to align the right end of the text with the note.
-Set to 0 to align the center of the text with the note.  
-  dit(code(textstyle)) Set the text style for superscripts and
+dit(code(textalignment)) Controls alignment of superscripted and
+subscripted text.  Set to \left to align the left end of the text with
+the note; set to \right to align the right end of the text with the
+note.  Set to \center to align the center of the text with the note.
+
+dit(code(textstyle)) Set the text style for superscripts and
 subscripts.  See above for list of text styles.
 
-  dit(code(fontsize)) Can be used to select smaller font sizes for music.  The
-  normal font size is 0, and the two smaller sizes are -1 and -2.
+dit(code(fontsize)) Can be used to select smaller font sizes for
+music.  The normal font size is 0, and the two smaller sizes are -1
+and -2.
+
+dit(code(pletvisibility)) Determines whether tuplets of notes are
+labelled.  Setting to 0 shows nothing; setting to 1 shows a number;
+setting to 2 shows a number and a bracket if there is no beam; setting
+to 3 shows a number, and if there is no beam it adds a bracket;
+setting to 4 shows both a number and a bracket unconditionally.  
 
-  dit(code(pletvisibility)) Determines whether tuplets of notes are
-  labelled.   Setting to 0 shows nothing; setting to 1  shows a
-  number; setting to 2  shows a  number and  a bracket if there is  no
-  beam; setting  to  3 shows  a number, and if there is no beam it
-  adds a  bracket; setting  to 4 shows both a  number  and  a bracket
-  unconditionally.   
 )
 
-dit(Staff properties)
+subsubsubsect(Staff properties)
 
- description(
+description(
  
-   dit(code(defaultclef)) Determines the default clef.  See code(\clef)
-   keyword.
+dit(code(defaultclef)) Determines the default clef.  See code(\clef)
+keyword.
 
-   dit(code(nolines)) If set to 1, then the staff has only one line instead
- of the usual five lines.
-    
-   dit(code(barAlways)) If set to 1 a bar line is drawn after each note.
+dit(code(nolines)) Sets the number of lines that the staff has.
+dit(code(barAlways)) If set to 1 a bar line is drawn after each note.
+
+dit(code(defaultBarType)) Sets the default type of bar line.  See
+code(\bar) keyword.
+
+
+
+
+dit(code(keyoctaviation)) If set to 1, then keys are the same in all
+octaves.  If set to 0 then the key signature for different octaves can
+be different and is specified independently: code(\keysignature bes
+fis').  The default value is 1.  Can be set to zero with
+code(\specialkey) or reset to 1 with code(\normalkey).
 
-   dit(code(defaultBarType)) Sets the default  type of bar  line.  See
-   code(\bar) keyword.   
+dit(code(instrument) and code(instr)) If code(Staff_margin_engraver)
+is added to the Staff translator, then the code(instrument) property
+is used to label the first line of the staff and the code(instr)
+property is used to label subsequent lines.
+COMMENT(This prints the instrument name on top of the staff lines.)
 
-   dit(code(keyoctaviation)) If set to 1, then keys are the same in all
-   octaves.  If set to 0 then the key signature for different octaves
-   can be different and is specified independently:
-   code(\keysignature bes fis').  The default value
-   is 1.  Can be set to zero with code(\specialkey) or reset to 1 with
-   code(\normalkey).  
+dit(code(abbrev)) Set length for tremolo to be used if no length is
+explicitly specified.
 
-   dit(code(instrument) and code(instr)) If code(Staff_margin_engraver) is
-   added to the Staff translator, then the code(instrument) property is used to
-   label the first line of the staff and the code(instr) property is used to
-   label subsequent lines.
-COMMENT(Check that this works)
+dit(code(createKeyOnClefChange)) Set to a nonempty string if you want key
+signatures to be printed when the clef changes.  Set to the empty string (the
+default) if you do not want key signatures printed.
 
-   dit(code(midi_instrument)) Sets  the  instrument for MIDI  output. 
 
-   dit(code(transposing)) Tranpose the MIDI  output. 
-COMMENT(What syntax?   "0 c" "2 c" ???)
+dit(code(timeSignatureStyle)) Changes the default two-digit layout
+   for time signatures. The following values are recognized:
+   description(
+      dit(code(C)): 4/4 and 2/2 are typeset as C and struck C,
+      respectively. All other time signatures are written with two digits.
+      dit(code(old)): 2/2, 3/2, 3/4, 4/4, 6/4 and 9/4 are typeset with
+      old-style mensuration marks. All other time signatures are 
+      written with two digits.
+      dit(code(1)): All time signatures are typeset with a single
+      digit, e.g. 3/2 is written as 3.
+      dit(code(C2/2,C4/4, old2/2, old3/2, old3/4, old4/4, old6/4 or
+      old9/4)): Tells Lilypond to use a specific symbol as time
+      signature.
+   )
+
+The different time signature characters are shown below with
+their names:
+mudela(fragment,center)(
+\relative c'' {
+\property Voice.textstyle = typewriter
+\property Staff.timeSignatureStyle = "C"
+\time 2/2; a2^"C" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old3_2"
+a2_"old3\_2" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "oldC"
+a2^"oldC" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old6_4"
+a2_"old6\_4" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old9_4"
+a2^"old9\_4" a2
+}
+)
+
+COMMENT( timeSignatureSymbol?  timeSignatureChar? )
+
 
-     dit(code(ydirection))   What does this do in staff ???
 )
    
-  dit(GrandStaff  properties)
 
-    description( 
-      dit(code(maxVerticalAlign))
-      dit(code(minVerticalAlign))
-      )
 
-   dit(Score properties)
+subsubsubsect(GrandStaff properties)
+
+description( 
+
+dit(code(maxVerticalAlign)) Set the maximum vertical distance between
+staffs.
+
+dit(code(minVerticalAlign)) Set the minimum vertical distance between
+staffs.  
 
-   description(
-    dit(code(part))  Set  to a part  number  for  music with  several  parts.   
-      Each part has its own code(\score) block  with a different part setting.  
-   dit(code(SkipBars)) ???
-
-   dit(code(beamquantisation)) Set to 0 for no  quantization.  Set  to 1 to
-   quantize  position  and  slope.  Set to 2 to  avoid  wedges.   These three
-   settings  are available via code(\beamposfree),  code(\beamposnormal),  and
-   code(\beampostraditional).    
-
-   dit(code(beamslopedamping)) Set to 0 for undamped beams.  Set to 1 for
-   damped beams.  Set to 100000 for beams with zero slope.  The identifiers
-   code(\beamslopeproportional), code(\beamslopedamped), and
-   code(\beamslopezero) each set the corresponding value.
-  )
-       
 )
 
+subsubsubsect(Score properties)
+
+description(
+
+dit(code(SkipBars)) Set to 1 to skip the empty bars that are produced
+by multimeasure notes and rests.  These bars will not appear on the
+printed output.  Set to zero (the default) to expand multimeasure
+notes and rests into their full length, printing the appropriate
+number of empty bars so that synrchonization with other voices is
+preserved.  COMMENT(meaning of "skip" here seems to be different from
+the meaning used for the keyword \skip.)
+
+dit(code(beamquantisation)) Set to code(\none) for no quantization.
+Set to code(\normal) to quantize position and slope.  Set to
+code(\traditional) to avoid wedges.  These three settings are
+available via code(\beamposfree), code(\beamposnormal), and
+code(\beampostraditional).
+
+dit(code(beamslopedamping)) Set to code(\none) for undamped beams.
+Set to code(\normal) for damped beams.  Set to code(\infinity) for
+beams with zero slope.  The identifiers code(\beamslopeproportional),
+code(\beamslopedamped), and code(\beamslopezero) each set the
+corresponding value.
+
+)
+       
 
 COMMENT(
 
 Mystery properties:
 
-bar-column-engraver.cc:  "barColumnPriority"
-bar-number-engraver.cc:  "barNumberBreakPriority"
-bar-number-engraver.cc:  "barScriptPadding"
-dynamic-engraver.cc:     "dynamicdir"
-mark-engraver.cc:        "markScriptPadding"
-mark-engraver.cc:        "markBreakPriority"
-span-bar-engraver.cc:    "singleStaffBracket"
-staff-margin-engraver.cc:"marginBreakPriority"
-stem-engraver.cc:        "abbrev"
+bar-number-engraver.cc:  "barScriptPadding"  vertical space for numbers
+mark-engraver.cc:        "markScriptPadding" vertical space for marks
+span-bar-engraver.cc:    "singleStaffBracket" do single staffs get a bracket?
+bar-column-engraver.cc:  "barColumnPriority"        
+bar-number-engraver.cc:  "barNumberBreakPriority"   Control horizontal ordering
+mark-engraver.cc:        "markBreakPriority"      of bars, clefs, keysig
+staff-margin-engraver.cc:"marginBreakPriority"    etc.  Slated for revision
 )
 
-sec(Pre-defined Identifiers)
+sect(Pre-defined Identifiers)
+label(ident)
 
 Various identifiers are defined in the initialization files to
 provide shorthands for some settings.  
 
 description(
+dit(code(\break)) Force a line break in music by using a large
+argument for the keyword code(\penalty). 
+dit(code(\center)) Used for setting textalignment property.  Is set to 0.
 dit(code(\cr)) Start a crescendo.
 dit(code(\decr)) Start a decrescendo.
+dit(code(\down)) Used for setting direction setting properties.  Is
+equal to -1.  
 dit(code(\f)) Print forte symbol on the preceeding note.
 dit(code(\ff)) Print fortissimo symbol on the preceeding note. 
 dit(code(\fff)) Print fortississimo symbol on preceeding note. 
 dit(code(\fp)) Print fortepiano symbol on preceeding note. 
+dit(code(\free)) Used for setting direction setting properties.  Is
+equal to 0.  
+dit(code(\Gourlay)) Used for setting the paper variable
+code(castingalgorithm).  Is equal to 1.0.  
+dit(code(\infinity)) Used for setting the Score.beamslopedamping
+property.  Is actually equal to 10000.  
+dit(code(\left)) Used for setting textalignment property.  Is equal to -1.
 dit(code(\mf)) Print mezzoforte symbol on preceeding note. 
 dit(code(\mp)) Print mezzopiano symbol on preceeding note. 
+dit(code(\nobreak)) Prevent a line break in music by using a large
+negative argument for the keyword code(\penalty). 
+dit(code(\none)) Used for setting Score.beamslopedamping and
+Score.beamquantisation properties.  Is equal to 0.
+dit(code(\normal)) Used for setting Score.beamslopedamping and
+Score.beamquantisation properties.  Is equal to 1.
 dit(code(\normalkey)) Select normal key signatures where each octave
 has the same key signature.  This sets the Staff.keyoctaviation property.
 dit(code(\p)) Print a piano symbol on preceeding note. 
@@ -1162,10 +1412,13 @@ dit(code(\pp)) Print pianissimo symbol on preceeding note.
 dit(code(\ppp)) Print pianississimo symbol on preceeding note. 
 dit(code(\rc)) Terminate a crescendo. 
 dit(code(\rced)) Terminate a decrescendo
+dit(code(\right)) Used for setting textalignment property.  Is set to 1.
 dit(code(\sf)) Print a ?? symbol on preceeding note. 
 dit(code(\sfz)) Print a ?? symbol on preceeding note. 
-dit(code(\shift)) Enable note heads that collide with other note heads
-to be shifted horiztonally.  This sets the Voice.hshift property.
+dit(code(\shiftoff)) Disable horizontal shifting of note heads that collide.  
+Sets the Voice.hshift property.
+dit(code(\shifton)) Enable note heads that collide with other note heads
+to be shifted horiztonally.  Sets the Voice.hshift property.
 dit(code(\slurboth)) Allow slurs to be above or below notes.  This
 sets the Voice.slurydirection property. 
 dit(code(\slurdown)) Force slurs to be below notes. This sets the
@@ -1179,40 +1432,203 @@ direction.  This sets the Voice.ydirection property.
 dit(code(\stemdown)) Force stems, beams, and slurs to point down.
 This sets the Voice.ydirection property. 
 dit(code(\stemup)) Force stems, beams and slurs to point up.  This
-sets the Voice.ydirectoin property. 
+sets the Voice.ydirection property. 
+dit(code(\traditional)) Used for setting the 
+Score.beamquantisation property.  Is equal to 2.  
+dit(code(\up)) Used for setting various direction properties.  Is
+equal to 1. 
+dit(code(\voiceone)) Enter Voice context called code(one) and force stems down.
+(See code(\stemdown).)
+dit(code(\voicetwo)) Enter Voice context called code(two) and force stems
+up. (See code(\stemup).)
+dit(code(\voicethree)) Enter Voice context called code(three) and force stems
+up.  
+dit(code(\voicefour)) Enter Voice context called code(four), force stems down
+and turn on horizontal shifting.  (See code(\stemdown) and code(\shifton).)
+dit(code(\Wordwrap)) Used for setting the paper variable
+code(castingalgorithm).  Equal to 0.0.  
 )
 
 
 sect(The code(\paper) Block)
+label(paper)
 
 The code(\paper) block may begin with an optional identifier reference.  No
 identifier references are allowed anywhere else in the block.  
-The keywords code(\shape), code(\output) and code(\translator) may
+The keywords code(\shape), code(\)code(output) and code(\translator) may
 appear in this block.  In addition, variable assignments may appear.  
 The variables control layout details and are set to reasonable
-defaults that depend on the font size in use. 
+defaults that depend on the font size in use.  The only way to find out what
+variables are supported is to search the source code for code(get_var). 
 
 subsect(Paper variables)
 
+There are a large number of paper variables that are used to set internal
+details of the layout.  Usually you will not want to change these variables.
+Two variables that you may want to change are code(linewidth) and code(indent).
+
 description(
   dit(var(integer)) If an integer appears on the left side of an
 assignment then a code(\symboltables) keyword must appear on the right
-side.  This defines a font.  
-
-dit(code(arithmetic_basicspace))
-dit(code(arithmetic_multiplier))
-dit(code(basicspace))
-dit(code(beam_thickness)) Specify the thickness of beams
-dit(code(geometric))
+side.  This defines a music font at a particular size.  See Voice
+property code(\fontsize).
+
+dit(code(arithmetic_basicspace) and code(arithmetic_multiplier))
+The space taken by a note is determined by the formula 
+verb(arithmetic_multiplier * ( c + time ))
+where code(time) is the amount of time a note occupies.  The value of
+code(c) is affected by code(arithmetic_basicspace).  Increasing
+code(arithmetic_basicspace) will increase code(c).
+dit(code(barsize)) Specify height of bars.  This value may need to be
+adjusted if you change the number of lines in the staff.
+dit(code(beam_dir_algorithm)) Specify algorithm for determining
+whether beams go up or down.  It is real valued.  If set to 2.0 then
+majority selection is used.  If set to 3.0, then mean selection is
+used based on the mean center distance.  If set to 4.0 then median
+selection is used, based on the median center distance.  
+dit(code(beam_ideal_stem1))
+dit(code(beam_ideal_stem2))
+dit(code(beam_minimum_stem1))
+dit(code(beam_minimum_stem2))
+dit(code(beam_multiple_break))
+dit(code(beam_slope_damp_correct_factor))
+dit(code(beam_thickness)) Specify the thickness of beams.
+dit(code(castingalgorithm)) 
+dit(code(forced_stem_shorten)) Stems that have been forced to go the
+unnatural direction are shortened by this amount.  Equal to
+code(\interline) by default.  
+dit(code(gourlay_energybound))
+dit(code(gourlay_maxmeasures)) Maximum number of measures per line
+when using Gourlay method.
+Decreasing this greatly reduces computation time.  Default value: 10.  
 dit(code(indent)) Sets the indentation of the first line of music.  
 dit(code(interbeam))
 dit(code(interbeam4))
-dit(code(interline))
-dit(code(internote))
+dit(code(interline))  The distance between two staff
+lines, calculated from the center of the lines.  
 dit(code(linewidth))  Sets the width of the lines.  If it is set to
--1, then a single unjustified line is produced.  
-dit(code(notewidth))
+-1.0, then a single unjustified line is produced.  
+dit(code(notewidth)) Width of an average note head.  
 dit(code(rulethickness)) Determines thickness of staff lines and bars. 
-dit(code(staffheight))
-dit(code(unitspace))
+dit(code(slur_clip_angle))
+dit(code(slur_clip_height))
+dit(code(slur_clip_ratio))
+dit(code(slur_height_limit))
+dit(code(slur_ratio))
+dit(code(slur_rc_factor))
+dit(code(slur_slope_damping))
+dit(code(slur_thickness))
+dit(code(slur_x_gap))
+dit(code(slur_x_minimum))
+dit(code(staffheight)) The height of the staff from the center of the
+bottom line to the center of the top line.  Equal to to code(4 * \interline).
+dit(code(stem_length)) Specify length of stems for notes in the staff
+that don't have beams.  
+dit(code(stemthickness)) Specifies the thickness of the stem lines.  
+dit(code(tie_slope_damping))
+dit(code(tie_x_minimum))
+)
+
+subsect(Translators)
+label(translators)
+
+The behavior of notation contexts is defined by the translators for
+those contexts.  The translator for a context specifies what notations
+are handled by the context, it specifies what other contexts the
+context can contain, and it sets property values for the context.  The
+default contexts are all defined in file(engraver.ly).  An easy way to
+change the behavior of a context is to copy the definition from that
+file and modify it.  
+
+The first thing that appears inside a code(\translator)
+definition is the type of the context being created.  There are 
+four types:
+description(
+  dit(code(Engraver_group_engraver))
+  dit(code(Hara_kiri_line_group_engraver))
+  dit(code(Line_group_engraver_group))
+  dit(code(Score_engraver))  
 )
+COMMENT( The names of these types seem somewhat confusing. )
+
+After the type of the context is specified, property assignments and
+code(\consists) and code(\accepts) keywords can appear in any order.  
+Each code(\accepts) keyword specifies what contexts can be contained
+inside this one.  
+
+The code(\consists) keywords specify which notations are
+handled by the context.  Each code(\consists) keyword specifies the
+name of an engraver which handles a certain notation.  
+Here is a list
+of the engravers. 
+
+description(
+dit(code(Abbreviation_beam_engraver))
+dit(code(Bar_column_engraver)) 
+dit(code(Bar_engraver)) Engraves bar lines.  Normally in code(Staff) and
+code(RhythmicStaff).  
+dit(code(Bar_number_engraver)) Engrave bar numbers.  These numbers
+appear at the start of each line.  Not normally in any translator.  Can
+be added to code(Score) for Score-wide numbering or to code(Staff) for
+numbering on each staff.  
+
+dit(code(Beam_engraver)) Handles beam requests by engraving beams.  Normally
+appears in the code(Voice) translator.  If omitted, then notes will be printed
+with flags instead of beams.
+
+dit(code(Beam_req_swallow_translator)) Swallows beam requests.  In
+code(LyricVoice).  
+dit(code(Clef_engraver)) Engraves the clef symbol.  Normally in code(Staff).
+dit(code(Collision_engraver))
+dit(code(Dot_column_engraver)) Engraves dots on dotted notes shifted to the
+right of the note.  Normally in code(Voice).  If omitted, then dots appear on
+top of the notes.  
+dit(code(Dynamic_engraver)) Engraves dynamics symbols.  Normally in code(Voice).
+dit(code(Font_size_engraver))
+dit(code(Key_engraver)) Engraves the key signature.  Normally in code(Staff).
+dit(code(Local_key_engraver))
+dit(code(Lyric_engraver)) Engraves lyrics.  Normally in code(LyricVoice).
+dit(code(Multi_measure_rest_engraver)) Engraves multi-measure rests that are
+produced with code(R).  Normally in code(Voice).
+dit(code(Note_heads_engraver)) Engraves note heads.  Normally in code(Voice).
+Removing this gives a fatal error.  
+COMMENT(Perhaps should be Note_head_engraver)
+dit(code(Piano_bar_engraver))
+dit(code(Pitch_squash_engraver)) Treat all pitches as middle C.  Used in
+code(RhythmicStaff).  Note that the notes move, but the locations of
+accidentals stay the same. 
+dit(code(Plet_engraver)) Engraves brackets and the number over tuplets.  In
+code(Voice).  
+dit(code(Plet_swallow_engraver)) Swallows tuplet requests without any output.
+In code(LyricVoice).  
+COMMENT( Should this be named Plet_req_swallow_translator? )
+dit(code(Priority_horizontal_align_engraver))
+dit(code(Rest_collision_engraver)) Handles collisions of rests. In code(Staff).
+dit(code(Rest_engraver)) Engraves rests.  Normally in code(Voice).
+dit(code(Rhythmic_column_engraver))
+dit(code(Score_priority_engraver))
+dit(code(Script_engraver)) Handles note ornaments generated by code(\script).
+Normally in code(Voice).  
+dit(code(Separating_line_group_engraver))
+dit(code(Skip_req_swallow_translator))
+dit(code(Slur_engraver)) Engraves slurs.  Normally in code(Voice).
+dit(code(Span_bar_engraver)) Engraves lines across multiple staffs.  Normally
+in code(Staffgroup) and code(GrandStaff).  Removing this from code(StaffGroup)
+gives the definition of code(ChoirStaff).  
+dit(code(Span_score_bar_engraver))
+dit(code(Staff_group_bar_engraver))
+dit(code(Staff_margin_engraver)) Prints the name of the instrument
+(specified by code(Staff.instrument) and code(Staff.instr)) at the
+left of the staff.  
+dit(code(Staff_sym_engraver))
+dit(code(Stem_engraver)) Engraves stems.  Normally in code(Voice).
+dit(code(Ties_engraver)) Engraves ties.  Normally in code(Voice).
+COMMENT(perhaps should be named Tie_engraver?)
+dit(code(Time_signature_engraver)) Engraves the time signature.  Normally in
+code(Staff) and code(RhythmicStaff).
+dit(code(Timing_engraver)) Responsible for synchronizing timing information
+from staffs.  Normally in code(Score).  In order to create polyrhythmic music,
+this engraver should be removed from code(Score) and placed in code(Staff).
+dit(code(Vertical_align_engraver)) 
+)
+
index a8e7f025e263a8602af0f4b241c836d02f259bf9..fbaf68ea12d26987d882d0691a14846053c2a045 100644 (file)
@@ -687,7 +687,7 @@ So the general form actually is `mycode(\keyword argument argument ... ;)'
 Let us review these commands:
 
 description(
-dit(mymycode(\clef) var(clefname)) This command sets the current clef for notation,
+dit(mycode(\clef) var(clefname)) This command sets the current clef for notation,
   i.e., a clef symbol is printed and the notes following this command
   are shifted vertically.  The argument is a string, the name of the
   new clef. The default clef is the treble clef.
@@ -696,12 +696,12 @@ dit(mymycode(\clef) var(clefname)) This command sets the current clef for notati
     \clef "treble"; c'4
     \clef "alto"; c'4    
   )
-dit(mymycode(\key) var(pitch)) This command changes the current key signature.  The
+dit(mycode(\key) var(pitch)) This command changes the current key signature.  The
   key signature is printed at the start of every line.  The argument
   is the name of the corresponding major key.  The key of C-minor can 
   thus be specified as `mycode(\key es)'.
   
-dit(mymycode(\keysignature) var(pitchlist))
+dit(mycode(\keysignature) var(pitchlist))
 
 This command changes the current key signature.  Unlike the
 `mycode(\key)' command, this command can produce arbitrary key
@@ -714,7 +714,7 @@ command `mycode(\keysignature fis es bis)' provides a more exotic
 example.
 
 
-dit(mymycode(\time) var(numerator)mycode(/)var(denominator))
+dit(mycode(\time) var(numerator)mycode(/)var(denominator))
   This command changes the current time signature.  LilyPond uses the
   time signature to
   calculate where to place the bars that start a measure.  These bars
@@ -730,7 +730,7 @@ song actually has a 2/4 time signature, so a metrically more correct
   )
 
 
-dit(mymycode(\cadenza) var(togglevalue)) When typesetting music without a
+dit(mycode(\cadenza) var(togglevalue)) When typesetting music without a
 regular meter (such as an ad libitum cadenza), no bar lines should be
 printed.  In LilyPond you can achieve this by issuing the command
 `mycode(\cadenza 1)': it turns off the automatically
@@ -740,7 +740,7 @@ You switch them on again with `mycode(\cadenza 0)', and then a bar line
 is printed.  LilyPond will act as if you are again at the start of a
 measure.
 
-dit(mymycode(\bar) var(bartype))
+dit(mycode(\bar) var(bartype))
   This command lets you print special bar
   lines and repeat symbols.  You can also use it to allow line breaks
   when entering cadenzas.  The argument var(bartype) is a string that
@@ -761,7 +761,7 @@ mudela(fragment,verbatim)(
 
 
   
-dit(mymycode(\partial) var(duration)) some music starts with a measure that
+dit(mycode(\partial) var(duration)) some music starts with a measure that
 isn't fully filled, a so-called upstep.  The mycode(\partial) command
 allows you to make
 upsteps. The argument is a duration similar to the duration of a note.
@@ -774,7 +774,7 @@ Example:
     [d'8 dis'] e' c''4 e'8 c''4 
   )
 
-  dit(mymycode(\grouping) var(durationslist)) sets the metric structure of the measure.
+  dit(mycode(\grouping) var(durationslist)) sets the metric structure of the measure.
     Its effect can best be shown by an example:
     mudela(fragment,verbatim)(
         \time 5/16;
@@ -976,9 +976,9 @@ mudela()(\score{
 \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
 \paper { 
   linewidth = -1.;
-  Staff = \translator {
+  \translator {
     \type "Line_group_engraver_group";
-
+    Staff ;
     defaultclef = violin;
 
     \consists "Timing_engraver";
@@ -1000,9 +1000,9 @@ mudela()(
   \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
   \paper{
   linewidth = -1.;
-    Staff = \translator {
+    \translator {
     \type "Line_group_engraver_group";
-    defaultclef = violin;
+    defaultclef = violin;Staff;
     \consists "Time_signature_engraver";
     \consists "Separating_line_group_engraver";
     \accepts "Voice";
@@ -1018,9 +1018,9 @@ mudela()(
   \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
   \paper{
   linewidth = -1.;
-    Staff = \translator {
+    \translator {
     \type "Line_group_engraver_group";
-    defaultclef = violin;
+    defaultclef = violin;Staff ;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
     \consists "Separating_line_group_engraver";
@@ -1036,9 +1036,9 @@ mudela()(\score{
   \notes\relative c' { \time 2/4; g'4 c,4
 a'4 f4 e c d2 } \paper {
   linewidth = -1.;
-  Staff = \translator {
+  \translator {
     \type "Line_group_engraver_group";
-
+    Staff ;
     defaultclef = violin;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
@@ -1057,9 +1057,9 @@ mudela()(\score {
   \notes \relative c' {\clef alto;  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
 \paper {
   linewidth = -1.;
-  Staff = \translator {
+   \translator {
     \type "Line_group_engraver_group";
-
+    Staff;
      defaultclef = violin;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
@@ -1574,10 +1574,15 @@ verb(
 \translator
 {
         \type "Engraver_group_engraver";
+
+       "ContextName"
+
         \accepts "...";
         \accepts "...";
         \accepts "...";
 
+
+
         \consists " ... ";
         \consists " ... ";
         \consists " ... ";
@@ -1634,30 +1639,14 @@ mycode(Timing_engraver).
 
 mudela(verbatim)(
 polymetricpaper = \paper {
-  Score = \translator {
-    \type Score_engraver;
-    \consists "Score_priority_engraver";
-    \consists "Priority_horizontal_align_engraver";
-    \consists "Vertical_align_engraver";
-    % \consists "Timing_engraver"; % removed Timing_engraver
-    \accepts "Staff";
+  \translator {
+    \ScoreContext
+    \remove "Timing_engraver";
   }
 
-  Staff = \translator {
-    \type "Line_group_engraver_group";
-
-    defaultclef = violin;
-
-    \consists "Bar_engraver";
-    \consists "Clef_engraver";
-    \consists "Key_engraver";
-    \consists "Local_key_engraver";
-    \consists "Time_signature_engraver";
-    \consists "Timing_engraver";  % added Timing_engraver
-    \consists "Staff_sym_engraver";
-    \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
+  \translator {
+    \StaffContext
+    \consists "Timing_engraver";
   }
 }
 \score {
index 2c1d6be30842512900fbd484e72ba52c96e9cd09..4dbb07f35813e0494929d024b2ad06cdf9e9e276 100644 (file)
@@ -4,7 +4,7 @@
 # 
 # source file of the GNU LilyPond music typesetter
 # 
-# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 import os
 import sys
index 3f46028fa82c2b91ff69252ca12c7fe36e4c9445..2d200f2e5a60e6f7e781e52d72d49619ed4f6819 100644 (file)
@@ -18,7 +18,7 @@ public:
   Dictionary (Dictionary const&);
   T &elem (String s);
   T const &elem (String s) const;
-  bool elt_b (String s) const;
+  bool elem_b (String s) const;
   void add (String, T);
   void clear ();
 }
index fc15680d92af70110fefa5f34929bea4d0dccdde..784bf36fbee75749269aceb18595528c3f685aa6 100644 (file)
@@ -53,9 +53,9 @@ Dstream::identify_as (String name)
   String cl (strip_member (mem));
   String idx = cl;
 
-  if (silent_assoc_p_->elt_b (mem))
+  if (silent_assoc_p_->elem_b (mem))
     idx  = mem;
-  else if (silent_assoc_p_->elt_b (cl))
+  else if (silent_assoc_p_->elem_b (cl))
     idx = cl;
   else
     {
@@ -74,7 +74,7 @@ Dstream::identify_as (String name)
 bool
 Dstream::silent_b (String s) const
 {
-  if (!silent_assoc_p_->elt_b (s))
+  if (!silent_assoc_p_->elem_b (s))
     return false;
   return (*silent_assoc_p_)[s];
 }
@@ -162,7 +162,7 @@ Dstream::Dstream (ostream *r, char const * cfg_nm)
     (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
   }
 
-  if ((*silent_assoc_p_).elt_b ("Dstream_default_silence"))
+  if ((*silent_assoc_p_).elem_b ("Dstream_default_silence"))
     default_silence_b_ = (*silent_assoc_p_)["Dstream_default_silence"];
 }
 
index 3840b4bd5aa765f01902836ae8314a84b0d27d33..c0b3f5fa01db133a2e462daa5103d7757ae2183d 100644 (file)
@@ -55,11 +55,11 @@ struct Assoc {
     return arr.size() -1;
   }
 public:
-  bool elt_b (K key) const {
+  bool elem_b (K key) const {
     return find (key) >= 0;
   }
   void del (K key) {
-    assert (elt_b (key));
+    assert (elem_b (key));
     int i= find (key);
     arr[i].free = true;
   }
@@ -77,7 +77,7 @@ public:
     return elem (key);
   }
   V const & elem (K key) const { 
-    assert (elt_b (key));
+    assert (elem_b (key));
     return arr[find (key)].val;
   }
   void clear () 
index 9468fae4871024d00e32720a364ebfdfa3aa696b..20f5987e430b53568973814e5d21ecddf99053fe 100644 (file)
@@ -100,7 +100,7 @@ struct Interval_t {
   }
   String str() const;    
   void print () const;
-  bool elt_b (T r);
+  bool elem_b (T r);
   void negate () {
     T r = -left;
     T l = -right;
index 382ec67523e5f11424213cd75ee869fad79a8f28..537b9236cf4667a969da981b4de39e7f28ddb276 100644 (file)
@@ -125,7 +125,7 @@ Interval_t<T>::str() const
 
 template<class T>
 bool
-Interval_t<T>::elt_b (T r)
+Interval_t<T>::elem_b (T r)
 {
   return r >= left && r <= right;
 }
index 242d28e06168a82624e1ba489fda359f5be3022c..a91491940024525946f82c0f71eddeb015a32f52 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 4637aeba108167861d116d822005e43e34c64903..42f06c1a1dd97a62054975686c34c4a7a196657f 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly";
index 8a7fb5381e8ef7761a5ab6056209c3ff493b41f9..20ef3e235a1bc9c00c291d79cfa6908960f89596 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 035c39761b24dcff5a379272c6e9d558c780ed11..441f9c01824142c6a8ba6b453bd2b10fa469cbe8 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index f8b85f92fed034b5a7e70a31db19af36821b9331..a310e9336c76bcdc10ee0dc06c60f4505fc235d4 100644 (file)
@@ -2,8 +2,10 @@
 % setup for Request->Element conversion. Guru-only
 %
 
-Staff = \translator {
+StaffContext=\translator {
        \type "Line_group_engraver_group";
+       Staff ;
+
 %{
        The Hara_kiri_line_group_engraver is a Line_group_engraver 
        that will not typeset an empty line of staff, i.e., a line 
@@ -12,7 +14,6 @@ Staff = \translator {
        Hara_kiri_line_group_engraver.
 %}
 %      \type "Hara_kiri_line_group_engraver";
-       defaultclef = violin;
 
        \consists "Bar_engraver";
        \consists "Clef_engraver";
@@ -43,16 +44,21 @@ Staff = \translator {
        (\property Staff.instrument; Staff.instr for subsequent lines)
        to the left of a staff.
 %}
-%{
+
        marginBreakPriority = "-5";
+
+%{
        \consists "Staff_margin_engraver";
 %}
        \consists "Separating_line_group_engraver";
          
        \accepts "Voice";
-}
-ChoireStaff = \translator {
+};
+
+\translator{\StaffContext }
+\translator {
        \type "Line_group_engraver_group";
+       ChoirStaff;
        \consists "Vertical_align_engraver";
        \consists "Staff_group_bar_engraver";
        \accepts "Staff";
@@ -62,21 +68,23 @@ ChoireStaff = \translator {
 }
 
 
-RhythmicStaff = \translator
-{
+RhythmicStaffContext=\translator{
        \type "Line_group_engraver_group";
        nolines  = "1";
        \consists "Pitch_squash_engraver";
-
+       \consists "Separating_line_group_engraver";     
+       RhythmicStaff;
        \consists "Bar_engraver";
        \consists "Time_signature_engraver";
        \consists "Staff_sym_engraver";
        \accepts "Voice";
-}
-
-Voice = \translator {
+};
+\translator{\RhythmicStaffContext}
+VoiceContext = \translator {
        \type "Engraver_group_engraver";
        \consists "Dynamic_engraver";
+       Voice ;
+       
        \consists "Rest_engraver";
        \consists "Dot_column_engraver";
        \consists "Stem_engraver";
@@ -91,60 +99,57 @@ Voice = \translator {
        \consists "Ties_engraver";
        \consists "Note_heads_engraver" ;       
        \consists "Skip_req_swallow_translator";
-       %\accepts "Thread";
-}
-
+};
 
-GrandStaff = \translator {
+\translator {\VoiceContext}
+\translator {
        \type "Line_group_engraver_group";
-
+       GrandStaff;
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Piano_bar_engraver";
        minVerticalAlign = 1.5*\staffheight;
 
-       % This should come last
        \accepts "Staff";
 }
 
-StaffGroup = \translator {
+\translator {
        \type "Line_group_engraver_group";
 %      \type "Hara_kiri_line_group_engraver";
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Staff_group_bar_engraver";
-
+       StaffGroup;
        \accepts "Staff";
        \accepts "RhythmicStaff";
        \accepts "GrandStaff";
        \accepts "Lyrics";
 }
 
-LyricVoice = 
 \translator{
        \type "Line_group_engraver_group";
 
+       LyricVoice ;
        \consists "Separating_line_group_engraver";
        \consists "Lyric_engraver";
        \consists "Beam_req_swallow_translator";
        \consists "Plet_swallow_engraver";
 }
 
-Lyrics = \translator {
+\translator {
        \type "Line_group_engraver_group";
+       Lyrics;
        \consists "Vertical_align_engraver";
        \accepts "LyricVoice";
 }
 
-Score = \translator {
+ScoreContext = \translator {
        \type Score_engraver;
+       Score;
+       defaultClef = violin;
 
        \consists "Timing_engraver";
-       % uncomment to bar numbers on a whole system.
-%{
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-%}
+
        \consists "Bar_column_engraver";
        \consists "Span_score_bar_engraver";
        \consists "Score_priority_engraver";
@@ -157,13 +162,90 @@ Score = \translator {
        \accepts "RhythmicStaff";       
        \accepts "Lyrics";
        \accepts "GrandStaff";
-       \accepts "ChoireStaff";
-}
+       \accepts "ChoirStaff";
+};
+\translator { \ScoreContext }
+
+ScoreWithNumbers = \translator {
+       \type "Score_engraver";
+
+       % uncomment to bar numbers on a whole system.
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+
+};
+
+\translator {
+       \type "Score_engraver";
+       StupidScore;
 
-StupidScore = \translator {
-       \type Score_engraver;
        \consists "Staff_sym_engraver";
 }
 
 
 
+BarNumberingStaffContext = \translator {
+       \StaffContext
+       barColumnPriority = "0";
+       marginBreakPriority = "-4";
+       \consists "Mark_engraver";
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+
+};
+
+
+HaraKiriStaffContext = \translator {
+       \type "Hara_kiri_line_group_engraver";
+       Staff;
+       barColumnPriority = "0";
+       marginBreakPriority = "-4";
+
+       \consists "Bar_engraver";
+       \consists "Clef_engraver";
+       \consists "Key_engraver";
+       \consists "Time_signature_engraver";
+       \consists "Local_key_engraver";
+       \consists "Staff_sym_engraver";
+       \consists "Collision_engraver";
+       \consists "Rest_collision_engraver";
+       \consists "Staff_margin_engraver";
+       \consists "Separating_line_group_engraver";
+         
+       \accepts "Voice";
+};
+
+OrchestralPartStaffContext = \translator {
+       \HaraKiriStaffContext
+       barColumnPriority = "0";
+       marginBreakPriority = "-4";
+       \consists "Mark_engraver";
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+};
+
+OrchestralScoreContext= \translator {
+       \type Score_engraver;
+       Score;
+       barScriptPadding = "2.0";       % dimension \pt
+       markScriptPadding = "4.0";
+       barColumnPriority = "-4";
+       markBreakPriority = "-4";
+       defaultClef = violin;
+
+       \consists "Timing_engraver";
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+       \consists "Mark_engraver";
+       \consists "Span_score_bar_engraver";
+       \consists "Score_priority_engraver";
+       \consists "Priority_horizontal_align_engraver";
+       \consists "Vertical_align_engraver";
+
+       \accepts "ChoirStaff";
+       \accepts "StaffGroup";
+       \accepts "Staff";
+       \accepts "RhythmicStaff";       
+       \accepts "Lyrics";
+       \accepts "GrandStaff";
+};
index 8a7fb5381e8ef7761a5ab6056209c3ff493b41f9..20ef3e235a1bc9c00c291d79cfa6908960f89596 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index c7b8aff7dc0f7ce7f4f567d00930034dd48a4101..1ab82d80162219e8a5b83e163c9aac296576abc5 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 02c6e14ff12c5773c4436306b8e712e6e6cd03d9..f3622d278d1af0d6b538bd75b93f81ed209115c4 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly";
index aa7095fa2bd9a1a5cce4c87b60efdc7639b2ef2f..af51b3277a3492fd00b9181a89ab7b26295a0e7d 100644 (file)
@@ -6,7 +6,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 paper_sixteen = \paper {
        staffheight = 16.0\pt;
index 6f53e8b870130150d70d5a712ca9655795827f8f..ecc8a3eac715f9e718d2ef9e90aa8a1a7295d703 100644 (file)
@@ -5,7 +5,7 @@
  \include "table13.ly";
  \include "table16.ly";
 
-\version "1.0.4";
+\version "1.0.6";
 
 paper_twenty = \paper {
        staffheight = 20.0\pt;
@@ -13,8 +13,8 @@ paper_twenty = \paper {
        papersize = "a4";
 
        % ugh see table20 for sizes
-       quartwidth =  6.61\pt
-       wholewidth = 9.90\pt
+       quartwidth =  6.61\pt;
+       wholewidth = 9.90\pt;
 
 
        arithmetic_basicspace = 2.;
index a4cee69b750736003218f723fd211218d9c8156a..be6707238a153781375c72585b00c95bffbd76e4 100644 (file)
@@ -1,57 +1,68 @@
 %
 % setup for Request->Element conversion. Guru-only
 %
-
-Staff =        \translator {
+\translator {
        \type "Staff_performer";
        \accepts Voice;
+       Staff;
        \consists "Key_performer";
        \consists "Time_signature_performer";
 }
 
-Thread =\translator
+\translator
 {
        \type "Performer_group_performer";
+       Thread ;
        \consists "Note_performer";
 }
-
-Voice = \translator
+\translator
 {
        \type "Performer_group_performer";
        \accepts Thread;
+Voice;
 }
-
-GrandStaff = \translator
+\translator
 {
        \type "Performer_group_performer";
        \accepts Staff;
-}
 
-LyricVoice = \translator {
+GrandStaff;}
+
+\translator {
        \type "Performer_group_performer";
        \consists "Lyric_performer";
+LyricVoice;
 }
 
-
-Lyrics = \translator { 
+\translator{
+       \type "Performer_group_performer";
+       ChoirStaff;
+       \accepts Staff;
+}
+\translator { 
        \type "Staff_performer";
        \accepts LyricVoice;
+       Lyrics;
        \consists "Time_signature_performer";
 }
-
-StaffGroup = \translator
+\translator
 {
        \type Performer_group_performer;
+
+       StaffGroup;
        \accepts Staff;
 }
-
-Score = \translator {
+\translator {
        \type "Score_performer";
+
+
+       Score;
        instrument = piano;
        \accepts Staff;
        \accepts GrandStaff;
        \accepts Lyrics; 
        \accepts StaffGroup;
+       \accepts ChoirStaff;
        \consists "Swallow_performer";
 }
 
index 999a8307b44bdc84cf7b9c2d1bfbd6cdff5cb60b..4ab97b920fdd1b5f975e37a11e8859b9cb83da14 100644 (file)
@@ -48,6 +48,14 @@ beamquantisation     2       quantise avoide wedge2) \beampostraditional
 keyoctaviation 0       Key signature only for specified octave \specialkey
 keyoctaviation 1       Key signature for all octaves   \normalkey
 
+timeSignatureStyle     C       Use C and stroked C for 4/4,2/2
+timeSignatureStyle     old     Use old style mensuration marks
+timeSignatureStyle     1       Use single number
+timeSignatureStyle     ""      Use normal two-digit time signature
+timeSignatureStyle     Cn/m    Set symbol explicitly, n/m=2/2 or 4/4   
+timeSignatureStyle     oldn/m  Set symbol explicitly,
+                               n/m=2/2,3/2,3/4,4/4,6/4 or 9/4.
+
 
 [Staff?]
 instrument             ascii   midi instrument table lookup
index eb8c8c48f9b93d020cfc459c12df458d38b38cbc..dedefdc038f6324a4d4692baa74e2493636b6ec6 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c{
        c'' d e f
index 84738b6ed9ad31a2a27caaa6fc1501d03365b9b5..d5f945ffab0a293fd4dc48c04bdc3783c5d3dea5 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 blah = \notes {
@@ -20,6 +20,6 @@ blah = \notes {
 }
 
 \score{
-       \blah
+       \type Staff \blah
        
 }
index 2baeadd3ca5cc463040c0f0a92e1e88a97e6937f..aeeaa4f93acc63706b64f24a8ad4e0f3940ecea8 100644 (file)
@@ -10,7 +10,7 @@ copyright =    "public domain";
 Tested Features: example file with comments
 
 %}
-\version "1.0.4";
+\version "1.0.6";
 
 
 % the % is a comment.
index 7ee17905f3b39644411a27f13075db035b5fd908..40a62279be56c2765a344cfd0727391e9c8e5871 100644 (file)
@@ -1,5 +1,5 @@
-\version "1.0.4";
-part = \{
+\version "1.0.6";
+part = \notes {
        c-1 c c c
        r1*3
        c4-5 c c c
@@ -10,29 +10,18 @@ part = \{
 
 a4 = \paper{
        linewidth= 80.\mm;
-       Staff = \translator {
-               \type "Engraver_group_engraver";
-               defaultclef = violin;
-               \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";
+        \translator {
+               \StaffContext
+               
                \consists "Bar_column_engraver";
                \consists "Bar_number_engraver";
-               \consists "Separating_line_group_engraver";
-               \consists "Line_group_engraver";
-               \accepts "Voice";
+               
        }
 }
 
 \score{
        <
                \notes{ 
-                       \property Score.part = 1
                        \part
                }
        >
@@ -42,7 +31,6 @@ a4 = \paper{
 \score{
        <
                \notes{ 
-                       \property Score.part = 0
                        \part
                }
        >
index deff27a0d731937993a0899b7c935ff61b194925..3e466e4fcb114803bcd9efa2aa828cd40bdd421f 100644 (file)
@@ -1,3 +1,7 @@
+%
+% This file does not work.  
+%
+
 % pedal.ly
 % 
 % Johann Sebastian Bach
@@ -24,7 +28,7 @@
 % \lbheel \lbheel \lfheel \lftoe
 % \rbheel \rbtoe \rfheel \rftoe
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
                \notes {
index b7848e8af06f6da8982187688c1e575270277666..da3004548de230a50102bb10e9fd5090c9d3a1df 100644 (file)
@@ -23,7 +23,7 @@
    * organ staff...
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 
 
@@ -32,19 +32,19 @@ praeludium_commands = \notes {
    \key e;
 }
 
-praeludium_right = \notes\transpose c'' {
+praeludium_right =  \notes {
   \$praeludium_commands
   \clef violin;
 
   % 13 -- how to type -- where to split -- this more neatly?
   \type Staff <
-    { \stemup r4 dis'4 e'4. e'8 ~ |
-      \shifton e'4 [d'8 fis'8] \shiftoff gis'4 ~ [gis'8 fis'16 e'16] |
-      fis'4 ~ [fis'8 e'16 dis'16] e'4 r8 e'8 }
-    { \stemup \shifton r4 bis4 cis'4 \shiftoff cis'4 |
-      a'4 ~ [a'16 gis'16 a'16 b'16] \shifton dis'4 cis'4 ~ |
-      [cis'8 dis'16 ais16] bis4 cis'4 r8 b8 }
-    {
+    \type Voice = I \relative c'' { \stemup r4 dis4 e4. e8 ~ |
+      \shifton e4 [d8 fis8] \shiftoff gis4 ~ [gis8 fis16 e ] |
+      fis4 ~ [fis8 e16 dis] e4 r8 e8 }
+    \type Voice = III \relative c'' { \stemup \shifton r4 bis cis \shiftoff cis |
+      a' ~ [a16 gis a b] \shifton dis,4 cis ~ |
+      [cis8 dis16 ais] bis4 cis r8 b }
+    \type Voice = IV \relative c'' {
 
       %\stemup
       %{
@@ -52,61 +52,61 @@ praeludium_right = \notes\transpose c'' {
        edition; a hack to avoid collisions
       %}
       \stemdown
-      \shifton s4 gis4 }
+      \shifton s4 gis }
       
-    { \stemdown
+    \type Voice =  II \relative c' { \stemdown
 %      \shifton       % idem
 
-      r4 fis4 \shiftoff gis4 gis4 |
-      a4. cis'8 gis2 |
-      fis4 gis4 gis4 r8 e8 }
+      r4 fis \shiftoff gis gis |
+      a4. cis8 gis2 |
+      fis4 gis gis r8 e8 }
   > |
   % 16
 }
 
-praeludium_left = \notes {
+praeludium_left = \notes \relative c {
   \$praeludium_commands
   \clef bass;
 
   % 13
   \type Staff <
-    { \stemup r4 dis'4 cis'4 cis'4 ~ |
-      [cis'8 a8 d'8 cis'8] [bis8 gis8] cis'4 |
-      dis'2 cis'4 r8 cis'8 }
+    { \stemup r4 dis' cis cis ~ |
+      [cis8 a d cis] [bis gis] cis4 |
+      dis2 cis4 r8 cis }
     { \stemup bis2 }
-    { \stemup \shifton r4 gis4 ~ [gis 8 gis8] ~ \stemdown \shiftoff gis4 |
+    { \stemup \shifton r4 gis ~ [gis8 gis] ~ \stemdown \shiftoff gis4 |
       a4. fis8 gis4. a8 ~ |
-      a4 gis4 gis4 r8 gis8 }
+      a4 gis4 gis r8 gis }
 %    { \stemup \shifton s4 fis4 e}
 % a quick hack to avoid some collisons
     { \stemdown \shifton s4 fis4 e}
     { \stemdown s4 dis4 cis4 }
   > |
-  % 16
+  %16
 }
 
-praeludium_pedal = \notes {
+praeludium_pedal = \notes \relative c{
   \$praeludium_commands  
   \clef bass;
 
-  % 13
-  r4 fis,4-\ltoe e,4.-\lheel e8-\rheel | 
-  fis4.-\rtoe fis8-\rtoe fis4-\rtoe [e8-\ltoe a8-\rtoe] | 
-  dis4-\ltoe gis4-\rtoe [cis8-\ltoe b,!8-\lheel ais,8-\rtoe gis,8-\ltoe] |
-  % 16
+  %13
+  r4 fis,4-\ltoe e4.-\lheel e'8-\rheel | 
+  fis4.-\rtoe fis8-\rtoe fis4-\rtoe [e8-\ltoe a-\rtoe] | 
+  dis,4-\ltoe gis-\rtoe [cis,8-\ltoe b!-\lheel ais-\rtoe gis-\ltoe] |
+  %16
 }
 
 
-fuga2_commands = \notes{
-  \time 3/4;
+fugaII_commands = \notes{
+  \time3/4;
   \key e;              % E-major
 }
 
-fuga2_right = \notes\transpose c'' {
-  \$fuga2_commands
+fugaII_right = \notes   \relative c''   {
+  \$fugaII_commands
   \clef violin;
 
-  % 15
+  %15
   \type Staff <
     { \stemup [b8 fis8] b4 }
     { \stemdown fis2 }
@@ -120,56 +120,56 @@ fuga2_right = \notes\transpose c'' {
       |
    %}
    \type Staff <
-     { \stemup \shiftoff e'4 }
-     { \stemup \shifton cis'4 }
-     { \stemup \shifton ais4 }
-     { \stemdown fis4 }
+     { \stemup \shiftoff e4 }
+     { \stemup \shifton cis }
+     { \stemup \shifton ais }
+     { \stemdown fis }
    > |
-  % 16
+  %16
   \type Staff <
-    { \stemup dis'2 dis'4 |
-      cis'2 cis'4 |
-      b4. [cis'8 dis'8 e'8] }
-    { \stemup \shifton [b8 fis8] b2 ~ |
-      [b8 a!16 gis16] a2 ~ |
+    { \stemup dis2 dis4 |
+      cis2 cis4 |
+      b4. [cis8 dis e] }
+    { \stemup \shifton [b8 fis] b2 ~ |
+      [b8 a!16 gis] a2 ~ |
       a4 gis2 }
     { \stemdown fis2. ~ |
-      fis2. ~ |
+      fis ~ |
       fis4 e2 }
   > |
-  % 19
+  %19
 }
 
-fuga2_left = \notes {
-  \$fuga2_commands  
+fugaII_left = \notes {
+  \$fugaII_commands  
   \clef bass;
 
-  % 15
+  %15
   \type Staff < 
     { \stemdown b2 \stemup ais4 |
       b2 b4 }
     { \stemdown s2 e4 |
       fis2 fis4 }
   >
-  \stemdown cis'2 e'4 |
+  \stemdown cis2 e4 |
   b4. b8 b4 |
-  % 19
+  %19
 }
 
-fuga2_pedal = \notes {
-  \$fuga2_commands  
+fugaII_pedal = \notes \relative c {
+  \$fugaII_commands  
   \clef bass;
 
-  % 15
+  %15
   dis4.-\ltoe e8-\rtoe cis4 |
-  b,4.-\lheel [cis8-\ltoe dis8-\rtoe e8-\rheel] |
+  b4.-\lheel [cis8-\ltoe dis8-\rtoe e8-\rheel] |
   fis4.-\rtoe [e8-\rheel dis8-\rtoe cis8-\ltoe] |
   dis4-\rtoe e4-\rheel e,4-\ltoe |
-  % 19
+  %19
 }
 
 breakmusic = \notes { 
-  %\time 4/4;
+  %\time4/4;
   r1
 }
 
@@ -179,16 +179,16 @@ breakmusic = \notes {
   \type Score <
     \type GrandStaff <
       \type Staff = treble {
-        \praeludium_right \breakmusic \fuga2_right }
+        \praeludium_right \breakmusic \fugaII_right }
       \type Staff = bass { 
-        \praeludium_left \breakmusic \fuga2_left }
+        \praeludium_left \breakmusic \fugaII_left }
     > 
     \type Staff = pedal {
-      \praeludium_pedal \breakmusic \fuga2_pedal }
+      \praeludium_pedal \breakmusic \fugaII_pedal }
   >
 
   \paper{}
 
   \midi {
-    \tempo 4 = 96; }
+    \tempo 4 =96; }
 }
index ee8e9d6b9ddb25cb1ecf438bc5f508a8c13a3614..197df1fda69b45d27e048c730e1d1f5930a2cbed 100644 (file)
@@ -7,12 +7,11 @@ TestedFeatures =       "multiple meters, beaming, unsynced bars, userdefd engravers";
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 ritme = \notes\transpose c'' {
-       \partial 8;
-
        \time  4/4;
+       \partial 8;
        c8                                      |
        
        [a8~  a8. a8 a16 a16 a16] c4.           |       % watch the beams!
@@ -37,11 +36,15 @@ ritme = \notes\transpose c'' {
        
 
 another = 
-       \notes{ \time 4/4; 
-               c1.  c1. c4 c4 c4 c4  \time  4/4; c1 c1 c1
+       \notes{ \time 6/4; 
+               c1.  c1. \time 4/4;c4 c4 c4 c4  c1 c1 c1
         }
 
 
+%
+% Beams are incorrect for the next staff.  They cut through the whole notes.
+%
+
 yanother = 
        \notes{ \time 4/4; 
                c1 c1 c1 c4 c4 c4 c4  c1 c1 c1
@@ -60,57 +63,17 @@ yanother =
        \paper{
 
        %% remove Timing_engraver and Bar_number_engraver
-       Score = \translator {
-       \type Score_engraver;
-
-       %\consists "Timing_engraver";
-
-       \consists "Span_score_bar_engraver";
-       \consists "Score_priority_engraver";
-       \consists "Priority_horizontal_align_engraver";
-       \consists "Vertical_align_engraver";
-
-
-       \accepts "StaffGroup";
-       \accepts "Staff";
-       \accepts "Lyrics";
-       \accepts "GrandStaff";
-}
-
-RhythmicStaff = \translator
-{
-         \type "Engraver_group_engraver";
-       nolines  = "1";
-         \consists "Pitch_squash_engraver";
-
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-         \consists "Bar_engraver";
-         \consists "Meter_engraver";
-         \consists "Staff_sym_engraver";
-         \consists "Line_group_engraver";
-         \consists "Timing_engraver";
-         \accepts "Voice";
-}
-       %% add Timing_engraver to the staff
-       Staff = \translator {
-         \type "Engraver_group_engraver";
-       defaultclef=    violin;
-
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Timing_engraver";
-         \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";
-
-         \consists "Line_group_engraver";
-         \accepts "Voice";
-       }
+ \translator {
+ \ScoreContext
+ \remove "Timing_engraver";
+  }
+  \translator {
+  \RhythmicStaffContext
+  \consists "Timing_engraver";
+  }
+  \translator{
+  \StaffContext
+  \consists "Timing_engraver";
+  }
        }
 }
index 08741e02591fd514665672813f5ad95fd360e887..de9a2c496b1ec85736a42e44e2160e66c95195dd 100644 (file)
@@ -1,3 +1,7 @@
+%
+% This file prints lots of warning messages about scripts-dportato
+%
+
 \header{
 filename =      "scales.ly";
 enteredby =     "HWN";
@@ -12,7 +16,7 @@ copyright =    "public domain";
 % scales with accents.
 %
 
-\version "1.0.4";
+\version "1.0.6";
 blah =         \notes {
                \time 6/8;      
 \transpose c {
index 2de3a30b8587407f22d184bbbf8d73f9e11b8231..869836046b31eba400690f60eebf31a2d798866d 100644 (file)
@@ -1,5 +1,5 @@
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 blah =         \notes{ \transpose c'' {
index 38cfe3e79542e88f4390b31e775881504c60116f..6230a2acb06c71e5aaac1c671ffdc3ce7ce92f09 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 \score{
        \notes \transpose c'''{
                \stemup
index ec1e8e9f653e1ffd9895727b1053bbf926e69cd1..895c1b5b261f613d43773e2f565d852587e04215 100644 (file)
@@ -1,7 +1,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 onestaff = \type Staff = foo\notes  {
        \property Staff.instr = instr
@@ -18,55 +18,10 @@ grstaff = \notes \type GrandStaff <
        \type Staff = bufl { c1 c2  }
 >
 
-scpaper =  \paper {Score = \translator {
-       \type Score_engraver;
-       barScriptPadding = "2.0";       % dimension \pt
-       markScriptPadding = "4.0";
-       barColumnPriority = "-4";
-       markBreakPriority = "-4";
-       barNumberBreakPriority = "-4";
-       
-       \consists "Timing_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Mark_engraver";
-       \consists "Span_score_bar_engraver";
-       \consists "Score_priority_engraver";
-       \consists "Priority_horizontal_align_engraver";
-       \consists "Vertical_align_engraver";
-
-       \accepts "ChoireStaff";
-       \accepts "StaffGroup";
-       \accepts "Staff";
-       \accepts "RhythmicStaff";       
-       \accepts "Lyrics";
-       \accepts "GrandStaff";
-}}
+scpaper =  \paper {\translator {\OrchestralScoreContext}}
 
-stpaper =\paper{
-Staff = \translator {
-       \type "Line_group_engraver_group";
-       defaultclef = violin;
-       barColumnPriority = "0";
-       barNumberBreakPriority = "0";
-       marginBreakPriority = "-4";
-
-       \consists "Bar_engraver";
-       \consists "Clef_engraver";
-       \consists "Key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Local_key_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Mark_engraver";      
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Separating_line_group_engraver";
-       \consists "Staff_margin_engraver";
-       \accepts "Voice";
-}}
 
+stpaper =\paper{ \BarNumberingStaffContext }
 scscore = \score { \grstaff \paper {
 \scpaper
 }}
index e0200c2744d628d78e0a330b9c6414b663c85388..fe5b0aa0744c36c48b680452ed311c81e08f56a2 100644 (file)
@@ -1,5 +1,7 @@
+\version "1.0.4";
+
 \score{
-       \melodic\transpose c'{
+       \notes\transpose c'{
                \property Score.beamquantisation = \none
 
                [a'8 <a' g'']>
index 76d640ade5cc5989cd455909c49ec9fff9327143..41cdc2e5e4b96c54c7c6b98de6fedea91804ad02 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\transpose c''{
index 89be9bec733f33462ac321db04295f3119fe1bf9..d961f90d8647de0a83a02f2452fd3304e697f448 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "PD";
 
 TestedFeatures =        "beams and beamflags";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        <
index d08dae39efc7c591f376ec43bab1add080071390..7ac2085fc70dbe96e823dbc89c8eb3dfd68a9677 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests Feta embedded slurs"
+TestedFeatures =        "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 shortlong = \notes{
        c4()c( c c  |
index d4d07a45cf740e6176f0bc475d196040227e9beb..4e0ea683890c49ca27d592bf682052fb42e30b56 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
        \notes{ 
index b99931cf4a5d48dd2cbd6cc0c7612f4ca3cf60f1..c545798657d82aee04f6548b5d346c3f8bef99cb 100644 (file)
@@ -5,11 +5,11 @@ enteredby =    "HWN,JCN";
 copyright =     "public domain";
 Tested =        "test the Collision resolution ";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 
-two_voice = \notes 
+twovoice = \notes 
        \type Staff < 
          { \stemdown
                c4 d e f g2~  g4 a [c8 d e f] c2| }
@@ -18,7 +18,7 @@ two_voice = \notes
 
        >
 
-two_voice_steminvert = \notes 
+twovoicesteminvert = \notes 
        \type Staff <  
          { 
  \stemup
@@ -29,7 +29,7 @@ two_voice_steminvert = \notes
 
        >
 
-three_voice = \notes 
+threevoice = \notes 
        \type Staff <
        { \stemup 
                g4 f e f g a g2 }
@@ -76,9 +76,9 @@ restsII = \notes {
 }
 
 \score{
-       \notes \transpose c' {  \two_voice  
-       \two_voice_steminvert 
-       \three_voice  
+       \notes \transpose c' {  \twovoice  
+       \twovoicesteminvert 
+       \threevoice  
        \rests 
        % UGH ! bug!
        %\restsII 
index a3cf882cf21434f3c83efc6e8174b43e6a829843..c0654ac96d1cc23d390b6098853fdbb817c19fd0 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 \score {
index 8ea926c8088af6ee4251f3cc5e9564318961e773..3f06328cda705a9d0d7d12bb675ae57ae0612033 100644 (file)
@@ -7,7 +7,7 @@ TestedFeatures = "This file tests silly line shapes";
 
 \include "paper20.ly"
 
-\version "1.0.4";
+\version "1.0.6";
 
 oden = \lyric{ 
        O8 |
index 80fc0c07cf96b8fa93909fe1d87feb09e326649b..03db2071a026906d3b9ba04b18552f5269ad4902 100644 (file)
@@ -1,15 +1,15 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes{
                c( d e )c |
-               \slurdotted;
+               \slurdotted
                c( d e )c |
-               \slurnormal;
+               \slurnormal
                c( d e )c |
                \property Voice.slurdash = 3
                c( d e )c |
-               \slurnormal;
+               \slurnormal
                c( d e )c |
        }
        \paper{ 
@@ -20,3 +20,4 @@
        }
 }
 
+
index 1b1f7eac8a7b1137d9889244265441e861cd2d14..91a236b2b59b768c38be5f3cfc84029ce1929951 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes \relative c {
index 47518dabb8b36c2cf1b9853b853909006390c427..d4c2e7c4874757985688e967168dcd94ecfb463d 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 FontBody=      \notes\transpose c''{ 
                \bar "|:";
index 4fcb9dac5e4704fc56c50afd3796400f7b0a4551..9d38c7f5f3c7769fca9a4e49e3485090753b2c5c 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "font-body.ly"
 \score{
@@ -21,7 +21,7 @@ description = "This file tests the Feta music font";
            \paper_twenty
            linewidth = 17.5 \cm;
            gourlay_maxmeasures =5.;
-           \output "font20.tex";
+           \output =  "font20.tex";
        }
 }
 
index 377a95ac05a300f00ad327b495e3a8713da5ee71..3b1364e1811933e0bf48b88482f0fbd7f826989a 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 \include "font-body.ly"
 
 \score{
index 51c2d0f60f809f257fb66edde7f5ece4f958ac47..38dd6faa522591dbe54b4ef6ebc08062dab87e22 100644 (file)
@@ -4,7 +4,7 @@ copyright =      "PD";
 TestedFeatures =        "This file tests some nasty Gourlay spacings";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 
@@ -14,11 +14,11 @@ This is taken from [Gourlay]'s paper on breaking lines
 
 \score{
        \notes \type Staff  \transpose c''<
-               { \stemup; d2 d     | d d | d4 d2. | \break;  c1 }
-               \transpose c, { \stemdown; g4 g g g | \[2/3 g2 g2 g2 \] | g4. g8 g2 | c1 }
+               { \stemup d2 d     | d d | d4 d2. | \break  c1 }
+               \transpose c, { \stemdown g4 g g g | \[2/3 g2 g2 g2 \] | g4. g8 g2 | c1 }
                >
        \paper{
-           linewidth = 8.\cm;
+           linewidth = 8.\cm
        }
 }
 
index 86e3c94d2cfe5291c21ffad55b3537bf7e5871ed..a769b569c549264bae95af3b8809f1e71893a289 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "table13.ly";
 \include "table16.ly";
index f4f6807837b1494e9bc79f2507bc1f1603faf0a5..66a786342c2eced9e9c0ba0b7a8c70dba25ab86c 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 toeter_i = \notes\relative c {
        \property Staff.instrument = "Toeters"
index f1167e53a65db765b5060ac993993a7278a5cac9..e47814a6bc36166de6d9ce174f1dd7231899ed80 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 test key itemv breaking
index afefec8948039dd46848379feb0e9d6df0259903..ae746715e192a0f653f7fa3ccdeccc3031916dd6 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 \score{
        \notes\relative c'{
                [c16 \stemdown c'' \stemboth c,, d]
index 2ffb0f71e3e6373bc5a2b97cb04037340728173b..8feb99bfa4486406a014d08d663b99a332fbf0d2 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
   s1 | \mark "A";
index 7b694a526c11da6ddb05993c22b8b8b0eb9e5c19..54bd95e7556ee7a73c08f0badb3f54fee8d6ff47 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 voice_one = \notes\transpose c'        {  \stemup
        R1 * 2 | f'4-. r r2 | R1 * 3 |
diff --git a/input/test/orchestalpart.ly b/input/test/orchestalpart.ly
new file mode 100644 (file)
index 0000000..7691628
--- /dev/null
@@ -0,0 +1,9 @@
+
+\score
+{
+       \notes { c1 c1 \property Score.skipBars = 1 c1 \break R1*8 c1 c1 c1 c1
+       }
+       \paper {
+
+       }
+}
index b8be66d9d0888861eef802da9e7b62843c0a9443..05d82291567d4f794dd23cb4a2a55e2ccc89b7a1 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
 
index 9cc36708091acb85b758aa50932fabba35680c8d..102dfc59e614f2ea2c258adecbbd6c48adf923e6 100644 (file)
@@ -1,7 +1,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 onestaff =     \type Staff = foo\notes  {
                \property Staff.instr = instr
@@ -32,7 +32,7 @@ scpaper =  \paper {Score = \translator {
        \consists "Priority_horizontal_align_engraver";
        \consists "Vertical_align_engraver";
 
-       \accepts "ChoireStaff";
+       \accepts "ChoirStaff";
        \accepts "StaffGroup";
        \accepts "Staff";
        \accepts "RhythmicStaff";       
index db1338d5d89dcdc382c59cec251226e1ab519954..3a5ac5dce664512f54e2b38e439686c73d98a773 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests Feta embedded slurs"
+TestedFeatures =        "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 shortlong = \notes{
        c4()c( c c  |
index 6bd977310310fdc59853aa5a1cd49ade533f5048..edee54434dedd2c660546d98f7863570abf66418 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 % bug
 % excentric slur can't handle this ...
index 8199d2a769fd7bf5b178a7daf2db8b0ac0c0d59b..43c422d38e4a16aad53fb8d74033a6967cbb5d21 100644 (file)
@@ -1,5 +1,5 @@
 % test damping
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\relative c'{
index a4b712da93e7923c284c92d253b05394b0a7e3e4..8b24a4e5a26b5337ea635009d9d56a450571b941 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 % urg, the direction of the slur gets swapped!
 \score{
index 065f3209fd7393e16cacd9185481d6b6a9aa59c1..459ed7e48fd17a22153fa03eb7224c42087182c3 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\transpose c'{
@@ -29,5 +29,4 @@
                c c c )c |
        }
        }
-       }
 }
index 1a177c47b9e527b1f56e92e662dc8bb454bbb83c..6ba725555033a991ffa1d89d72354ceeb774d2f9 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "public domain";
 TestedFeatures =        "This file tests various spacings";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 multipart = \notes{ 
     \type StaffGroup < 
index 6b40f48841031a2fb8bc5668bb5ba956d37f61ef..667be275d6f5e61e55116a239b9bc922165c3107 100644 (file)
@@ -8,7 +8,7 @@ of beams";
        
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 beamintervals = \notes{
                \time 7/4;
index ce992078a0a08335074be8c83ab815102cbe5ea9..39eb2e13bcfb7c113f9216d71ea5905f6130c4c9 100644 (file)
@@ -1,7 +1,7 @@
-\version "1.0.4";
+\version "1.0.6";
 
 $somewhat_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman" 
        AaaaaaA2
        BbbbbbB2
        CcccccC2 
@@ -11,7 +11,7 @@ $somewhat_long = \lyric{
 }
 
 $rather_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman" 
        LLLLoooonggggg2 
        Syyllllaaabbble2 
        LLLLoooonggggg2 
@@ -21,7 +21,7 @@ $rather_long = \lyric{
 }
 
 $quite_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman"
        LLLLLLLLLooooongggggggg2 
        Syyyyyyyyyyyyylllllllaaaaaabbble2 
        LLLLLLLLLooooongggggggg2 
index 15f7e0b499ce2e99ae830b51b525809d3a103f18..1b21d5308b6047d8ef718ae6bdb4355687d2b1a0 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 %  middle tie is wrong
index e94930d739fc8d175aa65833c447aa7eecafe4dc..cddf1e9cc83c60a3c88221fae864b15da1b49944 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 tie = \notes\transpose c''{
 
index 0029b154143dd16e018b6118bea8c962ee074bd4..3908c4cf641ad7fffcdec22a55304d5a64058362 100644 (file)
-
-
 \property Staff.timeSignatureStyle = "C"
-\time 12/8;
-
-[c8 c c][c8 c c][c8 c c][c8 c c]
-
+\time 1/1;
+c''1^"timeSignatureStyle = \"C\"" |
 \time 2/2;
-\property Staff.timeSignatureStyle = "old3_2"
-c2 c2
-
+c1 |
+\time 3/4;
+c2. |
+\time 4/4;
+c1 |
+\time 5/4;
+c2. c2 |
+\time 6/4;
+c1. |
+\time 3/2;
+c1. |
+\time 7/4;
+c1 c2. |
+\time 8/4;
+c\breve |
+\time 9/4;
+c2. c2. c2. |
+\break
+\property Staff.timeSignatureStyle = "old"
+\time 1/1;
+c1^"timeSignatureStyle = \"old\"" |
 \time 2/2;
-\property Staff.timeSignatureStyle = "oldC"
-c2 c2
-
+c1 |
+\time 3/4;
+c2. |
+\time 4/4;
+c1 |
+\time 5/4;
+c2. c2 |
+\time 6/4;
+c1. |
+\time 3/2;
+c1. |
+\time 7/4;
+c1 c2. |
+\time 8/4;
+c\breve |
+\time 9/4;
+c2. c2. c2. |
+\break
+\property Staff.timeSignatureStyle = ""
+\time 1/1;
+c1^"timeSignatureStyle = \"\"" |
 \time 2/2;
-\property Staff.timeSignatureStyle = "old6_4"
-c2 c2
-
+c1 |
+\time 3/4;
+c2. |
+\time 4/4;
+c1 |
+\time 5/4;
+c2. c2 |
+\time 6/4;
+c1. |
+\time 3/2;
+c1. |
+\time 7/4;
+c1 c2. |
+\time 8/4;
+c\breve |
+\time 9/4;
+c2. c2. c2. |
+\break
+\property Staff.timeSignatureStyle = "1"
+\time 1/1;
+c1^"timeSignatureStyle = \"1\"" |
+\time 2/2;
+c1 |
+\time 3/4;
+c2. |
+\time 4/4;
+c1 |
+\time 5/4;
+c2. c2 |
+\time 6/4;
+c1. |
+\time 3/2;
+c1. |
+\time 7/4;
+c1 c2. |
+\time 8/4;
+c\breve |
+\time 9/4;
+c2. c2. c2. |
+\break
+\property Staff.timeSignatureStyle = "old9/4"
+\property Staff.textalignment = \center
+\time 1/1;
+c1^"old9/4" |
+\property Staff.timeSignatureStyle = "old6/4"
 \time 2/2;
-\property Staff.timeSignatureStyle = "old9_4"
-c2 c2
+c1^"old6/4" |
+\property Staff.timeSignatureStyle = "old3/2"
+\time 3/4;
+c2.^"old3/2" |
+\property Staff.timeSignatureStyle = "old4/4"
+\time 4/4;
+c1^"old4/4" |
+\property Staff.timeSignatureStyle = "old2/2"
+\time 5/4;
+c2.^"old2/2" c2 |
+\property Staff.timeSignatureStyle = "C4/4"
+\time 6/4;
+c1.^"C4/4" |
+\property Staff.timeSignatureStyle = "C2/2"
+\time 3/2;
+c1.^"C2/2" |
 
index 2eafb8ae116cb8e21587fc3206497d994cb7e3b8..ae1b5ee610a267f91a744686e2daa790675e7fa4 100644 (file)
@@ -10,7 +10,7 @@ source =      "urtext";
 instrument=    "Instrument";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes
index 18f742d1273ddb22f7bd05949b0d64492f999360..8483b8735c831467d847ce64b47de689175315a2 100644 (file)
@@ -6,7 +6,7 @@ I have extend Mats' patches to allow accidental transposition:
                = \transpose d =>
         \keysignature gis;
 
-As you can see in output the example file "test.ly" there are a few problems left:
+As you can see in output =  the example file "test.ly" there are a few problems left:
 - key undo (already in the Todo)
 - "wrong" transposition: e.g. \transpose d of fis-major = gis-major (better as-major?).
        The solution gis=as etc. would concern both note and key transposistion
@@ -22,7 +22,7 @@ copyright =    "public domain";
 }
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 vOne = \notes \relative c''{
         \clef"violin";
index e80a68201c67a9e2f10585d13fcb1aa76d3014cc..b74d873faf6648a5346e3f3ce8958707511358ea 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
 \notes <
 
 >
 
-\paper{
-Staff = \translator {
-       \type "Line_group_engraver_group";
-       defaultclef = violin;
+\paper{}
 
-       \consists "Bar_engraver";
-
-       \consists "Key_engraver";
-       \consists "Local_key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Separating_line_group_engraver";
-         
-       \accepts "Voice";
-}
-}
 }
index 93d228e61f982ce643e95d2a671497ea61ee2213..1d3537747a1274f2bae5d021380579004f688d6b 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests trills"
+TestedFeatures =        "This file tests trills" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes{ 
index 842f3c4185757838d8c9b4c7763f7609490eedcb..b934bf900ad7ba08c4653f7a8844098a957767de 100644 (file)
@@ -12,7 +12,7 @@ copyright =    "public domain";
 Tested Features                lyrics and chords
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 melodie = \notes\relative c {
         \clef"violin";
index b2b888819d4556f9204f0d61ac5e299ef9b696aa..739108a64af34631600363748fbeaf556c22af0a 100644 (file)
@@ -20,7 +20,7 @@ traditional song in various languages.
 Tested Features: lyrics, interleaving lyrics and staffs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 melody = \notes \relative c'' {
        \clef violin;
index 52014326e820f9e676f8a822086596e173fd357f..cf4db4c84a3a529f325b1a939547f2ca5233fc9d 100644 (file)
@@ -6,7 +6,6 @@ depth = ..
 NAME = lilypond
 SUBDIRS = include
 
-EXTRA_DIST_FILES = VERSION 
 MODULE_LIBS=$(depth)/lib $(depth)/flower
 
 STEPMAKE_TEMPLATES= c++ executable 
@@ -21,7 +20,4 @@ $(outdir)/lily-version.o: $(outdir)/version.hh
 $(outdir)/main.o: $(outdir)/BLURB.hh $(outdir)/COPERTINA.hh $(outdir)/FLAPTEKST.hh
 
 
-# ugh . -> $(outdir)
-VERSION: $(depth)/VERSION
-       cp $< $@
 
index 323bf8ddd8b4a09f8ec8942db190bf826d9040d0..b5cf16e37812278e01c9a3ef36af6df1d1ae2fd2 100644 (file)
@@ -33,7 +33,6 @@ Abbreviation::brew_molecule_p () const
   Real interbeam_f = paper ()->interbeam_f (stem_l_->mult_i_);
   Real w = 1.5 * lookup_l ()->ball (2).dim_.x ().length ();
   Real internote_f = paper ()->internote_f ();
-  Real interline_f = paper ()->interline_f ();
   Real beam_f = paper ()->beam_thickness_f ();
 
   int beams_i = 0;
index 2935a8a96797100ed0ab1fb06c2a43107b0b1ede..afd43bf1afe47e9f9b1c34203e684f5116017caa 100644 (file)
@@ -105,13 +105,13 @@ Adobe_font_metric::str () const
   UGH. should have hashtable.
  */
 Adobe_font_char_metric
-Adobe_font_metric::find_char (String nm) const
+Adobe_font_metric::find_char (String nm, bool warn) const
 {
   for (int i=0; i < char_metrics_.size (); i++)
     if (char_metrics_[i].N_ == nm)
       return char_metrics_[i];
-
-  warning (_f ("can't find character called `%s'", nm.ch_C()));
+  if (warn)
+    warning (_f ("can't find character called `%s'", nm.ch_C()));
 
  Adobe_font_char_metric a;
  return a;
index 48b5c737202b1b126d42d32321c13942750ebe57..cbb5579563cc487a302db695a527e8d9850b1e56 100644 (file)
@@ -29,12 +29,12 @@ Atom::check_infinity_b ()const
       if (abs (off_[ax]) >= 100 CM)
        {
          warning (_f ("ridiculous dimension: %s, %s", axis_name_str (ax),
-                  print_dimen(off_[ax])));
+                  print_dimen (off_[ax])));
          
          if (experimental_features_global_b)
            assert (false);
 
-         ((Atom*)this)->off_[ax] = 0.0;
+         ( (Atom*)this)->off_[ax] = 0.0;
          ridiculous = true;
        }
     }
@@ -44,21 +44,21 @@ Atom::check_infinity_b ()const
 
 
 void
-Atom::print() const
+Atom::print () const
 {
 #ifndef NPRINT
-  DOUT << "texstring: " << tex_ << '\n';
+  DOUT << "string: " << str_ << '\n';
 
   DOUT << "dim:";
-  for (Axis i=X_AXIS; i < NO_AXES; incr(i))
-    DOUT << axis_name_str(i) << " = " << dim_[i].str();
+  for (Axis i=X_AXIS; i < NO_AXES; incr (i))
+    DOUT << axis_name_str (i) << " = " << dim_[i].str ();
 
   DOUT << "\noffset: " << off_.str ();
 #endif
 }
 
 Box
-Atom::extent() const
+Atom::extent () const
 {
   Box b (dim_);
   b.translate (off_);
@@ -66,23 +66,30 @@ Atom::extent() const
 }
 
 
-Atom::Atom()
+Atom::Atom ()
   : dim_ (Interval (0,0),Interval (0,0))
 {
-  tex_ = "\\unknown";
+  /*
+    urg
+    We should probably make Atom an abstract base class to
+    derive Ps_atom and Tex_atom from.
+    But Atom is used as a simple type *everywhere*,
+    and we don't have virtual contructors.
+   */
+  str_ = ps_output_global_b ? "unknown" : "\\unknown";
 }
 
 Atom::Atom (String s, Box b)
   :  dim_ (b)
 {
-  tex_ = s;
+  str_ = s;
 }
 
 
 String
-Atom::str() const
+Atom::str () const
 {
-  return String ("Atom (\'") + tex_ + "\', (" + dim_.x().str () + ", "
+  return String ("Atom (\'") + str_ + "\', (" + dim_.x ().str () + ", "
     + dim_.y ().str () + "))";
 }
 
@@ -107,3 +114,9 @@ Atom::translate (Offset o)
   off_ += o;
   check_infinity_b ();
 }
+
+bool
+Atom::empty() const
+{
+  return (dim_.y().length() == 0);
+}
index 4f97c77fd78bf52b9a486a776a73b93956bcd395..d314f35385f8150de87d7d0eb2815ba50e0c0905 100644 (file)
@@ -60,11 +60,10 @@ Change_iterator::process_and_next (Moment m)
        Translator_group * dest = 
          report_to_l ()->find_create_translator_l (to_type, to_id);
        current->remove_translator_p (last);
-       dest->add (last);
+       dest->add_translator (last);
       }
     else
       {
-       
        /*
          We could change the current translator's id, but that would make 
          errors hard to catch
index 8915e7cfe50fccfeed4916f2c398a65d641f7549..8195fbd9bf6c382b4e76f2f489e7fdcf15ac3ebf 100644 (file)
@@ -181,7 +181,7 @@ if (it_l)
 void
 Clef_engraver::do_creation_processing()
 {
-  Scalar def = get_property ("defaultclef");
+  Scalar def = get_property ("defaultClef");
   if (def.to_bool ()) // egcs: Scalar to bool is ambiguous
     set_type (def);
   
index 9fc4704f2c0ec5ebb5d440676c77d82b247e7d16..1b7107f80d3ddbbf6bbfdb3392939302c7cbac2d 100644 (file)
@@ -72,7 +72,7 @@ Dynamic_engraver::do_process_requests()
          Text_def * td_p = new Text_def;
          td_p->align_dir_ = CENTER;
          String loud = dreq_l->access_Absolute_dynamic_req ()->loudness_str ();
-         td_p->text_str_ = paper ()->lookup_l (0)->dynamic (loud).tex_;
+         td_p->text_str_ = paper ()->lookup_l (0)->dynamic (loud).str_;
          td_p->style_str_ = "dynamic";
 
          
index 8ac916b54737a96f862efc9e849ff12e2ecfdb8a..2dc0b4131b24b756dbea75a0007be88550f43d2d 100644 (file)
@@ -30,7 +30,7 @@ Engraver_group_engraver::do_announces()
   Link_array<Translator_group> groups = group_l_arr ();
   for (int i=0; i < groups.size(); i++) 
     {
-      Engraver * eng = groups[i]->engraver_l ();
+      Engraver * eng = groups[i]->access_Engraver  ();
       if (eng)
        {
          Engraver_group_engraver * group =
@@ -52,7 +52,7 @@ Engraver_group_engraver::do_announces()
            info.req_l_ = &dummy_req;
          for (int i=0; i < nongroups.size(); i++) 
            {   // Is this good enough?
-             Engraver * eng = nongroups[i]->engraver_l ();
+             Engraver * eng = nongroups[i]->access_Engraver  ();
              if (eng && eng!= info.origin_grav_l_arr_[0])
                eng->acknowledge_element (info);
            }
@@ -60,7 +60,7 @@ Engraver_group_engraver::do_announces()
       announce_info_arr_.clear ();
       for (int i=0; i < nongroups.size(); i++)
        {
-         Engraver * eng = nongroups[i]->engraver_l ();
+         Engraver * eng = nongroups[i]->access_Engraver  ();
          if (eng)
            eng->process_acknowledged ();
        }
@@ -77,7 +77,7 @@ Engraver_group_engraver::get_staff_info() const
   Link_array<Translator> simple_translators = nongroup_l_arr (); 
   for (int i=0; i < simple_translators.size(); i++)
     {
-    Engraver * eng = simple_translators[i]->engraver_l ();
+    Engraver * eng = simple_translators[i]->access_Engraver  ();
     if (eng)
       eng->fill_staff_info (inf);
     }
index 696bedcf2e26b2a2cf039a9975ef8f9b7ca7f3d7..ecad05587023cc8ee2a188e9357a5bb31168b3d7 100644 (file)
@@ -57,6 +57,6 @@ Engraver_group_engraver*
 Engraver::daddy_grav_l () const
 {
   return (daddy_trans_l_ )
-       ? (Engraver_group_engraver*) daddy_trans_l_->engraver_l ()
+       ? (Engraver_group_engraver*) daddy_trans_l_->access_Engraver  ()
        : 0;
 }
index 2a38c5e5976e751583d2ba9579bc16973e14f6c2..680245dc1acc8dfd6efe4dd2bbedac55ef476b1e 100644 (file)
@@ -4,6 +4,7 @@
   source file of the GNU LilyPond music typesetter
 
   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "string.hh"
 #include "header.hh"
 #include "main.hh"
 
-extern char const *lily_version_number_sz();
+extern char const *lily_version_number_sz ();
 
+Header::Header ()
+{
+  lily_id_str_ = "Lily was here, " +
+    String (lily_version_number_sz ());
+}
 
+//urg
 String
-Header::TeX_string() const
+Header::tex_string () const
 {
   String s;
 
   s+= "\\def\\LilyIdString{"  + lily_id_str_ + "}";
   
-  for (Dictionary_iter<String> i(*this); i.ok(); i++) 
-    {
-      s += "\\def\\mudela" + i.key() + "{" + i.val() + "}";
-    }
+  for (Dictionary_iter<String> i (*this); i.ok (); i++) 
+    s += "\\def\\mudela" + i.key () + "{" + i.val () + "}";
   return s;
 }
 
-Header::Header ()
+String
+Header::ps_string () const
 {
-  lily_id_str_ = "Lily was here, " +
-    String (lily_version_number_sz ());
+  String s;
+
+  s+= "/lily_id_string\n{" + lily_id_str_ + "} bind def\n";
+  
+  for (Dictionary_iter<String> i (*this); i.ok (); i++) 
+    s += "/mudela" + i.key () + "{" + i.val () + "} bind def";
+  return s;
 }
+
index c5dbee2c00efeb8ccd2389ffa551afd2515f2bef..bdd40f69a47a7995dca5204ef33622f4f84f0a80 100644 (file)
@@ -14,7 +14,6 @@
 #include "my-lily-lexer.hh"
 #include "debug.hh"
 #include "symtable.hh"
-#include "lookup.hh"
 #include "script-def.hh"
 #include "request.hh"
 #include "translator.hh"
@@ -85,7 +84,6 @@ Class ## _identifier::do_print () const { \
 
 
 DEFAULT_PRINT(General_script_def);
-DEFAULT_PRINT(Lookup);
 DEFAULT_PRINT(Translator);
 DEFAULT_PRINT(Symtables);
 DEFAULT_PRINT(Music);
@@ -104,7 +102,6 @@ Class ## _identifier::do_str () const { \
 
 DUMMY_STR(Notename_table);
 DUMMY_STR(General_script_def);
-DUMMY_STR(Lookup);
 DUMMY_STR(Translator);
 DUMMY_STR(Symtables);
 DUMMY_STR(Music);
@@ -179,7 +176,6 @@ IMPLEMENT_ID_CLASS(int);
 IMPLEMENT_ID_CLASS(Real);
 IMPLEMENT_ID_CLASS(String);
 IMPLEMENT_ID_CLASS(General_script_def);
-IMPLEMENT_ID_CLASS(Lookup);
 IMPLEMENT_ID_CLASS(Symtables);
 IMPLEMENT_ID_CLASS(Music);
 IMPLEMENT_ID_CLASS(Score);
@@ -196,7 +192,6 @@ DEFAULT_ACCESSOR(Duration);
 DEFAULT_ACCESSOR(int);
 DEFAULT_ACCESSOR(Real);
 DEFAULT_ACCESSOR(String);
-DEFAULT_ACCESSOR(Lookup);
 DEFAULT_ACCESSOR(Symtables);
 DEFAULT_ACCESSOR(Score);
 DEFAULT_ACCESSOR(Midi_def);
index 8a932d05fc0c988d5fe9921ee85f3a96cad98a43..4f5d85c8d562c74256446d8316605d5e230b91fc 100644 (file)
@@ -43,7 +43,7 @@ struct Adobe_font_metric {
   String EncodingScheme_;
   Array<Adobe_font_char_metric> char_metrics_;
 
-  Adobe_font_char_metric find_char (String name) const;
+  Adobe_font_char_metric find_char (String name, bool warn=true) const;
   String str () const;
   Adobe_font_metric ();
 };
index d7c31ee35ce2589ef87f2bec24fe3c3680c478c5..0d88e7ce315cbba217a753c552fdc4c15f32e6f1 100644 (file)
@@ -18,7 +18,7 @@
 class Atom {
   Offset off_;
 public:
-  String tex_;
+  String str_;
   String font_;
   Box dim_;
 
@@ -32,5 +32,6 @@ public:
   Box extent() const;
   void print() const;
   bool check_infinity_b () const;
+  bool empty() const;
 };
 #endif
index e6e5b7fe7665e4ece53207c6f559320c6421d17d..a8086af1f556cc3d09b79d9b6bff25830c0e4dd4 100644 (file)
@@ -70,7 +70,7 @@ public:
   Engraver () {}
 
   DECLARE_MY_RUNTIME_TYPEINFO;
-  virtual Engraver * engraver_l () { return this; }
+  virtual Engraver * access_Engraver () { return this; }
 };
 
 
index a6b37dba9f521ae5ca8a8c6facf7e363b8185eb0..288ca7a671412a898977a961421124c9ffa043a0 100644 (file)
    information.  */
 struct Header : Dictionary<String>
 {
-  String lily_id_str_;
-  String TeX_string() const;
   Header ();
+
+  String tex_string () const;
+  String ps_string () const;
+
+  String lily_id_str_;
 };
 
 #endif // HEADER_HH
index 8a951de6c715edfcbb7ebb715e37e0b4a5621518..63083109f70151184848858ce8e2b45893785061 100644 (file)
@@ -22,7 +22,6 @@ class General_script_def_identifier;
 class Symtables_identifier;
 class Midi_def_identifier;
 class Paper_def_identifier;
-class Lookup_identifier;
 class Real_identifier;
 class int_identifier;
 class String_identifier;
@@ -61,7 +60,6 @@ struct Identifier : public Input {
   IDACCESSOR(Symtables)
   IDACCESSOR(Midi_def)
   IDACCESSOR(Paper_def)
-  IDACCESSOR(Lookup)
   IDACCESSOR(Real)
   IDACCESSOR(String)
   IDACCESSOR(Request)
@@ -86,7 +84,7 @@ struct Class ## _identifier : Identifier {\
     {\
       return this;\
     }\
-                            virtual Class* access_ ## Class (bool copy_b = true) const;\
+                            virtual Class* access_ ## Class (bool copy_b) const;\
                             ~Class ## _identifier();\
                             virtual void do_print () const; \
                             virtual String do_str () const; \
@@ -99,7 +97,6 @@ DECLARE_ID_CLASS(Notename_table);
 DECLARE_ID_CLASS(Real);
 DECLARE_ID_CLASS(String);
 DECLARE_ID_CLASS(General_script_def);
-DECLARE_ID_CLASS(Lookup);
 DECLARE_ID_CLASS(Symtables);
 DECLARE_ID_CLASS(Music);
 DECLARE_ID_CLASS(int);
index f80f11dece588dc0c81a9070ed5e07922267c4aa..25682a4cc45fb4292f17edc31f2fa0a544aca9ab 100644 (file)
@@ -73,6 +73,7 @@ struct Dynamic;
 struct Dynamic_req;
 struct Element_group;
 struct Element_group_item;
+struct Engraver_group_engraver;
 struct General_script_def;
 struct Graphical_element;
 struct Graphical_axis_group;
@@ -145,6 +146,8 @@ struct Music_list;
 struct Musical_req;
 struct Music;
 struct Music_sequence;
+struct Music_wrapper_iterator;
+struct Music_wrapper;
 struct My_lily_parser;
 struct Note_column;
 struct Note_column_engraver;
@@ -154,28 +157,29 @@ struct Note_head;
 struct Note_head_engraver;
 struct Notename_table;
 struct Offset;
-struct Outputter;
-struct Performer;
 struct Paper_column;
-struct Paper_score;
 struct Paper_def;
+struct Paper_outputter;
+struct Paper_score;
+struct Paper_stream;
 struct Partial_measure_req;
+struct Performer;
 struct Plet;
 struct Plet_engraver;
 struct Plet_req;
 struct Plet_spanner;
 struct Rational;
-struct Music_wrapper_iterator;
-struct Music_wrapper;
-struct Relative_octave_music;
-struct Engraver_group_engraver;
 struct Piano_brace;
 struct Performer;
 struct Performer_group_performer;
 struct Property_iterator;
+struct Ps_lookup;
+struct Ps_outputter;
+struct Ps_stream;
 struct Request;
 struct Request_column;
 struct Engraver;
+struct Relative_octave_music;
 struct Rest;
 struct Rest_collision;
 struct Rest_collision_engraver;
@@ -223,6 +227,8 @@ struct Symtables;
 struct Super_element;
 struct Translation_property;
 struct Tempo_req;
+struct Tex_lookup;
+struct Tex_outputter;
 struct Tex_stream;
 struct Text_def;
 struct Text_gob;
@@ -231,7 +237,6 @@ struct Text_engraver;
 struct Text_req;
 struct Text_spanner;
 struct Tie;
-struct Tex_outputter;
 struct Tie_engraver;
 struct Tie_req;
 struct Time_description;
index da5e0a53ef9822c32e46cc8167937a3ff02e3e24..f5be0ca9ab79fcea74d0d32bb1c7f810eb9fb08e 100644 (file)
@@ -24,6 +24,7 @@ extern bool no_timestamps_global_b;
 extern bool find_quarts_global_b;
 extern int exit_status_i_;
 extern bool experimental_features_global_b;
+extern bool ps_output_global_b;
 extern bool dependency_global_b;
 extern bool version_ignore_global_b;
 
index 29f4c11aaeaa225d7a1af7adb9bd3ff7ed342c64..5940cc417738e83fe285cbec42671c9f636991bb 100644 (file)
  */
 class Music_output_def  
 {
+  Scope *translator_p_dict_p_;
 public:
-  Dictionary<Translator*> translator_p_dict_;
+  Scope *scope_p_;
+  
   Array<String> filename_str_arr_;
 
 
+
   
   Music_output_def (Music_output_def const&);
   Music_output_def ();
@@ -37,8 +40,8 @@ public:
 
   Global_translator *get_global_translator_p ();
   Translator_group *get_group_translator_p (String type) const;
-  void assign_translator (String, Translator*);
-  String outfile_str_;
+    String get_default_output () const;
+  void assign_translator (Translator*);
   Translator * find_translator_l (String) const;
   virtual int get_next_default_count () const;
 };
index 6cdfc5cda3a1be5bd8a976ce1e932a9bcd0f2ed3..553cc893751d503538b7d372f1536d7c24fb215b 100644 (file)
     */
 
 class Paper_score : public Music_output {
-  Tex_outputter *open_tex_outputter (Tex_stream*);
-  Tex_stream *open_output_stream ();
+  Paper_outputter *open_paper_outputter (Paper_stream*);
+  Paper_outputter *open_ps_outputter (Ps_stream*);
+  Paper_outputter *open_tex_outputter (Tex_stream*);
+  Paper_stream *open_output_stream ();
   
 public:
   Paper_def *paper_l_;
@@ -37,7 +39,7 @@ public:
   /// other elements
   Pointer_list<Score_element*> elem_p_list_;
   
-  Outputter *outputter_l_;  
+  Paper_outputter *outputter_l_;  
   Line_of_score * line_l_;
   
   Paper_score ();
index aa8973d8a8b7042a46763f260274b93716ef5b00..87bfe545731de4472bebe79619131a29990badc7 100644 (file)
@@ -37,8 +37,8 @@
 class Paper_def : public Music_output_def 
 {
   Assoc<int, Lookup *> *lookup_p_assoc_p_;
-  Scope* scope_p_;
   static int default_count_i_;
+  bool ps_b_;
 
 protected:
   VIRTUAL_COPY_CONS(Paper_def,Music_output_def);
@@ -92,7 +92,9 @@ public:
   Real arithmetic_constant (Moment minimal_mom) const;
   Real arithmetic_spacing (Moment mom,Real constant) const;
   virtual int get_next_default_count () const;
-  String TeX_output_settings_str () const;
+  //urg
+  String tex_output_settings_str () const;
+  String ps_output_settings_str () const;
   // urg
   friend int yyparse (void*);
 };
diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh
new file mode 100644 (file)
index 0000000..5fa1204
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  paper-outputter.hh -- declare Paper_outputter
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef PAPER_OUTPUTTER_HH
+#define PAPER_OUTPUTTER_HH
+
+#include "lily-proto.hh"
+#include "array.hh"
+#include "string.hh"
+
+/**
+  Abstract interface for a Score_element to output itself.
+ */
+class Paper_outputter
+{
+public:
+  Paper_outputter (Paper_stream *);
+  virtual ~Paper_outputter ();
+
+  virtual void output_molecule (Molecule const *, Offset, char const *)=0;
+  void output_molecule (Molecule const *, Offset, char const *, String);
+  virtual void start_line ()=0;
+  virtual void stop_line ()=0;
+  virtual void switch_to_font (String fontname)=0;
+
+  Array<String> font_arr_;
+  String current_font_;
+  Paper_stream* outstream_l_;
+};
+
+#endif // PAPER_OUTPUTTER_HH
diff --git a/lily/include/paper-stream.hh b/lily/include/paper-stream.hh
new file mode 100644 (file)
index 0000000..dc5b085
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef PAPER_STREAM_HH
+#define PAPER_STREAM_HH
+
+#include <iostream.h>
+#include "string.hh"
+
+/** Paper output
+  Baseclass for writing to a PostScript or TeX file.
+  It counts braces to prevent nesting errors, and
+  it will add a comment sign before each newline.
+ */
+
+class Paper_stream
+{
+public:
+    bool outputting_comment;
+    ostream *os;
+    int nest_level;
+    /// to check linelen in output. TeX has limits.
+    int line_len_i_;
+    
+    /// open a file for writing
+    Paper_stream (String filename);
+    virtual void header () = 0;
+
+    /// delegate conversion to scalar class
+    virtual Paper_stream &operator <<(Scalar);
+
+    /// close the file
+    virtual ~Paper_stream();
+
+private:
+    Paper_stream (Paper_stream const&);
+    void break_line();
+};
+
+#endif // PAPER_STREAM_HH
index 11fbdbb397ca986781351ab51a41633ee2765397..61fd1d2aba40890deeb0d39bad10ceb590534192 100644 (file)
@@ -27,7 +27,7 @@ public:
 protected:
   virtual int get_tempo_i() const;
   virtual void play (Audio_element * elem_p );
-  Performer * performer_l () { return this; }
+  Performer * access_Performer () { return this; }
 };
 
 
diff --git a/lily/include/ps-lookup.hh b/lily/include/ps-lookup.hh
new file mode 100644 (file)
index 0000000..3e2c5e0
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  tex-lookup.hh -- declare Tex_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#ifndef PS_LOOKUP_HH
+#define PS_LOOKUP_HH
+
+#include "lookup.hh"
+
+class Ps_lookup : public Lookup
+{
+public:
+  Ps_lookup ();
+  Ps_lookup (Lookup const& s);
+  Ps_lookup (Symtables const& s);
+  virtual ~Ps_lookup ();
+
+  virtual Atom afm_find (String s) const;
+  virtual Atom Ps_lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
+  virtual Atom Ps_lookup::hairpin (Real width, bool decresc, bool continued) const;
+  virtual Atom Ps_lookup::plet (Real dy , Real dx, Direction dir) const;
+  virtual Atom Ps_lookup::ps_beam (Real slope, Real width, Real thick) const;
+  virtual Atom Ps_lookup::slur (Array<Offset> controls) const;
+  virtual Atom stem (Real y1, Real y2) const;
+  virtual Atom Ps_lookup::vbracket (Real &y) const;
+};
+
+#endif // PS_LOOKUP_HH
diff --git a/lily/include/ps-outputter.hh b/lily/include/ps-outputter.hh
new file mode 100644 (file)
index 0000000..8cbcf18
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  ps-outputter.hh -- declare Ps_outputter
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef PS_OUTPUTTER_HH
+#define PS_OUTPUTTER_HH
+
+#include "paper-outputter.hh"
+
+class Ps_outputter : public Paper_outputter
+{
+public:
+  Ps_outputter (Paper_stream *);
+  virtual ~Ps_outputter ();
+
+  void switch_to_font (String);
+  virtual void output_molecule (Molecule const*, Offset, char const*);
+  virtual void start_line ();
+  virtual void stop_line ();
+};
+
+#endif // PS_OUTPUTTER_HH
diff --git a/lily/include/ps-stream.hh b/lily/include/ps-stream.hh
new file mode 100644 (file)
index 0000000..a61be0a
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef PS_STREAM_HH
+#define PS_STREAM_HH
+
+#include "paper-stream.hh"
+
+/** PS output.
+  Use this class for writing to a PS file.
+  It counts braces to prevent nesting errors, and
+  it will add a comment sign before each newline.
+  */
+class Ps_stream : public Paper_stream
+{
+public:
+    Ps_stream (String filename);
+    virtual ~Ps_stream();
+
+    virtual void header();
+    virtual Paper_stream &operator <<(Scalar);
+};
+
+#endif // PS_STREAM_HH
index 12cf34b11e1fbb18f447b8ee52672781f30fd27a..2c19d3e9b0854a7d6d9adc70752c35f825258200 100644 (file)
@@ -22,14 +22,18 @@ struct  Symtable : public Dictionary<Atom> {
 };
 
 
-struct Symtables : private Dictionary<Symtable*> {
-    
-    Symtable* operator()(String s);
-    ~Symtables();
-    Symtables();
-    Symtables (Symtables const&);
-    void add (String, Symtable*);
-    void print() const;
+struct Symtables : private Dictionary<Symtable*>
+{
+  Symtables();
+  Symtables (Symtables const&);
+  ~Symtables();
+
+  Symtable* operator()(String s);
+  void add (String, Symtable*);
+  void print() const;
+
+  String font_;
+  String font_path_;  
 };
 
 
diff --git a/lily/include/tex-lookup.hh b/lily/include/tex-lookup.hh
new file mode 100644 (file)
index 0000000..fb306b9
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+  tex-lookup.hh -- declare Tex_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#ifndef TEX_LOOKUP_HH
+#define TEX_LOOKUP_HH
+
+#include "ps-lookup.hh"
+
+class Tex_lookup : public Ps_lookup
+{
+public:
+  Tex_lookup ();
+  Tex_lookup (Lookup const& s);
+  Tex_lookup (Symtables const& s);
+  virtual ~Tex_lookup();
+
+  virtual Atom afm_find (String s) const;
+  virtual Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
+  Atom embed (Atom a) const;
+  virtual Atom hairpin (Real width, bool decresc, bool continued) const;
+  virtual Atom plet (Real dy , Real dx, Direction dir) const;
+  virtual Atom ps_beam (Real slope, Real width, Real thick) const;
+  virtual Atom slur (Array<Offset> controls) const;
+  virtual Atom stem (Real y1, Real y2) const;
+  virtual Atom vbracket (Real &y) const;
+};
+
+#endif // TEX_LOOKUP_HH
index ce9f772917ceeee0effbcffbe2d3ec2b84a1a319..d4461c2bacb36246171d5eeaa3286bcfe6da9c83 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  outputter.hh -- declare Outputter
+  tex-outputter.hh -- declare Tex_outputter
 
   source file of the GNU LilyPond music typesetter
 
@@ -7,38 +7,21 @@
 */
 
 
-#ifndef OUTPUTTER_HH
-#define OUTPUTTER_HH
+#ifndef TEX_OUTPUTTER_HH
+#define TEX_OUTPUTTER_HH
 
-#include "lily-proto.hh"
-#include "array.hh"
-#include "string.hh"
+#include "paper-outputter.hh"
 
-/**
-  Abstract interface for a Score_element to output itself.
- */
-struct Outputter
+class Tex_outputter : public Paper_outputter
 {
-  virtual ~Outputter(){}
-  virtual void start_line ()=0;
-  virtual void output_molecule (Molecule const *, Offset, char const *)=0;
-  virtual void stop_line ()=0;
-};
+public:
+  Tex_outputter (Paper_stream *);
+  virtual ~Tex_outputter ();
 
-/**
-  Output a line of score using  TeX strings
- */
-struct Tex_outputter : Outputter
-{
-  Array<String> font_arr_;
-  String current_font_;
-  
-  Tex_outputter (Tex_stream *);
-  Tex_stream * outstream_l_;
   void switch_to_font (String);
   virtual void output_molecule (Molecule const*, Offset, char const*);
   virtual void start_line ();
   virtual void stop_line ();
 };
 
-#endif // OUTPUTTER_HH
+#endif // TEX_OUTPUTTER_HH
index e26c8328cb3edb102eba7a4e5158883d40630826..7f94aec2b192451770f36612116a297a6c8b27b1 100644 (file)
@@ -1,34 +1,21 @@
-#ifndef TSTREAM__HH
-#define TSTREAM__HH
-
-#include <iostream.h>
-#include "string.hh"
+#ifndef TEX_STREAM_HH
+#define TEX_STREAM_HH
 
+#include "paper-stream.hh"
 
 /** TeX output.
   Use this class for writing to a TeX file.
   It counts braces to prevent nesting errors, and
   it will add a comment sign before each newline.
   */
-class Tex_stream {
-    void break_line();
+class Tex_stream : public Paper_stream
+{
 public:
-    bool outputting_comment;
-    ostream *os;
-    int nest_level;
-    /// to check linelen in output. TeX has limits.
-    int line_len_i_;
-    
-    /// open a file for writing
     Tex_stream (String filename);
-    void header();
-
-    /// delegate conversion to scalar class
-    Tex_stream &operator <<(Scalar);
+    virtual ~Tex_stream();
 
-    /// close the file
-    ~Tex_stream();
-private:
-    Tex_stream (Tex_stream const&);
+    virtual void header();
+    virtual Paper_stream &operator <<(Scalar);
 };
-#endif
+
+#endif // TEX_STREAM_HH
index 9e0012a8e99fe46b4eabd6fa34565f8c19fa2321..18aa404ab57e5e9b2a7e26663a3a13f075c5008b 100644 (file)
@@ -19,7 +19,7 @@ class Timing_engraver : public Timing_translator, public Engraver
 {   
 protected:
   virtual void fill_staff_info (Staff_info&);
-  virtual Engraver * engraver_l () { return Engraver::engraver_l (); }
+  virtual Engraver * access_Engraver () { return Engraver::access_Engraver (); }
 public:
   TRANSLATOR_CLONE(Timing_engraver);
   DECLARE_MY_RUNTIME_TYPEINFO;
index a1613cba607e62247c3a189fae474d265718c0b8..1b1f05f004c695b3906a96332cc63ef39ef90439 100644 (file)
@@ -25,20 +25,29 @@ typedef void (Translator::*Const_method_pointer)(void) const;
   hierarchically grouped #Translator#s
   */
 class Translator_group : public virtual Translator {
+  Array<String> consists_str_arr_;
+  Array<String> accepts_str_arr_;
+
 public:
   Pointer_list<Translator *> trans_p_list_;
   String id_str_;
-  Array<String> consists_str_arr_;
-  Array<String> accepts_str_arr_;
+
+
+  
+  
   int iterator_count_;
 
   TRANSLATOR_CLONE(Translator_group);
   DECLARE_MY_RUNTIME_TYPEINFO;
 
+  void set_acceptor (String accepts, bool add);
+  void set_element (String accepts, bool add);  
+  
+  
   Translator_group(Translator_group const &);
   Translator_group();
-  void add (Translator *);
-
+  void add_translator (Translator *trans_p);
+  
   Link_array<Translator> nongroup_l_arr () const;
   Link_array<Translator_group> group_l_arr () const;
   
@@ -53,6 +62,8 @@ public:
   Translator *remove_translator_p (Translator*trans_l);
   void check_removal ();
 
+
+  
   Translator *get_simple_translator (char const *type) const;
   Translator_group *find_existing_translator_l (String n, String id);
   Translator_group *find_create_translator_l (String n, String id);
@@ -61,7 +72,7 @@ public:
   Translator_group*get_default_interpreter();
 protected:
   virtual ~Translator_group ();
-  virtual Translator_group * group_l () { return this; }
+  virtual Translator_group * access_Translator_group () { return this; }
   virtual void do_print () const;
   virtual void do_process_requests ();
   virtual void do_add_processing ();
index b96d6807216de8e92d4519bde8c74be92cfa4b3b..57d45e4d982a5f1d5b933aeb8c5c6399dcbe8759 100644 (file)
@@ -66,9 +66,9 @@ public:
   Music_output_def *output_def_l () const;
   
   virtual Moment now_moment () const;  
-  virtual Engraver *engraver_l () { return 0; }
-  virtual Performer *performer_l() { return 0; }
-  virtual Translator_group * group_l () { return 0; }
+  virtual Engraver *access_Engraver () { return 0; }
+  virtual Performer *access_Performer() { return 0; }
+  virtual Translator_group * access_Translator_group () { return 0; }
 
 protected:
    enum { 
index 222d25beb8f5181091446200ada836c3f654ce86..c6a3a0718946faf0113bf6daa1869bd7fa7f19ee 100644 (file)
@@ -40,7 +40,7 @@ Local_key_engraver::do_creation_processing ()
     }
   else
     {
-      key_C_ = &((Key_engraver*)result->engraver_l ())->key_;
+      key_C_ = &((Key_engraver*)result->access_Engraver  ())->key_;
       local_key_ = *key_C_;
     }
 }
index 5467b79e21080151d91b05299eb290a48604e5c1..e07e46c7506d5978b870bf2227718b4e6884f1e0 100644 (file)
@@ -30,6 +30,7 @@ bool version_ignore_global_b = false;
 bool no_paper_global_b = false;
 bool no_timestamps_global_b = false;
 bool find_quarts_global_b = false;
+bool ps_output_global_b = false;
 String default_outname_base_global =  "lelie";
 int default_count_global;
 File_path global_path;
@@ -234,6 +235,7 @@ main (int argc, char **argv)
        {
        case 't':
          experimental_features_global_b = true;
+         ps_output_global_b = true;
          break;
        case 'o':
          outname_str = oparser.optional_argument_ch_C_;
index bcda3dbc42c642ad49a3011b6b17d2d0da33296c..86a20a731e862e20bc8a2bdd42501d555b8d56f0 100644 (file)
@@ -6,11 +6,12 @@
   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-
+#include "scope.hh"
 #include "debug.hh"
 #include "music-output-def.hh"
 #include "global-translator.hh"
 #include "dictionary-iter.hh"
+#include "identifier.hh"
 
 int
 Music_output_def::get_next_default_count () const
@@ -22,28 +23,46 @@ IMPLEMENT_IS_TYPE_B(Music_output_def);
 
 Music_output_def::Music_output_def ()
 {
+  scope_p_ = new Scope;
+  translator_p_dict_p_ = new Scope;
 }
 
 Music_output_def::~Music_output_def ()
 {
-  for (Dictionary_iter<Translator*> i (translator_p_dict_); i.ok (); i++)
-    delete i.val ();
+  delete scope_p_;
+  delete translator_p_dict_p_;
 }
 
 Music_output_def::Music_output_def (Music_output_def const &s)
 {
-  outfile_str_ = s.outfile_str_;
-  for (Dictionary_iter<Translator*> i (s.translator_p_dict_); i.ok (); i++)
-    assign_translator (i.key (), i.val ()->clone ());
+  scope_p_ = new Scope (*s.scope_p_);
+  translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_);
+  
+  for (Dictionary_iter<Identifier*> i (*translator_p_dict_p_);  i.ok (); i++)
+    {
+      Translator * t = i.val ()->access_Translator (false);
+      t-> output_def_l_ = this;
+    }
+}
+
+void
+Music_output_def::assign_translator (Translator*tp)
+{
+  String s =tp->type_str_;
+  if (translator_p_dict_p_->elem_b (s))
+    delete translator_p_dict_p_->elem (s);
+  
+  (*translator_p_dict_p_)[s] = new Translator_identifier (tp, 0);
+  tp ->output_def_l_ = this;
 }
 
 Translator*
 Music_output_def::find_translator_l (String name) const
 {
-  if (translator_p_dict_.elt_b (name))
-    return translator_p_dict_[name];
+  if (translator_p_dict_p_->elem_b (name))
+    return (*translator_p_dict_p_)[name]->access_Translator ();
 
-  if (global_translator_dict_p->elt_b (name))
+  if (global_translator_dict_p->elem_b (name))
     return (*global_translator_dict_p)[name];
 
   return 0;
@@ -57,33 +76,28 @@ Music_output_def::get_global_translator_p ()
   if (!t)
     error (_("Can't find Score context"));
   t = t->clone ();
-  Global_translator *g = t->group_l ()->global_l ();
+  Global_translator *g = t->access_Translator_group ()->global_l ();
   t->add_processing ();
   
   return g;
 }
 
-
-void
-Music_output_def::assign_translator (String s, Translator*t)
-{
-  t->type_str_ = s;
-  t->output_def_l_ = this;
-  
-  if (translator_p_dict_.elt_b (s))
-    delete translator_p_dict_[s];
-  translator_p_dict_[s] = t;
-}
-
 void
 Music_output_def::print () const
 {
 #ifndef NPRINT
-  for (Dictionary_iter<Translator*> i (translator_p_dict_); i.ok (); i++)
-    {
-      DOUT << i.key () << " = ";
-      i.val ()->print ();
-    }
-  DOUT << "output: " << outfile_str_;
+  translator_p_dict_p_->print ();
+  scope_p_->print( );
 #endif
 }
+
+String
+Music_output_def::get_default_output () const
+{
+  if (!scope_p_->elem_b ("output"))
+    return "";  
+  Identifier * id = (*scope_p_) ["output"];
+
+  String *p = id->access_String ();
+  return p ? *p : String ("");
+}
index 4c60dc23320694a95a555dc7f045ade1b7c9d473..c37ec26b09bace28f0921e693eb9f7699b81643b 100644 (file)
@@ -52,6 +52,7 @@ static Keyword_ent the_key_tab[]={
   {"property", PROPERTY},
   {"pt", PT_T},
   {"relative", RELATIVE},
+  {"remove", REMOVE},
   {"score", SCORE},
   {"script", SCRIPT},
   {"shape", SHAPE},
@@ -86,7 +87,7 @@ Identifier*
 My_lily_lexer::lookup_identifier (String s)
 {
   for (int i = scope_l_arr_.size (); i--; )
-    if (scope_l_arr_[i]->elt_b (s))
+    if (scope_l_arr_[i]->elem_b (s))
       return (*scope_l_arr_[i])[s];
   return 0;
 }
@@ -165,7 +166,7 @@ My_lily_lexer::lookup_pitch (String s)
 bool
 My_lily_lexer::notename_b (String s) const
 {
-  return note_tab_p_->elt_b (s);
+  return note_tab_p_->elem_b (s);
 }
 
 void
index 48f2e400acef5f5ddbb89a9df9ef54e5ad50517b..0ab995f15c11434d86afdf1a549f0cc6206ac240 100644 (file)
 #include "plist.hh"
 #include "p-col.hh"
 #include "p-score.hh"
-#include "tex-stream.hh"
 #include "p-col.hh"
 #include "header.hh"
 #include "word-wrap.hh"
 #include "gourlay-breaking.hh"
+#include "paper-stream.hh"
+#include "ps-stream.hh"
+#include "tex-stream.hh"
+#include "paper-outputter.hh"
+#include "ps-outputter.hh"
 #include "tex-outputter.hh"
 #include "file-results.hh"
 #include "misc.hh"
@@ -203,8 +207,8 @@ Paper_score::process ()
       line_l_->space_processing ();
 
   Array<Column_x_positions> breaking = calc_breaking ();
-  Tex_stream *tex_stream_p = open_output_stream ();
-  outputter_l_=open_tex_outputter (tex_stream_p);
+  Paper_stream *paper_stream_p = open_output_stream ();
+  outputter_l_ = open_paper_outputter (paper_stream_p);
 
   Link_array<Line_of_score> lines;
   for (int i=0; i < breaking.size (); i++)
@@ -230,9 +234,14 @@ Paper_score::process ()
       remove_line (line_l);
        
     }
-  *tex_stream_p << "\n\\EndLilyPondOutput";
+
+  if (ps_output_global_b)
+    *paper_stream_p << "\nshowpage\n";
+  else
+    *paper_stream_p << "\n\\EndLilyPondOutput";
+
   delete outputter_l_;
-  delete tex_stream_p;
+  delete paper_stream_p;
   outputter_l_ = 0;
 }
 
@@ -267,11 +276,12 @@ Paper_score::remove_line (Line_of_score *l)
     }
 }
 
-Tex_stream *
+Paper_stream *
 Paper_score::open_output_stream ()
 {
   // output
-  String base_outname = paper_l_->outfile_str_ ;
+  String base_outname=paper_l_->get_default_output ();
+
   if (base_outname.empty_b ())
     {
       base_outname = default_outname_base_global;
@@ -283,36 +293,75 @@ Paper_score::open_output_stream ()
     }
 
   String outname = base_outname;
-  if (outname != "-")
-     outname += ".tex";
-  target_str_global_array.push (outname);
 
-  *mlog << _f ("TeX output to %s...", 
-    outname == "-" ? String ("<stdout>") : outname ) << endl;
+  Paper_stream* p;
+  if (ps_output_global_b)
+    {
+      if (outname != "-")
+        outname += ".ps";
+      *mlog << _f ("PostScript output to %s...", 
+                  outname == "-" ? String ("<stdout>") : outname ) << endl;
+      p = new Ps_stream (outname);
+    }
+  else
+    {
+      if (outname != "-")
+        outname += ".tex";
+      *mlog << _f ("TeX output to %s...", 
+                  outname == "-" ? String ("<stdout>") : outname ) << endl;
+      p = new Tex_stream (outname);
+    }
+  target_str_global_array.push (outname);
+  return p;
+}
 
-  return  new Tex_stream (outname);
+// urg
+Paper_outputter*
+Paper_score::open_paper_outputter (Paper_stream* paper_stream_p)
+{
+  if (ps_output_global_b)
+    return open_ps_outputter ((Ps_stream*)paper_stream_p);
+  else
+    return open_tex_outputter ((Tex_stream*)paper_stream_p);
 }
 
+// urg urg urg
+Paper_outputter*
+Paper_score::open_ps_outputter (Ps_stream *ps_out_p)
+{
+  Ps_outputter *interfees_p = new Ps_outputter (ps_out_p);
 
+  if (header_global_p)
+    *ps_out_p << header_global_p->ps_string ();
+  
+  *ps_out_p << _ ("% outputting Score, defined at: ") << origin_str_ << '\n';
+
+  // urg
+  if (header_l_)
+    *ps_out_p << header_l_->ps_string ();
+  //aaarg
+  *ps_out_p << paper_l_->ps_output_settings_str ();
 
-Tex_outputter *
+  if (experimental_features_global_b)
+    *ps_out_p << "turnOnExperimentalFeatures\n";
+
+  return interfees_p;
+}
+
+Paper_outputter*
 Paper_score::open_tex_outputter (Tex_stream *tex_out_p)
 {
   Tex_outputter *interfees_p= new Tex_outputter (tex_out_p);
 
   if (header_global_p)
-    {
-      *tex_out_p << header_global_p->TeX_string ();
-    }
+    *tex_out_p << header_global_p->tex_string ();
     
   
   *tex_out_p << _ ("% outputting Score, defined at: ") << origin_str_ << '\n';
 
   if (header_l_)
-    {
-      *tex_out_p << header_l_->TeX_string();
-    }
-  *tex_out_p << paper_l_->TeX_output_settings_str ();
+    *tex_out_p << header_l_->tex_string();
+  *tex_out_p << paper_l_->tex_output_settings_str ();
   
 
   if (experimental_features_global_b)
index 3216e0cd1cccc3742ef3a4fefc20352ac4b586ba..2c006ad09798684bcc4e78ed34fdfae8e3fe214a 100644 (file)
@@ -13,6 +13,8 @@
 #include "paper-def.hh"
 #include "debug.hh"
 #include "lookup.hh"
+#include "ps-lookup.hh"
+#include "tex-lookup.hh"
 #include "dimension.hh"
 #include "assoc-iter.hh"
 #include "score-engraver.hh"
@@ -26,9 +28,9 @@
 Paper_def::Paper_def ()
 {
   lookup_p_assoc_p_ = new Assoc<int, Lookup*>;
-  scope_p_ = new Scope;
 }
 
+
 Paper_def::~Paper_def ()
 {
   for (Assoc_iter<int, Lookup*> ai(*lookup_p_assoc_p_); ai.ok (); ai++)
@@ -36,7 +38,6 @@ Paper_def::~Paper_def ()
       delete ai.val ();
     }
   
-  delete scope_p_;
   delete lookup_p_assoc_p_;
 }
 
@@ -46,18 +47,17 @@ Paper_def::Paper_def (Paper_def const&s)
   lookup_p_assoc_p_ = new Assoc<int, Lookup*>;
   for (Assoc_iter<int, Lookup*> ai(*s.lookup_p_assoc_p_); ai.ok (); ai++)
     {
-      Lookup * l=new Lookup (*ai.val ());
+      Lookup * l = ps_output_global_b ? new Ps_lookup (*ai.val ())
+       : new Tex_lookup (*ai.val ());
       l->paper_l_ = this;
       set_lookup (ai.key(), l);
     }
-  
-  scope_p_ = new Scope (*s.scope_p_);
 }
 
 Real
 Paper_def::get_var (String s) const
 {
-  if (!scope_p_->elt_b (s))
+  if (!scope_p_->elem_b (s))
     error (_f ("unknown paper variable: `%s\'", s));
   Real * p = scope_p_->elem (s)->access_Real (false);
   if (!p)
@@ -134,7 +134,7 @@ Paper_def::geometric_spacing (Moment d) const
 void
 Paper_def::set_lookup (int i, Lookup*l)
 {
-  if (lookup_p_assoc_p_->elt_b (i))
+  if (lookup_p_assoc_p_->elem_b (i))
     {
       delete lookup_p_assoc_p_->elem (i);
     }
@@ -200,11 +200,6 @@ Paper_def::print () const
       ai.val ()->print ();
     }
 
-  for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
-    {
-      DOUT << i.key () << "= ";
-      DOUT << i.val ()->str () << '\n';
-    }
   DOUT << "}\n";
 #endif
 }
@@ -218,7 +213,18 @@ Paper_def::lookup_l (int i) const
 IMPLEMENT_IS_TYPE_B1 (Paper_def, Music_output_def);
 
 String
-Paper_def::TeX_output_settings_str () const
+Paper_def::ps_output_settings_str () const
+{
+  String s ("\n ");
+  for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
+    s += String ("/mudelapaper") + i.key () 
+      + "{" + i.val ()->str () + "} bind def\n";
+  s +=  *scope_p_->elem ("texsetting")->access_String ();
+  return s;
+}
+
+String
+Paper_def::tex_output_settings_str () const
 {
   String s ("\n ");
   for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
@@ -236,3 +242,5 @@ Paper_def::get_next_default_count () const
   return default_count_i_ ++;
 }
 
+
+
diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc
new file mode 100644 (file)
index 0000000..2c47177
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+  paper-outputter.cc -- implement Paper_outputter
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "paper-outputter.hh"
+#include "paper-stream.hh"
+#include "molecule.hh"
+#include "atom.hh"
+#include "array.hh"
+#include "dimension.hh"
+// urg, silly name
+#include "tex.hh"
+#include "string-convert.hh"
+#include "debug.hh"
+
+Paper_outputter::Paper_outputter (Paper_stream *s)
+{
+  outstream_l_ = s;
+}
+
+Paper_outputter::~Paper_outputter ()
+{
+}
+
+void
+Paper_outputter::output_molecule (Molecule const*m, Offset o, char const *nm, String s)
+{
+  if (check_debug)
+    *outstream_l_ << String ("\n%start: ") << nm << "\n";
+
+  for (PCursor <Atom*> i (m->atoms_); i.ok (); i++)
+    {
+      Offset a_off = i->offset ();
+      a_off += o;
+
+      switch_to_font (i->font_);
+
+      Array<String> a;
+      String r;
+  
+      a.push (print_dimen (a_off.y()));
+      a.push (print_dimen (a_off.x()));
+      a.push (i->str_);
+      r += substitute_args (s, a);
+      *outstream_l_ << r;
+    }
+}
diff --git a/lily/paper-stream.cc b/lily/paper-stream.cc
new file mode 100644 (file)
index 0000000..c878f4b
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+  paper-stream.cc -- implement Paper_stream
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include <fstream.h>
+#include <time.h>
+
+//#include "tex.hh"
+#include "main.hh"
+#include "paper-stream.hh"
+#include "debug.hh"
+
+const int MAXLINELEN = 200;
+
+Paper_stream::Paper_stream (String filename)
+{
+  if (filename.length_i () && (filename != "-"))
+    os = new ofstream (filename.ch_C ());
+  else
+//    os = new ostream (cout.ostreambuf ());
+    os = new ostream (cout._strbuf);
+  if (!*os)
+    error (_f ("can't open file: `%s\'", filename));
+  nest_level = 0;
+  line_len_i_ = 0;
+  outputting_comment=false;
+  //  header ();
+}
+
+Paper_stream::~Paper_stream ()
+{
+  *os << flush;
+  if (!*os)
+    {
+      warning (_ ("error syncing file (disk full?)"));
+      exit_status_i_ = 1;
+    }
+  delete os;
+  assert (nest_level == 0);
+}
+
+// print string. don't forget indent.
+Paper_stream&
+Paper_stream::operator << (Scalar s)
+{
+  for (char const *cp = s.ch_C (); *cp; cp++)
+    {
+       if (outputting_comment)
+         {
+           *os << *cp;
+           if (*cp == '\n')
+             {
+               outputting_comment=false;
+
+             }
+           continue;
+         }
+       line_len_i_ ++;
+       switch (*cp)
+           {
+           case '%':
+               outputting_comment = true;
+               *os << *cp;
+               break;
+           case '{':
+               nest_level++;
+               *os << *cp;
+               break;
+           case '}':
+               nest_level--;
+               *os << *cp;
+
+               if (nest_level < 0)
+                 {
+                   delete os;  // we want to see the remains.
+                   assert (nest_level>=0);
+                 }
+               /* FALLTHROUGH */
+
+           case '\n':
+               break_line ();
+               break;
+           case ' ':
+               *os <<  ' ';
+               if (line_len_i_ > MAXLINELEN)
+                  break_line ();
+
+               break;
+           default:
+               *os << *cp;
+               break;
+             }
+    }
+  return *this;
+}
+
+void
+Paper_stream::break_line ()
+{
+  *os << "%\n";
+  *os << to_str (' ', nest_level);
+  line_len_i_ = 0;
+}
+
index af2252a226a3f7902a496bc7d98fd5bdcdd47396..99af0e5ec1d7b1ea3aaf9b22dc617179007ca82a 100644 (file)
@@ -16,6 +16,8 @@
 #include "script-def.hh"
 #include "symtable.hh"
 #include "lookup.hh"
+#include "ps-lookup.hh"
+#include "tex-lookup.hh"
 #include "misc.hh"
 #include "my-lily-lexer.hh"
 #include "paper-def.hh"
@@ -44,8 +46,8 @@
 #include "transposed-music.hh"
 
 // mmm
-Mudela_version oldest_version ("1.0.3");
-Mudela_version version ("1.0.4");
+Mudela_version oldest_version ("1.0.6");
+Mudela_version version ("1.0.6");
 
 
 // needed for bison.simple's malloc() and free()
@@ -95,8 +97,6 @@ Paper_def* current_paper = 0;
     Score *score;
     Header *header;
     Interval *interval;
-    Lookup*lookup;
-
     Musical_req* musreq;
     Music_output_def * outputdef;
     Musical_pitch * pitch;
@@ -112,7 +112,7 @@ Paper_def* current_paper = 0;
     String *string;
     Atom * symbol;
     Symtable * symtable;
-    Symtables * symtables;
+    Symtables* symtables;
     Text_def * textdef;
     Tempo_req *tempo;
     char c;
@@ -175,6 +175,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token PROPERTY
 %token PT_T
 %token RELATIVE
+%token REMOVE
 %token SCORE
 %token SCRIPT
 %token SHAPE
@@ -233,7 +234,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <duration> entered_notemode_duration explicit_duration
 %type <interval>       dinterval
 %type <intvec> intastint_list int_list
-%type <lookup> symtables symtables_body
+%type <symtables>      symtables symtables_body
 
 %type <pitch>   explicit_musical_pitch steno_musical_pitch musical_pitch absolute_musical_pitch
 %type <notereq>        steno_notepitch
@@ -245,7 +246,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <music>  Music  relative_music Sequential_music Simultaneous_music
 %type <music>  property_def translator_change
 %type <music_list> Music_list
-%type <paper>  paper_block paper_body
+%type <paper>  paper_block paper_def_body
 %type <real>   dim real
 %type <real>   real_mult_expression real_primary
 %type <real>   unit
@@ -327,7 +328,7 @@ notenames_body:
                $$ = new Notename_table;
        }
        | NOTENAME_TABLE_IDENTIFIER     {
-               $$ = $1-> access_Notename_table();
+               $$ = $1-> access_Notename_table(true);
        }
        | notenames_body STRING '=' explicit_musical_pitch {
                (*$$)[*$2] = *$4;
@@ -368,7 +369,8 @@ add_declaration:
            $4->set_spot (THIS->pop_spot ());
        }
        ;
-
+simple_identifier_init: identifier_init
+       ;
 identifier_init:
        score_block {
                $$ = new Score_identifier ($1, SCORE_IDENTIFIER);
@@ -393,8 +395,7 @@ identifier_init:
 
        }
        | symtables {
-               $$ = new Lookup_identifier ($1, IDENTIFIER);
-
+               $$ = new Symtables_identifier ($1, IDENTIFIER);
        }
        | post_request {
                $$ = new Request_identifier ($1, POST_REQUEST_IDENTIFIER);
@@ -402,11 +403,7 @@ identifier_init:
        | explicit_duration {
                $$ = new Duration_identifier ($1, DURATION_IDENTIFIER);
        }
-       | simple_identifier_init
-       ;
-
-simple_identifier_init:
-       real {
+       | real {
                $$ = new Real_identifier (new Real ($1), REAL_IDENTIFIER);
        }
        | string {
@@ -427,11 +424,16 @@ translator_spec:
 
 translator_spec_body:
        TRANS_IDENTIFIER        {
-               $$ = $1->access_Translator ();
+               $$ = $1->access_Translator (true);
                $$-> set_spot (THIS->here_input ());
        }
        | TYPE STRING ';'       {
                Translator* t = get_translator_l (*$2);
+               Translator_group * tg = t->access_Translator_group ();
+
+               if (!tg)
+                       THIS->parser_error (_("Need a translator group for a context"));
+               
                t = t->clone ();
                t->set_spot (THIS->here_input ());
                $$ = t;
@@ -453,12 +455,20 @@ translator_spec_body:
                delete $4;
                $$->set_property (*$2, str);
        }
+       | translator_spec_body STRING ';' {
+               $$->type_str_ = *$2;
+               delete $2;
+       }
        | translator_spec_body CONSISTS STRING ';' {
-               $$->group_l ()->consists_str_arr_.push (*$3);
+               $$->access_Translator_group ()-> set_element (*$3, true);
                delete $3;
        }
        | translator_spec_body ACCEPTS STRING ';' {
-               $$->group_l ()->accepts_str_arr_.push (*$3);
+               $$->access_Translator_group ()-> set_acceptor (*$3, true);
+               delete $3;
+       }
+       | translator_spec_body REMOVE STRING ';' {
+               $$->access_Translator_group ()-> set_element (*$3, false);
                delete $3;
        }
        ;
@@ -486,7 +496,7 @@ score_body:         {
                $$ = new Score;
        }
        | SCORE_IDENTIFIER {
-               $$ = $1->access_Score ();
+               $$ = $1->access_Score (true);
        }
        | score_body mudela_header      {
                $$->header_p_ = $2;
@@ -528,7 +538,7 @@ intastint_list:
        PAPER
 */
 paper_block:
-       PAPER '{' paper_body '}'        { 
+       PAPER '{' paper_def_body '}'    { 
                $$ = $3;
                THIS-> lexer_p_->scope_l_arr_.pop ();
        }
@@ -539,41 +549,34 @@ optional_semicolon:
        | ';'
        ;
 
-paper_body:
+paper_def_body:
        /* empty */                     {
                Paper_def *p = THIS->default_paper_p ();
                THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_);
                $$ = p;
        }
        | PAPER_IDENTIFIER optional_semicolon   {
-               Paper_def *p = $1->access_Paper_def ();
+               Paper_def *p = $1->access_Paper_def (true);
                THIS->lexer_p_->scope_l_arr_.push (p->scope_p_);
                $$ = p;
        }
-       | paper_body OUTPUT STRING ';'  { 
-               $$->outfile_str_ = *$3;
-               delete $3;
+       | paper_def_body int '=' symtables              { // ugh, what a syntax
+               Lookup * l = ps_output_global_b ? new Ps_lookup (*$4)
+                 : new Tex_lookup (*$4);
+               $$->set_lookup ($2, l);
        }
-       | paper_body int '=' symtables          { // ugh, what a syntax
-               $$->set_lookup ($2, $4);
-       }
-       | paper_body STRING '=' simple_identifier_init optional_semicolon {
-           Identifier* id = $4;
-           id->init_b_ = THIS->init_parse_b_;
-           if (id->is_type_b (Translator_identifier::static_name ()))
-             {
-               $$->assign_translator (*$2, id->access_Translator ());
-               delete id;
-             }
-           else
-             THIS->lexer_p_->set_identifier (*$2, id);
+       | paper_def_body STRING '=' simple_identifier_init ';' {
+             THIS->lexer_p_->set_identifier (*$2, $4);
              delete $2;
        }
-       | paper_body SHAPE '=' shape_array ';' {
+       | paper_def_body translator_spec {
+               $$-> assign_translator ($2);
+       }
+       | paper_def_body SHAPE '=' shape_array ';' {
                $$->shape_int_a_ = *$4;
                delete $4;
        }
-       | paper_body error {
+       | paper_def_body error {
 
        }
        ;
@@ -583,10 +586,7 @@ real_primary:
                $$ = $1;
        }
        | REAL_IDENTIFIER               {
-               Real *r_p = $1->access_Real ();
-               $$ = * r_p;
-               DOUT << "Lookup real: " << *r_p << "\n";
-               delete r_p;
+               $$= *$1->access_Real (false);
        }
        | dim
        | '(' real ')' {
@@ -635,15 +635,10 @@ midi_body: /* empty */            {
                $$ = THIS->default_midi_p ();
        }
        | MIDI_IDENTIFIER       {
-               $$ = $1-> access_Midi_def ();           
+               $$ = $1-> access_Midi_def (true);
        }
-       | midi_body STRING '=' translator_spec  {
-               $$-> assign_translator (*$2, $4);
-               delete $2;
-       }
-       | midi_body OUTPUT STRING ';'   {
-               $$->outfile_str_ = *$3;
-               delete $3;
+       | midi_body translator_spec     {
+               $$-> assign_translator ($2);
        }
        | midi_body tempo_request ';' {
                $$->set_tempo ($2->dur_.length (), $2->metronome_i_);
@@ -703,7 +698,7 @@ Music:
                $$ = new Transposed_music ($3, *$2);
                delete $2;
        }
-       | MUSIC_IDENTIFIER { $$ = $1->access_Music (); }
+       | MUSIC_IDENTIFIER { $$ = $1->access_Music (true); }
        | NOTES
                { THIS->lexer_p_->push_note_state (); }
        Music
@@ -795,7 +790,7 @@ abbrev_command_req:
                $$ = new Barcheck_req;
        }
        | COMMAND_IDENTIFIER    {
-               $$ = $1->access_Request ();
+               $$ = $1->access_Request (true);
        }
        ;
 
@@ -891,7 +886,7 @@ structured_post_request:
 
 post_request:
        POST_REQUEST_IDENTIFIER {
-               $$ = (Request*)$1->access_Request ();
+               $$ = (Request*)$1->access_Request (true);
        }
        | dynamic_req {
                $$ = $1;
@@ -1232,7 +1227,7 @@ steno_duration:
                     }
        }
        | DURATION_IDENTIFIER   {
-               $$ = $1->access_Duration ();
+               $$ = $1->access_Duration (true);
        }
        | steno_duration '.'    {
                $$->dots_i_ ++;
@@ -1330,9 +1325,7 @@ int:
                $$ = -$2;
        }
        | INT_IDENTIFIER        {
-               int *i_p = $1->access_int ();
-               $$ = *i_p;
-               delete i_p;
+               $$ = *$1->access_int (false);
        }
        ;
 
@@ -1341,10 +1334,7 @@ string_primary:
                $$ = $1;
        }
        | STRING_IDENTIFIER     {
-               String *s_p = $1->access_String ();
-
-               $$ = s_p;
-               DOUT << "Lookup string: " << *s_p << "\n";
+               $$ = $1->access_String (true);
        }
        ;
 
@@ -1378,10 +1368,10 @@ symtables:
 
 symtables_body:
                        {
-               $$ = new Lookup;
+               $$ = new Symtables;
        }
        | IDENTIFIER            {
-               $$ = $1->access_Lookup ();
+               $$ = $1->access_Symtables (true);
        }
        | symtables_body FONT STRING            {
                $$->font_ = *$3;
@@ -1451,3 +1441,4 @@ My_lily_parser::do_yyparse ()
        yyparse ((void*)this);
 }
 
+
index 4332a23486bdf68f746fcd53b9c7d0cadd18194a..7ae2ea35bebd2862fdeba7a570924eb24b86596b 100644 (file)
@@ -121,7 +121,7 @@ Performance::process()
 {
   print ();
 
-  String out=midi_l_->outfile_str_;
+  String out = midi_l_->get_default_output ();
   if (out.empty_b ())
     {
       
index aa24f97bd1a1f2088b7c09727ccc4d2666394d58..7fdbdc001aced144dbe1fcd1b81b0ddad213875a 100644 (file)
@@ -30,6 +30,6 @@ Performer_group_performer*
 Performer::daddy_perf_l () const
 {
   return (daddy_trans_l_) 
-    ?(Performer_group_performer*) daddy_trans_l_->performer_l ()
+    ?(Performer_group_performer*) daddy_trans_l_->access_Performer ()
     : 0;
 }
diff --git a/lily/ps-lookup.cc b/lily/ps-lookup.cc
new file mode 100644 (file)
index 0000000..fd9d887
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+  ps-lookup.cc -- implement Ps_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "ps-lookup.hh"
+#include "debug.hh"
+#include "symtable.hh"
+#include "dimension.hh"
+#include "tex.hh"
+#include "scalar.hh"
+#include "paper-def.hh"
+#include "string-convert.hh"
+#include "main.hh"
+
+Ps_lookup::Ps_lookup ()
+  : Lookup ()
+{
+}
+
+Ps_lookup::Ps_lookup (Lookup const& s)
+  : Lookup (s)
+{
+}
+
+Ps_lookup::Ps_lookup (Symtables const& s)
+  : Lookup (s)
+{
+}
+
+Ps_lookup::~Ps_lookup ()
+{
+}
+
+Atom
+Ps_lookup::afm_find (String s) const
+{
+  return Lookup::afm_find (s, String ("(%d)"));
+}
+
+Atom
+Ps_lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
+{
+  assert (controls.size () == 8);
+
+  String ps;
+  
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
+
+  for (int i = 1; i < 4; i++)
+    ps += String_convert::double_str (controls[i].x ()) + " "
+      + String_convert::double_str (controls[i].y ()) + " ";
+
+  ps += String_convert::double_str (controls[0].x ()) + " "
+    + String_convert::double_str (controls[0].y ()) + " ";
+
+  ps += String_convert::double_str (thick) + " ";
+  Real on = dash > 1? thick * dash - thick : 0;
+  Real off = 2 * thick;
+  ps += "[" + String_convert::double_str (on) + " ";
+  ps += String_convert::double_str (off) + "] ";
+  ps += String_convert::int_str (0) + " ";
+  ps += " draw_dashed_slur";
+
+  Atom a;
+  a.str_ = ps;
+  
+  a.dim_[X_AXIS] = Interval (0, dx);
+  a.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
+  a.font_ = font_;
+  return a;
+}
+
+Atom
+Ps_lookup::hairpin (Real width, bool decresc, bool continued) const
+{
+  Atom a;  
+  Real height = paper_l_->staffheight_f () / 6;
+  String ps;
+  ps += to_str (width) + " " 
+       + to_str (height) + " " 
+    + to_str (continued ? height/2 : 0) + 
+    + " draw_"  + String (decresc ? "de" : "") + "cresc\n";
+  a.str_ = ps;
+
+
+  a.dim_.x () = Interval (0, width);
+  a.dim_.y () = Interval (-2*height, 2*height);
+  a.font_ = font_;
+  return a;
+}
+
+Atom
+Ps_lookup::plet (Real dy , Real dx, Direction dir) const
+{
+  String ps;
+  
+  ps += String_convert::double_str (dx) + " " 
+    + String_convert::double_str (dy) + " "
+    + String_convert::int_str ( (int)dir) +
+    " draw_plet";
+
+  Atom s;
+  s.str_ = ps;
+  return s;
+}
+
+Atom
+Ps_lookup::ps_beam (Real slope, Real width, Real thick) const
+{
+  String ps;
+  ps += to_str (width) + " "+ to_str (slope) + " " + to_str (thick)
+    + " draw_beam";
+
+  Atom s;
+  s.str_ = ps;
+  return s;
+}
+
+Atom
+Ps_lookup::slur (Array<Offset> controls) const
+{
+  assert (controls.size () == 8);
+
+  String ps;
+  
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
+
+  for (int i = 5; i < 8; i++)
+    ps += String_convert::double_str (controls[i].x ()) + " "
+      + String_convert::double_str (controls[i].y ()) + " ";
+
+  ps += String_convert::double_str (controls[4].x ()) + " "
+    + String_convert::double_str (controls[4].y ()) + " ";
+  
+  for (int i = 1; i < 4; i++)
+    ps += String_convert::double_str (controls[i].x ()) + " "
+      + String_convert::double_str (controls[i].y ()) + " ";
+
+  ps += String_convert::double_str (controls[0].x ()) + " "
+    + String_convert::double_str (controls[0].y ()) + " ";
+
+  ps += " draw_slur";
+
+  Atom s;
+  s.str_ = ps;
+  
+  s.dim_[X_AXIS] = Interval (0, dx);
+  s.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
+  s.font_ = font_;
+  return s;
+}
+
+Atom
+Ps_lookup::stem (Real y1, Real y2) const
+{
+  //  return Lookup::stem (y1, y2, "\\kern %\\vrule width % height % depth %");
+  return Lookup::stem (y1, y2, "% % moveto % % lineto");
+}
+
+Atom
+Ps_lookup::vbracket (Real &y) const
+{
+  Atom psbracket;
+  Real min_y = paper_l_->staffheight_f ();
+  if (y < min_y)
+    {
+      warning (_ ("bracket")
+       + " " + _ ("too small") +  " (" + print_dimen (y) + ")");
+//      y = min_y;
+    }
+  psbracket.str_ = to_str (y) + " draw_bracket";
+  psbracket.dim_[Y_AXIS] = Interval (-y/2,y/2);
+  psbracket.dim_[X_AXIS] = Interval (0,4 PT);
+  return psbracket;
+}
+
+
+
diff --git a/lily/ps-outputter.cc b/lily/ps-outputter.cc
new file mode 100644 (file)
index 0000000..768270a
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+  ps-outputter.cc -- implement Ps_outputter
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "ps-outputter.hh"
+#include "ps-stream.hh"
+#include "molecule.hh"
+#include "atom.hh"
+#include "array.hh"
+#include "dimension.hh"
+#include "tex.hh"
+#include "string-convert.hh"
+#include "debug.hh"
+
+Ps_outputter::Ps_outputter (Paper_stream *s)
+  :Paper_outputter (s)
+{
+}
+
+Ps_outputter::~Ps_outputter ()
+{
+}
+
+/*
+   26 fonts ought to be enough for anyone.
+*/
+static String
+ps_font_command(int i)
+{
+  return "\\font"  +String_convert::form_str ("%c",  'A' + i) ;
+}
+
+void
+Ps_outputter::switch_to_font (String fontname)
+{
+  if (!fontname.length_i () || fontname == current_font_)
+    return;
+
+  current_font_ = fontname;
+  int i=0;
+  for (; i< font_arr_.size (); i++)
+    if (font_arr_[i] == fontname)
+      {
+       *outstream_l_ <<ps_font_command (i) << "\n";
+       return ;
+      }
+
+  
+  font_arr_.push (fontname);
+  *outstream_l_ << "\\font"  + ps_font_command (i) << "=" + fontname << "\n";
+  *outstream_l_<< ps_font_command (i);
+}
+
+void
+Ps_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
+{
+  if (check_debug)
+    *outstream_l_ << String ("\n%start: ") << nm << "\n";
+
+  Paper_outputter::output_molecule (m, o, nm, "% % % placebox");
+}
+
+void
+Ps_outputter::start_line ()
+{
+  *outstream_l_ << "\\hbox{%\n";
+}
+
+void
+Ps_outputter::stop_line ()
+{
+  *outstream_l_ << "}";
+  *outstream_l_ << "\\interscoreline";
+  current_font_ = "";
+  font_arr_.clear ();
+}
diff --git a/lily/ps-stream.cc b/lily/ps-stream.cc
new file mode 100644 (file)
index 0000000..970b75f
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+  tex-stream.cc -- implement Ps_stream
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include <fstream.h>
+#include <time.h>
+
+#include "main.hh"
+#include "ps-stream.hh"
+#include "debug.hh"
+
+Ps_stream::Ps_stream (String filename)
+  : Paper_stream (filename)
+{
+  header ();
+}
+
+void
+Ps_stream::header ()
+{
+  *os << _ ("%%!PS Adobe\n");
+  // urg, merge with Tex
+  *os << _ ("% Creator: ");
+  if (no_timestamps_global_b)
+    *os << "GNU LilyPond\n";
+  else
+    *os << get_version_str () << '\n';
+  *os << _ ("% Automatically generated");
+  if (no_timestamps_global_b)
+    *os << ".\n";
+  else
+    {
+      *os << _ (", at ");
+      time_t t (time (0));
+      *os << ctime (&t) << "%\n";
+    }
+}
+
+Ps_stream::~Ps_stream ()
+{
+}
+
+// print string. don't forget indent.
+Paper_stream&
+Ps_stream::operator << (Scalar s)
+{
+  return Paper_stream::operator << (s);
+}
+
index 2e20a1b38d3530f401974f38392354da5d3e91e5..5918dc92fd08f8313e42d4746114d91b3147eb88 100644 (file)
@@ -46,3 +46,5 @@ Scope::Scope (Scope const&s)
 
 Scope::Scope ()
 {}
+
+
index ea9ae79737bae3d0eaf54702a34211f9716da244..310e44e101e9cde3959fd2aa35692d2473b089c4 100644 (file)
@@ -48,7 +48,7 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
       
       int priority =item_l->break_priority_i_;
       Horizontal_group_item * hg =0;
-      if (!align_p_assoc_.elt_b(priority))
+      if (!align_p_assoc_.elem_b(priority))
        {
          hg = new Horizontal_group_item;
          announce_element (Score_element_info (hg,0));
index 7f257671acc1abca6d551dccb548e369214f92d6..257ead14c11e30f20e44e4fabec7b3d6a55b1996 100644 (file)
@@ -80,6 +80,8 @@ do_scores()
        }
       else
        {
+         if (!monitor->silent_b ("do_scores"))
+             is_p->print ();
          is_p->process();
        }
     }
index e2786de70df6ef8888957e5f3715e669952bf27b..ac2cfa3aab92b99bd22df23683d1974a8b87afa6 100644 (file)
@@ -88,7 +88,7 @@ Staff_performer::new_instrument_str ()
   return instrument_str_;
 
 /* ugh, but can 't
-  if (properties_dict_.elt_b ("instrument"))
+  if (properties_dict_.elem_b ("instrument"))
     return properties_dict_["instrument"];
   return "";
 */
index 5814d5294aa241920c14f5fae5aaf38767c2d5ca..d09dbb0b44fc9c3e87eb1ce7dae1b282a94f71b8 100644 (file)
@@ -23,6 +23,8 @@ Symtables::Symtables()
 Symtables::Symtables (Symtables const &s)
   : Dictionary<Symtable*> (s)
 {
+  font_ = s.font_;
+  font_path_ = s.font_path_;
   for (Assoc_iter<String, Symtable*>  i (s); i.ok(); i++)
     {
       add (i.key(), new Symtable (*i.val ()));
@@ -40,7 +42,7 @@ Symtables::~Symtables()
 Atom
 Symtable::lookup (String s) const
 {
-  if (elt_b (s))
+  if (elem_b (s))
     {
       Atom a (elem(s));
       return a;
@@ -56,7 +58,7 @@ Symtable::lookup (String s) const
 Symtable*
 Symtables::operator()(String s)
 {
-  if (!elt_b (s))
+  if (!elem_b (s))
     {
       error (_f ("Symtable `%s\' unknown", s));
       /* 
diff --git a/lily/tex-lookup.cc b/lily/tex-lookup.cc
new file mode 100644 (file)
index 0000000..480ff14
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+  tex-lookup.cc -- implement Tex_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "tex-lookup.hh"
+#include "debug.hh"
+#include "symtable.hh"
+#include "dimension.hh"
+#include "tex.hh"
+#include "scalar.hh"
+#include "paper-def.hh"
+#include "string-convert.hh"
+#include "main.hh"
+
+Tex_lookup::Tex_lookup ()
+  : Ps_lookup ()
+{
+}
+
+Tex_lookup::Tex_lookup (Lookup const& s)
+  : Ps_lookup (s)
+{
+}
+
+Tex_lookup::Tex_lookup (Symtables const& s)
+  : Ps_lookup (s)
+{
+}
+
+Tex_lookup::~Tex_lookup()
+{
+}
+
+Atom
+Tex_lookup::afm_find (String s) const
+{
+  return Lookup::afm_find (s, String ("\\char%d"));
+}
+
+Atom
+Tex_lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
+{
+  return embed (Ps_lookup::dashed_slur (controls, thick, dash));
+}
+
+Atom
+Tex_lookup::embed (Atom a) const
+{
+  a.str_ = "\\embeddedps{\n" + a.str_ + "}";
+  return a;
+}
+
+Atom
+Tex_lookup::hairpin (Real width, bool decresc, bool continued) const
+{
+  return embed (Ps_lookup::hairpin (width, decresc, continued));
+}
+
+Atom
+Tex_lookup::plet (Real dy , Real dx, Direction dir) const
+{
+  return embed (Ps_lookup::plet (dy, dx, dir));
+}
+
+Atom
+Tex_lookup::ps_beam (Real slope, Real width, Real thick) const
+{
+  return embed (Ps_lookup::ps_beam (slope, width, thick));
+}
+
+Atom
+Tex_lookup::slur (Array<Offset> controls) const
+{
+  return embed (Ps_lookup::slur (controls));
+}
+
+Atom
+Tex_lookup::stem (Real y1, Real y2) const
+{
+  return Lookup::stem (y1, y2, "\\kern %\\vrule width % height % depth %");
+}
+
+Atom
+Tex_lookup::vbracket (Real &y) const
+{
+  return embed (Ps_lookup::vbracket (y));
+}
+
index 67ea1fe0abbdc0ba3927da43425a3dbd28df9e3e..30aff3b9d048ff660573855ee3ba350be35a28a2 100644 (file)
@@ -4,6 +4,7 @@
   source file of the GNU LilyPond music typesetter
 
   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "tex-outputter.hh"
 #include "string-convert.hh"
 #include "debug.hh"
 
-Tex_outputter::Tex_outputter (Tex_stream *s)
+Tex_outputter::Tex_outputter (Paper_stream *s)
+  :Paper_outputter (s)
+{
+}
+
+Tex_outputter::~Tex_outputter ()
 {
-  outstream_l_ = s;
 }
 
 /*
@@ -57,27 +62,9 @@ Tex_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
   if (check_debug)
     *outstream_l_ << String ("\n%start: ") << nm << "\n";
 
-  for (PCursor <Atom*> i (m->atoms_); i.ok (); i++)
-    {
-      Offset a_off = i->offset ();
-      a_off += o;
-
-      switch_to_font (i->font_);
-
-      Array<String> a;
-      String r;
-  
-    
-      String s ("\\placebox{%}{%}{%}");
-      a.push (print_dimen (a_off.y()));
-      a.push (print_dimen (a_off.x()));
-      a.push (i->tex_);
-      r += substitute_args (s, a);
-      *outstream_l_ << r;
-    }
+  Paper_outputter::output_molecule (m, o, nm, "\\placebox{%}{%}{%}");
 }
 
-
 void
 Tex_outputter::start_line ()
 {
index 9866c231ad07af68c163e4a13decf0885550b2f2..90764d289a87d830a16a99e318fd4e126603402f 100644 (file)
 #include "tex-stream.hh"
 #include "debug.hh"
 
-const int MAXLINELEN = 200;
-
 Tex_stream::Tex_stream (String filename)
+  : Paper_stream (filename)
 {
-  if (filename.length_i () && (filename != "-"))
-    os = new ofstream (filename.ch_C ());
-  else
-//    os = new ostream (cout.ostreambuf ());
-    os = new ostream (cout._strbuf);
-  if (!*os)
-    error (_f ("can't open file: `%s\'", filename));
-  nest_level = 0;
-  line_len_i_ = 0;
-  outputting_comment=false;
-  header();
+  header ();
 }
+
 void
-Tex_stream::header()
+Tex_stream::header ()
 {
+  // urg, merge with Ps
   *os << _ ("% Creator: ");
   if (no_timestamps_global_b)
     *os << "GNU LilyPond\n";
   else
-    *os << get_version_str() << '\n';
+    *os << get_version_str () << '\n';
   *os << _ ("% Automatically generated");
   if (no_timestamps_global_b)
     *os << ".\n";
@@ -50,78 +41,14 @@ Tex_stream::header()
     }
 }
 
-Tex_stream::~Tex_stream()
+Tex_stream::~Tex_stream ()
 {
-  *os << flush;
-  if (!*os)
-    {
-      warning(_ ("error syncing file (disk full?)"));
-      exit_status_i_ = 1;
-    }
-  delete os;
-  assert (nest_level == 0);
 }
 
 // print string. don't forget indent.
-Tex_stream&
+Paper_stream&
 Tex_stream::operator << (Scalar s)
 {
-  for (char const *cp = s.ch_C (); *cp; cp++)
-    {
-       if (outputting_comment)
-         {
-           *os << *cp;
-           if (*cp == '\n')
-             {
-               outputting_comment=false;
-
-             }
-           continue;
-         }
-       line_len_i_ ++;
-       switch (*cp)
-           {
-           case '%':
-               outputting_comment = true;
-               *os << *cp;
-               break;
-           case '{':
-               nest_level++;
-               *os << *cp;
-               break;
-           case '}':
-               nest_level--;
-               *os << *cp;
-
-               if (nest_level < 0)
-                 {
-                   delete os;  // we want to see the remains.
-                   assert (nest_level>=0);
-                 }
-               /* FALLTHROUGH */
-
-           case '\n':
-               break_line();
-               break;
-           case ' ':
-               *os <<  ' ';
-               if (line_len_i_ > MAXLINELEN)
-                  break_line();
-
-               break;
-           default:
-               *os << *cp;
-               break;
-             }
-    }
-  return *this;
-}
-
-void
-Tex_stream::break_line()
-{
-  *os << "%\n";
-  *os << to_str (' ', nest_level);
-  line_len_i_ = 0;
+  return Paper_stream::operator << (s);
 }
 
index b72d78460853e73712695352555af1c5a69c9ee2..1e52ea151e3450a509eefd90fbfcc2ef28e9a6e1 100644 (file)
@@ -30,7 +30,7 @@ Time_signature_engraver::do_process_requests()
       return ;
     }
   
-  Timing_engraver * timing_grav_l= (Timing_engraver*) result->engraver_l ();
+  Timing_engraver * timing_grav_l= (Timing_engraver*) result->access_Engraver  ();
   
   Time_signature_change_req *req = timing_grav_l->time_signature_req_l();
   if (req)
index 931766ccc815f3bcd9d69971de1e6e7ff835b802..7e18f0e05dc7d93f9535fc40403021a0b02c2623 100644 (file)
@@ -19,16 +19,25 @@ Time_signature::Time_signature ()
 }
 
 Molecule*
-Time_signature::brew_molecule_p() const
+Time_signature::brew_molecule_p () const
 {
   Atom s;
   if (time_sig_type_str_.length_i ())
     {
-      s = lookup_l ()-> special_time_signature (time_sig_type_str_);
+      if (time_sig_type_str_[0]=='1')
+       {
+         Array<Scalar> tmparr=args_;
+         tmparr[1]=Scalar(0);
+         s = lookup_l ()->time_signature (tmparr);
+       }
+      else
+       {
+         s = lookup_l ()-> special_time_signature (time_sig_type_str_,args_);
+       }
     }
   else
     s = lookup_l ()->time_signature (args_);
-  s.translate_axis (-s.extent()[Y_AXIS].center (), Y_AXIS);
+  s.translate_axis (-s.extent ()[Y_AXIS].center (), Y_AXIS);
   return new Molecule (Atom (s));
 }
 
index 1541b32722e9adc12e73c0bd151e61c5b06dcdf4..86de42722413b928fca1e455e66d265484b3226c 100644 (file)
@@ -30,7 +30,7 @@ add_translator (Translator *t)
 Translator*
 get_translator_l (String s)
 {
-  if (global_translator_dict_p->elt_b (s))
+  if (global_translator_dict_p->elem_b (s))
     {
 //      return (*global_translator_dict_p)[s];
        Translator* t = (*global_translator_dict_p)[s];
index f1da4dbdf9abbb7559687e3af276a852e07319ad..3d5a6ff2d0a4cd5dfcf0d895c2a27fe64cec5ab2 100644 (file)
@@ -50,7 +50,7 @@ Translator_group::check_removal()
 IMPLEMENT_IS_TYPE_B1(Translator_group, Translator);
 
 void
-Translator_group::add (Translator *trans_p)
+Translator_group::add_translator (Translator *trans_p)
 {
   trans_p_list_.bottom().add (trans_p);
   trans_p->daddy_trans_l_ = this;
@@ -58,6 +58,31 @@ Translator_group::add (Translator *trans_p)
   trans_p->add_processing ();
 }
 
+void
+Translator_group::set_acceptor (String accepts, bool add)
+{
+  if (add)
+    accepts_str_arr_.push (accepts);
+  else
+    for (int i=accepts_str_arr_.size (); i--; )
+      if (accepts_str_arr_[i] == accepts)
+       accepts_str_arr_.del (i);
+}
+
+void
+Translator_group::set_element (String s, bool add)
+{
+  if (!get_translator_l (s))
+    error ("Program has no such type");
+
+  if (add)
+    consists_str_arr_.push (s);
+  else
+    for (int i=consists_str_arr_.size (); i--; )
+      if (consists_str_arr_[i] == s)
+       consists_str_arr_.del (i);
+}
+
 bool
 Translator_group::removable_b() const
 {
@@ -85,9 +110,9 @@ Translator_group::path_to_acceptable_translator (String type) const
   for (int i=0; i < accepts_str_arr_.size (); i++)
     {
       Translator *t = output_def_l ()->find_translator_l (accepts_str_arr_[i]);
-      if (!t || !t->group_l ())
+      if (!t || !t->access_Translator_group ())
        continue;
-      accepted_arr.push (t->group_l());
+      accepted_arr.push (t->access_Translator_group ());
     }
 
 
@@ -133,8 +158,8 @@ Translator_group::find_create_translator_l (String n, String id)
       // start at 1.  The first one (index 0) will be us.
       for (int i=0; i < path.size (); i++)
        {
-         Translator_group * new_group = path[i]->clone ()->group_l ();
-         current->add (new_group);
+         Translator_group * new_group = path[i]->clone ()->access_Translator_group ();
+         current->add_translator (new_group);
          current = new_group;
        }
       current->id_str_ = id;
@@ -185,8 +210,8 @@ Translator_group::group_l_arr () const
   Link_array<Translator_group> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->group_l ())
-       groups.push (i->group_l ());
+      if (i->access_Translator_group ())
+       groups.push (i->access_Translator_group ());
     }
   return groups;
 }
@@ -197,7 +222,7 @@ Translator_group::nongroup_l_arr () const
   Link_array<Translator> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (!i->group_l ())
+      if (!i->access_Translator_group ())
        groups.push (i.ptr ());
     }
   return groups;
@@ -263,8 +288,8 @@ Translator_group::get_default_interpreter()
          warning (_f ("can't find or create `%s\'", accepts_str_arr_[0]));
          t = this;
        }
-      Translator_group * g= t->clone ()->group_l ();
-      add (g);
+      Translator_group * g= t->clone ()->access_Translator_group ();
+      add_translator (g);
 
       if (!g->is_bottom_translator_b ())
        return g->get_default_interpreter ();
@@ -352,6 +377,6 @@ Translator_group::do_add_processing ()
       if (!t)
        warning (_f ("can't find `%s\'", consists_str_arr_[i]));
       else
-       add (t->clone ());
+       add_translator (t->clone ());
     }
 }
index 3f00ff928f1b318d396269b73537e921417024ed..e8223784eaf4c81d8a3833f6965dc1522c969fc3 100644 (file)
@@ -157,7 +157,7 @@ Translator::pre_move_processing ()
 Scalar
 Translator::get_property (String id)
 {
-  if (properties_dict_.elt_b (id))
+  if (properties_dict_.elem_b (id))
     {
       return properties_dict_[id];
     }
index bf233f56803c30d079ec0292e0075ef00caa1879..7cddd3215d33bdcce5330da3469f96e92342d125 100644 (file)
@@ -1,12 +1,19 @@
 % 
 % feta-timesig.mf --  implement Time Signatures
 % 
-% source file of the Feta (Font-En-Tja) music font
+% source file of the Feta (not an abbreviation of Font-En-Tja) music font
 % 
 % (c) 1998 Mats Bengtsson <matsb@s3.kth.se>
 
 fet_begingroup("timesig");
 
+def set_C_width =
+       save left_width, right_width;
+       left_width# := .8 interline#;
+       right_width# := .7 interline#;
+       define_pixels(left_width,right_width);
+enddef;
+
 def draw_C =
        save hair, bulb_rad;
        hair# := stafflinethickness#;
@@ -16,9 +23,9 @@ def draw_C =
        x1r = x5;
        y1r = .4 interline;
        z2 = (0, interline);
-       z3r = (-b, 0);
+       z3r = (-left_width, 0);
        z4 = (0, -interline);
-       z5r = (w, -2 stafflinethickness);
+       z5r = (right_width, -2 stafflinethickness);
        
        penpos1(hair, 0);
        penpos2(stafflinethickness, 90);
@@ -36,14 +43,18 @@ def draw_C =
        penlabels(1,2,3,4,5);
 enddef;
 
-fet_beginchar ("4/4 meter", "C", "fourfourmeter")
-       set_char_box(.8 interline#, .7 interline#, interline#, interline#);
+fet_beginchar ("4/4 meter", "C4/4", "fourfourmeter")
+       set_C_width;
+       set_char_box(left_width# + interline#, right_width# + interline#, 
+               interline#, interline#);
        
        draw_C;
 fet_endchar;
 
-fet_beginchar ("2/2 meter", "C2", "allabreve")
-       set_char_box(.8 interline#, .7 interline#, 1.4 interline#, 1.4 interline#);
+fet_beginchar ("2/2 meter", "C2/2", "allabreve")
+       set_C_width;
+       set_char_box(left_width# + interline#, right_width# + interline#, 
+               1.4 interline#, 1.4 interline#);
        
        draw_C;
        draw_block((-1.5stafflinethickness, -d), (0, h));
@@ -57,31 +68,37 @@ Cdiameter# := 3/2 interline#;
 Cthickness# := 2 stafflinethickness#;
 define_pixels(Cdiameter,Cthickness);
 
-fet_beginchar ("Mensural 4/4 meter", "oldC", "oldfourfourmeter")
-       set_char_box(.5 Cdiameter#, .5 Cdiameter#, .5 Cdiameter#, .5 Cdiameter#);
+%% tempus imperfectum cum prolatione imperfecta
+fet_beginchar ("Mensural 4/4 meter", "old4/4", "oldfourfourmeter")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               .5 Cdiameter#, .5 Cdiameter#);
        
        pickup pencircle scaled Cthickness;
        draw threequartercircle rotated 45 scaled Cdiameter;
 fet_endchar;
 
-fet_beginchar ("Mensural 2/2 meter", "oldC2", "oldallabreve")
-       set_char_box(.5 Cdiameter#, .5 Cdiameter#, interline#, interline#);
+fet_beginchar ("Mensural 2/2 meter", "old2/2", "oldallabreve")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               interline#, interline#);
        
        pickup pencircle scaled Cthickness;
        draw threequartercircle rotated 45 scaled Cdiameter;
        draw_block((-Cthickness, -d), (0, h));
 fet_endchar;
 
-fet_beginchar ("Mensural 3/2 meter", "old3_2", "oldthreetwometer")
-       set_char_box(.5 Cdiameter#, .5 Cdiameter#, .5 Cdiameter#, .5 Cdiameter#);
+%% tempus perfectum cum prolatione imperfecta
+fet_beginchar ("Mensural 3/2 meter", "old3/2", "oldthreetwometer")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               .5 Cdiameter#, .5 Cdiameter#);
        
        pickup pencircle scaled Cthickness;
        draw fullcircle scaled Cdiameter;
 fet_endchar;
 
-fet_beginchar ("Mensural 6/4 meter", "old6_4", "oldsixfourmeter")
-       set_char_box(.5 Cdiameter#, .5 Cdiameter#, 
-               .5 Cdiameter# + .5 interline#, Cdiameter#+ .5 interline#);
+%% tempus imperfectum cum prolatione perfecta
+fet_beginchar ("Mensural 6/4 meter", "old6/4", "oldsixfourmeter")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               .5 Cdiameter# + .5 interline#, .5 Cdiameter#+ .5 interline#);
        
        pickup pencircle scaled Cthickness;
        draw threequartercircle rotated 45 scaled Cdiameter 
@@ -90,9 +107,10 @@ fet_beginchar ("Mensural 6/4 meter", "old6_4", "oldsixfourmeter")
        draw (0,.5 interline);
 fet_endchar;
 
-fet_beginchar ("Mensural 9/4 meter", "old9_4", "oldninefourmeter")
-       set_char_box(.5 Cdiameter#, .5 Cdiameter#, 
-               .5 Cdiameter# + .5 interline#, Cdiameter#+ .5 interline#);
+%% tempus perfectum cum prolatione perfecta
+fet_beginchar ("Mensural 9/4 meter", "old9/4", "oldninefourmeter")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               .5 Cdiameter# + .5 interline#, .5 Cdiameter#+ .5 interline#);
        
        pickup pencircle scaled Cthickness;
        draw fullcircle scaled Cdiameter shifted (0,.5 interline);
index 067b0c5c17bb1debff2b46865e69842a1da49b44..cb87334f7dc2509efe397ab91277fca78d3cdcf0 100644 (file)
@@ -9,7 +9,6 @@ MODULE_NAME = mi2mu
 SUBDIRS = include
 EXTRA_DIST_FILES += TODO
 MODULE_LIBS=$(depth)/lib $(depth)/flower
-
 STEPMAKE_TEMPLATES=c++ executable
 
 include $(depth)/make/stepmake.make 
@@ -21,5 +20,3 @@ midi-lexer.l: $(outdir)/midi-parser.hh
 
 $(outdir)/mi2mu-version.o: $(outdir)/version.hh
 
-VERSION: $(depth)/VERSION
-       cp $< $@
index f6ea3233e75b1e5b6da49d000e9ae8021a0cdbeb..53c8104d9340f9350119efdef99726df1fa6b942 100644 (file)
@@ -35,7 +35,7 @@
                     "accepts" "accidentals" "break" "bar" "cadenza" 
                     "clef" "cm" "consists" "contains" "duration" "absdynamic" 
                     "in" "translator" "type" "lyric" "key" "maininput" "notes"
-                    "musical_pitch" "meter" "midi" "mm" "header"
+                    "musical_pitch" "time" "midi" "mm" "header"
                     "notenames" "octave" "output" "partial" "paper" "plet"
                     "property" "pt" "shape" "relative" "include" "score"
                     "script" "skip"  "table" "spandynamic" "symboltables"
index f3e31235d1f6f5ff87cc4de41830b6e091373162..5f9a6ea234cf79e76c0e3970ce682160bfa0b374 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violoncello.ly"
@@ -26,7 +26,7 @@ $bassi = \type GrandStaff = bassi_group <
 
 \score{
        \$bassi
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 0f3c74edf5781e272324a1c765d99cebdc41c64a..60e77fc9862ca52fcc8f5128b65c8223df4f5142 100644 (file)
@@ -7,13 +7,13 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "clarinetti.ly"
 \score{
        \$clarinetti_staff
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 7156bbdcb22d95136304b0af860f2d51aba31ed8..0ae6fe14989577d9281a2426dcd5fa8aa41db3a1 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "clarinetto-1.ly"
 \include "clarinetto-2.ly"
index f7d4d6c0b6ddd45bca014626d3587e8ab7ec4d79..41185ad508b65d0bdfb4f12aa7f0b6c967f8fe45 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 clarinetto1 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
index 87ae15613c993db9996148056e6332d5223f8f35..f20ffa83578124c5820a75630cad9c79f3bbf4f4 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 clarinetto2 = \notes \relative c { 
        R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 | 
index 30697b2c73b48926984d220cc4bd39d395f8ec6e..5562da4dd9e23ed1b5fd2c545af75111e8f14404 100644 (file)
@@ -7,14 +7,14 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "contrabasso.ly"
 
 \score{
        \$contrabasso_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index d022c82b5d45f360fecdf63ed259d84053dd9418..3ddaa8d3d890fc1c8c05afd4f0c674ddf0053bda 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 contrabasso = \notes \relative c {
 %      \translator Staff=violoncello
diff --git a/mutopia/Coriolan/coriolan-part-paper.ly b/mutopia/Coriolan/coriolan-part-paper.ly
new file mode 100644 (file)
index 0000000..40c4ce7
--- /dev/null
@@ -0,0 +1,9 @@
+
+\paper { \translator {
+       \OrchestralPartStaffContext
+
+       }
+       \translator { \ScoreContext
+               skipBars = 1;   
+       }
+}
index ac6f000eb41d7926f5776f34a084a3915d768d58..b1831d5ca8616e0a02ad282682c7098c77b70346 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 
@@ -63,7 +63,7 @@ strijkers = \type StaffGroup = strijkers_group <
        \$bassi
 >
 
- \include "score-paper.ly"
+
 \score{
        <
                \property Score . textstyle =  "italic"
@@ -76,6 +76,7 @@ strijkers = \type StaffGroup = strijkers_group <
        \paper{
                % Give hara-kiri something to do...
                linewidth = 130.0\mm;
+               \translator { \OrchestralScoreContext }
        }
        \midi{ \tempo 4 = 160; }
 }
index e914ce3c8d4a09d7be77ecf888330158c33a3ac0..33a62d075540600f28360fb4270a7d9317bc47cf 100644 (file)
@@ -7,13 +7,13 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "corni.ly"
 \score{
        \$corni_staff
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 09293eb75d81ac4f8b7a7fc42ff00c942a69e5c0..4f3e219ee1e7bbea9168092e66d3ee2a39aad508 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "corno-1.ly"
 \include "corno-2.ly"
index 8b7232ed2162c2f45401d1a1872803593f95b17b..ea05e79c15b562f5875b6d546c5d3adba6131b19 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 corno1 = \notes \relative c {
        R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 80746b3df6c2783a1bbd72ab7e143b401b531b6b..d36a5c53fdd9a80a8f5cebf313b3b0bdaa3423bf 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 corno2 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index f485eb00e26b8cdd88b12084085fb87c197953a3..01f7b5f2d2b222881cf11bb3058feaf9fe6dacb9 100644 (file)
@@ -9,13 +9,13 @@ copyright =    "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "fagotti.ly"
 \score{
        \$fagotti_staff
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index b0cf8a0bb7921b41081e5b9ec7adee50f94d6970..4b6192f1660d454ba2816ecd6e9d9dc4ecbabad0 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "fagotto-1.ly"
 \include "fagotto-2.ly"
index f9cdfb573e0c324b4fd6f619aef615b3e3e4a370..ed3b836ac99080a18de18963829369d5818457fd 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 fagotto1 = \notes \relative c {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index ed15d8b76c25f538bc9daeb98da82a16859fc16b..d5cd40569c415ceb0d1f5a922d6bb530af319ccb 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 fagotto2 = \notes \relative c {
        R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 9afed158c9cc015ca6990bbe0a1fc98a048b9d90..b588c6ec274532ec22c24bdf53e051cdaf58f00b 100644 (file)
@@ -9,14 +9,14 @@ copyright =    "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "flauti.ly"
 
 \score{
        \$flauti_staff
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 7217b6f8313871e60098480c18cc5277c7066cf5..5fcc5d2003a8001352561e0b38dfe195d36a98b1 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "flauto-1.ly"
 \include "flauto-2.ly"
index 8841c9ca9569f7d57b7cf5d99d865dd08e9e13da..d4c80946189e1e8877ef52dbc10f43a0f40964c6 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 flauto1 = \notes \relative c {
        R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index 724e9e41746a4b9aa6e9063897d9395c0fdea0ac..677e10111b5d9b3a5e9abf7a1c095cafa2cdc4ea 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 flauto2 = \notes \relative c {
        R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 | 
index 50fa87f4c84b488bb996620d987fa203bf362713..c7006517e275430298a70b4099a32eb252a55ae3 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
        \time 4/4;
index 670f10fc2b2881bc70545b1710f98fe3669eb27f..fadc4eb74e29b17203942db52c2a72f6ab4630ff 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 oboe1 = \notes \relative c'' {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index afcf54261005b09f3b93e70e43081c6dacf54b93..96d36c05ac0a381fd0b760cc60491f28bbb81c74 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 oboe2 = \notes \relative c{
        R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 0209b433cb03fc5e2fdf0f736bb7c7e9796ca918..9c8f03f82fa1f4ff4e7aad44e6343e6e4023cb1e 100644 (file)
@@ -9,14 +9,14 @@ copyright =    "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "oboi.ly"
 
 \score{
        \$oboi_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 543805266bcdb2406636e7a368782a45741d231f..2f16346d2c58e2f7d0493f7650612b7481d899bb 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "oboe-1.ly"
 \include "oboe-2.ly"
index 5447bd60a6c2f3df7f3df8c774a4e4553c693978..bb83ba75f59f411d16924f47f33b31a140776196 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 timpani = \notes \relative c {
        R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 1e69e439c47ca1c8254850267290b84c71fee040..fd10ff150552ea9806fc780efe35b5f013beef76 100644 (file)
@@ -9,13 +9,13 @@ copyright =    "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "trombe.ly"
 \score{
        \$trombe_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 593801191c80d2d8646f8565b8b8b7d05291c4c6..e7c58a633420735b4f20fa9e1cb4da3c03ce0469 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "trombo-1.ly"
 \include "trombo-2.ly"
index 65b362e2c54445ba0bd12913b898c89d3134c904..2b2314cf58ad02ebf7d12e0923ecb5b07d948d6f 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 trombo1 = \notes \relative c {
        R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index cf1e6549339937e38093c73886684b6be9ee4d91..41b15f1b4515055ab87deb256469d11677592576 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 trombo2 = \notes \relative c {
        R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 3d69be4a38a4d3a01d95a1104ee5cdb21f5b3414..155c40b1f60f51b08f064f308d9863a721f4eda3 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 viola1 = \notes \relative c {
        \type Voice=one
index d309d0d766c9ecd049abc6d7e7e0c9e1bb456ef7..5623a5459e9ef3f9a722794dbf093d02cb04ce05 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 viola2 = \notes \relative c {
        % starts on (actualy, most part is on) same staff as viola1
index f6ff5bf220b6677bcb0503d14be6bbdb538c09a9..42bc8c95b33a45e790788168e9c4ec9aa6354bc0 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "viola-1.ly"
@@ -27,7 +27,7 @@ $viola_staff = \type Staff = violai <
 
 \score{
        \$viola_staff
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index af23c50350279bf40cf50c3eec8373bb6b9a0a81..a1b2a54829a35decae76474d33a64de21fd2f5c1 100644 (file)
@@ -7,14 +7,14 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violino-1.ly"
 
 \score{
        \$violino1_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 0b32f8cedc921f57e790b1290047e62ce55eea40..2ce139fdd6925760a32e32b364a884df83382e7d 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violino1 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index 6fe721a4a751c5961500b2935faeb3b9a92b12c0..b56fc8fbcb8f428776b0dd6a4036060d09ccfdc3 100644 (file)
@@ -7,14 +7,14 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violino-2.ly"
 
 \score{
        \$violino2_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index 4a4b04496d44308c9f34148d9674df7a7352713c..50c2a19b20e4b2a4e16ef8065dcb21333f8218a5 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violino2 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index 30720db5bab5e91ab575a3fd953f70edf249ecea..972103b6ce2abb1ce76c1575180ec02ba54c10de 100644 (file)
@@ -7,14 +7,14 @@ enteredby =    "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violoncello.ly"
 
 \score{
        \$violoncello_staff 
-       \include "part-paper.ly"
+       \include "coriolan-part-paper.ly"
        \midi{ \tempo 4 = 160; }
 }
 
index e8d117e4fa1ae0d316df74d2e5776986587d17dd..849f2731abcbda817a3f42389637f1fa407d1274 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violoncello = \notes \relative c {
        c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
index d55183d9a2725a8dae4455303df7d195af665409..53347bab50e225d00410125ec3e2c2a722df6c23 100644 (file)
@@ -4,7 +4,7 @@
        piece = "Allemande";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes{
        \time 4/4;
index c6527f5447c062557b1ef51f73d9b239aa3ac03e..5a8991e351eb79fce7e2f517e6ad23f8017e1f8f 100644 (file)
@@ -10,7 +10,7 @@
   copyright =   "Public Domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
        \time 4/4;
index 2897e9c0dcc76b6dfd21d98632339122f9e6dbd5..02851b99483d84f11558c6d72a84404bc449447e 100644 (file)
@@ -14,7 +14,7 @@ enteredby =    "jcn";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c {
        \property Voice . textstyle =  "italic"
index 17a74c61dafe1bec9d8407c21f99b221ac20dd1f..46d3d1379429223a19f17a6e4d21bc9424f282ca 100644 (file)
@@ -14,7 +14,7 @@ enteredby =    "jcn";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 one = \notes\relative c{
        \property Voice . textstyle =  "italic"
        r8\mf [c'-1( e-2 g-4] [e-2 c-1 bes'-5 g-3] |
index 8fc766402b04b7e365c0e2981d06909fa4436f62..2373753f99e9292bf49b3d97e7eeb2856b9fb836 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c{
        \property Voice . textstyle =  "italic"
index 142f047f458d6e3477fa2d86a526480bf5a9d6fb..6148cc1ef1d0d1d051a35488127247d251456d2a 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 one = \notes\relative c{
index 4455273075ec427fc8691304f836d8371c499528..b67f8994156e64bd5b30364805e0d2ab36b1af5c 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 one = \notes\relative c{
index 2a182ad2be562c5a1994994934b8bae5cb246767..9bc938b830335b25c16db005936d8a2f10ac448f 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "allemande-urtext.ly";
 
index a8536451d57806a2fd208dfdafefa2a0d7fc24d7..53fefe98c3fcae66f970a80ba3de4866d862731e 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "allemande-urtext.ly";
 
index 35c1cbdd51d9d2d80a3d83eb994473ac4c790fcb..bef3deb015a2f27fbf95fb9f3be7b7576fd0364b 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "courante-urtext.ly";
 
index e3b92a148d7730750951d3795fe4ccdfcf26b78c..6e8734fe3d1878baaf11ef45c37d22bd58945765 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "courante-urtext.ly";
 
index 1dadeae3b6707f7ad34530dc6577afdca1fd97c7..1281558bbfb4b7991fd797067804c130d3f00106 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "gigue-urtext.ly";
 
index cc075b3f729f5973c951deba30282f480a03045b..bbc8852eef1193aeacf6874211de76e873702885 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "gigue-urtext.ly";
 
index 33a843066caf5448935d18971fca70921df1aea3..cc9662b8a10e65dc19347beebc87130e6fe84d14 100644 (file)
@@ -16,7 +16,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "menuetto-urtext.ly";
 
index afc1078efb1b0f05341d7825d7ed0b857d7747f9..475d9a94dabebfded73d79f93a01570d3678afbf 100644 (file)
@@ -17,7 +17,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "menuetto-urtext.ly";
 
index 9043a9cace3b1280795b899dafe6f67a5ef0be0b..1905bfcea6c685c3e6a9435af9eaca2d62614a03 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "prelude-urtext.ly";
 
index 40f32886782e927b803ab5c0703c57df523d40cc..98442c31fd0ba794fc010f40033cd6a26c52f567 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "prelude-urtext.ly";
 
index 9e16f386d8437077115200dc1e34a997f86f3911..0900f4c6309c3c76247313529997a25bdba24640 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "sarabande-urtext.ly";
 
index 1c7bf7ccf78f890bee2cd1c12a0c7a8bb69576b7..24086de8d1687b58e87f02e440091b938213ef68 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "sarabande-urtext.ly";
 
index d9722237bc3de7ff544c9400416050b39f59e657..baa5c359e0e4ae24a40437eae78d723cfc2f1150 100644 (file)
@@ -2,6 +2,9 @@
        linewidth= 180.\mm;
        gourlay_maxmeasures = 10.0;
        % for simple testing only!
-%      castingalgorithm = \Wordwrap; % lots faster on my 486 -- jcn
-       \include "bar-numbering.ly";
+
+
+       \translator {
+               \BarNumberingStaffContext
+       }
 }
index e00ea800d39290637776b8bf8afbbaa38b458a93..ff2d679a61935f8010eda01892dcd104a514f40f 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "Public Domain";
 %{
        
 %}
-\version "1.0.4";
+\version "1.0.6";
 
 
 global = 
index 8c36ac007b848760000dbb519be98ee0ab72d5c0..867c968e5146df2bb181ce9750eadfff7d22ed38 100644 (file)
@@ -13,7 +13,7 @@
  Tested Features: stem direction, multivoice, forced accidentals.
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "nederlands.ly"                 % for correct parsing of note names
 
index 1ae74ec4aadfda5bfd0c482f748d33fedbc97238..aa78870d208700420f12f96f17ae24864b131f29 100644 (file)
@@ -8,7 +8,7 @@ enteredby =      "Shay Rojansky";
 copyright =     "Public Domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = 
     \notes {
index a192b1afd9fe7d0fee738aeac2a24cfe88b18048..e79a373423125da0032047d89af7bd61fc616fdf 100644 (file)
@@ -13,7 +13,7 @@ Tested Features: cadenza mode
 Ugh.. Wish we had grace notes....  It adds another dimension to this
 piece of music.  %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 
 cad = \notes  \relative c' {
index 730f69b5aceae5ea6e40482c931eda3e6e29b651..fe70940406e2b3b158081b1188f5a48d57ebea3e 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 }
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 allegro =
        \notes
index 978b8bcc899d6a8a2362013d1fb3aeb1a8a88f6d..417657c88aca4d54183574a5693cd896bc03eefa 100644 (file)
@@ -45,7 +45,7 @@ Voice engraver by uncommenting the lines in the paper
 definition below. --MB
 %} 
 
-\version "1.0.4";
+\version "1.0.6";
 
 vi1=\notes \relative c'' {
   \time 4/4;
@@ -227,6 +227,7 @@ bc=\notes\transpose c'{
 
 \score{
   \type StaffGroup <
+    \property StaffGroup.timeSignatureStyle = "old"
     \vi1
     \vi2
     \bc
@@ -234,24 +235,14 @@ bc=\notes\transpose c'{
   \paper{
     gourlay_maxmeasures=7.;
 
-%{
+    \translator { \VoiceContext
+
 %% Uncomment to get the original layout without beams.
 %%%% Compare to the definition in init/engraver.ly.
-    Voice = \translator {
-       \type "Engraver_group_engraver";
-       \consists "Dynamic_engraver";
-       \consists "Rest_engraver";
-       \consists "Stem_engraver";
-       \consists "Plet_engraver";
- %     \consists "Beam_engraver";
-       \consists "Beam_req_swallow_translator";
-       \consists "Abbreviation_beam_engraver";
-       \consists "Script_engraver";
-       \consists "Rhythmic_column_engraver";
-       \consists "Slur_engraver";
-       \accepts "Thread";
-    }
-%}
+
+%  \remove "Beam_engraver";
+ }
     
   }
   \midi{ 
index d3c21e22a9c0e7e0949f23530ec1d060c0050f8e..c4aa806955418aa88642c60d3ca01800394447c0 100644 (file)
@@ -8,7 +8,7 @@ enteredby =      "jcn";
 copyright =     "public domain";
 latexheaders=    "headers";
 } 
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 Silly latex file dropped; use ly2dvi
@@ -304,13 +304,13 @@ $staff_hoboone = \type Staff = hoboonestaff <
 >
 
 a4 = \paper{
-       \include "bar-numbering.ly"
+       \translator{ \BarNumberingStaffContext }
 }
 
 a4sixteen = \paper{
        \paper_sixteen
        linewidth= 193.\mm;
-       \include "bar-numbering.ly"
+       \translator { \BarNumberingStaffContext }
 }
 
 \score{
index 77b00acb9facd8c0709301fa762c00d209435d3f..495414b8030d5747530ff36bf281e4197c9a4333 100644 (file)
@@ -9,6 +9,6 @@ description = "A schubert song in 16 pt";
 copyright =     "public domain";
 } 
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "standchen.ly"
index 15d0d84dc72064ce67a920d454df42ff63103f75..3c41e60ddd915baa2c103aaf3f497cd5d53e8db6 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 description = "A schubert song in 20 pt";
 } 
 
-\version "1.0.4";
+\version "1.0.6";
 
 % fool make-website
 % \include "standchen.ly";
index 90997fbbe2af752d9fb00f6a2b1d38429fea5944..055c306010cddb96e213a6859579376f27955925 100644 (file)
@@ -16,7 +16,7 @@ multiple \paper{}s in one \score
 Note: Original key F.
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 $vocal_verse1 = \notes\relative c{
        % ugh: treble/bass
@@ -448,7 +448,7 @@ $grand_staff = \type GrandStaff<
                \$lyric_staff
                { \notes \transpose a { \$grand_staff } }
        >
-       \include "score-paper.ly";
+       \paper { \translator { \OrchestralScoreContext }}
        \midi{
                \tempo 4 = 54;
        }
index 81cd1795d3a58843d2377df2c090b58d567c33f1..6481c5b77b5876abb058a40aec6e9f6a7b561403 100644 (file)
@@ -200,7 +200,31 @@ if 1:
        
        conversions.append ((1,0,4), conv, 'default_{paper,midi}\n')
 
+if 1:
+       def conv(lines):
+               newlines =[]
+               for x in lines:
+                       x =  regsub.gsub ('ChoireStaff', 'ChoirStaff',x)
+                       x =  regsub.gsub ('\\output', 'output = ',x)
+                       newlines.append (x)
+               return newlines
+       
+       conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff\n')
 
+if 1:
+       def conv(lines):
+               newlines =[]
+               found = 0
+               for x in lines:
+                       found = regex.search ('[a-zA-Z]+ = *\\translator',x) <> -1
+                       newlines.append (x)
+                       if found: break
+               if found:
+                       sys.stderr.write ('\nNot smart enough to \\translator syntax\n')
+                       raise FatalConversionError()
+               return newlines
+       
+       conversions.append ((1,0,6), conv, 'foo = \\translator {\type .. } ->\translator {\type ..; foo; }\n')
 ############################
 
 def get_conversions (from_version, to_version):
index 2dbb0532e274e855a87b2643fee672bcc6f7e219..fe5a858598e2d44da1e424547ad63f2e2c01614a 100644 (file)
@@ -1,5 +1,12 @@
+pl 55
+       - table-to-html stuff moved .
+
+pl 54
+       - && for TeX
+
 pl 53
        - moved TeX stuff into tex template
+
 pl 52
        - striproff
        - reeable $(PACKAGE)_LIBES,_INCLUDES
index 58e4ed00c01e66a2d56c03fb50a12225b398b8bf..8f110f1f6df8bf48ae7527c5f8b60eb602bbf75e 100644 (file)
@@ -1,7 +1,7 @@
 PACKAGE_NAME=StepMake
 MAJOR_VERSION=0
 MINOR_VERSION=1
-PATCH_LEVEL=53
+PATCH_LEVEL=55
 MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
index af199bbfbe47d807d041d0986339b357968598b3..437116fbcc7842547a02fa4395a388374821b913 100644 (file)
@@ -43,67 +43,60 @@ def header (html):
 def footer (html):
     html.write ('</table></body>')
 
-def convert_html (inname, outname, separator):
-    # urg, again?
-    from flower import *
-    table = File (inname)
+def convert_html (inname, outname, cols, separator, linesep):
+    table = open (inname)
     # ugh
-    html = File (outname, 'w')
+    html = open (outname, 'w')
 
     header (html)
     i = 0
-    while not table.eof ():
-       line = table.readline ()
+    for line in table.readlines ():
        i = i + 1
        if not len(line):
            continue
        columns = split (line, separator)
        html_line = '<tr><td>' + join (columns, '</td><td>') + '</td></tr>'
+       html_line= regsub.gsub (linesep, ' ',html_line)
        html.write (html_line)
-       if len (columns) < 7:
-           print inname + ': ' + str(i) + ':warning: not enough cols\n'
-           continue
-       if len (columns) > 7:
-           print inname + ': ' + str(i) + ':warning: too many cols\n'
-           continue
+
+       if len (columns) <> cols:
+               print i
+               raise 'not enough cols'
 
     table.close ()
     footer (html)
     html.close ()
 
-def convert_tex (inname, outname, separator):
-    # urg, again?
-    from flower import *
-    table = File (inname)
-    # ugh
-    html = File (outname, 'w')
+
+def convert_tex (inname, outname, cols, separator, linesep):
+    table = open (inname)
+    html = open(outname, 'w')
 
     i = 0
-    while not table.eof ():
-       line = table.readline ()
+    for line in table.readlines ():    
        i = i + 1
        if not len(line):
            continue
        columns = split (line, separator)
-       if len (columns) < 7:
-           print inname + ': ' + str(i) + ':warning: not enough cols\n'
-           continue
-       if len (columns) > 7:
-           print inname + ': ' + str(i) + ':warning: too many cols\n'
-           continue
-
-       html_line =  '\\tableentry{' + join (columns, '}{') + '}\n'
-       html.write (html_line)
+       if len (columns) <> cols:
+               print i
+               raise 'not enough cols'
+
+       tex_line =  '\\tableentry{' + join (columns, '}{') + '}\n'
+       tex_line = regsub.gsub (linesep, ' ', tex_line)
+       html.write (tex_line)
+       
     table.close ()
     html.close ()
 
 def main ():
     identify ()
     (options, files) = getopt.getopt (
-       sys.argv[1:], 'to:hp:s:', ['help', 'latex', 'output=', 'package=', 'separator='])
+       sys.argv[1:], 'tl:o:hp:c:s:', ['columns=', 'help', 'latex', 'output=', 'package=', 'separator=', 'linesep='])
     latex = 0
     separator = '@'
     output = ''
+    linesep = '\r'
     for opt in options:
        o = opt[0]
        a = opt[1]
@@ -117,6 +110,10 @@ def main ():
            output = a
        elif o == '--package' or o == '-p':
            topdir=a
+       elif o == '--linesep' or o == '-l':
+               linesep = a
+       elif o == '--columns' or o == '-c':
+               cols =  atoi(a)
        else:
            print o
            raise getopt.error
@@ -129,9 +126,9 @@ def main ():
     from flower import *
 
     if latex:
-       convert_tex (files[0], output, separator)
+       convert_tex (files[0], output,  cols, separator, linesep)
     else:
-       convert_html (files[0], output, separator)
+       convert_html (files[0], output, cols, separator, linesep)
 
 main ()
 
index 2cb0849430f4a3bad87d57b146532fec04e7a41d..2f32642a650768fbb1ad548ba1fd19e22d7bc150 100644 (file)
@@ -15,13 +15,6 @@ $(outdir)/%.png: %.xpm
 $(outdir)/%.txt: $(outdir)/%.1
        troff -man -Tascii $< | grotty -b -u -o > $@
 
-#urg should generalise and move Lilypond -> StepMake
-$(outdir)/%.html: %.data $(depth)/VERSION
-       $(PYTHON) $(step-bindir)/table-to-html.py --package=$(topdir) -o $@ $<
-       $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $@
-
-$(outdir)/%.tex: %.data $(depth)/VERSION
-       $(PYTHON) $(step-bindir)/table-to-html.py --package=$(topdir) -o $@ --latex $<
 
 include $(stepdir)/yodl-rules.make
 include $(stepdir)/texinfo-rules.make
index 68c065b9fca7871a41b8b6ae2fa805792b87ff22..cfade84d8924e4b1ed585b90d0895149e233ec48 100644 (file)
@@ -3,7 +3,7 @@
 
 .PHONY : all clean config default dist doc doc++  exe help html lib TAGS\
         po
-
+VPATH=$(outdir)/               #ugh?
 # target all:
 #
 all:    default
@@ -119,9 +119,12 @@ TAGS:
 
        $(LOOP)
 
-$(outdir)/version.hh: VERSION
-       sh ./$(step-bindir)/make-version.sh > $@
+# ugh . -> $(outdir)
+$(outdir)/VERSION: $(depth)/VERSION
+       cp $< $@
 
+$(outdir)/version.hh: VERSION
+       sh ./$(step-bindir)/make-version.sh $< > $@
 
 # should this be in Rules?
 configure: configure.in aclocal.m4
index 96f2bd0ae864906181b14b93a46cc1019dff83ff..7b0b9820db4ab43206a9df28389e61ad8e9b6570 100644 (file)
@@ -4,12 +4,11 @@ $(outdir)/%.dvi: $(outdir)/%.tex
        (cd $(outdir); tex \\nonstopmode \\input $(<F))
 
 $(outdir)/%.dvi: $(outdir)/%.latex
-       (cd $(outdir); \
-         latex \\nonstopmode \\input $(<F);\
-         bibtex $(basename $(<F));\
-         latex \\nonstopmode \\input $(<F);\
-         latex \\nonstopmode \\input $(<F);\
-       )
+       (cd $(outdir)&& \
+         latex \\nonstopmode \\input $(<F)&&\
+         (bibtex $(basename $(<F))&&\
+         latex \\nonstopmode \\input $(<F)&&\
+         latex \\nonstopmode \\input $(<F) ) || true)
 
 $(outdir)/%.ps: $(outdir)/%.dvi
        dvips -ta4 -o $@ $<
index 1f1f6d9b74ebd907988582da796188d3e5fab413..efa71663b4967aa8b8989067d65cb8e61d35675f 100644 (file)
 
 \def\generalmeter#1#2{%
   \ifnum #2 = 0\relax
-    \ifcase #1
-    \or\or
-      % 2
-      \allabreve
-    \or
-      % 3
-      \threetwometer    % tempus perfectum cum prolatione imperfecta
-    \or
-      % 4
-      \fourfourmeter    % tempus imperfectum cum prolatione imperfecta
-    \or\or
-      % 6
-      \sixfourmeter     % tempus imperfectum cum prolatione perfecta
-    \or\or\or
-      % 9
-      \ninefourmeter    % tempus perfectum cum prolatione perfecta
-    \fi
+    \vbox to 0pt{%
+      \vss
+      \hbox to 0.45\staffheight{\hss \fetanummer #1\hss}%
+      \vss}%
   \else
     \vbox to 0pt{%
       \vss
index 1da26f84cdcf99083c85fa6c27b83da1a2dccc4e..97b6f320ac878a88e937c1c3008c79af854058e3 100644 (file)
@@ -66,7 +66,6 @@
                         \ifnum\thepage=1{\hfil \LilyIdString}%
                         \else{foo\hfil\the\pageno\hfil}%
                         \fi}}%
-\fi
 \nopagenumbers
 }
 
index 22411bb56fe90e6e406b6f447dfdf1b5de215e72..833d0f2b0ef79818bfefb31f454c721907671dc6 100644 (file)
 %        to time.
 %
 \ifx\csname nolilyfooter\endcsname\relax
-        \message{footer defined}%
-        \csname lilyfooter\texsuffix\endcsname
-\else
-        \message{footer empty!}
+        \message{[footer empty]}
         \csname nolilyfooter\texsuffix\endcsname
+\else
+        \message{[footer defined]}%
+        \csname lilyfooter\texsuffix\endcsname%
 \fi