]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 0.0.44 release/0.0.44
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 23 Mar 1997 23:44:41 +0000 (00:44 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 23 Mar 1997 23:44:41 +0000 (00:44 +0100)
129 files changed:
.dstreamrc
.version
Documentation/CodingStyle.pod
Documentation/INSTALL.pod
Documentation/lilyinput-pre-0.1.pod
Documentation/lilyinput.pod [deleted file]
Documentation/mudela.pod [new file with mode: 0644]
INSTALL.text
NEWS
README
TODO
flower/.version
flower/NEWS
flower/flower-debug.cc [new file with mode: 0644]
flower/include/flower-debug.hh [new file with mode: 0644]
flower/include/path.hh
flower/include/string-data.hh
flower/include/string-data.inl
flower/include/string-handle.hh
flower/include/string-handle.inl
flower/include/string.hh
flower/include/vector.hh
flower/matdebug.cc [deleted file]
flower/matrix-debug.cc [new file with mode: 0644]
flower/path.cc
flower/scalar.cc
flower/string-convert.cc
flower/string.cc
init/dutch.ini
input/cadenza.ly
input/coriolan-alto.ly
input/error.ly
input/fugue1.midi.ly
input/kortjakje.ly
input/maartje.ly
input/midi.ly
input/mlalt.ly
input/mlcello.ly
input/mlvio1.ly
input/mlvio2.ly
input/pre1.midi.ly
input/scales.ly
input/scsii-menuetto.ly
input/standchen.ly
input/twinkle.ly
input/wohltemperirt.ly
lib/binary-source-file.cc
lib/duration-convert.cc [new file with mode: 0644]
lib/duration.cc
lib/includable-lexer.cc [new file with mode: 0644]
lib/include/binary-source-file.hh
lib/include/duration-convert.hh [new file with mode: 0644]
lib/include/duration.hh
lib/include/includable-lexer.hh [new file with mode: 0644]
lib/include/input-file.hh [deleted file]
lib/include/proto.hh
lib/include/source-file.hh
lib/include/source.hh
lib/input-file.cc [deleted file]
lib/source-file.cc
lib/source.cc
lib/template.cc [new file with mode: 0644]
lily/.version
lily/Makefile
lily/bar-reg.cc
lily/clef-reg.cc
lily/debug.cc
lily/headreg.cc
lily/include/input-score.hh
lily/include/input-staff.hh
lily/include/lily-proto.hh [new file with mode: 0644]
lily/include/local-key-reg.hh
lily/include/main.hh
lily/include/musical-request.hh
lily/include/my-lily-lexer.hh
lily/include/my-lily-parser.hh [new file with mode: 0644]
lily/include/parseconstruct.hh
lily/include/request.hh
lily/include/rest.hh
lily/include/score.hh
lily/include/staff-elem-info.hh
lily/include/text-def.hh
lily/include/voice-element.hh
lily/input-music.cc
lily/input-score.cc
lily/input-staff.cc
lily/key-reg.cc
lily/lexer.l
lily/local-key-reg.cc
lily/lyric-item.cc
lily/main.cc
lily/midi-item.cc
lily/midi-output.cc
lily/midi-stream.cc
lily/musical-request.cc
lily/my-lily-lexer.cc
lily/my-lily-parser.cc [new file with mode: 0644]
lily/note.cc
lily/notehead.cc
lily/parser.y
lily/rest.cc
lily/score.cc
lily/scores.cc
lily/slur-reg.cc
lily/staff-walker.cc
lily/stem-beam-reg.cc
lily/template3.cc
lily/tex-stream.cc
lily/text-def.cc
lily/voice-elt.cc
lily/walk-regs.cc
lily/warn.cc
make/Rules.make
make/Targets.make
make/Variables.make
make/lilypond.spec.in
mi2mu/include/mi2mu.hh
mi2mu/include/midi-global.hh
mi2mu/include/my-midi-lexer.hh
mi2mu/include/my-midi-parser.hh
mi2mu/lily-stream.cc
mi2mu/main.cc
mi2mu/mi2mu-version.cc
mi2mu/midi-event.cc
mi2mu/midi-lexer.l
mi2mu/my-midi-lexer.cc
mi2mu/my-midi-parser.cc
mi2mu/template.cc
mi2mu/version.cc

index dd50d37872ff8c58ba7645b590bd6855db1f8485..63a0a94456b0738a0a33abf28585a1332c562ad4 100644 (file)
@@ -1,7 +1,7 @@
 # class name           silence?
 Dstream                        1
 
-My_lily_lexer          0
+My_lily_lexer          1
 PCol                   1
 Score_column           1
 Ineq_constrained_qp    1
@@ -13,9 +13,9 @@ Idealspacing          1
 
 # yydebug
 InitParser             1
-Parser                 0
+Parser                 1
 InitDeclarations       1
-Declarations           0
+Declarations           1
 # FlexLexer debug
 InitLexer              1
 Lexer                  1
index f3fe58849aa8715eae9fb2ebc37ca1f57dd9b1eb..18dcdc6982c043ffb8c84480ae532d10077ec596 100644 (file)
--- a/.version
+++ b/.version
@@ -1,8 +1,7 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 43
+TOPLEVEL_PATCH_LEVEL = 44
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
 TOPLEVEL_MY_PATCH_LEVEL =
-#
index 66ee04705f59eff746f3ebbdfc1ec86ae65bc0ef..2f65fb775ebbc3235b9aa8b2d1fddc66965bbb2b 100644 (file)
@@ -311,6 +311,12 @@ user built array.
 
 const. Note that the proper order C<Type const> i.s.o. C<const Type>
 
+=item C<C>
+
+A const pointer. This would be equivalent to C<_c_l>, but since any
+"const" pointer has to be a link (you can't delete a const pointer),
+it is superfluous.
+
 =item C<l>
 
 temporary pointer to object (link)
index 4a389171dd85168531c073dda30a6c3d92ec2e90..4615b850f2d1b83b16c12ab7cf3d93f7067a5e03 100644 (file)
@@ -85,7 +85,10 @@ have the gnu
 development tools, and your make is gnu make.  If this is not the
 case, you can adjust your environment variables to your taste:
 
-       CXXFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" configure
+       export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" 
+       configure
+
+C<CPPFLAGS> are the preprocessor flags. 
 
 the configure script is Cygnus configure, and it will accept
 B<--help>. If you are not root, you will probably have to make it with
index 58a4378d4b9ec862f8958a797b2603457a539f4c..885b3033069fdffd915b64e1d76b38352e8f02ba 100644 (file)
@@ -69,11 +69,3 @@ Not really crystallized; you can use '#' or '%' as line comment
 
 LilyPond first reads 'symbol.ini', which contains declarations crucial
 to proper operation of LilyPond (symbol tables, note names).
-
-This language looks a lot like Rayce's (Rayce is a raytracer that I've
-written as a hobby project. I used as a practice program for writing
-(among others) C++ and Yacc. It also gave me RSI :-( ) which in turn
-owes a lot to the POVRay raytracer. Now, I know, musictypesetting and
-Raytracing do not necessarily require the same input format, but I was
-just to lazy to make up a new and/or better input format. Suggestions
-appreciated.
diff --git a/Documentation/lilyinput.pod b/Documentation/lilyinput.pod
deleted file mode 100644 (file)
index 6fdedd2..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-=head1 NAME
-
-LilyInput -  LilyPond input format -- Mudela 0.1
-
-B<NOTICE:> this doc describes the I<new> input format, S<Mudela 0.1>.
-
-=head1 DESCRIPTION
-
-This document describes the the LilyPond input format, which is an
-effective language for definining music.  We call this language
-(rather arrogantly) The Musical Definition Language (S<Mudela 0.1>).
-
-The first aim of Mudela is to define a piece of music, 
-being complete from both from a musical typesetting, 
-as from a musical performing point of view.
-
-The design of Mudela has been (perfect past tense, hopefully)
-an ongoing process, 
-the most important criteria being:
-
-=over 4
-
-=item *
-
-define the (musical) message of the composer as unambiguously as possible,
-
-=item *
-
-be intuitive, and easily readable 
-(compared to, say, Musi*TeX input, or MIDI :-),
-
-=item *
-
-be writable in ASCII with a simple texteditor, yfte(TM).
-
-=back
-
-Other considerations were (and will be):
-
-=over 4
-
-=item *
-
-be able to edit the layout 
-without danger of changing the original music (Urtext),
-
-=item *
-
-allow for adding different interpretations, again, 
-without danger of changing the original,
-
-=item *
-
-easy to create a conductor's score, 
-as well as the scores for all individual instruments,
-
-=item *
-
-provide simple musical manipulations, such as 
-S<(i) extracting> a slice of music from a previously defined piece, 
-S<(ii) extracting> only the rhythm from a piece of music, 
-S<(iii) transposing>, etc.,
-
-=item *
-
-easy to comprehend to both programmers and others.
-
-=back
-
-Musical pieces could be
-
-=over 5
-
-=item *
-
-Mahlerian orchestral scores,
-
-=item *
-
-piano pieces (Schubertian, Rachmaninovian),
-
-=item *
-
-pop songs (lyrics and chords),
-
-=item *
-
-gregorian chants,
-
-=item *
-
-Bach multivoice organ pieces,
-
-=item *
-
-short excerpts to be used in musicological publications.
-
-=back
-
-
-=head1 Overview
-
-The Musical Definition Language (Mudela) S<version 0.1>,
-has a logical structure, 
-making use of typing and naming (using identifiers),
-that allows for flexible input, and definition reuse.
-
-The below included for explanatory
-purposes only (i.e., for a complete and up-to-date definition, see
-F<lily/parser.y> and F<lily/lexer.l>):
-
-=head2 Files
-
-The de-facto extension of Mudela is F<.ly>. Files may be included by
-entering C<include> at the start of a line:
-
-       include "a_file.ly"
-
-=head2 Comments
-
-Line comments are introduced by a C<%>
-
-=head2 Words
-
-Keywords are preceded by a backslash "\". They contain alphabetic
-characters only. 
-
-Identifiers in their normal form consist start with a alpha character,
-followed by alpha-numerics. Identifiers can contain any characters
-(except whitespace, C<$> and C<%>), if you use this construct:
-
-       $Id_with###@weird92chars = 
-
-=head2 Nesting characters
-
-Mudela uses the brace (C<{> and C<}>) for hierarchical structures. To
-aid the eye in reading, for chords the C<<> and the C<>> are used as
-nesting braces.
-
-=head2 Identifiers
-
-=head2 Hierarchical structures
-
-The general structure consists of declarations:
-
-       IDENTIFIER = \TYPE{
-               <type specific data>
-       }
-
-and instantiations:
-
-       \TYPE{ <type specific data> }
-
-(Currently, C<\score> is the only type that can be instantiated
-at top level. Currently declarations can only be done at top level)
-
-Most instantiations that use an IDENTIFIER are specified as follows:
-
-       \TYPE { IDENTIFIER [...] }
-
-Some exceptions on this rule have been made to prevent inputting
-Mudela becoming tedious
-
-
-=head2 Simple mudela
-
-The actual musical part of Mudela that defines a melody, is known as 
-I<simple mudela>. 
-
-Simple mudela is the most common type of music.  It consists of a list
-of notes or lyrics, chords, and commands.
-
-=head2 Modes:
-
-To simplify different aspects of music definition (entering the notes
-and manipulating them) Mudela has a number of different input "modes":
-
-=over 4
-
-=item Normal mode
-
-At the start of parsing, Mudela assumes normal mode.
-In Normal mode, a word is looked up in the following order:
-
-       word    identifier, string
-       \word   keyword, string
-
-In normalmode, a word is assumed to start with an alphabetic
-character, followed by alpha-numeric characters.
-
-=item Note mode
-
-Note mode (and thus Simple mudela) is introduced by the keyword C<\music>.
-In Note mode, a word is looked up in the following order:
-
-       word    identifier, string
-       \word   keyword, string
-
-In Note mode a word is considered to have alphabetic characters only.
-
-=item Lyric mode
-
-Lyrics mode (and thus Simple mudela)  is introduced by the keyword C<\lyrics>.
-
-In Lyrics mode, a word is looked up in the following order:
-
-       word    string
-       \word   keyword, string
-
-In Lyric mode every sequence of non-digit and non-white characters
-starting with an alphabetic character is considered a word.
-
-=back
-
-These modes are of a lexical nature. Normal and Note mode largely
-resemble each other, save the possibility of entering Reals, and
-meaning of C<_>
-
-=head2 Notes
-
-Simple mudela basically is a sequence of the notes you want to
-enter. 
-
-       a'4     % dutch names
-
-is a A-1 pitched quaver. The ' as well as the ` signify an octave change.
-A-1 is 440 Hz concert-pitch. C<c'> is also known as the central
-c. More examples:
-
-       `a      % 110
-       a       % 220
-       a'      % 440
-       a''     % 880
-
-another example:
-
-       `as4.*2/3
-
-This is an A flat, (just below 110 Hz concert-pitch). The C<*2/3>
-signifies that this note is part of a triplet (3 in stead of 2). The
-duration is one and a half quaver (C<4.>) times 2/3. 
-
-The default language for notenames is defined to be dutch,
-
-       % double sharp
-       cisis disis eisis fisis gisis aisis bisis
-       % sharps
-       cis dis eis fis gis ais bis
-       % naturals
-       c d e f g a b 
-       % flats
-       ces des es fes ges as bes
-       % double flats
-       ceses deses eses feses geses ases beses
-
-The standard notenames also have uppercase versions, which octavate
-down:
-
-       a       % 220
-       A       % 110
-       'A      % 55
-       A'      % 220
-       Cisis
-
-The rest is named 
-
-       r
-
-These notenames along with duration is enough material to construct
-simple melodies:
-
-       c4 c4 g4 g4 a4 a4 g2
-       f4 f4 e4 e4 d4 d4 c2
-
-Music is able to express more. generally speaking, the other
-'features' are either connected between notes (slurs, beams: spanning
-requests) or attached to notes (eg. accents). The former are
-implemented as START and STOP stop features and then attached to the note.
-
-       []      START/STOP a beam
-       ()      START/STOP a slur
-
-
-example: 
-
-       [c8 () d8 () e8 ]
-
-Please note that these two characters do I<not> necessarrily nest, eg:
-
-       [c8 e8(] [)g8 c'8]
-
-
-Symbols which can be put at either side of a staff are entered as follows:
-
-       a-^     % marcato, direction: default
-       a^-     % portato, direction: above note
-       a_.     % staccato, direction: below note
-       a^\script { "symbolindex"  . . . } % see script.ini for details.
-
-Dynamics can be put after the notename:
-
-       a4 \dynamic { 0 } % 0 = fff, 7 = ppp
-
-Mudela defines the following dynamic identifiers:
-
-       ppp pp p mp mf df ff fff        % df iso f, f is a notename.
-
-The general form of a note is:
-
-       post-requests de-octavate notename octavate duration pre-requests 
-
-Notenames are just identifiers, and can be declared for any
-language appropriate (see F<dutch.ini>). 
-
-=head2 Lyrics
-
-Lyrics in Mudela resemble Simple mudela a lot, with notes substituted
-by text. 
-
-All syllables are entered separately, separated by whitespace 
-
-       Twin-4 kle4 twin-4 kle4 ... 
-
-Two syllables or words that compose a single
-duration entry are bound together using an underscore 
-
-       He_could4 not4
-
-
-
-=head2 Rhythms
-
-Rhythms in Mudela are entered identical to Simple mudela.
-The melodic part of the information is ignored.
-
-=head1 STRUCTURE
-
-In concrete, a piece of Mudela has the following structure:
-
-       % declare pieces of music:
-       melody = \music{ <simple mudela> }
-       accompany = \music{ <simple mudela> }
-
-       % instantiate (=create tex, midi output) the score:
-       \score{ 
-               \staff{ melody }
-               \staff{ accompany }
-               \commands{ <score global commands> }
-               \midi{ <midi definitions> }
-               \paper{ <paper and layout definitions }
-       }
-
-=head2 Examples
-
-Examples are included with the LilyPond distribution. For the sake of
-maintenance no long examples are included in this document.
-
-
-=head2 Other
-
-LilyPond first reads F<symbol.ini>, which contains declarations crucial
-to proper operation of LilyPond (symbol tables, note names).
diff --git a/Documentation/mudela.pod b/Documentation/mudela.pod
new file mode 100644 (file)
index 0000000..02f06ae
--- /dev/null
@@ -0,0 +1,453 @@
+=head1 NAME
+
+Mudela -  LilyPond input format 0.1
+
+=head1 DESCRIPTION
+
+This document describes the the LilyPond input format, which is an
+effective language for definining music.  We call this language
+(rather arrogantly) The Musical Definition Language (S<Mudela 2>).
+
+The first aim of Mudela is to define a piece of music, 
+being complete from both from a musical typesetting, 
+as from a musical performing point of view.
+
+The design of Mudela has been (perfect past tense, hopefully)
+an ongoing process, 
+the most important criteria being:
+
+=over 4
+
+=item *
+
+define the (musical) message of the composer as unambiguously as possible,
+
+=item *
+
+be intuitive, and easily readable 
+(compared to, say, Musi*TeX input, or MIDI :-),
+
+=item *
+
+be writable in ASCII with a simple texteditor, yfte(TM).
+
+=back
+
+Other considerations were (and will be):
+
+=over 4
+
+=item *
+
+be able to edit the layout 
+without danger of changing the original music (Urtext),
+
+=item *
+
+allow for adding different interpretations, again, 
+without danger of changing the original,
+
+=item *
+
+easy to create a conductor's score, 
+as well as the scores for all individual instruments,
+
+=item *
+
+provide simple musical manipulations, such as 
+S<(i) extracting> a slice of music from a previously defined piece, 
+S<(ii) extracting> only the rhythm from a piece of music, 
+S<(iii) transposing>, etc.,
+
+=item *
+
+easy to comprehend to both programmers and others.
+
+=back
+
+Musical pieces could be
+
+=over 5
+
+=item *
+
+Mahlerian orchestral scores,
+
+=item *
+
+piano pieces (Schubertian, Rachmaninovian),
+
+=item *
+
+pop songs (lyrics and chords),
+
+=item *
+
+gregorian chants,
+
+=item *
+
+Bach multivoice organ pieces,
+
+=item *
+
+short excerpts to be used in musicological publications.
+
+=back
+
+
+=head1 Overview
+
+The Musical Definition Language (Mudela) S<version 2>,
+has a logical structure, 
+making use of typing and naming (using identifiers),
+that allows for flexible input, and definition reuse.
+
+The below included for explanatory
+purposes only (i.e., for a complete and up-to-date definition, see
+F<lily/parser.y> and F<lily/lexer.l>):
+
+=head2 Files
+
+The de-facto extension of Mudela is F<.ly>. Files may be included by
+entering C<include> at the start of a line:
+
+       include "a_file.ly"
+
+=head2 Comments
+
+Line comments are introduced by a C<%>
+
+=head2 Words
+
+Keywords are preceded by a backslash "\". They contain alphabetic
+characters only. 
+
+Identifiers in their normal form consist start with a alpha character,
+followed by alpha-numerics. Identifiers can contain any characters
+(except whitespace, C<$> and C<%>), if you use this construct:
+
+       $Id_with###@weird92chars = 
+
+=head2 Nesting characters
+
+Mudela uses the brace (C<{> and C<}>) for hierarchical structures. To
+aid the eye in reading, for chords the C<<> and the C<>> are used as
+nesting braces.
+
+=head2 Identifiers
+
+=head2 Hierarchical structures
+
+The general structure consists of declarations:
+
+       IDENTIFIER = \TYPE{
+               <type specific data>
+       }
+
+and instantiations:
+
+       \TYPE{ <type specific data> }
+
+(Currently, C<\score> is the only type that can be instantiated
+at top level. Currently declarations can only be done at top level)
+
+Most instantiations that use an IDENTIFIER are specified as follows:
+
+       \TYPE { IDENTIFIER [...] }
+
+Some exceptions on this rule have been made to prevent inputting
+Mudela becoming tedious
+
+
+=head2 Simple mudela
+
+The actual musical part of Mudela that defines a melody, is known as 
+I<simple mudela>. 
+
+Simple mudela is the most common type of music.  It consists of a list
+of notes or lyrics, chords, and commands.
+
+=head2 Modes:
+
+To simplify different aspects of music definition (entering the notes
+and manipulating them) Mudela has a number of different input "modes":
+
+=over 4
+
+=item Normal mode
+
+At the start of parsing, Mudela assumes normal mode.
+In Normal mode, a word is looked up in the following order:
+
+       word    identifier, string
+       \word   keyword, string
+
+In normalmode, a word is assumed to start with an alphabetic
+character, followed by alpha-numeric characters.
+
+=item Note mode
+
+Note mode (and thus Simple mudela) is introduced by the keyword C<\music>.
+In Note mode, a word is looked up in the following order:
+
+       word    identifier, string
+       \word   keyword, string
+
+In Note mode a word is considered to have alphabetic characters only.
+
+=item Lyric mode
+
+Lyrics mode (and thus Simple mudela)  is introduced by the keyword C<\lyrics>.
+
+In Lyrics mode, a word is looked up in the following order:
+
+       word    string
+       \word   keyword, string
+
+In Lyric mode every sequence of non-digit and non-white characters
+starting with an alphabetic character is considered a word.
+
+       a&@&@&TSI|{[    % a word
+       1THtrhortho     % not a "word"
+       Leise Fl\"u\ss{}teren meine Sapfe       % 4 words
+
+
+=back
+
+These modes are of a lexical nature. Normal and Note mode largely
+resemble each other, save the possibility of entering Reals, and
+meaning of C<_>
+
+=head2 Notes
+
+Simple mudela basically is a sequence of the notes you want to
+enter. 
+
+       a'4     % dutch names
+
+is a A-1 pitched quaver. The ' as well as the ' signify an octave change.
+A-1 is 440 Hz concert-pitch. C<c'> is also known as the central
+c. More examples:
+
+       'a      % 110
+       a       % 220
+       a'      % 440
+       a''     % 880
+
+another example:
+
+       'as4.*2/3
+
+This is an A flat, (just below 110 Hz concert-pitch). The C<*2/3>
+signifies that this note is part of a triplet (3 in stead of 2). The
+duration is one and a half quaver (C<4.>) times 2/3. 
+
+The default language for notenames is defined to be dutch,
+
+       % double sharp
+       cisis disis eisis fisis gisis aisis bisis
+       % sharps
+       cis dis eis fis gis ais bis
+       % naturals
+       c d e f g a b 
+       % flats
+       ces des es fes ges as bes
+       % double flats
+       ceses deses eses feses geses ases beses
+
+The standard notenames also have uppercase versions, which octavate
+down:
+
+       a       % 220 concert-pitch
+       A       % 110
+       'A      % 55
+       A'      % 220
+       Cisis
+
+The rest is named 
+
+       r
+
+These notenames along with duration are enough material to construct
+simple melodies:
+
+       c4 c4 g4 g4 a4 a4 g2
+       f4 f4 e4 e4 d4 d4 c2
+
+Music is able to express more. generally speaking, the other
+'features' are either connected between notes (slurs, beams: spanning
+requests) or attached to notes (eg. accents). The former are
+implemented as START and STOP stop features and then attached to the note.
+
+       []      START/STOP a beam
+       ()      START/STOP a slur
+
+
+example: 
+
+       [c8 () d8 () e8 ]
+
+Please note that these two characters do I<not> necessarrily nest, eg:
+
+       [c8 e8(] [)g8 c'8]
+
+
+Symbols which can be put at either side of a staff are entered as follows:
+
+       a-^     % marcato, direction: default
+       a^-     % portato, direction: above note
+       a_.     % staccato, direction: below note
+       a^\script { "symbolindex"  . . . } % see script.ini for details.
+
+Dynamics can be put after the notename:
+
+       a4 \dynamic { 0 } % 0 = fff, 7 = ppp
+
+Mudela defines the following dynamic identifiers:
+
+       ppp pp p mp mf df ff fff        % df iso f, f is a notename.
+
+The general form of a note is:
+
+       post-requests de-octavate notename octavate duration pre-requests 
+
+Notenames are just identifiers, and can be declared for any
+language appropriate (see F<dutch.ini>). 
+
+=head2 Defaults
+
+If omit the duration of a, a default value is substituted. For this
+default value, there are two modes:
+
+=over 4
+
+=item 1
+
+Use the last duration explicitly entered
+
+=item 2
+
+Use the explicitly set "default duration"
+
+=back
+
+Thus the following inputs are  equivalent
+
+       c4 c4 c16 c16 c16 s16 c4 c16
+
+       \duration { "last" }
+       c4 c c16 c c c c4 c16
+
+       \duration { 4 }
+       c c c16 c16 c16 c16 c c16
+
+       \duration { 16 }
+       c4 c4 c c c c c4 
+
+If you are typing music which does not lie in the "small" and "large"
+octave, you can prevent having to type C<'> all the time by using the
+C<\octave> command: These two notes have the same pitch.
+
+       c''     \octave{2} c
+
+By default the setting of C<\octave> is 0.
+
+=head2 Lyrics
+
+Lyrics in Mudela resemble Simple mudela a lot, with notes substituted
+by text. 
+
+All syllables are entered separately, separated by whitespace 
+
+       Twin-4 kle4 twin-4 kle4 ... 
+
+Two syllables or words that compose a single
+duration entry are bound together using an underscore 
+
+       He_could4 not4
+
+=head2  Music direction
+
+Mudela reads left to right, but LilyPond can stack voices and
+Voice_elements which are produced in two directions: horizontal
+(voice like) and vertical (chord like)
+
+You can start horizontal music by enclosing a sequence of notes with { and }
+
+       { c c g g a a g2 }      % twinkle twinkle
+
+You can start vertical music (a "chord") by enclosing a sequence of
+notes with < and >. Example:
+
+       <a cis e'>      % a-major chord
+
+You can also put vertical music inside horizontal music:
+
+       { c < c e > <c e g> <c e g c'> }        % 4 increasing chords
+
+And vice versa
+
+       < \multivoice
+         {c c g g a a g2}              
+         {r2  r2  c c g g a a g2} >    % a canon
+
+The duration of a chord equals the union of the durations of each of
+its elements.  The C<\multivoice> is a construct which is explained
+below.
+
+=head2 Rhythms
+
+Rhythms in Mudela are entered identical to Simple mudela.
+The melodic part of the information is ignored.
+
+=head1 STRUCTURE
+
+In concrete, a piece of Mudela has the following structure:
+
+       % declare pieces of music:
+       melody = \music{ <simple mudela> }
+       accompany = \music{ <simple mudela> }
+
+       % instantiate (=create tex, midi output) the score:
+       \score{ 
+               \staff{ melody }
+               \staff{ accompany }
+               \commands{ <score global commands> }
+               \midi{ <midi definitions> }
+               \paper{ <paper and layout definitions }
+       }
+
+=head2 Examples
+
+Examples are included with the LilyPond distribution. For the sake of
+maintenance no long examples are included in this document.
+
+
+=head2 Requests
+
+=head2 Voice
+
+=head2 Voice_element
+
+=head2 Voice groups
+
+=head2 Other
+
+LilyPond first reads F<symbol.ini>, which contains declarations crucial
+to proper operation of LilyPond (symbol tables, note names).
+
+=head1 HISTORY
+
+
+This language has a number of roots. First and foremost, LilyPond's
+predecessor mpp was the inspiration of simple Mudela.  Secondly, the
+hierarchical structure looks a lot like Rayce's (Rayce is a raytracer
+that I've written as a hobby project. ), which in turn owes a lot to
+POVRay.
+
+Now, we know, musictypesetting and raytracing do not necessarily
+require the same input format, and we know that a lot more ways exist
+to convert music to ASCII, but we did give this language some
+thoughts. As always suggestions are appreciated.
+
index fa4c437bca4e99f8dc46282c02d6b07fcb46f111..a42ca956da71b0fed4785a312d9c1788aa8ad326 100644 (file)
@@ -61,7 +61,7 @@ C\bC\bC\bCO\bO\bO\bON\bN\bN\bNF\bF\bF\bFI\bI\bI\bIG\bG\bG\bGU\bU\bU\bUR\bR\bR\bRI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG a\b
 
 
 
-14/Mar/97                LilyPond 0.0.42                        1
+24/Mar/97                LilyPond 0.0.44                        1
 
 
 
@@ -82,7 +82,10 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
        your make is gnu make.  If this is not the case, you can
        adjust your environment variables to your taste:
 
-               CXXFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" configure
+               export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
+               configure
+
+       CPPFLAGS are the preprocessor flags.
 
        the configure script is Cygnus configure, and it will
        accept -\b-\b-\b--\b-\b-\b-h\bh\bh\bhe\be\be\bel\bl\bl\blp\bp\bp\bp. If you are not root, you will probably have
@@ -122,12 +125,9 @@ R\bR\bR\bRU\bU\bU\bUN\bN\bN\bNN\bN\bN\bNI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG
             compile. It's lot slower than most MusiXTeX
             preprocessors)
 
-       +\bo TeX
-
-
 
 
-14/Mar/97                LilyPond 0.0.42                        2
+24/Mar/97                LilyPond 0.0.44                        2
 
 
 
@@ -136,6 +136,8 @@ R\bR\bR\bRU\bU\bU\bUN\bN\bN\bNN\bN\bN\bNI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG
 INSTALL(1)            LilyPond documentation           INSTALL(1)
 
 
+       +\bo TeX
+
        +\bo The MusixTeX fonts. (I use those found in MusixTeX T.59)
 
        Please refer to the man page for more information.
@@ -191,8 +193,6 @@ A\bA\bA\bAU\bU\bU\bUT\bT\bT\bTH\bH\bH\bHO\bO\bO\bOR\bR\bR\bRS\bS\bS\bS
 
 
 
-
-
-14/Mar/97                LilyPond 0.0.42                        3
+24/Mar/97                LilyPond 0.0.44                        3
 
 
diff --git a/NEWS b/NEWS
index cb41bce2b25bbfe4579570562e29270a42778adb..7b7354de36a56aa0bdaeb362fe813f564a5a733b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,14 @@
+******
+pl 44
+       - pure parser, My_lily_parser
+       - ''a iso ``a
+       - Includable_lexer
+       - junk Input_file
+       - Duration in parser, Duration restructuring
+       - grandiose lexer hax. Flex should be fixed, really.
+       Lexer much faster now.
+       - opps. mi2mu broken
+
 ******
 pl 43
        - transposition.
@@ -9,14 +20,14 @@ pl 43
 
 pl 42.hwn3
        - const naming change (T const <-> const T)
-       - Mudela 0.1
+       - Mudela 0.1 (roughly the same as below..)
 
 pl 42.3
        - moving towards Mudela 0.1:
            * (almost) all keywords must be preceded by backslash '\'
            * explicit lexer switches '$' and '@' dropped
            * keyword "music" dropped for horizontal music
-           * keywords "\lyric" "\melodic" "\rhythmic" introduced, e.g.:
+           * keywords "\lyric" " introduced, e.g.:
                melody = \melodic { c c | g g }
            * staff initialisable with music identifier: 
                \staff{ melody }
diff --git a/README b/README
index 9042e4f255c1553dae9372a182751a9c5775ab3c..229d052b1eb58d77d091c436ba36fe9e33524d54 100644 (file)
--- a/README
+++ b/README
@@ -1,3 +1,7 @@
+
+warning: the  --enable-optimise compile seems to broken!!
+
+===================
 IMPORTANT:
 
 if you have downloaded a
diff --git a/TODO b/TODO
index e074ce5aa605b3f3ee1dcb5e6c77c1dac8bdec2a..5e14b414d877084fd0d1574940a2abd2ecd24686 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,6 @@
 before 0.1
+       
+       * fix -O2 -NDEBUG compile
 
        * remove spurious/outdated comments in .ly, debug .ly
 
@@ -8,13 +10,15 @@ before 0.1
 
        * decent TeX page layout
 
+       * per-pstaff item-widths
+       
        * remove unnecessary or confusing constructs from .ly
 
 This is an assorted collection of stuff that will be done, might be
 done, or is an idea that I want to think about
 
 PARSER
-       * Duration
+       * Duration-> Musical_duration, typedef Rational Duration?
 
 MAKE-STUFF
 
@@ -89,9 +93,8 @@ SMALLISH PROJECTS
 
        * parshape
 
-       * a pure parser?
-
-       * read from mmap directly: study yy_scan_buffer
+       * read from mmap directly: bugreport to flex developers->
+       yy_scan_buffer in C++..
 
        * binsearch/hash for identifiers
 
@@ -140,6 +143,10 @@ DOC
 
 FUTURE
 
+       * slur parts as a script
+       
+       * multiple scripst.
+
        * mixed  fontsizes
 
        * put scripts on bars
@@ -174,8 +181,6 @@ IDEAS
 
        * move MIDI io to a ANSI C libmidi library.
 
-       * fold indentifiers and notenames?
-
        * itemcolumns: Use dummy items.
 
        * use an embedded language: scheme, lisp, S-lang, Perl, GUILE, ?
index c4828f0767628534a1996123f5eeb301d72d1d17..ea70f79da1407d4ea5e72f20bd88cdd3f2821932 100644 (file)
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 1
 MINOR_VERSION = 1
-PATCH_LEVEL = 8
+PATCH_LEVEL = 9
 # use to send patches, always empty for released version:
 MY_PATCH_LEVEL = # include separator: "-1" or ".a"
 #
index 4dd53307435b0c69d7ac1052fbfe0da9b374df44..3ee8480d71e7b1f2cf7a562c7172e86de6d3b97e 100644 (file)
@@ -1,3 +1,7 @@
+pl 1.1.9
+       - _C iso _c_l
+       - flower debug.
+       
 pl 1.1.8
        
 
diff --git a/flower/flower-debug.cc b/flower/flower-debug.cc
new file mode 100644 (file)
index 0000000..7617faa
--- /dev/null
@@ -0,0 +1,18 @@
+#include <fstream.h>
+#include "flower-debug.hh"
+#include "dstream.hh"
+
+bool flower_check_debug=false;
+ofstream null_device ( "/dev/null");
+Dstream default_flower_stream(&null_device ,"/dev/null");
+Dstream *flower_dstream  = &default_flower_stream;
+
+/**
+  Set the debugging output. Will not delete/swallow argument.
+ */
+void set_flower_debug(Dstream&ds, bool b)
+{
+    flower_check_debug = b;
+    flower_dstream = &ds;
+}
+
diff --git a/flower/include/flower-debug.hh b/flower/include/flower-debug.hh
new file mode 100644 (file)
index 0000000..1fe12e0
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+  flower-debug.hh -- declare 
+
+  source file of the Flower Library
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef FLOWER_DEBUG_HH
+#define FLOWER_DEBUG_HH
+
+#include "dstream.hh"
+
+extern Dstream *flower_dstream;
+extern bool flower_check_debug;
+#ifdef NPRINT
+#define        fdebug if ( 0 ) *flower_dstream
+#else
+#define fdebug if (flower_check_debug) \
+       flower_dstream->identify_as(__PRETTY_FUNCTION__)
+#endif
+void set_flower_debug(Dstream&ds, bool);
+
+#endif // FLOWER_DEBUG_HH
index bc4d9f3776c58abde644f69a0ebea7ab9cbe342c..0bed543538b9666e537dd5286aa41619249eb24e 100644 (file)
@@ -17,7 +17,7 @@ class File_path : private Array<String>
 {
 public:
     /// locate a file in the search path
-    String find(String nm);
+    String find(String nm)const;
 
     /// construct using prefix. Normally argv[0].
     File_path(String);
@@ -26,7 +26,13 @@ public:
     Array<String>::push;
     void add(String str) { push(str); }
 };
-/// split path into its components
+/**  split a path into its components.
+
+  @params path
+
+  @return
+  String &  drive, String &dirs, String &filebase, String &extension
+ */
 void split_path(String path, String &drive, String &dirs, String &filebase, String &extension);
 
 #endif
index ecd71590748049998b835cba7d1c1446f26c4411..318f422f16af88a06779ba5b1f67b7274327d827 100644 (file)
@@ -54,20 +54,20 @@ friend class String_handle;
     void tighten();
 
     // assignment.
-    void set( Byte const* byte_c_l, int length_i );
+    void set( Byte const* byte_C, int length_i );
 
-    void set( char const* ch_c_l );
+    void set( char const* ch_C );
     
     /// concatenation.
-    void append( Byte const* byte_c_l, int length_i );
+    void append( Byte const* byte_C, int length_i );
 
-    void operator += ( char const* ch_c_l );
+    void operator += ( char const* ch_C );
 
-    char const* ch_c_l() const; 
+    char const* ch_C() const; 
 
     char* ch_l();
 
-    Byte const* byte_c_l() const;
+    Byte const* byte_C() const;
 
     // idem, non const
     Byte* byte_l();
index d2b925d0ce44598b87b96ca6fd7b3b00d8cf5f51..5a3bb390efaee9344db51ea725817217020e4c28 100644 (file)
@@ -105,29 +105,29 @@ String_data::tighten()
 }
 // assignment.
 INLINE void 
-String_data::set( Byte const* byte_c_l, int length_i ) 
+String_data::set( Byte const* byte_C, int length_i ) 
 {
     OKW();
 
-    assert( byte_c_l && byte_c_l != data_byte_p_);
+    assert( byte_C && byte_C != data_byte_p_);
 
     length_i_ = length_i;
     remax( length_i_ );     // copies too
-    memcpy( data_byte_p_, byte_c_l, length_i_ );
+    memcpy( data_byte_p_, byte_C, length_i_ );
     data_byte_p_[ length_i_ ] = 0;
 }
 
 INLINE
 void 
-String_data::set( char const* ch_c_l ) 
+String_data::set( char const* ch_C ) 
 {
-    set( (Byte const*)ch_c_l, strlen( ch_c_l ) );
+    set( (Byte const*)ch_C, strlen( ch_C ) );
 }
 
 
 /// concatenation.
 INLINE void 
-String_data::append( Byte const* byte_c_l, int length_i ) 
+String_data::append( Byte const* byte_C, int length_i ) 
 {
     OK();
     OKW();
@@ -135,22 +135,22 @@ String_data::append( Byte const* byte_c_l, int length_i )
     
     length_i_ += length_i;
     remax( length_i_ );
-    memcpy( data_byte_p_ + old_i, byte_c_l, length_i );        
+    memcpy( data_byte_p_ + old_i, byte_C, length_i );  
     data_byte_p_[ length_i_ ] = 0;
 }
 
 INLINE
 void 
-String_data::operator += ( char const* ch_c_l ) 
+String_data::operator += ( char const* ch_C ) 
 {
-    append( (Byte const*)ch_c_l, strlen( ch_c_l ) );
+    append( (Byte const*)ch_C, strlen( ch_C ) );
 }
 
 
 
 INLINE
 char const*
-String_data::ch_c_l() const
+String_data::ch_C() const
 {
     return (char const*)data_byte_p_; 
 }
@@ -161,7 +161,7 @@ String_data::ch_l()
 }
 
 INLINE Byte const*
-String_data::byte_c_l() const 
+String_data::byte_C() const 
 { 
     return data_byte_p_; 
 }
index 5b7a12f648f3485ef6dce4912cd8667ca0af4a76..3f42e860e66ee5e20f8b82fb1c14f3480850c857 100644 (file)
@@ -38,8 +38,8 @@ public:
     ~String_handle();
     String_handle(String_handle const & src);
 
-    Byte const* byte_c_l() const;
-    char const* ch_c_l() const;
+    Byte const* byte_C() const;
+    char const* ch_C() const;
     Byte* byte_l();
     char* ch_l();    
     bool is_binary_bo()const;
@@ -48,11 +48,11 @@ public:
     Byte operator[](int j) const;
 
     /** Access elements. WARNING: NOT SAFE
-       don't use this for loops. Use byte_c_l()
+       don't use this for loops. Use byte_C()
        */
     Byte &operator[](int j);
-    void append( Byte const* byte_c_l, int length_i );
-    void set( Byte const* byte_c_l, int length_i );
+    void append( Byte const* byte_C, int length_i );
+    void set( Byte const* byte_C, int length_i );
     void operator = (char const *p);
     void trunc(int j);
     int length_i() const;
index 1f1d44ab13af30ab7cec1ff27f4e9fbb23f2d886..63b2ab379d20d4caf5b84820384363d7e7b7a7fe 100644 (file)
@@ -72,15 +72,15 @@ String_handle::ch_l()
 }
 
 INLINE Byte 
-const* String_handle::byte_c_l() const 
+const* String_handle::byte_C() const 
 {
-    return data->byte_c_l();
+    return data->byte_C();
 }
 
 INLINE char const* 
-String_handle::ch_c_l() const 
+String_handle::ch_C() const 
 {
-    return (char const*)data->byte_c_l();
+    return (char const*)data->byte_C();
 }
 
 INLINE void 
@@ -107,7 +107,7 @@ String_handle::operator[](int j) const
 }
 
 // !NOT SAFE!
-// don't use this for loops. Use byte_c_l()
+// don't use this for loops. Use byte_C()
 INLINE Byte &
 String_handle::operator[](int j) 
 {
@@ -116,17 +116,17 @@ String_handle::operator[](int j)
 }
 
 INLINE void 
-String_handle::append( Byte const* byte_c_l, int length_i ) 
+String_handle::append( Byte const* byte_C, int length_i ) 
 {
     copy();
-    data->append( byte_c_l, length_i );
+    data->append( byte_C, length_i );
 }
                           
 INLINE void 
-String_handle::set( Byte const* byte_c_l, int length_i ) 
+String_handle::set( Byte const* byte_C, int length_i ) 
 {
     copy();
-    data->set( byte_c_l, length_i );
+    data->set( byte_C, length_i );
 }
                           
 INLINE void 
index 8270e01e08c59817396701df130afcce6d870992..0e0b9fb4dd05d08baf0f5bb910e273867f8effad 100644 (file)
@@ -66,7 +66,7 @@ public:
 
     /// String s = "abc";
     String( char const* source ); 
-    String( Byte const* byte_c_l, int length_i ); 
+    String( Byte const* byte_C, int length_i ); 
     
     /// "ccccc"
     String( char c, int n = 1 );
@@ -79,13 +79,13 @@ public:
     ///  return a "new"-ed copy of contents
     Byte* copy_byte_p() const; //  return a "new"-ed copy of contents
 
-    char const* ch_c_l() const;
-    Byte const* byte_c_l() const;
+    char const* ch_C() const;
+    Byte const* byte_C() const;
     char* ch_l();
     Byte* byte_l();
 
-    /// deprecated; use ch_c_l()
-    operator char const* () const { return ch_c_l(); }
+    /// deprecated; use ch_C()
+    operator char const* () const { return ch_C(); }
     
     String &operator =( String const & source );
 
index 323d03db887d6d5bba4cde317f6cbbac4c6683f6..fdeab97f1391b84997d7528d9e0334588a5b6aa7 100644 (file)
@@ -7,7 +7,6 @@
 
 class Dstream;
 class String;
-void set_matrix_debug(Dstream&ds);
 
 /**  a row of numbers. 
     a vector. Storage is handled in Array, Vector only does the mathematics.
diff --git a/flower/matdebug.cc b/flower/matdebug.cc
deleted file mode 100644 (file)
index bcc2843..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "dstream.hh"
-#include "matrix.hh"
-
-static Dstream *dout = 0;
-
-/**
-  Set the debugging output. Will not delete/swallow argument.
- */
-void set_matrix_debug(Dstream&ds)
-{
-    dout = &ds;
-}
-
-Matrix::operator String() const
-{
-    String s;
-#ifndef NPRINT
-    s="matrix {\n";
-    for (int i=0; i< rows(); i++){
-       for (int j = 0; j < cols(); j++) {
-           s+= String(dat->elem(i,j), "%6f ");
-       }
-       s+="\n";
-    }
-    s+="}\n";
-#endif
-    return s;
-}
-
-
-void
-Matrix::print() const
-{
-#ifndef NPRINT
-    if (!dout)
-       return;
-    *dout << *this;
-#endif
-}
-
-Vector::operator String() const
-{
-    String s;
-#ifndef NPRINT
-    s="vector [";
-    for (int i=0; i < dim(); i++) {
-       s += String(dat[i], "%6f") + String(' ');
-    }
-    s+="]";
-#endif
-    return s;
-}
-
-
-void
-Vector::print() const
-{
-#ifndef NDEBUG
-    if (!dout)
-       return;
-    *dout << *this<<'\n';
-#endif
-}
diff --git a/flower/matrix-debug.cc b/flower/matrix-debug.cc
new file mode 100644 (file)
index 0000000..47a6689
--- /dev/null
@@ -0,0 +1,50 @@
+#include "flower-debug.hh"
+#include "matrix.hh"
+
+
+Matrix::operator String() const
+{
+    String s;
+#ifndef NPRINT
+    s="matrix {\n";
+    for (int i=0; i< rows(); i++){
+       for (int j = 0; j < cols(); j++) {
+           s+= String(dat->elem(i,j), "%6f ");
+       }
+       s+="\n";
+    }
+    s+="}\n";
+#endif
+    return s;
+}
+
+
+void
+Matrix::print() const
+{
+#ifndef NPRINT
+    fdebug << *this;
+#endif
+}
+
+Vector::operator String() const
+{
+    String s;
+#ifndef NPRINT
+    s="vector [";
+    for (int i=0; i < dim(); i++) {
+       s += String(dat[i], "%6f") + String(' ');
+    }
+    s+="]";
+#endif
+    return s;
+}
+
+
+void
+Vector::print() const
+{
+#ifndef NDEBUG
+    fdebug << *this<<'\n';
+#endif
+}
index c79962f00fc384caad3b3909eb71087fbe66c3d7..a0bbaca44f472dd14736ad7a5853896a40dbd3fa 100644 (file)
@@ -3,6 +3,7 @@
 */
 #include <stdio.h>
 #include "path.hh"
+#include "flower-debug.hh"
 
 #ifndef PATHSEP
 #define PATHSEP '/'
@@ -60,18 +61,23 @@ File_path::File_path(String pref)
   in any other added path, in this order.
   */
 String
-File_path::find(String nm)
+File_path::find(String nm)const
+
 {
-     for (int i=0; i < size(); i++) {
+    fdebug << "looking for " << nm ;
+    for (int i=0; i < size(); i++) {
+
         String path  = (*this)[i];
         path+= "/"+nm;
 
-
+        fdebug << path << "? ";
         FILE *f = fopen(path, "r"); // ugh!
         if (f) {
+            fdebug << "found\n";
             fclose(f);
             return path;
         }
      }
-     return "";
+    fdebug << "\n";
+    return "";
 }
index 5edd9e997f3ba2128cc2760282419c198074e5c6..da86835063c1c8e67f161fbbf9a7eed67486ace0 100644 (file)
@@ -26,7 +26,7 @@ Scalar::isnum()
     int conv = false;
     if (len()) {
        long l =0;
-       conv = sscanf(strh_.ch_c_l(), "%ld", &l);
+       conv = sscanf(strh_.ch_C(), "%ld", &l);
     }
     return len() && conv;
 }
index 31e7a332b84850fb64a3a10465b3242e6be44079..565c332228be4d8c016223b6b9023b1ac43c242a 100644 (file)
@@ -27,10 +27,10 @@ String
 String_convert::bin2hex_str( String bin_str )
 {
     String str;
-    Byte const* byte_c_l = bin_str.byte_c_l();
+    Byte const* byte_C = bin_str.byte_C();
     for ( int i = 0; i < bin_str.length_i(); i++ ) {
-       str += (char)nibble2hex_byte( *byte_c_l >> 4 );
-       str += (char)nibble2hex_byte( *byte_c_l++ );
+       str += (char)nibble2hex_byte( *byte_C >> 4 );
+       str += (char)nibble2hex_byte( *byte_C++ );
     }
     return str;
 }
@@ -56,7 +56,7 @@ String_convert::dec2_i( String dec_str )
        return 0;
 
     long l = 0;
-    int conv = sscanf( dec_str.ch_c_l(), "%ld", &l );
+    int conv = sscanf( dec_str.ch_C(), "%ld", &l );
     assert( conv );
 
     return (int)l;
@@ -78,7 +78,7 @@ String_convert::dec2_f( String dec_str )
     if ( !dec_str.length_i() )
        return 0;
     double d = 0;
-    int conv = sscanf( dec_str.ch_c_l(), "%lf", &d );
+    int conv = sscanf( dec_str.ch_C(), "%lf", &d );
     assert( conv );
     return d;
 }
@@ -90,11 +90,11 @@ String_convert::hex2bin_i( String hex_str, String& bin_str_r )
         hex_str = "0" + hex_str;
 
     bin_str_r = "";
-    Byte const* byte_c_l= hex_str.byte_c_l();
+    Byte const* byte_C= hex_str.byte_C();
     int i = 0;
     while ( i < hex_str.length_i() ) {   
-        int high_i = hex2nibble_i( *byte_c_l++ );
-        int low_i = hex2nibble_i( *byte_c_l++ );
+        int high_i = hex2nibble_i( *byte_C++ );
+        int low_i = hex2nibble_i( *byte_C++ );
         if ( high_i < 0 || low_i < 0 )
             return 1; // illegal char
         bin_str_r += String( (char)( high_i << 4 | low_i ), 1 );
index 3eaa5c1b099b5f10ef2447a8c6dabbcd1353105e..d66951c93158e20c9238727308c88f6d7bb504ae 100644 (file)
@@ -25,7 +25,7 @@ void* mymemmove( void* dest, void const* src, size_t n );
 Byte*
 String::copy_byte_p() const
 {
-    Byte const* src = strh_.byte_c_l();
+    Byte const* src = strh_.byte_C();
     Byte* dest = new Byte[strh_.length_i() + 1];
     memcpy( dest, src, strh_.length_i() + 1 );
     return dest;    
@@ -34,7 +34,7 @@ void
 String::print_on(ostream& os) const
 {
     if (!strh_.is_binary_bo())
-        os << ch_c_l();
+        os << ch_C();
     else
        for ( int i = 0; i < length_i(); i++ )
            os << (Byte)(*this)[ i ];
@@ -94,7 +94,7 @@ String::String( Byte const* byte_l, int length_i )
 void
 String::append(String s)
 {
-    strh_.append( s.byte_c_l(), s.length_i() );
+    strh_.append( s.byte_C(), s.length_i() );
 }
 void
 String::operator +=(String s)
@@ -116,15 +116,15 @@ String::length_i() const
 }
 
 Byte const*
-String::byte_c_l() const
+String::byte_C() const
 {
-    return strh_.byte_c_l();
+    return strh_.byte_C();
 }
 
 char const*
-String::ch_c_l() const
+String::ch_C() const
 {
-    return strh_.ch_c_l();
+    return strh_.ch_C();
 }
 
 Byte*
@@ -145,8 +145,8 @@ String::ch_l()
 int
 String::compare_i(String const& s1, String const& s2 ) 
 {
-    Byte const* p1 = s1.byte_c_l();
-    Byte const* p2 = s2.byte_c_l();
+    Byte const* p1 = s1.byte_C();
+    Byte const* p2 = s2.byte_C();
     if ( p1 == p2 )
        return 0;
 
@@ -164,7 +164,7 @@ String::index_last_i( char const c ) const
     if ( !length_i() ) 
        return -1;
 
-    char const* me = strh_.ch_c_l();
+    char const* me = strh_.ch_C();
     char const* p = memrchr(me, length_i(), c );
     if ( p )
        return p - me;
@@ -202,7 +202,7 @@ String::index_last_i( char const* string ) const // UGK!
 int
 String::index_i(char c ) const
 {
-    char const* me = strh_.ch_c_l();
+    char const* me = strh_.ch_C();
     char const* p = (char const *) memchr( me,c,  length_i());
     if ( p )
        return p - me;
@@ -218,9 +218,9 @@ String::index_i(char c ) const
 int
 String::index_i( String searchfor ) const
 {
-    char const* me = strh_.ch_c_l();
+    char const* me = strh_.ch_C();
     char const* p = (char const *) memmem(
-       me, length_i(), searchfor.ch_c_l(), searchfor.length_i());
+       me, length_i(), searchfor.ch_C(), searchfor.length_i());
     
     if ( p )
        return p - me;
@@ -240,7 +240,7 @@ String::index_any_i( String set ) const
     if ( !n )
        return -1;
 
-    void const * me_l = (void const *) strh_.ch_c_l();
+    void const * me_l = (void const *) strh_.ch_C();
     for (int i=0; i  < set.length_i(); i++) {
        char * found=(char*) memchr(me_l, set[i], n  );
        if (found) {
@@ -274,7 +274,7 @@ String::right_str( int n ) const
     if ( n < 1)
         return "";
     
-    return String( strh_.byte_c_l() + length_i() - n, n ); 
+    return String( strh_.byte_C() + length_i() - n, n ); 
 }
 
 
@@ -310,7 +310,7 @@ String::mid_str( int index_i, int n ) const
     if ( ( n > length_i() ) ||  ( index_i + n > length_i() ) )
        n = length_i() - index_i;
 
-    return String( byte_c_l() + index_i, n );
+    return String( byte_C() + index_i, n );
 }
 \f
 String
index a44eaca96ba38431d92821ffb42bda2563001a8e..8aed19fa95a5d640eafa4c866aa724435079fe2d 100644 (file)
@@ -2,41 +2,41 @@
 % common dutch names for notes. "es" means flat, "is" means sharp
 %
 
-ceses  = \melodic { 0 0 -2 }
-ces    = \melodic { 0 0 -1 }
-c      = \melodic { 0 0 0 }
-cis    = \melodic { 0 0 1 }
-cisis  = \melodic { 0 0 2 }
-deses  = \melodic { 0 1 -2 }
-des    = \melodic { 0 1 -1 }
-d      = \melodic { 0 1 0 }
-dis    = \melodic { 0 1 1 }
-disis  = \melodic { 0 1 2 }
-eses   = \melodic { 0 2 -2 }
-es     = \melodic { 0 2 -1 }
-e      = \melodic { 0 2 0 }
-eis    = \melodic { 0 2 1 }
-eisis  = \melodic { 0 2 2 }
-feses  = \melodic { 0 3 -2 }
-fes    = \melodic { 0 3 -1 }
-f      = \melodic { 0 3 0 }
-fis    = \melodic { 0 3 1 }
-fisis  = \melodic { 0 3 2 }
-geses  = \melodic { 0 4 -2 }
-ges    = \melodic { 0 4 -1 }
-g      = \melodic { 0 4 0 }
-gis    = \melodic { 0 4 1 }
-gisis  = \melodic { 0 4 2 }
-ases   = \melodic { 0 5 -2 }
-as     = \melodic { 0 5 -1 }
-a      = \melodic { 0 5 0 }
-ais    = \melodic { 0 5 1 }
-aisis  = \melodic { 0 5 2 }
-beses  = \melodic { 0 6 -2 }
-bes    = \melodic { 0 6 -1 }
-b      = \melodic { 0 6 0 }
-bis    = \melodic { 0 6 1 }
-bisis  = \melodic { 0 6 2 }
+ceses  = \melodic { -1 0 -2 }
+ces    = \melodic { -1 0 -1 }
+c      = \melodic { -1 0 0 }
+cis    = \melodic { -1 0 1 }
+cisis  = \melodic { -1 0 2 }
+deses  = \melodic { -1 1 -2 }
+des    = \melodic { -1 1 -1 }
+d      = \melodic { -1 1 0 }
+dis    = \melodic { -1 1 1 }
+disis  = \melodic { -1 1 2 }
+eses   = \melodic { -1 2 -2 }
+es     = \melodic { -1 2 -1 }
+e      = \melodic { -1 2 0 }
+eis    = \melodic { -1 2 1 }
+eisis  = \melodic { -1 2 2 }
+feses  = \melodic { -1 3 -2 }
+fes    = \melodic { -1 3 -1 }
+f      = \melodic { -1 3 0 }
+fis    = \melodic { -1 3 1 }
+fisis  = \melodic { -1 3 2 }
+geses  = \melodic { -1 4 -2 }
+ges    = \melodic { -1 4 -1 }
+g      = \melodic { -1 4 0 }
+gis    = \melodic { -1 4 1 }
+gisis  = \melodic { -1 4 2 }
+ases   = \melodic { -1 5 -2 }
+as     = \melodic { -1 5 -1 }
+a      = \melodic { -1 5 0 }
+ais    = \melodic { -1 5 1 }
+aisis  = \melodic { -1 5 2 }
+beses  = \melodic { -1 6 -2 }
+bes    = \melodic { -1 6 -1 }
+b      = \melodic { -1 6 0 }
+bis    = \melodic { -1 6 1 }
+bisis  = \melodic { -1 6 2 }
 
 
 %
@@ -44,40 +44,40 @@ bisis       = \melodic { 0 6 2 }
 %
 
 
-Ceses  = \melodic { -1 0 -2 }
-Ces    = \melodic { -1 0 -1 }
-C      = \melodic { -1 0 0 }
-Cis    = \melodic { -1 0 1 }
-Cisis  = \melodic { -1 0 2 }
-Deses  = \melodic { -1 1 -2 }
-Des    = \melodic { -1 1 -1 }
-D      = \melodic { -1 1 0 }
-Dis    = \melodic { -1 1 1 }
-Disis  = \melodic { -1 1 2 }
-Eses   = \melodic { -1 2 -2 }
-Es     = \melodic { -1 2 -1 }
-E      = \melodic { -1 2 0 }
-Eis    = \melodic { -1 2 1 }
-Eisis  = \melodic { -1 2 2 }
-Feses  = \melodic { -1 3 -2 }
-Fes    = \melodic { -1 3 -1 }
-F      = \melodic { -1 3 0 }
-Fis    = \melodic { -1 3 1 }
-Fisis  = \melodic { -1 3 2 }
-Geses  = \melodic { -1 4 -2 }
-Ges    = \melodic { -1 4 -1 }
-G      = \melodic { -1 4 0 }
-Gis    = \melodic { -1 4 1 }
-Gisis  = \melodic { -1 4 2 }
-Ases   = \melodic { -1 5 -2 }
-As     = \melodic { -1 5 -1 }
-A      = \melodic { -1 5 0 }
-Ais    = \melodic { -1 5 1 }
-Aisis  = \melodic { -1 5 2 }
-Beses  = \melodic { -1 6 -2 }
-Bes    = \melodic { -1 6 -1 }
-B      = \melodic { -1 6 0 }
-Bis    = \melodic { -1 6 1 }
-Bisis  = \melodic { -1 6 2 }
+Ceses  = \melodic { -2 0 -2 }
+Ces    = \melodic { -2 0 -1 }
+C      = \melodic { -2 0 0 }
+Cis    = \melodic { -2 0 1 }
+Cisis  = \melodic { -2 0 2 }
+Deses  = \melodic { -2 1 -2 }
+Des    = \melodic { -2 1 -1 }
+D      = \melodic { -2 1 0 }
+Dis    = \melodic { -2 1 1 }
+Disis  = \melodic { -2 1 2 }
+Eses   = \melodic { -2 2 -2 }
+Es     = \melodic { -2 2 -1 }
+E      = \melodic { -2 2 0 }
+Eis    = \melodic { -2 2 1 }
+Eisis  = \melodic { -2 2 2 }
+Feses  = \melodic { -2 3 -2 }
+Fes    = \melodic { -2 3 -1 }
+F      = \melodic { -2 3 0 }
+Fis    = \melodic { -2 3 1 }
+Fisis  = \melodic { -2 3 2 }
+Geses  = \melodic { -2 4 -2 }
+Ges    = \melodic { -2 4 -1 }
+G      = \melodic { -2 4 0 }
+Gis    = \melodic { -2 4 1 }
+Gisis  = \melodic { -2 4 2 }
+Ases   = \melodic { -2 5 -2 }
+As     = \melodic { -2 5 -1 }
+A      = \melodic { -2 5 0 }
+Ais    = \melodic { -2 5 1 }
+Aisis  = \melodic { -2 5 2 }
+Beses  = \melodic { -2 6 -2 }
+Bes    = \melodic { -2 6 -1 }
+B      = \melodic { -2 6 0 }
+Bis    = \melodic { -2 6 1 }
+Bisis  = \melodic { -2 6 2 }
 
 
index ebef5ed7a105602076264ed92510d36a4b0aaa9a..8e8b5e8c73c78e682f2327d82488f1f0aa896406 100644 (file)
@@ -24,25 +24,25 @@ cad = \music {
                \bar \empty 
                r8 [c d] [e f g gis]
        \duration{4}
-       a-> `f()`e g
-       f-> `d()`cis e
+       a-> 'f()'e g
+       f-> 'd()'cis e
        \duration{8}    
        d4^\fermata
                \bar \empty 
 
-       r8 `a [`b cis]
+       r8 'a ['b cis]
        \duration{16}   [d cis d e]
        f4()[f e d c]
-       `b4
+       'b4
        \octave{} [d'8 c'8 a8]2/3
        g2
                \bar \empty 
        [g c e g] [c' e g c']\octave{'} 
-       [e `g c e] g4^\fermata %()% BUG!
+       [e 'g c e] g4^\fermata %()% BUG!
                \bar \empty 
        [g8.(_"a \tempo" e g8. )e]
        a4. g8 [f8 e8 d8 c8]
-       `g2 d2^"tr"
+       'g2 d2^"tr"
        c4
        }
 
index ad468d0573b47a943db5d1f7bcb3953dcf9e9001..eed877bb8c3bee518425c53127ecea395676ee23 100644 (file)
@@ -34,7 +34,7 @@ alto = \music {
                }
 %30:2
                { 
-                       \octave{ ` }
+                       \octave{ -1 }
                        \textstyle "italic"
                        % this should be a \dynamic, rather than text
                        [ c c_"cresc. \ \ - \ \ \ \ - \ \ \ \ - \ \ \ \
@@ -61,7 +61,7 @@ alto = \music {
                < \multivoice
                { \stem{ 1 }[ c16^"div." c16 c16 c16 ] c4 c2 }
                  { 
-                       \octave{ ` }
+                       \octave{ -1 }
                        \textstyle "italic"
                        \stem{ -1 } [ as16_"\ff" as16 as16 as16 ] as4_"simile" as2
                        \textstyle "roman"
index 570300af987159d0a14ae219e3028bb6b8b3da5f..9a432233b0a7885a8c1283e9c4f46f7b1bf3da40 100644 (file)
@@ -1,7 +1,7 @@
 include "this-is-hopefully-a-nonexisting-file"
 
 mwa = \music {
-       
+       \meter{3/4}
        [ a8 a8 a8 a8 a8 ]      % 
        [ a8 ]  % 
 %       segfault
@@ -13,33 +13,27 @@ mwa = \music {
        a b c
        |||             % 
        abc             % ok; print error, no \output
-       \bla            % no warning-> this STRING, reduced to lyric_elt.
+       \bla            %  STRING, reduced to lyric_elt.
        a [ b           % warning, still \output
-        { a( b }       % warning, still \output
+        < a( b >       % warning, still \output
        a b ,c
        a b c-*
        a b c&
-       { a-. b-. }
+       < a-. b-. >
        
 }
 
-bla = \music {
-       @ 
+bla = \lyrics {
        These Gates will open just like windows. % ok; warning
-       @
 }
 
 
 include "this-is-hopefully-a-nonexisting-file"
-
-score {
+\score {
        \staff { 
                lyric \music { bla }
        }
        \staff { 
                \melodic \music { mwa }
        }
-       \co\mmands {
-               \meter {3/4}
-       }
 }
index 630b94a4bad51cbd3a7eaf5d7dd52e6cea66cd16..7ebb6970f4b9505865145b264d1696ef7da6c547 100644 (file)
@@ -54,7 +54,7 @@ track2 = \music {
        % instrument:
        c8 d8 e8 f8. { \music{ g16 } } { \music{ f16 } } { 
        \music{ e8 } } a8 d8 { \music{ g8. } } a16 g16 f16 
-       e16 f16 e16 d16 c16 d16 c16 `b16 `a8 fis8 { \music{ 
+       e16 f16 e16 d16 c16 d16 c16 'b16 'a8 fis8 { \music{ 
        g4. } } f16 e16 f8 d8 g8 f8 e8 d8 g4 f16 e16 f4 f16 
        e8 d4 c8 f8 g16 f16 e16 f8 d8 g4.. g8 a8 b8 { 
        \music{ c'8. } } { \music{ d'16 } } { \music{ c'16 }
@@ -83,52 +83,52 @@ track2 = \music {
 track3 = \music { 
        % \midi copyright:
        % instrument:
-       `g8 `a8 `b8 c8. { \music{ d16 } } { \music{ c16 } } 
-       { \music{ `b8 } } e8 `a8 { \music{ d8. } } e16 d16 
-       c16 `b8 c4 `ais8 `a8 d8 `g8 c8 `a16 `b16 c16 d4 `g4 
-       `g8 `a8 `b8 c8. { \music{ d16 } } { \music{ c16 } } 
-       { } `b8 e8 `a8 d8. e16 d16 c16 `b8 e4. d4 `b16 c16 
-       `a16 e16 d16 c16 `b16 c16 `a16 `b16 c16 d16 c16 
-       `b16 `a16 `g4 `e8 `fis8 `gis8 `a8. { \music{ `b16 } 
-       } { \music{ `a16 } } { \music{ `g8 } } c8 `fis8 
-       `b8. c16 `b16 `a16 `gis8 { \music{ `a4 } } `gis8 
-       `a4 `g8 `a8 `b8 c8. { \music{ d16 } } { \music{ c16 
-       } } { \music{ `b8 } } e8 `a8 d4 `g8 d4 c8 `a8 e4 d8 
-       `a8 `b8 cis8 d8. { \music{ e16 } } { \music{ d16 } 
-       } { \music{ c8 } } f8 `b8 e8. f16 e16 d16 cis8 `a8 
-       `b8 cis8 d8. { \music{ e16 } } { \music{ d16 } } { 
-       \music{ c8 } } fis8 `b8 e8. fis16 e16 d16 c4.. d16 
-       c16 `b16 `a16 `g16 `a16 `fis16 `g8 `b8 c8 { \music{ 
+       'g8 'a8 'b8 c8. { \music{ d16 } } { \music{ c16 } } 
+       { \music{ 'b8 } } e8 'a8 { \music{ d8. } } e16 d16 
+       c16 'b8 c4 'ais8 'a8 d8 'g8 c8 'a16 'b16 c16 d4 'g4 
+       'g8 'a8 'b8 c8. { \music{ d16 } } { \music{ c16 } } 
+       { } 'b8 e8 'a8 d8. e16 d16 c16 'b8 e4. d4 'b16 c16 
+       'a16 e16 d16 c16 'b16 c16 'a16 'b16 c16 d16 c16 
+       'b16 'a16 'g4 'e8 'fis8 'gis8 'a8. { \music{ 'b16 } 
+       } { \music{ 'a16 } } { \music{ 'g8 } } c8 'fis8 
+       'b8. c16 'b16 'a16 'gis8 { \music{ 'a4 } } 'gis8 
+       'a4 'g8 'a8 'b8 c8. { \music{ d16 } } { \music{ c16 
+       } } { \music{ 'b8 } } e8 'a8 d4 'g8 d4 c8 'a8 e4 d8 
+       'a8 'b8 cis8 d8. { \music{ e16 } } { \music{ d16 } 
+       } { \music{ c8 } } f8 'b8 e8. f16 e16 d16 cis8 'a8 
+       'b8 cis8 d8. { \music{ e16 } } { \music{ d16 } } { 
+       \music{ c8 } } fis8 'b8 e8. fis16 e16 d16 c4.. d16 
+       c16 'b16 'a16 'g16 'a16 'fis16 'g8 'b8 c8 { \music{ 
        d8 } } e8. { \music{ f16 } } { \music{ e16 } } { 
        \music{ d8 } } g8 c8 f8. g16 f16 e16 d4 e8 d4 { 
-       \music{ `g8 } } `g4. `c8 `d8 `e8 `f8. { \music{ 
-       `g16 } } { \music{ `f16 } } { \music{ `e8 } } `a8 
-       `d8 { \music{ `g8. } } `a16 `g16 `f16 `e16 `d16 
-       `e16 `f16 `g16 `a16 `ais16 `g16 `a16 `e16 `f16 `g16 
-       `a16 `b16 c16 { \music{ `a16 } \music{ d2 } } c1 
+       \music{ 'g8 } } 'g4. 'c8 'd8 'e8 'f8. { \music{ 
+       'g16 } } { \music{ 'f16 } } { \music{ 'e8 } } 'a8 
+       'd8 { \music{ 'g8. } } 'a16 'g16 'f16 'e16 'd16 
+       'e16 'f16 'g16 'a16 'ais16 'g16 'a16 'e16 'f16 'g16 
+       'a16 'b16 c16 { \music{ 'a16 } \music{ d2 } } c1 
 } % track3
 
 track4 = \music { 
        % \midi copyright:
        % instrument:
-       `c8 `d8 `e8 `f8. { \music{ `g16 } } { \music{ `f16 }
-        } { \music{ `e8 } } `a8 `d8 { \music{ `g8. } } 
-       `a16 `g16 `f16 `e16 `f16 `e16 `d16 `c16 `d16 `c16 
-       ``b16 ``a8 `d8 `a8 `fis8 `g16 `a16 `ais16 `g16 
-       `cis8 `d8 `a4 `e4 `a16 `b16 c16 d16 c16 `b16 `a16 
-       `g16 c8 ``g8 ``a8 ``b8 `c8. { \music{ `d16 } } { 
-       \music{ `c16 } } { \music{ ``b8 } } `e8 ``a8 `d8. 
-       `e16 `d16 `c16 { \music{ ``b8 } } `e4 `d8 `c8 `f4 
-       `e4 `d4 `e8 `f8 `e16 `d16 `e4 ``a4 ``g8 ``a8 ``b8 
-       `c8. { \music{ `d16 } } { \music{ `c16 } } { \music{
-        ``b8 } } `e8 ``a8 `d8. `e16 `d16 `c16 ``b8 ai``s8 
-       ``a8 ``g8 ``a8 `fis8 `g8 `e8 `d4 `e8 `f8 `g8. { 
-       \music{ `a16 } } { \music{ `g16 } } { \music{ `f8 } 
-       } `ais8 `e8 `a8. `b16 { \music{ `a16 } } `g16 `f16 
-       `e16 `f16 `d16 `g8 `a8 `d4.. `e16 `d16 `c16 ``b16 
-       ``a16 ``g16 fi``s16 ``e8 `e8 `fis8 `g4 `a16 `g16 
-       `fis8 `d8 `g1 `a4 `b8 c8 `f16 `a16 `g16 `f16 `e16 
-       `d16 `c16 ``b16 `c16 `d16 `e16 `f16 `g8 ``g8 `b2 
+       'c8 'd8 'e8 'f8. { \music{ 'g16 } } { \music{ 'f16 }
+        } { \music{ 'e8 } } 'a8 'd8 { \music{ 'g8. } } 
+       'a16 'g16 'f16 'e16 'f16 'e16 'd16 'c16 'd16 'c16 
+       ''b16 ''a8 'd8 'a8 'fis8 'g16 'a16 'ais16 'g16 
+       'cis8 'd8 'a4 'e4 'a16 'b16 c16 d16 c16 'b16 'a16 
+       'g16 c8 ''g8 ''a8 ''b8 'c8. { \music{ 'd16 } } { 
+       \music{ 'c16 } } { \music{ ''b8 } } 'e8 ''a8 'd8. 
+       'e16 'd16 'c16 { \music{ ''b8 } } 'e4 'd8 'c8 'f4 
+       'e4 'd4 'e8 'f8 'e16 'd16 'e4 ''a4 ''g8 ''a8 ''b8 
+       'c8. { \music{ 'd16 } } { \music{ 'c16 } } { \music{
+        ''b8 } } 'e8 ''a8 'd8. 'e16 'd16 'c16 ''b8 ai''s8 
+       ''a8 ''g8 ''a8 'fis8 'g8 'e8 'd4 'e8 'f8 'g8. { 
+       \music{ 'a16 } } { \music{ 'g16 } } { \music{ 'f8 } 
+       } 'ais8 'e8 'a8. 'b16 { \music{ 'a16 } } 'g16 'f16 
+       'e16 'f16 'd16 'g8 'a8 'd4.. 'e16 'd16 'c16 ''b16 
+       ''a16 ''g16 fi''s16 ''e8 'e8 'fis8 'g4 'a16 'g16 
+       'fis8 'd8 'g1 'a4 'b8 c8 'f16 'a16 'g16 'f16 'e16 
+       'd16 'c16 ''b16 'c16 'd16 'e16 'f16 'g8 ''g8 'b2 
 } % track4
 
 score {
index d26a7431bf44b39514b7b6ad8eb1d86e9cfcdff1..36cfbb124688b5aab0230e5d39053f5cfa6d6ad4 100644 (file)
@@ -38,17 +38,17 @@ begeleiding =
                                % you to precede \keyword by a backslash: \
        \music { 
        \clef "bass"
-       \octave { ` }           % default \octave: 1 below the first \octave.
+       \octave { ' }           % default \octave: 1 below the first \octave.
 
        %%% theme
-       `c                      % ` means one \octave lower.
+       'c                      % ' means one \octave lower.
                                % Similarly: ' means one higher.
-          c    e c     f c     e c     d `b    c `a    `f `g   `c2
-       \octave { ` }
-       e `g    d `g    c `g    `b `g   e `g    d `g    c `g    `b `g
+          c    e c     f c     e c     d 'b    c 'a    'f 'g   'c2
+       \octave { ' }
+       e 'g    d 'g    c 'g    'b 'g   e 'g    d 'g    c 'g    'b 'g
        %%%% var 1
        r8 e8() c       r8 e8() c       r8 f8()c        r8 e8()c
-       r8 d8()`b       r8 c8()`a       r8 `a8()`f      r8 `e8()`c
+       r8 d8()'b       r8 c8()'a       r8 'a8()'f      r8 'e8()'c
 }
 
 
index ce3425fbb32260fc9591a896910dd2b8caf6b824..64fa7166ecd805ab4278f7e487848658346444e2 100644 (file)
@@ -44,7 +44,7 @@ melody=
 
        \duration {4}
        <
-                { c () `bes [c8 c8] }
+                { c () 'bes [c8 c8] }
                 { fis' ()gisis' fis8 fis8 }
                 { d () d dis8 dis8 }
                 {  a  () bes eis8 eis8 }
@@ -55,11 +55,11 @@ melody=
 
        [d8 e8 f'8 g8]  d8 e8 f8 g8
        |fis''2
-       | a8 b8 c'8 d'8 |c''8 ```c8 c4 |c4  c4 |c4
-       \duration{ 16 } `b `a `g `f \duration{ 4}
+       | a8 b8 c'8 d'8 |c''8 '''c8 c4 |c4  c4 |c4
+       \duration{ 16 } 'b 'a 'g 'f \duration{ 4}
        \clef\bass      
 
-       |c `b `a `g `f `e `d `c ``b ``a ``g ``f ``e ``d ``c
+       |c 'b 'a 'g 'f 'e 'd 'c ''b ''a ''g ''f ''e ''d ''c
        }
 
 }
index 4382ed3bf2c1e93f741fcf2f44f30f19b97f04ed..08c6ce475568b2f06a269787e441a54b90f55260 100644 (file)
@@ -11,7 +11,7 @@ melodie = \music {
 begeleiding = \music {
        
        \clef \bass
-       \octave{`}
+       \octave{-1}
        c c' | e' c' | f' c' | e' c' 
        d' b | c' a | f g | c2 | 
        
index 50563fef843553edeb23e3ce92514b307d54fa06..3e0e419e4a2f585a1658a186711249ab211bd993 100644 (file)
@@ -18,63 +18,63 @@ alto = \music {
        \octave{}
        \key{fis}
 %1
-        [ `b8. `a ] [ `g8 `b c ] |
+        [ 'b8. 'a ] [ 'g8 'b c ] |
 %2
        [ d8 g8 ] d4 |
 %3
        [ e fis g a ] d4 |
 %4
-       [ c `b `a `b ] `b4 |
+       [ c 'b 'a 'b ] 'b4 |
 %5=1
-       [ `b8. `a ] [ `g8 `b c ] |
+       [ 'b8. 'a ] [ 'g8 'b c ] |
 %6=2
        [ d8 g8 ] d4 |
 %7
-       [ c `b `a `g ] [ `fis `e `d `c ] |
+       [ c 'b 'a 'g ] [ 'fis 'e 'd 'c ] |
 %8
-       [ `d8. `e ] [ `d `fis `a c ] |
+       [ 'd8. 'e ] [ 'd 'fis 'a c ] |
 %9=1
-       [ `b8. `a ] [ `g8 `b c ] |
+       [ 'b8. 'a ] [ 'g8 'b c ] |
 %10
-       [ d8 `d8 ] d4 |
+       [ d8 'd8 ] d4 |
 %11=4
-       [ c `b `a `b ] `b4 |
+       [ c 'b 'a 'b ] 'b4 |
 %12
-       [ `a8 d8 ] `b4 |
+       [ 'a8 d8 ] 'b4 |
 %13
-       [ d8. c ] [ `b8 `a `g ] |
+       [ d8. c ] [ 'b8 'a 'g ] |
 %14=10
-       [ d8 `d8 ] d4 |
+       [ d8 'd8 ] d4 |
 %15
        [ e8 fis8 ] [ g8 d8 ] |
 %16
        \textstyle "italic"
-       [ c `a `fis `d ] `g4_"fine" |
+       [ c 'a 'fis 'd ] 'g4_"fine" |
        \textstyle "roman"
 % \scoreverb{\mulooseness=-1}
 % \newline
 %17
 %=1
-       [ `b8. `a ] [ `g8 `b c ] |
+       [ 'b8. 'a ] [ 'g8 'b c ] |
 %18=2
        [ d8 g8 ] d4 |
 %19=3
        [ e fis g a ] d4 |
 %20=4
-       [ c `b `a `b ] `b4 |
+       [ c 'b 'a 'b ] 'b4 |
 %21=5=1
-       [ `b8. `a ] [ `g8 `b c ] |
+       [ 'b8. 'a ] [ 'g8 'b c ] |
 %22=6=2
        [ d8 g8 ] d4 |
 %23=20=4
-       [ c `b `a `b ] `b4 |
+       [ c 'b 'a 'b ] 'b4 |
 %24
-       [ `a8. `g ] [ `a cis e g ] |
+       [ 'a8. 'g ] [ 'a cis e g ] |
 %first modulation
 %25
        [ fis8. e ] [ d8 fis g ] |
 %26
-       [ a8 `a8 ] a4 |
+       [ a8 'a8 ] a4 |
 %27
        [ g fis e fis ] fis4 |
 %28
@@ -82,44 +82,44 @@ alto = \music {
 %29
        [ a8. g ] [ fis8 e d ] |
 %30
-       [ a8 `a8 ] a4 |
+       [ a8 'a8 ] a4 |
 %31
        [ b8 cis'8 ] [ d'8 a8 ] |
 %32
-       [ g e cis `a ] d4 |
+       [ g e cis 'a ] d4 |
 %variant a
 %33
-       [ `b8 `g `g ] [ `g8 `b c ] |
+       [ 'b8 'g 'g ] [ 'g8 'b c ] |
 %34
-       [ d8 `g `g ] `g4 |
+       [ d8 'g 'g ] 'g4 |
 %35
-       [ e8 `g `g ] [ `g8 e fis ] |
+       [ e8 'g 'g ] [ 'g8 e fis ] |
 %36
        [ g8. fis32 e32 ] d4 |
 %37
-       [ e8 c c ] [ c8 `b `a ] |
+       [ e8 c c ] [ c8 'b 'a ] |
 %38
-       [ d8 `b `b ] [ `b8 `a `g ] |
+       [ d8 'b 'b ] [ 'b8 'a 'g ] |
 %39
-       [ c8 `a `a ] [ `a8 `b `a ] |
+       [ c8 'a 'a ] [ 'a8 'b 'a ] |
 %40
-        `a4 `g4 |
+        'a4 'g4 |
 %41
-       [ `g8 `a `g ] [ d8 e d ] |
+       [ 'g8 'a 'g ] [ d8 e d ] |
 %42
-       [ `g8 `a `g ] [ g8 e8 ] |
+       [ 'g8 'a 'g ] [ g8 e8 ] |
 %43
-       [ d8 e d ] [ d8 c `b ] |
+       [ d8 e d ] [ d8 c 'b ] |
 %44
-       [ `b8. c32 `b32 ] `a4 |
+       [ 'b8. c32 'b32 ] 'a4 |
 %45
-       [ `g `a `g `a `g `a ]4/6   [ `g `b c d e fis ]4/6  |
+       [ 'g 'a 'g 'a 'g 'a ]4/6   [ 'g 'b c d e fis ]4/6  |
 %46
-       [ g fis e d `b `g ]4/6  [ `a8 `g8 ] |
+       [ g fis e d 'b 'g ]4/6  [ 'a8 'g8 ] |
 %47
-       [ g fis e d c `b ]4/6   [ e d c `b `a `g ]4/6  |
+       [ g fis e d c 'b ]4/6   [ e d c 'b 'a 'g ]4/6  |
 %48
-       [ d e d d `b `g ]4/6  [ `a8 `g8 ] |
+       [ d e d d 'b 'g ]4/6  [ 'a8 'g8 ] |
 %theme 2
        \duration{8}
 %49
@@ -127,7 +127,7 @@ alto = \music {
 %50
        [ e d c ]2/3  e4 |
 %51
-       [ d g `g ]2/3   [ `g `a `b ]2/3  |
+       [ d g 'g ]2/3   [ 'g 'a 'b ]2/3  |
 %52
         d4 e4 |
 %53
@@ -135,31 +135,31 @@ alto = \music {
 %54
        [ e d c ]2/3  e4 |
 %55
-       [ d g `g ]2/3   [ `g `a `b ]2/3  |
+       [ d g 'g ]2/3   [ 'g 'a 'b ]2/3  |
 %56
-        `b4 c4 \key{bes es as} | % || \key\Es
+        'b4 c4 \key{bes es as} | % || \key\Es
 %57
-       [ `b d ] [ `g `b ] |
+       [ 'b d ] [ 'g 'b ] |
 %58
-       [ c es ] [ `g c ] |
+       [ c es ] [ 'g c ] |
 %59
-       [ d f ] [ `g f ] |
+       [ d f ] [ 'g f ] |
 %60
        [ es16 d16 es16 f16 ] g4 |
 %61
        [ as f ] [ d as ] |
 %62
-       [ g es ] [ c `as ] |
+       [ g es ] [ c 'as ] |
 %63
-       [ `g `b ] [ es d ] |
+       [ 'g 'b ] [ es d ] |
 %64
-       [ c8. `g32 `es32 ] `c4 | % || \meter{6/8}
+       [ c8. 'g32 'es32 ] 'c4 | % || \meter{6/8}
 %65
        es4.( [ )es d c ] |
 %66
         es2.  |
 %67
-       d4.( [ )d c `b ] |
+       d4.( [ )d c 'b ] |
 %68
         d2.  |
 %69
@@ -174,21 +174,21 @@ alto = \music {
         c r4 r4. | % || \meter{2/4}
 %73
        \duration{8}
-       [ `b d ] [ `g `b ] |
+       [ 'b d ] [ 'g 'b ] |
 %74
-       [ c es ] [ `g c ] |
+       [ c es ] [ 'g c ] |
 %75
-       [ d f ] [ `g f ] |
+       [ d f ] [ 'g f ] |
 %76
        [ es16 d16 es16 f16 ] g4 |
 %77
        [ as f ] [ d as ] |
 %78
-       [ g es ] [ c `as ] |
+       [ g es ] [ c 'as ] |
 %79
-       [ `g `b ] [ es d ] |
+       [ 'g 'b ] [ es d ] |
 %80
-       [ c8. `g32 `es32 ] `c4 |
+       [ c8. 'g32 'es32 ] 'c4 |
 %81
         g4 [ as g ] |
 %82
@@ -199,11 +199,11 @@ alto = \music {
 %84
        [ as g f g ] as4 |
 %85
-        f4 [ f des c `bes ] |
+        f4 [ f des c 'bes ] |
 %86
-        `a2 |
+        'a2 |
 %87
-        `b2 |
+        'b2 |
 %88
        \textstyle "italic"
         c2_"dacapo" \key{fis} |
index c513a366eaa82fd3d8df60588fd9a4f73f95ec66..76d9519123b7b9a5446be41b7bbfa68a61397932 100644 (file)
 %
 cello = \music { 
        
-\clef"bass"    \octave{`}
+\clef"bass"    \octave{'}
        \duration{4}
        \key{fis}
 %%1
-       g `g |
+       g 'g |
 %%2
-       [ `g8. `a16 ] ``b |
+       [ 'g8. 'a16 ] ''b |
 %%3
        c d |
 %%4
@@ -27,15 +27,15 @@ cello = \music {
 %%5=1
        e2 |
 %%6=2
-       [ `g8. `a16 ] ``b |
+       [ 'g8. 'a16 ] ''b |
 %%7
        c d |
 %%8
-       `g d |
+       'g d |
 %%9=1
-       `g2 |
+       'g2 |
 %%10
-       `g ``b |
+       'g ''b |
 %%11=4
        e [ g16 fis16 e16 d16( ] |
 %%12
@@ -45,16 +45,16 @@ cello = \music {
 %%14=10
        [ d8 d'8 ] g |
 %%15
-       [ c8 e8 ] [ g8 `g8 ] |
+       [ c8 e8 ] [ g8 'g8 ] |
 %%16
        \textstyle "italic"
        [ d8 c'8 ] b_"fine"
        \textstyle "roman" |
 % \newline
 %%17=1
-       g `g |
+       g 'g |
 %%18=2
-       [ `g8. `a16 ] ``b |
+       [ 'g8. 'a16 ] ''b |
 %%19=3
        c d |
 %%20=4
@@ -62,73 +62,73 @@ cello = \music {
 %%21=5=1
        e2 |
 %%22=6=2
-       [ `g8. `a16 ] ``b |
+       [ 'g8. 'a16 ] ''b |
 %%23=4
        c g |
 %%24
-       a `a |
+       a 'a |
 %%25
        d2 |
 %%first modulation
 %%26
-       d `fis |
+       d 'fis |
 %%27
-       ``b [ dis16 c16 ``b16 `a16( ] |
+       ''b [ dis16 c16 ''b16 'a16( ] |
 %%28
-       ) `a d |
+       ) 'a d |
 %%29
        \duration{8}
-       [ `a a ] d4 |
+       [ 'a a ] d4 |
 %%30
-       [ `a a ] d4 |
+       [ 'a a ] d4 |
 %%31
-       [ `g ``b ] [ d `d ] |
+       [ 'g ''b ] [ d 'd ] |
 %%32
-       [ `a a ] d4 |
+       [ 'a a ] d4 |
 %%variant a
 %%33
        \duration{16}
-       [ `g8 `g `g ] [ `g8 `g `g ] |
+       [ 'g8 'g 'g ] [ 'g8 'g 'g ] |
 %%34
-       [ `g8 `g `g ] g4 |
+       [ 'g8 'g 'g ] g4 |
 %%35
        [ c8 c c ] [ c8 c' c' ] |
 %%36
        g4 b4 |
 %%37
-       [ a8 a a ] [ `a8 `a `a ] |
+       [ a8 a a ] [ 'a8 'a 'a ] |
 %%38
-       [ ``b8 ``b ``b ] [ ``b8 ``b ``b ] |
+       [ ''b8 ''b ''b ] [ ''b8 ''b ''b ] |
 %%39
-       [ `a8 `a `a ] [ `a8 `a `a ] |
+       [ 'a8 'a 'a ] [ 'a8 'a 'a ] |
 %%40
-       `d4 `g4 |
+       'd4 'g4 |
 %%41
        \duration{8}
        \textstyle "italic"
        r_"pizz"
        \textstyle "roman"
-       g r `g |
+       g r 'g |
 %%42
        r g e4 |
 %%43
-       r b r ``b |
+       r b r ''b |
 %%44
        r e a4 |
 %%45
        r e r e |
 %%46
-       r ``b [ d g ] |
+       r ''b [ d g ] |
 %%47
-       r e r `a |
+       r e r 'a |
 %%48
-       r ``b
-       [ `d `g ] |
+       r ''b
+       [ 'd 'g ] |
 %%theme 2
 %%49
        \textstyle "italic"
        r4_"arco"
-        [ `g `g `g ]2/3  |
+        [ 'g 'g 'g ]2/3  |
        \textstyle "roman"
 %%50
        r4  [ c c c ]2/3  |
@@ -137,37 +137,37 @@ cello = \music {
 %%52
        c2 |
 %%53
-       r4  [ `g `g `g ]2/3  |
+       r4  [ 'g 'g 'g ]2/3  |
 %%54
        r4  [ c c c ]2/3  |
 %%55
        g2 |
 %%56
-       `g4 `c4 \key{bes es as}|
-% \key\`es ||
+       'g4 'c4 \key{bes es as}|
+% \key\'es ||
 %%57
        g r g r |
 %%58
        c r c r |
 %%59
-       `g r `g r |
+       'g r 'g r |
 %%60
        c r c r |
 %%61
-       d4. ``b |
+       d4. ''b |
 %%62
        c2 |
 %%63
-       g4 `g4 |
+       g4 'g4 |
 %%64
-       c4 `c4 |
+       c4 'c4 |
 % \meter{6/8} ||
 %%65
        [ c c c ] c4.  |
 %%66
-       [ `c `c `c ] `c4.  |
+       [ 'c 'c 'c ] 'c4.  |
 %%67
-       [ `g `g `g ] `g4. |
+       [ 'g 'g 'g ] 'g4. |
 % \newline     
 %%68
        [ g g g ] g4.  |
@@ -185,28 +185,28 @@ cello = \music {
 %%74
        c r c r |
 %%75
-       `g r `g r |
+       'g r 'g r |
 %%76
        c r c4 |
 %%77
-       d4. ``b |
+       d4. ''b |
 %%78
        c2 |
 %%79
-       g4 `g4 |
+       g4 'g4 |
 %%80
-       c4 `c4 |
+       c4 'c4 |
 %%81
        \duration{2}
-       `c |
+       'c |
 %%82
-       `c |
+       'c |
 %%83
-       `e |
+       'e |
 %%84
-       `f |
+       'f |
 %%85
-       `as |
+       'as |
 %%86
        c |
 %%87
@@ -215,6 +215,6 @@ cello = \music {
        \textstyle "italic"
        d_"dacapo" \key{fis} |
        \textstyle "roman"
-% \key\`g ||
+% \key\'g ||
        
 }
index 9b3bf05604ab09577d84e7b4d71bcf8207984432..0ef0d07821912cb3a9eea0560beef7a2e31d315d 100644 (file)
@@ -65,7 +65,7 @@ violinI = \music {
 %22=6
        g2 |
 %23=4
-       e [ d16 c16 `b16 c16 ] |
+       e [ d16 c16 'b16 c16 ] |
 %24
        cis cis' |
 %25
@@ -151,9 +151,9 @@ violinI = \music {
        c' r c'4 |
 %61
        \duration{16}
-        [ as f d f as d' ]4/6   [ as f d `as d f ]4/6  |
+        [ as f d f as d' ]4/6   [ as f d 'as d f ]4/6  |
 %62
-        [ g es c `g c es ]4/6   [ g c' es' c' g es ]4/6  |
+        [ g es c 'g c es ]4/6   [ g c' es' c' g es ]4/6  |
 %63
         [ g d g bes d' g' ]4/6   [ f' d' bes g f d ]4/6  |
 %64
@@ -187,9 +187,9 @@ violinI = \music {
        c' r c'4 |
 %77
        \duration{16}
-        [ as f d f as d' ]4/6   [ as f d `as d f ]4/6  |
+        [ as f d f as d' ]4/6   [ as f d 'as d f ]4/6  |
 %78
-        [ g es c `g c es ]4/6   [ f c' es' c' g es ]4/6  |
+        [ g es c 'g c es ]4/6   [ f c' es' c' g es ]4/6  |
 %79
         [ g d f b d' g' ]4/6   [ f' d' b g f d ]4/6  |
 %80
index 74940775cbd49e03878d4267ce65bfa2807d7c80..9f87985537f694a2ed591e5ba6f1aa182012da2d 100644 (file)
@@ -19,7 +19,7 @@ violinII = \music {
 %1
        d2 |
 %2
-       [ `b8. `a16 ] `g4 |
+       [ 'b8. 'a16 ] 'g4 |
 %3
        [ g8 e8 ] fis |
 %4
@@ -27,17 +27,17 @@ violinII = \music {
 %5=1
        e2 |
 %6=2
-       [ `b8. `a16 ] `g4 |
+       [ 'b8. 'a16 ] 'g4 |
 %7
-       `g `a |
+       'g 'a |
 %8
-       `b `a |
+       'b 'a |
 %9=1
        d2 |
 %10
-       `b `g |
+       'b 'g |
 %11=4
-       `g2 |
+       'g2 |
 %12
        [ d8 e16 fis16 ] g |
 %13
@@ -54,7 +54,7 @@ violinII = \music {
 %17=1
        d2 |
 %18=2
-       [ `b8. `a16 ] `g4 |
+       [ 'b8. 'a16 ] 'g4 |
 %19=3
        [ g8 e8 ] fis |
 %20=4
@@ -62,9 +62,9 @@ violinII = \music {
 %21=5=1
        e2 |
 %22=6=2
-       [ `b8. `a16 ] `g4 |
+       [ 'b8. 'a16 ] 'g4 |
 %23=4
-       `g2 |
+       'g2 |
 %24
        cis e |
 %25
@@ -107,9 +107,9 @@ violinII = \music {
        \textstyle "italic"
        r_"pizz"
        \textstyle "roman"
-       `b r `b |
+       'b r 'b |
 %42
-       r `b `g4 |
+       r 'b 'g4 |
 %43
        r fis r fis |
 %44
@@ -144,9 +144,9 @@ violinII = \music {
        f4 e4 \key{bes es as}|
 % \key\Es ||
 %57
-       d r `b r |
+       d r 'b r |
 %58
-       `g r es r |
+       'g r es r |
 %59
        g r g r |
 %60
@@ -156,7 +156,7 @@ violinII = \music {
 %62
        es2 |
 %63
-       `b d4.  |
+       'b d4.  |
 %64
        es2 |
 % \meter{6/8} ||
@@ -164,9 +164,9 @@ violinII = \music {
        \duration{8}
        [ c c c ] c4.  |
 %66
-       [ `g `g `g ] `g4.  |
+       [ 'g 'g 'g ] 'g4.  |
 %67
-       [ `b8 `b `b ] `b4.  |
+       [ 'b8 'b 'b ] 'b4.  |
 %68
        [ g g g ] g4.  |
 %69
@@ -179,9 +179,9 @@ violinII = \music {
        es r4 r4. |
 %73
 % \meter{2/4} ||
-       d r `b r |
+       d r 'b r |
 %74
-       `g r es r |
+       'g r es r |
 %75
        g r g r |
 %76
@@ -192,7 +192,7 @@ violinII = \music {
 %78
        es |
 %79
-       `b8 d4.  |
+       'b8 d4.  |
 %80
        es |
 %81
index 3945d68be85cc6619d5d90a200d39dd49c81ba4f..132410ba9a27a377a2c785560567eb3e6ed858f5 100644 (file)
@@ -37,36 +37,36 @@ track1 = \music {
        b16 d16 f16 b16 } } { \music{ d16 f16 b16 d16 f16 
        b16 } } { \music{ c16 g16 c'16 c16 g16 c'16 } } { 
        \music{ c16 g16 c'16 c16 g16 c'16 } } { \music{ 
-       `a16 c16 f16 `a16 c16 f16 } } { \music{ `a16 c16 
-       f16 `a16 c16 f16 } } { \music{ `a16 c16 f16 `a16 
-       c16 f16 } } { \music{ `a16 c16 f16 `a16 c16 f16 } } 
-       { \music{ `g16 `b16 f16 `g16 `b16 f16 } } { \music{ 
-       `g16 `b16 f16 `g16 `b16 f16 } } { \music{ `g16 c16 
-       e16 `g16 c16 e16 } } { \music{ `g16 c16 e16 `g16 
-       c16 e16 } } { \music{ `ais16 c16 e16 `ais16 c16 e16 
-       } } { \music{ `ais16 c16 e16 `ais16 c16 e16 } } { 
-       \music{ `a16 c16 e16 `a16 c16 e16 } } { \music{ 
-       `a16 c16 e16 `a16 c16 e16 } } { \music{ `a16 c16 
-       dis16 `a16 c16 dis16 } } { \music{ `a16 c16 dis16 
-       `a16 c16 dis16 } } { \music{ `b16 c16 d16 `b16 c16 
-       d16 } } { \music{ `b16 c16 d16 `b16 c16 d16 } } { 
-       \music{ `g16 `b16 d16 `g16 `b16 d16 } } { \music{ 
-       `g16 `b16 d16 `g16 `b16 d16 } } { \music{ `g16 c16 
-       e16 `g16 c16 e16 } } { \music{ `g16 c16 e16 `g16 
-       c16 e16 } } { \music{ `g16 c16 f16 `g16 c16 f16 } } 
-       { \music{ `g16 c16 f16 `g16 c16 f16 } } { \music{ 
-       `g16 `b16 f16 `g16 `b16 f16 } } { \music{ `g16 `b16 
-       f16 `g16 `b16 f16 } } { \music{ `a16 c16 fis16 `a16 
-       c16 fis16 } } { \music{ `a16 c16 fis16 `a16 c16 
-       fis16 } } { \music{ `g16 c16 g16 `g16 c16 g16 } } { 
-       \music{ `g16 c16 g16 `g16 c16 g16 } } { \music{ 
-       `g16 c16 f16 `g16 c16 f16 } } { \music{ `g16 c16 
-       f16 `g16 c16 f16 } } { \music{ `g16 `b16 f16 `g16 
-       `b16 f16 } } { \music{ `g16 `b16 f16 `g16 `b16 f16 }
-        } { \music{ `g16 `ais16 e16 `g16 `ais16 e16 } } { 
-       \music{ `g16 `ais16 e16 `g16 `ais16 e16 } } { 
-       \music{ `f16 `a16 c16 f16 c16 `a16 c16 `a16 `f16 
-       `a16 `f16 `d16 `f16 `d16 } } { \music{ g16 b16 d'16 
+       'a16 c16 f16 'a16 c16 f16 } } { \music{ 'a16 c16 
+       f16 'a16 c16 f16 } } { \music{ 'a16 c16 f16 'a16 
+       c16 f16 } } { \music{ 'a16 c16 f16 'a16 c16 f16 } } 
+       { \music{ 'g16 'b16 f16 'g16 'b16 f16 } } { \music{ 
+       'g16 'b16 f16 'g16 'b16 f16 } } { \music{ 'g16 c16 
+       e16 'g16 c16 e16 } } { \music{ 'g16 c16 e16 'g16 
+       c16 e16 } } { \music{ 'ais16 c16 e16 'ais16 c16 e16 
+       } } { \music{ 'ais16 c16 e16 'ais16 c16 e16 } } { 
+       \music{ 'a16 c16 e16 'a16 c16 e16 } } { \music{ 
+       'a16 c16 e16 'a16 c16 e16 } } { \music{ 'a16 c16 
+       dis16 'a16 c16 dis16 } } { \music{ 'a16 c16 dis16 
+       'a16 c16 dis16 } } { \music{ 'b16 c16 d16 'b16 c16 
+       d16 } } { \music{ 'b16 c16 d16 'b16 c16 d16 } } { 
+       \music{ 'g16 'b16 d16 'g16 'b16 d16 } } { \music{ 
+       'g16 'b16 d16 'g16 'b16 d16 } } { \music{ 'g16 c16 
+       e16 'g16 c16 e16 } } { \music{ 'g16 c16 e16 'g16 
+       c16 e16 } } { \music{ 'g16 c16 f16 'g16 c16 f16 } } 
+       { \music{ 'g16 c16 f16 'g16 c16 f16 } } { \music{ 
+       'g16 'b16 f16 'g16 'b16 f16 } } { \music{ 'g16 'b16 
+       f16 'g16 'b16 f16 } } { \music{ 'a16 c16 fis16 'a16 
+       c16 fis16 } } { \music{ 'a16 c16 fis16 'a16 c16 
+       fis16 } } { \music{ 'g16 c16 g16 'g16 c16 g16 } } { 
+       \music{ 'g16 c16 g16 'g16 c16 g16 } } { \music{ 
+       'g16 c16 f16 'g16 c16 f16 } } { \music{ 'g16 c16 
+       f16 'g16 c16 f16 } } { \music{ 'g16 'b16 f16 'g16 
+       'b16 f16 } } { \music{ 'g16 'b16 f16 'g16 'b16 f16 }
+        } { \music{ 'g16 'ais16 e16 'g16 'ais16 e16 } } { 
+       \music{ 'g16 'ais16 e16 'g16 'ais16 e16 } } { 
+       \music{ 'f16 'a16 c16 f16 c16 'a16 c16 'a16 'f16 
+       'a16 'f16 'd16 'f16 'd16 } } { \music{ g16 b16 d'16 
        f'16 d'16 b16 d'16 b16 g16 b16 d16 f16 e64 } } { 
        \music{ f64 } } { } { \music{ e32 } } { \music{ d16 
        } } { \music{ c'1 } \music{ g1 } \music{ e1 } } 
@@ -82,36 +82,36 @@ track2 = \music {
        e4. } } { \music{ e4. } } { \music{ d4. } } { 
        \music{ d4. } } { \music{ d4. } } { \music{ d4. } } 
        { \music{ c4. } } { \music{ c4. } } { \music{ c4. } 
-       } { \music{ c4. } } { \music{ `a4. } } { \music{ 
-       `a4. } } { \music{ `b4. } } { \music{ `b4. } } { 
-       \music{ `ais4. } } { \music{ `ais4. } } { \music{ 
-       `a4. } } { \music{ `a4. } } { \music{ `gis4. } } { 
-       \music{ `gis4. } } { \music{ `g4. } } { \music{ 
-       `g4. } } { \music{ `f4. } } { \music{ `f4. } } { 
-       \music{ `f4. } } { \music{ `f4. } } { \music{ `d4. }
-        } { \music{ `d4. } } { \music{ `e4. } } { \music{ 
-       `e4. } } { \music{ `g4. } } { \music{ `c4. } } { } { 
-       } { \music{ `g4. } } { } { \music{ ``f4. } } { 
-       \music{ `f4. } } { \music{ ``f4. } } { \music{ `f4. }
-        } { \music{ fi``s4. } } { \music{ fi``s4. } \music{ 
-       `c4. } } { } { \music{ `c4. } } { \music{ gi``s4. } } 
-       { \music{ gi``s4. } \music{ `f4. } } { } { \music{ 
-       `f4. } } { \music{ ``g4. } } { \music{ ``g4. } \music{
-        `f4. } } { } { \music{ `f4. } } { \music{ ``g4. } } 
-       { \music{ ``g4. } \music{ `e4. } } { } { \music{ ``g4. 
-       } \music{ `e4. } } { } { \music{ ``g4. } \music{ 
-       `d4. } } { } { \music{ ``g4. } \music{ `d4. } } { } { 
-       \music{ `d4. } } { \music{ ``g4. } } { \music{ ``g4. }
-        \music{ `d4. } } { } { \music{ `dis4. } } { \music{
-        ``g4. } } { \music{ `dis4. } } { \music{ ``g4. } } { 
-       \music{ `e4. } } { \music{ ``g4. } } { \music{ `e4. }
-        } { \music{ ``g4. } } { \music{ `d4. } } { \music{ 
-       ``g4. } } { \music{ `d4. } } { \music{ ``g4. } } { 
-       \music{ `d4. } } { \music{ ``g4. } } { \music{ `d4. }
-        } { \music{ ``c4. } } { \music{ `c4. } } { \music{ 
-       ``c4. } } { \music{ `c4. } } { \music{ ``c1 } } { 
-       \music{ `c1 } } { \music{ ``c1 } \music{ ``b1 } } { 
-       } { } { } { \music{ ``c1 } \music{ `c1 } } 
+       } { \music{ c4. } } { \music{ 'a4. } } { \music{ 
+       'a4. } } { \music{ 'b4. } } { \music{ 'b4. } } { 
+       \music{ 'ais4. } } { \music{ 'ais4. } } { \music{ 
+       'a4. } } { \music{ 'a4. } } { \music{ 'gis4. } } { 
+       \music{ 'gis4. } } { \music{ 'g4. } } { \music{ 
+       'g4. } } { \music{ 'f4. } } { \music{ 'f4. } } { 
+       \music{ 'f4. } } { \music{ 'f4. } } { \music{ 'd4. }
+        } { \music{ 'd4. } } { \music{ 'e4. } } { \music{ 
+       'e4. } } { \music{ 'g4. } } { \music{ 'c4. } } { } { 
+       } { \music{ 'g4. } } { } { \music{ ''f4. } } { 
+       \music{ 'f4. } } { \music{ ''f4. } } { \music{ 'f4. }
+        } { \music{ fi''s4. } } { \music{ fi''s4. } \music{ 
+       'c4. } } { } { \music{ 'c4. } } { \music{ gi''s4. } } 
+       { \music{ gi''s4. } \music{ 'f4. } } { } { \music{ 
+       'f4. } } { \music{ ''g4. } } { \music{ ''g4. } \music{
+        'f4. } } { } { \music{ 'f4. } } { \music{ ''g4. } } 
+       { \music{ ''g4. } \music{ 'e4. } } { } { \music{ ''g4. 
+       } \music{ 'e4. } } { } { \music{ ''g4. } \music{ 
+       'd4. } } { } { \music{ ''g4. } \music{ 'd4. } } { } { 
+       \music{ 'd4. } } { \music{ ''g4. } } { \music{ ''g4. }
+        \music{ 'd4. } } { } { \music{ 'dis4. } } { \music{
+        ''g4. } } { \music{ 'dis4. } } { \music{ ''g4. } } { 
+       \music{ 'e4. } } { \music{ ''g4. } } { \music{ 'e4. }
+        } { \music{ ''g4. } } { \music{ 'd4. } } { \music{ 
+       ''g4. } } { \music{ 'd4. } } { \music{ ''g4. } } { 
+       \music{ 'd4. } } { \music{ ''g4. } } { \music{ 'd4. }
+        } { \music{ ''c4. } } { \music{ 'c4. } } { \music{ 
+       ''c4. } } { \music{ 'c4. } } { \music{ ''c1 } } { 
+       \music{ 'c1 } } { \music{ ''c1 } \music{ ''b1 } } { 
+       } { } { } { \music{ ''c1 } \music{ 'c1 } } 
 } % track4.
 
 score {
index ee267b8ce6c2506ff0b3108683c0f2c7e06fb151..d31118d0bd880b605454c6e234a76eadeeb65b64 100644 (file)
@@ -7,20 +7,20 @@ blah =
 \duration { 8 }
                        \octave{ }
                         |[ a a a a a a a a a ]6/9 
-                       \octave{ ' }
+                       \octave{ 1 }
                         |[ a a a a a a a a a ]6/9 
-                       \octave { ` } 
-                        [ `c `g d a e' b' f'' c''' g''' ]6/9
-                        [ g''' c''' f'' b' e' a d `g `c ]6/9
-                       \octave{ ' }
-                        [ `c `g d a e' b' f'' c''' g''' ]6/9
-                        [ g''' c''' f'' b' e' a d `g `c ]6/9
+                       \octave { ' } 
+                        [ 'c 'g d a e' b' f'' c''' g''' ]6/9
+                        [ g''' c''' f'' b' e' a d 'g 'c ]6/9
+                       \octave{ 1 }
+                        [ 'c 'g d a e' b' f'' c''' g''' ]6/9
+                        [ g''' c''' f'' b' e' a d 'g 'c ]6/9
                        \octave { } 
                         [ c g d' ]2/3 
                         [ d' g c ]2/3  
                         [ f c' g' ]2/3 
                         [ g' c' f ]2/3  
-                       \octave{ ' }
+                       \octave{ 1 }
                         [ c g d' ]2/3 
                         [ d' g c ]2/3  
                         [ f c' g' ]2/3 
@@ -42,7 +42,7 @@ c1
        [c d e f][g a b c'] % 10 
        |[c' b a g][f e d c]
                        
-               }
+       }
 }
 
 \score {
index b9f848715ba7502bf91735f6526fdbea1aaab1a4..f53ff15fefad485614fcb358e92bed27de8a7e1d 100644 (file)
 ii_menuetto = \music {
        \clef"alto"\meter{3/4}
        \key {bes}
-       \octave{}
+       \octave{1}
        \duration{8}
        < a2 f2 d2 df > bes4-.  |
 %%2
        < [ bes^"1" e c_"2"_"4" >
                a bes-. g-. ] a4-.^"4" |
 %%3
-       < d4 `bes4-. > g4-. [ f-. e-. ] |
+       < d4 'bes4-. > g4-. [ f-. e-. ] |
 %%4
-       < [ f `a > e d cis-. `b-. `a-. ]
+       < [ f 'a > e d cis-. 'b-. 'a-. ]
 %%5
        < a2 f2 d2 > bes4-. | %   @bes4-. |
 %%6
@@ -47,10 +47,10 @@ ii_menuetto = \music {
        c'4-. | % =c'4-. |
 %%7
        < a4-. f4>
-       < d'4-.-upbow f4 `bes4 >
-       < e'4-.-downbow g4 `g4 > |
+       < d'4-.-upbow f4 'bes4 >
+       < e'4-.-downbow g4 'g4 > |
 %%8
-       < cis'2.-upbow e2. `a2. > \bar ":|:"%%!! sorry!
+       < cis'2.-upbow e2. 'a2. > \bar ":|:"%%!! sorry!
 %%9
        \clef "violin"
        < e'2 a2 df >
@@ -70,9 +70,9 @@ ii_menuetto = \music {
                 { \stem{-1} g4(\stem{-1}) f4 e4 }% ugh
        > |
 %%14
-       < [ a f > g a f ] < d'4-upbow e4 `bes4 > |
+       < [ a f > g a f ] < d'4-upbow e4 'bes4 > |
 %%15
-       < c'4-\downbow f4 `a4 > [ bes( )a g a ] |
+       < c'4-\downbow f4 'a4 > [ bes( )a g a ] |
 %%16
        [ f( e )f a-. g-. bes-. ] |
 %%17
@@ -80,7 +80,7 @@ ii_menuetto = \music {
 %%18
        < { [ c'( )bes c' a ] } { [ es ] } > fis4 |
 %%19
-       < d'4-downbow g4 `bes4 > < c'4-upbow g4 c4 > < [ bes d > a ] |
+       < d'4-downbow g4 'bes4 > < c'4-upbow g4 c4 > < [ bes d > a ] |
 %%20
        < { [ c'( bes a )bes g( )bes ] } { [ d ] } { [ g ] } > |
 %%21
@@ -88,9 +88,9 @@ ii_menuetto = \music {
 %%22
        < { [ g( )f g e ] } { [ cis ] } > < f4 d4 > |
 %%23
-       [ `g g ] < e4. `a4. > d-upbow |
+       [ 'g g ] < e4. 'a4. > d-upbow |
 %%24
-       < d2.^"fine" `a2. `d2._"3 mins."> \bar ":|" % \bar ":||"
+       < d2.^"fine" 'a2. 'd2._"3 mins."> \bar ":|" % \bar ":||"
 %% \tighten            % use one line less
        
 }
index 7673bb95c145ff3b55ad638bf4703efdf0d9b74c..0fae878df93f9a15acdfc9b7f046bca782fe364d 100644 (file)
 % (except for grace notes) are printed
 %
 %%1
-melodie = \music {  \clef\violin
+melodie = \music {  \clef\violin\octave{1}
        \key{bes}
        \meter{3/4}\duration{ 8 }
-       r pp < [ d `a-| > f-| < d `a-| > f-| < d `a-| ] > |
+       r pp < [ d 'a-| > f-| < d 'a-| > f-| < d 'a-| ] > |
 %%2
-       r < [ d `bes-| > f-| < d `bes-| > f-| < d `bes-| ] > |
+       r < [ d 'bes-| > f-| < d 'bes-| > f-| < d 'bes-| ] > |
 %%3
        \textstyle "italic"
-       r_"simile" < [ d `bes > e < d `bes > e < d `bes ] >
+       r_"simile" < [ d 'bes > e < d 'bes > e < d 'bes ] >
        \textstyle "roman" |
 %%4
-       r < [ `a cis > e < `a cis > e < `a cis ] > |
+       r < [ 'a cis > e < 'a cis > e < 'a cis ] > |
 %#%:|
 %%5
        [ a()bes a ]2/3  d'4. a |
@@ -167,146 +167,146 @@ begeleiding = \music {
        \key{bes}\meter{3/4}
        \clef\bass
        \duration{2}
-       `d r4 |
+       'd r4 |
 %%2
-       ``bes r4 |
+       ''bes r4 |
 
 %%3
-       ``g r4 |
+       ''g r4 |
 
 %%4
-       ``a r4 |
+       ''a r4 |
 %#%:|
 %%5
 \duration{ 8 }
-       < \multivoice { \stem{ 1 } [ `f `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'f 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%6
-       < \multivoice { \stem{ 1 } [ `d `e `g `e `g `e ] }
-       { \stem{ -1 } ``bes2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'e 'g 'e 'g 'e ] }
+       { \stem{ -1 } ''bes2 r4 } > |
 %%7 
-       < \multivoice { \stem{ 1 } [ `cis `e `g `e `g e ] }
-       { \stem{ -1 } ``a2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'cis 'e 'g 'e 'g e ] }
+       { \stem{ -1 } ''a2 r4 } > |
  %%8
-       < \multivoice { \stem{ 1 } [ `d `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%9
-       [ `a e g e g e ] |
+       [ 'a e g e g e ] |
 %%10
-       [ `d `a d `a d `a ] |
+       [ 'd 'a d 'a d 'a ] |
 %%11
-       < \multivoice { \stem{ 1 } [ `f `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'f 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%12 == 6
-       < \multivoice { \stem{ 1 } [ `d `e `g `e `g `e ] }
-       { \stem{ -1 } ``bes2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'e 'g 'e 'g 'e ] }
+       { \stem{ -1 } ''bes2 r4 } > |
 %13
-       < \multivoice { [ `e `g `bes `g `bes `g ] }
-       { \stem{ -1 } `c2 r4 } > |
+       < \multivoice { [ 'e 'g 'bes 'g 'bes 'g ] }
+       { \stem{ -1 } 'c2 r4 } > |
 %%14
-       < \multivoice { \stem{ 1 } [ `a c f c f c ] }
-       { \stem{ -1 } `f2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'a c f c f c ] }
+       { \stem{ -1 } 'f2 r4 } > |
 %%15
-       [ `c `g `bes `g `bes `g ] |
+       [ 'c 'g 'bes 'g 'bes 'g ] |
 %%16
-       [ ``f `c `f `c `f `c ] |
+       [ ''f 'c 'f 'c 'f 'c ] |
 %%17
-       < \multivoice { \stem{ 1 } [ ``a `e `g `e `g `e ] }
-       { \stem{ -1 } ``a2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''a 'e 'g 'e 'g 'e ] }
+       { \stem{ -1 } ''a2 r4 } > |
 %%18
-       < \multivoice { \stem{ 1 } [ `d `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%19
-       < \multivoice { \stem{ 1 } [ ``bes `f `bes `f `bes `f ] }
-       { \stem{ -1 } ``bes2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''bes 'f 'bes 'f 'bes 'f ] }
+       { \stem{ -1 } ''bes2 r4 } > |
 %%20
-       < \multivoice { \stem{ 1 } [ ``f `c `f `c `f `c ] }
-       { \stem{ -1 } ``f2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''f 'c 'f 'c 'f 'c ] }
+       { \stem{ -1 } ''f2 r4 } > |
 %%21
-       < [ `e `c > `g c `g c `g ] |
+       < [ 'e 'c > 'g c 'g c 'g ] |
 %%22
-       [ `f `a c `a `f `c ] |
+       [ 'f 'a c 'a 'f 'c ] |
 %%23
-       < \multivoice { \stem{ 1 } [ ``a `e `g `e `g `e ] }
-       { \stem{ -1 } ``a2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''a 'e 'g 'e 'g 'e ] }
+       { \stem{ -1 } ''a2 r4 } > |
 %%24
-       < \multivoice { \stem{ 1 } [ `d `fis `a `fis `a `fis ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'fis 'a 'fis 'a 'fis ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%25
-       < \multivoice { \stem{ 1 } [ ``g `d `b `d `b `d ] }
-       { \stem{ -1 } ``g2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''g 'd 'b 'd 'b 'd ] }
+       { \stem{ -1 } ''g2 r4 } > |
 %%26
-       < \multivoice { \stem{ 1 } [ `d `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%27
-       < [ `cis ``a > `e `a `e `a `e ] |
+       < [ 'cis ''a > 'e 'a 'e 'a 'e ] |
 %%28
-       [ `d `a d `a d `a ] |
+       [ 'd 'a d 'a d 'a ] |
 %%29
-       [ `d `g `bes `g `bes `g ] |
+       [ 'd 'g 'bes 'g 'bes 'g ] |
 %#%\volta1
 %%30 
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %%31
-       [ ``a `e `a `e `a `e ] |
+       [ ''a 'e 'a 'e 'a 'e ] |
 %%32
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %%33
-       [ `d `g `b `g `b `g ] |
+       [ 'd 'g 'b 'g 'b 'g ] |
 %%34
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %%35
-       [ ``a `e `a `e `a `e ] |
+       [ ''a 'e 'a 'e 'a 'e ] |
 %%36
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %#%\volta2
 %#%:|
 %%37
-       [ ``a `e `g `e ``bes^> `e ] |
+       [ ''a 'e 'g 'e ''bes^> 'e ] |
 %%38
-       [ ``a < e cis `a > < e cis `a > < e cis `a > < e cis `a > < e cis `a ] >  |
+       [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] >  |
 %%39
-       [ ``a `e `g `e ``bes^> `e ] |
+       [ ''a 'e 'g 'e ''bes^> 'e ] |
 %%40
-       [ ``a < e cis `a > < e cis `a > < e cis `a > < e cis `a > < e cis `a ] >  |
+       [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] >  |
 %%41
-       [ ``ais `e `fis `e `fis `e ] |
+       [ ''ais 'e 'fis 'e 'fis 'e ] |
 %%42
-       < [ `d ``b > `fis `b `fis `b `fis ] |
+       < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] |
 %%43
-       < [ `e ``b > `g `b `g `b `g ] |
+       < [ 'e ''b > 'g 'b 'g 'b 'g ] |
 %%44
-       < [ `d ``b > `fis `b `fis `b `fis ] |
+       < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] |
 %%45
-       < \multivoice { \stem{ 1 } [ ``g `d `b `d `b `d ] }
-       { \stem{ -1 } ``g2 r4 } > |
+       < \multivoice { \stem{ 1 } [ ''g 'd 'b 'd 'b 'd ] }
+       { \stem{ -1 } ''g2 r4 } > |
 %%46
-       < \multivoice { \stem{ 1 } [ `d `a d `a d `a ] }
-       { \stem{ -1 } `d2 r4 } > |
+       < \multivoice { \stem{ 1 } [ 'd 'a d 'a d 'a ] }
+       { \stem{ -1 } 'd2 r4 } > |
 %%47
-       < [ `cis ``a > `e `a `e `a `e ] |
+       < [ 'cis ''a > 'e 'a 'e 'a 'e ] |
 %%48
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %%49
-       [ `d `a d `a d `a ] |
+       [ 'd 'a d 'a d 'a ] |
 %%50
-       [ ``g `e `g `e `g `e ] |
+       [ ''g 'e 'g 'e 'g 'e ] |
 %%51
-       [ ``a `e `g `e `g `e ] |
+       [ ''a 'e 'g 'e 'g 'e ] |
 %%52
-       [ ``d `d `fis `d `fis `d ] |
+       [ ''d 'd 'fis 'd 'fis 'd ] |
 %%53
-       [ `d `g `bes `g `bes `g ] |
+       [ 'd 'g 'bes 'g 'bes 'g ] |
 %%54
-       [ `d `fis `a `fis `a `fis ] |
+       [ 'd 'fis 'a 'fis 'a 'fis ] |
 %%55
-       [ ``a `e `g `e `g `e ] |
+       [ ''a 'e 'g 'e 'g 'e ] |
 %%56
-       [ ``d ``a `d ``a `d ``a ] |
+       [ ''d ''a 'd ''a 'd ''a ] |
 %%57
-       [ ``d ``a `d ``a `d ``a ]
+       [ ''d ''a 'd ''a 'd ''a ]
 %%58
-       < `d2.^\fermata ``d2. > |
+       < 'd2.^\fermata ''d2. > |
  }
 
 
@@ -447,7 +447,7 @@ tekstII= \lyrics {
        \music { tekstI }
        \music { tekstII }
        }
-% Setting up music ...lilypond: ../flower/include/cursor.inl:98: class Cursor<void *> Cursor<void *>::operator ++(int): Assertion `pointer_' failed.
+% Setting up music ...lilypond: ../flower/include/cursor.inl:98: class Cursor<void *> Cursor<void *>::operator ++(int): Assertion 'pointer_' failed.
 %IOT trap/Abort
 % als geen music in staff
        \staff { 
index 14f6030cc70e7c45a804e3c64d1cfe0172a30004..6a2bf0dd9d4337adeda4c81ea06f8974d40c7a7b 100644 (file)
@@ -6,7 +6,7 @@
 
 melodie = \music {
        \clef\violin
-       c c | g g | a a | g g |
+       c4 c | g g | a a | g g |
        f f | e e | d d8.( e16 | )c2 | % :|
 
        g g | f f | e e | d d |
@@ -20,7 +20,7 @@ melodie = \music {
 
 begeleiding = \music {
        \clef \bass
-       \octave{`}
+       \octave{-1}
        c c' | e' c' | f' c' | e' c' | 
        d' b | c' a | f g | c2 | 
 
index 921cdbb983f4fa34c1122b205f1ed9ed35fd2f36..9e3389a370ea302da1d3d1c1114f27a376fd532e 100644 (file)
@@ -6,13 +6,15 @@
 %
 global=\music{\meter {4/4}
                \grouping {2*2}
-               \key {bes es as}}
+               \key {bes es as}
+
+}
 
 dux = \music { 
-       \clef \violin
+       \clef \violin\octave{1}
        \duration { \last }
-       
-        r8-"dux"       \stem{-1}
+       \stem{-1}
+        r8-"dux"       
        [c'16 b] [c'8 g] [as c'16 b] [c'8 d'] |
        [g c'16 b] [c'8 d'] [f16 g] as4 [g16 f] |
        [es c' b a] [ g f es d] [c8 es' d' c'] |
@@ -24,22 +26,21 @@ dux = \music {
 }
 
 comes = \music { 
-       \octave {'}
-       r1      \stem{1}
- |
+       \octave {2}\stem{1}
+       r1 |
        r1 |
        r8-"comes" [g16 fis] [g8 c] [es g16 f] [g8 a]|
        [d8 g16 fis] [g8 a] [c16 d] es4 [d16 c] |
-       [`bes8 es16 d] [es8 `g8] [`as f16 es] [f8 `a] 
-       [`bes8 g16 f] [g8 `b] [c8 d16 es] f4( |
-       [) f8 es16 d] [c16 `bes `as `g] [`f8 as g f] 
-       [es d es f] [`b c d `b] |
+       ['bes8 es16 d] [es8 'g8] ['as f16 es] [f8 'a] 
+       ['bes8 g16 f] [g8 'b] [c8 d16 es] f4( |
+       [) f8 es16 d] [c16 'bes 'as 'g] ['f8 as g f] 
+       [es d es f] ['b c d 'b] |
        
 }
 
 bassdux = \music { 
        \clef \bass
-       \octave { }
+       \octave {1}
        r1 |
        r |
        r |
index 34f6645de6600e147b0701207000ca9df512a5fa..f080c2dab2372c89a6e60cc7be402bc66678f1a1 100644 (file)
@@ -34,8 +34,8 @@ Binary_source_file::error_str( char const* pos_ch_c_l )
     if ( !in_b( pos_ch_c_l ) )
        return "";
 
-    char const* begin_ch_c_l = pos_ch_c_l - 8 >? ch_c_l();
-    char const* end_ch_c_l = pos_ch_c_l + 7 <? ch_c_l() + length_off();
+    char const* begin_ch_c_l = pos_ch_c_l - 8 >? ch_C();
+    char const* end_ch_c_l = pos_ch_c_l + 7 <? ch_C() + length_off();
 
     String pre_str( (Byte const*)begin_ch_c_l, pos_ch_c_l - begin_ch_c_l );
     pre_str = String_convert::bin2hex_str( pre_str );
@@ -59,6 +59,6 @@ Binary_source_file::line_i( char const* pos_ch_c_l )
     if ( !in_b( pos_ch_c_l ) )
        return 0;
 
-    return pos_ch_c_l - ch_c_l();
+    return pos_ch_c_l - ch_C();
 }
 
diff --git a/lib/duration-convert.cc b/lib/duration-convert.cc
new file mode 100644 (file)
index 0000000..bb4d4fe
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+  duration-convert.cc -- implement 
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include <assert.h>
+#include "duration-convert.hh"
+#include "debug.hh"
+
+// statics Duration_convert
+bool Duration_convert::be_blonde_b_s = false;
+bool Duration_convert::no_double_dots_b_s = false;
+bool Duration_convert::no_triplets_b_s = false;
+int Duration_convert::no_smaller_than_i_s = 0;
+       
+String 
+Duration_convert::dur2_str( Duration dur )
+{
+       if ( dur.ticks_i_ )
+               return String( "["  ) + String( dur.ticks_i_ ) + "]";
+
+       String str( dur.type_i_ );
+       str += String( '.', dur.dots_i_ );
+       if ( dur.plet_b())
+               str += String( "*" ) + String( dur.plet_.iso_i_ )
+                       + String( "/" ) + String( dur.plet_.type_i_ );
+       return str;
+}
+
+#if 0
+int
+Duration_convert::dur2_i( Duration dur, int division_1_i )
+{
+       return dur2_mom( dur ) * Moment( division_1_i );
+}
+#endif
+
+int
+Duration_convert::dur2ticks_i( Duration dur )
+{
+       if ( dur.ticks_i_ )
+               return dur.ticks_i_;
+       return dur2_mom( dur ) * Moment( Duration::division_1_i_s );
+}
+
+Moment
+Duration_convert::dur2_mom( Duration dur )
+{
+       if ( dur.ticks_i_ )
+               return Moment( dur.ticks_i_, Duration::division_1_i_s );        
+
+       // or simply assert?
+       if ( !dur.type_i_ )
+               return Moment( 0 );
+
+       Moment mom = Moment( 1 , dur.type_i_ );
+
+       Moment delta = mom;
+       while ( dur.dots_i_-- ) {
+               delta /= 2.0;
+               mom += delta;
+       }
+
+       return mom * plet_factor_mom( dur );    
+}
+
+#if 0
+Moment
+Duration_convert::i2_mom( int time_i, int division_1_i )
+{
+       if ( !time_i )
+               return Moment( 0 );
+
+       if ( division_1_i > 0 )
+               return Moment( time_i, division_1_i );
+       else 
+               return Moment( -division_1_i, time_i );
+}
+#endif
+
+#if 0
+Duration
+Duration_convert::mom2_dur( Moment mom )
+{
+       /* this is cute, 
+          but filling an array using Duration_iterator
+          might speed things up, a little
+          */
+       Duration_iterator iter_dur;
+       assert( iter_dur );
+       while ( iter_dur ) {
+               Duration lower_dur = iter_dur++;
+               Duration upper_dur( 0 );
+               if ( iter_dur )
+                       upper_dur = iter_dur();
+               Moment lower_mom = dur2_mom( lower_dur );
+               Moment upper_mom = dur2_mom( upper_dur );
+               if ( mom == lower_mom )
+                       return lower_dur;
+               if ( mom == upper_mom ) // don-t miss last (sic)
+                       return upper_dur;
+               if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) {
+                       warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 );
+                       if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) )
+                               return lower_dur;
+                       else
+                               return upper_dur;
+               }
+               lower_dur = upper_dur;
+       }
+       return Duration( 0 );
+}
+#endif
+
+Moment
+Duration_convert::plet_factor_mom( Duration dur )
+{
+       return dur.plet_.mom();
+}
+
+Real
+Duration_convert::sync_f( Duration dur, Moment mom )
+{
+       return mom / dur2_mom( dur );
+}
+
+Duration
+Duration_convert::ticks2_dur( int ticks_i )
+{
+       /* this is cute, 
+          but filling an array using Duration_iterator
+          might speed things up, a little
+          */
+       Moment mom( ticks_i, Duration::division_1_i_s );
+       Duration_iterator iter_dur;
+       assert( iter_dur );
+       while ( iter_dur ) {
+               Duration dur = iter_dur++;
+               if ( mom == dur2_mom( dur ) )
+                       return dur;
+       }
+       Duration dur( 0 );
+       dur.set_ticks( ticks_i );
+       return dur;
+}
+
+Duration
+Duration_convert::ticks2standardised_dur( int ticks_i )
+{
+       /* this is cute, 
+          but filling an array using Duration_iterator
+          might speed things up, a little
+          */
+       Moment mom( ticks_i, Duration::division_1_i_s );
+       Duration_iterator iter_dur;
+       assert( iter_dur );
+       while ( iter_dur ) {
+               Duration lower_dur = iter_dur++;
+//             Duration upper_dur( 0 );
+               Duration upper_dur( 1, 1 );
+               if ( iter_dur )
+                       upper_dur = iter_dur();
+               Moment lower_mom = dur2_mom( lower_dur );
+               Moment upper_mom = dur2_mom( upper_dur );
+               if ( mom < lower_mom )
+                       return lower_dur;
+               if ( mom == lower_mom )
+                       return lower_dur;
+               if ( mom == upper_mom ) // don-t miss last (sic)
+                       return upper_dur;
+               if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) {
+                       warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 );
+                       if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) )
+                               return lower_dur;
+                       else
+                               return upper_dur;
+               }
+               lower_dur = upper_dur;
+       }
+       return iter_dur();
+}
+
+Duration_iterator::Duration_iterator()
+{
+       cursor_dur_.type_i_ = 128;
+       if ( Duration_convert::no_smaller_than_i_s )
+               cursor_dur_.type_i_ = Duration_convert::no_smaller_than_i_s;
+       cursor_dur_.set_plet( 0,1 ); // ugh?
+}
+
+Duration 
+Duration_iterator::operator ++(int)
+{
+       return forward_dur();
+}
+
+Duration
+Duration_iterator::operator ()()
+{
+       return dur();
+}
+
+Duration_iterator::operator bool()
+{
+       return ok();
+}
+
+Duration
+Duration_iterator::dur()
+{
+       return cursor_dur_;
+}
+
+Duration
+Duration_iterator::forward_dur()
+{
+       /* should do smart table? guessing: 
+               duration wholes
+               16      0.0625
+               32..    0.0703
+               8:2/3   0.0833
+               16.     0.0938
+               8       0.1250
+               16..    0.1406
+               4:2/3   0.1667
+               8.      0.1875
+               
+       */
+       assert( ok() );
+
+       Duration dur = cursor_dur_;
+
+       if ( !cursor_dur_.dots_i_ && !cursor_dur_.plet_b() ) {
+               cursor_dur_.type_i_ *= 2;
+               cursor_dur_.dots_i_ = 2;
+       }
+       else if ( cursor_dur_.dots_i_ == 2 ) {
+               assert( !cursor_dur_.plet_b() );
+               cursor_dur_.dots_i_ = 0;
+               cursor_dur_.type_i_ /= 4;
+               cursor_dur_.set_plet( 2, 3  );
+       }
+       else if ( cursor_dur_.plet_b() 
+               && ( cursor_dur_.plet_.iso_i_ == 2 )
+               && ( cursor_dur_.plet_.type_i_ == 3 ) ) {
+               assert( !cursor_dur_.dots_i_ );
+               cursor_dur_.set_plet( 0,1 );
+               cursor_dur_.type_i_ *= 2;
+               cursor_dur_.dots_i_ = 1;
+       }
+       else if ( cursor_dur_.dots_i_ == 1 ) {
+               assert( !cursor_dur_.plet_b() );
+               cursor_dur_.dots_i_ = 0;
+               cursor_dur_.type_i_ /= 2;
+       }
+               
+       if ( Duration_convert::no_triplets_b_s
+            && cursor_dur_.plet_b() && ok() )
+           forward_dur();
+       if ( Duration_convert::no_double_dots_b_s 
+            && ( cursor_dur_.dots_i_ == 2 ) && ok() )
+               forward_dur();
+       if ( Duration_convert::no_smaller_than_i_s
+            && ( cursor_dur_.type_i_ > Duration_convert::no_smaller_than_i_s ) && ok() )
+               forward_dur();
+       if ( Duration_convert::no_smaller_than_i_s
+            && cursor_dur_.dots_i_
+            && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s )
+            && ok() )
+               forward_dur();
+       if ( Duration_convert::no_smaller_than_i_s
+            && ( cursor_dur_.dots_i_ == 2 )
+            && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s / 2 )
+            && ok() )
+               forward_dur();
+
+       return dur;
+}
+
+bool
+Duration_iterator::ok()
+{
+       return ( cursor_dur_.type_i_ 
+               && !( ( cursor_dur_.type_i_ == 1 ) && ( cursor_dur_.dots_i_ > 2 ) ) );
+}
index 5504ed6e35431b70bbab14ace1844888a03ee413..e341d75831895155db2a1b09f1bb49b0ebe73278 100644 (file)
@@ -1,7 +1,12 @@
-//
-// duration.cc -- implement Duration, Plet, Duration_convert, Duration_iterator
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
+/*
+  duration.cc -- implement Duration, Plet, 
+
+  source file of the LilyPond music typesetter
+
+  copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
 
 // split into 4?
 
 #include "moment.hh"
 #include "duration.hh"
 #include "debug.hh"  //ugh
+#include "duration-convert.hh"
 
 // statics Duration
 int Duration::division_1_i_s = 384 * 4;
 
-Duration::Duration( int type_i, int dots_i = 0, Plet* plet_l )
+Duration::Duration( int type_i, int dots_i = 0)
 {
        type_i_ = type_i;
        dots_i_ = dots_i;
-       plet_p_ = 0;
-       ticks_i_ = 0;
-       set_plet( plet_l );
-}
-
-Duration::Duration( Duration const& dur_c_r )
-{
-       type_i_ = 0;
-       dots_i_ = 0;
-       plet_p_ = 0;
        ticks_i_ = 0;
-       *this = dur_c_r;
-}
-
-Duration::~Duration()
-{
-       delete plet_p_;
 }
-
-Duration const& 
-Duration::operator =( Duration const& dur_c_r )
+void
+Duration::set_plet(int i, int t)
 {
-       if ( &dur_c_r == this )
-               return *this;
-
-       type_i_ = dur_c_r.type_i_;
-       dots_i_ = dur_c_r.dots_i_;
-       ticks_i_ = dur_c_r.ticks_i_;
-       set_plet( dur_c_r.plet_p_ );
-
-       return *this;
+    plet_.iso_i_ = i; 
+    plet_.type_i_ = t;
 }
 
-void
-Duration::set_plet( Plet* plet_l )
+Moment
+Duration::length() const
 {
-       delete plet_p_;
-       plet_p_ = 0;
-       if ( plet_l )
-               plet_p_ = new Plet( *plet_l );
+    return Duration_convert::dur2_mom(*this);
 }
-
 void
 Duration::set_ticks( int ticks_i )
 {
        assert( !type_i_ );
        assert( !dots_i_ );
-       assert( !plet_p_ );
        ticks_i_ = ticks_i;
 }
-
+String
+Duration::str()const
+{
+    return Duration_convert::dur2_str(*this);
+}
 Plet::Plet( int iso_i, int type_i )
 {
        iso_i_ = iso_i;
        type_i_ = type_i;
 }
-
-
-// statics Duration_convert
-bool Duration_convert::be_blonde_b_s = false;
-bool Duration_convert::no_double_dots_b_s = false;
-bool Duration_convert::no_triplets_b_s = false;
-int Duration_convert::no_smaller_than_i_s = 0;
-       
-String 
-Duration_convert::dur2_str( Duration dur )
-{
-       if ( dur.ticks_i_ )
-               return String( "["  ) + String( dur.ticks_i_ ) + "]";
-
-       String str( dur.type_i_ );
-       str += String( '.', dur.dots_i_ );
-       if ( dur.plet_p_ )
-               str += String( "*" ) + String( dur.plet_p_->iso_i_ )
-                       + String( "/" ) + String( dur.plet_p_->type_i_ );
-       return str;
-}
-
-#if 0
-int
-Duration_convert::dur2_i( Duration dur, int division_1_i )
-{
-       return dur2_mom( dur ) * Moment( division_1_i );
-}
-#endif
-
-int
-Duration_convert::dur2ticks_i( Duration dur )
-{
-       if ( dur.ticks_i_ )
-               return dur.ticks_i_;
-       return dur2_mom( dur ) * Moment( Duration::division_1_i_s );
-}
-
-Moment
-Duration_convert::dur2_mom( Duration dur )
-{
-       if ( dur.ticks_i_ )
-               return Moment( dur.ticks_i_, Duration::division_1_i_s );        
-
-       // or simply assert?
-       if ( !dur.type_i_ )
-               return Moment( 0 );
-
-       Moment mom = Moment( 1 , dur.type_i_ );
-
-       Moment delta = mom;
-       while ( dur.dots_i_-- ) {
-               delta /= 2.0;
-               mom += delta;
-       }
-
-       return mom * plet_factor_mom( dur );    
-}
-
-#if 0
-Moment
-Duration_convert::i2_mom( int time_i, int division_1_i )
-{
-       if ( !time_i )
-               return Moment( 0 );
-
-       if ( division_1_i > 0 )
-               return Moment( time_i, division_1_i );
-       else 
-               return Moment( -division_1_i, time_i );
-}
-#endif
-
-#if 0
-Duration
-Duration_convert::mom2_dur( Moment mom )
-{
-       /* this is cute, 
-          but filling an array using Duration_iterator
-          might speed things up, a little
-          */
-       Duration_iterator iter_dur;
-       assert( iter_dur );
-       while ( iter_dur ) {
-               Duration lower_dur = iter_dur++;
-               Duration upper_dur( 0 );
-               if ( iter_dur )
-                       upper_dur = iter_dur();
-               Moment lower_mom = dur2_mom( lower_dur );
-               Moment upper_mom = dur2_mom( upper_dur );
-               if ( mom == lower_mom )
-                       return lower_dur;
-               if ( mom == upper_mom ) // don-t miss last (sic)
-                       return upper_dur;
-               if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) {
-                       warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 );
-                       if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) )
-                               return lower_dur;
-                       else
-                               return upper_dur;
-               }
-               lower_dur = upper_dur;
-       }
-       return Duration( 0 );
-}
-#endif
-
 Moment
-Duration_convert::plet_factor_mom( Duration dur )
-{
-       if ( !dur.plet_p_ )
-               return 1;
-       return Moment( dur.plet_p_->iso_i_, dur.plet_p_->type_i_ );
-}
-
-Real
-Duration_convert::sync_f( Duration dur, Moment mom )
-{
-       return mom / dur2_mom( dur );
-}
-
-Duration
-Duration_convert::ticks2_dur( int ticks_i )
-{
-       /* this is cute, 
-          but filling an array using Duration_iterator
-          might speed things up, a little
-          */
-       Moment mom( ticks_i, Duration::division_1_i_s );
-       Duration_iterator iter_dur;
-       assert( iter_dur );
-       while ( iter_dur ) {
-               Duration dur = iter_dur++;
-               if ( mom == dur2_mom( dur ) )
-                       return dur;
-       }
-       Duration dur( 0 );
-       dur.set_ticks( ticks_i );
-       return dur;
-}
-
-Duration
-Duration_convert::ticks2standardised_dur( int ticks_i )
+Plet::mom()const
 {
-       /* this is cute, 
-          but filling an array using Duration_iterator
-          might speed things up, a little
-          */
-       Moment mom( ticks_i, Duration::division_1_i_s );
-       Duration_iterator iter_dur;
-       assert( iter_dur );
-       while ( iter_dur ) {
-               Duration lower_dur = iter_dur++;
-//             Duration upper_dur( 0 );
-               Duration upper_dur( 1, 1 );
-               if ( iter_dur )
-                       upper_dur = iter_dur();
-               Moment lower_mom = dur2_mom( lower_dur );
-               Moment upper_mom = dur2_mom( upper_dur );
-               if ( mom < lower_mom )
-                       return lower_dur;
-               if ( mom == lower_mom )
-                       return lower_dur;
-               if ( mom == upper_mom ) // don-t miss last (sic)
-                       return upper_dur;
-               if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) {
-                       warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 );
-                       if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) )
-                               return lower_dur;
-                       else
-                               return upper_dur;
-               }
-               lower_dur = upper_dur;
-       }
-       return iter_dur();
+    return  Moment( iso_i_, type_i_ );
 }
 
-Duration_iterator::Duration_iterator()
+Plet::Plet()
 {
-       cursor_dur_.type_i_ = 128;
-       if ( Duration_convert::no_smaller_than_i_s )
-               cursor_dur_.type_i_ = Duration_convert::no_smaller_than_i_s;
-       cursor_dur_.set_plet( 0 );
+    type_i_ = 1;
+    iso_i_ = 1;
 }
-
-Duration 
-Duration_iterator::operator ++(int)
-{
-       return forward_dur();
-}
-
-Duration
-Duration_iterator::operator ()()
-{
-       return dur();
-}
-
-Duration_iterator::operator bool()
-{
-       return ok();
-}
-
-Duration
-Duration_iterator::dur()
+bool
+Plet::unit_b()const
 {
-       return cursor_dur_;
+    return type_i_ == 1 && iso_i_ == 1;
 }
-
-Duration
-Duration_iterator::forward_dur()
-{
-       // should do smart table? guessing: 
-       //      duration wholes
-       //      16      0.0625
-       //      32..    0.0703
-       //      8:2/3   0.0833
-       //      16.     0.0938
-       //      8       0.1250
-       //      16..    0.1406
-       //      4:2/3   0.1667
-       //      8.      0.1875
-
-       assert( ok() );
-
-       Duration dur = cursor_dur_;
-
-       if ( !cursor_dur_.dots_i_ && !cursor_dur_.plet_p_ ) {
-               cursor_dur_.type_i_ *= 2;
-               cursor_dur_.dots_i_ = 2;
-       }
-       else if ( cursor_dur_.dots_i_ == 2 ) {
-               assert( !cursor_dur_.plet_p_ );
-               cursor_dur_.dots_i_ = 0;
-               cursor_dur_.type_i_ /= 4;
-               cursor_dur_.set_plet( &Plet( 2, 3 ) );
-       }
-       else if ( cursor_dur_.plet_p_ 
-               && ( cursor_dur_.plet_p_->iso_i_ == 2 )
-               && ( cursor_dur_.plet_p_->type_i_ == 3 ) ) {
-               assert( !cursor_dur_.dots_i_ );
-               cursor_dur_.set_plet( 0 );
-               cursor_dur_.type_i_ *= 2;
-               cursor_dur_.dots_i_ = 1;
-       }
-       else if ( cursor_dur_.dots_i_ == 1 ) {
-               assert( !cursor_dur_.plet_p_ );
-               cursor_dur_.dots_i_ = 0;
-               cursor_dur_.type_i_ /= 2;
-       }
-               
-       if ( Duration_convert::no_triplets_b_s && cursor_dur_.plet_p_ && ok() )
-               forward_dur();
-       if ( Duration_convert::no_double_dots_b_s && ( cursor_dur_.dots_i_ == 2 ) && ok() )
-               forward_dur();
-       if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.type_i_ > Duration_convert::no_smaller_than_i_s ) && ok() )
-               forward_dur();
-       if ( Duration_convert::no_smaller_than_i_s && cursor_dur_.dots_i_ && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s ) && ok() )
-               forward_dur();
-       if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.dots_i_ == 2 ) && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s / 2 ) && ok() )
-               forward_dur();
-
-       return dur;
-}
-
 bool
-Duration_iterator::ok()
+Duration::plet_b()
 {
-       return ( cursor_dur_.type_i_ 
-               && !( ( cursor_dur_.type_i_ == 1 ) && ( cursor_dur_.dots_i_ > 2 ) ) );
+    return !plet_.unit_b();
 }
diff --git a/lib/includable-lexer.cc b/lib/includable-lexer.cc
new file mode 100644 (file)
index 0000000..f394907
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+  includable-lexer.cc -- implement Includable_lexer
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "includable-lexer.hh"
+#include "source-file.hh"
+#include "source.hh"
+
+Includable_lexer::Includable_lexer()
+{
+    yy_current_buffer = 0;
+}
+
+/** set the  new input to s, remember old file.
+*/
+void
+Includable_lexer::new_input(String s, Sources  * global_sources)
+{
+    Source_file * sl = global_sources->get_file_l(s);
+    if (!sl) {
+       LexerError("can't find file");
+       return; 
+    }
+    char_count_stack_.push(0);
+    if (yy_current_buffer) 
+       state_stack_.push(yy_current_buffer);
+    cout << "[" << s<<flush;
+    include_stack_.push(sl);    
+    
+    // ugh. We'd want to create a buffer from the bytes directly.
+    yy_switch_to_buffer(yy_create_buffer( sl->istream_l(), sl->length_off() )); 
+}
+
+/** pop the inputstack.  conceptually this is a destructor, but it
+  does not destruct the Source_file it creates.  */
+bool
+Includable_lexer::close_input()
+{
+    include_stack_.pop();
+    char_count_stack_.pop();
+    cout << "]"<<flush;
+    yy_delete_buffer(yy_current_buffer );
+    if (state_stack_.empty()) {
+       yy_current_buffer = 0;
+       return false;
+    }else {
+       yy_switch_to_buffer(state_stack_.pop());
+       return true;
+    }    
+}
+
+char const*
+Includable_lexer::here_ch_C()
+{
+    if (include_stack_.empty())
+       return 0;
+    return include_stack_.top()->ch_C() + char_count_stack_.top();
+}
+
+Includable_lexer::~Includable_lexer()
+{
+    while (!include_stack_.empty()) {
+       close_input();
+    };
+}
+/** 
+  Since we don't create the buffer state from the bytes directly, we
+  don't know about the location of the lexer. Add this as a
+  YY_USER_ACTION */
+void
+Includable_lexer::add_lexed_char(int count)
+{
+    char_count_stack_.top() += count;
+}
index 1af35631bec325cae225f6c600e06910527a00e9..bc8279f6abe54044a5e4867fda833f9ff8adeed4 100644 (file)
@@ -6,6 +6,8 @@
 #ifndef BINARY_SOURCE_FILE_HH
 #define BINARY_SOURCE_FILE_HH
 
+#include "source-file.hh"
+
 class Binary_source_file : public Source_file {
 public:
        Binary_source_file( String& filename_str );
diff --git a/lib/include/duration-convert.hh b/lib/include/duration-convert.hh
new file mode 100644 (file)
index 0000000..9c8b53d
--- /dev/null
@@ -0,0 +1,103 @@
+
+/*
+         duration-convert.hh -- declare 
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef DURATION_CONVERT_HH
+#define DURATION_CONVERT_HH
+#include "duration.hh"
+#include "string.hh"
+
+/**
+       Duration_convert handles all conversions to -n fro Duration (dur).
+       That is including (integer + division) representation for MIDI,
+       and conversion from unexact time representation (best guess :-).
+
+       A Moment (mom) is a Rational that holds the time fraction 
+       compared to a whole note (before also called wholes).
+
+       SUGGESTION: currently a moment in time is called moment too;
+       let-s typedef Rational When too, so that we get 
+       When Staff_column::when(), Moment Voice_element::mom().
+*/
+struct Duration_convert {
+       
+    /* Urgh. statics.
+     */
+    static bool be_blonde_b_s; // cute, but not informative. everythiing is blonde, right? HW
+    static bool no_double_dots_b_s;
+    static bool no_triplets_b_s;
+    static int no_smaller_than_i_s;
+
+//     /// Most used division in MIDI, all fine with me.
+//     static int const division_1_c_i = 384;
+
+//     /// Return (integer, division) representation.
+//     static int dur2_i( Duration dur, int division_1_i = division_1_c_i );
+
+    /// Return number of ticks in (ticks, division_1) representation
+    static int dur2ticks_i( Duration dur );
+       
+    /// Return Moment representation (fraction of whole note).
+    static Moment dur2_mom( Duration dur );
+
+    /// Return Mudela string representation.
+    static String dur2_str( Duration dur );
+
+//     /// Return Moment from (integer, division) representation.
+//     static Moment i2_mom( int i, int division_1_i = division_1_c_i );
+
+//     /// Return Moment (fraction of whole) representation, best guess.
+//     static Duration mom2_dur( Moment mom );
+
+    /// Return plet factor (not a Moment: should use Rational?).
+    static Moment plet_factor_mom( Duration dur );
+
+    /** Return synchronisation factor for mom, so that
+      mom2_dur( mom / sync_f ) will return the duration dur.           
+      */ 
+    static Real sync_f( Duration dur, Moment mom );
+
+    /// Return exact duration, in midi-ticks if not-exact.
+    static Duration ticks2_dur( int ticks_i );
+
+    /// Return standardised duration, best guess if not exact.
+    static Duration ticks2standardised_dur( int ticks_i );
+};
+
+/// (iter_dur)
+struct Duration_iterator {
+    /// start at shortest: 128:2/3
+    Duration_iterator();
+
+    // **** what about these three here ?
+    /// return forward_dur();
+    Duration operator ++(int); 
+
+    /// return ok()
+    operator bool(); 
+
+    /// return dur()
+    Duration operator ()(); 
+    // ****
+
+    /// return current dur
+    Duration dur();
+
+    /// return dur(), step to next
+    Duration forward_dur();
+
+    /// durations left?
+    bool ok();
+
+private:
+    Duration cursor_dur_;
+};
+
+
+#endif // DURATION_CONVERT_HH
index 5c562859548f7c3abe8a84b11aa255982a180c4d..de576e9884d78f275f2a7207e80ae0adff73acb6 100644 (file)
-//
-// duration.hh -- declare Duration, Plet, Duration_convert Duration_iterator
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
+/*
+  duration.hh -- declare Duration Plet
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+
+*/
 
 // split into 4?
 
 #ifndef DURATION_HH
 #define DURATION_HH
 
+#include "fproto.hh"
+#include "moment.hh"
+
 // ugh, to get me in lily lib
 extern bool no_triplets_bo_g;
 
-/// (dur)
-struct Duration {
-       // actually i hate it when other people use default arguments,
-       // because it makes you easily loose track of what-s really
-       // happening; in the routine-s implementation you-re not aware
-       // of this defaultness (who sets this stupid value?).
-       Duration( int type_i = 1, int dots_i = 0, Plet* plet_p = 0 );
-       Duration( Duration const& dur_c_r );
-       ~Duration();
-
-       Duration const& operator =( Duration const& dur_c_r );
-
-       void set_plet( Plet* plet_l ); // handiger: newt zelf
-       void set_ticks( int ticks_i );
-
-       static int division_1_i_s;
-       int type_i_;
-       int dots_i_;
-       Plet* plet_p_;
-       int ticks_i_;
-};
-
-/// (plet)
+/** (plet)
+  The type and replacement value of a  plet (triplet, quintuplet.) Conceptually the same as a rational, but 4/6 != 2/3 
+ */
 struct Plet {
-       Plet( int replace_i, int type_i );
-       
+    Plet( int replace_i, int type_i );
+    Plet();
+    Moment mom()const;
+    bool unit_b()const;
     int iso_i_;  // 2/3; 2 is not duration, maar of count!
-       int type_i_;
+    int type_i_;
 };
 
 /**
-       Duration_convert handles all conversions to -n fro Duration (dur).
-       That is including (integer + division) representation for MIDI,
-       and conversion from unexact time representation (best guess :-).
-
-       A Moment (mom) is a Rational that holds the time fraction 
-       compared to a whole note (before also called wholes).
-
-       SUGGESTION: currently a moment in time is called moment too;
-       let-s typedef Rational When too, so that we get 
-       When Staff_column::when(), Moment Voice_element::mom().
-*/
-struct Duration_convert {
-       static bool be_blonde_b_s;
-       static bool no_double_dots_b_s;
-       static bool no_triplets_b_s;
-       static int no_smaller_than_i_s;
-
-//     /// Most used division in MIDI, all fine with me.
-//     static int const division_1_c_i = 384;
-
-//     /// Return (integer, division) representation.
-//     static int dur2_i( Duration dur, int division_1_i = division_1_c_i );
-
-       /// Return number of ticks in (ticks, division_1) representation
-       static int dur2ticks_i( Duration dur );
-       
-       /// Return Moment representation (fraction of whole note).
-       static Moment dur2_mom( Duration dur );
-
-       /// Return Mudela string representation.
-       static String dur2_str( Duration dur );
-
-//     /// Return Moment from (integer, division) representation.
-//     static Moment i2_mom( int i, int division_1_i = division_1_c_i );
-
-//     /// Return Moment (fraction of whole) representation, best guess.
-//     static Duration mom2_dur( Moment mom );
-
-       /// Return plet factor (not a Moment: should use Rational?).
-       static Moment plet_factor_mom( Duration dur );
-
-       /** Return synchronisation factor for mom, so that
-           mom2_dur( mom / sync_f ) will return the duration dur.              
-       */ 
-       static Real sync_f( Duration dur, Moment mom );
-
-       /// Return exact duration, in midi-ticks if not-exact.
-       static Duration ticks2_dur( int ticks_i );
-
-       /// Return standardised duration, best guess if not exact.
-       static Duration ticks2standardised_dur( int ticks_i );
-};
-
-/// (iter_dur)
-struct Duration_iterator {
-       /// start at shortest: 128:2/3
-       Duration_iterator();
-
-       // **** what about these three here ?
-       /// return forward_dur();
-       Duration operator ++(int); 
-
-       /// return ok()
-       operator bool(); 
-
-       /// return dur()
-       Duration operator ()(); 
-       // ****
-
-       /// return current dur
-       Duration dur();
-
-       /// return dur(), step to next
-       Duration forward_dur();
-
-       /// durations left?
-       bool ok();
-
-private:
-       Duration cursor_dur_;
+  Class to handle "musical" durations. This means: balltype 1,2,4,etc. and dots.
+   
+  (dur)
+  */
+struct Duration {
+    /* actually i hate it when other people use default arguments,
+       because it makes you easily loose track of what-s really
+       happening; in the routine-s implementation you-re not aware
+       of this defaultness (who sets this stupid value?).*/
+    Duration( int type_i = 1, int dots_i = 0);
+    /// is the "plet factor" of this note != 1 ?
+    bool plet_b();
+    String str()const;
+    void set_plet(int,int );
+    void set_ticks( int ticks_i );
+    Moment length() const ;    // zo naai mij
+    static int division_1_i_s;
+    int type_i_;
+    int dots_i_;
+    Plet plet_;
+    int ticks_i_;
 };
-
 #endif // DURATION_HH
 
diff --git a/lib/include/includable-lexer.hh b/lib/include/includable-lexer.hh
new file mode 100644 (file)
index 0000000..3a07618
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  includable-lexer.hh -- declare 
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef INCLUDABLE_LEXER_HH
+#define INCLUDABLE_LEXER_HH
+#include "string.hh"
+#include <FlexLexer.h>
+#include "varray.hh"
+#include "fproto.hh"
+#include "proto.hh"
+
+// GIGA urg!
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+/**
+  an yyFlexLexer child with provisions for inclusion.
+ */
+class Includable_lexer : public yyFlexLexer {
+    Array<YY_BUFFER_STATE> state_stack_;
+protected:
+    bool  close_input();
+    Array<Source_file*> include_stack_;
+    Array<int> char_count_stack_;
+public:
+    void new_input(String s,Sources*);
+    Includable_lexer();
+    ~Includable_lexer();
+    void add_lexed_char(int);
+    char const * here_ch_C();
+};
+
+
+#endif // INCLUDABLE_LEXER_HH
diff --git a/lib/include/input-file.hh b/lib/include/input-file.hh
deleted file mode 100644 (file)
index a01ea75..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  input-file.hh -- declare Input_file
-
-  source file of the LilyPond music typesetter
-
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#ifndef INPUT_FILE_HH
-#define INPUT_FILE_HH
-#include <FlexLexer.h>
-#include "proto.hh"
-#include "fproto.hh"
-#include "varray.hh"
-#include "string.hh"
-
-struct Input_file {
-       istream* is;
-       char const* defined_ch_c_l_;
-       Source_file* sourcefile_l_;
-       int line;
-       String name;
-
-       Input_file(String);
-       ~Input_file();
-};
-
-#endif // INPUT_FILE_HH
index a58e2969c1cfce33edb2dd6b3bf791cae052caed..32714730c7a9407a7f6f69e5cbd6af08676d0072 100644 (file)
@@ -131,7 +131,7 @@ struct Skip_req;
 struct Slur;
 struct Slur_register;
 struct Slur_req;
-struct Source;
+struct Sources;
 struct Source_file;
 struct Spacing_req ;
 struct Span_req;
index 7f7168eb7ec1f4ca1268227846a4c84b74b15325..6fdcc5d88a56dd6c2e7200df10d2fcaf2fe68b79 100644 (file)
@@ -5,19 +5,21 @@
 
 #ifndef SOURCE_FILE_HH
 #define SOURCE_FILE_HH
-
+#include "fproto.hh"
+#include "string.hh"
+class istream;
 /// class for reading and mapping a file. 
 class Source_file
 {
 public:
     /** Ugh! filename gets changed! The path to the opened file may
        change, since it might be searched in multiple directories.  */
-    Source_file( String& filename_str_r );
+    Source_file( String filename_str_r );
     virtual ~Source_file();
 
-    char const* ch_c_l();
+    char const* ch_C();
     virtual String error_str( char const* pos_ch_c_l );
-    istream* istream_l();
+    istream * istream_l();
     bool in_b( char const* pos_ch_c_l );
     off_t length_off();
     virtual int line_i( char const* pos_ch_c_l );
index 6c79b75a996de0df81fbe99ab3acfa4636cd6d31..05890f1310136adc2bcea635a8f9816a59ff6484 100644 (file)
@@ -5,22 +5,24 @@
 
 #ifndef SOURCE_HH
 #define SOURCE_HH
-
-class Source 
+#include "source-file.hh"
+#include "plist.hh"
+#include "path.hh"
+class Sources 
 {
 public:
-    Source();
-    ~Source();
-
-    void add( Source_file* sourcefile_p );
+    Source_file * get_file_l( String &filename );
     Source_file* sourcefile_l( char const* ch_c_l );
-
+    void set_path(File_path*p_C);
+    Sources();
+    void set_binary(bool);
 private:
+    const File_path * path_C_;
+    void add( Source_file* sourcefile_p );
     IPointerList<Source_file*> sourcefile_p_iplist_;
+    bool binary_b_ ;
 };
 
 
-// ugh
-extern Source* source_l_g;
 
 #endif // SOURCE_HH //
diff --git a/lib/input-file.cc b/lib/input-file.cc
deleted file mode 100644 (file)
index a0f1018..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  input-file.cc -- implement Input_file
-
-  source file of the LilyPond music typesetter
-
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl> Jan Nieuwenhuizen <jan@digicash.com>
-*/
-
-#include <iostream.h>
-#include <strstream.h>
-#include "proto.hh"
-#include "plist.hh"
-#include "input-file.hh"
-#include "debug.hh"
-#include "source-file.hh"
-#include "binary-source-file.hh"
-#include "source.hh"
-
-Input_file::Input_file(String s)
-{
-       name = s;
-       line = 1;
-       String pf(s);
-       if ( pf == "" ) {
-               is = &cin;
-               defined_ch_c_l_ = 0;
-               sourcefile_l_ = 0;
-       }
-       else {
-               Source_file* sourcefile_p = 0;
-               // ugh, very dirty, need to go away
-               if ( ( pf.right_str( 3 ).lower_str() == "mid" ) || ( pf.right_str( 4 ).lower_str() == "midi" ) )
-                   sourcefile_p = new Binary_source_file( pf );
-               else
-                   sourcefile_p = new Source_file( pf );
-               source_l_g->add( sourcefile_p );
-               sourcefile_l_ = sourcefile_p;
-               is = sourcefile_l_->istream_l();
-               defined_ch_c_l_ = sourcefile_l_->ch_c_l();
-       }
-       cout << "[" << pf << flush;
-}
-
-Input_file::~Input_file()
-{
-       cout << "]" << flush;  
-}
index a39a57cbfa276973f23840a513f26301c38e7bde..28ede975d6ac6cefed262325bf1bd5aaf02b0934 100644 (file)
 #include "proto.hh"
 #include "plist.hh"
 
-//#include "lexer.hh"
 
 #include "debug.hh"
 #include "windhoos-suck-suck-suck-thank-you-cygnus.hh"
-// #include "parseconstruct.hh" // defined_ch_c_l
-extern char const* defined_ch_c_l;
-
-// ugh
-// #include "main.hh"                  // find_file
-String find_file(String);
 
 #include "source-file.hh"
 
-Source_file::Source_file( String &filename_str )
+Source_file::Source_file( String filename_str )
 {
     data_caddr_ = 0;
     fildes_i_ = 0;
@@ -41,8 +34,21 @@ Source_file::Source_file( String &filename_str )
 
     open();
     map();
-    // ugh!?, should call name_str() ! 
-    filename_str = name_str_;
+}
+
+istream*
+Source_file::istream_l()
+{
+    assert( fildes_i_ );
+    if ( !istream_p_ ) {
+       if ( size_off_ ) // can-t this be done without such a hack?
+           istream_p_ = new istrstream( ch_C(), size_off_ );
+        else {
+           istream_p_ = new istrstream( "", 0 );
+           istream_p_->set(ios::eofbit);
+       }
+    }
+    return istream_p_;
 }
 
 Source_file::~Source_file()
@@ -54,7 +60,7 @@ Source_file::~Source_file()
 }
 
 char const*
-Source_file::ch_c_l()
+Source_file::ch_C()
 {
     assert( this );
     return (char const*)data_caddr_;
@@ -70,73 +76,52 @@ Source_file::close()
 }
 
 String
-Source_file::error_str( char const* pos_ch_c_l )
+Source_file::error_str( char const* pos_ch_C )
 {
-    assert( this );
-    if ( !in_b( pos_ch_c_l ) )
-       return "";
-
-    char const* begin_ch_c_l = pos_ch_c_l;
-    char const* data_ch_c_l = ch_c_l();
-    while ( begin_ch_c_l > data_ch_c_l )
-        if ( *--begin_ch_c_l == '\n' ) {
-           begin_ch_c_l++;
+    char const* data_ch_C = ch_C();
+    char const * eof_C_ = data_ch_C + size_off_;
+    if ( !in_b( pos_ch_C ) )
+       return "(position unknown)";
+
+    
+    if ( pos_ch_C == eof_C_)
+       pos_ch_C --;
+    char const* begin_ch_C = pos_ch_C;
+    while ( begin_ch_C > data_ch_C )
+        if ( *--begin_ch_C == '\n' ) {
+           begin_ch_C++;
            break;
        }
 
-    char const* end_ch_c_l = pos_ch_c_l;
-    while ( end_ch_c_l < data_ch_c_l + size_off_ )
-        if ( *end_ch_c_l++ == '\n' ) {
-           break;
+    char const* end_ch_C = pos_ch_C;
+    while ( end_ch_C < eof_C_ )
+        if ( *end_ch_C++ == '\n' ) {
+         end_ch_C--;
+         break;
        }
-    end_ch_c_l--;
-
-#if 1
-//    String( char const* p, int length ) is missing!?
-    String line_str( (Byte const*)begin_ch_c_l, end_ch_c_l - begin_ch_c_l );
-#else
-    int length_i = end_ch_c_l - begin_ch_c_l;
-    char* ch_p = new char[ length_i + 1 ];
-    strncpy( ch_p, begin_ch_c_l, length_i );
-    ch_p[ length_i ] = 0;
-    String line_str( ch_p );
-    delete ch_p;
-#endif
+  
+       //    String( char const* p, int length ) is missing!?
+    String line_str( (Byte const*)begin_ch_C, end_ch_C - begin_ch_C );
 
     int error_col_i = 0;
-    char const* scan_ch_c_l = begin_ch_c_l;
-    while ( scan_ch_c_l < pos_ch_c_l )
-       if ( *scan_ch_c_l++ == '\t' )
+    char const* scan_ch_C = begin_ch_C;
+    while ( scan_ch_C < pos_ch_C )
+       if ( *scan_ch_C++ == '\t' )
            error_col_i = ( error_col_i / 8 + 1 ) * 8;
        else
            error_col_i++;
 
-    String str = line_str.left_str( pos_ch_c_l - begin_ch_c_l ) 
+    String str = line_str.left_str( pos_ch_C - begin_ch_C ) 
        + String( '\n' )
        + String( ' ', error_col_i ) 
-       + line_str.mid_str( pos_ch_c_l - begin_ch_c_l, INT_MAX ); // String::mid should take 0 arg..
+       + line_str.mid_str( pos_ch_C - begin_ch_C, INT_MAX ); // String::mid should take 0 arg..
     return str;
 }
 
 bool
-Source_file::in_b( char const* pos_ch_c_l )
-{
-    return ( pos_ch_c_l && ( pos_ch_c_l >= ch_c_l() ) && ( pos_ch_c_l < ch_c_l() + size_off_ ) );
-}
-
-istream*
-Source_file::istream_l()
+Source_file::in_b( char const* pos_ch_C )
 {
-    assert( fildes_i_ );
-    if ( !istream_p_ ) {
-       if ( size_off_ ) // can-t this be done without such a hack?
-           istream_p_ = new istrstream( ch_c_l(), size_off_ );
-        else {
-           istream_p_ = new istrstream( "", 0 );
-           istream_p_->set(ios::eofbit);
-       }
-    }
-    return istream_p_;
+    return ( pos_ch_C && ( pos_ch_C >= ch_C() ) && ( pos_ch_C <= ch_C() + size_off_ ) );
 }
 
 off_t
@@ -146,15 +131,15 @@ Source_file::length_off()
 }
 
 int
-Source_file::line_i( char const* pos_ch_c_l )
+Source_file::line_i( char const* pos_ch_C )
 {
-    if ( !in_b( pos_ch_c_l ) )
+    if ( !in_b( pos_ch_C ) )
        return 0;
 
     int i = 1;
-    char const* scan_ch_c_l = ch_c_l();
-    while ( scan_ch_c_l < pos_ch_c_l )
-       if ( *scan_ch_c_l++ == '\n' )
+    char const* scan_ch_C = ch_C();
+    while ( scan_ch_C < pos_ch_C )
+       if ( *scan_ch_C++ == '\n' )
                i++;
     return i;
 }
@@ -168,8 +153,7 @@ Source_file::map()
     data_caddr_ = (caddr_t)mmap( (void*)0, size_off_, PROT_READ, MAP_SHARED, fildes_i_, 0 );
 
     if ( (int)data_caddr_ == -1 )
-       // ugh: defined_ch_c_l...
-       warning( String( "can't map: " ) + name_str_ + String( ": " ) + strerror( errno ), defined_ch_c_l ); //lexer->here_ch_c_l() );
+       warning( String( "can't map: " ) + name_str_ + String( ": " ) + strerror( errno ),  0);
 }
 
 String
@@ -181,14 +165,10 @@ Source_file::name_str()
 void
 Source_file::open()
 {
-    String name_str = find_file( name_str_ );
-    if ( name_str != "" ) 
-        name_str_ = name_str;
-
     fildes_i_ = ::open( name_str_, O_RDONLY ); 
            
     if ( fildes_i_ == -1 ) {
-       warning( String( "can't open: " ) + name_str_ + String( ": " ) + strerror( errno ), defined_ch_c_l ); // lexer->here_ch_c_l() );
+       warning( String( "can't open: " ) + name_str_ + String( ": " ) + strerror( errno ), 0 ); 
         return;
     }
 
@@ -207,8 +187,8 @@ Source_file::unmap()
     }
 }
 String
-Source_file::file_line_no_str(char const *ch_c_l )
+Source_file::file_line_no_str(char const *ch_C )
 {
     return name_str() + ": "
-       + String( line_i( ch_c_l ) );
+       + String( line_i( ch_C ) );
 }
index 8a8c52883591bfa49930fec798e3c9afc8746d81..3247c8d82c11d262af148cd8a612fc6dcdb23855 100644 (file)
@@ -1,36 +1,72 @@
-//
-// source.cc
-//
+/*
+  source.cc -- implement Source
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
 
 #include <assert.h>
 
+#include "binary-source-file.hh"
 #include "string.hh"
 #include "proto.hh"
 #include "plist.hh"
-
 #include "source-file.hh"
 #include "source.hh"
 
-Source::Source()
+void
+Sources::set_path(File_path *f_C)
+{
+    path_C_ = f_C;
+}
+
+/**
+  open a file
+
+  @param file_str the file to be opened, name might be changed if it
+  is found in a search path.
+
+  @return 0 if no file found
+  */
+Source_file*
+Sources::get_file_l(String &file_str )
 {
+    if (path_C_){
+       file_str = path_C_->find(file_str); 
+       if (file_str== "")
+           return 0;
+    }
+    Source_file * f_p= (!binary_b_) ?
+       new Source_file(file_str) : new Binary_source_file(file_str);
+    add(f_p);
+    return f_p;
 }
 
-Source::~Source()
+Sources::Sources()
 {
+    path_C_= 0;
+    binary_b_ = false;
 }
 
 void
-Source::add( Source_file* sourcefile_p )
+Sources::add( Source_file* sourcefile_p )
 {
     sourcefile_p_iplist_.bottom().add( sourcefile_p );
 }
 
+/**
+  search the list for file whose map contains pointer #ch_C#
+
+  @return 0 if not found.
+  */
 Source_file*
-Source::sourcefile_l( char const* ch_c_l )
+Sources::sourcefile_l( char const* ch_C )
 {
     PCursor<Source_file*> sourcefile_l_pcur( sourcefile_p_iplist_.top() );
     for ( ; sourcefile_l_pcur.ok(); sourcefile_l_pcur++ )
-       if ( sourcefile_l_pcur->in_b( ch_c_l ) )        
+       if ( sourcefile_l_pcur->in_b( ch_C ) )  
            return *sourcefile_l_pcur;
     return 0;
 }
diff --git a/lib/template.cc b/lib/template.cc
new file mode 100644 (file)
index 0000000..2e3d527
--- /dev/null
@@ -0,0 +1,6 @@
+#include "source-file.hh"
+#include "plist.tcc"
+#include "pcursor.tcc"
+
+
+IPL_instantiate(Source_file);
index 0ae4d984d1094a5bcafa4cebb0148ffb3fc0de4e..c74b79390bea349843bc063cfd81e3cd44a2d377 100644 (file)
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 0
-PATCH_LEVEL = 43
+PATCH_LEVEL = 44
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
index cb49063ad6e918a8a312de144bddbdca7e49d7fe..f052914063ee6cf391ec74d6e1620c0b714b4135 100644 (file)
@@ -69,7 +69,7 @@ include ./$(depth)/make/Rules.make
 
 # force these: Make can't know these have to be generated in advance
 my-lily-lexer.cc: $(outdir)/parser.hh
-lexer.l: $(outdir)/parser.hh
+$(outdir)/lexer.cc: $(outdir)/parser.hh
 
 #
 
index c7c0d05e3d5f61d64a4028c8c1ffa47c4e8518ad..c28443df62571a5884d0aaf2a0e53b8d51fc5b25 100644 (file)
@@ -35,7 +35,7 @@ Bar_register::process_requests()
 {
     if (bar_req_l_ ) {
        bar_p_ = new Bar(bar_req_l_->type_str_);
-    } else if (!get_staff_info().time_c_l_->whole_in_measure_) {
+    } else if (!get_staff_info().time_C_->whole_in_measure_) {
        bar_p_ = new Bar("|");
     }
     
index b4775721bb42992e7bb07ed9d7c8c32c31c838a1..2492703cdf9ae90b5576f5f4bbe714f913cdea05 100644 (file)
@@ -45,7 +45,7 @@ void
 Clef_register::read_req(Clef_change_req*c_l)
 {
     if (!set_type(c_l->clef_str_))
-       error("unknown clef type ", c_l->defined_ch_c_l_);
+       error("unknown clef type ", c_l->defined_ch_C_);
 }
 
 bool
@@ -65,7 +65,7 @@ Clef_register::try_request(Request * r_l)
 void
 Clef_register::process_requests()
 {
-    Time_description const *time_l = get_staff_info().time_c_l_;
+    Time_description const *time_l = get_staff_info().time_C_;
     if (!clef_req_l_ && (!time_l->whole_in_measure_|| !time_l->when_)) {
        clef_p_ = new Clef_item;
        clef_p_->change = false;
index 01a35bd140feeebda41d767aed18027df111149b..67bcd7068123eda280eef65618c368d2e6e13262 100644 (file)
@@ -4,11 +4,11 @@
 #include <stdlib.h>
 #include "debug.hh"
 #include "dstream.hh"
-#include "vector.hh"
+#include "flower-debug.hh"
 
 Dstream *monitor=0;
 ostream * nulldev =0;
-
+// ugh
 struct _Dinit {
     _Dinit() {
        nulldev = new ofstream("/dev/null");
@@ -44,7 +44,8 @@ debug_init()
 #ifndef NDEBUG
     set_new_handler(&mynewhandler);
 #endif
-    set_matrix_debug(*monitor);
+    set_flower_debug(*monitor, check_debug);
+    
     signal(SIGFPE, float_handler);
 }   
 
index 7f1a9bbae899ff49d2a56438f7f4681dc70b5670..93ea9b2d08e5ca8c1bc9492d500b773d08a1070c 100644 (file)
@@ -48,9 +48,8 @@ Notehead_register::process_requests()
        n_p->position = note_req_l_->note()->height() +
            *get_staff_info().c0_position_i_;
     } else {
-       note_p_ = new Rest ( note_req_l_->rhythmic()->balltype,
-                            note_req_l_->rhythmic()->dots);
-       if (note_req_l_->rhythmic()->balltype <= 2)
+       note_p_ = new Rest ( note_req_l_->rhythmic()->duration_);
+       if (note_req_l_->rhythmic()->duration_.type_i_ <= 2)
            note_p_->translate(
                Offset(0,
                       6 * paper()->internote()));
index a7468e03fa59f378cafb074089d3b2477e5b0374..36baf691c989ccb4f76956886418e88e28e46abd 100644 (file)
@@ -19,7 +19,7 @@
 /// the total music def of one movement
 struct Input_score {
     /// defined where?    
-    char const * defined_ch_c_l_;
+    char const * defined_ch_C_;
     int errorlevel_i_;
     
     /// paper_, staffs_ and commands_ form the problem definition.
index 23495bd74400996583b4cc026cb0e1023c64407b..25e1431162082ec463009fb974cc513da230c09a 100644 (file)
@@ -14,7 +14,7 @@
 
 struct Input_staff {
     
-    char const * defined_ch_c_l_;
+    char const * defined_ch_C_;
     String type;
     
     IPointerList<Input_music*> music_;
diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh
new file mode 100644 (file)
index 0000000..88b7ada
--- /dev/null
@@ -0,0 +1,2 @@
+struct    My_lily_lexer;
+struct My_lily_parser;
index 9611449383c7f1dcf9d5ce2debf0c0c4ef4bb3d8..628ccc7c421ea814e6b6e649698ebd0bb85ed7d6 100644 (file)
@@ -13,7 +13,7 @@
 struct Local_key_register : Request_register {
     Local_key local_key_;
     Local_key_item* key_item_p_;
-    Key const *key_c_l_;
+    Key const *key_C_;
     /* *************** */
     virtual void process_requests();
     virtual void acknowledge_element(Staff_elem_info);
index 203eac71aed1b175269fabdecacc4d211fd03480..10fc7c3f47251c665de35f8a2ebc7308fcde4bb8 100644 (file)
@@ -10,8 +10,7 @@ void set_default_output(String s);
 Input_score* current_iscore_l();
 String find_file(String);
 String get_version_str();
-extern String infile_str_g;
-extern Source* source_l_g;
+extern Sources* source_l_g;
 extern bool only_midi;
 
 extern String default_out_fn;
index 761efce6bd37e0061e75a2f22963c1d752113434..d9a13deda938217da2cc4b232f24526f41ccc463 100644 (file)
@@ -11,6 +11,7 @@
 #define MUSICALREQUESTS_HH
 
 #include "request.hh"
+#include "duration.hh"
 
 
 /**
@@ -38,14 +39,13 @@ struct Skip_req : Musical_req {
   This request is used only a base class.
  */
 struct Rhythmic_req : virtual Musical_req {
-    int balltype;
-    int dots;
-    Moment plet_factor;
+    Duration duration_;
+    
     /* *************** */
+    void set_duration(Duration);
     static int compare(const Rhythmic_req &, const Rhythmic_req &);
     virtual Moment duration() const;
     Rhythmic_req();
-    Rhythmic_req(int,int);
     REQUESTMETHODS(Rhythmic_req, rhythmic);
 };
 
@@ -133,7 +133,7 @@ public:
 struct Stem_req : Rhythmic_req {
     /// preferred direction for the stem
     int dir_i_;
-    Stem_req(int s, int dots);
+    Stem_req();
     REQUESTMETHODS(Stem_req,stem);
 };
 
index c3f2bfa38853a24827307f8108ca6f5d468d5ff3..8dbc42e8614818a6307dbedf3259b764675aee44 100644 (file)
@@ -8,46 +8,33 @@
 
 #ifndef LEXER_HH
 #define LEXER_HH
+
 #include <FlexLexer.h>
+
 #include "proto.hh"
 #include "fproto.hh"
 #include "varray.hh"
 #include "string.hh"
+#include "includable-lexer.hh"
+#include "duration.hh"
 
-int yylex();
-void yyerror(char const *s);
 bool busy_parsing();
 void kill_lexer();
 void set_lexer();
 
 
-struct Lexer_prefs {
-    int default_duration, default_dots, default_octave_i_;
-    int default_plet_type, default_plet_dur;
-    String textstyle_str_;
-    
-    bool last_duration_mode ;
-    
-    Lexer_prefs();
-    Moment plet_mom();
-    void set_default_duration(int *);
-    void set_last_duration(int n);
-    void set_duration_mode(String s);
-    void get_default_duration(int *);
-    void set_plet(int,int);
-};
-
-/// lexer with provisions for include files.
-class My_lily_lexer : public yyFlexLexer {
+/// lexer for Mudela
+class My_lily_lexer : public Includable_lexer {
     int lookup_keyword(String);
     void lookup_notename(int &large, int &small, String s);
     int scan_bare_word(String);
     int scan_escaped_word(String);
 
+    bool post_quotes_b_;
 public:
-    Lexer_prefs prefs;
+   void * lexval_l;
+    
     
-    Array<Input_file*> include_stack_;
     Assoc<String, Identifier*> *identifier_assoc_p_;
     Keyword_table * keytable_p_;
     int errorlevel_i_;
@@ -55,25 +42,19 @@ public:
     /* *************** */
 
     Identifier*lookup_identifier(String s);
-    char const* here_ch_c_l();
  
     void push_note_state();
     void push_lyric_state();
     void pop_state();
     void LexerError(char const *);
-    String spot() const;
     My_lily_lexer();
     void add_identifier(Identifier*i);
     ~My_lily_lexer();
-    void new_input(String s);
-    bool  close_input();
     int yylex();
-    void print_init_declarations() const;
-    void print_user_declarations() const;
+    void print_declarations(bool init_b) const;
+
     bool note_state_b() const;
     bool lyric_state_b() const;
 };
 
-extern My_lily_lexer *lexer;
-
 #endif
diff --git a/lily/include/my-lily-parser.hh b/lily/include/my-lily-parser.hh
new file mode 100644 (file)
index 0000000..679c381
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+  my-lily-parser.hh -- declare 
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef MY_LILY_PARSER_HH
+#define MY_LILY_PARSER_HH
+#include "proto.hh"
+#include "duration.hh"
+#include "string.hh"
+#include "varray.hh"
+#include "lily-proto.hh"
+#include "proto.hh"
+#include "duration.hh"
+#include "string.hh"
+#include "varray.hh"
+
+class My_lily_parser {
+public:
+    friend int yyparse( void*);
+   
+    int default_octave_i_;
+    Duration default_duration_;
+    String textstyle_str_;
+    
+    bool last_duration_mode ;
+
+    Array<Request*> pre_reqs, post_reqs;
+    Array<const char *> define_spot_array_;
+    char const* defined_ch_C_;
+    int fatal_error_i_;
+    Sources * source_l_;
+    int error_level_i_;
+    bool init_parse_b_;
+    My_lily_lexer * lexer_p_;
+    Moment plet_mom();
+    void add_requests( Voice_element*v);
+
+    Voice_element * get_note_element(Note_req * ,Duration *);
+    Voice_element* get_rest_element(String,Duration *);
+    Voice_element* get_word_element(Text_def*, Duration*);
+    void set_last_duration(Duration const *);
+    void set_duration_mode(String s);
+    char const* here_ch_C()const;
+    void remember_spot();
+    Paper_def*default_paper();
+    void do_yyparse();
+    void parser_error(String);
+
+    Request* get_parens_request(char c);
+    
+    void set_debug();
+    void set_yydebug(bool);
+    void print_declarations();
+public:
+    void parse_file ( String init_str, String file_str);
+    My_lily_parser(Sources * sources_l);
+};
+
+#endif // MY_LILY_PARSER_HH
index 6a44167532c8e8a672bc0dc798e3adf324b42158..45b7c3f3c8404b23d2d485fe51c0982e1a8a6d95 100644 (file)
@@ -9,27 +9,12 @@
 
 #include "proto.hh"
 
-extern char const* defined_ch_c_l;
-extern char const* req_defined_ch_c_l;
-
-
-
-
-Voice_element * get_note_element(Note_req * ,int *);
-Voice_element* get_rest_element(String,int *);
-Voice_element* get_word_element(Text_def*, int*);
-void add_requests( Voice_element*v, Array<Request*>&req);
-Request* get_request(char);
-Script_def* get_scriptdef(char);
-Text_def*get_text(String s);
+String * get_scriptdef(char c);
+Request* get_script_req(char);
 Request* get_plet_request( char c, int dur_i, int type_i ); 
 Request*get_script_req(int d , Script_def*def);
 Request*get_text_req(int d , Text_def*def);
 Request* get_stemdir_req(int);
-
-
-
-
 Request*get_grouping_req(Array<int> i_arr);
 
 #endif // PARSECONSTRUCT_HH
index 6e9bfd4df2c95f87f875fc52a8fbb48e9315abc0..66e62d484344a43ae15bd09ca9a7085184e368bb 100644 (file)
@@ -23,7 +23,7 @@
 class Request {
 public:
     Voice_element*elt_l_;
-    char const* defined_ch_c_l_;
+    char const* defined_ch_C_;
     
     /* *************** */
     Voice  * voice_l();
index 85c72666772e62cd55c3a17414ca4ed16986add1..67ca259f545429bcfb35fea1fe7ec6f26cfd0520 100644 (file)
@@ -12,11 +12,13 @@ struct Rest : Item {
 
     int dots;
     int balltype;
-
+    
+    /// rests can be translated up and down.
+    int pos_i_;
     /* *************** */
 
 
-    Rest(int dur,int dots);
+    Rest(Duration);
     void do_print()const;
 NAME_MEMBERS(Rest);
     Molecule* brew_molecule_p()const;
index 4f10a7f95f0b99a5b879700cb546dde230ed267a..293801a98e499420e0a3348bc6e046fa188159b4 100644 (file)
@@ -28,7 +28,7 @@ struct Score {
     IPointerList<Score_column*> cols_;
     PScore *pscore_p_;
 
-    char const *defined_ch_c_l_;
+    char const *defined_ch_C_;
     int errorlevel_i_;
     
     /* *************************************************************** */
index 4e3392027d57c909a6ff22a8912dc4ab38d69a0a..2dcbc845a94ebf1e5e254c704c6196e8ae306a74 100644 (file)
@@ -28,8 +28,8 @@ struct Staff_elem_info {
 struct Staff_info {
     int *c0_position_i_;
     Staff_walker *walk_l_;
-    Time_description const *time_c_l_;
-    Rhythmic_grouping const *rhythmic_c_l_;
+    Time_description const *time_C_;
+    Rhythmic_grouping const *rhythmic_C_;
     bool break_allowed_b_;
 };
 
index b59df7f532b8ae53c09e8d6db3615249fbc9a8b1..50bb98105c88567b26af165e4a1073437556217a 100644 (file)
@@ -14,7 +14,7 @@ struct Text_def  {
     int align_i_;
     String text_str_;
     String style_str_;
-    char const* defined_ch_c_l_;
+    char const* defined_ch_C_;
   
 
     /* *************** */
index cf398bc9b676dffe87e9df87088991edf42a60f2..0b606f1301a0a31c7d58294916f22068c793b979 100644 (file)
@@ -18,7 +18,7 @@
     *the requests, */
 struct Voice_element {
     Moment duration;
-    char const* defined_ch_c_l_;
+    char const* defined_ch_C_;
     Voice const *voice_l_;
     IPointerList<Request*> reqs;
 
index 5c8aa72472c0fd186eefd380f627c5c3df39e14f..26377e7f531893569fc44e704fcee20a5ea4e78c 100644 (file)
@@ -11,7 +11,7 @@ Input_music::check_plet(Voice_element* velt_l)
        if ( i->plet() ) {
            Moment start_moment = 0;
            if ( !find_plet_start_bo( i->plet()->type_c_, start_moment ) ) {
-               error( "begin of plet not found", i->defined_ch_c_l_ );
+               error( "begin of plet not found", i->defined_ch_C_ );
                break;
            }
            Moment moment = 0;
index d68dd10959a189a6182af9eac612448592875d2c..ed7d831eeaaefa50f2ec18bc03fb002c3250c04c 100644 (file)
@@ -40,7 +40,7 @@ Input_score::Input_score(Input_score const&s)
 {
     paper_p_ = (s.paper_p_)? new Paper_def(*s.paper_p_) :0;
     midi_p_ = (s.midi_p_)? new Midi_def(*s.midi_p_) : 0;
-    defined_ch_c_l_ = s.defined_ch_c_l_;
+    defined_ch_C_ = s.defined_ch_C_;
     errorlevel_i_ = s.errorlevel_i_;
 }
 
@@ -48,7 +48,7 @@ Score*
 Input_score::parse()
 {
     Score *s_p = new Score;
-    s_p->defined_ch_c_l_= defined_ch_c_l_;
+    s_p->defined_ch_C_= defined_ch_C_;
     s_p->errorlevel_i_ = errorlevel_i_;
     if (midi_p_)
        s_p->set(new Midi_def(*midi_p_));
@@ -72,7 +72,7 @@ Input_score::~Input_score()
 
 Input_score::Input_score()
 {
-    defined_ch_c_l_=0;
+    defined_ch_C_=0;
     paper_p_= 0;
     midi_p_ = 0;
     errorlevel_i_ = 0;
index 2d42e2a1baefb866947abcf2739273a0c762d807..9262851f3cdf07a00836d1d66e01923d4058ec82 100644 (file)
@@ -20,7 +20,7 @@
 Input_staff::Input_staff(String s)
 {
     type= s;
-    defined_ch_c_l_ = 0;
+    defined_ch_C_ = 0;
 }
 
 void
@@ -38,7 +38,7 @@ Input_staff::parse(Score*score_l)
     else if (type == "lyric")
        p = new Lyric_staff;
     else {
-       error( "Unknown staff-type `" + type +"\'", defined_ch_c_l_ );
+       error( "Unknown staff-type `" + type +"\'", defined_ch_C_ );
        exit( 1 );
     }
 
@@ -55,7 +55,7 @@ Input_staff::Input_staff(Input_staff const&s)
 {    
     for (iter_top(s.music_,i); i.ok(); i++)
        add(i->clone());
-    defined_ch_c_l_ = s.defined_ch_c_l_;
+    defined_ch_C_ = s.defined_ch_C_;
     type = s.type;
 }
 
index 865eea264e7fb862c60fe906a290f275aa505d29..8b8b2373b3dc1fd5a7e303654bb4ff9613638ba8 100644 (file)
@@ -49,7 +49,7 @@ Key_register::acknowledge_element(Staff_elem_info info)
 void
 Key_register::process_requests()
 {
-    Time_description const *time_l = get_staff_info().time_c_l_;
+    Time_description const *time_l = get_staff_info().time_C_;
 
     if (!keyreq_l_ &&
        (!time_l->whole_in_measure_|| !time_l->when_)) {
index 549a957efdd39a648486d30b4ff6bb9eed5b59d9..21ce7aa06ba0e6747d1e99849cc5dfac045db606 100644 (file)
        yy_push_state(quote);\
        yylval.string = new String
 
+#define yylval (*(YYSTYPE*)lexval_l)
 
+#define YY_USER_ACTION add_lexed_char(YYLeng());
 %}
 
 %option c++
 %option noyywrap
 %option nodefault
-%option yylineno
 %option debug
 %option yyclass="My_lily_lexer"
 %option stack
+%option never-interactive 
+%option warn
 
 %x incl
 %x lyrics
@@ -64,16 +67,17 @@ COMMENT             %.*\n
 
 
 
-^include           {
+include           {
        yy_push_state(incl);
 }
 <incl>{WHITE}*      { /* eat the whitespace */ }
 <incl>\"[^"]*\"   { /* got the include file name */
-   String s (YYText()+1);
-   s = s.left_str(s.length_i()-1);
-   defined_ch_c_l = here_ch_c_l() - String( YYText() ).length_i() - 1;
-   new_input(s);
-   yy_pop_state();
+       String s (YYText()+1);
+       s = s.left_str(s.length_i()-1);
+       mtor << "#include `" << s << "\'\n";
+//     defined_ch_C = here_ch_C() - String( YYText() ).length_i() - 1;
+       new_input(s,source_l_g);
+       yy_pop_state();
 }
 
 <notes>{RESTNAME}      {
@@ -92,6 +96,18 @@ COMMENT              %.*\n
        s=s.left_str(s.length_i() - 1);
        return scan_bare_word(s);
 }
+<notes>{ALPHAWORD}/\'  {
+       post_quotes_b_ = true;
+       return scan_bare_word(YYText());
+}
+<notes>\'+             {
+       yylval.i = YYLeng();
+       if (post_quotes_b_) {
+               post_quotes_b_ = false;
+               return POST_QUOTES;
+       } else
+               return PRE_QUOTES;
+}
 <notes>{ALPHAWORD}     {
        return scan_bare_word(YYText());
 
@@ -109,23 +125,21 @@ COMMENT           %.*\n
        yylval.i = String_convert::dec2_i( String( YYText() ) );
        return INT;
 }
-<notes>[ \t\n]+                {
 
-}
 <notes>\+\+            {
        return CONCAT;
 }
 <notes>\" {
        start_quote();
 }
-<notes>.       {
-       return yylval.c = YYText()[0];
-}
 
 
 \"             {
        start_quote();
 }
+<quote>\\\\    {
+       *yylval.string += '\\';
+}
 <quote>\\\"    {
        *yylval.string +='\"';
 }
@@ -176,14 +190,13 @@ COMMENT           %.*\n
 <lyrics>[()\[\]|/.^>_-] {
        return yylval.c = YYText()[0];
 }
-<lyrics>[ \t\n]+               {
-}
 
 <<EOF>> {
-       mtor << "<<EOF>>";
+       mtor << "<<eof>>";
 
-       if (! close_input())
+       if (! close_input()) { 
          yyterminate(); // can't move this, since it actually rets a YY_NULL
+       }
 }
 {WORD} {
        return scan_bare_word(YYText());
@@ -210,15 +223,15 @@ COMMENT           %.*\n
        mtor << "misc char" <<c<<"\n";
        return c;
 }
-[ \t\n]+       {
+<*>{WHITE}+    {
        
 }
-
-{COMMENT}              {
-       //ignore
+<notes>.       {
+       return yylval.c = YYText()[0];
 }
-.              {
-       error( String( "illegal character: " ) + String( YYText()[0] ), here_ch_c_l() );
+
+<*>.           {
+       error( String( "illegal character: " ) + String( YYText()[0] ), here_ch_C() );
        return YYText()[0];
 }
 
index bf7eb9c352e25ef0ef6c1cc42bb72ca63e70ae16..0ce36e955c1d4d9cd6039bec008880dc32860374 100644 (file)
@@ -16,7 +16,7 @@
 Local_key_register::Local_key_register()
 {
     key_item_p_ = 0;
-    key_c_l_ = 0;
+    key_C_ = 0;
 }
 
 void
@@ -51,19 +51,19 @@ Local_key_register::acknowledge_element(Staff_elem_info info)
     } else if (info.elem_p_->name()==Key_item::static_name()) { 
        Key_register * key_reg_l =
            (Key_register*)info.origin_reg_l_arr_[0];
-       key_c_l_ = &key_reg_l->key_;
-       local_key_.reset(*key_c_l_);
+       key_C_ = &key_reg_l->key_;
+       local_key_.reset(*key_C_);
     }  
 }
 
 void
 Local_key_register::process_requests()
 {
-    Time_description const * time_c_l_ = get_staff_info().time_c_l_;
-    if (! time_c_l_->whole_in_measure_){
-       if (key_c_l_)  
-           local_key_.reset(*key_c_l_);
-       else if( time_c_l_->when_ >Moment(0))
+    Time_description const * time_C_ = get_staff_info().time_C_;
+    if (! time_C_->whole_in_measure_){
+       if (key_C_)  
+           local_key_.reset(*key_C_);
+       else if( time_C_->when_ >Moment(0))
            warning ("Help me! can't figure  current key", 0);
     }
 }
index 6e3fdf02b81db8c5e0f60c53c4fdb4eb68881c30..1a54f12bcaa118bb62dd28b6cd7ece7caf676b2b 100644 (file)
@@ -8,7 +8,6 @@
 #include "source-file.hh"
 #include "source.hh"
 #include "debug.hh"
-#include "main.hh"
 
 Lyric_item::Lyric_item(Lyric_req* lreq_l, int voice_count_i)
     : Text_item(lreq_l,0)
@@ -23,5 +22,5 @@ Lyric_item::do_pre_processing()
 
     // test context-error
     if ( tdef_l()->text_str_.index_i( "Gates" ) >=0)// :-)
-       warning( "foul word", tdef_l()->defined_ch_c_l_ );
+       warning( "foul word", tdef_l()->defined_ch_C_ );
 }
index 43a44f3c5219aaba106d8b6080977c42d6c41caa..85a6bd923bbe8b404cd11a5fbc3fe6dff023fbcc 100644 (file)
@@ -1,3 +1,11 @@
+/*
+  main.cc -- implement main: entrypoints
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
 #include <iostream.h>
 #include <assert.h>
 #include "proto.hh"
 #include "main.hh"
 #include "path.hh"
 #include "config.hh"
-#include "source-file.hh"
 #include "source.hh"
+#include "my-lily-parser.hh"
 
-Source source;
-Source* source_l_g = &source;
-String infile_str_g;
+Sources* source_l_g = 0;
 bool only_midi = false;
 extern void parse_file(String,String);
 
@@ -98,6 +104,18 @@ struct Main_init {
     }
 } main_init;
 
+void
+do_one_file(String init_str, String file_str)
+{
+    source_l_g = new Sources;
+    source_l_g->set_path(path);
+    My_lily_parser parser(source_l_g);
+    parser.parse_file(init_str, file_str);
+    do_scores();
+    delete source_l_g;
+    source_l_g = 0;
+}
+
 int
 main (int argc, char **argv)
 {    
@@ -141,19 +159,15 @@ main (int argc, char **argv)
     while ( (arg= oparser.get_next_arg()) ) {
        String f(arg);
        destill_inname(f);
-       infile_str_g = f;
-       parse_file(init_str,f);
-       do_scores();
+       do_one_file(init_str,f);
        p++;
     }
     if (!p) {
-       parse_file(init_str, "");       
-       do_scores();
+       do_one_file(init_str, "");      
     }
 
     return 0;
 }
-
 String
 find_file(String f)
 {
index 2bc00a3a0fdbd55a995ef29539919bc73c7b13d7..04e1286197df176309c04ec81b864255bbe20305 100644 (file)
@@ -213,7 +213,7 @@ Midi_track::Midi_track( int number_i )
 
     number_i_ = number_i;
        
-    char const* data_ch_c_l = ""
+    char const* data_ch_C = ""
 //        "00" "ff58" "0404" "0218" "08"
 //     "00" "ff51" "0307" "a120"
 // why a key at all, in midi?
@@ -225,10 +225,10 @@ Midi_track::Midi_track( int number_i )
 
     String data_str;
     // only for format 0 (currently using format 1)?
-    data_str += String_convert::hex2bin_str( data_ch_c_l );
+    data_str += String_convert::hex2bin_str( data_ch_C );
 
-    char const* footer_ch_c_l = "00" "ff2f" "00";
-    String footer_str = String_convert::hex2bin_str( footer_ch_c_l );
+    char const* footer_ch_C = "00" "ff2f" "00";
+    String footer_str = String_convert::hex2bin_str( footer_ch_C );
 
     set( "MTrk", data_str, footer_str );
 }
index 72f71de64eb27705a4542fb3d04969dac7c33bb0..73d0260c2b2cefd8f1e737fa648e99c678aac1de 100644 (file)
@@ -8,7 +8,8 @@
 
 // "" huh?
 #include "time.h"
-
+#include "main.hh"
+#include "source.hh"
 #include "proto.hh"
 #include "plist.hh"
 #include "string.hh"
@@ -48,36 +49,25 @@ Midi_output::do_staff(Staff*st_l,int track_i)
 
     // set track name
     Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( track_i, 0, '0' ) );
-    midi_track.add( Moment( 0.0 ), &track_name );
+    midi_track.add( Moment( 0 ), &track_name );
 
     // set instrument :-)
     Midi_text instrument_name( Midi_text::INSTRUMENT_NAME, "piano" );
-    midi_track.add( Moment( 0.0 ), &instrument_name );
+    midi_track.add( Moment( 0 ), &instrument_name );
 
     // set key, help, where to get key, where to get major/minor?
     int accidentals_i = 0;
     int minor_i = 0;
 
-#ifdef UGR
-    // uph, sorry, wanna test this...
-    // menuetto in F
-    if ( ( infile_str_g.index_i( "scsii-menuetto" ) >= 0 )
-       || ( infile_str_g.index_i( "standchen" ) >= 0 )
-       || ( infile_str_g.left_str( 1 )  == String( "s" ) ) )
-       accidentals_i = -1;
-    // standchen in d  
-    if ( ( infile_str_g.index_i( "standchen" ) >= 0 ) )
-       minor_i = 1;
-#endif
 
     Midi_key midi_key( accidentals_i, minor_i ); 
-    midi_track.add( Moment( 0.0 ), &midi_key );
+    midi_track.add( Moment( 0 ), &midi_key );
 
     Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) );
-    midi_track.add( Moment( 0.0 ), &midi_tempo );
+    midi_track.add( Moment( 0 ), &midi_tempo );
 
     Midi_time midi_time( Midi_def::num_i_s, Midi_def::den_i_s, 18 );
-    midi_track.add( Moment( 0.0 ), &midi_time );
+    midi_track.add( Moment( 0 ), &midi_time );
 
     for (Midi_walker w (st_l, &midi_track); w.ok(); w++)
        w.process_requests();
@@ -96,41 +86,26 @@ Midi_output::header()
     String str = String( "Creator: " ) + get_version_str() + "\n";
 
     Midi_text creator( Midi_text::TEXT, str );
-    midi_track.add( Moment( 0.0 ), &creator );
+    midi_track.add( Moment( 0 ), &creator );
 
     str = "Generated, at ";
     str += ctime( &t );
     str = str.left_str( str.length_i() - 1 );
     str += ",\n";
     Midi_text generate( Midi_text::TEXT, str );
-    midi_track.add( Moment( 0.0 ), &generate );
+    midi_track.add( Moment( 0 ), &generate );
+    Source_file* sourcefile_l = source_l_g->sourcefile_l( score_l_->defined_ch_C_ );
+    if ( sourcefile_l ) {
+       str = "from musical definition: " 
+           + sourcefile_l->file_line_no_str(score_l_->defined_ch_C_);
 
-    str = "from musical definition: " + infile_str_g + "\n";
+    }
     Midi_text from( Midi_text::TEXT, str );
-    midi_track.add( Moment( 0.0 ), &from );
+    midi_track.add( Moment( 0 ), &from );
 
     // set track name
     Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( 0, 0, '0' ) );
-    midi_track.add( Moment( 0.0 ), &track_name );
-
-#if 0
-    /*
-       shouldn't impose copyright on output.
-       */
-    struct tm* tm_l = gmtime( &t );
-    String year_str = String_convert::i2dec_str( 1900 + tm_l->tm_year, 4, '0' );
-           
-    // your copyleft here
-    str = " Copyleft (o) " + year_str + "by\n";
-    Midi_text copyleft( Midi_text::COPYRIGHT, str );
-    midi_track.add( Moment( 0.0 ), &copyleft );
-
-    str = " Han-Wen Nienhuys <hanwen@stack.nl>,"
-         " Jan Nieuwenhuizen <jan@digicash.com>\n";
-       
-    Midi_text authors( Midi_text::COPYRIGHT, str );
-    midi_track.add( Moment( 0.0 ), &authors );
-#endif
+    midi_track.add( Moment( 0 ), &track_name );
     *midi_stream_l_  << midi_track;
 }
 
index 88e5eb2dc605568b454956c0ac7d150dbc66083c..e6a2e35b3c83a3eec383e71a73a00dea5d8750e4 100644 (file)
@@ -73,8 +73,8 @@ Midi_stream::header()
 //                00 01   one track
 //                00 60   96 per quarter-note
 
-//    char const ch_c_l = "0000" "0006" "0001" "0001" "0060";
-//    str += String_convert::hex2bin_str( ch_c_l );
+//    char const ch_C = "0000" "0006" "0001" "0001" "0060";
+//    str += String_convert::hex2bin_str( ch_C );
 //    *os_p_ << str;
 
 //      *this << Midi_header( 1, 1, tempo_i_ );
index 597a60ac7608536d5a872cc22948d4e66d99acf0..e90be35ba3ccf2638acd318ad1885796b090686a 100644 (file)
 void
 Stem_req::do_print() const
 {
+#ifndef NPRINT
     Rhythmic_req::do_print();
     mtor << "dir : " << dir_i_;
+#endif
 }
 
-Stem_req::Stem_req(int s, int d)
-    : Rhythmic_req(s,d)
+Stem_req::Stem_req()
 {
     dir_i_ = 0;
 }
@@ -56,12 +57,12 @@ Span_req::do_print() const
 Request::Request()
 {
     elt_l_ = 0;
-    defined_ch_c_l_ = 0;
+    defined_ch_C_ = 0;
 }
 Request::Request(Request const&src)
 {
     elt_l_ = 0;
-    defined_ch_c_l_ = src.defined_ch_c_l_;
+    defined_ch_C_ = src.defined_ch_C_;
 }
 /* *************** */
 Spacing_req::Spacing_req()
@@ -103,7 +104,7 @@ Melodic_req::transpose(Melodic_req const & delta)
     accidental_i_ += delta.accidental_i_;
     if (abs(accidental_i_) > 2) {
        warning("transposition makes accidental larger than 2", 
-               delta.defined_ch_c_l_);
+               delta.defined_ch_C_);
     }
 }
 
@@ -153,37 +154,29 @@ Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2)
 {
     return sign(r1.duration() - r2.duration());
 }
-Rhythmic_req::Rhythmic_req(int b, int d)
+
+void
+Rhythmic_req::set_duration(Duration d)
 {
-    plet_factor = 1;
-    balltype = b;
-    dots = d;
+    duration_ = d;
 }
 
 Rhythmic_req::Rhythmic_req()
 {
-    plet_factor = 1;
-    balltype = 1;
-    dots = 0;
 }
 
 void
 Rhythmic_req::do_print() const
 {
 #ifndef NPRINT
-    mtor << "ball: " << balltype ;
-    int d =dots;
-    while (d--)
-       mtor << '.';
-    
-    mtor<<", plet factor"<<plet_factor<<"\n";
+    mtor << duration_.str();
 #endif
 }
 
 
 Moment
 Rhythmic_req::duration() const {    
-    return wholes(balltype,dots)*plet_factor;
+    return duration_.length();
 }
 /* *************** */
 
@@ -210,8 +203,8 @@ void
 Note_req::do_print() const
 {
 #ifndef NPRINT
-    mtor << " forceacc_b_ " << forceacc_b_ << '\n';
     Melodic_req::do_print();
+    mtor << " forceacc_b_ " << forceacc_b_ << '\n';
     Rhythmic_req::do_print();
 #endif
 }
index 8c02f127b84847913a8693f9551515e61f5ffbf9..cdbfd35b785da9624948664f38e721dee9f978dd 100644 (file)
@@ -1,9 +1,17 @@
+/*
+  my-lily-lexer.cc -- implement My_lily_lexer
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
 #include <strstream.h>
+#include <ctype.h>
 
 #include "interval.hh"
 #include "identifier.hh"
 #include "assoc-iter.hh"
-#include "input-file.hh"
 #include "out/parser.hh"
 #include "keyword.hh"
 #include "assoc.hh"
@@ -58,6 +66,8 @@ My_lily_lexer::My_lily_lexer()
     keytable_p_ = new Keyword_table(the_key_tab);
     identifier_assoc_p_ = new Assoc<String, Identifier*>;
     errorlevel_i_ = 0;
+    post_quotes_b_ = false;
+    
 }
 
 int
@@ -75,11 +85,6 @@ My_lily_lexer::lookup_identifier(String s)
     return (*identifier_assoc_p_)[s];
 }
 
-char const*
-My_lily_lexer::here_ch_c_l()
-{
-    return include_stack_.top()->sourcefile_l_->ch_c_l() + yyin->tellg();
-}
 
 void
 My_lily_lexer::add_identifier(Identifier*i)
@@ -104,78 +109,30 @@ My_lily_lexer::~My_lily_lexer()
     delete identifier_assoc_p_;
 }
 void
-My_lily_lexer::print_init_declarations()const
+My_lily_lexer::print_declarations(bool init_b)const
 {
     for (Assoc_iter<String,Identifier*> ai(*identifier_assoc_p_); ai.ok(); 
         ai++) {
-       if (ai.val()->init_b_)
-           ai.val()->print();
-    }
-}
-void
-My_lily_lexer::print_user_declarations()const
-{
-    for (Assoc_iter<String,Identifier*> ai(*identifier_assoc_p_); ai.ok(); ai++) {
-       if (!ai.val()->init_b_)
+       if (ai.val()->init_b_ == init_b)
            ai.val()->print();
     }
 }
 
-String
-My_lily_lexer::spot()const
-{
-    return include_stack_.top()->name +  ": " + String( lineno() );
-}
-
 void
 My_lily_lexer::LexerError(char const *s)
 {
-    if (lexer->include_stack_.empty()) {
+    if (include_stack_.empty()) {
        *mlog << "error at EOF" << s << '\n';
     } else {
-       char const* ch_c_l = here_ch_c_l();
-       if ( ch_c_l ) {
-           ch_c_l--;
-           while ( ( *ch_c_l == ' ' ) || ( *ch_c_l == '\t' ) || ( *ch_c_l == '\n' ) )
-                   ch_c_l--;
-           ch_c_l++;
+       char const* ch_C = here_ch_C();
+       if ( ch_C ) {
+           ch_C--;
+           while (isspace(*ch_C == ' ' ))
+                   ch_C--;
+           ch_C++;
        }
        errorlevel_i_ |= 1;
-       error( s, ch_c_l );
+       error( s, ch_C );
     }
 }
 
-// set the  new input to s, remember old file.
-void
-My_lily_lexer::new_input(String s)
-{    
-   if (!include_stack_.empty()) {
-       include_stack_.top()->line = lineno();
-            // should this be saved at all?
-       include_stack_.top()->defined_ch_c_l_ = defined_ch_c_l;
-   }
-
-   Input_file *newin = new Input_file(s);
-   include_stack_.push(newin);
-   switch_streams(newin->is);
-
-   yylineno = 1;
-}
-
-// pop the inputstack.
-bool
-My_lily_lexer::close_input()
-{
-    Input_file *old = include_stack_.pop();
-     bool ok =         true;
-    if (include_stack_.empty()) {
-       ok = false;
-    } else {
-       Input_file *i = include_stack_.top();
-       switch_streams(i->is);
-       yylineno = i->line;     
-       defined_ch_c_l = i->defined_ch_c_l_;
-    }
-    delete old;
-    return ok;
-}
diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc
new file mode 100644 (file)
index 0000000..6340a91
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+  my-lily-parser.cc -- implement 
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "my-lily-parser.hh"
+#include "my-lily-lexer.hh"
+#include "debug.hh"
+#include "main.hh"
+#include "voice-element.hh"
+#include "musical-request.hh"
+#include "command-request.hh"
+
+void
+My_lily_parser::set_debug()
+{
+#ifndef NPRINT
+    String s = "";
+    if (init_parse_b_) 
+       s = "Init";
+    set_yydebug( !monitor->silence(s+"Parser") && check_debug);
+    lexer_p_->set_debug( !monitor->silence(s+"Lexer") && check_debug);
+#endif
+}
+void
+My_lily_parser::print_declarations()
+{
+#ifndef NPRINT
+    String s = "";
+    if (init_parse_b_) 
+       s = "Init";
+    if (!monitor->silence(s+"Declarations") && check_debug) {
+       lexer_p_->print_declarations(init_parse_b_);
+    }
+#endif   
+}
+
+void
+My_lily_parser::parse_file(String init, String s)
+{
+    *mlog << "Parsing ... ";
+    lexer_p_ = new My_lily_lexer;
+
+    set_debug();
+
+    lexer_p_->new_input(init, source_l_);
+    do_yyparse();
+    print_declarations();
+   
+    init_parse_b_ = false;
+    lexer_p_->new_input(s, source_l_);
+    do_yyparse();
+
+
+    if(!define_spot_array_.empty())
+       warning("Braces don't match.",0);
+}
+
+My_lily_parser::~My_lily_parser()
+{
+    delete lexer_p_;
+}
+    
+void
+My_lily_parser::remember_spot()
+{
+    define_spot_array_.push(here_ch_C());
+}
+
+char const * 
+My_lily_parser::here_ch_C()const
+{
+    return lexer_p_->here_ch_C();
+}
+
+void
+My_lily_parser::parser_error(String s)
+{
+    lexer_p_->LexerError(s);
+
+    if ( fatal_error_i_ )
+       exit( fatal_error_i_ );
+    error_level_i_ = 1;
+}
+
+void
+My_lily_parser::set_duration_mode(String s)
+{
+    s = s.upper_str();
+    last_duration_mode = (s== "LAST");
+}
+
+void
+My_lily_parser::set_last_duration(Duration const *d)
+{
+    if (last_duration_mode)
+       default_duration_ = *d;
+}
+
+
+Voice_element*
+My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p)
+{
+    Voice_element* velt_p = new Voice_element;
+    
+    Lyric_req* lreq_p = new Lyric_req(tdef_p);
+
+    lreq_p->duration_ = *duration_p;
+    lreq_p->print();
+    lreq_p->defined_ch_C_ = here_ch_C();
+
+    velt_p->add(lreq_p);
+
+    delete  duration_p;
+    return velt_p;
+}
+
+Voice_element *
+My_lily_parser::get_rest_element(String,  Duration * duration_p )
+{    
+    Voice_element* velt_p = new Voice_element;
+    velt_p->defined_ch_C_ = lexer_p_->here_ch_C();
+
+    Rest_req * rest_req_p = new Rest_req;
+    rest_req_p->duration_ = *duration_p;
+    rest_req_p->print();
+    rest_req_p->defined_ch_C_ = here_ch_C();
+
+    velt_p->add(rest_req_p);
+    delete duration_p;
+    return velt_p;
+}
+
+Voice_element *
+My_lily_parser::get_note_element(Note_req *rq, Duration * duration_p )
+{
+    Voice_element*v = new Voice_element;
+    v->defined_ch_C_ = here_ch_C();
+    
+    if (duration_p->type_i_ >= 2) {
+       Stem_req * stem_req_p = new Stem_req();
+       stem_req_p->duration_ = *duration_p;
+       
+       stem_req_p->defined_ch_C_ = here_ch_C();
+       v->add(stem_req_p);
+    }
+
+    rq->set_duration(*duration_p);
+    rq->defined_ch_C_ = here_ch_C();
+
+
+    v->add(rq);
+    delete duration_p ;
+    return v;
+}
+
+Request*
+My_lily_parser::get_parens_request(char c)
+{
+    Request* req_p=0;
+    switch (c) {
+    case '|':
+       req_p = new Barcheck_req;
+       break;
+
+    case '[':
+    case ']':
+    {
+       Beam_req*b = new Beam_req;
+       int p_i=default_duration_.plet_.type_i_ ; // ugh . Should junk?
+       if (p_i!= 1)
+           b->nplet = p_i;
+       req_p = b;
+    }
+    break;
+
+
+    case ')':
+    case '(':
+       req_p = new Slur_req;
+       break;
+    default:
+       assert(false);
+       break;
+    }
+    
+    switch (c) {
+    case '(':
+    case '[':
+       req_p->span()->spantype = Span_req::START;
+       break;
+    case ')':
+    case ']':
+       req_p->span()->spantype = Span_req::STOP;
+       break;
+       
+    default:
+       break;
+    }
+
+    req_p->defined_ch_C_ = here_ch_C();
+    return req_p;
+}
+
+My_lily_parser::My_lily_parser(Sources * source_l)
+{
+    source_l_ = source_l;
+    lexer_p_ = 0;
+    default_duration_.type_i_ = 4;
+    default_octave_i_=0;
+    textstyle_str_="roman";            // in lexer?
+    error_level_i_ = 0;
+    last_duration_mode = false;
+    defined_ch_C_ = 0;
+    fatal_error_i_ = 0;
+}
+
+void
+My_lily_parser::add_requests(Voice_element*v)
+{
+    for (int i = 0; i < pre_reqs.size(); i++) {
+       v->add(pre_reqs[i]);
+    }
+    pre_reqs.set_size(0);
+    for (int i = 0; i <post_reqs.size(); i++) {
+       v->add(post_reqs[i]);
+    }
+    post_reqs.set_size(0);
+}
index 9c26c57f081d8d506be03d9eee04a0dc69b69849..0d43d5323499bae079c814ec1b74584d91340c28 100644 (file)
 #include "parseconstruct.hh"
 #include "input-music.hh"
 #include "voice-element.hh"
-Moment
-Lexer_prefs::plet_mom()
-{
-    return Moment(default_plet_dur, default_plet_type);
-}
-Lexer_prefs::Lexer_prefs()
-{
-    default_duration = 4, default_dots=0, default_octave_i_=0;
-    default_plet_type = 1, default_plet_dur = 1;
-    textstyle_str_="roman";            // in lexer?
-    
-    last_duration_mode = false;
-}
-
-void
-Lexer_prefs::set_duration_mode(String s)
-{
-    s = s.upper_str();
-    last_duration_mode = (s== "LAST");
-}
-
-void
-Lexer_prefs::set_last_duration(int n)
-{
-    if (last_duration_mode)
-       default_duration = n;
-}
-
-/* triplet is '2/3' */
-void 
-Lexer_prefs::set_plet(int num,int den)
-{
-    assert(num >0&& den>0);
-    default_plet_dur = num;
-    default_plet_type = den;
-}
-
-Text_def*
-get_text(String s) return t;
-{
-    t= new Text_def;
-    t->text_str_= s;
-    t->style_str_ = lexer->prefs.textstyle_str_;
-    t->defined_ch_c_l_ = defined_ch_c_l;
-    return t;
-}
-Voice_element *
-get_note_element(Note_req *rq, int * duration )
-{
-    Voice_element*v = new Voice_element;
-    v->defined_ch_c_l_ = defined_ch_c_l;
-    
-    int dur = duration[0];
-    int dots = duration[1];
-
-    if (dur >= 2) {
-       Stem_req * stem_req_p = new Stem_req(dur,dots);
-       stem_req_p->plet_factor = lexer->prefs.plet_mom();
-       
-       stem_req_p->defined_ch_c_l_ = defined_ch_c_l;
-       v->add(stem_req_p);
-    }
-    
-    if ( !defined_ch_c_l )
-        defined_ch_c_l = lexer->here_ch_c_l();
-
-    rq->balltype = dur;
-    rq->dots = dots;
-    rq->plet_factor = lexer->prefs.plet_mom();
-
-    rq->defined_ch_c_l_ = defined_ch_c_l;
-
-    v->add(rq);
-
-    return v;
-}
-
-Voice_element*
-get_word_element(Text_def* tdef_p, int* duration)
-{
-    Voice_element* velt_p = new Voice_element;
-    velt_p->defined_ch_c_l_ = defined_ch_c_l;
-    
-    int dur = duration[0];
-    int dots=duration[1];
-    
-    tdef_p->defined_ch_c_l_ = defined_ch_c_l;
-
-    Lyric_req* lreq_p = new Lyric_req(tdef_p);
-
-    lreq_p->balltype = dur;
-    lreq_p->dots = dots;
-    lreq_p->plet_factor = lexer->prefs.plet_mom();
-    lreq_p->print();
-    lreq_p->defined_ch_c_l_ = defined_ch_c_l;
-
-    velt_p->add(lreq_p);
-
-    return velt_p;
-}
 
-Voice_element *
-get_rest_element(String,  int * duration )
-{    
-    Voice_element* velt_p = new Voice_element;
-    velt_p->defined_ch_c_l_ = defined_ch_c_l;
-
-    Rest_req * rest_req_p = new Rest_req;
-    rest_req_p->plet_factor = lexer->prefs.plet_mom();
-    rest_req_p->balltype = duration[0];
-    rest_req_p->dots = duration[1];    
-    rest_req_p->print();
-    rest_req_p->defined_ch_c_l_ = defined_ch_c_l;
-
-    velt_p->add(rest_req_p);
-
-    return velt_p;
-}
-
-void
-Lexer_prefs::get_default_duration(int *p)
-{
-    *p++ = default_duration;
-    *p = default_dots;
-}
-
-void
-Lexer_prefs::set_default_duration(int *p)
-{
-     default_duration = *p++;
-     default_dots = *p++;
-}
 
 Request*
 get_plet_request( char c, int dur_i, int type_i )
@@ -159,53 +28,6 @@ get_plet_request( char c, int dur_i, int type_i )
     return plet_req_p;
 }
 
-Request*
-get_request(char c)
-{
-    Request* req_p=0;
-    switch (c) {
-    case '|':
-       req_p = new Barcheck_req;
-       break;
-
-    case '[':
-    case ']':
-    {
-       Beam_req*b = new Beam_req;
-       int p_i=lexer->prefs.default_plet_type ;
-       if (p_i!= 1)
-           b->nplet = p_i;
-       req_p = b;
-    }
-       break;
-
-
-    case ')':
-    case '(':
-       req_p = new Slur_req;
-       break;
-    default:
-       assert(false);
-       break;
-    }
-    
-    switch (c) {
-    case '(':
-    case '[':
-       req_p->span()->spantype = Span_req::START;
-       break;
-    case ')':
-    case ']':
-       req_p->span()->spantype = Span_req::STOP;
-       break;
-       
-    default:
-       break;
-    }
-
-    req_p->defined_ch_c_l_ = req_defined_ch_c_l;
-    return req_p;
-}
 
 void
 add_requests(Voice_element *v, Array<Request*> &req)
@@ -215,8 +37,7 @@ add_requests(Voice_element *v, Array<Request*> &req)
     }
     req.set_size(0);
 }
-
-Script_def*
+String *
 get_scriptdef(char c)
 {
     String s;
@@ -238,7 +59,7 @@ get_scriptdef(char c)
     case  '.' : s = "staccato";
        break;
     }
-    return lexer->lookup_identifier(s)->script(1);
+    return new String(s);
 }
 
 Request*
index fb0c1166c1dd28a7bb7a1cc6905340420b6c00ae..b1f660ef171cc91afbab9ecd06dc75305632ecd8 100644 (file)
@@ -22,8 +22,8 @@ Notehead::Notehead(int ss)
 void
 Notehead::set_rhythmic(Rhythmic_req*r_req_l)
 {
-    balltype = r_req_l->balltype;
-    dots = r_req_l->dots;
+    balltype = r_req_l->duration_.type_i_;
+    dots = r_req_l->duration_.dots_i_;
 }
     
 void
index d5d53de1d1a713afe5032dc27b80feea9251285c..c379ade77021ba29c79086a80927c8802b78d44f 100644 (file)
@@ -1,5 +1,7 @@
 %{ // -*-Fundamental-*-
 #include <iostream.h>
+
+
 #include "script-def.hh"
 #include "symtable.hh"
 #include "lookup.hh"
 #include "command-request.hh"
 #include "musical-request.hh"
 #include "voice-element.hh"
+#include "my-lily-parser.hh"
+#include "text-def.hh"
 
 #ifndef NDEBUG
 #define YYDEBUG 1
 #endif
 
-Array<Request*> pre_reqs, post_reqs;
-Array<const char *> define_spots;
-Paper_def*default_paper();
-char const* defined_ch_c_l;
-char const* req_defined_ch_c_l;
-int fatal_error_i = 0;
-bool init_parse_b;
+#define YYERROR_VERBOSE 1
+
+#define YYPARSE_PARAM my_lily_parser_l
+#define YYLEX_PARAM my_lily_parser_l
+#define THIS ((My_lily_parser *) my_lily_parser_l)
+
+#define yyerror THIS->parser_error
+
 %}
 
 
 %union {
-    Array<Melodic_req*> *melreqvec;
+    Array<Melodic_req*> *melreqvec;/* should clean up naming */
     Array<String> * strvec;
     Array<int> *intvec;
     Box *box;
+    Duration *duration;
     Identifier *id;    
     Input_music *music;
     Input_score *score;
@@ -67,12 +73,28 @@ bool init_parse_b;
     int i;
     int ii[10];
 }
+%{
+
+int 
+yylex(YYSTYPE *s,  void * v_l)
+{
+       My_lily_parser   *pars_l = (My_lily_parser*) v_l;
+       My_lily_lexer * lex_l = pars_l->lexer_p_;
+       lex_l->lexval_l = (void*) s;
+       return lex_l->yylex();
+}
+
+
+%}
+%pure_parser
+
+/* tokens which are not keywords */
+%token CONCAT
 
 %token BAR
 %token CADENZA
 %token CLEF
 %token CM_T
-%token CONCAT
 %token DURATIONCOMMAND
 %token DYNAMIC
 %token END
@@ -124,17 +146,18 @@ bool init_parse_b;
 %token <real>  REAL 
 %token <string>        DURATION RESTNAME
 %token <string>        STRING
+%token <i>     POST_QUOTES 
+%token <i>     PRE_QUOTES
+
 
 %type <box>    box
 %type <c>      open_request_parens close_request_parens close_plet_parens
 %type <chord>  music_chord music_chord_body  init_music_chord
 %type <el>     voice_elt full_element lyrics_elt command_elt
 %type <i>      int
-%type <i>      octave_quotes octave_quote
 %type <i>      script_dir
 %type <id>     declaration
-%type <ii>     default_duration explicit_duration notemode_duration
-%type <ii>     mudela_duration
+%type <duration>       explicit_duration notemode_duration
 %type <interval>       dinterval
 %type <intvec> intastint_list
 %type <lookup> symtables symtables_body
@@ -155,6 +178,8 @@ bool init_parse_b;
 %type <script> script_definition script_body mudela_script
 %type <staff>  staff_block staff_init staff_body
 %type <string> declarable_identifier
+%type <string> script_abbreviation
+%type <id>     old_identifier
 %type <symbol> symboldef
 %type <symtable>       symtable symtable_body
 %type <textdef>        mudela_text
@@ -171,6 +196,7 @@ mudela:     /* empty */
                add_score($2);          
        }
        | mudela add_declaration { }
+       | mudela error
        ;
 
 
@@ -178,26 +204,38 @@ mudela:   /* empty */
        DECLARATIONS
 */
 add_declaration: declaration   {
-               lexer->add_identifier($1);
-               $1->init_b_ = init_parse_b;
-               $1->defined_ch_C_ = define_spots.pop();
+               THIS->lexer_p_->add_identifier($1);
+               $1->init_b_ = THIS->init_parse_b_;
+               $1->defined_ch_C_ = THIS->define_spot_array_.pop();
        }
        ;
 
 declarable_identifier:
        STRING {
-               define_spots.push(lexer->here_ch_c_l());
+               THIS->remember_spot();
            $$ = $1;
-           if (lexer->lookup_identifier(*$1))
-               warning("redeclaration of `" + *$1 + "'",
-                       lexer->here_ch_c_l());
        }
-       | IDENTIFIER { 
-               define_spots.push(lexer->here_ch_c_l());
+       | old_identifier { 
+               THIS->remember_spot();
                $$ = new String($1->name); 
+               warning("redeclaration of `" + *$$ + "'", THIS->here_ch_C());
        }
        ;
 
+
+old_identifier:
+       IDENTIFIER
+       |       MELODIC_REQUEST_IDENTIFIER 
+       |       CHORD_IDENTIFIER
+       |       VOICE_IDENTIFIER
+       |       POST_REQUEST_IDENTIFIER
+       |       SCRIPT_IDENTIFIER
+       |       STAFF_IDENTIFIER
+       |       REAL_IDENTIFIER
+       |       SCORE_IDENTIFIER
+       |       REQUEST_IDENTIFIER
+       ;
+
 declaration:
        declarable_identifier '=' score_block {
                $$ = new Score_id(*$1, $3, SCORE_IDENTIFIER);
@@ -231,9 +269,7 @@ declaration:
                $$ = new Real_id(*$1, new Real($3), REAL_IDENTIFIER);
                delete $1;
        }
-       | declarable_identifier error '}' {
-
-       }
+       
        | declarable_identifier '=' pure_post_request {
                $$ = new Request_id(*$1, $3, POST_REQUEST_IDENTIFIER);
                delete $1;
@@ -249,16 +285,16 @@ declaration:
        SCORE
 */
 score_block:
-       SCORE { define_spots.push(lexer->here_ch_c_l()); }
+       SCORE { THIS->remember_spot(); }
        /*cont*/ '{' score_body '}'     {
                $$ = $4;
-               $$->defined_ch_c_l_ = define_spots.pop();
+               $$->defined_ch_C_ = THIS->define_spot_array_.pop();
                if (!$$->paper_p_ && ! $$->midi_p_)
-                       $$->paper_p_ = default_paper();
+                       $$->paper_p_ = THIS->default_paper();
 
                /* handle error levels. */
-               $$->errorlevel_i_ = lexer->errorlevel_i_;
-               lexer->errorlevel_i_ = 0;
+               $$->errorlevel_i_ = THIS->error_level_i_;
+               THIS->error_level_i_ = 0;
        }
        ;
 
@@ -294,7 +330,8 @@ paper_block:
 
 paper_body:
        /* empty */                     {
-               $$ = default_paper();
+               $$ = THIS->default_paper();
+
        }
        | paper_body WIDTH dim          { $$->linewidth = $3;}
        | paper_body OUTPUT STRING      { $$->outfile = *$3;
@@ -324,8 +361,8 @@ midi_body: {
                $$->outfile_str_ = *$3; 
                delete $3; 
        }
-       | midi_body TEMPO mudela_duration ':' int {
-               $$->set_tempo( wholes( $3[0], $3[1] ), $5 );
+       | midi_body TEMPO notemode_duration ':' int {
+               $$->set_tempo( $3->length(), $5 );
        }
        | midi_body error {
 
@@ -336,10 +373,10 @@ midi_body: {
        STAFFs
 */
 staff_block:
-       STAFF   { define_spots.push(lexer->here_ch_c_l()); }
+       STAFF   { THIS->remember_spot(); }
 /*cont*/       '{' staff_body '}'      {
                $$ = $4; 
-               $$-> defined_ch_c_l_ = define_spots.pop();
+               $$-> defined_ch_C_ = THIS->define_spot_array_.pop();
        }
        ;
 
@@ -376,19 +413,19 @@ init_music:
        ;
 
 init_lyrics_voice:
-       LYRICS { lexer->push_lyric_state(); } 
-       music_voice { $$ = $3; lexer->pop_state(); }
+       LYRICS { THIS->lexer_p_->push_lyric_state(); } 
+       music_voice { $$ = $3; THIS->lexer_p_->pop_state(); }
        ;
 
 init_music_voice:
-       MUSIC { lexer->push_note_state(); } 
+       MUSIC { THIS->lexer_p_->push_note_state(); } 
        /* cont*/ music_voice
-               { $$=$3; lexer->pop_state(); }
+               { $$=$3; THIS->lexer_p_->pop_state(); }
        ;
 init_music_chord:
-       MUSIC { lexer->push_note_state(); } 
+       MUSIC { THIS->lexer_p_->push_note_state(); } 
        /* cont*/ music_chord
-                 { $$=$3; lexer->pop_state(); }
+                 { $$=$3; THIS->lexer_p_->pop_state(); }
        ;
 /*
        MUSIC
@@ -431,8 +468,8 @@ music_voice_body:
        | music_voice_body error {
        }
        | music_voice_body '>' {
-               fatal_error_i = 1;
-               yyerror("Confused by errors: bailing out");
+               THIS->fatal_error_i_ = 1;
+               THIS->parser_error("Confused by errors: bailing out");
        };
 
 music_chord:  '<' music_chord_body '>' { $$ = $2; }
@@ -455,8 +492,8 @@ music_chord_body:
                $$ ->add_elt($2);
        }
        | music_chord_body '}' {
-               fatal_error_i = 1;
-               yyerror("Confused by errors: bailing out");
+               THIS->fatal_error_i_ = 1;
+               THIS->parser_error("Confused by errors: bailing out");
        }
        | music_chord_body error {
        }
@@ -466,26 +503,24 @@ music_chord_body:
        VOICE ELEMENTS
 */
 full_element:  pre_requests voice_elt post_requests {
-               add_requests($2, pre_reqs);
-               add_requests($2, post_reqs);
+               THIS->add_requests($2);
                $$ = $2;
        }
        | pre_requests lyrics_elt post_requests {
-               add_requests($2, pre_reqs);
-               add_requests($2, post_reqs);
+               THIS->add_requests($2);
                $$ = $2;
         }
        | command_elt
-       ;
+       ;       
 
 command_elt:
 /* empty */    {
                $$ = new Voice_element;
-               $$-> defined_ch_c_l_ = lexer->here_ch_c_l();
+               $$-> defined_ch_C_ = THIS->here_ch_C();
        }
 /* cont: */
        command_req     {
-               $2-> defined_ch_c_l_ = $$->defined_ch_c_l_;
+               $2-> defined_ch_C_ = $$->defined_ch_C_;
                $$->add($2);
 
        }
@@ -543,16 +578,15 @@ command_req:
 
 post_requests:
        {
-               assert(post_reqs.empty());
+               assert(THIS->post_reqs.empty());
        }
        | post_requests post_request {
-               $2->defined_ch_c_l_ = lexer->here_ch_c_l();
-               post_reqs.push($2);
+               $2->defined_ch_C_ = THIS->here_ch_C();
+               THIS->post_reqs.push($2);
        }
        | post_requests close_plet_parens INT '/' INT { 
-               post_reqs.push( get_request($2) ); 
-               req_defined_ch_c_l = lexer->here_ch_c_l();
-               post_reqs.push( get_plet_request( $2, $3, $5 ) ); 
+               THIS->post_reqs.push( THIS->get_parens_request($2) ); 
+               THIS->post_reqs.push( get_plet_request( $2, $3, $5 ) ); 
        }
        ;
 
@@ -565,7 +599,7 @@ post_request:
 
 pure_post_request:
        close_request_parens    { 
-               $$ = get_request($1); 
+               $$ = THIS->get_parens_request($1); 
        }
        | script_req
        | textscript_req
@@ -573,15 +607,6 @@ pure_post_request:
        ;
 
 
-octave_quote:
-       '\''            { $$ = 1; }
-       | '`'           { $$ = -1 ; }
-       ;
-
-octave_quotes:
-       /**/ { $$ = 0; }
-       | octave_quotes octave_quote{ $$ += $2; }
-       ;
 
 /*
        URG!!
@@ -589,14 +614,14 @@ octave_quotes:
 steno_melodic_req:
        MELODIC_REQUEST_IDENTIFIER      {
                $$ = $1->request(false)->clone()->melodic();
-               $$->octave_i_ += lexer->prefs.default_octave_i_;
+               $$->octave_i_ += THIS->default_octave_i_;
        }
-       | steno_melodic_req '\''        {  
-               $$-> octave_i_ ++;
+       | steno_melodic_req POST_QUOTES         {  
+               $$-> octave_i_ += $2;
        }
-       | '`' steno_melodic_req  {  
+       | PRE_QUOTES steno_melodic_req   {  
                $$ = $2;
-               $2-> octave_i_ --;
+               $2-> octave_i_ -= $1;
        }
        ;
 
@@ -631,7 +656,7 @@ dynamic_req:
 
 close_plet_parens:
        ']' {
-               req_defined_ch_c_l = lexer->here_ch_c_l();
+               //req_defined_ch_C = THIS->here_ch_C();
                $$ = ']';
        }
        ;
@@ -671,9 +696,11 @@ textscript_req:
 
 mudela_text:
        STRING                  { 
-               defined_ch_c_l = lexer->here_ch_c_l();
-               $$ = get_text(*$1); 
+               //defined_ch_C = THIS->here_ch_C();
+               $$ = new Text_def;
+               $$->text_str_ = *$1; 
                delete $1;
+               $$->style_str_ = THIS->textstyle_str_;
        }
        ;
 
@@ -682,25 +709,26 @@ script_req:
                $$ = get_script_req($1, $2);
        }
        ;
-
-mudela_script:
-       SCRIPT_IDENTIFIER               { $$ = $1->script(true); }
-       | script_definition             { $$ = $1; }
-       | '^'           { $$ = get_scriptdef('^'); }
+script_abbreviation:
+       '^'             { $$ = get_scriptdef('^'); }
        | '+'           { $$ = get_scriptdef('+'); }
        | '-'           { $$ = get_scriptdef('-'); }
        | '|'           { $$ = get_scriptdef('|'); }
        | 'o'           { $$ = get_scriptdef('o'); }
        | '>'           { $$ = get_scriptdef('>'); }
-       | '.'           { $$ = get_scriptdef('.'); }
        | DOTS          {
                if ( $1 > 1 ) 
-                   warning( "too many staccato dots", lexer->here_ch_c_l() );
+                   warning( "too many staccato dots", THIS->here_ch_C() );
                $$ = get_scriptdef('.');
        }
-       | error {
-               $$ = get_scriptdef('.');
-               yyerrok;
+       ;
+       
+mudela_script:
+       SCRIPT_IDENTIFIER               { $$ = $1->script(true); }
+       | script_definition             { $$ = $1; }
+       | script_abbreviation           { 
+               $$ = THIS->lexer_p_->lookup_identifier(*$1)->script(true);
+               delete $1;
        }
        ;
 
@@ -712,112 +740,96 @@ script_dir:
 
 pre_requests:
        | pre_requests pre_request {
-               pre_reqs.push($2);
-               $2->defined_ch_c_l_ = lexer->here_ch_c_l();
+               THIS->pre_reqs.push($2);
+               $2->defined_ch_C_ = THIS->here_ch_C();
        }
        ;
 
 pre_request: 
        open_request_parens     { 
-               defined_ch_c_l = lexer->here_ch_c_l();
-               $$ = get_request($1); 
+               //defined_ch_C = THIS->here_ch_C();
+               $$ = THIS->get_parens_request($1); 
        }
        ;
 
 voice_command:
        PLET    '{' INT '/' INT '}'             {
-               lexer->prefs.set_plet($3,$5);
+               THIS->default_duration_.set_plet($3,$5);
        }
        | DURATIONCOMMAND '{' STRING '}'        {
-               lexer->prefs.set_duration_mode(*$3);
+               THIS->set_duration_mode(*$3);
                delete $3;
        }
        | DURATIONCOMMAND '{' notemode_duration '}'     {
-               lexer->prefs.set_default_duration($3);
+               THIS->default_duration_ = *$3;
+               delete $3;
        }
-       | OCTAVECOMMAND '{' octave_quotes '}'   {
-               lexer->prefs.default_octave_i_ = $3;
+       | OCTAVECOMMAND '{' int '}'     {
+               THIS->default_octave_i_ = $3;
        }
        | TEXTSTYLE STRING      {
-               lexer->prefs.textstyle_str_ = *$2;
+               THIS->textstyle_str_ = *$2;
                delete $2;
        }
        ;
 
 duration_length:       
-       mudela_duration         {
-               $$ = new Moment(wholes($1[0], $1[1]));
+        {
+               $$ = new Moment(0,1);
        }
-       |int '*' mudela_duration        {
-               $$ = new Moment(Rational($1) * wholes($3[0], $3[1]));
+       | duration_length explicit_duration             {       
+               *$$ += $2->length();
        }
        ;
 
 notemode_duration:
-       explicit_duration
-       | default_duration
-       ;
-
-mudela_duration:
-       int             {
-               $$[0] = $1;
-               $$[1] = 0;
+       /* */           { 
+               $$ = new Duration(THIS->default_duration_);
        }
-       | int DOTS      {
-               $$[0] = $1;
-               $$[1] = $2;
+       | DOTS          {
+               $$ = new Duration(THIS->default_duration_);
+               $$->dots_i_ = $1;
+       }
+       | explicit_duration     {
+               THIS->set_last_duration($1);
+               $$ = $1;
        }
        ;
 
-
 explicit_duration:
-       INT             {
-               lexer->prefs.set_last_duration($1);
-               $$[0] = $1;
-               $$[1] = 0;
-       }
-       | INT DOTS      {
-               lexer->prefs.set_last_duration($1);
-               $$[0] = $1;
-               $$[1] = $2;
+       int             {
+               $$ = new Duration;
+               $$->type_i_ = $1;
        }
-       | DOTS  {
-                lexer->prefs.get_default_duration($$);
-                $$[1] = $1;
+       | explicit_duration DOTS        {
+               $$->dots_i_ = $2;
        }
-       | INT '*' INT '/' INT {
-               // ugh, must use Duration
-               lexer->prefs.set_plet( $3, $5 );
-               $$[ 0 ] = $1;
-               $$[ 1 ] = 0;
-               lexer->prefs.set_plet( 1, 1 );
+       | explicit_duration '*' int  {
+               $$->plet_.iso_i_ *= $3; 
        }
-       ;
-
-default_duration:
-       /* empty */     {
-               lexer->prefs.get_default_duration($$);
+       | explicit_duration '/' int {
+               $$->plet_.type_i_ *= $3; 
        }
        ;
 
 
 voice_elt:
        steno_note_req notemode_duration                {
-               if (!lexer->note_state_b())
-                       yyerror("have to be in Note mode for notes");
-               $$ = get_note_element($1, $2);
+               if (!THIS->lexer_p_->note_state_b())
+                       THIS->parser_error("have to be in Note mode for notes");
+               $$ = THIS->get_note_element($1, $2);
        }
        | RESTNAME notemode_duration            {
-               $$ = get_rest_element(*$1, $2);
+               $$ = THIS->get_rest_element(*$1, $2);
                delete $1;
        }
        ;
 
 lyrics_elt:
        mudela_text notemode_duration                   {
-               if (!lexer->lyric_state_b())
-                       yyerror("Have to be in Lyric mode for lyrics");
-               $$ = get_word_element($1, $2);
+               if (!THIS->lexer_p_->lyric_state_b())
+                       THIS->parser_error("Have to be in Lyric mode for lyrics");
+               $$ = THIS->get_word_element($1, $2);
 
        };
 
@@ -930,56 +942,23 @@ dinterval: dim    dim             {
 
 %%
 
-void
-yyerror(const char *s)
+void 
+My_lily_parser::set_yydebug(bool b )
 {
-       lexer->LexerError(s);
-
-       if ( fatal_error_i )
-               exit( fatal_error_i );
+#ifdef YYDEBUG
+       yydebug = b;
+#endif
 }
-
 void
-parse_file(String init, String s)
+My_lily_parser::do_yyparse()
 {
-   *mlog << "Parsing ... ";
-   lexer = new My_lily_lexer;
-
-#ifndef NPRINT
-   yydebug = !monitor->silence("InitParser") && check_debug;
-   lexer->set_debug( !monitor->silence("InitLexer") && check_debug);
-#endif
-       init_parse_b = true;
-   lexer->new_input(init);
-   yyparse();
-
-#ifndef NPRINT
-   if (!monitor->silence("InitDeclarations") && check_debug)
-       lexer->print_init_declarations();
-
-   yydebug = !monitor->silence("Parser") && check_debug;
-   lexer->set_debug( !monitor->silence("Lexer") && check_debug);
-#endif
-       init_parse_b = false;
-   lexer->new_input(s);
-   yyparse();
-
-#ifdef NPRINT
-   if (!monitor->silence("Declarations") && check_debug)
-       lexer->print_user_declarations();
-#endif
-   delete lexer;
-   lexer = 0;
-
-   if(!define_spots.empty())
-       warning("Braces don't match.",0);
+       yyparse((void*)this);
 }
 
 Paper_def*
-default_paper()
+My_lily_parser::default_paper()
 {
     return new Paper_def(
-       lexer->lookup_identifier("default_table")->lookup(true));
+       lexer_p_->lookup_identifier("default_table")->lookup(true));
 }
 
-
index 39347b1d5bc1f7bf8628d3ab8818a2b0bf3d134d..97f91a6a6a44d5613fd268acb17ede3ef1a06d8f 100644 (file)
@@ -1,15 +1,24 @@
+/*
+  rest.cc -- implement Rest
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "duration.hh"
 #include "rest.hh"
 #include "dimen.hh" 
 #include "debug.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
 #include "molecule.hh"
+#include "rest.hh"
 
-
-Rest::Rest(int t, int d)
+Rest::Rest(Duration d)
 {
-    balltype = t;
-    dots = d;
+    balltype = d.type_i_;
+    dots = d.dots_i_;
+    pos_i_ = 0;
 }
 
 
@@ -37,6 +46,7 @@ Rest::brew_molecule_p()const
        dm.add(Atom(d));
        m->add_right(dm);
     }
+    m->translate(Offset(0,pos_i_ * paper()->internote()));
     return m;
 }
 
index cb764b2f7a014ca395e1c82eb2c23cdf3ff64f45..09b5439667a4cc62ad9755ec4b61c37455879f9c 100644 (file)
@@ -27,7 +27,7 @@ Score::setup_music()
     *mlog << "\nSetting up music ..." << flush;
     if (last() == Moment(0)) {
        errorlevel_i_ |= 1;
-       error("Need to have music in a score.", defined_ch_c_l_);
+       error("Need to have music in a score.", defined_ch_C_);
     }
 
     for (iter_top(staffs_,i); i.ok(); i++) {
@@ -234,7 +234,7 @@ Score::Score()
     paper_p_ = 0;
     midi_p_ = 0;
     errorlevel_i_ = 0;
-    defined_ch_c_l_ = 0;
+    defined_ch_C_ = 0;
 }
 
 Score::~Score()
@@ -263,7 +263,7 @@ Score::paper_output()
     
     the_output << "% outputting Score, defined at: " <<
        source_l_g->
-       sourcefile_l (defined_ch_c_l_)->file_line_no_str(defined_ch_c_l_) << "\n";
+       sourcefile_l (defined_ch_C_)->file_line_no_str(defined_ch_C_) << "\n";
     pscore_p_->output(the_output);
 }
 
index a6df7ead96730c30376bb83a255abe3b11f17daf..3115cb50072409d290ee74dd801570f65e67c79c 100644 (file)
@@ -15,7 +15,7 @@ do_scores()
        Input_score* &is_p = score_array_global[i];
        if (is_p->errorlevel_i_) {
            warning("Score contains errors. Will not process it. ",
-                   is_p->defined_ch_c_l_);
+                   is_p->defined_ch_C_);
            delete is_p;
            continue;
        } 
index 34bffee73d162c8af81999099d7df9e9b52ad944..a076664dd73fc3f5daa654b242fa19d5f84b03d1 100644 (file)
@@ -58,7 +58,7 @@ Slur_register::process_requests()
        if (slur_req_l->spantype == Span_req::STOP) {
            if (slur_l_stack_.empty())
                warning("can't find slur to end",
-                     slur_req_l->defined_ch_c_l_);
+                     slur_req_l->defined_ch_C_);
            else {
                end_slur_l_arr_.push(slur_l_stack_.pop());
                requests_arr_.pop();
@@ -95,6 +95,6 @@ Slur_register::post_move_processing()
 Slur_register::~Slur_register()
 {
     for (int i=0; i < requests_arr_.size(); i++) {
-       warning("unterminated slur", requests_arr_[i]->defined_ch_c_l_);
+       warning("unterminated slur", requests_arr_[i]->defined_ch_C_);
     }
 }
index 9a817f0190e6b7ae8b53fe48ff0c5e62640d5f5f..32cd6dab1f64fc4f12234bb1fb0d66d5b7c8145f 100644 (file)
@@ -69,7 +69,7 @@ Staff_walker::process_timing_reqs()
        if (tr_l->partial()) {
            time_.setpartial(tr_l->partial()->duration_);
        } else if (tr_l->barcheck() && time_.whole_in_measure_) {
-           warning( "Barcheck failed", tr_l->defined_ch_c_l_ );
+           warning( "Barcheck failed", tr_l->defined_ch_C_ );
        } else if (tr_l->cadenza()) {
            time_.set_cadenza(tr_l->cadenza()->on_b_);
        } else if (tr_l->measuregrouping()) {
index de09bb09409386cf3da081dfdd4a33710b21d1c9..ad947d2899f3e7ee24ab8bb1a8acec8324081a31 100644 (file)
@@ -41,7 +41,7 @@ Stem_beam_register::try_request(Request*req_l)
     
     if ( req_l->stem() ) {
        if (current_grouping && !current_grouping->child_fit_query(
-           get_staff_info().time_c_l_->whole_in_measure_))
+           get_staff_info().time_C_->whole_in_measure_))
            return false;
 
        if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *req_l->stem()))
@@ -81,15 +81,15 @@ Stem_beam_register::process_requests()
        stem_p_ = new Stem(4);
        if (current_grouping)
            current_grouping->add_child(
-               get_staff_info().time_c_l_->whole_in_measure_,
+               get_staff_info().time_C_->whole_in_measure_,
                stem_req_l_->duration());
 
-       stem_p_->flag = stem_req_l_->balltype;
+       stem_p_->flag = stem_req_l_->duration_.type_i_;
 
        if (beam_p_) {
-           if (stem_req_l_->balltype<= 4)
+           if (stem_req_l_->duration_.type_i_<= 4)
                warning( "stem doesn't fit in Beam",
-                        stem_req_l_->defined_ch_c_l_);
+                        stem_req_l_->defined_ch_C_);
            else
                beam_p_->add(stem_p_);
            stem_p_->print_flag = false;
@@ -124,9 +124,9 @@ Stem_beam_register::pre_move_processing()
        stem_p_ = 0;
     }
     if (beam_p_ && end_beam_b_) {
-       Rhythmic_grouping const * rg_c_l = get_staff_info().rhythmic_c_l_;
-       rg_c_l->extend(current_grouping->interval());
-       beam_p_->set_grouping(*rg_c_l, *current_grouping);
+       Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
+       rg_C->extend(current_grouping->interval());
+       beam_p_->set_grouping(*rg_C, *current_grouping);
        typeset_element(beam_p_);
        delete current_grouping;
        current_grouping = 0;
@@ -146,7 +146,7 @@ Stem_beam_register::post_move_processing()
 Stem_beam_register::~Stem_beam_register()
 {
     if (beam_p_)
-       warning("unterminated beam", start_req_l_->defined_ch_c_l_);
+       warning("unterminated beam", start_req_l_->defined_ch_C_);
 }
 
 void
index 7df0ef372bcb373b8ac6d42eec74285110bfad76..4881783f5c84ddd5a0fff28bf6275f0ac1b8adfe 100644 (file)
@@ -3,13 +3,10 @@
 #include "input-staff.hh"
 #include "input-music.hh"
 #include "molecule.hh"
-#include "source-file.hh"
 #include "voice-element.hh"
 #include "plist.tcc"
 #include "pcursor.tcc"
 
-IPL_instantiate(Atom);
 IPL_instantiate(Atom);
 IPL_instantiate(Input_staff);
 IPL_instantiate(Input_music);
-IPL_instantiate(Source_file);
index 4157f085638f18b98767cb6c174fef83367cb755..5e2e959181c674aa1d29c0427ba55f45bd14df4e 100644 (file)
@@ -29,8 +29,7 @@ Tex_stream::header()
     *os << "% Creator: " << get_version_str();
     *os << "% Automatically generated, at ";
     time_t t(time(0));
-    *os << ctime(&t);
-    *os << "% from musical definition: " + infile_str_g + "\n";
+    *os << ctime(&t)<<"\n";
 }
 Tex_stream::~Tex_stream()
 {
index cd2961b65e429f57c6d3ed9adb7ec44798a9f8f2..22affae7edbc6a29546f2d0ea61c2344849eafdd 100644 (file)
@@ -8,7 +8,7 @@ Text_def::Text_def()
 {   
     align_i_ = 1;                      // right
     style_str_ = "roman";
-    defined_ch_c_l_ = 0;
+    defined_ch_C_ = 0;
 }
 bool
 Text_def::compare(Text_def const &def)
index 5b59242c75b7d84bfed9c0f28f82374fdc015de4..4c1249b14072d7fb54f874b8f447ce84288a7057 100644 (file)
@@ -52,12 +52,12 @@ Voice_element::Voice_element()
 {
     voice_l_ = 0;
     duration = 0;
-    defined_ch_c_l_ = 0;
+    defined_ch_C_ = 0;
 }
 
 Voice_element::Voice_element(Voice_element const&src)
 {
-    defined_ch_c_l_ = src.defined_ch_c_l_;
+    defined_ch_C_ = src.defined_ch_C_;
 
     voice_l_=0;
     for (iter_top(src.reqs, i); i.ok(); i++)
@@ -97,9 +97,10 @@ Voice_element::set_plet_backwards(Moment& now_moment_r,
     for ( PCursor<Request*> i( reqs.top() ); i.ok(); i++ ) {
        if (i->beam() && i->beam()->spantype == Span_req::START )
            i->beam()->nplet = den_i;
-       if (i->rhythmic())
-           i->rhythmic()->plet_factor = Moment(num_i, den_i);
-       if (i->stem())
-           i->stem()->plet_factor = Moment(num_i, den_i);
+       if (i->rhythmic()) {
+           i->rhythmic()->duration_.plet_.type_i_ = den_i;
+           i->rhythmic()->duration_.plet_.iso_i_  = num_i;
+           
+       }
     }
 }
index 425167422f70bdef03dd428df5385a775417f376..b258bd559d23b42ebcabe28b4eb30b1d68da02da 100644 (file)
@@ -153,7 +153,7 @@ Walker_registers::try_request(Request * r)
            change_group(cr_l->groupchange(), 0, 0);
        } else 
            warning("junking request: "  + String(r->name()),
-                   r->defined_ch_c_l_);
+                   r->defined_ch_C_);
     }
     return b;
 }
@@ -166,8 +166,8 @@ Walker_registers::get_staff_info() return inf;
        inf.break_allowed_b_ = walk_l_->score_walk_l_->break_allowed_b();
     inf.c0_position_i_ = &walk_l_->c0_position_i_;
     inf.walk_l_ = walk_l_;
-    inf.time_c_l_ = &walk_l_->time_;
-    inf.rhythmic_c_l_ = walk_l_->default_grouping;
+    inf.time_C_ = &walk_l_->time_;
+    inf.rhythmic_C_ = walk_l_->default_grouping;
 }
 
 Paper_def*
index 4fe33452cce9476826f3e9f13194a60e403fcbf4..2b9f1db767d265d4a5a2cfcef701e71834aab139 100644 (file)
@@ -21,10 +21,7 @@ warning(String s)
 void
 error(String s)
 {
-    if (busy_parsing())
-       yyerror(s);
-    else
-       cerr <<  "error: " << s << "\n";
+    cerr <<  "error: " << s << "\n";
        
     exit(1);
 }
@@ -45,17 +42,17 @@ error_t(String const & s, Time_description const &t_tdes)
 }
 
 void
-message( String message_str, char const* context_ch_c_l )
+message( String message_str, char const* context_ch_C )
 {
     String str = "";           //"lilypond: ";// GNU format messages!
-    Source_file* sourcefile_l = source_l_g->sourcefile_l( context_ch_c_l );
+    Source_file* sourcefile_l = source_l_g->sourcefile_l( context_ch_C );
     if ( sourcefile_l ) {
-       str += sourcefile_l->file_line_no_str(context_ch_c_l) + String(": ");
+       str += sourcefile_l->file_line_no_str(context_ch_C) + String(": ");
     }
     str += message_str;
     if ( sourcefile_l ) {
        str += ":\n";
-       str += sourcefile_l->error_str( context_ch_c_l );
+       str += sourcefile_l->error_str( context_ch_C );
     }
     if ( busy_parsing() )
        cerr << endl;
@@ -63,19 +60,19 @@ message( String message_str, char const* context_ch_c_l )
 }
 
 void
-warning( String message_str, char const* context_ch_c_l )
+warning( String message_str, char const* context_ch_C )
 {
-    message( "warning: " + message_str, context_ch_c_l );
+    message( "warning: " + message_str, context_ch_C );
 }
 
 void
-error( String message_str, char const* context_ch_c_l )
+error( String message_str, char const* context_ch_C )
 {
-    message( message_str, context_ch_c_l );
+    message( message_str, context_ch_C );
     // since when exits error again?
     // i-d say: error: errorlevel |= 1; -> no output upon error
     //          warning: recovery -> output (possibly wrong)
-    if ( lexer )
-        lexer->errorlevel_i_ |= 1;
+/*    if ( lexer )
+        lexer->errorlevel_i_ |= 1;*/
 //    exit( 1 );
 }
index 0e06b46cac9898b6daeeee727651a710edfde1d0..3f3e5f86d1b2bcdbe2da06cce017099b52fa8731 100644 (file)
@@ -40,7 +40,7 @@ $(outdir)/%.hh: %.y
        mv $(shell basename $@ .hh ).tab.c $(outdir)/$(shell basename $@ .hh).cc
 
 $(outdir)/%.cc: %.l
-       $(FLEX)  -t $< > $@
+       $(FLEX) -Cfe -p -p -t $< > $@
 
 $(outdir)/%.text: $(outdir)/%.1
        groff -man -Tascii $< > $@
@@ -65,21 +65,3 @@ $(outdir)/%.1: %.pod
 %/.build:
        echo 0 >$@
 
-
-# specific stuff:
-#
-$(LIBFLOWER): check-flower-deps
-
-check-flower-deps:
-       $(MAKE)  -C $(depth)/flower/ $(outdir)/$(notdir $(LIBFLOWER))
-
-check-lily-deps: check-flower-deps
-       $(MAKE)  -C $(depth)/lib
-
-check-doc-deps:
-       $(MAKE) -C $(depth)/Documentation
-
-$(LIBLILY): dummy
-       $(MAKE) ./$(outdir)/$(@F) -C $(depth)/lib
-#
-
index 9859802a58f851ee1cec5fb64909cb32e0a29563..5ae0c4bdc537c8418594b318f77f416d9cfb46e6 100644 (file)
@@ -31,7 +31,7 @@ include ./$(depth)/make/out/Site.make
 EXECUTABLE = $(lily_bindir)/$(NAME)
 $(EXECUTABLE): $(build) $(OFILES) $(CUSTOMLIBES) 
        $(INCREASE_BUILD)
-       $(MAKE) $(OFILES)  $(SILENT_LOG)
+       $(MAKE) -S $(OFILES)  $(SILENT_LOG)
 #      $(STRIPDEBUG) $(STABLEOBS)
        $(LD_COMMAND) $(OFILES) $(LOADLIBES)
 
@@ -138,20 +138,19 @@ ifdef SUBDIRS
        set -e; for i in $(SUBDIRS); do $(MAKE) localdir=$(localdir)/$$i -C $$i localmoduledist; done
 endif
 
-all-tags: TAGS
-ifdef SUBDIRS
-       set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i all-tags; done
-endif
-
-TAGS: $(all-tag-sources)
+TAGS:$(all-tag-sources)
 ifdef all-tag-sources
        -etags -CT $(all-tag-sources) /dev/null
 endif
+ifdef SUBDIRS
+       set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i TAGS ; done
+endif
+
 
 # version stuff:
 #
 
-out/version.hh: .version
+$(outdir)/version.hh: .version
        ./$(lily_bindir)/make_version > $@
 
 
@@ -176,3 +175,21 @@ ifdef SUBDIRS
 endif
 
 localuninstall:
+
+# specific stuff:
+#
+$(LIBFLOWER): check-flower-deps
+
+check-flower-deps:
+       $(MAKE)  -C $(depth)/flower/ $(outdir)/$(notdir $(LIBFLOWER))
+
+check-lily-deps: check-flower-deps
+       $(MAKE)  -C $(depth)/lib
+
+check-doc-deps:
+       $(MAKE) -C $(depth)/Documentation
+
+$(LIBLILY): dummy
+       $(MAKE) ./$(outdir)/$(@F) -C $(depth)/lib
+#
+
index 8c54e9fba05f302f1da911275a60ac35ae614673..abe60c7a9a7dbbb8dfdcfa3a8abca5cda346b6c7 100644 (file)
@@ -95,6 +95,7 @@ DUMMYDEPS=\
 ERROR_LOG = 2> /dev/null
 SILENT_LOG = >& /dev/null
 allexe = $(lily_bindir)/lilypond $(lily_bindir)/mi2mu
+allhh := $(shell $(FIND) -name "*.hh" $(ERROR_LOG))
 allcc := $(shell $(FIND) -name "*.cc" $(ERROR_LOG))
 allobs := $(shell $(FIND) $(outdir) -name "*.o" $(ERROR_LOG))
 allibs := $(shell $(FIND) $(libdir) -name "*.lib" $(ERROR_LOG))
@@ -121,7 +122,7 @@ CXXFLAGS = $(CFLAGS) $(USER_CXXFLAGS) $(EXTRA_CXXFLAGS)
 INCLUDES = -Iinclude -I$(outdir) -I$(include-lib) -I$(libout) -I$(include-flower) -I$(flowerout) 
 CXX_OUTPUT_OPTION = $< -o $@
 LDFLAGS = $(EXTRA_LDFLAGS)
-LOADLIBES = $(EXTRA_LIBES) $(CUSTOMLIBES) -lg++
+LOADLIBES = $(EXTRA_LIBES) $(CUSTOMLIBES)
 #
 
 # librarian:
@@ -168,3 +169,7 @@ LIBRARY = $(LIB_PREFIX)$(NAME)$(LIB_SUFFIX)
 STRIPDEBUG=true #replace to do stripping of certain objects
 
 DISTFILES=$(EXTRA_DISTFILES) Makefile $(ALL_SOURCES)
+DOCDIR=$(depth)/doc++
+
+
+progdocs=$(allhh) $(allcc) 
index 887c92075ab4f60471d349944673b718cb3f3deb..600f62b6173bc1db38b08694f414989605df0343 100644 (file)
@@ -7,7 +7,7 @@ Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-@TOPLEVEL_VERSION@.tar.gz
 Summary: A preprocessor to make TeX typeset music.
 URL: http://www.stack.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
-Icon: lelie_logo.gif
+Icon: lelie_icon.gif
 
 %description
 LilyPond is a program which converts a music-script (mudela) into
index 0210f523eb4e3ca6adaa069f7ac22253d128fdbb..a6a7c591024bd09112e9a0ef44a795748c840674 100644 (file)
@@ -32,8 +32,8 @@
 #include "lgetopt.hh"
 
 #include "moment.hh"
+#include "duration-convert.hh"
 #include "duration.hh"
-#include "input-file.hh"
 #include "source-file.hh"
 #include "source.hh"
 
index 0ab49a340db85af3d43fad6e29c3e6c6db2aeb09..13ef7710670d2493bbcac8825e4343bc8c24de25 100644 (file)
@@ -25,10 +25,10 @@ extern Verbose level_ver;
 #define qtor if ( level_ver >= QUIET_ver ) *monitor_p_g
 #endif
 
-extern Source* source_l_g;
-void message( String message_str, char const* context_ch_c_l );
-void warning( String message_str, char const* context_ch_c_l );
-void error( String message_str, char const* context_ch_c_l );
+extern Sources* source_l_g;
+void message( String message_str, char const* context_ch_C );
+void warning( String message_str, char const* context_ch_C );
+void error( String message_str, char const* context_ch_C );
 
 String mi2mu_version_str();
 
index 032bf6752b848a8b02bd206246bf4ddda910cbce..9db1c436144f12c7b1ecd0773c51658f674e6f5e 100644 (file)
 
 int yylex();
 void yyerror(const char *s);
-// bool busy_parsing();
-// void kill_lexer();
-// void set_lexer();
 
 /// (midi_lexer)
 class My_midi_lexer : yyFlexLexer {
 public:
-       My_midi_lexer( String filename_str );
+       My_midi_lexer( String &filename_str ,Sources * );
        ~My_midi_lexer();
 
        int close_i();
        void error( char const* sz_l );
-       char const* here_ch_c_l();
+       char const* here_ch_C();
        static int varint2_i( String str );
        int yylex();
-
+    Source_file * source_file_p_ ;
 private:
-       Input_file* input_file_p_;
-
+    int char_count_;
 public: // ugh
        int errorlevel_i_;
 };
index 02bbb843e80b9029c8f8255839086be13f01a364..95367f3fa099c2d6b49cd9cfee2dc7aaf56e457a 100644 (file)
@@ -6,55 +6,56 @@
 #ifndef MY_MIDI_PARSER_HH
 #define MY_MIDI_PARSER_HH
 
-// #include "proto.hh"
-// #include "string.hh"
 
 int yyparse();
 
-/// (midi_parser)
+/** 
+  An interface to the YACC midi parser.
+  (midi_parser)
+ */
 class My_midi_parser {
 public:
-       My_midi_parser( String filename_str );
-       ~My_midi_parser();
-
-       void add_score( Midi_score* midi_score_p );
-       void error( char const* sz_l );
-       int parse();
-       void forward( int i );
-       Moment mom();
-       void note_begin( int channel_i, int pitch_i, int dyn_i );
-       Midi_event* note_end_midi_event_p( int channel_i, int pitch_i, int dyn_i );
-       int output_mudela( String filename_str );
-       void reset();
-       void set_division_4( int division_4_i );
-       void set_key( int accidentals_i, int minor_i );
-       void set_tempo( int useconds_per_4_i );
-       void set_time( int num_i, int den_i, int clocks_i, int count_32_i );
-
-       int bar_i_;
-       int track_i_;
-       String filename_str_;
-       String copyright_str_;
-       String instrument_str_;
-       String track_name_str_;
-
-       Midi_key* midi_key_p_;
-       Midi_tempo* midi_tempo_p_;
-       Midi_time* midi_time_p_;
+    My_midi_parser( String filename_str,Sources * );
+    ~My_midi_parser();
+
+    void add_score( Midi_score* midi_score_p );
+    void error( char const* sz_l );
+    int parse();
+    void forward( int i );
+    Moment mom();
+    void note_begin( int channel_i, int pitch_i, int dyn_i );
+    Midi_event* note_end_midi_event_p( int channel_i, int pitch_i, int dyn_i );
+    int output_mudela( String filename_str );
+    void reset();
+    void set_division_4( int division_4_i );
+    void set_key( int accidentals_i, int minor_i );
+    void set_tempo( int useconds_per_4_i );
+    void set_time( int num_i, int den_i, int clocks_i, int count_32_i );
+
+    int bar_i_;
+    int track_i_;
+    String filename_str_;
+    String copyright_str_;
+    String instrument_str_;
+    String track_name_str_;
+
+    Midi_key* midi_key_p_;
+    Midi_tempo* midi_tempo_p_;
+    Midi_time* midi_time_p_;
 
 private:
-       I64 now_i64_;   // 31 bits yields tipically about 1000 bars
+    I64 now_i64_;      // 31 bits yields tipically about 1000 bars
 
-       static int const CHANNELS_i = 16;
-       static int const PITCHES_i = 128;
-       I64 running_i64_i64_a_[ CHANNELS_i ][ PITCHES_i ];
+    static int const CHANNELS_i = 16;
+    static int const PITCHES_i = 128;
+    I64 running_i64_i64_a_[ CHANNELS_i ][ PITCHES_i ];
 
-       Midi_score* midi_score_p_;
-       int division_1_i_;
+    Midi_score* midi_score_p_;
+    int division_1_i_;
 
-       char const* defined_ch_c_l_;
-       int fatal_error_i_;
-       My_midi_lexer* midi_lexer_p_;
+    char const* defined_ch_C_;
+    int fatal_error_i_;
+    My_midi_lexer* midi_lexer_p_;
 };
 
 extern My_midi_parser* midi_parser_l_g;
index 2ac5bc778d7989a521de10c9364ba44b79380aa0..f1b61cab5bdc3b36fa2bc6cfc0857a51fee5dc4c 100644 (file)
 
 Lily_stream::Lily_stream( String filename_str )
 {
-       filename_str_ = filename_str;
-       os_p_ = 0;
-       indent_i_ = 0;
-       comment_mode_bo_ = false;
-       column_i_ = 0;
-       wrap_column_i_ = 60;
-       open();
-       header();
+    filename_str_ = filename_str;
+    os_p_ = 0;
+    indent_i_ = 0;
+    comment_mode_bo_ = false;
+    column_i_ = 0;
+    wrap_column_i_ = 60;
+    open();
+    header();
 }
 
 Lily_stream::~Lily_stream()
 {
-       delete os_p_;
-       if ( indent_i_ )
-               warning( "lily indent level: " + String( indent_i_ ), 0 );
+    delete os_p_;
+    if ( indent_i_ )
+       warning( "lily indent level: " + String( indent_i_ ), 0 );
 }
 
 Lily_stream&
 Lily_stream::operator <<( String str )
 {
-       static String nobreak_str = "\\`'_-.^<>*@";
-       while ( str.length_i() ) {
-               int max_i = wrap_column_i_ - column_i_ - 1;
-               int i = str.length_i() - 1 <? max_i;
-               int nl_i = str.left_str( i + 1 ).index_i( '\n' );
-               if ( nl_i != -1 ) {
-                       i = nl_i - 1;
-                       str = str.nomid_str( nl_i, 1 );
-               }
+    static String nobreak_str = "\\`'_-.^<>*@";
+    while ( str.length_i() ) {
+       int max_i = wrap_column_i_ - column_i_ - 1;
+       int i = str.length_i() - 1 <? max_i;
+       int nl_i = str.left_str( i + 1 ).index_i( '\n' );
+       if ( nl_i != -1 ) {
+           i = nl_i - 1;
+           str = str.nomid_str( nl_i, 1 );
+       }
 
-               if ( ( i != str.length_i() - 1 ) && ( nl_i == -1 ) ) {
-                       while ( i && ( isalnum( str[ i ] ) 
-                               || ( nobreak_str.index_i( str[ i ] ) != -1 ) ) )
-                               i--;
+       if ( ( i != str.length_i() - 1 ) && ( nl_i == -1 ) ) {
+           while ( i && ( isalnum( str[ i ] ) 
+                          || ( nobreak_str.index_i( str[ i ] ) != -1 ) ) )
+               i--;
 
-                       if ( !i ) { // no room left
-                               if ( column_i_ > 8 * indent_i_ ) {
-                                       newline();
-                                       if ( comment_mode_bo_ && ( str[ 0 ] != '%' ) )
-                                               str = "%" + str;
-                                       continue;
-                               }
-                               else { // cannot break neatly...
-                                       i = max_i;
-                               }
-                       }
+           if ( !i ) { // no room left
+               if ( column_i_ > 8 * indent_i_ ) {
+                   newline();
+                   if ( comment_mode_bo_ && ( str[ 0 ] != '%' ) )
+                       str = "%" + str;
+                   continue;
                }
-                               
-               String line = str.left_str( i + 1 ); 
-               str = str.mid_str( i + 1, INT_MAX );
-               *os_p_ << line;
-               column_i_ += line.length_i();
-               if ( nl_i != -1 )
-                        newline();
-               else
-                       check_comment( line );
-               if ( ( str.length_i() && ( nl_i == -1 ) ) || ( column_i_ >= wrap_column_i_ ) ) {
-                       //brr.
-                       if ( comment_mode_bo_ )
-                               str = "%" + str;
-                       newline();
+               else { // cannot break neatly...
+                   i = max_i;
                }
-       }       
-       return *this;
+           }
+       }
+                               
+       String line = str.left_str( i + 1 ); 
+       str = str.mid_str( i + 1, INT_MAX );
+       *os_p_ << line;
+       column_i_ += line.length_i();
+       if ( nl_i != -1 )
+           newline();
+       else
+           check_comment( line );
+       if ( ( str.length_i() && ( nl_i == -1 ) ) || ( column_i_ >= wrap_column_i_ ) ) {
+           //brr.
+           if ( comment_mode_bo_ )
+               str = "%" + str;
+           newline();
+       }
+    }  
+    return *this;
 }
 
 Lily_stream&
 Lily_stream::operator <<( Midi_event& midi_event_r )
 {
-       midi_event_r.output_mudela( *this, false );
-       *os_p_ << flush;
-       return *this;
+    midi_event_r.output_mudela( *this, false );
+    *os_p_ << flush;
+    return *this;
 }
 
 void
 Lily_stream::check_comment( String str )
 {
-       int newline_i = str.index_last_i( '\n' );
-       if ( newline_i != -1 ) {
-               str = str.mid_str( newline_i +1, INT_MAX );
-               comment_mode_bo_ = false;
-       }
-       if ( str.index_i( '%' ) != -1 )
-               comment_mode_bo_ = true;
+    int newline_i = str.index_last_i( '\n' );
+    if ( newline_i != -1 ) {
+       str = str.mid_str( newline_i +1, INT_MAX );
+       comment_mode_bo_ = false;
+    }
+    if ( str.index_i( '%' ) != -1 )
+       comment_mode_bo_ = true;
 }
 
 void
 Lily_stream::header()
 {
-       *os_p_ << "% Creator: " << mi2mu_version_str() << "\n";
-       *os_p_ << "% Automatically generated, at ";
-       time_t t( time( 0 ) );
-       *os_p_ << ctime( &t );
-       *os_p_ << "% from input file: ";
-       *os_p_ << midi_parser_l_g->filename_str_;
-       *os_p_ << "\n\n";    
+    *os_p_ << "% Creator: " << mi2mu_version_str() << "\n";
+    *os_p_ << "% Automatically generated, at ";
+    time_t t( time( 0 ) );
+    *os_p_ << ctime( &t );
+    *os_p_ << "% from input file: ";
+    *os_p_ << midi_parser_l_g->filename_str_;
+    *os_p_ << "\n\n";    
 }
-
+/*
+  snapnie: dit kan toch automaties? Zie ook dstream.
+  */
 void
 Lily_stream::indent()
 {
-       indent_i_++;
-       newline();
+    indent_i_++;
+    newline();
 }
 
 void
 Lily_stream::newline()
 {
-       *os_p_ << endl << String( '\t', indent_i_ );
-       column_i_ = indent_i_ * 8;
-       comment_mode_bo_ = false;
+    *os_p_ << endl << String( '\t', indent_i_ );
+    column_i_ = indent_i_ * 8;
+    comment_mode_bo_ = false;
 }
 
 void
 Lily_stream::open()
 {
-       os_p_ = new ofstream( filename_str_ );
-       if ( !*os_p_ )
-               error ( "can't open `" + filename_str_ + "\'", 0 );
+    os_p_ = new ofstream( filename_str_ );
+    if ( !*os_p_ )
+       error ( "can't open `" + filename_str_ + "\'", 0 );
 }
 
 void
 Lily_stream::tnedni()
 {
-       assert( indent_i_ > 0 );
-       indent_i_--;
-       newline();
+    assert( indent_i_ > 0 );
+    indent_i_--;
+    newline();
 }
 
index e04cb02b0968d805e1115bbdb33da8fa7b667143..31dfe9e5e0a0731df835f45bed39a3aea5cc09d8 100644 (file)
@@ -6,13 +6,13 @@
 
 #include "mi2mu.hh"
 
-Source source;
-Source* source_l_g = &source;
+Sources source;
+Sources* source_l_g = &source;
 
 Verbose level_ver = NORMAL_ver;
 
 //ugh
-char const* defined_ch_c_l = 0;
+char const* defined_ch_C = 0;
 
 // ugh, another global
 String
@@ -23,17 +23,17 @@ find_file( String str )
 
 // ugh, copied from warn.cc, cannot use
 void
-message( String message_str, char const* context_ch_c_l )
+message( String message_str, char const* context_ch_C )
 {
     String str = "mi2mu: ";
-    Source_file* sourcefile_l = source_l_g->sourcefile_l( context_ch_c_l );
+    Source_file* sourcefile_l = source_l_g->sourcefile_l( context_ch_C );
     if ( sourcefile_l ) {
-       str += sourcefile_l->file_line_no_str(context_ch_c_l) + String(": ");
+       str += sourcefile_l->file_line_no_str(context_ch_C) + String(": ");
     }
     str += message_str;
     if ( sourcefile_l ) {
        str += ":\n";
-       str += sourcefile_l->error_str( context_ch_c_l );
+       str += sourcefile_l->error_str( context_ch_C );
     }
 //    if ( busy_parsing() )
     cerr << endl; // until we have fine output manager...
@@ -41,15 +41,15 @@ message( String message_str, char const* context_ch_c_l )
 }
 
 void
-warning( String message_str, char const* context_ch_c_l )
+warning( String message_str, char const* context_ch_C )
 {
-    message( "warning: " + message_str, context_ch_c_l );
+    message( "warning: " + message_str, context_ch_C );
 }
 
 void
-error( String message_str, char const* context_ch_c_l )
+error( String message_str, char const* context_ch_C )
 {
-    message( message_str, context_ch_c_l );
+    message( message_str, context_ch_C );
     // since when exits error again?
     // i-d say: error: errorlevel |= 1; -> no output upon error
     //          warning: recovery -> output (possibly wrong)
@@ -89,7 +89,6 @@ notice()
        "  Han-Wen Nienhuys <hanwen@stack.nl>\n"
 //     "Contributors\n"
        "  Jan Nieuwenhuizen <jan@digicash.com>\n"
-//     "  Mats Bengtsson <matsb@s3.kth.se>\n"
        "\n"
        "    This program is free software; you can redistribute it and/or\n"
        "modify it under the terms of the GNU General Public License version 2\n"
@@ -113,7 +112,6 @@ main( int argc_i, char* argv_sz_a[] )
                0, "be-blonde", 'b',
                0, "debug", 'd',
                0, "help", 'h',
-//             1, "include", 'I',
                0, "no-silly", 'n',
                1, "output", 'o',
                0, "quiet", 'q',
@@ -137,9 +135,6 @@ main( int argc_i, char* argv_sz_a[] )
                                help();
                                exit( 0 );
                                break;
-//                     case 'I':
-//                             path->push( getopt_long.optarg );
-//                             break;
                        case 'n':
                                Duration_convert::no_double_dots_b_s = false;
                                Duration_convert::no_triplets_b_s = true;
@@ -165,20 +160,23 @@ main( int argc_i, char* argv_sz_a[] )
 
        char* arg_sz = 0;
        while ( ( arg_sz = getopt_long.get_next_arg() ) ) {
-               My_midi_parser midi_parser( arg_sz );
+               My_midi_parser midi_parser( arg_sz, & source );
+               midi_parser_l_g = &midi_parser;
+
                int error_i = midi_parser.parse();
                if ( error_i )
                        return error_i;
                if ( !output_str.length_i() ) {
-                       output_str = String( arg_sz ) + ".ly";
-                       // i-m sure there-s already some routine for this
-                       int name_i; // too bad we can-t declare local to if
-                       if ( ( name_i = output_str.index_last_i( '/' ) ) != -1 )
-                               output_str = output_str.mid_str( name_i + 1, INT_MAX );
+                   String d, dir, base, ext;
+
+                   split_path(arg_sz, d, dir, base, ext);
+                   
+                   output_str = base + ext + ".ly";
                }
                error_i = midi_parser.output_mudela( output_str );
                if ( error_i )
                        return error_i;
+               midi_parser_l_g = 0;
        }
        return 0;
 }
index e1b7178851f42fd969358a69afaaa3e351fd14c0..78773e72084d8b62907c9b63705f208c3ce84d26 100644 (file)
@@ -6,7 +6,7 @@
 #include "version.hh"
 
 
-static char *s = "mi2mu " MAJOR_VERSION "." MINOR_VERSION "."  MY_PATCH_LEVEL " #%d";
+static char *s = "mi2mu " MAJOR_VERSION "." MINOR_VERSION "."  PATCH_LEVEL MY_PATCH_LEVEL " #%d";
 
 static const int build=
 #include ".build"
index 6bc15a4cf9fc34680fdbe9703534987e93eadf3a..4ab611cd4f1e2e8f076a390aa4fa899872e0155e 100644 (file)
@@ -97,20 +97,20 @@ Midi_note::mudela_str( bool command_mode_bo )
 
        //ugh
        String str;
-       if ( dur_.plet_p_ )
+       if ( dur_.plet_b() )
                str += String( "\\plet{ " )
-                       + String_convert::i2dec_str( dur_.plet_p_->iso_i_, 0, 0 )
+                       + String_convert::i2dec_str( dur_.plet_.iso_i_, 0, 0 )
                        + "/"
-                       + String_convert::i2dec_str( dur_.plet_p_->type_i_, 0, 0 )
+                       + String_convert::i2dec_str( dur_.plet_.type_i_, 0, 0 )
                        + " } ";
 
        str += name_str_;
 
        Duration dur = dur_;
-       dur.set_plet( 0 );
+       dur.set_plet( 1,1 );
        str += Duration_convert::dur2_str( dur );
 
-       if ( dur_.plet_p_ )
+       if ( dur_.plet_b() )
                str += String( " \\plet{ 1/1 }" );
                
        return str;
@@ -162,7 +162,7 @@ Midi_text::mudela_str( bool command_mode_bo )
 {
        (void)command_mode_bo;
        if ( !text_str_.length_i() 
-               || ( text_str_.length_i() != (int)strlen( text_str_.ch_c_l() ) ) )
+               || ( text_str_.length_i() != (int)strlen( text_str_.ch_C() ) ) )
                return "";
 
        return "% " + text_str_ + "\n\t";
index f83258789f6bb60ec72978d4fcde51205d53c637..6add2613c7e6d4d86c14e4f16d53d50262849aac 100644 (file)
@@ -1,16 +1,16 @@
-%{
+%{//-*-Fundamental-*-
 // midi-lexer.l
 
 
 #include "mi2mu.hh"
 #include "midi-parser.hh"
 
+#define YY_USER_ACTION char_count_ += YYLeng(); // ugh
 %}
 
 %option c++
 %option noyywrap
 %option nodefault
-%option yylineno
 %option debug
 %option yyclass="My_midi_lexer"
 %option stack
@@ -374,7 +374,7 @@ SSME                [\0x7f][\x03]
 <meta_event>{U8} {
        warning( String( "meta_event: unimplemented event: " )
                + String_convert::bin2hex_str( String( *YYText() ) ),
-               this->here_ch_c_l() );
+               this->here_ch_C() );
        yy_pop_state();
        yy_pop_state();
        yy_push_state( u8 ); 
index 843899567b42c5acced37e13ac7d644a3247fe4f..ba578d1dfc5bf21719fa8c515dedc3a311210db3 100644 (file)
@@ -8,71 +8,68 @@
 int
 yylex() 
 {
-       return midi_lexer_l_g->yylex();
+    return midi_lexer_l_g->yylex();
 }
 
 My_midi_lexer* midi_lexer_l_g = 0;
 
-My_midi_lexer::My_midi_lexer( String filename_str )
+My_midi_lexer::My_midi_lexer( String &filename_str, Sources * sources )
 {
-       midi_lexer_l_g = this;
-       input_file_p_ = new Input_file( filename_str );
-       switch_streams( input_file_p_->is );
-       errorlevel_i_ = 0;
+    source_file_p_ =sources->get_file_l(filename_str);
+    switch_streams( source_file_p_->istream_l() );
+    errorlevel_i_ = 0;
+    char_count_ = 0;
 }
 
 My_midi_lexer::~My_midi_lexer()
 {
-       delete input_file_p_;
-       midi_lexer_l_g = 0;
+    delete source_file_p_;
 }
 
 void
 My_midi_lexer::error( char const* sz_l )
 {
-    if ( !input_file_p_ ) {
-//     *mlog << "error at EOF" << sz_l << '\n';
+    if ( !source_file_p_ ) {
        cerr << "error at EOF" << sz_l << '\n';
     } else {
-       char const* ch_c_l = here_ch_c_l();
-       if ( ch_c_l ) {
-           ch_c_l--;
-           while ( ( *ch_c_l == ' ' ) || ( *ch_c_l == '\t' ) || ( *ch_c_l == '\n' ) )
-                   ch_c_l--;
-           ch_c_l++;
+       char const* ch_C = here_ch_C();
+       if ( ch_C ) {
+           ch_C--;
+           while ( ( *ch_C == ' ' ) || ( *ch_C == '\t' ) || ( *ch_C == '\n' ) )
+               ch_C--;
+           ch_C++;
        }
        errorlevel_i_ |= 1;
-//     ::error( sz_l, ch_c_l );
-       ::error( sz_l, ch_c_l );
+       ::error( sz_l, ch_C );
     }
 }
 
 char const*
-My_midi_lexer::here_ch_c_l()
+My_midi_lexer::here_ch_C()
 {
-    return input_file_p_->sourcefile_l_->ch_c_l() + yyin->tellg();
+    return source_file_p_->ch_C() + char_count_ ;
 }
 
 int
 My_midi_lexer::varint2_i( String str )
 {
-        int var_i = 0;
+    int var_i = 0;
 
-       for ( int i = 0; i < str.length_i(); i++ ) {
-               Byte byte = str[ i ];
-               var_i <<= 7;
-               var_i += byte & 0x7f;
-               if ( ! ( byte & 0x80 ) )
-                       return var_i;
-       }
-       cout << "\nvarint2_i:" << String_convert::bin2hex_str( str ) << endl;
-       assert( 0 ); // illegal varint
-       return 0;
+    for ( int i = 0; i < str.length_i(); i++ ) {
+       Byte byte = str[ i ];
+       var_i <<= 7;
+       var_i += byte & 0x7f;
+       if ( ! ( byte & 0x80 ) )
+           return var_i;
+    }
+    cout << "\nvarint2_i:" << String_convert::bin2hex_str( str ) << endl;
+    assert( 0 ); // illegal varint
+    return 0;
 }
 
 int
 My_midi_lexer::close_i()
 {
-       return 0;
+    return 0;
 }
 
index 5e6c2ced7d71e8e5549eece8e5e21b97effdc055..9a7ece723b412c50676f1f86ee70e48a3538f26c 100644 (file)
@@ -14,12 +14,13 @@ yyerror(char const* sz_l )
 
 My_midi_parser* midi_parser_l_g = 0;
 
-My_midi_parser::My_midi_parser( String filename_str )
+My_midi_parser::My_midi_parser( String filename_str, Sources *sources_l )
 {
-       midi_parser_l_g = this;
        filename_str_ = filename_str;
-       midi_lexer_p_ = new My_midi_lexer( filename_str_ );
-       defined_ch_c_l_ = 0;
+       midi_lexer_p_ = new My_midi_lexer( filename_str_,sources_l );
+       midi_lexer_l_g = midi_lexer_p_; // ugh
+
+       defined_ch_C_ = 0;
        fatal_error_i_ = 0;
        midi_key_p_ = 0;
        midi_score_p_ = 0;
@@ -32,8 +33,9 @@ My_midi_parser::My_midi_parser( String filename_str )
 
 My_midi_parser::~My_midi_parser()
 {
+    midi_lexer_l_g = 0;        // ugh
+
        delete midi_lexer_p_;
-       midi_parser_l_g = 0;
        delete midi_key_p_;
        delete midi_tempo_p_;
        delete midi_time_p_;
index be7a2a2352aaee2d6fd5734735b7555da652f80a..6024aa9f1de327ad1b31ce87afcc1ace4744f2b8 100644 (file)
@@ -21,6 +21,5 @@ IPL_instantiate(Midi_event);
 IPL_instantiate(Midi_track);
 PL_instantiate(Midi_voice);
 IPL_instantiate(Midi_voice);
-IPL_instantiate(Source_file);
 IPL_instantiate(Track_column);
 
index d9fe95dac7cb88134f6c2b1ff1e1d2758058b260..3eb7e4d25c358830924e7df90e9cea3d4fc3c430 100644 (file)
@@ -7,7 +7,7 @@ String
 mi2mu_version_str()
 {
        return String ( "This is " ) + mi2mu_version_sz()
-               + flower_version_sz()
+           + "/" + flower_version_sz()
                + " of " +  __DATE__ + " " + __TIME__;
 }