]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.0.12.hwn1
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 1 Oct 1998 18:42:02 +0000 (20:42 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 1 Oct 1998 18:42:02 +0000 (20:42 +0200)
pl 12.hwn1
- \remove "Engraver_type";
- \output "bla" -> output = "bla" (mudela 0.1.6)
- \property defaultclef -> \property defaultClef
- naming of access_{Engraver,Performer,Translator_group} ()
- changed syntax for \translator in \paper{} (mudela 0.1.6)
- declared contexts:

StaffContext = \translator { .. }
\translator { \StaffContext }

- elt_b -> elem_b
- bf: add Separating_line_group_engraver to RhythmicStaff.

pl 12.am1
- large doc patch, ChoireStaff -> ChoirStaff

*******
pl 12

179 files changed:
Documentation/tex/refman.yo
Documentation/tex/tutorial.yo
NEWS
TODO
VERSION
buildscripts/genheader.py
buildscripts/mf-to-table.py
flower/dictionary.cc
flower/dstream.cc
flower/include/assoc.hh
flower/include/interval.hh
flower/include/interval.tcc
init/bar-numbering.ly
init/book-fragment.ly
init/book-init.ly
init/center-fragment.ly
init/center.ly
init/engraver.ly
init/fragment.ly
init/init.fly
init/init.ly
init/paper16.ly
init/paper20.ly
init/performer.ly
init/score-bar-numbering.ly
init/score-paper.ly
input/example-3.ly
input/keys.ly
input/kortjakje.ly
input/part.ly
input/pedal.ly
input/praeludium-fuga-E.ly
input/rhythm.ly
input/scales.ly
input/scripts.ly
input/test/abbrev.ly
input/test/bar-scripts.ly
input/test/beam-chord.ly
input/test/beam-pos.ly
input/test/beams.ly
input/test/broken.ly
input/test/clefs.ly
input/test/collisions.ly
input/test/defaultbars.ly
input/test/denneboom.ly
input/test/dotted-slur.ly
input/test/find-quarts.ly
input/test/font-body.ly
input/test/font.ly
input/test/font16.ly
input/test/gourlay.ly
input/test/grace.ly
input/test/hara-kiri.ly
input/test/keys.ly
input/test/knee.ly
input/test/mark.ly
input/test/multi-rest.ly
input/test/ossia.ly
input/test/score-bar-scripts.ly
input/test/sleur.ly
input/test/slur-bug.ly
input/test/slur-damping.ly
input/test/slur-swap.ly
input/test/slurs.ly
input/test/spacing.ly
input/test/stem.ly
input/test/test-lyrics.ly
input/test/tie-bug.ly
input/test/tie.ly
input/test/title.ly
input/test/transposition.ly
input/test/vertical-align.ly
input/tril.ly
input/twinkle-pop.ly
input/twinkle.ly
lily/VERSION
lily/change-iterator.cc
lily/clef-engraver.cc
lily/engraver-group.cc
lily/engraver.cc
lily/include/engraver.hh
lily/include/music-output-def.hh
lily/include/paper-def.hh
lily/include/performer.hh
lily/include/timing-engraver.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/local-key-engraver.cc
lily/music-output-def.cc
lily/my-lily-lexer.cc
lily/p-score.cc
lily/paper-def.cc
lily/parser.yy
lily/performance.cc
lily/performer.cc
lily/scope.cc
lily/score-priority-engraver.cc
lily/scores.cc
lily/staff-performer.cc
lily/symtable.cc
lily/time-signature-engraver.cc
lily/translator-ctors.cc
lily/translator-group.cc
lily/translator.cc
make/STATE-VECTOR
mutopia/Coriolan/bassi-part.ly
mutopia/Coriolan/clarinetti-part.ly
mutopia/Coriolan/clarinetti.ly
mutopia/Coriolan/clarinetto-1.ly
mutopia/Coriolan/clarinetto-2.ly
mutopia/Coriolan/contrabasso-part.ly
mutopia/Coriolan/contrabasso.ly
mutopia/Coriolan/coriolan.ly
mutopia/Coriolan/corni-part.ly
mutopia/Coriolan/corni.ly
mutopia/Coriolan/corno-1.ly
mutopia/Coriolan/corno-2.ly
mutopia/Coriolan/fagotti-part.ly
mutopia/Coriolan/fagotti.ly
mutopia/Coriolan/fagotto-1.ly
mutopia/Coriolan/fagotto-2.ly
mutopia/Coriolan/flauti-part.ly
mutopia/Coriolan/flauti.ly
mutopia/Coriolan/flauto-1.ly
mutopia/Coriolan/flauto-2.ly
mutopia/Coriolan/global.ly
mutopia/Coriolan/oboe-1.ly
mutopia/Coriolan/oboe-2.ly
mutopia/Coriolan/oboi-part.ly
mutopia/Coriolan/oboi.ly
mutopia/Coriolan/timpani.ly
mutopia/Coriolan/trombe-part.ly
mutopia/Coriolan/trombe.ly
mutopia/Coriolan/trombo-1.ly
mutopia/Coriolan/trombo-2.ly
mutopia/Coriolan/viola-1.ly
mutopia/Coriolan/viola-2.ly
mutopia/Coriolan/viola-part.ly
mutopia/Coriolan/violino-1-part.ly
mutopia/Coriolan/violino-1.ly
mutopia/Coriolan/violino-2-part.ly
mutopia/Coriolan/violino-2.ly
mutopia/Coriolan/violoncello-part.ly
mutopia/Coriolan/violoncello.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Allemande.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Sinfonia.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-1.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-2.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-4.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-5.ly
mutopia/J.S.Bach/Petites-Preludes/preludes-6.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/scs-paper.ly
mutopia/J.S.Bach/wtk1-fugue1.ly
mutopia/J.S.Bach/wtk1-fugue2.ly
mutopia/J.S.Bach/wtk1-prelude1.ly
mutopia/W.A.Mozart/cadenza.ly
mutopia/W.A.Mozart/horn-concerto-3.ly
mutopia/gallina.ly
mutopia/los-toros-oboe.ly
mutopia/standchen-16.ly
mutopia/standchen-20.ly
mutopia/standchen.ly
scripts/convert-mudela.py
stepmake/NEWS
stepmake/VERSION
stepmake/stepmake/tex-rules.make
tex/lilyponddefs.tex

index 40e025e9112e6ed649bc1620fc6c15eec778afe2..ea02839fdd8c544bfacb1ef4a7a3d5e3e5791d26 100644 (file)
@@ -3,6 +3,10 @@ COMMENT(-*-text-*-)
 redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
     whenhtml(sc(ARG1)))
 
+
+redef(mycode)(1)(tt(ARG1))
+
+
 COMMENT( This document contains Mudela fragments.  You need at least
 Yodl-1.30.18 to convert this to tex or html.
 
@@ -20,15 +24,14 @@ latexlayoutcmds(
 \setlength{\textwidth}{5.875in} 
 \setlength{\oddsidemargin}{0.25in}   
 \setlength{\evensidemargin}{0.25in}
-\usepackage[T1]{fontenc}
 \input mudela-book
 )
 
-whenlatex(notableofcontents())
+COMMENT(whenlatex(notableofcontents()))
 whentexinfo(notableofcontents())
 
-article(Mudela, reference manual)
-      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
+article(Mudela Reference Manual)
+      (Andrew Moriano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
 
 COMMENT(
@@ -57,8 +60,9 @@ includefile(html-disclaimer.yo-urg)
 bf(This document is not up to date).  All rendered examples of course
 are current, but the rest probably isn't.  Adjusting the tutorial was
 considered more important than writing the reference manual.  We
-apologize for the inconvenience.
-
+apologize for the inconvenience.  For a complete and up-to-date
+definition, see file(lily/parser.yy), file(lily/lexer.ll), and the
+init files.
 
 This document describes the the GNU LilyPond input format, which is an
 effective language for defining music.  We call this language (rather
@@ -77,105 +81,164 @@ making use of identifiers, that allows for flexible input, and
 definition reuse. See the documentation file file(MANIFESTO), included
 with the LilyPond sources for reasons and design considerations.
 
-The below is included for explanatory purposes only (i.e., for a
-complete and up-to-date definition, see file(lily/parser.yy) and
-file(lily/lexer.ll)).
-
-As a related note, you should take a look at the examples and the init
-files, as this document does not cover every aspect of Mudela yet, and
-may be out of date.footnote(Ok, I am being pessimistic here.  This
-just is a disclaimer.  Docs usually are written after the program
-itself.)  This document intends to give an idea of how it works. It is
-not a guide on how to use it.
-
 
 sect(Running LilyPond)
 
-When invoked with a filename that has no extension, LilyPond will add
-a file(.ly) extension.  When invoked with a filename  ending  in
-file(.fly),  LilyPond processes  the file as a music fragment  using
-file(init.fly).  When file(foo.fly) is read, LilyPond does something
-like this:
-\verb(\score {
+When invoked with a filename that has no extension, LilyPond will try adding
+a file(.fly) extension first, and a file(.ly) extension second.  
+If the filename ends with 
+file(.fly),  LilyPond processes  the file as music using
+file(init.fly).  In this case, LilyPond does something
+like:
+verb(\score {
   \notes\relative c {
-    \input "foo.fly"
+    \input "yourfile.fly"
   }
   \paper{}
   \midi{}
 })
+If you invoke LilyPond with a file file(foo.)var(ext) that doesn't
+have the file(.ly) extension then LilyPond will look for a file called
+file(init.)var(ext) and process this file.  The file
+file(init.)var(ext) must contain the code(\maininput) keyword or LilyPond
+will not read the user specified file.
 
 
 sect(Syntax)
 
-A Mudela files consists of statements, generally
-separated by spaces, tabs or newlines.  A one line comment is
-introduced by a code(%) character.  Block comments are started by
-code(%{) and ended by code(%}).  They cannot be nested.
-
-Mudela supports several data types.  Four types of simple constants
-are supported: integers, reals, strings, and notes.  An integer is a
-sequence of digits such as code(12).  A real is fromed from an
-optional minus sign and a sequence of digits followed by a decimal
-point and an optional exponent such as code(-1.2e3).  A string is
-started and ended with the code(") character.  To include a code(")
-character in a string, you must write code(\").  Various other
-backslash sequences have special interpretations as in the C language.
-A string that contains no spaces can be written without the quotes.  A
-note consists of a note name followed by an optional duration.  See
-section ref(notedesc) for details on this type.  A dimension consists
-of a real followed by one of the dimension keywords: code(\mm),
-code(\pt), code(\in), or code(\cm).  Dimensions are converted
-immediately to a real which gives the dimension in points, so they can
-be mixed with reals.
+subsect(Basic Mudela)
+
+A Mudela file consists of keywords with arguments and identifier
+assignments separated by spaces, tabs or newlines.  (Semicolons are
+used by some keywords but are not generally required.)  A one line
+comment is introduced by a code(%) character.  Block comments are
+started by code(%{) and ended by code(%}).  They cannot be nested.
+
+Mudela supports several types:
+
+description(
+
+dit(integer) 
+Formed from an optional minus sign followed by digits.  Arithmetic
+operations cannot be done with integers, and integers cannot be mixed
+with reals.
+
+dit(real) 
+Formed from an optional minus sign and a sequence of digits followed
+by a emph(required) decimal point and an optional exponent such as
+code(-1.2e3).  Reals can be built up using the usual operations:
+code(+), code(-), code(*), and code(/), with parentheses for grouping.
+
+dit(string) 
+Begins and ends with the code(") character.  To include a code(")
+character in a string write code(\").  Various other backslash
+sequences have special interpretations as in the C language.  A string
+that contains no spaces can be written without the quotes.  See
+Section ref(modes) for details on unquoted strings; their
+interpretation varies depending on the situation.  On the right side
+of identifier assignments and within the code(\header) keyword,
+strings can be concatenated using the code(+) character.
+
+dit(dimension) Consists of a real followed by one of the dimension
+keywords: code(\mm), code(\pt), code(\in), or code(\cm).  Dimensions
+are converted immediately to a real which gives the dimension in
+points, so they can be mixed with reals, but the result is no longer
+of type dimension.  The keywords that require a dimension
+(code(\shape) and code(\symboltables)) will not accept this.
+
+dit(pitch) 
+A pitch is a string which is the name of a pitch.  Example: code(a).
+The pitch names can be redefined with the code(\notenames) keyword.
+See Section(notelang) for pitch names in different languages.  Pitches
+can only be specified inside note mode which is specified with
+code(\notes).  Therefore, keywords which require pitch arguments must
+appear inside code(\notes).  
+
+dit(music) 
+Music is a compound type: arbitrarily complicated expressions with a
+hierarchical structure can be formed from simple building blocks.  The
+simplest expression of type music is a single note.  A note is formed
+from a pitch and an optional duration and must be specified within
+code(\notes).  See Section ref(notedesc) for details.  More
+complicated expressions of type music are formed by surrounding a
+sequence of expressions of type music with braces code({) and code(})
+or with angle brackets code(<) and code(>).  Items appearing in braces
+will be treated as serial. Items in angle brackets will be
+simultaneous.  So for example code({ c e g }) represents an arpeggio
+and code(< c e g >) represents a chord.  These items can be nested any
+way you like.  This simple example shows how three chords can be
+expressed in two different ways:
+mudela(fragment,verbatim,center)(
+\notes<{a b  c'}{c' d' e'}{e' f' g'}>
+\notes{<a c' e'><b  d' f'><c' e' g'>}
+)
+
+)
+
 
+COMMENT(
 Compound types are built up from the simple types.  The compound types
 are: arglist, assignlist and musiclist.  An arglist is a
 white space separated list of integers, reals and or strings surrounded
 by braces code({) and code(}).  An assignlist is a list of 
 identifier assignments, which have the form var(key)code(=)var(value).
-The simplest musiclist is a single note.  More complicated music lists
-are formed by surrounding a list of musiclists with braces code({) and
-code(}) or with angle brackets code(<) and code(>).  Items appearing
-in braces will be treated as serial. Items in angle brackets will be
-simultaneous. 
-
 A statement in Mudela has one of three forms:
 verb(\keyword argument
 \keyword argument1 argument2 ... ;
 string=value)
-        
-To assign an identifier you use:
-verb(string = ...)
-To use an identifier, you must preceed it with a backslash: code(\).
-verb(oboe = \notes { ... }
-\score{ \notes { \oboe }})
-The left-hand part of the assignment is really a string, so 
-verb("Foo bar 4 2 " = \notes { ... })
-is also a valid assignment (but you would have trouble referencing it)
-If you reuse identifiers, then the previous contents will be thrown
-away after the right hand is evaluated, e.g.
-verb(bla = \notes { \bla })
-is legal.
-
-COMMENT(It's not clear to me what things are allowed on the RHS of 
-an identifier assignment.)
-
-The following words are keywords.  You can define an identifer whose
-name is a keyword, but you will not be able to reference it.
-
-verb(absdynamic  font           mm             pt              time       
-accepts     grouping       musicalpitch   relative        translator 
-bar         header         notenames      score           transpose  
-cadenza     in             notes          script          type       
-clear       include        octave         shape           version    
-clef        key            output         skip        
-cm          keysignature   paper          spandynamic 
-consists    lyric          partial        symboltables
-contains    mark           penalty        table       
-duration    midi           property       tempo )
-
-COMMENT( I don't know the proper way to make this kind of table in
-yodl. )
+)
+
+subsect(Identifiers)
+
+Identifiers allow names to be assigned to constants, music, or other
+Mudela structures.  To assign an identifier you use
+var(name)=var(value) and to refer to an identifier, you preceed its
+name with a backslash: code(\)var(name).  It is legal to redefine an
+identifier in terms of its old value: code(foo = \foo * 2.0).
+Identifier assignments must appear at the top level in the Mudela
+file.
+
+An identifier can be created with any string for its name, but you
+will only be able to refer to identifiers whose names begin with a
+letter and are entirely alphanumeric.  It is also impossible to refer
+to an identifier whose name is the same as the name of a keyword.  The
+following words are keywords:
+verb(absdynamic   header         musicalpitch   score         transpose
+accepts             in             notenames      script        type     
+bar         include        notes          shape         version  
+cadenza             key            output         skip        
+clef        keysignature   paper          spandynamic 
+cm          lyric          partial        symboltables
+consists     maininput      penalty        table       
+duration     mark           property       tempo       
+font        midi           pt             time        
+grouping     mm             relative       translator)
+
+The right hand side of an identifier assignment is parsed completely
+when the assignment is made.  It therefore must have any context
+specified in the definition.  For example, you must write
+code(foo=\notes{a8 b c}) rather than code(foo={a8 b c}).  Even though
+the context is specified in the definition, you must refer to the
+identifier inside the correct context:
+verb(foo = \paper{ linewidth = 6.0\in }
+\score{
+  \notes{ ... }
+  \paper{ \foo }
+})
+If code(\foo) is used here without the surrounding code(\paper) then
+an error will result.
+
+Identifiers can be set equal to integers, reals, strings, music,
+durations (specified with code(\duration)), note ornaments (specified
+with code(\script), dynamics commands, or code(:)), translator
+definitions, the code(\paper) block, the code(\midi) block or the
+code(\score) block.  When identifiers are used for translators, the
+code(\paper), code(\midi), and code(\score) blocks, they may only be
+referred to as the first item in a block.  So code(\paper{\one \two})
+is illegal because the identifier code(\two) is not the first thing in
+the block.
+
+
 
 COMMENT(
 subsect(Hierarchical structures)
@@ -200,13 +263,14 @@ Mudela becoming tedious
 )
 
 
-
-sect(Modes)
+subsect(Modes)
+label(modes)
 
 To simplify different aspects of music definition (entering the notes
-and manipulating them) Mudela has a number of different input "modes".
+and manipulating them) Mudela has three different input modes which
+affect how unquoted strings are interpreted.
 In each mode, words are identified on the input.  If code("word") is
-encountered, it is treated as a string.  If code("\word") is
+encountered, it is treated as a string.  If code(\word) is
 encountered it is treated as a keyword or as an identifier.  The
 behavior of the modes differs in two ways: different modes treat
 unquoted words different, and different modes have different rules for
@@ -228,24 +292,31 @@ treated as a string.  If you mistype a notename, the parser will most
 likely complain that you should be in code(\lyric) mode to do lyrics. 
 
 dit(Lyric mode) Lyrics mode is introduced by the keyword
-  code(\lyric).  Because of the various control characters that can
-  appear in lyrics, e.g., foreign language accents, the inputting a
-  string containing these has been made very easy.  Every sequence of
-non-digit and non-white characters starting with an alphabetic
-character or the code(_) is considered a word.  When code("word") is
-encountered it is treated as a lyric (without the quotes).  Likewise,
-when code(word) is encountered, it is treated as a lyric.  The code(_)
-character is converted to a space; it provides a mechanism for
-creating words that contain spaces.  
+code(\lyric).  This mode is has rules that make it easy to include
+punctuation and diacritical marks in words.  A word in Lyrics mode
+begins with: an alphabetic character, code(_),
+code(?), code(!), code(:), code('), 
+the control characters code(^A) through code(^F), code(^Q) through
+code(^W), code(^Y), code(^^), any 8-bit character with ASCII code over
+127, or a two character combination of a backslash followed by one
+of code(`), code('), code(") or code(^).  
+Subsequent characters of a word can be any character that is not a
+digit and not white space.  One important consequence of this is that
+a word can end with code(}), which may be confusing if you thought the
+code(}) was going to terminate lyrics mode.  Any code(_) characters
+which appear in an unquoted word are converted to spaces, providing a
+mechanism for introducing spaces into words without using quotes.  
+Quoted words can also be used in lyrics mode to specify words that
+cannot be specified with the above rules.  Here are some examples.
+Not all of these words are printable by TeX().  
 verb(a&@&@&TSI|{[    % a word
-1THtrhortho     % not a "word"
+\'afoo}                % a word
+1THtrhortho     % not a word because it starts with a digit
+``Hello''       % not a word because it starts with `
 Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
-_ _ _ _         % 4 words: 4 spaces
+_ _ _ _         % 4 words, each one a space
 ))
 
-COMMENT(Well, " seems to present some problems.  Also `` seems to be
-problematic.  So the above statement isn't quite right.  Unless these
-characters are considered to be "white")
 
 COMMENT(
 These modes are of a lexical nature. Normal and Note mode largely
@@ -269,16 +340,14 @@ names are the Dutch note names.  The notes are specified by the
 letters code(c) through code(b), where code(c) is an octave below
 middle C and the letters span the ocatave above that C.  
 In Dutch, a sharp is formed by adding
-code(is).  A flat is formed by adding code(es).
-Double sharps and double flats are obtained by adding code(isis) or
-code(eses).  
+code(-is) to the end of a pitch name.  A flat is formed by adding code(-es).
+Double sharps and double flats are obtained by adding code(-isis) or
+code(-eses).  
 Lily has predefined sets of notenames
-for various nop(languages)footnote(These 
-are Dutch, English, German, Italian and Swedish.
-Simply include the language specific init file file(language.ly).).
-Rests are specified with the note name code(r).  There is also a note
-name code(s) which produces a nonprinting note of the specified
-duration.  
+for various nop(languages).  See Section ref(notelang) for details.
+Rests are specified with the note name code(r) or code(R).  
+There is also a note name code(s) which produces a nonprinting note of the
+specified duration.
 
 The optional octave specification takes the form of a series of single
 quote 
@@ -310,7 +379,7 @@ Whenever a C-sharp is desired,  you must specify a C-sharp.  LilyPond
 will determine what accidentals to  typeset  depending on the  key and
 context.   
 A reminder accidental can be forced by
-using the optional exclamation mark `code(!)'
+using the  optional exclamation mark `code(!)'
 on a pitch.
 mudela(fragment,verbatim,center)(
 cis' d' e' cis'  c'! d' e' c' 
@@ -337,11 +406,22 @@ a'4. b'4.
 In addition, the duration can be followed by a multiplier which is
 introduced with the asterisk code(*) and can be an integer or a
 fraction.  The multiplier changes the duration that LilyPond uses
-internally for the note, but it does not change the symbol that is
-printed.  
+internally for the note, but for notes it 
+does not change the symbol that is printed.  
 mudela(fragment,verbatim,center)(
 c'4*2 c'4*2 d'8*2/3 d'8*2/3
 )
+For long rests with durations equal to an integer number of whole notes,
+LilyPond produces output that indicates the duration of the rest.  If you use
+code(r) then one rest symbol will be printed and several measures left blank.
+If you use code(R) then all of the measure will be filled with whole rests.
+If you set the code(Score.SkipBars) property, then only one measure will be
+printed; with code(R), a number indicating the length of the rest will be
+displayed.  
+mudela(fragment,verbatim,center)(
+r1*3 R1*3
+\property Score.SkipBars=1
+r1*3 R1*3)
 
 Extra long notes can be obtained using the code(\breve) and
 code(longa) durations:
@@ -350,7 +430,7 @@ c'\breve gis'\longa
 )
 
 
-subsect(Beams and Tuplets)
+subsect(Note Spanners: Beams, Tuplets, Slurs and Ties)
 
 A beam is specified by surrounding the beamed notes with brackets
 code([) and code(]).  
@@ -380,50 +460,41 @@ mudela(fragment,verbatim,center)(
 [/3 b'8 b' b' ]/1  \[/3 a'4 a'8\]/1
 )
 
-COMMENT(The rest of this section needs to be rewritten.  I don't
-understand what's going on at all here.  The meaning of the lone ] is
-unclear.  And the : syntax is also unclear.  --Adrian)   
+COMMENT(This next bit needs to be fixed...or the language needs to be
+fixed.)
 
 Here is a combination
 mudela(fragment,verbatim,center)(
 [/3 a'8 a'16 a'] a'8 \]
 )
 
-Abbreviations
-mudela(fragment,verbatim,center)(
-c'1:16 [:16 e'1 g']
-)
-
-mudela(fragment,verbatim,center)(
-c'4:32 [:16 c'8 d'8]
-)
-
-
-
-subsect(Slurs and Ties)
-
-A tie connects two adjacent note heads
-
+Another type of spanner is the slur.  Slurs connects chords and try to
+avoid crossing stems.  A slur is started with code(CHAR(40)) and stopped with
+code(CHAR(41)).  The starting code(CHAR(40)) appears to the right of the first note
+in the slur.  The terminal code(CHAR(41)) apppears to the left of the first
+note in the slur.  This makes it possible to put a note in slurs from
+both sides:
 mudela(fragment,verbatim,center)(
-e' ~ e'
+f'()g'()a' [a'8 b']( a'4 g' )f'
 )
 
-Whereas a slur rather connects `chords', 
-and tries to avoid crossing stems
+A tie connects two adjacent note heads.  When used with chords, it
+connects all of the note heads.  Ties are indicated using the tilde symbol
+code(~) by analogy with TeX()'s tie which connects words.  For ties
+between chords, the input convention is somewhat peculiar.  You cannot
+write code(<c g>~<c g>), but rather must put the tilde after
+a note within the first chord.  
 
 mudela(fragment,verbatim,center)(
-e'( )e'
+e' ~ e' <c'~ e' g'><c' e' g'>
 )
 
-And of course, such a (legato) slur can span several notes
-mudela(fragment,verbatim,center)(
-c'( d' e' )f'
-)
 
 subsect(Note Ornaments)
 
 A variety of symbols can appear above and below notes to indicate
-different characteristics of the performance.  These symbols can be
+different characteristics of the performance.  
+These symbols can be
 added to a note with `var(note)code(-\)var(name)'.  Numerous different
 symbols are defined in file(script.ly).  Each symbol is defined using
 the code(\script) keyword which specifies where symbols appear.
@@ -454,48 +525,163 @@ mudela()(
 }
 )
 
+COMMENT( The following are defined in script.ly but do not work:
+
+portato lbheel rbheel lbtoe rbtoe lfheel rfheel lftoe rftoe )
+
 In addition, it is possible to place arbitrary strings of text or
 TeX() above or below notes by using a string instead of an identifier:
 `code(c^"text")'.  Fingerings can be placed by simply using digits.
+All of these note ornaments appear in the printed output but have no
+effect on the MIDI rendering of the music.
 
 To save typing,  a few common symbols  can  be  abbreviated  with
 single characters:
 mudela()(
 \score{ \notes {
-       \property Voice.textstyle = typewriter
+        \property Voice.textstyle = typewriter
         c''4-._"c-." s4
-        c''4--_"c--"  s4
+        c''4--_"c-{}-"  s4
         c''4-+_"c-+" s4
         c''4-|_"c-|" s4
         c''4->_"c->"  s4
         c''4-^_"c-\\^{ }"  s4 }
-       \paper { linewidth = 12.\cm; }})
+        \paper { linewidth = 12.\cm; }})
 
-Dynamic marks are specified by using an identifier after
-a note without a dash: code(c4 \ff).  The available  dynamic marks
-are:  code(\ppp),  code(\pp), code(\p), code(\mp), code(\mf),
-code(\f), code(\ff),  code(\fff), code(\fp), code(sf), and code(\sfz).
+Dynamic marks are specified by using an identifier after a note
+without a dash: code(c4 \ff).  Note that this syntax is inconsistent
+with the syntax for other types of ornaments.  The available dynamic
+marks are: code(\ppp), code(\pp), code(\p), code(\mp), code(\mf),
+code(\f), code(\ff), code(\fff), code(\fp), code(sf), and code(\sfz).
 
 A crescendo mark is started with code(\cr) and terminated with
 code(\rc).  A decrescendo mark is started with code(\decr) and
 terminated with code(\rced).
 
+Tremolo marks can be printed by a note by adding code(:)[var(length)]
+after the note.  The length must be at least 8.  A var(length) value
+of 8 gives one line across the note stem.  
+If the length is omitted,
+then the last value is used, or the value of the code(Abbrev)
+property if there was no last value.  To place tremolo marks in
+between two notes, begin with code([:)var(length) and end with code(]).
+The tremolo marks will appear instead of beams.  Putting more than two
+notes in such a construction will produce odd effects. 
+mudela(fragment,verbatim,center)(
+c'2:8 c':32 [:16 e'1 g'] [:8 e'4 f']
+)
+
+COMMENT(
+Is the last paragraph correct?  Is it called "tremolo"?  Why is
+"abbreviation" used?  (What is the unabreviated form?)
 
 
+mudela(fragment,verbatim,center)(
+c'4:32 [:16 c'8 d'8]
+)
+
+)
+
+
+sect(Other Ways to Enter Pitches)
+
+subsect(Pitch Names in Other Languages)
+label(notelang)
+
+The pitch names can be easily redefined using the code(\notenames) command.
+Note name definitions have been provided in various languages.  
+Simply include the language specific init file.  For example:
+code(\include "english.ly").  The available language files and the names
+they define are:
+
+verb(                        Note Names               sharp       flat
+nederlands.ly  c   d   e   f   g   a   bes b   -is         -es
+english.ly     c   d   e   f   g   a   bf  b   -s/-sharp   -f/-flat
+deutsch.ly     c   d   e   f   g   a   b   h   -is         -es
+norsk.ly       c   d   e   f   g   a   b   h   -iss/-is    -ess/-es
+svenska.ly     c   d   e   f   g   a   b   h   -iss        -ess
+italiano.ly    do  re  mi  fa  sol la  sid si  -d          -b)
+
+subsect(Relative Pitch Specification)
+label(relative)
+
+One very common error when entering music is to place notes in the wrong
+octave.  One way to avoid being confused by large numbers of octave changing
+marks is to use
+the code(\relative) keyword. 
+Music which appears within code(\relative) is
+interpreted differently.  The octave of a note is determined by making it as
+close to the previous note as possible.  The octave changing marks code(') and
+code(,) can then be added to raise or lower this note by octaves.  You have to
+specify a starting pitch because the first note of a list has no predecessor.  
+
+mudela(fragment,verbatim,center)(
+\relative c'' { c d b c, d b c' d 
+                b c,, d b }
+)
+
+When the preceeding item is a chord, the first note of the chord is used to
+determine the first note of the next chord.  But other notes within the second
+chord are determined by looking at the immediately preceeding note.  
+
+mudela(fragment,verbatim,center)(
+\relative c' { <c e g> 
+    <c' e g> <c, e' g> }
+) 
+
+The code(\relative) keyword can only appear in music, so there must be a
+surrounding code(\notes) keyword which does not appear in the fragments shown
+above.  Also note that if the music passed to a code(\relative) keyword 
+contains a code(\transpose) keyword, the tranposed music will not be
+processed in relative mode.  An additional code(\relative) must be placed
+inside the code(\transpose).  
+
+
+subsect(Tranposition of Pitches)
+label(transpose)
+
+Another way to modify the meaning of the note names is to use the
+code(\transpose) keyword.  This keyword allows you to transpose music.
+To use transposition, specify the pitch that middle C should be tranposed to.
+It is important to distinguish between enharmonic pitches as they can produce
+different transpositions.  To transpose up half a step, for example, either 
+code(\transpose cis') or code(\transpose des') will work.  But the first
+version will print sharps and the second version will print flats.  
+In this example, a scale in the key of E is transposed to F, or to E-sharp 
+with odd results.
+mudela(fragment,verbatim,center)(
+\relative c' { \key e; 
+  e fis gis a b cis dis e }
+)
+mudela(fragment,verbatim,center)(
+\transpose des' \relative c' { \key e; 
+   e fis gis a b cis dis e }
+)
+mudela(fragment,verbatim,center)(
+\transpose cis' \relative c' { \key e; 
+    e fis gis a b cis dis e }
+)
+If you want to use both code(\transpose) and code(\relative), then you must use
+code(\transpose) first.  Any code(\relative) keywords that are outside the 
+code(\transpose) have no effect on notes that appear inside the
+code(\transpose).  
+
 sect(Lyrics)
 
 Lyrics are entered like notes, with pitches replaced
 by text.  For example code(Twin-4 kle4 twin-4 kle4) enters four
-syllables, each with quarter note duration.  
+syllables, each with quarter note duration.  Note that the hyphen has
+no special meaning for lyrics, and does not introduce special symbols.
+See Section ref(modes) for a description of what is interpreted as a lyric.
 
 In order to instruct LilyPond to write lyrics underneath the
 staff, you must enter the lyrics context with code(\type Lyrics).  
 Lyrics should be entered in lyrics mode which is entered with code(\lyric).
 
-Two syllables or words that compose a single
-duration entry are bound together using an underscore: 
-code(He_could4 not4).  Here is a full example:
-mudela(verbatim)(\score{ 
+Spaces can be introduced into a lyric either by using quotes (code("))
+or by using an underscore without quotes: code(He_could4 not4).  All
+unquoted underscores are converted to spaces.  Here is a full example: 
+mudela(verbatim)(\score{
   <  \notes \transpose c'' {c d e c | c d e c | e f g'2 | 
                               e'4 f g'2 \bar "|."; }
      \type Lyrics \lyric { 
@@ -508,9 +694,11 @@ COMMENT(
 URG
                         Fr\`e-4 re Ja- que
                         Fr\`e- re Ja- que
+Why does this warrant an URG?
 )
 
 
+COMMENT(
 
 sect(Chords and Voices)
 
@@ -536,13 +724,15 @@ mudela(fragment,verbatim)(
 >
 )
 
+)
 
 sect(Time)  
 
 LilyPond aligns all musical objects according to the amount of time
 they occupy.  All of these objects have a duration.  When music is
-written in series using braces the duration is the sum of the 
-durations of the elements.  When music is stacked using angle
+written sequentially using braces the duration is the sum of the 
+durations of the elements.  When music is stacked into simultaneous music 
+using angle
 brackets, the duration is the maximum of the durations of the
 elements.  
 
@@ -568,7 +758,7 @@ default grouping can be changed using the \grouping keyword which
 takes a list of durations to specify the grouping. 
 
 
-
+COMMENT(
 sect(Composition: forming bigger structures)
 label(sec:grammar)
 
@@ -633,27 +823,31 @@ verb(
 { c <c e> <c e g> <c e g \transpose d' dis > }  % 4 increasing chords
 )
 
-
+)
 
 
 sect(Keywords)
 
-Keywords sometimes appear alone, but usually they require arguments. 
-A keyword may have a single argument, or a sequence of arguments separated
-by spaces and terminated by a semicolon:
-`code(\keyword argument argument ... ;)'
+Keywords sometimes appear alone, but usually they require arguments.
+A keyword may have a single argument, a sequence of arguments in
+braces, or a sequence of arguments separated by spaces and terminated
+by a semicolon.  The precise syntax of each keyword is shown below.
+Keywords must appear in the right context.  If you use a keyword in
+the wrong place, even if the usage is syntactically correct, you will
+get the message ``parse error'' from LilyPond.
 
 
 description(
 
-dit(code(\absdynamic) code({) var(code) code(})) Internal command for
+dit(code(\absdynamic) code({) var(code) code(})) Internal keyword for
 printing dynamic marks such as $f$ under music.  The parameter
 var(code) is unsigned and specifies the dynamic mark to print.
 Normally you should use the more user friendly abbreviations defined
 in the init file file(dynamic.ly).
 
-dit(code(\accepts) var(string)code(;)) This command can appear only within a
-code(\translator) block.  It specifies what contexts are allowed
+dit(code(\accepts) var(string)code(;)) This keyword can appear only within a
+code(\translator) block.  It specifies what contexts are allowed with the
+context that is being defined.  See Section ref(translators).  
 
 dit(code(\bar) var(bartype)code(;)) Prints a special bar symbol, or at
 measure boundaries, replaces the regular bar symbol with a special
@@ -666,23 +860,20 @@ If var(bartype) is set to code("empty") then nothing is printed, but a
 line break is allowed at that spot.  Note that the printing of special bars
 has no effect on the MIDI output.
 
-dit(code(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
+dit(mycode(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
 of bar lines.  If var(togglevalue) is 0 then bar line generation is
 turne off.   If var(togglevalue) is  1  then a bar is  immediately
 printed and bar generation is turned  on.
 
-dit(code(\clear)) Allowed only within code(\notename).  Clears all the
-previously defined note names.  
-
 dit(code(\clef) var(clefname)code(;)) Allowed only in music.  
 Sets the current clef.  The argument is
 a string which specifies the name of the clef.  Several clef names are
 supported.  If code(_8) or code(^8) is added to the end of a clef
 name then the clef lowered or raised an octave will be generated.  
 Here are the supported clef names with middle C shown in each clef:
-mudela()(
+mudela(center)(
 \score{
-  \notes{  
+  \notes{ \cadenza 1;
    %\property Voice.textstyle = typewriter
    \clef subbass; c'4-"\kern-10mm subbass" 
            \clef bass;    c'4^"\kern -8mm bass"
@@ -690,55 +881,17 @@ mudela()(
            \clef varbaritone; c'4^"\kern -10mm varbaritone"
            \clef tenor;     c'4_"\kern -10mm tenor"
            \clef "G_8";   c'4^"\kern -6mm G\_8"  }  
-\paper{ linewidth= 4.5 \in;
-Staff = \translator {
-        \type "Line_group_engraver_group";
-
-        defaultclef = violin;
-
-%       \consists "Bar_engraver";
-        \consists "Clef_engraver";
-        \consists "Key_engraver";
-        \consists "Local_key_engraver";
-        \consists "Time_signature_engraver";
-        \consists "Staff_sym_engraver";
-        \consists "Collision_engraver";
-        \consists "Rest_collision_engraver";
-        \consists "Separating_line_group_engraver";
-          
-        \accepts "Voice";
-        }
-
-}
-
+   \paper{ linewidth= 4.5 \in }
 }
 )
-mudela()(
+mudela(center)(
 \score{
-  \notes{\clef alto;    c'4_"\kern -10mm alto"
+  \notes{\cadenza 1; \clef alto;    c'4_"\kern -10mm alto"
            \clef mezzosoprano; c'4^"\kern -10mm mezzosoprano"
            \clef soprano;  c'4_"\kern -10mm soprano"
            \clef treble;  c'4^"\kern -6mm treble"
            \clef french;  c'4_"\kern -10mm french" }  
-\paper{ linewidth= 4.5 \in;
-Staff = \translator {
-        \type "Line_group_engraver_group";
-
-        defaultclef = violin;
-
-%       \consists "Bar_engraver";
-        \consists "Clef_engraver";
-        \consists "Key_engraver";
-        \consists "Local_key_engraver";
-        \consists "Time_signature_engraver";
-        \consists "Staff_sym_engraver";
-        \consists "Collision_engraver";
-        \consists "Rest_collision_engraver";
-        \consists "Separating_line_group_engraver";
-          
-        \accepts "Voice";
-        }
-}
+  \paper{ linewidth= 4.5 \in }
 }
 )
 The treble  clef  can also  be obtained using  the  names code(G) or
@@ -746,12 +899,9 @@ code(violin).  The bass clef is also available by code(\clef  F).
 
 dit(code(\cm)) Specify a dimension in centimeters. 
 
-dit(code(\consists) var(string)code(;)) This command can appear only within a
+dit(code(\consists) var(string)code(;)) This keyword can appear only within a
 code(\translator) block.  It specifies that an engraver named
-var(string) should be added to the translator.
-
-dit(code(\contains)) Produces a parse error.  (There is no rule in the
-grammar that refers to this token.)
+var(string) should be added to the translator.  See Section ref(translators).
 
 dit(code(\duration) code({) var(length) var(dotcount) code(})) Specify note
 duration.  The parameter var(length) is the negative logarithm (base
@@ -759,7 +909,7 @@ duration.  The parameter var(length) is the negative logarithm (base
 note, etc.  The number of dots  after  the  note is given by
 var(dotcount). 
 
-dit(code(\font) var(string)) Internal command.  Used within
+dit(code(\font) var(string)) Internal keyword.  Used within
 code(\symboltables) to specify the font.
 
 dit(code(\grouping) var(durationseq); )  Sets  the  metric structure of
@@ -768,14 +918,20 @@ For example, code(\duration 16*5;) specifies a grouping of five beats
 together in 5/16 time.  The default grouping is to have as many groups
 of 3 as possible followed by groups of two.  
 
+dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
+Specifies information about the music.  A header should appear at the
+top of the file describing the file's contents.  If a file has
+multiple code(\score) blocks, then a header should appear in
+each score block describing its contents.  Tools like code(ly2dvi) can
+use this information for generating titles.   Some possible key values
+are: title, opus, description, composer, enteredby, and copyright.
+
 dit(code(\in)) Specify a dimension in inches.  
 
 dit(code(\include) var(file)) Include the specified file.  The
 argument var(file) is a string.  The full filename including the
 file(.ly) extension must be given. 
 
-dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
-
 dit(code(\key) var(pitch)) Change key signature to that of
 var(pitch)-major.
 
@@ -783,8 +939,21 @@ dit(code(\keysignature) var(pitchseq);)
 Specify an arbitrary key signature.  The pitches from var(pitch) will
 be printed in the key signature in the order that they appear on the list.
 
+dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
+
+dit(code(\maininput)) Internal command.  This command is used for creating init
+files like file(init.fly) that read the user file into the middle of another
+file.  Using it in a user file will lead to an infinite loop.
+        
 dit(code(\mark) var(unsigned) or code(\mark) var(string)) Allowed in
-music only.  What does this do?
+music only.  Prints a mark over or under (?) the staff.  You must add
+code(Mark_engraver) to the Score context and it only seems to work if the
+mark appears at the beginning of a line.  
+
+dit(code(\midi) var(statementlist)) Appears in a score block to
+indicate that musical output should be produced.  See code(\tempo).
+
+dit(code(\mm)) Specify a dimension in millimeters. 
 
 dit(code(\musicalpitch) code({) var(octave) var(note) var(shift) code(})) 
 Specify note pitch.  The octave is specified by an integer,
@@ -793,47 +962,30 @@ to 7, with 0 corresponding to C and 7 corresponding to B.  The shift
 is zero for a natural, negative to add flats, or positive to add
 sharps.
 
-dit(code(\notes) var(music)) Enter note mode and process the
-specified music. 
-
-dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
-signature.  The default time signature  is 4/4.  
-
-dit(code(\midi) var(statementlist)) Appears in a score block to
-indicate that musical output should be produced.  See code(\tempo).
-
-dit(code(\mm)) Specify a dimension in millimeters. 
-
-dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
-Specifies information about the music.  A header should appear at the
-top of the file describing the file's contents.  If a file has
-multiple code(\score) blocks, then a header should appear in
-each score block describing its contents.  Tools like code(ly2dvi) can
-use this information for generating titles.   Some possible key values
-are: title, opus, description, composer, enteredby, and copyright.
-
 dit(code(\notenames) var(assignmentlist)) Define new note names.  
 The argument is a list of definitions of  the form
 var(name) = var(pitch),  where var(pitch) is specified with the
-code(\musicalpitch) command.  Another possibility is code(\clear)
-which can appear instead of an assignment.  
+code(\musicalpitch) keyword.  
 
-dit(code(\octave)) Generate a parse error.  Never referred to in the
-grammar.
+dit(code(\notes) var(music)) Enter note mode and process the
+specified music. 
 
-dit(code(\output) var(string)code(;)) Allowed only in
+dit(code(\)code(output) var(string)code(;)) Allowed only in
 code(\paper) block.  The parameter var(string) specifies an alternate
 name for the TeX() output.  A file(.tex) extension will be added to
 var(string) to produce the output file name.
 
-dit(code(\partial) var(duration)) Specify that the first measure of
-the music lasts only for the specified duration.
-
 dit(code(\paper) var(statmentlist)) 
 Appears in a score block to indicate that the music should be printed.
+The var(statmentlist) contains statements that change features of the
+output.  See Section ref(paper).  
 
-dit(code(\penalty) code(=) var(int)) Allowed only in musiclists.
-Discourages line breaks.
+dit(code(\partial) var(duration)) Specify that the first measure of
+the music lasts only for the specified duration.
+
+dit(code(\penalty) code(=) var(int)) Allowed only in music.
+Discourage or encourage line breaks.  See identifiers code(\break) and
+code(\nobreak) in Section ref(ident). 
 
 dit(code(\property) var(contextname)code(.)var(propname) code(=) var(value))
 Sets the var(propname) property of the context var(contextname) to the
@@ -843,28 +995,19 @@ dit(code(\pt)) Specify a dimension in points.
 
 dit(code(\relative) var(pitch) var(music)) Processes the specified
 var(music) in relative pitch
-mode.  In this mode, the octave of a pitch note is chosen so that the
-note is closest to the preceeding note.  
+mode.  In this mode, the octave of a pitch is chosen so that the
+pitch is closest to the preceeding pitch.  
 The argument var(pitch) is
 the starting pitch for this comparision.  In the case of chords, the
-first note of a chord is used as the base for the pitches in the next
-chord.  
-
-Because transposing changes both note names and octaves relativizing
-transposed music doesn't make any sense.  If you want to transpose
-relative music, do code(\transpose var(pitch) \relative var(pitch)
-var(music)), i.e., first enter the music in relative mode, and then
-transpose it by prepending the code(\transpose) keyword.
-code(\relative var(pitch) \transpose var(pitch)) has no effect.
+first note of a chord is used as the base for the first pitches in the next
+chord.  See Section ref(relative).
 
-For the same reason the first code(\relative) in code(\relative
-var(pitch1) \relative var(pitch2) var(music)) has no effect.
-
-
-dit(code(\score) var(statementlist)) Define music.
+dit(code(\score) var(statementlist)) Create a Score context.  This
+is the top level notation context.  
+COMMENT(this still needs work)
 
 dit(code(\script) code({) var(name) var(instaff) var(withstem)
-var(location) var(invertible) var(priority) code(})) This command is
+var(location) var(invertible) var(priority) code(})) This keyword is
 used the initialization file(script.ly) to define the various symbols
 that can appear above and below notes.  The first argument is the name
 of the symbol.  The second argument var(instaff) is 1 if the symbol
@@ -896,54 +1039,63 @@ printed.  It works in Note Mode or Lyrics Mode (but generates a
 mysterious error in lyrics).
 
 dit(code(\spandynamic) code({) var(kind) var(toggle) code(})) Internal
-command for crescendo and decrescendo symbols.  The first parameter
+keyword for crescendo and decrescendo symbols.  The first parameter
 var(kind) is set to 1 for a crescendo and -1 for a decrescendo.  The
 second parameter is set to 1 to start the mark and 2 to stop it.
 Users should use the abbreviations which are defined in the
 initialization file file(dynamic.ly).
 
-dit(code(\symboltables)) Internal command.  Used to create symbol
+dit(code(\symboltables)) Internal keyword.  Used to create symbol
 tables.  See initialization files file(paper*.ly), file(feta*.ly), and
 file(table*.ly).  
 
-dit(code(\table)) Internal command.  Used within code(\symboltables)
-to specify the tables.  See initialization  files. 
+dit(code(\table)) Internal keyword.  Used within code(\symboltables)
+to specify the tables.  See initialization files. 
 
 dit(code(\tempo) var(duration) = var(perminute)) Used within
 code(\midi) to specify the tempo.  For example, 
 `code(\midi { \tempo 4 = 76})' requests output with 76 quarter notes
 per minute. 
 
+
+dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
+signature.  The default time signature  is 4/4.  
+
+
 dit(code(\translator) var(statements) or code(\translator)
 var(context) = var(name)) The first variant appears only within
 code(\paper) and specifies a translator for
 converting music to notation.  The translator is specified with a
 single code(\type) statement and a series of code(\accepts), and
-code(\consists) statements.  The second variant appears in a
-musiclist.  It specifies that the current the contexts
+code(\consists) statements.  See Section ref(translators). 
+The second variant appears in 
+music.  It specifies that the current the contexts
 contained within the specified context should be shifted to the
 context with the specified name.  
 
 COMMENT( \translator seems like a strange name for the second
 operation, and is the overloading desireable? )
 
-dit(code(\type) var(contexttype) [code(=) var(contextname)]
-var(musiclist) or code(\type) var(translatortype)code(;)) The first
-variant is used only within musiclists to 
-create a instance of a context.  The new context
-can optionally be given a name.  The second variant appears within a
-code(\translator) block and specifies the type of translator being
-created.
-
 dit(code(\transpose) var(pitch) var(music)) Transposes the specified
-music.  Middle C is tranposed to var(pitch). 
+music.  Middle C is tranposed to var(pitch).  This is allowed in music only,
+and if it appears inside code(\relative), then any notes specified for
+transposition should be specified inside another code(\relative).  See Section
+ref(transpose).  
+
+dit(code(\type) var(contexttype) [code(=) var(contextname)]
+var(music) or code(\type) var(translatortype)code(;)) The first
+variant is used only within music to create an instance of a
+context.  The new context can optionally be given a name.  The
+specified var(music) is processed in the new context. The second
+variant appears within a code(\translator) block and specifies the
+type of translator being created.
 
 dit(code(\version) var(string)) Specify the version of Mudela that a
 file was written for.  The argument is the version number, for example
 code("1.0.1").  Note that the Mudela version is different from the
 LilyPond version.
 
-)
+)  
 
 
 sect(Notation Contexts)
@@ -951,47 +1103,48 @@ sect(Notation Contexts)
 Notation contexts provide information that appears in printed music
 but not in the music itself.  A new musical context is created using
 the code(\type) keyword: `code(\type) var(contexttype) [code(=)
-var(contextname)] var(musiclist)'.  The following context types are
+var(contextname)] var(music)'.  The following context types are
 allowed.
 
 description(
 
-dit(code(Lyrics)) Typesets lyrics.
+dit(code(LyricVoice)) Corresponds to a voice with lyrics.  Handles the printing
+of a single line of lyrics.  
 
 dit(code(Voice)) Corresponds to a voice on a staff.
   This context handles the conversion of noteheads,
   dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests.
 
+dit(code(Lyrics)) Typesets lyrics.  It can contain code(LyricVoice) contexts.
+
 dit(code(Staff)) Handles clefs, bar lines, keys,
-  accidentals.  It can contain code(Voice) or code(Lyrics) contexts.
+  accidentals.  It can contain code(Voice) contexts.
 
 dit(code(RhythmicStaff)) A context like code(Staff) but for printing
 rhythms.  Pitches are ignored; the notes are printed on one line.  
-It can contain code(Voice) or code(Lyrics) contexts. 
+It can contain code(Voice) contexts. 
 
 dit(code(GrandStaff)) Contains code(Staff) or code(RhythmicStaff)
 contexts.  It adds a brace on the left side grouping the staffs
 together. The bar lines of the contained staffs are connected vertically.
-It can contain code(Staff), code(RhythmicStaff) or code(Lyrics) contexts.
+It can contain code(Staff) contexts.
 
 dit(code(StaffGroup)) Contains code(Staff) or code(RhythmicStaff)
 contexsts.  Adds a bracket on the left side, grouping the staffs
 together.  The bar lines of the contained staffs are connected vertically.
-It can contain code(Staff), code(RhythmicStaff) or code(Lyrics) contexts.  
+It can contain code(Staff), code(RhythmicStaff), code(GrandStaff) or code(Lyrics) contexts.  
 
-dit(code(ChoireStaff)) Identical to code(StaffGroup) except that the
+dit(code(ChoirStaff)) Identical to code(StaffGroup) except that the
 contained staffs are not connected vertically.  
 
-COMMENT(Odd spelling of "choir".)
-
-dit(code(Score)) This is the top level notation context.  It is entered with
-the code(\score) command rather than the code(\type) command.  No
+dit(code(Score)) This is the top level notation context.  It is specified with
+the code(\score) keyword rather than the code(\type) command.  No
 other context can contain a code(Score) context.  This context handles
 the administration of time signatures.  It also makes sure that items
 such as clefs, time signatures, and key-signatures are aligned across
 staffs.  It can contain code(Lyrics), code(Staff),
 code(RhythmicStaff), code(GrandStaff), code(StaffGroup), and
-code(ChoireStaff) contexts.
+code(ChoirStaff) contexts.
 
 )
 
@@ -1000,161 +1153,239 @@ properties can be changed using the code(\property) command:
 `code(\property) var(context)code(.)var(propname) code(=) var(value)'.
 Properties can also be set within the code(\translator) block
 corresponding to the appropriate context.  In this case, they are
-assigned by `var(propname) code(=) var(value)'.
-
+assigned by `var(propname) code(=) var(value)'.  The settings made with
+code(\property) are processed after settings made in the code(\translator)
+block, so the code(\property) settings will override code(\translator)
+settings.  
+
+The code(\property) keyword will create any property you specify.
+There is no guarantee that a property will actually be used.  If you
+spell a property name wrong, there will be no error message.  In order to find
+out what properties are used, you must search the source code 
+for code(get_property).  
+Properties that are set in one context are inherited by all of the
+contained contexts.  This means that a property valid for the Voice
+context can be set in the Score context (for example) and thus take
+effect in all Voice contexts.  
+
+subsubsubsect(Lyrics properties)
 
 description(
-  dit(Lyrics properties)
 
-     description(
-        dit(code(textstyle)) Set the font for lyrics.  The available
-font choices are code(normaltext), code(roman), code(italic), code(bold)
+dit(code(textstyle)) Set the font for lyrics.  The available font
+choices are code(normaltext), code(roman), code(italic), code(bold)
 code(normaltext), code(large), code(Large), code(huge), and
-code(finger).  The code(finger) font can only display numbers.  
-Note also that you must be careful when using code(\property) in
-Lyrics mode.  Because of the way strings are parsed, either put quotes
-around the arguments to code(\property) or be sure to leave a space on
-both sides of the dot.  
-    dit(code(textalignment))
-Controls alignment of lyrics.
-Set to -1 to align the left end of the lyric with
-the note; set to 1 to align the right end of the lyric with the note.
-Set to 0 to align the center of the lyric with the note.  
-       )
-   dit(Voice properties)
-
-     description(  
-     dit(code(ydirection)) Determines the direction of
-stems, subscripts, beams, slurs, and ties.  Set to -1 to force them
-down, 1 to force them up, or 0 to let LilyPond decide.  This can be
-used to distinguish between voices on the same staff.  The
+code(finger).  The code(finger) font can only display numbers.  Note
+also that you must be careful when using code(\property) in Lyrics
+mode.  Because of the way strings are parsed, either put quotes around
+the arguments to code(\property) or be sure to leave a space on both
+sides of the dot.
+
+dit(code(textalignment)) Controls alignment of lyrics.  Set to \left
+to align the left end of the lyric with the note; set to \right to
+align the right end of the lyric with the note.  Set to \center to
+align the center of the lyric with the note.  
+
+)
+
+subsubsubsect(Voice properties)
+
+description(  
+
+dit(code(midi_instrument)) Sets  the  instrument for MIDI  output. 
+
+dit(code(transposing)) Tranpose the MIDI output.  Set this property to
+the number of half-steps to transpose by.
+
+dit(code(ydirection)) Determines the direction of stems, subscripts,
+beams, slurs, and ties.  Set to code(\down) to force them down,
+code(\up) to force them up, or code(\free) to let LilyPond decide.
+This can be used to distinguish between voices on the same staff.  The
 code(\stemdown), code(\stemup), and code(\stemboth) identifiers set
-this property.  
-   dit(code(slurydirection)) Set to 0 for free choice of slur
-direction, set to 1 to force slurs up, set to 0 to force slurs down.
-The shorthands code(\slurup), code(\slurdown), and code(\slurboth) are
-available.  
+this property.  See also the identifiers code(\voiceone),
+code(\voicetwo), code(\voicethree) and code(\voicefour).
 
-   dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs,
-and a larger value for dashed slurs.  Identifiers code(\slurnormal)
-  and code(\slurdotted) are  predefined  to  set the first two settings.
+dit(code(slurydirection)) Set to code(\free) for free choice of slur
+direction, set to code(\up) to force slurs up, set to code(\down) to
+force slurs down.  The shorthands code(\slurup), code(\slurdown), and
+code(\slurboth) are available.
 
-   dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
+dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs, and
+a larger value for dashed slurs.  Identifiers code(\slurnormal) and
+code(\slurdotted) are predefined to set the first two settings.
+
+dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
 horizontally if they collide with other notes.  This is useful when
 typesetting many voices on one staff.  The identifier code(\shift) is
-defined to enable this.  
+defined to enable this.
+
+dit(code(dynamicdir)) Determines location of dynamic marks.  Set to
+code(\up) to print marks above the staff; set to code(\down) to print
+marks below the staff.
+
+dit(code(textalignment)) Controls alignment of superscripted and
+subscripted text.  Set to \left to align the left end of the text with
+the note; set to \right to align the right end of the text with the
+note.  Set to \center to align the center of the text with the note.
 
-   dit(code(textalignment)) Controls alignment of superscripted and
-subscripted text.  Set to -1 to align the left end of the text with
-the note; set to 1 to align the right end of the text with the note.
-Set to 0 to align the center of the text with the note.  
-  dit(code(textstyle)) Set the text style for superscripts and
+dit(code(textstyle)) Set the text style for superscripts and
 subscripts.  See above for list of text styles.
 
-  dit(code(fontsize)) Can be used to select smaller font sizes for music.  The
-  normal font size is 0, and the two smaller sizes are -1 and -2.
+dit(code(fontsize)) Can be used to select smaller font sizes for
+music.  The normal font size is 0, and the two smaller sizes are -1
+and -2.
+
+dit(code(pletvisibility)) Determines whether tuplets of notes are
+labelled.  Setting to 0 shows nothing; setting to 1 shows a number;
+setting to 2 shows a number and a bracket if there is no beam; setting
+to 3 shows a number, and if there is no beam it adds a bracket;
+setting to 4 shows both a number and a bracket unconditionally.  
 
-  dit(code(pletvisibility)) Determines whether tuplets of notes are
-  labelled.   Setting to 0 shows nothing; setting to 1  shows a
-  number; setting to 2  shows a  number and  a bracket if there is  no
-  beam; setting  to  3 shows  a number, and if there is no beam it
-  adds a  bracket; setting  to 4 shows both a  number  and  a bracket
-  unconditionally.   
 )
 
-dit(Staff properties)
+subsubsubsect(Staff properties)
 
- description(
+description(
  
-   dit(code(defaultclef)) Determines the default clef.  See code(\clef)
-   keyword.
+dit(code(defaultclef)) Determines the default clef.  See code(\clef)
+keyword.
 
-   dit(code(nolines)) If set to 1, then the staff has only one line instead
- of the usual five lines.
-    
-   dit(code(barAlways)) If set to 1 a bar line is drawn after each note.
+dit(code(nolines)) Sets the number of lines that the staff has.
+dit(code(barAlways)) If set to 1 a bar line is drawn after each note.
+
+dit(code(defaultBarType)) Sets the default type of bar line.  See
+code(\bar) keyword.
+
+dit(code(keyoctaviation)) If set to 1, then keys are the same in all
+octaves.  If set to 0 then the key signature for different octaves can
+be different and is specified independently: code(\keysignature bes
+fis').  The default value is 1.  Can be set to zero with
+code(\specialkey) or reset to 1 with code(\normalkey).
+
+dit(code(instrument) and code(instr)) If code(Staff_margin_engraver)
+is added to the Staff translator, then the code(instrument) property
+is used to label the first line of the staff and the code(instr)
+property is used to label subsequent lines.
+COMMENT(This prints the instrument name on top of the staff lines.)
+
+dit(code(abbrev)) Set length for tremolo to be used if no length is
+explicitly specified.
+
+dit(code(createKeyOnClefChange)) Set to a nonempty string if you want key
+signatures to be printed when the clef changes.  Set to the empty string (the
+default) if you do not want key signatures printed.
+
+dit(code(timeSignatureStyle)) Specify a character to print for the time
+signature.  The different time signature characters are shown below with
+their names:
+mudela(fragment,center)(
+\relative c'' {
+\property Voice.textstyle = typewriter
+\property Staff.timeSignatureStyle = "C"
+\time 2/2; a2^"C" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old3_2"
+a2_"old3\_2" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "oldC"
+a2^"oldC" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old6_4"
+a2_"old6\_4" a2 \time 2/2;
+\property Staff.timeSignatureStyle = "old9_4"
+a2^"old9\_4" a2
+}
+)
 
-   dit(code(defaultBarType)) Sets the default  type of bar  line.  See
-   code(\bar) keyword.   
+COMMENT( timeSignatureSymbol?  timeSignatureChar? )
 
-   dit(code(keyoctaviation)) If set to 1, then keys are the same in all
-   octaves.  If set to 0 then the key signature for different octaves
-   can be different and is specified independently:
-   code(\keysignature bes fis').  The default value
-   is 1.  Can be set to zero with code(\specialkey) or reset to 1 with
-   code(\normalkey).  
+)
+   
 
-   dit(code(instrument) and code(instr)) If code(Staff_margin_engraver) is
-   added to the Staff translator, then the code(instrument) property is used to
-   label the first line of the staff and the code(instr) property is used to
-   label subsequent lines.
-COMMENT(Check that this works)
 
-   dit(code(midi_instrument)) Sets  the  instrument for MIDI  output. 
+subsubsubsect(GrandStaff properties)
 
-   dit(code(transposing)) Tranpose the MIDI  output. 
-COMMENT(What syntax?   "0 c" "2 c" ???)
+description( 
 
-     dit(code(ydirection))   What does this do in staff ???
-)
-   
-  dit(GrandStaff  properties)
+dit(code(maxVerticalAlign)) Set the maximum vertical distance between
+staffs.
 
-    description( 
-      dit(code(maxVerticalAlign))
-      dit(code(minVerticalAlign))
-      )
+dit(code(minVerticalAlign)) Set the minimum vertical distance between
+staffs.  
 
-   dit(Score properties)
+)
 
-   description(
-    dit(code(part))  Set  to a part  number  for  music with  several  parts.   
-      Each part has its own code(\score) block  with a different part setting.  
-   dit(code(SkipBars)) ???
+subsubsubsect(Score properties)
 
-   dit(code(beamquantisation)) Set to 0 for no  quantization.  Set  to 1 to
-   quantize  position  and  slope.  Set to 2 to  avoid  wedges.   These three
-   settings  are available via code(\beamposfree),  code(\beamposnormal),  and
-   code(\beampostraditional).    
+description(
 
-   dit(code(beamslopedamping)) Set to 0 for undamped beams.  Set to 1 for
-   damped beams.  Set to 100000 for beams with zero slope.  The identifiers
-   code(\beamslopeproportional), code(\beamslopedamped), and
-   code(\beamslopezero) each set the corresponding value.
-  )
-       
-)
+dit(code(SkipBars)) Set to 1 to skip the empty bars that are produced
+by multimeasure notes and rests.  These bars will not appear on the
+printed output.  Set to zero (the default) to expand multimeasure
+notes and rests into their full length, printing the appropriate
+number of empty bars so that synrchonization with other voices is
+preserved.  COMMENT(meaning of "skip" here seems to be different from
+the meaning used for the keyword \skip.)
+
+dit(code(beamquantisation)) Set to code(\none) for no quantization.
+Set to code(\normal) to quantize position and slope.  Set to
+code(\traditional) to avoid wedges.  These three settings are
+available via code(\beamposfree), code(\beamposnormal), and
+code(\beampostraditional).
+
+dit(code(beamslopedamping)) Set to code(\none) for undamped beams.
+Set to code(\normal) for damped beams.  Set to code(\infinity) for
+beams with zero slope.  The identifiers code(\beamslopeproportional),
+code(\beamslopedamped), and code(\beamslopezero) each set the
+corresponding value.
 
+)
+       
 
 COMMENT(
 
 Mystery properties:
 
-bar-column-engraver.cc:  "barColumnPriority"
-bar-number-engraver.cc:  "barNumberBreakPriority"
-bar-number-engraver.cc:  "barScriptPadding"
-dynamic-engraver.cc:     "dynamicdir"
-mark-engraver.cc:        "markScriptPadding"
-mark-engraver.cc:        "markBreakPriority"
-span-bar-engraver.cc:    "singleStaffBracket"
-staff-margin-engraver.cc:"marginBreakPriority"
-stem-engraver.cc:        "abbrev"
+bar-number-engraver.cc:  "barScriptPadding"  vertical space for numbers
+mark-engraver.cc:        "markScriptPadding" vertical space for marks
+span-bar-engraver.cc:    "singleStaffBracket" do single staffs get a bracket?
+bar-column-engraver.cc:  "barColumnPriority"        
+bar-number-engraver.cc:  "barNumberBreakPriority"   Control horizontal ordering
+mark-engraver.cc:        "markBreakPriority"      of bars, clefs, keysig
+staff-margin-engraver.cc:"marginBreakPriority"    etc.  Slated for revision
 )
 
-sec(Pre-defined Identifiers)
+sect(Pre-defined Identifiers)
+label(ident)
 
 Various identifiers are defined in the initialization files to
 provide shorthands for some settings.  
 
 description(
+dit(code(\break)) Force a line break in music by using a large
+argument for the keyword code(\penalty). 
+dit(code(\center)) Used for setting textalignment property.  Is set to 0.
 dit(code(\cr)) Start a crescendo.
 dit(code(\decr)) Start a decrescendo.
+dit(code(\down)) Used for setting direction setting properties.  Is
+equal to -1.  
 dit(code(\f)) Print forte symbol on the preceeding note.
 dit(code(\ff)) Print fortissimo symbol on the preceeding note. 
 dit(code(\fff)) Print fortississimo symbol on preceeding note. 
 dit(code(\fp)) Print fortepiano symbol on preceeding note. 
+dit(code(\free)) Used for setting direction setting properties.  Is
+equal to 0.  
+dit(code(\Gourlay)) Used for setting the paper variable
+code(castingalgorithm).  Is equal to 1.0.  
+dit(code(\infinity)) Used for setting the Score.beamslopedamping
+property.  Is actually equal to 10000.  
+dit(code(\left)) Used for setting textalignment property.  Is equal to -1.
 dit(code(\mf)) Print mezzoforte symbol on preceeding note. 
 dit(code(\mp)) Print mezzopiano symbol on preceeding note. 
+dit(code(\nobreak)) Prevent a line break in music by using a large
+negative argument for the keyword code(\penalty). 
+dit(code(\none)) Used for setting Score.beamslopedamping and
+Score.beamquantisation properties.  Is equal to 0.
+dit(code(\normal)) Used for setting Score.beamslopedamping and
+Score.beamquantisation properties.  Is equal to 1.
 dit(code(\normalkey)) Select normal key signatures where each octave
 has the same key signature.  This sets the Staff.keyoctaviation property.
 dit(code(\p)) Print a piano symbol on preceeding note. 
@@ -1162,10 +1393,13 @@ dit(code(\pp)) Print pianissimo symbol on preceeding note.
 dit(code(\ppp)) Print pianississimo symbol on preceeding note. 
 dit(code(\rc)) Terminate a crescendo. 
 dit(code(\rced)) Terminate a decrescendo
+dit(code(\right)) Used for setting textalignment property.  Is set to 1.
 dit(code(\sf)) Print a ?? symbol on preceeding note. 
 dit(code(\sfz)) Print a ?? symbol on preceeding note. 
-dit(code(\shift)) Enable note heads that collide with other note heads
-to be shifted horiztonally.  This sets the Voice.hshift property.
+dit(code(\shiftoff)) Disable horizontal shifting of note heads that collide.  
+Sets the Voice.hshift property.
+dit(code(\shifton)) Enable note heads that collide with other note heads
+to be shifted horiztonally.  Sets the Voice.hshift property.
 dit(code(\slurboth)) Allow slurs to be above or below notes.  This
 sets the Voice.slurydirection property. 
 dit(code(\slurdown)) Force slurs to be below notes. This sets the
@@ -1179,40 +1413,203 @@ direction.  This sets the Voice.ydirection property.
 dit(code(\stemdown)) Force stems, beams, and slurs to point down.
 This sets the Voice.ydirection property. 
 dit(code(\stemup)) Force stems, beams and slurs to point up.  This
-sets the Voice.ydirectoin property. 
+sets the Voice.ydirection property. 
+dit(code(\traditional)) Used for setting the 
+Score.beamquantisation property.  Is equal to 2.  
+dit(code(\up)) Used for setting various direction properties.  Is
+equal to 1. 
+dit(code(\voiceone)) Enter Voice context called code(one) and force stems down.
+(See code(\stemdown).)
+dit(code(\voicetwo)) Enter Voice context called code(two) and force stems
+up. (See code(\stemup).)
+dit(code(\voicethree)) Enter Voice context called code(three) and force stems
+up.  
+dit(code(\voicefour)) Enter Voice context called code(four), force stems down
+and turn on horizontal shifting.  (See code(\stemdown) and code(\shifton).)
+dit(code(\Wordwrap)) Used for setting the paper variable
+code(castingalgorithm).  Equal to 0.0.  
 )
 
 
 sect(The code(\paper) Block)
+label(paper)
 
 The code(\paper) block may begin with an optional identifier reference.  No
 identifier references are allowed anywhere else in the block.  
-The keywords code(\shape), code(\output) and code(\translator) may
+The keywords code(\shape), code(\)code(output) and code(\translator) may
 appear in this block.  In addition, variable assignments may appear.  
 The variables control layout details and are set to reasonable
-defaults that depend on the font size in use. 
+defaults that depend on the font size in use.  The only way to find out what
+variables are supported is to search the source code for code(get_var). 
 
 subsect(Paper variables)
 
+There are a large number of paper variables that are used to set internal
+details of the layout.  Usually you will not want to change these variables.
+Two variables that you may want to change are code(linewidth) and code(indent).
+
 description(
   dit(var(integer)) If an integer appears on the left side of an
 assignment then a code(\symboltables) keyword must appear on the right
-side.  This defines a font.  
-
-dit(code(arithmetic_basicspace))
-dit(code(arithmetic_multiplier))
-dit(code(basicspace))
-dit(code(beam_thickness)) Specify the thickness of beams
-dit(code(geometric))
+side.  This defines a music font at a particular size.  See Voice
+property code(\fontsize).
+
+dit(code(arithmetic_basicspace) and code(arithmetic_multiplier))
+The space taken by a note is determined by the formula 
+verb(arithmetic_multiplier * ( c + time ))
+where code(time) is the amount of time a note occupies.  The value of
+code(c) is affected by code(arithmetic_basicspace).  Increasing
+code(arithmetic_basicspace) will increase code(c).
+dit(code(barsize)) Specify height of bars.  This value may need to be
+adjusted if you change the number of lines in the staff.
+dit(code(beam_dir_algorithm)) Specify algorithm for determining
+whether beams go up or down.  It is real valued.  If set to 2.0 then
+majority selection is used.  If set to 3.0, then mean selection is
+used based on the mean center distance.  If set to 4.0 then median
+selection is used, based on the median center distance.  
+dit(code(beam_ideal_stem1))
+dit(code(beam_ideal_stem2))
+dit(code(beam_minimum_stem1))
+dit(code(beam_minimum_stem2))
+dit(code(beam_multiple_break))
+dit(code(beam_slope_damp_correct_factor))
+dit(code(beam_thickness)) Specify the thickness of beams.
+dit(code(castingalgorithm)) 
+dit(code(forced_stem_shorten)) Stems that have been forced to go the
+unnatural direction are shortened by this amount.  Equal to
+code(\interline) by default.  
+dit(code(gourlay_energybound))
+dit(code(gourlay_maxmeasures)) Maximum number of measures per line
+when using Gourlay method.
+Decreasing this greatly reduces computation time.  Default value: 10.  
 dit(code(indent)) Sets the indentation of the first line of music.  
 dit(code(interbeam))
 dit(code(interbeam4))
-dit(code(interline))
-dit(code(internote))
+dit(code(interline))  The distance between two staff
+lines, calculated from the center of the lines.  
 dit(code(linewidth))  Sets the width of the lines.  If it is set to
--1, then a single unjustified line is produced.  
-dit(code(notewidth))
+-1.0, then a single unjustified line is produced.  
+dit(code(notewidth)) Width of an average note head.  
 dit(code(rulethickness)) Determines thickness of staff lines and bars. 
-dit(code(staffheight))
-dit(code(unitspace))
+dit(code(slur_clip_angle))
+dit(code(slur_clip_height))
+dit(code(slur_clip_ratio))
+dit(code(slur_height_limit))
+dit(code(slur_ratio))
+dit(code(slur_rc_factor))
+dit(code(slur_slope_damping))
+dit(code(slur_thickness))
+dit(code(slur_x_gap))
+dit(code(slur_x_minimum))
+dit(code(staffheight)) The height of the staff from the center of the
+bottom line to the center of the top line.  Equal to to code(4 * \interline).
+dit(code(stem_length)) Specify length of stems for notes in the staff
+that don't have beams.  
+dit(code(stemthickness)) Specifies the thickness of the stem lines.  
+dit(code(tie_slope_damping))
+dit(code(tie_x_minimum))
 )
+
+subsect(Translators)
+label(translators)
+
+The behavior of notation contexts is defined by the translators for
+those contexts.  The translator for a context specifies what notations
+are handled by the context, it specifies what other contexts the
+context can contain, and it sets property values for the context.  The
+default contexts are all defined in file(engraver.ly).  An easy way to
+change the behavior of a context is to copy the definition from that
+file and modify it.  
+
+The first thing that appears inside a code(\translator)
+definition is the type of the context being created.  There are 
+four types:
+description(
+  dit(code(Engraver_group_engraver))
+  dit(code(Hara_kiri_line_group_engraver))
+  dit(code(Line_group_engraver_group))
+  dit(code(Score_engraver))  
+)
+COMMENT( The names of these types seem somewhat confusing. )
+
+After the type of the context is specified, property assignments and
+code(\consists) and code(\accepts) keywords can appear in any order.  
+Each code(\accepts) keyword specifies what contexts can be contained
+inside this one.  
+
+The code(\consists) keywords specify which notations are
+handled by the context.  Each code(\consists) keyword specifies the
+name of an engraver which handles a certain notation.  
+Here is a list
+of the engravers. 
+
+description(
+dit(code(Abbreviation_beam_engraver))
+dit(code(Bar_column_engraver)) 
+dit(code(Bar_engraver)) Engraves bar lines.  Normally in code(Staff) and
+code(RhythmicStaff).  
+dit(code(Bar_number_engraver)) Engrave bar numbers.  These numbers
+appear at the start of each line.  Not normally in any translator.  Can
+be added to code(Score) for Score-wide numbering or to code(Staff) for
+numbering on each staff.  
+
+dit(code(Beam_engraver)) Handles beam requests by engraving beams.  Normally
+appears in the code(Voice) translator.  If omitted, then notes will be printed
+with flags instead of beams.
+
+dit(code(Beam_req_swallow_translator)) Swallows beam requests.  In
+code(LyricVoice).  
+dit(code(Clef_engraver)) Engraves the clef symbol.  Normally in code(Staff).
+dit(code(Collision_engraver))
+dit(code(Dot_column_engraver)) Engraves dots on dotted notes shifted to the
+right of the note.  Normally in code(Voice).  If omitted, then dots appear on
+top of the notes.  
+dit(code(Dynamic_engraver)) Engraves dynamics symbols.  Normally in code(Voice).
+dit(code(Font_size_engraver))
+dit(code(Key_engraver)) Engraves the key signature.  Normally in code(Staff).
+dit(code(Local_key_engraver))
+dit(code(Lyric_engraver)) Engraves lyrics.  Normally in code(LyricVoice).
+dit(code(Multi_measure_rest_engraver)) Engraves multi-measure rests that are
+produced with code(R).  Normally in code(Voice).
+dit(code(Note_heads_engraver)) Engraves note heads.  Normally in code(Voice).
+Removing this gives a fatal error.  
+COMMENT(Perhaps should be Note_head_engraver)
+dit(code(Piano_bar_engraver))
+dit(code(Pitch_squash_engraver)) Treat all pitches as middle C.  Used in
+code(RhythmicStaff).  Note that the notes move, but the locations of
+accidentals stay the same. 
+dit(code(Plet_engraver)) Engraves brackets and the number over tuplets.  In
+code(Voice).  
+dit(code(Plet_swallow_engraver)) Swallows tuplet requests without any output.
+In code(LyricVoice).  
+COMMENT( Should this be named Plet_req_swallow_translator? )
+dit(code(Priority_horizontal_align_engraver))
+dit(code(Rest_collision_engraver)) Handles collisions of rests. In code(Staff).
+dit(code(Rest_engraver)) Engraves rests.  Normally in code(Voice).
+dit(code(Rhythmic_column_engraver))
+dit(code(Score_priority_engraver))
+dit(code(Script_engraver)) Handles note ornaments generated by code(\script).
+Normally in code(Voice).  
+dit(code(Separating_line_group_engraver))
+dit(code(Skip_req_swallow_translator))
+dit(code(Slur_engraver)) Engraves slurs.  Normally in code(Voice).
+dit(code(Span_bar_engraver)) Engraves lines across multiple staffs.  Normally
+in code(Staffgroup) and code(GrandStaff).  Removing this from code(StaffGroup)
+gives the definition of code(ChoirStaff).  
+dit(code(Span_score_bar_engraver))
+dit(code(Staff_group_bar_engraver))
+dit(code(Staff_margin_engraver)) Prints the name of the instrument
+(specified by code(Staff.instrument) and code(Staff.instr)) at the
+left of the staff.  
+dit(code(Staff_sym_engraver))
+dit(code(Stem_engraver)) Engraves stems.  Normally in code(Voice).
+dit(code(Ties_engraver)) Engraves ties.  Normally in code(Voice).
+COMMENT(perhaps should be named Tie_engraver?)
+dit(code(Time_signature_engraver)) Engraves the time signature.  Normally in
+code(Staff) and code(RhythmicStaff).
+dit(code(Timing_engraver)) Responsible for synchronizing timing information
+from staffs.  Normally in code(Score).  In order to create polyrhythmic music,
+this engraver should be removed from code(Score) and placed in code(Staff).
+dit(code(Vertical_align_engraver)) 
+)
+
index a8e7f025e263a8602af0f4b241c836d02f259bf9..30feb2d0e64d2b22e7fa5225d8242fda4542687f 100644 (file)
@@ -976,9 +976,9 @@ mudela()(\score{
 \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
 \paper { 
   linewidth = -1.;
-  Staff = \translator {
+  \translator {
     \type "Line_group_engraver_group";
-
+    Staff ;
     defaultclef = violin;
 
     \consists "Timing_engraver";
@@ -1000,9 +1000,9 @@ mudela()(
   \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
   \paper{
   linewidth = -1.;
-    Staff = \translator {
+    \translator {
     \type "Line_group_engraver_group";
-    defaultclef = violin;
+    defaultclef = violin;Staff;
     \consists "Time_signature_engraver";
     \consists "Separating_line_group_engraver";
     \accepts "Voice";
@@ -1018,9 +1018,9 @@ mudela()(
   \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
   \paper{
   linewidth = -1.;
-    Staff = \translator {
+    \translator {
     \type "Line_group_engraver_group";
-    defaultclef = violin;
+    defaultclef = violin;Staff ;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
     \consists "Separating_line_group_engraver";
@@ -1036,9 +1036,9 @@ mudela()(\score{
   \notes\relative c' { \time 2/4; g'4 c,4
 a'4 f4 e c d2 } \paper {
   linewidth = -1.;
-  Staff = \translator {
+  \translator {
     \type "Line_group_engraver_group";
-
+    Staff ;
     defaultclef = violin;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
@@ -1057,9 +1057,9 @@ mudela()(\score {
   \notes \relative c' {\clef alto;  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
 \paper {
   linewidth = -1.;
-  Staff = \translator {
+   \translator {
     \type "Line_group_engraver_group";
-
+    Staff;
      defaultclef = violin;
     \consists "Bar_engraver";
     \consists "Time_signature_engraver";
@@ -1574,10 +1574,15 @@ verb(
 \translator
 {
         \type "Engraver_group_engraver";
+
+       "ContextName"
+
         \accepts "...";
         \accepts "...";
         \accepts "...";
 
+
+
         \consists " ... ";
         \consists " ... ";
         \consists " ... ";
@@ -1635,29 +1640,13 @@ mycode(Timing_engraver).
 mudela(verbatim)(
 polymetricpaper = \paper {
   Score = \translator {
-    \type Score_engraver;
-    \consists "Score_priority_engraver";
-    \consists "Priority_horizontal_align_engraver";
-    \consists "Vertical_align_engraver";
-    % \consists "Timing_engraver"; % removed Timing_engraver
-    \accepts "Staff";
+    \ScoreContext
+    \remove "Timing_engraver";
   }
 
   Staff = \translator {
-    \type "Line_group_engraver_group";
-
-    defaultclef = violin;
-
-    \consists "Bar_engraver";
-    \consists "Clef_engraver";
-    \consists "Key_engraver";
-    \consists "Local_key_engraver";
-    \consists "Time_signature_engraver";
-    \consists "Timing_engraver";  % added Timing_engraver
-    \consists "Staff_sym_engraver";
-    \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
+    \StaffContext
+    \consists "Timing_engraver";
   }
 }
 \score {
diff --git a/NEWS b/NEWS
index 855cc07ca3b9a8c744e3c29cb8c5209144e494d0..96802004bcb32d253832137ba090be52b0f0a886 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,26 @@
+
+
+pl 12.hwn1
+       - \remove "Engraver_type";
+       - \output "bla" -> output = "bla" (mudela 0.1.6)
+       - \property defaultclef -> \property defaultClef
+       - naming of access_{Engraver,Performer,Translator_group} ()
+       - changed syntax for \translator in \paper{} (mudela 0.1.6)
+       - declared contexts:
+
+               StaffContext = \translator { .. }
+               \translator { \StaffContext }
+
+       - elt_b -> elem_b
+       - bf: add Separating_line_group_engraver to RhythmicStaff.
+
+
+pl 12.am1
+       - large doc patch, ChoireStaff -> ChoirStaff
+
+*******
+pl 12
+
 pl 11.uu2
        - added Transposed_music for mixing transposition and relative 
 
diff --git a/TODO b/TODO
index b25fa11e4ba0f110cf9acc0d38f5f2e84dd52939..de989a19742fb1eee90ada9420fee90353265a14 100644 (file)
--- a/TODO
+++ b/TODO
@@ -11,28 +11,6 @@ grep for TODO and ugh/ugr/urg
 
        ydirection <-> yDirection
 
-       * 
-   \score{
-      \notes { \property Staff.defaultclef = bass    a b c d }
-      \paper{
-
-
-   Staff = \translator {
-          \type "Line_group_engraver_group";
-          \consists "Bar_engraver";
-          \consists "Clef_engraver";
-          \consists "Key_engraver";
-          \consists "Local_key_engraver";
-          \consists "Time_signature_engraver";
-          \consists "Staff_sym_engraver";
-          \consists "Collision_engraver";
-          \consists "Rest_collision_engraver";
-          \consists "Separating_line_group_engraver";
-          \accepts "Voice";
-       }
-   }
-}
-
        * typo checks on property names?
 
        * egcs-1.1 support
diff --git a/VERSION b/VERSION
index 75df7b13ab22a1700126dee360a31f6a878afed8..6a630939a4246dbb275a4f8727dabd940469ba8e 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
 PATCH_LEVEL=12
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=hwn1
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 2c1d6be30842512900fbd484e72ba52c96e9cd09..4dbb07f35813e0494929d024b2ad06cdf9e9e276 100644 (file)
@@ -4,7 +4,7 @@
 # 
 # source file of the GNU LilyPond music typesetter
 # 
-# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 import os
 import sys
index 3f4d99006d903adc38506a49a665498721598de6..3f85164681692f84c6a49c46e5ff9ecc37d36a48 100644 (file)
@@ -4,7 +4,7 @@
 # 
 # source file of the GNU LilyPond music typesetter
 # 
-# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 import os
 import sys
@@ -14,7 +14,6 @@ import regex
 import regsub
 import time
 
-sys.path.append ('@abs-step-bindir@')
 
 (options, files) = getopt.getopt(
     sys.argv[1:], 'a:d:hl:o:p:t:', 
index 3f46028fa82c2b91ff69252ca12c7fe36e4c9445..2d200f2e5a60e6f7e781e52d72d49619ed4f6819 100644 (file)
@@ -18,7 +18,7 @@ public:
   Dictionary (Dictionary const&);
   T &elem (String s);
   T const &elem (String s) const;
-  bool elt_b (String s) const;
+  bool elem_b (String s) const;
   void add (String, T);
   void clear ();
 }
index fc15680d92af70110fefa5f34929bea4d0dccdde..784bf36fbee75749269aceb18595528c3f685aa6 100644 (file)
@@ -53,9 +53,9 @@ Dstream::identify_as (String name)
   String cl (strip_member (mem));
   String idx = cl;
 
-  if (silent_assoc_p_->elt_b (mem))
+  if (silent_assoc_p_->elem_b (mem))
     idx  = mem;
-  else if (silent_assoc_p_->elt_b (cl))
+  else if (silent_assoc_p_->elem_b (cl))
     idx = cl;
   else
     {
@@ -74,7 +74,7 @@ Dstream::identify_as (String name)
 bool
 Dstream::silent_b (String s) const
 {
-  if (!silent_assoc_p_->elt_b (s))
+  if (!silent_assoc_p_->elem_b (s))
     return false;
   return (*silent_assoc_p_)[s];
 }
@@ -162,7 +162,7 @@ Dstream::Dstream (ostream *r, char const * cfg_nm)
     (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
   }
 
-  if ((*silent_assoc_p_).elt_b ("Dstream_default_silence"))
+  if ((*silent_assoc_p_).elem_b ("Dstream_default_silence"))
     default_silence_b_ = (*silent_assoc_p_)["Dstream_default_silence"];
 }
 
index 3840b4bd5aa765f01902836ae8314a84b0d27d33..c0b3f5fa01db133a2e462daa5103d7757ae2183d 100644 (file)
@@ -55,11 +55,11 @@ struct Assoc {
     return arr.size() -1;
   }
 public:
-  bool elt_b (K key) const {
+  bool elem_b (K key) const {
     return find (key) >= 0;
   }
   void del (K key) {
-    assert (elt_b (key));
+    assert (elem_b (key));
     int i= find (key);
     arr[i].free = true;
   }
@@ -77,7 +77,7 @@ public:
     return elem (key);
   }
   V const & elem (K key) const { 
-    assert (elt_b (key));
+    assert (elem_b (key));
     return arr[find (key)].val;
   }
   void clear () 
index 9468fae4871024d00e32720a364ebfdfa3aa696b..20f5987e430b53568973814e5d21ecddf99053fe 100644 (file)
@@ -100,7 +100,7 @@ struct Interval_t {
   }
   String str() const;    
   void print () const;
-  bool elt_b (T r);
+  bool elem_b (T r);
   void negate () {
     T r = -left;
     T l = -right;
index 382ec67523e5f11424213cd75ee869fad79a8f28..537b9236cf4667a969da981b4de39e7f28ddb276 100644 (file)
@@ -125,7 +125,7 @@ Interval_t<T>::str() const
 
 template<class T>
 bool
-Interval_t<T>::elt_b (T r)
+Interval_t<T>::elem_b (T r)
 {
   return r >= left && r <= right;
 }
index f7831b439caff484f69cea36da85b5fd5a80848c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,22 +0,0 @@
-% bar-numbering.ly
-% 
-Staff = \translator {
-       \type "Line_group_engraver_group";
-       defaultclef = violin;
-       barColumnPriority = "0";
-
-       marginBreakPriority = "-4";
-       \consists "Bar_engraver";
-       \consists "Clef_engraver";
-       \consists "Key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Local_key_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Separating_line_group_engraver";
-         
-       \accepts "Voice";
-}
index 242d28e06168a82624e1ba489fda359f5be3022c..a91491940024525946f82c0f71eddeb015a32f52 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 4637aeba108167861d116d822005e43e34c64903..42f06c1a1dd97a62054975686c34c4a7a196657f 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly";
index 8a7fb5381e8ef7761a5ab6056209c3ff493b41f9..20ef3e235a1bc9c00c291d79cfa6908960f89596 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 035c39761b24dcff5a379272c6e9d558c780ed11..441f9c01824142c6a8ba6b453bd2b10fa469cbe8 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index f8b85f92fed034b5a7e70a31db19af36821b9331..2921a518c53e7e99f6efb59b02f3023256b5a007 100644 (file)
@@ -2,8 +2,10 @@
 % setup for Request->Element conversion. Guru-only
 %
 
-Staff = \translator {
+StaffContext=\translator {
        \type "Line_group_engraver_group";
+       Staff ;
+
 %{
        The Hara_kiri_line_group_engraver is a Line_group_engraver 
        that will not typeset an empty line of staff, i.e., a line 
@@ -12,7 +14,6 @@ Staff = \translator {
        Hara_kiri_line_group_engraver.
 %}
 %      \type "Hara_kiri_line_group_engraver";
-       defaultclef = violin;
 
        \consists "Bar_engraver";
        \consists "Clef_engraver";
@@ -43,16 +44,21 @@ Staff = \translator {
        (\property Staff.instrument; Staff.instr for subsequent lines)
        to the left of a staff.
 %}
-%{
+
        marginBreakPriority = "-5";
+
+%{
        \consists "Staff_margin_engraver";
 %}
        \consists "Separating_line_group_engraver";
          
        \accepts "Voice";
-}
-ChoireStaff = \translator {
+};
+
+\translator{\StaffContext }
+\translator {
        \type "Line_group_engraver_group";
+       ChoirStaff;
        \consists "Vertical_align_engraver";
        \consists "Staff_group_bar_engraver";
        \accepts "Staff";
@@ -62,21 +68,23 @@ ChoireStaff = \translator {
 }
 
 
-RhythmicStaff = \translator
-{
+RhythmicStaffContext=\translator{
        \type "Line_group_engraver_group";
        nolines  = "1";
        \consists "Pitch_squash_engraver";
-
+       \consists "Separating_line_group_engraver";     
+       RhythmicStaff;
        \consists "Bar_engraver";
        \consists "Time_signature_engraver";
        \consists "Staff_sym_engraver";
        \accepts "Voice";
-}
-
-Voice = \translator {
+};
+\translator{\RhythmicStaffContext}
+VoiceContext = \translator {
        \type "Engraver_group_engraver";
        \consists "Dynamic_engraver";
+       Voice ;
+       
        \consists "Rest_engraver";
        \consists "Dot_column_engraver";
        \consists "Stem_engraver";
@@ -91,60 +99,55 @@ Voice = \translator {
        \consists "Ties_engraver";
        \consists "Note_heads_engraver" ;       
        \consists "Skip_req_swallow_translator";
-       %\accepts "Thread";
-}
-
+};
 
-GrandStaff = \translator {
+\translator {\VoiceContext}
+\translator {
        \type "Line_group_engraver_group";
-
+       GrandStaff;
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Piano_bar_engraver";
        minVerticalAlign = 1.5*\staffheight;
 
-       % This should come last
        \accepts "Staff";
 }
 
-StaffGroup = \translator {
+\translator {
        \type "Line_group_engraver_group";
 %      \type "Hara_kiri_line_group_engraver";
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Staff_group_bar_engraver";
-
+       StaffGroup;
        \accepts "Staff";
        \accepts "RhythmicStaff";
        \accepts "GrandStaff";
        \accepts "Lyrics";
 }
 
-LyricVoice = 
 \translator{
        \type "Line_group_engraver_group";
 
+       LyricVoice ;
        \consists "Separating_line_group_engraver";
        \consists "Lyric_engraver";
        \consists "Beam_req_swallow_translator";
        \consists "Plet_swallow_engraver";
 }
 
-Lyrics = \translator {
+\translator {
        \type "Line_group_engraver_group";
+       Lyrics;
        \consists "Vertical_align_engraver";
        \accepts "LyricVoice";
 }
 
-Score = \translator {
+ScoreContext = \translator {
        \type Score_engraver;
-
+       Score;
        \consists "Timing_engraver";
-       % uncomment to bar numbers on a whole system.
-%{
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-%}
+
        \consists "Bar_column_engraver";
        \consists "Span_score_bar_engraver";
        \consists "Score_priority_engraver";
@@ -157,13 +160,84 @@ Score = \translator {
        \accepts "RhythmicStaff";       
        \accepts "Lyrics";
        \accepts "GrandStaff";
-       \accepts "ChoireStaff";
-}
+       \accepts "ChoirStaff";
+};
+\translator { \ScoreContext }
+
+ScoreWithNumbers = \translator {
+       \type "Score_engraver";
+
+       % uncomment to bar numbers on a whole system.
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+
+};
+
+\translator {
+       \type "Score_engraver";
+       StupidScore;
 
-StupidScore = \translator {
-       \type Score_engraver;
        \consists "Staff_sym_engraver";
 }
 
 
 
+BarNumberingStaffContext = \translator {
+       \StaffContext
+
+
+       barColumnPriority = "0";
+
+       marginBreakPriority = "-4";
+       \consists "Mark_engraver";
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+
+};
+
+
+HaraKiriStaffContext = \translator {
+       \type "Hara_kiri_line_group_engraver";
+       Staff;
+       defaultclef = violin;
+       barColumnPriority = "0";
+       marginBreakPriority = "-4";
+
+       \consists "Bar_engraver";
+       \consists "Clef_engraver";
+       \consists "Key_engraver";
+       \consists "Time_signature_engraver";
+       \consists "Local_key_engraver";
+       \consists "Staff_sym_engraver";
+       \consists "Collision_engraver";
+       \consists "Rest_collision_engraver";
+       \consists "Staff_margin_engraver";
+       \consists "Separating_line_group_engraver";
+         
+       \accepts "Voice";
+};
+
+OrchestralScoreContext= \translator {
+       \type Score_engraver;
+       Score;
+       barScriptPadding = "2.0";       % dimension \pt
+       markScriptPadding = "4.0";
+       barColumnPriority = "-4";
+       markBreakPriority = "-4";
+
+       \consists "Timing_engraver";
+       \consists "Bar_column_engraver";
+       \consists "Bar_number_engraver";
+       \consists "Mark_engraver";
+       \consists "Span_score_bar_engraver";
+       \consists "Score_priority_engraver";
+       \consists "Priority_horizontal_align_engraver";
+       \consists "Vertical_align_engraver";
+
+       \accepts "ChoirStaff";
+       \accepts "StaffGroup";
+       \accepts "Staff";
+       \accepts "RhythmicStaff";       
+       \accepts "Lyrics";
+       \accepts "GrandStaff";
+};
index 8a7fb5381e8ef7761a5ab6056209c3ff493b41f9..20ef3e235a1bc9c00c291d79cfa6908960f89596 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index c7b8aff7dc0f7ce7f4f567d00930034dd48a4101..1ab82d80162219e8a5b83e163c9aac296576abc5 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly"
index 02c6e14ff12c5773c4436306b8e712e6e6cd03d9..f3622d278d1af0d6b538bd75b93f81ed209115c4 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 \include "declarations.ly";
index aa7095fa2bd9a1a5cce4c87b60efdc7639b2ef2f..af51b3277a3492fd00b9181a89ab7b26295a0e7d 100644 (file)
@@ -6,7 +6,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 paper_sixteen = \paper {
        staffheight = 16.0\pt;
index 6f53e8b870130150d70d5a712ca9655795827f8f..ecc8a3eac715f9e718d2ef9e90aa8a1a7295d703 100644 (file)
@@ -5,7 +5,7 @@
  \include "table13.ly";
  \include "table16.ly";
 
-\version "1.0.4";
+\version "1.0.6";
 
 paper_twenty = \paper {
        staffheight = 20.0\pt;
@@ -13,8 +13,8 @@ paper_twenty = \paper {
        papersize = "a4";
 
        % ugh see table20 for sizes
-       quartwidth =  6.61\pt
-       wholewidth = 9.90\pt
+       quartwidth =  6.61\pt;
+       wholewidth = 9.90\pt;
 
 
        arithmetic_basicspace = 2.;
index a4cee69b750736003218f723fd211218d9c8156a..be6707238a153781375c72585b00c95bffbd76e4 100644 (file)
@@ -1,57 +1,68 @@
 %
 % setup for Request->Element conversion. Guru-only
 %
-
-Staff =        \translator {
+\translator {
        \type "Staff_performer";
        \accepts Voice;
+       Staff;
        \consists "Key_performer";
        \consists "Time_signature_performer";
 }
 
-Thread =\translator
+\translator
 {
        \type "Performer_group_performer";
+       Thread ;
        \consists "Note_performer";
 }
-
-Voice = \translator
+\translator
 {
        \type "Performer_group_performer";
        \accepts Thread;
+Voice;
 }
-
-GrandStaff = \translator
+\translator
 {
        \type "Performer_group_performer";
        \accepts Staff;
-}
 
-LyricVoice = \translator {
+GrandStaff;}
+
+\translator {
        \type "Performer_group_performer";
        \consists "Lyric_performer";
+LyricVoice;
 }
 
-
-Lyrics = \translator { 
+\translator{
+       \type "Performer_group_performer";
+       ChoirStaff;
+       \accepts Staff;
+}
+\translator { 
        \type "Staff_performer";
        \accepts LyricVoice;
+       Lyrics;
        \consists "Time_signature_performer";
 }
-
-StaffGroup = \translator
+\translator
 {
        \type Performer_group_performer;
+
+       StaffGroup;
        \accepts Staff;
 }
-
-Score = \translator {
+\translator {
        \type "Score_performer";
+
+
+       Score;
        instrument = piano;
        \accepts Staff;
        \accepts GrandStaff;
        \accepts Lyrics; 
        \accepts StaffGroup;
+       \accepts ChoirStaff;
        \consists "Swallow_performer";
 }
 
index a3da56b279788c78f00909d00ee33eebeb364e42..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,26 +0,0 @@
-% score-bar-numbering.ly
-
-Score = \translator {
-       \type Score_engraver;
-       barScriptPadding = "2.0";       % dimension \pt
-       markScriptPadding = "4.0";
-       barColumnPriority = "-4";
-       markBreakPriority = "-4";
-
-       \consists "Timing_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Mark_engraver";
-       \consists "Span_score_bar_engraver";
-       \consists "Score_priority_engraver";
-       \consists "Priority_horizontal_align_engraver";
-       \consists "Vertical_align_engraver";
-
-       \accepts "ChoireStaff";
-       \accepts "StaffGroup";
-       \accepts "Staff";
-       \accepts "RhythmicStaff";       
-       \accepts "Lyrics";
-       \accepts "GrandStaff";
-}
-
index f4e170a732e720a4351d4e59cd779dc90010b90f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,29 +0,0 @@
-%score-paper.ly
-
-\paper { 
-       % for simple testing only!
-%      castingalgorithm = \Wordwrap; % lots faster on my 486 -- jcn
-Staff = \translator {
-       \type "Hara_kiri_line_group_engraver";
-
-       defaultclef = violin;
-       barColumnPriority = "0";
-       marginBreakPriority = "-4";
-
-       \consists "Bar_engraver";
-       \consists "Clef_engraver";
-       \consists "Key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Local_key_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Staff_margin_engraver";
-       \consists "Separating_line_group_engraver";
-         
-       \accepts "Voice";
-}
-
-\include "score-bar-numbering.ly";
-
-}
index eb8c8c48f9b93d020cfc459c12df458d38b38cbc..dedefdc038f6324a4d4692baa74e2493636b6ec6 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c{
        c'' d e f
index 84738b6ed9ad31a2a27caaa6fc1501d03365b9b5..d5f945ffab0a293fd4dc48c04bdc3783c5d3dea5 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 blah = \notes {
@@ -20,6 +20,6 @@ blah = \notes {
 }
 
 \score{
-       \blah
+       \type Staff \blah
        
 }
index 2baeadd3ca5cc463040c0f0a92e1e88a97e6937f..aeeaa4f93acc63706b64f24a8ad4e0f3940ecea8 100644 (file)
@@ -10,7 +10,7 @@ copyright =    "public domain";
 Tested Features: example file with comments
 
 %}
-\version "1.0.4";
+\version "1.0.6";
 
 
 % the % is a comment.
index 7ee17905f3b39644411a27f13075db035b5fd908..40a62279be56c2765a344cfd0727391e9c8e5871 100644 (file)
@@ -1,5 +1,5 @@
-\version "1.0.4";
-part = \{
+\version "1.0.6";
+part = \notes {
        c-1 c c c
        r1*3
        c4-5 c c c
@@ -10,29 +10,18 @@ part = \{
 
 a4 = \paper{
        linewidth= 80.\mm;
-       Staff = \translator {
-               \type "Engraver_group_engraver";
-               defaultclef = violin;
-               \consists "Bar_engraver";
-               \consists "Clef_engraver";
-               \consists "Key_engraver";
-               \consists "Meter_engraver";
-               \consists "Local_key_engraver";
-               \consists "Staff_sym_engraver";
-               \consists "Collision_engraver";
-               \consists "Rest_collision_engraver";
+        \translator {
+               \StaffContext
+               
                \consists "Bar_column_engraver";
                \consists "Bar_number_engraver";
-               \consists "Separating_line_group_engraver";
-               \consists "Line_group_engraver";
-               \accepts "Voice";
+               
        }
 }
 
 \score{
        <
                \notes{ 
-                       \property Score.part = 1
                        \part
                }
        >
@@ -42,7 +31,6 @@ a4 = \paper{
 \score{
        <
                \notes{ 
-                       \property Score.part = 0
                        \part
                }
        >
index deff27a0d731937993a0899b7c935ff61b194925..3e466e4fcb114803bcd9efa2aa828cd40bdd421f 100644 (file)
@@ -1,3 +1,7 @@
+%
+% This file does not work.  
+%
+
 % pedal.ly
 % 
 % Johann Sebastian Bach
@@ -24,7 +28,7 @@
 % \lbheel \lbheel \lfheel \lftoe
 % \rbheel \rbtoe \rfheel \rftoe
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
                \notes {
index b7848e8af06f6da8982187688c1e575270277666..80ce97738bbd458290ee2caacb2c15fae65e5a27 100644 (file)
@@ -23,7 +23,7 @@
    * organ staff...
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 
 
index ee8e9d6b9ddb25cb1ecf438bc5f508a8c13a3614..197df1fda69b45d27e048c730e1d1f5930a2cbed 100644 (file)
@@ -7,12 +7,11 @@ TestedFeatures =       "multiple meters, beaming, unsynced bars, userdefd engravers";
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 ritme = \notes\transpose c'' {
-       \partial 8;
-
        \time  4/4;
+       \partial 8;
        c8                                      |
        
        [a8~  a8. a8 a16 a16 a16] c4.           |       % watch the beams!
@@ -37,11 +36,15 @@ ritme = \notes\transpose c'' {
        
 
 another = 
-       \notes{ \time 4/4; 
-               c1.  c1. c4 c4 c4 c4  \time  4/4; c1 c1 c1
+       \notes{ \time 6/4; 
+               c1.  c1. \time 4/4;c4 c4 c4 c4  c1 c1 c1
         }
 
 
+%
+% Beams are incorrect for the next staff.  They cut through the whole notes.
+%
+
 yanother = 
        \notes{ \time 4/4; 
                c1 c1 c1 c4 c4 c4 c4  c1 c1 c1
@@ -60,57 +63,17 @@ yanother =
        \paper{
 
        %% remove Timing_engraver and Bar_number_engraver
-       Score = \translator {
-       \type Score_engraver;
-
-       %\consists "Timing_engraver";
-
-       \consists "Span_score_bar_engraver";
-       \consists "Score_priority_engraver";
-       \consists "Priority_horizontal_align_engraver";
-       \consists "Vertical_align_engraver";
-
-
-       \accepts "StaffGroup";
-       \accepts "Staff";
-       \accepts "Lyrics";
-       \accepts "GrandStaff";
-}
-
-RhythmicStaff = \translator
-{
-         \type "Engraver_group_engraver";
-       nolines  = "1";
-         \consists "Pitch_squash_engraver";
-
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-         \consists "Bar_engraver";
-         \consists "Meter_engraver";
-         \consists "Staff_sym_engraver";
-         \consists "Line_group_engraver";
-         \consists "Timing_engraver";
-         \accepts "Voice";
-}
-       %% add Timing_engraver to the staff
-       Staff = \translator {
-         \type "Engraver_group_engraver";
-       defaultclef=    violin;
-
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Timing_engraver";
-         \consists "Bar_engraver";
-         \consists "Clef_engraver";
-         \consists "Key_engraver";
-         \consists "Meter_engraver";
-         \consists "Local_key_engraver";
-         \consists "Staff_sym_engraver";
-         \consists "Collision_engraver";
-         \consists "Rest_collision_engraver";
-
-         \consists "Line_group_engraver";
-         \accepts "Voice";
-       }
+ \translator {
+ \ScoreContext
+ \remove "Timing_engraver";
+  }
+  \translator {
+  \RhythmicStaffContext
+  \consists "Timing_engraver";
+  }
+  \translator{
+  \StaffContext
+  \consists "Timing_engraver";
+  }
        }
 }
index 08741e02591fd514665672813f5ad95fd360e887..de9a2c496b1ec85736a42e44e2160e66c95195dd 100644 (file)
@@ -1,3 +1,7 @@
+%
+% This file prints lots of warning messages about scripts-dportato
+%
+
 \header{
 filename =      "scales.ly";
 enteredby =     "HWN";
@@ -12,7 +16,7 @@ copyright =    "public domain";
 % scales with accents.
 %
 
-\version "1.0.4";
+\version "1.0.6";
 blah =         \notes {
                \time 6/8;      
 \transpose c {
index 2de3a30b8587407f22d184bbbf8d73f9e11b8231..869836046b31eba400690f60eebf31a2d798866d 100644 (file)
@@ -1,5 +1,5 @@
        
-\version "1.0.4";
+\version "1.0.6";
 
 
 blah =         \notes{ \transpose c'' {
index 38cfe3e79542e88f4390b31e775881504c60116f..6230a2acb06c71e5aaac1c671ffdc3ce7ce92f09 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 \score{
        \notes \transpose c'''{
                \stemup
index ec1e8e9f653e1ffd9895727b1053bbf926e69cd1..895c1b5b261f613d43773e2f565d852587e04215 100644 (file)
@@ -1,7 +1,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 onestaff = \type Staff = foo\notes  {
        \property Staff.instr = instr
@@ -18,55 +18,10 @@ grstaff = \notes \type GrandStaff <
        \type Staff = bufl { c1 c2  }
 >
 
-scpaper =  \paper {Score = \translator {
-       \type Score_engraver;
-       barScriptPadding = "2.0";       % dimension \pt
-       markScriptPadding = "4.0";
-       barColumnPriority = "-4";
-       markBreakPriority = "-4";
-       barNumberBreakPriority = "-4";
-       
-       \consists "Timing_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Mark_engraver";
-       \consists "Span_score_bar_engraver";
-       \consists "Score_priority_engraver";
-       \consists "Priority_horizontal_align_engraver";
-       \consists "Vertical_align_engraver";
-
-       \accepts "ChoireStaff";
-       \accepts "StaffGroup";
-       \accepts "Staff";
-       \accepts "RhythmicStaff";       
-       \accepts "Lyrics";
-       \accepts "GrandStaff";
-}}
+scpaper =  \paper {\translator {\OrchestralScoreContext}}
 
-stpaper =\paper{
-Staff = \translator {
-       \type "Line_group_engraver_group";
-       defaultclef = violin;
-       barColumnPriority = "0";
-       barNumberBreakPriority = "0";
-       marginBreakPriority = "-4";
-
-       \consists "Bar_engraver";
-       \consists "Clef_engraver";
-       \consists "Key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Local_key_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Mark_engraver";      
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Bar_column_engraver";
-       \consists "Bar_number_engraver";
-       \consists "Separating_line_group_engraver";
-       \consists "Staff_margin_engraver";
-       \accepts "Voice";
-}}
 
+stpaper =\paper{ \BarNumberingStaffContext }
 scscore = \score { \grstaff \paper {
 \scpaper
 }}
index e0200c2744d628d78e0a330b9c6414b663c85388..fe5b0aa0744c36c48b680452ed311c81e08f56a2 100644 (file)
@@ -1,5 +1,7 @@
+\version "1.0.4";
+
 \score{
-       \melodic\transpose c'{
+       \notes\transpose c'{
                \property Score.beamquantisation = \none
 
                [a'8 <a' g'']>
index 76d640ade5cc5989cd455909c49ec9fff9327143..41cdc2e5e4b96c54c7c6b98de6fedea91804ad02 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\transpose c''{
index 89be9bec733f33462ac321db04295f3119fe1bf9..d961f90d8647de0a83a02f2452fd3304e697f448 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "PD";
 
 TestedFeatures =        "beams and beamflags";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        <
index d08dae39efc7c591f376ec43bab1add080071390..7ac2085fc70dbe96e823dbc89c8eb3dfd68a9677 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests Feta embedded slurs"
+TestedFeatures =        "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 shortlong = \notes{
        c4()c( c c  |
index d4d07a45cf740e6176f0bc475d196040227e9beb..4e0ea683890c49ca27d592bf682052fb42e30b56 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
        \notes{ 
index b99931cf4a5d48dd2cbd6cc0c7612f4ca3cf60f1..c545798657d82aee04f6548b5d346c3f8bef99cb 100644 (file)
@@ -5,11 +5,11 @@ enteredby =    "HWN,JCN";
 copyright =     "public domain";
 Tested =        "test the Collision resolution ";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 
-two_voice = \notes 
+twovoice = \notes 
        \type Staff < 
          { \stemdown
                c4 d e f g2~  g4 a [c8 d e f] c2| }
@@ -18,7 +18,7 @@ two_voice = \notes
 
        >
 
-two_voice_steminvert = \notes 
+twovoicesteminvert = \notes 
        \type Staff <  
          { 
  \stemup
@@ -29,7 +29,7 @@ two_voice_steminvert = \notes
 
        >
 
-three_voice = \notes 
+threevoice = \notes 
        \type Staff <
        { \stemup 
                g4 f e f g a g2 }
@@ -76,9 +76,9 @@ restsII = \notes {
 }
 
 \score{
-       \notes \transpose c' {  \two_voice  
-       \two_voice_steminvert 
-       \three_voice  
+       \notes \transpose c' {  \twovoice  
+       \twovoicesteminvert 
+       \threevoice  
        \rests 
        % UGH ! bug!
        %\restsII 
index a3cf882cf21434f3c83efc6e8174b43e6a829843..c0654ac96d1cc23d390b6098853fdbb817c19fd0 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 \score {
index 8ea926c8088af6ee4251f3cc5e9564318961e773..3f06328cda705a9d0d7d12bb675ae57ae0612033 100644 (file)
@@ -7,7 +7,7 @@ TestedFeatures = "This file tests silly line shapes";
 
 \include "paper20.ly"
 
-\version "1.0.4";
+\version "1.0.6";
 
 oden = \lyric{ 
        O8 |
index 80fc0c07cf96b8fa93909fe1d87feb09e326649b..03db2071a026906d3b9ba04b18552f5269ad4902 100644 (file)
@@ -1,15 +1,15 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes{
                c( d e )c |
-               \slurdotted;
+               \slurdotted
                c( d e )c |
-               \slurnormal;
+               \slurnormal
                c( d e )c |
                \property Voice.slurdash = 3
                c( d e )c |
-               \slurnormal;
+               \slurnormal
                c( d e )c |
        }
        \paper{ 
@@ -20,3 +20,4 @@
        }
 }
 
+
index 1b1f7eac8a7b1137d9889244265441e861cd2d14..91a236b2b59b768c38be5f3cfc84029ce1929951 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes \relative c {
index 47518dabb8b36c2cf1b9853b853909006390c427..d4c2e7c4874757985688e967168dcd94ecfb463d 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 FontBody=      \notes\transpose c''{ 
                \bar "|:";
index 4fcb9dac5e4704fc56c50afd3796400f7b0a4551..9d38c7f5f3c7769fca9a4e49e3485090753b2c5c 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "font-body.ly"
 \score{
@@ -21,7 +21,7 @@ description = "This file tests the Feta music font";
            \paper_twenty
            linewidth = 17.5 \cm;
            gourlay_maxmeasures =5.;
-           \output "font20.tex";
+           \output =  "font20.tex";
        }
 }
 
index 377a95ac05a300f00ad327b495e3a8713da5ee71..3b1364e1811933e0bf48b88482f0fbd7f826989a 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 \include "font-body.ly"
 
 \score{
index 51c2d0f60f809f257fb66edde7f5ece4f958ac47..38dd6faa522591dbe54b4ef6ebc08062dab87e22 100644 (file)
@@ -4,7 +4,7 @@ copyright =      "PD";
 TestedFeatures =        "This file tests some nasty Gourlay spacings";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 
@@ -14,11 +14,11 @@ This is taken from [Gourlay]'s paper on breaking lines
 
 \score{
        \notes \type Staff  \transpose c''<
-               { \stemup; d2 d     | d d | d4 d2. | \break;  c1 }
-               \transpose c, { \stemdown; g4 g g g | \[2/3 g2 g2 g2 \] | g4. g8 g2 | c1 }
+               { \stemup d2 d     | d d | d4 d2. | \break  c1 }
+               \transpose c, { \stemdown g4 g g g | \[2/3 g2 g2 g2 \] | g4. g8 g2 | c1 }
                >
        \paper{
-           linewidth = 8.\cm;
+           linewidth = 8.\cm
        }
 }
 
index 86e3c94d2cfe5291c21ffad55b3537bf7e5871ed..a769b569c549264bae95af3b8809f1e71893a289 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "table13.ly";
 \include "table16.ly";
index f4f6807837b1494e9bc79f2507bc1f1603faf0a5..66a786342c2eced9e9c0ba0b7a8c70dba25ab86c 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 toeter_i = \notes\relative c {
        \property Staff.instrument = "Toeters"
index f1167e53a65db765b5060ac993993a7278a5cac9..e47814a6bc36166de6d9ce174f1dd7231899ed80 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 test key itemv breaking
index afefec8948039dd46848379feb0e9d6df0259903..ae746715e192a0f653f7fa3ccdeccc3031916dd6 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 \score{
        \notes\relative c'{
                [c16 \stemdown c'' \stemboth c,, d]
index 2ffb0f71e3e6373bc5a2b97cb04037340728173b..8feb99bfa4486406a014d08d663b99a332fbf0d2 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
   s1 | \mark "A";
index 7b694a526c11da6ddb05993c22b8b8b0eb9e5c19..54bd95e7556ee7a73c08f0badb3f54fee8d6ff47 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 voice_one = \notes\transpose c'        {  \stemup
        R1 * 2 | f'4-. r r2 | R1 * 3 |
index b8be66d9d0888861eef802da9e7b62843c0a9443..05d82291567d4f794dd23cb4a2a55e2ccc89b7a1 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
 
index 9cc36708091acb85b758aa50932fabba35680c8d..102dfc59e614f2ea2c258adecbbd6c48adf923e6 100644 (file)
@@ -1,7 +1,7 @@
 
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 onestaff =     \type Staff = foo\notes  {
                \property Staff.instr = instr
@@ -32,7 +32,7 @@ scpaper =  \paper {Score = \translator {
        \consists "Priority_horizontal_align_engraver";
        \consists "Vertical_align_engraver";
 
-       \accepts "ChoireStaff";
+       \accepts "ChoirStaff";
        \accepts "StaffGroup";
        \accepts "Staff";
        \accepts "RhythmicStaff";       
index db1338d5d89dcdc382c59cec251226e1ab519954..3a5ac5dce664512f54e2b38e439686c73d98a773 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests Feta embedded slurs"
+TestedFeatures =        "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 shortlong = \notes{
        c4()c( c c  |
index 6bd977310310fdc59853aa5a1cd49ade533f5048..edee54434dedd2c660546d98f7863570abf66418 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 % bug
 % excentric slur can't handle this ...
index 8199d2a769fd7bf5b178a7daf2db8b0ac0c0d59b..43c422d38e4a16aad53fb8d74033a6967cbb5d21 100644 (file)
@@ -1,5 +1,5 @@
 % test damping
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\relative c'{
index a4b712da93e7923c284c92d253b05394b0a7e3e4..8b24a4e5a26b5337ea635009d9d56a450571b941 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 % urg, the direction of the slur gets swapped!
 \score{
index 065f3209fd7393e16cacd9185481d6b6a9aa59c1..459ed7e48fd17a22153fa03eb7224c42087182c3 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes\transpose c'{
@@ -29,5 +29,4 @@
                c c c )c |
        }
        }
-       }
 }
index 1a177c47b9e527b1f56e92e662dc8bb454bbb83c..6ba725555033a991ffa1d89d72354ceeb774d2f9 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "public domain";
 TestedFeatures =        "This file tests various spacings";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 multipart = \notes{ 
     \type StaffGroup < 
index 6b40f48841031a2fb8bc5668bb5ba956d37f61ef..667be275d6f5e61e55116a239b9bc922165c3107 100644 (file)
@@ -8,7 +8,7 @@ of beams";
        
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 beamintervals = \notes{
                \time 7/4;
index ce992078a0a08335074be8c83ab815102cbe5ea9..39eb2e13bcfb7c113f9216d71ea5905f6130c4c9 100644 (file)
@@ -1,7 +1,7 @@
-\version "1.0.4";
+\version "1.0.6";
 
 $somewhat_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman" 
        AaaaaaA2
        BbbbbbB2
        CcccccC2 
@@ -11,7 +11,7 @@ $somewhat_long = \lyric{
 }
 
 $rather_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman" 
        LLLLoooonggggg2 
        Syyllllaaabbble2 
        LLLLoooonggggg2 
@@ -21,7 +21,7 @@ $rather_long = \lyric{
 }
 
 $quite_long = \lyric{
-       \textstyle "roman" ;
+       \property Lyrics . textstyle = "roman"
        LLLLLLLLLooooongggggggg2 
        Syyyyyyyyyyyyylllllllaaaaaabbble2 
        LLLLLLLLLooooongggggggg2 
index 15f7e0b499ce2e99ae830b51b525809d3a103f18..1b21d5308b6047d8ef718ae6bdb4355687d2b1a0 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 
 %  middle tie is wrong
index e94930d739fc8d175aa65833c447aa7eecafe4dc..cddf1e9cc83c60a3c88221fae864b15da1b49944 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.4";
+\version "1.0.6";
 
 tie = \notes\transpose c''{
 
index 2eafb8ae116cb8e21587fc3206497d994cb7e3b8..ae1b5ee610a267f91a744686e2daa790675e7fa4 100644 (file)
@@ -10,7 +10,7 @@ source =      "urtext";
 instrument=    "Instrument";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes
index 18f742d1273ddb22f7bd05949b0d64492f999360..8483b8735c831467d847ce64b47de689175315a2 100644 (file)
@@ -6,7 +6,7 @@ I have extend Mats' patches to allow accidental transposition:
                = \transpose d =>
         \keysignature gis;
 
-As you can see in output the example file "test.ly" there are a few problems left:
+As you can see in output =  the example file "test.ly" there are a few problems left:
 - key undo (already in the Todo)
 - "wrong" transposition: e.g. \transpose d of fis-major = gis-major (better as-major?).
        The solution gis=as etc. would concern both note and key transposistion
@@ -22,7 +22,7 @@ copyright =    "public domain";
 }
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 vOne = \notes \relative c''{
         \clef"violin";
index e80a68201c67a9e2f10585d13fcb1aa76d3014cc..b74d873faf6648a5346e3f3ce8958707511358ea 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score {
 \notes <
 
 >
 
-\paper{
-Staff = \translator {
-       \type "Line_group_engraver_group";
-       defaultclef = violin;
+\paper{}
 
-       \consists "Bar_engraver";
-
-       \consists "Key_engraver";
-       \consists "Local_key_engraver";
-       \consists "Time_signature_engraver";
-       \consists "Staff_sym_engraver";
-       \consists "Collision_engraver";
-       \consists "Rest_collision_engraver";
-       \consists "Separating_line_group_engraver";
-         
-       \accepts "Voice";
-}
-}
 }
index 93d228e61f982ce643e95d2a671497ea61ee2213..1d3537747a1274f2bae5d021380579004f688d6b 100644 (file)
@@ -1,11 +1,11 @@
 \header{
 enteredby =     "jcn";
 copyright =     "PD";
-TestedFeatures =        "This file tests trills"
+TestedFeatures =        "This file tests trills" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \score{
        \notes{ 
index 842f3c4185757838d8c9b4c7763f7609490eedcb..b934bf900ad7ba08c4653f7a8844098a957767de 100644 (file)
@@ -12,7 +12,7 @@ copyright =    "public domain";
 Tested Features                lyrics and chords
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 melodie = \notes\relative c {
         \clef"violin";
index b2b888819d4556f9204f0d61ac5e299ef9b696aa..739108a64af34631600363748fbeaf556c22af0a 100644 (file)
@@ -20,7 +20,7 @@ traditional song in various languages.
 Tested Features: lyrics, interleaving lyrics and staffs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 melody = \notes \relative c'' {
        \clef violin;
index 75df7b13ab22a1700126dee360a31f6a878afed8..6a630939a4246dbb275a4f8727dabd940469ba8e 100644 (file)
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
 PATCH_LEVEL=12
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=hwn1
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 4f97c77fd78bf52b9a486a776a73b93956bcd395..d314f35385f8150de87d7d0eb2815ba50e0c0905 100644 (file)
@@ -60,11 +60,10 @@ Change_iterator::process_and_next (Moment m)
        Translator_group * dest = 
          report_to_l ()->find_create_translator_l (to_type, to_id);
        current->remove_translator_p (last);
-       dest->add (last);
+       dest->add_translator (last);
       }
     else
       {
-       
        /*
          We could change the current translator's id, but that would make 
          errors hard to catch
index 8915e7cfe50fccfeed4916f2c398a65d641f7549..8195fbd9bf6c382b4e76f2f489e7fdcf15ac3ebf 100644 (file)
@@ -181,7 +181,7 @@ if (it_l)
 void
 Clef_engraver::do_creation_processing()
 {
-  Scalar def = get_property ("defaultclef");
+  Scalar def = get_property ("defaultClef");
   if (def.to_bool ()) // egcs: Scalar to bool is ambiguous
     set_type (def);
   
index 8ac916b54737a96f862efc9e849ff12e2ecfdb8a..2dc0b4131b24b756dbea75a0007be88550f43d2d 100644 (file)
@@ -30,7 +30,7 @@ Engraver_group_engraver::do_announces()
   Link_array<Translator_group> groups = group_l_arr ();
   for (int i=0; i < groups.size(); i++) 
     {
-      Engraver * eng = groups[i]->engraver_l ();
+      Engraver * eng = groups[i]->access_Engraver  ();
       if (eng)
        {
          Engraver_group_engraver * group =
@@ -52,7 +52,7 @@ Engraver_group_engraver::do_announces()
            info.req_l_ = &dummy_req;
          for (int i=0; i < nongroups.size(); i++) 
            {   // Is this good enough?
-             Engraver * eng = nongroups[i]->engraver_l ();
+             Engraver * eng = nongroups[i]->access_Engraver  ();
              if (eng && eng!= info.origin_grav_l_arr_[0])
                eng->acknowledge_element (info);
            }
@@ -60,7 +60,7 @@ Engraver_group_engraver::do_announces()
       announce_info_arr_.clear ();
       for (int i=0; i < nongroups.size(); i++)
        {
-         Engraver * eng = nongroups[i]->engraver_l ();
+         Engraver * eng = nongroups[i]->access_Engraver  ();
          if (eng)
            eng->process_acknowledged ();
        }
@@ -77,7 +77,7 @@ Engraver_group_engraver::get_staff_info() const
   Link_array<Translator> simple_translators = nongroup_l_arr (); 
   for (int i=0; i < simple_translators.size(); i++)
     {
-    Engraver * eng = simple_translators[i]->engraver_l ();
+    Engraver * eng = simple_translators[i]->access_Engraver  ();
     if (eng)
       eng->fill_staff_info (inf);
     }
index 696bedcf2e26b2a2cf039a9975ef8f9b7ca7f3d7..ecad05587023cc8ee2a188e9357a5bb31168b3d7 100644 (file)
@@ -57,6 +57,6 @@ Engraver_group_engraver*
 Engraver::daddy_grav_l () const
 {
   return (daddy_trans_l_ )
-       ? (Engraver_group_engraver*) daddy_trans_l_->engraver_l ()
+       ? (Engraver_group_engraver*) daddy_trans_l_->access_Engraver  ()
        : 0;
 }
index e6e5b7fe7665e4ece53207c6f559320c6421d17d..a8086af1f556cc3d09b79d9b6bff25830c0e4dd4 100644 (file)
@@ -70,7 +70,7 @@ public:
   Engraver () {}
 
   DECLARE_MY_RUNTIME_TYPEINFO;
-  virtual Engraver * engraver_l () { return this; }
+  virtual Engraver * access_Engraver () { return this; }
 };
 
 
index 29f4c11aaeaa225d7a1af7adb9bd3ff7ed342c64..5940cc417738e83fe285cbec42671c9f636991bb 100644 (file)
  */
 class Music_output_def  
 {
+  Scope *translator_p_dict_p_;
 public:
-  Dictionary<Translator*> translator_p_dict_;
+  Scope *scope_p_;
+  
   Array<String> filename_str_arr_;
 
 
+
   
   Music_output_def (Music_output_def const&);
   Music_output_def ();
@@ -37,8 +40,8 @@ public:
 
   Global_translator *get_global_translator_p ();
   Translator_group *get_group_translator_p (String type) const;
-  void assign_translator (String, Translator*);
-  String outfile_str_;
+    String get_default_output () const;
+  void assign_translator (Translator*);
   Translator * find_translator_l (String) const;
   virtual int get_next_default_count () const;
 };
index aa8973d8a8b7042a46763f260274b93716ef5b00..9c4a6b58fce69f2e52666a31c4a26f2b37ac0389 100644 (file)
@@ -37,7 +37,6 @@
 class Paper_def : public Music_output_def 
 {
   Assoc<int, Lookup *> *lookup_p_assoc_p_;
-  Scope* scope_p_;
   static int default_count_i_;
 
 protected:
index 11fbdbb397ca986781351ab51a41633ee2765397..61fd1d2aba40890deeb0d39bad10ceb590534192 100644 (file)
@@ -27,7 +27,7 @@ public:
 protected:
   virtual int get_tempo_i() const;
   virtual void play (Audio_element * elem_p );
-  Performer * performer_l () { return this; }
+  Performer * access_Performer () { return this; }
 };
 
 
index 9e0012a8e99fe46b4eabd6fa34565f8c19fa2321..18aa404ab57e5e9b2a7e26663a3a13f075c5008b 100644 (file)
@@ -19,7 +19,7 @@ class Timing_engraver : public Timing_translator, public Engraver
 {   
 protected:
   virtual void fill_staff_info (Staff_info&);
-  virtual Engraver * engraver_l () { return Engraver::engraver_l (); }
+  virtual Engraver * access_Engraver () { return Engraver::access_Engraver (); }
 public:
   TRANSLATOR_CLONE(Timing_engraver);
   DECLARE_MY_RUNTIME_TYPEINFO;
index a1613cba607e62247c3a189fae474d265718c0b8..1b1f05f004c695b3906a96332cc63ef39ef90439 100644 (file)
@@ -25,20 +25,29 @@ typedef void (Translator::*Const_method_pointer)(void) const;
   hierarchically grouped #Translator#s
   */
 class Translator_group : public virtual Translator {
+  Array<String> consists_str_arr_;
+  Array<String> accepts_str_arr_;
+
 public:
   Pointer_list<Translator *> trans_p_list_;
   String id_str_;
-  Array<String> consists_str_arr_;
-  Array<String> accepts_str_arr_;
+
+
+  
+  
   int iterator_count_;
 
   TRANSLATOR_CLONE(Translator_group);
   DECLARE_MY_RUNTIME_TYPEINFO;
 
+  void set_acceptor (String accepts, bool add);
+  void set_element (String accepts, bool add);  
+  
+  
   Translator_group(Translator_group const &);
   Translator_group();
-  void add (Translator *);
-
+  void add_translator (Translator *trans_p);
+  
   Link_array<Translator> nongroup_l_arr () const;
   Link_array<Translator_group> group_l_arr () const;
   
@@ -53,6 +62,8 @@ public:
   Translator *remove_translator_p (Translator*trans_l);
   void check_removal ();
 
+
+  
   Translator *get_simple_translator (char const *type) const;
   Translator_group *find_existing_translator_l (String n, String id);
   Translator_group *find_create_translator_l (String n, String id);
@@ -61,7 +72,7 @@ public:
   Translator_group*get_default_interpreter();
 protected:
   virtual ~Translator_group ();
-  virtual Translator_group * group_l () { return this; }
+  virtual Translator_group * access_Translator_group () { return this; }
   virtual void do_print () const;
   virtual void do_process_requests ();
   virtual void do_add_processing ();
index b96d6807216de8e92d4519bde8c74be92cfa4b3b..57d45e4d982a5f1d5b933aeb8c5c6399dcbe8759 100644 (file)
@@ -66,9 +66,9 @@ public:
   Music_output_def *output_def_l () const;
   
   virtual Moment now_moment () const;  
-  virtual Engraver *engraver_l () { return 0; }
-  virtual Performer *performer_l() { return 0; }
-  virtual Translator_group * group_l () { return 0; }
+  virtual Engraver *access_Engraver () { return 0; }
+  virtual Performer *access_Performer() { return 0; }
+  virtual Translator_group * access_Translator_group () { return 0; }
 
 protected:
    enum { 
index 222d25beb8f5181091446200ada836c3f654ce86..c6a3a0718946faf0113bf6daa1869bd7fa7f19ee 100644 (file)
@@ -40,7 +40,7 @@ Local_key_engraver::do_creation_processing ()
     }
   else
     {
-      key_C_ = &((Key_engraver*)result->engraver_l ())->key_;
+      key_C_ = &((Key_engraver*)result->access_Engraver  ())->key_;
       local_key_ = *key_C_;
     }
 }
index bcda3dbc42c642ad49a3011b6b17d2d0da33296c..8a3928c4be09e766245df934f96b64cc278db727 100644 (file)
@@ -6,11 +6,12 @@
   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-
+#include "scope.hh"
 #include "debug.hh"
 #include "music-output-def.hh"
 #include "global-translator.hh"
 #include "dictionary-iter.hh"
+#include "identifier.hh"
 
 int
 Music_output_def::get_next_default_count () const
@@ -22,28 +23,46 @@ IMPLEMENT_IS_TYPE_B(Music_output_def);
 
 Music_output_def::Music_output_def ()
 {
+  scope_p_ = new Scope;
+  translator_p_dict_p_ = new Scope;
 }
 
 Music_output_def::~Music_output_def ()
 {
-  for (Dictionary_iter<Translator*> i (translator_p_dict_); i.ok (); i++)
-    delete i.val ();
+  delete scope_p_;
+  delete translator_p_dict_p_;
 }
 
 Music_output_def::Music_output_def (Music_output_def const &s)
 {
-  outfile_str_ = s.outfile_str_;
-  for (Dictionary_iter<Translator*> i (s.translator_p_dict_); i.ok (); i++)
-    assign_translator (i.key (), i.val ()->clone ());
+  scope_p_ = new Scope (*s.scope_p_);
+  translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_);
+  
+  for (Dictionary_iter<Identifier*> i (*translator_p_dict_p_);  i.ok (); i++)
+    {
+      Translator * t = i.val ()->access_Translator ();
+      t-> output_def_l_ = this;
+    }
+}
+
+void
+Music_output_def::assign_translator (Translator*tp)
+{
+  String s =tp->type_str_;
+  if (translator_p_dict_p_->elem_b (s))
+    delete translator_p_dict_p_->elem (s);
+  
+  (*translator_p_dict_p_)[s] = new Translator_identifier (tp, 0);
+  tp ->output_def_l_ = this;
 }
 
 Translator*
 Music_output_def::find_translator_l (String name) const
 {
-  if (translator_p_dict_.elt_b (name))
-    return translator_p_dict_[name];
+  if (translator_p_dict_p_->elem_b (name))
+    return (*translator_p_dict_p_)[name]->access_Translator ();
 
-  if (global_translator_dict_p->elt_b (name))
+  if (global_translator_dict_p->elem_b (name))
     return (*global_translator_dict_p)[name];
 
   return 0;
@@ -57,33 +76,28 @@ Music_output_def::get_global_translator_p ()
   if (!t)
     error (_("Can't find Score context"));
   t = t->clone ();
-  Global_translator *g = t->group_l ()->global_l ();
+  Global_translator *g = t->access_Translator_group ()->global_l ();
   t->add_processing ();
   
   return g;
 }
 
-
-void
-Music_output_def::assign_translator (String s, Translator*t)
-{
-  t->type_str_ = s;
-  t->output_def_l_ = this;
-  
-  if (translator_p_dict_.elt_b (s))
-    delete translator_p_dict_[s];
-  translator_p_dict_[s] = t;
-}
-
 void
 Music_output_def::print () const
 {
 #ifndef NPRINT
-  for (Dictionary_iter<Translator*> i (translator_p_dict_); i.ok (); i++)
-    {
-      DOUT << i.key () << " = ";
-      i.val ()->print ();
-    }
-  DOUT << "output: " << outfile_str_;
+  translator_p_dict_p_->print ();
+  scope_p_->print( );
 #endif
 }
+
+String
+Music_output_def::get_default_output () const
+{
+  if (!scope_p_->elem_b ("output"))
+    return "";  
+  Identifier * id = (*scope_p_) ["output"];
+
+  String *p = id->access_String ();
+  return p ? *p : String ("");
+}
index 4c60dc23320694a95a555dc7f045ade1b7c9d473..c37ec26b09bace28f0921e693eb9f7699b81643b 100644 (file)
@@ -52,6 +52,7 @@ static Keyword_ent the_key_tab[]={
   {"property", PROPERTY},
   {"pt", PT_T},
   {"relative", RELATIVE},
+  {"remove", REMOVE},
   {"score", SCORE},
   {"script", SCRIPT},
   {"shape", SHAPE},
@@ -86,7 +87,7 @@ Identifier*
 My_lily_lexer::lookup_identifier (String s)
 {
   for (int i = scope_l_arr_.size (); i--; )
-    if (scope_l_arr_[i]->elt_b (s))
+    if (scope_l_arr_[i]->elem_b (s))
       return (*scope_l_arr_[i])[s];
   return 0;
 }
@@ -165,7 +166,7 @@ My_lily_lexer::lookup_pitch (String s)
 bool
 My_lily_lexer::notename_b (String s) const
 {
-  return note_tab_p_->elt_b (s);
+  return note_tab_p_->elem_b (s);
 }
 
 void
index 48f2e400acef5f5ddbb89a9df9ef54e5ad50517b..df037f7a7d2a4267f10c6673e982a736076e2282 100644 (file)
@@ -271,7 +271,8 @@ Tex_stream *
 Paper_score::open_output_stream ()
 {
   // output
-  String base_outname = paper_l_->outfile_str_ ;
+  String base_outname=paper_l_->get_default_output ();
+
   if (base_outname.empty_b ())
     {
       base_outname = default_outname_base_global;
index 3216e0cd1cccc3742ef3a4fefc20352ac4b586ba..e6294c37406b608a7766ea6249504db07cdb42e1 100644 (file)
@@ -26,9 +26,9 @@
 Paper_def::Paper_def ()
 {
   lookup_p_assoc_p_ = new Assoc<int, Lookup*>;
-  scope_p_ = new Scope;
 }
 
+
 Paper_def::~Paper_def ()
 {
   for (Assoc_iter<int, Lookup*> ai(*lookup_p_assoc_p_); ai.ok (); ai++)
@@ -36,7 +36,6 @@ Paper_def::~Paper_def ()
       delete ai.val ();
     }
   
-  delete scope_p_;
   delete lookup_p_assoc_p_;
 }
 
@@ -51,13 +50,13 @@ Paper_def::Paper_def (Paper_def const&s)
       set_lookup (ai.key(), l);
     }
   
-  scope_p_ = new Scope (*s.scope_p_);
+
 }
 
 Real
 Paper_def::get_var (String s) const
 {
-  if (!scope_p_->elt_b (s))
+  if (!scope_p_->elem_b (s))
     error (_f ("unknown paper variable: `%s\'", s));
   Real * p = scope_p_->elem (s)->access_Real (false);
   if (!p)
@@ -134,7 +133,7 @@ Paper_def::geometric_spacing (Moment d) const
 void
 Paper_def::set_lookup (int i, Lookup*l)
 {
-  if (lookup_p_assoc_p_->elt_b (i))
+  if (lookup_p_assoc_p_->elem_b (i))
     {
       delete lookup_p_assoc_p_->elem (i);
     }
@@ -200,11 +199,6 @@ Paper_def::print () const
       ai.val ()->print ();
     }
 
-  for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
-    {
-      DOUT << i.key () << "= ";
-      DOUT << i.val ()->str () << '\n';
-    }
   DOUT << "}\n";
 #endif
 }
@@ -236,3 +230,5 @@ Paper_def::get_next_default_count () const
   return default_count_i_ ++;
 }
 
+
+
index af2252a226a3f7902a496bc7d98fd5bdcdd47396..10e1b8df1a817e513033edea21cd0d230985f041 100644 (file)
@@ -44,8 +44,8 @@
 #include "transposed-music.hh"
 
 // mmm
-Mudela_version oldest_version ("1.0.3");
-Mudela_version version ("1.0.4");
+Mudela_version oldest_version ("1.0.6");
+Mudela_version version ("1.0.6");
 
 
 // needed for bison.simple's malloc() and free()
@@ -175,6 +175,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token PROPERTY
 %token PT_T
 %token RELATIVE
+%token REMOVE
 %token SCORE
 %token SCRIPT
 %token SHAPE
@@ -245,7 +246,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <music>  Music  relative_music Sequential_music Simultaneous_music
 %type <music>  property_def translator_change
 %type <music_list> Music_list
-%type <paper>  paper_block paper_body
+%type <paper>  paper_block paper_def_body
 %type <real>   dim real
 %type <real>   real_mult_expression real_primary
 %type <real>   unit
@@ -368,7 +369,8 @@ add_declaration:
            $4->set_spot (THIS->pop_spot ());
        }
        ;
-
+simple_identifier_init: identifier_init
+       ;
 identifier_init:
        score_block {
                $$ = new Score_identifier ($1, SCORE_IDENTIFIER);
@@ -402,11 +404,7 @@ identifier_init:
        | explicit_duration {
                $$ = new Duration_identifier ($1, DURATION_IDENTIFIER);
        }
-       | simple_identifier_init
-       ;
-
-simple_identifier_init:
-       real {
+       | real {
                $$ = new Real_identifier (new Real ($1), REAL_IDENTIFIER);
        }
        | string {
@@ -432,6 +430,11 @@ translator_spec_body:
        }
        | TYPE STRING ';'       {
                Translator* t = get_translator_l (*$2);
+               Translator_group * tg = t->access_Translator_group ();
+
+               if (!tg)
+                       THIS->parser_error (_("Need a translator group for a context"));
+               
                t = t->clone ();
                t->set_spot (THIS->here_input ());
                $$ = t;
@@ -453,12 +456,20 @@ translator_spec_body:
                delete $4;
                $$->set_property (*$2, str);
        }
+       | translator_spec_body STRING ';' {
+               $$->type_str_ = *$2;
+               delete $2;
+       }
        | translator_spec_body CONSISTS STRING ';' {
-               $$->group_l ()->consists_str_arr_.push (*$3);
+               $$->access_Translator_group ()-> set_element (*$3, true);
                delete $3;
        }
        | translator_spec_body ACCEPTS STRING ';' {
-               $$->group_l ()->accepts_str_arr_.push (*$3);
+               $$->access_Translator_group ()-> set_acceptor (*$3, true);
+               delete $3;
+       }
+       | translator_spec_body REMOVE STRING ';' {
+               $$->access_Translator_group ()-> set_element (*$3, false);
                delete $3;
        }
        ;
@@ -528,7 +539,7 @@ intastint_list:
        PAPER
 */
 paper_block:
-       PAPER '{' paper_body '}'        { 
+       PAPER '{' paper_def_body '}'    { 
                $$ = $3;
                THIS-> lexer_p_->scope_l_arr_.pop ();
        }
@@ -539,7 +550,7 @@ optional_semicolon:
        | ';'
        ;
 
-paper_body:
+paper_def_body:
        /* empty */                     {
                Paper_def *p = THIS->default_paper_p ();
                THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_);
@@ -550,30 +561,21 @@ paper_body:
                THIS->lexer_p_->scope_l_arr_.push (p->scope_p_);
                $$ = p;
        }
-       | paper_body OUTPUT STRING ';'  { 
-               $$->outfile_str_ = *$3;
-               delete $3;
-       }
-       | paper_body int '=' symtables          { // ugh, what a syntax
+       | paper_def_body int '=' symtables              { // ugh, what a syntax
                $$->set_lookup ($2, $4);
        }
-       | paper_body STRING '=' simple_identifier_init optional_semicolon {
-           Identifier* id = $4;
-           id->init_b_ = THIS->init_parse_b_;
-           if (id->is_type_b (Translator_identifier::static_name ()))
-             {
-               $$->assign_translator (*$2, id->access_Translator ());
-               delete id;
-             }
-           else
-             THIS->lexer_p_->set_identifier (*$2, id);
+       | paper_def_body STRING '=' simple_identifier_init ';' {
+             THIS->lexer_p_->set_identifier (*$2, $4);
              delete $2;
        }
-       | paper_body SHAPE '=' shape_array ';' {
+       | paper_def_body translator_spec {
+               $$-> assign_translator ($2);
+       }
+       | paper_def_body SHAPE '=' shape_array ';' {
                $$->shape_int_a_ = *$4;
                delete $4;
        }
-       | paper_body error {
+       | paper_def_body error {
 
        }
        ;
@@ -637,13 +639,8 @@ midi_body: /* empty */             {
        | MIDI_IDENTIFIER       {
                $$ = $1-> access_Midi_def ();           
        }
-       | midi_body STRING '=' translator_spec  {
-               $$-> assign_translator (*$2, $4);
-               delete $2;
-       }
-       | midi_body OUTPUT STRING ';'   {
-               $$->outfile_str_ = *$3;
-               delete $3;
+       | midi_body translator_spec     {
+               $$-> assign_translator ($2);
        }
        | midi_body tempo_request ';' {
                $$->set_tempo ($2->dur_.length (), $2->metronome_i_);
index 4332a23486bdf68f746fcd53b9c7d0cadd18194a..7ae2ea35bebd2862fdeba7a570924eb24b86596b 100644 (file)
@@ -121,7 +121,7 @@ Performance::process()
 {
   print ();
 
-  String out=midi_l_->outfile_str_;
+  String out = midi_l_->get_default_output ();
   if (out.empty_b ())
     {
       
index aa24f97bd1a1f2088b7c09727ccc4d2666394d58..7fdbdc001aced144dbe1fcd1b81b0ddad213875a 100644 (file)
@@ -30,6 +30,6 @@ Performer_group_performer*
 Performer::daddy_perf_l () const
 {
   return (daddy_trans_l_) 
-    ?(Performer_group_performer*) daddy_trans_l_->performer_l ()
+    ?(Performer_group_performer*) daddy_trans_l_->access_Performer ()
     : 0;
 }
index 2e20a1b38d3530f401974f38392354da5d3e91e5..5918dc92fd08f8313e42d4746114d91b3147eb88 100644 (file)
@@ -46,3 +46,5 @@ Scope::Scope (Scope const&s)
 
 Scope::Scope ()
 {}
+
+
index ea9ae79737bae3d0eaf54702a34211f9716da244..310e44e101e9cde3959fd2aa35692d2473b089c4 100644 (file)
@@ -48,7 +48,7 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
       
       int priority =item_l->break_priority_i_;
       Horizontal_group_item * hg =0;
-      if (!align_p_assoc_.elt_b(priority))
+      if (!align_p_assoc_.elem_b(priority))
        {
          hg = new Horizontal_group_item;
          announce_element (Score_element_info (hg,0));
index 7f257671acc1abca6d551dccb548e369214f92d6..257ead14c11e30f20e44e4fabec7b3d6a55b1996 100644 (file)
@@ -80,6 +80,8 @@ do_scores()
        }
       else
        {
+         if (!monitor->silent_b ("do_scores"))
+             is_p->print ();
          is_p->process();
        }
     }
index e2786de70df6ef8888957e5f3715e669952bf27b..ac2cfa3aab92b99bd22df23683d1974a8b87afa6 100644 (file)
@@ -88,7 +88,7 @@ Staff_performer::new_instrument_str ()
   return instrument_str_;
 
 /* ugh, but can 't
-  if (properties_dict_.elt_b ("instrument"))
+  if (properties_dict_.elem_b ("instrument"))
     return properties_dict_["instrument"];
   return "";
 */
index 5814d5294aa241920c14f5fae5aaf38767c2d5ca..a31477b5518f24f310e071c0362e25ade59d11f8 100644 (file)
@@ -40,7 +40,7 @@ Symtables::~Symtables()
 Atom
 Symtable::lookup (String s) const
 {
-  if (elt_b (s))
+  if (elem_b (s))
     {
       Atom a (elem(s));
       return a;
@@ -56,7 +56,7 @@ Symtable::lookup (String s) const
 Symtable*
 Symtables::operator()(String s)
 {
-  if (!elt_b (s))
+  if (!elem_b (s))
     {
       error (_f ("Symtable `%s\' unknown", s));
       /* 
index b72d78460853e73712695352555af1c5a69c9ee2..1e52ea151e3450a509eefd90fbfcc2ef28e9a6e1 100644 (file)
@@ -30,7 +30,7 @@ Time_signature_engraver::do_process_requests()
       return ;
     }
   
-  Timing_engraver * timing_grav_l= (Timing_engraver*) result->engraver_l ();
+  Timing_engraver * timing_grav_l= (Timing_engraver*) result->access_Engraver  ();
   
   Time_signature_change_req *req = timing_grav_l->time_signature_req_l();
   if (req)
index 1541b32722e9adc12e73c0bd151e61c5b06dcdf4..86de42722413b928fca1e455e66d265484b3226c 100644 (file)
@@ -30,7 +30,7 @@ add_translator (Translator *t)
 Translator*
 get_translator_l (String s)
 {
-  if (global_translator_dict_p->elt_b (s))
+  if (global_translator_dict_p->elem_b (s))
     {
 //      return (*global_translator_dict_p)[s];
        Translator* t = (*global_translator_dict_p)[s];
index f1da4dbdf9abbb7559687e3af276a852e07319ad..3d5a6ff2d0a4cd5dfcf0d895c2a27fe64cec5ab2 100644 (file)
@@ -50,7 +50,7 @@ Translator_group::check_removal()
 IMPLEMENT_IS_TYPE_B1(Translator_group, Translator);
 
 void
-Translator_group::add (Translator *trans_p)
+Translator_group::add_translator (Translator *trans_p)
 {
   trans_p_list_.bottom().add (trans_p);
   trans_p->daddy_trans_l_ = this;
@@ -58,6 +58,31 @@ Translator_group::add (Translator *trans_p)
   trans_p->add_processing ();
 }
 
+void
+Translator_group::set_acceptor (String accepts, bool add)
+{
+  if (add)
+    accepts_str_arr_.push (accepts);
+  else
+    for (int i=accepts_str_arr_.size (); i--; )
+      if (accepts_str_arr_[i] == accepts)
+       accepts_str_arr_.del (i);
+}
+
+void
+Translator_group::set_element (String s, bool add)
+{
+  if (!get_translator_l (s))
+    error ("Program has no such type");
+
+  if (add)
+    consists_str_arr_.push (s);
+  else
+    for (int i=consists_str_arr_.size (); i--; )
+      if (consists_str_arr_[i] == s)
+       consists_str_arr_.del (i);
+}
+
 bool
 Translator_group::removable_b() const
 {
@@ -85,9 +110,9 @@ Translator_group::path_to_acceptable_translator (String type) const
   for (int i=0; i < accepts_str_arr_.size (); i++)
     {
       Translator *t = output_def_l ()->find_translator_l (accepts_str_arr_[i]);
-      if (!t || !t->group_l ())
+      if (!t || !t->access_Translator_group ())
        continue;
-      accepted_arr.push (t->group_l());
+      accepted_arr.push (t->access_Translator_group ());
     }
 
 
@@ -133,8 +158,8 @@ Translator_group::find_create_translator_l (String n, String id)
       // start at 1.  The first one (index 0) will be us.
       for (int i=0; i < path.size (); i++)
        {
-         Translator_group * new_group = path[i]->clone ()->group_l ();
-         current->add (new_group);
+         Translator_group * new_group = path[i]->clone ()->access_Translator_group ();
+         current->add_translator (new_group);
          current = new_group;
        }
       current->id_str_ = id;
@@ -185,8 +210,8 @@ Translator_group::group_l_arr () const
   Link_array<Translator_group> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->group_l ())
-       groups.push (i->group_l ());
+      if (i->access_Translator_group ())
+       groups.push (i->access_Translator_group ());
     }
   return groups;
 }
@@ -197,7 +222,7 @@ Translator_group::nongroup_l_arr () const
   Link_array<Translator> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (!i->group_l ())
+      if (!i->access_Translator_group ())
        groups.push (i.ptr ());
     }
   return groups;
@@ -263,8 +288,8 @@ Translator_group::get_default_interpreter()
          warning (_f ("can't find or create `%s\'", accepts_str_arr_[0]));
          t = this;
        }
-      Translator_group * g= t->clone ()->group_l ();
-      add (g);
+      Translator_group * g= t->clone ()->access_Translator_group ();
+      add_translator (g);
 
       if (!g->is_bottom_translator_b ())
        return g->get_default_interpreter ();
@@ -352,6 +377,6 @@ Translator_group::do_add_processing ()
       if (!t)
        warning (_f ("can't find `%s\'", consists_str_arr_[i]));
       else
-       add (t->clone ());
+       add_translator (t->clone ());
     }
 }
index 3f00ff928f1b318d396269b73537e921417024ed..e8223784eaf4c81d8a3833f6965dc1522c969fc3 100644 (file)
@@ -157,7 +157,7 @@ Translator::pre_move_processing ()
 Scalar
 Translator::get_property (String id)
 {
-  if (properties_dict_.elt_b (id))
+  if (properties_dict_.elem_b (id))
     {
       return properties_dict_[id];
     }
index 459dacb43ac50dcedfcbead0e4e38bc2a18b771c..77fa91d8ebd1df6175a1fa0356134811a1d3be07 100644 (file)
@@ -90,3 +90,5 @@
 1.0.11.mb1
 1.0.11.uu1
 1.0.12
+1.0.12.am1
+1.0.12.hwn1
index f3e31235d1f6f5ff87cc4de41830b6e091373162..43bf8760e8bdd4960a46e411d638c7deab9080fc 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violoncello.ly"
index 0f3c74edf5781e272324a1c765d99cebdc41c64a..363c427b71dcc6cbfc186711a5797bf3b813deaf 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "clarinetti.ly"
index 7156bbdcb22d95136304b0af860f2d51aba31ed8..0ae6fe14989577d9281a2426dcd5fa8aa41db3a1 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "clarinetto-1.ly"
 \include "clarinetto-2.ly"
index f7d4d6c0b6ddd45bca014626d3587e8ab7ec4d79..41185ad508b65d0bdfb4f12aa7f0b6c967f8fe45 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 clarinetto1 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
index 87ae15613c993db9996148056e6332d5223f8f35..f20ffa83578124c5820a75630cad9c79f3bbf4f4 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 clarinetto2 = \notes \relative c { 
        R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 | 
index 30697b2c73b48926984d220cc4bd39d395f8ec6e..722dca50832481868cfbea2908ffbdb60f66ba09 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "contrabasso.ly"
index d022c82b5d45f360fecdf63ed259d84053dd9418..3ddaa8d3d890fc1c8c05afd4f0c674ddf0053bda 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 contrabasso = \notes \relative c {
 %      \translator Staff=violoncello
index ac6f000eb41d7926f5776f34a084a3915d768d58..33d155f495a3cea81d09125bc427cebfbd4f0b49 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 
index e914ce3c8d4a09d7be77ecf888330158c33a3ac0..0486c83125cffb768dcdd8783b0b36b858c4d27e 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "corni.ly"
index 09293eb75d81ac4f8b7a7fc42ff00c942a69e5c0..4f3e219ee1e7bbea9168092e66d3ee2a39aad508 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "corno-1.ly"
 \include "corno-2.ly"
index 8b7232ed2162c2f45401d1a1872803593f95b17b..ea05e79c15b562f5875b6d546c5d3adba6131b19 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 corno1 = \notes \relative c {
        R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 80746b3df6c2783a1bbd72ab7e143b401b531b6b..d36a5c53fdd9a80a8f5cebf313b3b0bdaa3423bf 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 corno2 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index f485eb00e26b8cdd88b12084085fb87c197953a3..59ca4c916e184fac3a4d73865b0709ea4b442b1b 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "fagotti.ly"
index b0cf8a0bb7921b41081e5b9ec7adee50f94d6970..4b6192f1660d454ba2816ecd6e9d9dc4ecbabad0 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "fagotto-1.ly"
 \include "fagotto-2.ly"
index f9cdfb573e0c324b4fd6f619aef615b3e3e4a370..ed3b836ac99080a18de18963829369d5818457fd 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 fagotto1 = \notes \relative c {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index ed15d8b76c25f538bc9daeb98da82a16859fc16b..d5cd40569c415ceb0d1f5a922d6bb530af319ccb 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 fagotto2 = \notes \relative c {
        R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 9afed158c9cc015ca6990bbe0a1fc98a048b9d90..7c497e009e057843239a31029f2ef257dbe9cc49 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "flauti.ly"
index 7217b6f8313871e60098480c18cc5277c7066cf5..5fcc5d2003a8001352561e0b38dfe195d36a98b1 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "flauto-1.ly"
 \include "flauto-2.ly"
index 8841c9ca9569f7d57b7cf5d99d865dd08e9e13da..d4c80946189e1e8877ef52dbc10f43a0f40964c6 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 flauto1 = \notes \relative c {
        R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index 724e9e41746a4b9aa6e9063897d9395c0fdea0ac..677e10111b5d9b3a5e9abf7a1c095cafa2cdc4ea 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 flauto2 = \notes \relative c {
        R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 | 
index 50fa87f4c84b488bb996620d987fa203bf362713..c7006517e275430298a70b4099a32eb252a55ae3 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
        \time 4/4;
index 670f10fc2b2881bc70545b1710f98fe3669eb27f..fadc4eb74e29b17203942db52c2a72f6ab4630ff 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 oboe1 = \notes \relative c'' {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index afcf54261005b09f3b93e70e43081c6dacf54b93..96d36c05ac0a381fd0b760cc60491f28bbb81c74 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 oboe2 = \notes \relative c{
        R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 0209b433cb03fc5e2fdf0f736bb7c7e9796ca918..6869ab8e73fcd6974c8c8ed500aeffb7d710cb58 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "oboi.ly"
index 543805266bcdb2406636e7a368782a45741d231f..2f16346d2c58e2f7d0493f7650612b7481d899bb 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "oboe-1.ly"
 \include "oboe-2.ly"
index 5447bd60a6c2f3df7f3df8c774a4e4553c693978..bb83ba75f59f411d16924f47f33b31a140776196 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 timpani = \notes \relative c {
        R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 1e69e439c47ca1c8254850267290b84c71fee040..0452afad65fff794626adf563c9845bdd8fb59dd 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "trombe.ly"
index 593801191c80d2d8646f8565b8b8b7d05291c4c6..e7c58a633420735b4f20fa9e1cb4da3c03ce0469 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "trombo-1.ly"
 \include "trombo-2.ly"
index 65b362e2c54445ba0bd12913b898c89d3134c904..2b2314cf58ad02ebf7d12e0923ecb5b07d948d6f 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 trombo1 = \notes \relative c {
        R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index cf1e6549339937e38093c73886684b6be9ee4d91..41b15f1b4515055ab87deb256469d11677592576 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 trombo2 = \notes \relative c {
        R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 3d69be4a38a4d3a01d95a1104ee5cdb21f5b3414..155c40b1f60f51b08f064f308d9863a721f4eda3 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 viola1 = \notes \relative c {
        \type Voice=one
index d309d0d766c9ecd049abc6d7e7e0c9e1bb456ef7..5623a5459e9ef3f9a722794dbf093d02cb04ce05 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 viola2 = \notes \relative c {
        % starts on (actualy, most part is on) same staff as viola1
index f6ff5bf220b6677bcb0503d14be6bbdb538c09a9..37de6ee6d3ad9f4795af92165bc2066e93fe7aed 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "viola-1.ly"
index af23c50350279bf40cf50c3eec8373bb6b9a0a81..a367ac3173908dc021493062722d0859f28dd4b1 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violino-1.ly"
index 0b32f8cedc921f57e790b1290047e62ce55eea40..2ce139fdd6925760a32e32b364a884df83382e7d 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violino1 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index 6fe721a4a751c5961500b2935faeb3b9a92b12c0..0e7231b183e8357ce5506ab3e753a438549fb967 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violino-2.ly"
index 4a4b04496d44308c9f34148d9674df7a7352713c..50c2a19b20e4b2a4e16ef8065dcb21333f8218a5 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violino2 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index 30720db5bab5e91ab575a3fd953f70edf249ecea..6c0dffe1022a232e1ee0485fd5096a0e1f002203 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "global.ly"
 \include "violoncello.ly"
index e8d117e4fa1ae0d316df74d2e5776986587d17dd..849f2731abcbda817a3f42389637f1fa407d1274 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 violoncello = \notes \relative c {
        c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
index d55183d9a2725a8dae4455303df7d195af665409..53347bab50e225d00410125ec3e2c2a722df6c23 100644 (file)
@@ -4,7 +4,7 @@
        piece = "Allemande";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes{
        \time 4/4;
index c6527f5447c062557b1ef51f73d9b239aa3ac03e..5a8991e351eb79fce7e2f517e6ad23f8017e1f8f 100644 (file)
@@ -10,7 +10,7 @@
   copyright =   "Public Domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = \notes {
        \time 4/4;
index 2897e9c0dcc76b6dfd21d98632339122f9e6dbd5..02851b99483d84f11558c6d72a84404bc449447e 100644 (file)
@@ -14,7 +14,7 @@ enteredby =    "jcn";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c {
        \property Voice . textstyle =  "italic"
index 17a74c61dafe1bec9d8407c21f99b221ac20dd1f..46d3d1379429223a19f17a6e4d21bc9424f282ca 100644 (file)
@@ -14,7 +14,7 @@ enteredby =    "jcn";
 copyright =     "public domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 one = \notes\relative c{
        \property Voice . textstyle =  "italic"
        r8\mf [c'-1( e-2 g-4] [e-2 c-1 bes'-5 g-3] |
index 8fc766402b04b7e365c0e2981d06909fa4436f62..2373753f99e9292bf49b3d97e7eeb2856b9fb836 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 one = \notes\relative c{
        \property Voice . textstyle =  "italic"
index 142f047f458d6e3477fa2d86a526480bf5a9d6fb..6148cc1ef1d0d1d051a35488127247d251456d2a 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 one = \notes\relative c{
index 4455273075ec427fc8691304f836d8371c499528..b67f8994156e64bd5b30364805e0d2ab36b1af5c 100644 (file)
@@ -12,7 +12,7 @@ composer =     "Johann Sebastian Bach (1685-1750)";
 enteredby =     "jcn";
 copyright =     "public domain";
 }
-\version "1.0.4";
+\version "1.0.6";
 
 
 one = \notes\relative c{
index 2a182ad2be562c5a1994994934b8bae5cb246767..9bc938b830335b25c16db005936d8a2f10ac448f 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "allemande-urtext.ly";
 
index a8536451d57806a2fd208dfdafefa2a0d7fc24d7..53fefe98c3fcae66f970a80ba3de4866d862731e 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "allemande-urtext.ly";
 
index 35c1cbdd51d9d2d80a3d83eb994473ac4c790fcb..bef3deb015a2f27fbf95fb9f3be7b7576fd0364b 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "courante-urtext.ly";
 
index e3b92a148d7730750951d3795fe4ccdfcf26b78c..6e8734fe3d1878baaf11ef45c37d22bd58945765 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "courante-urtext.ly";
 
index 1dadeae3b6707f7ad34530dc6577afdca1fd97c7..1281558bbfb4b7991fd797067804c130d3f00106 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "gigue-urtext.ly";
 
index cc075b3f729f5973c951deba30282f480a03045b..bbc8852eef1193aeacf6874211de76e873702885 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "gigue-urtext.ly";
 
index 33a843066caf5448935d18971fca70921df1aea3..cc9662b8a10e65dc19347beebc87130e6fe84d14 100644 (file)
@@ -16,7 +16,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "menuetto-urtext.ly";
 
index afc1078efb1b0f05341d7825d7ed0b857d7747f9..475d9a94dabebfded73d79f93a01570d3678afbf 100644 (file)
@@ -17,7 +17,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "menuetto-urtext.ly";
 
index 9043a9cace3b1280795b899dafe6f67a5ef0be0b..1905bfcea6c685c3e6a9435af9eaca2d62614a03 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "prelude-urtext.ly";
 
index 40f32886782e927b803ab5c0703c57df523d40cc..98442c31fd0ba794fc010f40033cd6a26c52f567 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "prelude-urtext.ly";
 
index 9e16f386d8437077115200dc1e34a997f86f3911..0900f4c6309c3c76247313529997a25bdba24640 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "sarabande-urtext.ly";
 
index 1c7bf7ccf78f890bee2cd1c12a0c7a8bb69576b7..24086de8d1687b58e87f02e440091b938213ef68 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "sarabande-urtext.ly";
 
index d9722237bc3de7ff544c9400416050b39f59e657..baa5c359e0e4ae24a40437eae78d723cfc2f1150 100644 (file)
@@ -2,6 +2,9 @@
        linewidth= 180.\mm;
        gourlay_maxmeasures = 10.0;
        % for simple testing only!
-%      castingalgorithm = \Wordwrap; % lots faster on my 486 -- jcn
-       \include "bar-numbering.ly";
+
+
+       \translator {
+               \BarNumberingStaffContext
+       }
 }
index e00ea800d39290637776b8bf8afbbaa38b458a93..ff2d679a61935f8010eda01892dcd104a514f40f 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "Public Domain";
 %{
        
 %}
-\version "1.0.4";
+\version "1.0.6";
 
 
 global = 
index 8c36ac007b848760000dbb519be98ee0ab72d5c0..867c968e5146df2bb181ce9750eadfff7d22ed38 100644 (file)
@@ -13,7 +13,7 @@
  Tested Features: stem direction, multivoice, forced accidentals.
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "nederlands.ly"                 % for correct parsing of note names
 
index 1ae74ec4aadfda5bfd0c482f748d33fedbc97238..aa78870d208700420f12f96f17ae24864b131f29 100644 (file)
@@ -8,7 +8,7 @@ enteredby =      "Shay Rojansky";
 copyright =     "Public Domain";
 }
 
-\version "1.0.4";
+\version "1.0.6";
 
 global = 
     \notes {
index a192b1afd9fe7d0fee738aeac2a24cfe88b18048..e79a373423125da0032047d89af7bd61fc616fdf 100644 (file)
@@ -13,7 +13,7 @@ Tested Features: cadenza mode
 Ugh.. Wish we had grace notes....  It adds another dimension to this
 piece of music.  %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 
 cad = \notes  \relative c' {
index 730f69b5aceae5ea6e40482c931eda3e6e29b651..fe70940406e2b3b158081b1188f5a48d57ebea3e 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 }
 
 
-\version "1.0.4";
+\version "1.0.6";
 
 allegro =
        \notes
index 978b8bcc899d6a8a2362013d1fb3aeb1a8a88f6d..a14be9e911f13fd18decfccb8be094dbb6338caf 100644 (file)
@@ -45,7 +45,7 @@ Voice engraver by uncommenting the lines in the paper
 definition below. --MB
 %} 
 
-\version "1.0.4";
+\version "1.0.6";
 
 vi1=\notes \relative c'' {
   \time 4/4;
@@ -234,24 +234,14 @@ bc=\notes\transpose c'{
   \paper{
     gourlay_maxmeasures=7.;
 
-%{
+    \translator { \VoiceContext
+
 %% Uncomment to get the original layout without beams.
 %%%% Compare to the definition in init/engraver.ly.
-    Voice = \translator {
-       \type "Engraver_group_engraver";
-       \consists "Dynamic_engraver";
-       \consists "Rest_engraver";
-       \consists "Stem_engraver";
-       \consists "Plet_engraver";
- %     \consists "Beam_engraver";
-       \consists "Beam_req_swallow_translator";
-       \consists "Abbreviation_beam_engraver";
-       \consists "Script_engraver";
-       \consists "Rhythmic_column_engraver";
-       \consists "Slur_engraver";
-       \accepts "Thread";
-    }
-%}
+
+%  \remove "Beam_engraver";
+ }
     
   }
   \midi{ 
index d3c21e22a9c0e7e0949f23530ec1d060c0050f8e..b8c08e12c15ee3f8f4bc3b015c5dfd87e68d4f97 100644 (file)
@@ -8,7 +8,7 @@ enteredby =      "jcn";
 copyright =     "public domain";
 latexheaders=    "headers";
 } 
-\version "1.0.4";
+\version "1.0.6";
 
 %{
 Silly latex file dropped; use ly2dvi
index 77b00acb9facd8c0709301fa762c00d209435d3f..495414b8030d5747530ff36bf281e4197c9a4333 100644 (file)
@@ -9,6 +9,6 @@ description = "A schubert song in 16 pt";
 copyright =     "public domain";
 } 
 
-\version "1.0.4";
+\version "1.0.6";
 
 \include "standchen.ly"
index 15d0d84dc72064ce67a920d454df42ff63103f75..3c41e60ddd915baa2c103aaf3f497cd5d53e8db6 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 description = "A schubert song in 20 pt";
 } 
 
-\version "1.0.4";
+\version "1.0.6";
 
 % fool make-website
 % \include "standchen.ly";
index 90997fbbe2af752d9fb00f6a2b1d38429fea5944..7c3589bcf27572e599521e6ff8be1b8e8bc818ab 100644 (file)
@@ -16,7 +16,7 @@ multiple \paper{}s in one \score
 Note: Original key F.
 %}
 
-\version "1.0.4";
+\version "1.0.6";
 
 $vocal_verse1 = \notes\relative c{
        % ugh: treble/bass
index 81cd1795d3a58843d2377df2c090b58d567c33f1..6481c5b77b5876abb058a40aec6e9f6a7b561403 100644 (file)
@@ -200,7 +200,31 @@ if 1:
        
        conversions.append ((1,0,4), conv, 'default_{paper,midi}\n')
 
+if 1:
+       def conv(lines):
+               newlines =[]
+               for x in lines:
+                       x =  regsub.gsub ('ChoireStaff', 'ChoirStaff',x)
+                       x =  regsub.gsub ('\\output', 'output = ',x)
+                       newlines.append (x)
+               return newlines
+       
+       conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff\n')
 
+if 1:
+       def conv(lines):
+               newlines =[]
+               found = 0
+               for x in lines:
+                       found = regex.search ('[a-zA-Z]+ = *\\translator',x) <> -1
+                       newlines.append (x)
+                       if found: break
+               if found:
+                       sys.stderr.write ('\nNot smart enough to \\translator syntax\n')
+                       raise FatalConversionError()
+               return newlines
+       
+       conversions.append ((1,0,6), conv, 'foo = \\translator {\type .. } ->\translator {\type ..; foo; }\n')
 ############################
 
 def get_conversions (from_version, to_version):
index 2dbb0532e274e855a87b2643fee672bcc6f7e219..fcf8a7380da3c45610c8cd61ed4ceb93b536f727 100644 (file)
@@ -1,3 +1,5 @@
+pl 54
+       - && for TeX
 pl 53
        - moved TeX stuff into tex template
 pl 52
index 58e4ed00c01e66a2d56c03fb50a12225b398b8bf..70ca4128d75a4062835a9460d84a7bda07b6c364 100644 (file)
@@ -1,7 +1,7 @@
 PACKAGE_NAME=StepMake
 MAJOR_VERSION=0
 MINOR_VERSION=1
-PATCH_LEVEL=53
+PATCH_LEVEL=54
 MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
index 96f2bd0ae864906181b14b93a46cc1019dff83ff..ccbb7c3ab1fe97adcd619dbcbdbb7fe924f9c7b0 100644 (file)
@@ -4,11 +4,11 @@ $(outdir)/%.dvi: $(outdir)/%.tex
        (cd $(outdir); tex \\nonstopmode \\input $(<F))
 
 $(outdir)/%.dvi: $(outdir)/%.latex
-       (cd $(outdir); \
-         latex \\nonstopmode \\input $(<F);\
-         bibtex $(basename $(<F));\
-         latex \\nonstopmode \\input $(<F);\
-         latex \\nonstopmode \\input $(<F);\
+       (cd $(outdir)&& \
+         latex \\nonstopmode \\input $(<F)&&\
+         bibtex $(basename $(<F))&&\
+         latex \\nonstopmode \\input $(<F)&&\
+         latex \\nonstopmode \\input $(<F)&&\
        )
 
 $(outdir)/%.ps: $(outdir)/%.dvi
index 22411bb56fe90e6e406b6f447dfdf1b5de215e72..833d0f2b0ef79818bfefb31f454c721907671dc6 100644 (file)
 %        to time.
 %
 \ifx\csname nolilyfooter\endcsname\relax
-        \message{footer defined}%
-        \csname lilyfooter\texsuffix\endcsname
-\else
-        \message{footer empty!}
+        \message{[footer empty]}
         \csname nolilyfooter\texsuffix\endcsname
+\else
+        \message{[footer defined]}%
+        \csname lilyfooter\texsuffix\endcsname%
 \fi