]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.1.42 release/1.1.42
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 10 May 1999 09:03:26 +0000 (11:03 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 10 May 1999 09:03:26 +0000 (11:03 +0200)
90 files changed:
Documentation/MANIFESTO.yo
Documentation/faq.yo
Documentation/tex/computer-notation.bib
Documentation/tex/engraving.bib
Documentation/tex/fonts.doc
Documentation/tex/lilypond-overview.doc
Documentation/tex/lilypond-regtest.doc
Documentation/tex/mudela-book-doc.doc
Documentation/tex/tutorial.yo
Documentation/topdocs/INSTALL.yo
Documentation/topdocs/README.yo
Documentation/topdocs/index.yo
INSTALL.txt
NEWS
README.txt
TODO
VERSION
buildscripts/mutopia-index.py
input/Musique-de-Table.ly [new file with mode: 0644]
input/bugs/sv.ly [new file with mode: 0644]
input/test/GNUmakefile
input/test/beam-interstaff.ly
input/test/clefs.ly
input/test/multi-measure-rest.ly [new file with mode: 0644]
input/test/orchestscore.ly
input/test/slur-interstaff.ly
input/test/staff-margin.ly
input/test/time.fly
lily/align-element.cc
lily/axis-group-element.cc
lily/bar-script-engraver.cc
lily/bar.cc
lily/base-span-bar-engraver.cc
lily/beam.cc
lily/clef-item.cc
lily/encompass-info.cc
lily/g-script-column-engraver.cc
lily/g-script-column.cc
lily/g-script-engraver.cc
lily/g-script.cc
lily/g-staff-side.cc
lily/graphical-axis-group.cc
lily/graphical-element.cc
lily/include/base-span-bar-engraver.hh
lily/include/graphical-element.hh
lily/include/music-list.hh
lily/include/new-repeated-music.hh [new file with mode: 0644]
lily/include/repeated-music-iterator.hh
lily/include/sequential-music-iterator.hh
lily/include/span-bar.hh
lily/ineq-constrained-qp.cc
lily/item.cc
lily/lookup.cc
lily/multi-measure-rest.cc
lily/music-list.cc
lily/music-sequence.cc
lily/my-lily-parser.cc
lily/new-repeated-music-iterator.cc [new file with mode: 0644]
lily/new-repeated-music.cc [new file with mode: 0644]
lily/parser.yy
lily/score-element.cc
lily/score-engraver.cc
lily/score-priority-engraver.cc
lily/sequential-music-iterator.cc
lily/simultaneous-music-iterator.cc
lily/single-malt-grouping-item.cc
lily/span-bar.cc
lily/span-score-bar-engraver.cc
lily/spanner.cc
lily/stem-info.cc
lily/text-engraver.cc
lily/vertical-align-engraver.cc
ly/engraver.ly
ly/init.fly
ly/init.sly
ly/params.ly
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
mf/feta-bolletjes.mf
mf/feta-generic.mf
mf/feta-test11.mf [new file with mode: 0644]
mf/feta-test26.mf [new file with mode: 0644]
mutopia/N.W.Gade/README
mutopia/N.W.Gade/brass.ly
mutopia/N.W.Gade/parts.ly
mutopia/N.W.Gade/score.ly
scripts/mudela-book.py
stepmake/bin/make-version.sh
stepmake/stepmake/tex-vars.make

index 0bb35337634846a218a3768e208064de6a2b52ba..e47053222bcd42b6f95f5ccbd5441e4ade230995 100644 (file)
@@ -37,8 +37,6 @@ it()GNU LilyPond uses TeX for its output. This is not a key issue: in a
 it()GNU LilyPond does not display notes directly, nor will it be rehacked
     to be used interactively. GNU LilyPond writes output to a file.  It
     will not be extended to play music, or to recognize music.
-    [As an aside, I am contemplating to create a library for rendering
-    music, which is "X-capable", so that others can create interactive tools]
 it()GNU LilyPond is intended to run on Unix platforms, but it should
     be portable to any platform which can run TeX and the GNU tools
 it()GNU LilyPond is free. Commercial windows packages for setting music are
index 1894b8500fff3375abd7a06ddee94ed8c3d7af1f..87d5e056e0f17bb75f830954b37b8bae99fda8c6 100644 (file)
@@ -545,6 +545,28 @@ lurl(http://www.wipo.int)
 information about international copyright)
 
 
+John Sankey:
+
+See lurl(http://www.geocities.com/Vienna/Studio/1714/harpsichord.html)
+for a summary of copyright relative to old music, also for the
+expert forum for such questions.
+
+Werner Lemberg <sx0005@sx2.HRZ.Uni-Dortmund.DE>:
+
+This is not correct.  Urtext editions per se are em(not) copyrighted
+-- if you print exactly what the composer has written, how can there
+some copyright be added?  Copyrighted are usually only the `Critical
+notes', the foreword, and the cadenzas some editors have added.
+
+This means that the `Photocopying forbidden' sign in many scores is
+not always correct for e.g. J.S. Bach -- you are allowed to copy the
+pages which don't contain editorial stuff which is probably
+copyrighted.
+
+A very unfortunate situation for the publishers.
+
+
+
 sect(Windows32)
 
 question(I downloaded the windows32 port, and it doesn't match the website!)
index 0f6e4defe6da7def599f84d3c46c359a6e11598f..301d3e1a52af69b5a028f3d11fd9e9668653845f 100644 (file)
@@ -222,7 +222,7 @@ note = {A no-science-here review of Encore. HWN}
 
 % LIME
 @Article {haken93,
-  note = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures somewhat) HWN},
+  note = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures) HWN},
   year =  {1993},
   title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
   author = {Lippold Haken and Dorothea Blostein},
index 066a7b7063abb3b6adbbd0337b78c070e426d323..7552b11c18de445e39f58655c1f023cd0c4cad9f 100644 (file)
@@ -62,7 +62,8 @@
 
 
 @Book {read-notation,
-  note = {(Out of print) This is as close to the ``standard'' reference work for music notation issues as one is likely to get. MB},
+  note = {(Out of print) This is as close to the ``standard'' reference
+work for music notation issues as one is likely to get. MB},
   title = {Music Notation: a Manual of Modern Practice},
   author = {Gardner Read},
   totalentry = {(2nd edition)},
   publishers.  This beautiful booklet was intended as an introduction
   for laymen on the art of engraving.  It contains a step by step,
   in-depth explanation of how to cut and stamp music into zinc plates.
-  It also contains some compactly formulated rules on musical
+  It also contains   a few compactly formulated rules on musical
   orthography. Out of print. }
 }
 
 
 
 @Booklet {mpa96,
-  note = {Pamphlet explaining some fine points in music font design HWN},
+  note = {Pamphlet explaining a few  fine points in music font design HWN},
   year =  {1996},
   title = {Standard music notation specifications for computer programming.},
   month =  {December},
index f380916b281ccd5abf1e99f307366e3ada4fb87a..37f81eb5ffae4c6e5639017bfc8130dbb21fc834 100644 (file)
@@ -1,4 +1,5 @@
-% -*-LaTeX-*-
+
+                                % -*-LaTeX-*-
 
 \documentclass{article}
 \def\kdots{,\ldots,}
@@ -20,9 +21,9 @@ notably \begin{itemize} \item B\"arenreiter \item Hofmeister \item
 Breitkopf \item Durand \& C'ie \end{itemize}
 
 The best references on Music engraving are Wanske\cite{wanske} and
-Ross\cite{ross} quite some of their insights were used.  Although it
-is a matter of taste, I'd say that B\"arenreiter has the finest
-typography of all.
+Ross\cite{ross} some of their insights were used.  Although it is a
+matter of taste, I'd say that B\"arenreiter has the finest typography
+of all.
 
 
 \section{Bezier curves for slurs}
@@ -192,15 +193,14 @@ Staffsize       &Numbers                &Name\\
 15.9pt  &No. 6          &Small middle\\
 13.7pt  &No. 7          &Cadenza\\
 11.1pt  &No. 8          &Pearl\\
-
     \end{tabular}
     \caption{Foo}
     \label{fonts:staff-size}
   \end{center}
 \end{table}
 
-Ross states that the dies (the stamps to make the symbols) come in
-12 different sizes.
+
+
 
 \section{Beams}
 
@@ -304,3 +304,27 @@ create and export glyphs.
 
 
 \end{document}
+
+\begin{verbatim}
+Paul Terry <paul@musonix.demon.co.uk> writes:
+
+Ross states that the dies (the stamps to make the symbols) come in
+12 different sizes.
+
+>Can you tell me how big rastrals are?
+
+According to the Score manual:
+
+   Rastral Size     Height in millimetres
+
+   0                9   mm
+   1                8   mm
+   2                7.5 mm
+   3                7   mm
+   4                6.5 mm
+   5                6   mm
+   6                5.5 mm
+
+I must say, despite having been a music setter for many years, I had to
+look these up - none of the publishers I work for deal in Rastral sizes
+these days (they all use millimetres).
index ccb5a7377b0a5a4fc16bee8f9a9a213456114d0c..4aea7128387689dab0eaf75e0024398dcee113be 100644 (file)
@@ -47,12 +47,13 @@ music until now:
   impossible to modify the score in a meaningful way.
   
 \item Formats for various notation programs.  Notation programs either
-  work with binary formats (e.g., NIFF\cite{niff-web}), need specific
-  platforms (e.g., Sibelius\cite{sibelius}, Score\cite{score}), are
-  proprietary or non-portable tools themselves (idem), produce
-  inadequate output (e.g., MUP\cite{mup}), are based on graphical
-  content (e.g., MusixTeX\cite{musixtex1}), or limit themselves to
-  specific subdomains (e.g., ABC\cite{abc2mtex}).
+  work with binary  formats (e.g., NIFF\cite{niff-web}), need specific
+  platforms   (e.g.,  Sibelius\cite{sibelius}),  are   proprietary  or
+  non-portable  tools  themselves  (idem), produce  inadequate  output
+  (e.g.,  MUP\cite{mup}),  are   based  on  graphical  content  (e.g.,
+  MusixTeX\cite{musixtex1}),  limit themselves to  specific subdomains
+  (e.g.,  ABC\cite{abc2mtex}),  or   require  considerable  skill  and
+  knowledge to use (e.g., SCORE\cite{score})
   
 \item SMDL\cite{smdl-web}.  This is a very rich ASCII format, that is
   designed for storing many types of music.  Unfortunately, there is
@@ -487,7 +488,7 @@ guidelines:
 An example of the first guideline in action is the horizontal spacing.
 The amount of space following a note should reflect the duration of
 that note: short notes get a small amount of space, long notes larger
-amounts.  Such spacing constraints can be quite subtle, for the
+amounts.  Such spacing constraints can be  subtle, for the
 ``amount of space'' is only the impression that should be conveyed; there
 has to be some correction for optical illusions.  See
 Figure~\ref{fig:spacing}.
@@ -587,8 +588,126 @@ The nonterminal productions can
 
 \section{Context in notation} 
 
+Music notation relies heavily on context.  Notational symbols do not
+have meaning if they are not surrounded by other context elements.  In
+this section we give some examples how the reader uses this context do
+derive meaning of a piece of notation.   We will focus on the prime
+example of context: the staff. 
+
+A staff is the grid of five horizontal lines, but it contains more components :
+\begin{itemize}
+\item A staff can have a key signature (printed at the left)
+\item A staff can have a time signature (printed at the left)
+\item A staff has bar lines
+\item A staff has a clef (printed at the left)
+\end{itemize}
+
+It is still possible to print notes without these components, but one
+cannot determine the meaning of the notes.
+\begin{mudela}
+\score{
+\notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+\paper { 
+  linewidth = -1.;
+  \translator {
+  \StaffContext
+  \remove "Time_signature_engraver";
+  \remove "Bar_engraver";
+  \remove "Staff_symbol_engraver";
+  \remove "Clef_engraver";
+  \remove "Key_engraver";
+  }
+ }
+}
+\end{mudela}
+
+As you can see, you can still make out the general form of the melody
+and the rhythm that is to be played, but the notation is difficult to
+read and the musical information is not complete.  The stress
+pattern in the notes can't be deduced from this output.  For this, we
+need a time signature.  Adding barlines helps with finding the strong
+and weak beats.
+\begin{mudela}
+\score {
+  \notes \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+  \paper{
+  linewidth = -1.;
+\translator{
+  \StaffContext
+  \remove "Staff_symbol_engraver";
+  \remove "Clef_engraver";
+  \remove "Key_engraver";}
+  }
+ }
+\end{mudela}
+
+It is impossible to deduce the exact pitch of the notes.  One needs a
+clef to do so.  Staff lines help the eye in determining the vertical
+position of a note wrt. to the clef.
+\begin{mudela}
+\score {
+  \notes \relative c' {\clef alto;  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+  \paper {
+    linewidth = -1.;
+  }
+}  
+\end{mudela}
+
+Now you know the pitch of the notes: you look at the start of the line
+and see a clef, and with this clef, you can determine the notated pitches.
+You have found the em(context) in which the notation is to be
+interpreted!
+
+
 \section{Interpretation context}
 
+Context (clef, time signature etc.) determines the relationship
+between musical and its notation in notes.  Because LilyPond writes
+notation, context works the other way around for LilyPond: with
+context a piece of music can be converted to notation.
+
+A reader remembers this context while reading the notation from left
+to right.  By analogy, LilyPond constructs this context while
+constructing notes from left to right.  This is what happens in the
+``Interpretation'' phase from~\ref{fig:intro-fig}.  In LilyPond, the
+state of this context is a set of variables with their values; A staff
+context contains variables like
+
+\begin{itemize}
+\item current clef
+\item current time signature
+\item current key
+\end{itemize}
+
+These variables determine when and how clefs, time signatures, bar
+lines and accidentals are printed.
+
+
+Staff is not the only form of context in notation.  In polyphonic
+music, the stem direction shows which notes form a voice: all notes of
+the same voice have stems pointing in the same direction.  The value
+of this variable determines the appearance of the printed stems.
+
+In LilyPond ``Notation context'' is abstracted to a data structure
+that is used, constructed and modified during the interpretation
+phase.  It contains context properties, and is responsible for
+creating notational elements: the staff context creates symbols for
+clefs, time signatures and key signatures.  The Voice context creates
+stems, note heads.
+
+For the fragment of polyphonic music below,
+\begin{mudela}
+  \context Staff { c'4 < { \stemup c'4 } \context Voice = VB { \stemdown a4 } > }
+\end{mudela}
+A staff context is created.  Within this staff context (which printed
+the clef), a Voice context is created, which prints the first note.
+Then, a second Voice context is created, with stem direction set to
+``up'', and the direction for the other is set to down. Both Voice
+contexts  are  still part of the same Staff context.
+
+In the same way, multiple staff scores are created: within the score
+context, multiple staff contexts are created.  Every staff context
+creates the notation associated with a staff.  
 
 \section{Discussion}
 
index aae1c80ea8c5a0245d6bbbb97a4d2898deaf42cf..20a8336e71d42fb91934729c289cc43c776fc607 100644 (file)
@@ -24,6 +24,11 @@ you must create a special context called Thread.
 
 \mudelafile{noteheadstyle.ly}
 
+Multiple measure rests do not collide with barlines and clefs.  They
+are not expanded when you set Score.SkipBars
+
+\mudelafile{multi-measure-rest.ly}
+
 
 \section{Beams, slurs and other spanners}
 
@@ -73,9 +78,9 @@ numberOfStaffLines.  Ledger lines both on note heads and rests are adjusted.
 
 \section{Global stuff}
 
-Markings that are attached to (invisible) barlines are quite
+Markings that are attached to (invisible) barlines are 
 delicate: the are attached to the rest of the score without the score
-knowing it.  Consequently, they fall over quite often.
+knowing it.  Consequently, they fall over  often.
 
 \mudelafile{bar-scripts.ly}
 
index c4874f6b9d3d2cbf8801505c4c790714bcca0d7f..22f9d8f3b69014953e571d29ad23bda8d6ee06c3 100644 (file)
@@ -88,12 +88,12 @@ will set the \verb|linewidth| variable to -1, so Lilypond
 will make the music as short as possible but without breaking the
 line. Here is a well know harmonic progression:
 \begin{mudela}[veryverbatim, intertext="produce a well known harmonic progression:"]
-  <c' e' g'> <b d' g'> <c'2 e' g'>
+\context Voice {  <c' e' g'> <b d' g'> <c'2 e' g'>}
 \end{mudela}
 
 If you want to place music examples in the text,
 \begin{mudela}[eps]
-  <c' e' g'> <b d' g'> <c'2 e' g'>
+\context Voice {  <c' e' g'> <b d' g'> <c'2 e' g'>}
 \end{mudela}
 , you can use the \verb|eps| option. This will create the music as
 eps graphics and include it into the document with the 
@@ -102,7 +102,7 @@ eps graphics and include it into the document with the
 The code used look like this:
 \begin{verbatim}
 \begin{mudela}[eps]
-  <c' e' g'> <b d' g'> <c'2 e' g'>
+\context Voice {  <c' e' g'> <b d' g'> <c'2 e' g'>}
 \end{mudela}
 \end{verbatim}
 
@@ -301,22 +301,22 @@ names of some triads:
 
 dur &
 \begin{mudela}[eps]
-<c' e' g'>
+\context Voice {<c' e' g'>}
 \end{mudela} 
 \\
 \hline moll &
 \begin{mudela}[eps]
-<c' ees' g'>
+\context Voice {<c' ees' g'>}
 \end{mudela}
 \\
 \hline forminsket &
 \begin{mudela}[eps]
-<c' es' ges'>
+\context Voice {<c' es' ges'>}
 \end{mudela}
 \\
 \hline forstørret &
 \begin{mudela}[eps]
-<c' e' gis'>
+\context Voice {<c' e' gis'>}
 \end{mudela}
 \\
 \hline 
@@ -330,7 +330,7 @@ into the preamble of your document. Then the line spacing will not be
 increased between the lines where you have music printed with the
 smallest font size.
 
-Sinse the version number is quite low, you should be careful not to
+Since the version number is  low, you should be careful not to
 mix braces that belongs to mudela-book and \LaTeX~on the same
 line. The following code will probably break:
 
index 30966e4ba6b8b64ba241f1370c19a9cf75e12f42..d8f9f5e28d37f77cc584117a34bf765e851f2691 100644 (file)
@@ -85,7 +85,7 @@ sect(The first tune)
 label(sec:firsttune)
 
 To demonstrate what LilyPond input looks like, we start off with a
-full fledged, yet simple, example. It is somewhat convoluted version
+full fledged, yet simple, example. It is a convoluted version
 of one of the menuets in bind(J.)bind(S.)Bach's em(Clavierbuchlein).
 
 mudela(verbatim)(
@@ -279,7 +279,7 @@ second one without.  COMMENT(
 
 )verb( a8-. b-. cis-. d-. e-. fis-. % try some super and subscripts.)COMMENT(
 
-)There is more to music than just pitches and rhythms.  An important
+)There is more to music than  pitches and rhythms.  An important
 aspect is articulation.  You can enter articulation signs either in an
 abbreviated form, by a dash and the the character for the
 articulation to use,  e.g. code(-.) for staccato as shown above.
@@ -350,7 +350,7 @@ verb(\score {
        \paper {  }
 })COMMENT(
 
-) we will leave out the the repetitive details for now and just print
+) we will leave out the the repetitive details for now and only print
 code(XXXX).
 
 
@@ -489,7 +489,7 @@ Chords can be entered in the music in the same places that notes
 can.  As an example we give a snippet of ``Twinkle Twinkle Little
 Star'' in chords.  The chords may seem slightly unconventional, but
 they only serve to show how chords work.  We've aligned the chords in
-the input on their starting beat just to help you reading it.  This
+the input on their starting beat  to help you reading it.  This
 layout does not influence the typesetting result in any way.
 
 mudela(verbatim, fragment)(
@@ -515,7 +515,7 @@ e.g., COMMENT(
 )COMMENT(
 
 )
-As you can see, LilyPond has some difficulty typesetting this
+As you can see, LilyPond has  difficulty typesetting this
 elegantly.  To adequately solve this, you have to persuade LilyPond to
 make separate stems for both sequential music lists.   This is a topic
 that is covered in bind(Section)ref(sec:polyphonic).
@@ -540,7 +540,7 @@ subsect(Names with chords)
 
 A more common problem is the typesetting of chord names.  LilyPond has
 a special kind of staff for this, the code(ChordNames) staff.  
-The code(ChordNames) staff accepts music just as a normal staff, 
+The code(ChordNames) staff accepts music like a normal staff, 
 but typesets only the name of each chord:
 COMMENT(
 
@@ -574,7 +574,7 @@ note. COMMENT(
   c''4-\tenuto )COMMENT(
 
 ) Typing a lot of staccato notes in this syntax will get tedious very
-quickly.  Therefore, Mudela has some handy abbreviations for
+quickly.  Therefore, Mudela has  handy abbreviations for
 articulation marks such as staccato and tenuto.  They are shown in the
 following example: COMMENT(
 
@@ -601,7 +601,7 @@ COMMENT(
 
 )mudela(fragment,verbatim)(c''4-1 g''4-5 c''-"Sul tasto" )
 COMMENT(Currently, the meaning of the
-syntax `note-dash-digit/articulation/text' is just ``add a superscript to this
+syntax `note-dash-digit/articulation/text' is  ``add a superscript to this
 note.''  This is not in line with our goal to em (define) music with
 Mudela.  We hope that this will be fixed in a future version of the
 language.  In the meantime you can abuse this: the super- and
@@ -640,7 +640,7 @@ start marker is.  The stopping marker is the closing parenthesis.
 For example:
 mudela(fragment,center,verbatim)( c'4( )c'4 )
 
-  The slur is quite flexible: you can nest nop(slurs,)footnote(This is
+The slur is flexible: you can nest nop(slurs,)footnote(This is
 inconsistent when compared to the syntax for articulation hints.  This
 will be fixed some time, we hope.) and you can connect a note with a
 slur on both the left and the right side:
@@ -808,7 +808,7 @@ dit(code(\grouping) var(durationslist)) sets the metric structure of the measure
         [c'8 c'16 c'8]
     )
 
-In practice, you won't be needing this command very often: the
+In practice, you won't be needing this command often: the
 grouping is switched automatically when you issue a code(\time)
 command.  It is set to a combination of groups
 of 2 and 3 beats, with as many groups of
@@ -824,7 +824,7 @@ notes.
 sect(Notation context)
 
 COMMENT(This section is about translation contexts, a topic of LilyPond that
-is somewhat advanced.  You don't have to understand this to use
+is  advanced.  You don't have to understand this to use
 LilyPond to print simple music.  If you don't want to typeset fancy
 polyphonic music or tweak the LilyPond notation engine, you can skip
 the next two sections.)
@@ -841,9 +841,11 @@ lines on which one can print note heads.  We will call this view on
 the concept of staff `staff symbol' from now on.
 
 But 
-there is more to a staff than just the symbol.  A staff
-contains---besides a staff symbol--- some more components:
-itemize(
+there is more to a staff than  the symbol.  A staff
+contains---besides a staff symbol---  more components:
+COMMENT(
+
+)itemize(
 it()A staff can have a key signature (printed at the left)
 it()A staff can have a time signature (printed at the left)
 it()A staff has bar lines
@@ -947,7 +949,7 @@ converted to notation.
 We see that a staff forms context, and that context is needed to
 convert between notation and music.  In LilyPond we turn around this
 reasoning: LilyPond has a notion of notation context, and the staff is
-just one example of a notation context.  In fact, the arguments of the
+an example of a notation context.  In fact, the arguments of the
 code(\context) command (Staff, GrandStaff) were all names of different
 contexts.  A notation context is a conversion between music and
 notation.
@@ -966,8 +968,8 @@ description(
 
 dit(GrandStaff) A code(GrandStaff) context contains code(Staff)
   contexts, and it adds a brace to the output at the
-  nop(left.)footnote(The GrandStaff is quite limited, LilyPond can not
-  do cross staff beaming and slurring.)
+  nop(left.)footnote(The GrandStaff is limited, LilyPond can not do
+  cross staff beaming and slurring.)
 
   A code(GrandStaff) context can contain code(Staff)s. Typically, it
   will contain two code(Staff)s, one treble staff, and one bass
@@ -1031,7 +1033,7 @@ sect(Nested music: multiple staffs)
 label(tutorial:more-staffs)
 
 Now we explain how to typeset music that runs in multiple staffs.
-Consider the following---somewhat unrealistic---example:
+Consider the following---unrealistic---example:
 
 mudela(fragment)(
  \context GrandStaff <e'4 {\clef bass; g4^""} >
@@ -1094,10 +1096,10 @@ mudela(verbatim,fragment)(
   >
 )COMMENT(
 
-) The names that you choose do not matter just as long as they are
+) The names that you choose do not matter  as long as they are
 different.  This is almost right, except for the brace at the left and
 the clef of the second staff.  If you want a brace, then you have to
-tell LilyPond that the chord you just formed is to be interpreted as a
+tell LilyPond that the chord you  formed is to be interpreted as a
 so-called grand staff.  This is also done with the code(\context)
 command.  The bass clef is made with a clef command:  COMMENT(
 
@@ -1142,7 +1144,7 @@ other words, notes enclosed in braces.  Let us try the following counterpoint:CO
   \context "Voice" = "two" { g'2 f'4 e'4 }
 >)
 
-As you can see the result is not quite perfect.  The notes on the last
+As you can see the result is not  perfect.  The notes on the last
 two beats look like plain chords and not like separate voices.  What
 really happened was that the stems of the upper and lower voices were
 printed on top of each other.
@@ -1202,7 +1204,7 @@ of all properties.
 sect(Lyrics)
 label(tutorial:lyrics)
 
-Since a lyrics can have durations just like notes, we consider them to
+Since a lyrics can have durations  like notes, we consider them to
 be music too.  Entering lyrics in mudela has two aspects. First, you
 have to enter the text, i.e., the syllables along with their
 durations.  After this, you have to specify how to convert these to
@@ -1245,7 +1247,7 @@ perfor0mable: COMMENT(
 
 ) The strings that makes up each syllable in the lyrics block are
 passed along to TeX() verbatim, so if you are proficient with TeX()
-you can do various nifty things.  Just keep in mind that a syllable
+you can do various nifty things.   Keep in mind that a syllable
 either starts with a letter (a character in the range `code(a)' to
 `code(z)' or `code(A)' to `code(Z)'), or it is a string enclosed
 double quotes. It ends with either a number for the duration, or a space.
@@ -1272,7 +1274,7 @@ urg
 sect(Toplevel Mudela)
 
 Back in bind(Section)ref(sec:firsttune) we said we would ignore
-toplevel constructions (e.g., code(\score)) until some later moment.
+toplevel constructions (e.g., code(\score)) until a later moment.
 Now we will look at these constructions.
 
 
@@ -1316,7 +1318,7 @@ mudela(verbatim)(
 You can also see identifiers in action within the code(\paper) block:
 the value code(-1.0) is assigned to code(linewidth).  Within the
 code(\paper) block, identifiers are not used as abbreviation only:
-assigning to some identifiers can influence the output: in this case,
+assigning to some  identifiers can influence the output: in this case,
 the music line is printed at natural width.  
 
 Recall the properties of a context, that could be set with
@@ -1514,7 +1516,7 @@ nop(Urtext)footnote(em(Urtext) is the German word for `original text'.
 The Urtext edition of a piece of music, is an edition that reflects
 the original writing of the composer.  Such editions are useful for
 musicologists, and performers that want to perform authentic
-interpretations.  However, for mere mortals, the Urtext can be quite
+interpretations.  However, for mere mortals, the Urtext can be 
 hard to read.  It might not contain fingering and beaming, and
 typically it is full of footnotes.  Moreover, common interpretations
 may have emerged---after the composer died.  For this reason, the
@@ -1699,7 +1701,7 @@ COMMENT(
 played.  You may leave out the code(\alternative) part.  There must not 
 be more alternative endings than the code(repeat-count).
 
-A somewhat less intuitive form may be needed for lyrics, when there are
+A less intuitive form may be needed for lyrics, when there are
 a couple alternatives, but nothing is repeated.  The code(\repeat) command
 must be present, but it may specify an empty music list:
 COMMENT(
index f8298855ce523302b46bbe4f86ae8be4a0de17ab..2faf016ea83c71182c1da70932f25f3b05606919 100644 (file)
@@ -25,7 +25,7 @@ disk-space run configure with code(--disable-debugging).
 Although we recommend to use Unix, LilyPond is known to run on Windows
 NT/95/98 as well.  See Section ref(w32).
 
-it() GNU C++ version 2.8 or newer (egcs-1.1 or newer is also fine).
+it() EGCS 1.1 or newer.
 it() Python 1.5 (Strictly speaking, you shouldn't need Python for 
    compiling and installing, but you'll need it to regenerate the font
    tables, e.g.). 
@@ -247,8 +247,8 @@ provided to do the work for you, see file(bin/clean-fonts.sh).
 nsect(CAVEATS)
 
 itemize(
-it()The -O2 option to gcc triggers a gcc bug on DEC Alpha in dstream.cc. You
-    should turn off this flag for this file.
+it()The -O2 option  triggers  bugs on various platforms (PowerPC, Alpha).
+    If you experience problems, you  should first try  turning off this.
 )
 
 nsect(EXAMPLE)
index 56c3a089bfada0959c6faf1413c601c1cb113a9b..1b321d7bddbf6aec705b84ed3066a98b3c4eabb9 100644 (file)
@@ -1,42 +1,28 @@
 COMMENT(-*-Text-*-)
-DEFINEMACRO(Package)(0)(LilyPond) DEFINEMACRO(package)(0)(lilypond)
+
 
 redef(XXsetchapternum)(0)()
 
 notableofcontents()
-article(This is the toplevel README to Package())()()
+article(This is the toplevel README to LilyPond)()()
 
 includefile(../BLURB.in)
 
 sect(VERSIONING)
 
-Package() uses a versioning scheme similar to the Linux kernel.  In a
+LilyPond uses a versioning scheme similar to the Linux kernel.  In a
 version "x.y.z", an even second number 'y' denotes a stable version.
 For development versions 'y' is odd.  For using straightforward score
 production, please use the latest stable version.  Development versions
 may not produce good or nice scores.
 
-If you have downloaded a
-
-       *.pre*
-
-version, then this is version is *not* meant for producing nice output
-(but to keep your patchsets up to date).  It might not even compile.
-The same goes for a version with a 4th version number, eg
-
-       1.2.3.mypatch2
-
-It will be safer if you download 1.2.3 or wait for 1.2.4.
-
-
-
 sect(REQUIREMENTS)
 
-For the compilation and running of Package() you need some additional
+For the compilation and running of LilyPond you need some additional
 packages.  Please refer to the installation instructions.
 
 NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
-you don't have to compile Package().
+you don't have to compile LilyPond.
 
 
 sect(INSTALLATION)
@@ -58,36 +44,35 @@ and then do this:
 
        make doc
 
-You can also simply read the .yo sources.  They are ASCII text.
+You can also simply read the file(.yo) sources.  They are ASCII text.
 The complete documentation is accessible in formatted form at the 
 website lurl(http://www.cs.uu.nl/people/hanwen/lilypond/index.html)
 
 
 sect(COMMENTS)
 
-Package() is a long way from finished and polished.  We do appreciate
+LilyPond is a long way from finished and polished.  We do appreciate
 criticism, comments, bugreports, patches, etc.
-
+verb(
           Please send your e-mail to one of the MAILING LISTS
-
+)
 and not to us personally.  See file(Documentation/links.yo) for more info.
 
 
 sect(WINDOWS 32)
 
 If you have received this file as part of a DOS/Window32 distribution
-(package()-*.zip), then it is advisable to also download the source
+(LilyPond-*.zip), then it is advisable to also download the source
 package, since it might contain more documentation
 lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/)
 
-If you decide to build Package() from source, please read the INSTALL.txt
+If you decide to build LilyPond from source, please read the INSTALL.txt
 document first, especially the Windows NT/95 section.
 
 
 sect(CAVEATS)
 
-* Please read the file BUGS for some ugly bugs.  This especially applies
-Linux-Intel unix users.
+* Please read the file BUGS for some ugly bugs.  
 
 * If you have installed a previous version, be sure to remove old font
 files, eg
@@ -98,7 +83,7 @@ a script to do this for you is in file(buildscripts/clean-fonts.sh)
 
 sect(CDROM DISTRIBUTIONS)
 
-If you have received Package() on a cdrom, chances are that development
-has moved a some patchlevels up.  If possible, please check the latest 
-version of Package() before reporting bugs.
+If you have received LilyPond on a cdrom, chances are that development
+has moved a some patchlevels up.  Please check the latest version of
+LilyPond before reporting bugs.
 
index 8dd9e0c4a923a85a59c9d8e9c23b596501cb3604..2d645208a76dc4da181980229a27e91bdd929c21 100644 (file)
@@ -37,6 +37,10 @@ Note: These pages are created from the latest bf(development snapshots)
 of LilyPond, specifically, this page was made from LilyPond
 @TOPLEVEL_VERSION@.tar.gz
 
+Note: the pages may have been created from an unreleased development
+version.  Please have patience, all changes will appear in the
+official version.
+
 
 nsect(Free Software)
 
@@ -67,6 +71,7 @@ it()url(Reference Manual)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/refman.html)
 it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
 it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
 it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
+it()url(The installation instructions)(DOEXPAND(tops)/INSTALL.html)
 )
 
 nsect(Sites)
index d787c8619a87882306d15f7345a23365066a1564..a8bf785b37f406008f2ba985716a528cb62253e0 100644 (file)
@@ -43,8 +43,7 @@ o    Lots of disk space: LilyPond takes between 50  and  100
      Although we recommend to use Unix, LilyPond is known to
      run on Windows NT/95/98 as well.  See Section 11.
 
-o    GNU C++ version 2.8 or newer (egcs-1.1 or newer is also
-     fine).
+o    EGCS 1.1 or newer.
 
 o    Python  1.5  (Strictly  speaking,  you  shouldn't  need
      Python for compiling and installing, but you'll need it
@@ -55,95 +54,94 @@ o    GUILE  1.3  (no,  GUILE  1.2  won't  work),  check  out
 
 3: RUNNING
 
-GNU LilyPond does use a lot of resources. For operation  you
+GNU  LilyPond does use a lot of resources. For operation you
 need the following:
 
 o    TeX
 
 o    A   PostScript   printer   and/or   viewer   (such   as
-     Ghostscript) is strongly recommended.  Xdvi  will  show
-     all  embedded  PostScript  too  if you have Ghostscript
-
+     Ghostscript)  is  strongly recommended.  Xdvi will show
+     all embedded PostScript too  if  you  have  Ghostscript
      installed.
 
 o    GUILE  1.3  (no,  GUILE  1.2  won't  work),  check  out
      http://www.gnu.org/programs/guile.html
 
-For  running  LilyPond successfully you have to help TeX and
-MetaFont find various files.  The recommended way  of  doing
-so  is  adjusting  the environment variables in the start-up
-scripts of your shell.  An example is  given  here  for  the
+For running LilyPond successfully you have to help  TeX  and
+MetaFont  find  various files.  The recommended way of doing
+so is adjusting the environment variables  in  the  start-up
+scripts  of  your  shell.   An example is given here for the
 Bourne shell:
 
      export MFINPUTS="/usr/local/share/lilypond/mf:"
      export TEXINPUTS="/usr/local/share/lilypond/tex:"
 
-The  empty path component represents  and MetaFont's default
-search paths.  Scripts with the proper paths for the  bourne
+The empty path component represents  and MetaFont's  default
+search  paths.  Scripts with the proper paths for the bourne
 and   C-shell   respectively   are   generated   in   build-
-scripts/out/lilypond-profile and  buildscripts/out/lilypond-
+scripts/out/lilypond-profile  and buildscripts/out/lilypond-
 login during compilation.
 
 4: RECOMMENDED
 
-Although  not  strictly  necessary, these are recommended to
+Although not strictly necessary, these  are  recommended  to
 have.
 
 o    GNU make.  Check out ftp://ftp.gnu.org or any mirror of
      this site.
 
-o    Flex    (version    2.5.4   or   newer).    Check   out
+o    Flex   (version   2.5.4   or   newer).     Check    out
      ftp://ftp.gnu.org or any mirror of this site.
 
-o    Bison   (version   1.25   or   newer).     Check    out
+o    Bison    (version    1.25   or   newer).    Check   out
      ftp://ftp.gnu.org or any mirror of this site.
 
-o    GUILE  1.3  (no,  GUILE  1.2  won't  work),   check out
+o    GUILE 1.3 (no,  GUILE  1.2  won't  work),    check  out
      http://www.gnu.org/programs/guile.html
 
-o    Python   (version   1.5   or   newer).     Check    out
+o    Python    (version    1.5   or   newer).    Check   out
      ftp://ftp.python.org or ftp://ftp.cwi.nl/pub/python.
 
-o    Yodl.   All  documentation  will  be in Yodl. (1.30.17)
+o    Yodl.  All documentation will  be  in  Yodl.  (1.30.17)
      ftp://ftp.lilypond.org/pub/yodl
      http://www.cs.uu.nl/~hanwen/yodl
 
 o    Texinfo. (version 3.12 or newer)
 
-o    GNU  find  Check out ftp://ftp.gnu.org or any mirror of
+o    GNU find Check out ftp://ftp.gnu.org or any  mirror  of
      this site.
 
 o    The geometry package for LaTeX is needed to use ly2dvi.
-     Available           at          ftp://ftp.ctan.org/tex-
+     Available          at           ftp://ftp.ctan.org/tex-
      archive/macros/latex/contrib/supported/geometry  or  at
      mirror site ftp://ftp.dante.de
 
 o    A fast computer: a full page of music typically takes 1
-     minute on my 486/133, using the --enable-checking  com-
+     minute  on my 486/133, using the --enable-checking com-
      pile.
 
 5: WEBSITE
 
-If  you  want  to  auto-generate Lily's website, you'll need
+If you want to auto-generate  Lily's  website,  you'll  need
 some additional conversion tools.
 
 o    xpmtoppm (from the Portable Bitmap Utilities) (For Red-
-     Hat  Linux  users:  it  is  included within the package
+     Hat Linux users: it  is  included  within  the  package
      libgr-progs).
 
 o    Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
      Which, in turn depends on man2html for proper installa-
-     tion.   man2html  can  be   had   from   http://askdon-
+     tion.    man2html   can   be  had  from  http://askdon-
      ald.ask.uni-karlsruhe.de/hppd/hpux/Network-
      ing/WWW/Man2html-1.05.
 
      TeTeX users should not forget to rerun texhash.
 
 Building the website requires pnmtopng.  The version of pnm-
-topng  that  is  distributed  with RedHat 5.1 contains a bug
-(pnmtopng is dynamically linked  to  the  wrong  version  of
-libpng).   Recompile  it from source, and make sure that the
-pnmtopng binary is linked statically to the libpng  that  is
+topng that is distributed with RedHat  5.1  contains  a  bug
+(pnmtopng  is  dynamically  linked  to  the wrong version of
+libpng).  Recompile it from source, and make sure  that  the
+pnmtopng  binary  is linked statically to the libpng that is
 included in libgr.
 
       tar xzf libgr-2.0.13.tar.gz
@@ -175,9 +173,9 @@ This will install a number of files, something close to:
           /usr/local/share/lilypond/*
           /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
 
-The  above assumes that you are root and have the GNU devel-
+The above assumes that you are root and have the GNU  devel-
 opment tools, and your make is GNU make.  If this is not the
-case,  you  can  adjust  your  environment variables to your
+case, you can adjust  your  environment  variables  to  your
 
 taste:
 
@@ -187,16 +185,16 @@ taste:
 CPPFLAGS are the preprocessor flags.
 
 The configure script is Cygnus configure, and it will accept
---help.  If you are not root, you will probably have to make
+--help. If you are not root, you will probably have to  make
 it with a different --prefix option.  Our favourite location
 is
 
           configure --prefix=$HOME/usr
 
-In  this  case, you will have to set up MFINPUTS, and TEXIN-
+In this case, you will have to set up MFINPUTS,  and  TEXIN-
 PUTS accordingly.
 
-Since GNU LilyPond currently is beta,  you  are  advised  to
+Since  GNU  LilyPond  currently  is beta, you are advised to
 also use
 
           --enable-debugging
@@ -208,33 +206,33 @@ Options to configure include:
      Enable debugging print routines (lilypond -D option)
 
 --enable-optimise
-     Set  maximum  optimisation: compile with -O2.  This can
-     be unreliable on  some  compiler/platform  combinations
+     Set maximum optimisation: compile with -O2.   This  can
+     be  unreliable  on  some compiler/platform combinations
      (eg, DEC Alpha and PPC)
 
 --enable-profiling
      Compile with support for profiling.
 
 --enable-config
-     Output  to  a different configuration file.  Needed for
+     Output to a different configuration file.   Needed  for
      multi-platform builds
 
-All options are documented in the configure help The  option
+All  options are documented in the configure help The option
 --enable-optimise is recommended for Real Life usage.
 
 If you do
 
           make all
 
-everything  will be compiled, but nothing will be installed.
-The resulting binaries can be found  in  the  subdirectories
+everything will be compiled, but nothing will be  installed.
+The  resulting  binaries  can be found in the subdirectories
 out/ (which contain all files generated during compilation).
 
 7: CONFIGURING FOR MULTIPLE PLATFORMS
 
 If you want to compile LilyPond with different configuration
-settings,  then,  you  can  use  the --enable-config option.
-Example: suppose I want to build with and   without  profil-
+settings, then, you  can  use  the  --enable-config  option.
+Example:  suppose I want to build with and   without profil-
 ing.  Then I'd use the following for the normal build,
 
            configure --prefix=~ --disable-optimise --enable-checking
@@ -257,14 +255,14 @@ If you have done a successful make, then a simple
 should do the trick.
 
 If you are doing an upgrade, please remember to remove obso-
-lete  .pk  and  .tfm  files of the fonts.  A script has been
+lete .pk and .tfm files of the fonts.   A  script  has  been
 provided to do the work for you, see bin/clean-fonts.sh.
 
 CAVEATS
 
-o    The -O2 option to gcc triggers a gcc bug on  DEC  Alpha
-     in  dstream.cc.  You should turn off this flag for this
-     file.
+o    The  -O2  option   triggers   bugs on various platforms
+     (PowerPC, Alpha).   If  you  experience  problems,  you
+     should first try  turning off this.
 
 EXAMPLE
 
@@ -295,8 +293,8 @@ refer to the man page for more information.
 
 9: REDHAT LINUX
 
-RedHat  Linux  users  can  compile an RPM. A spec file is in
-make/out/lilypond.spec, it is  distributed  along  with  the
+RedHat Linux users can compile an RPM. A  spec  file  is  in
+make/out/lilypond.spec,  it  is  distributed  along with the
 sources.
 
 You can make the rpm by issuing
@@ -306,8 +304,8 @@ You can make the rpm by issuing
 
 10: DEBIAN GNU/LINUX
 
-A  Debian  package  is  also  available; contact Anthony Fok
-foka@debian.org.  The build scripts are in the  subdirectory
+A Debian package is  also  available;  contact  Anthony  Fok
+foka@debian.org.   The build scripts are in the subdirectory
 debian/.
 
 11: WINDOWS NT/95
diff --git a/NEWS b/NEWS
index eb98873ff6b6ab50393775183d8f55f4bde8cfa9..25c174bfc7801049948f47a1fdf0367624030583 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,31 @@
+pl 41.hwn2
+       - bf: Score bar line thickness.
+       - more paper writing
+       - website tweaks.
+       - Graphical_element::dim_cache_ now alloced separately. 
+       - junked Graphical_element::absgolute_offset
+       - Musique-de-Table 
+       - mmrest_x_minimum now works at begin-of-line.
+       - junked Span_bar::extra_x_off
+       - \property foo.bar = \stringid + \otherstringid
+       - bf: stop on lexer errors as well.
+       - only do vertical alignment at Score level.
+       - tweaked ledger endings a bit.
+       
+
+pl 41.hwn1
+       - small fixes.
+       - mudela-book.py patch (thanks MB)
+
+pl 41.mb1
+       - Added the installation instructions to the top web page.
+       - N.W.Gade: Added triangolo part, minor changes.
+
 pl 41.tca1
-       - Lookup::accordion and removed some accordionfonts 
+       - Lookup::accordion and removed some accordionfonts
+
+***************
+
 pl 40.uu2
        - rest ledger lines are dimensionless.
        - Score_elements are added to the Paper_score directly when
index eee3265d47af571e3056499be33ab1f333836188..be3bd2a836c8a91fd9dbf755e2b981346c37ab22 100644 (file)
@@ -19,35 +19,22 @@ odd.  For using straightforward score production, please use
 the latest stable version.   Development  versions  may  not
 produce good or nice scores.
 
-If you have downloaded a
-
-*.pre*
-
-version,  then  this is version is *not* meant for producing
-nice output (but to keep your patchsets  up  to  date).   It
-might  not even compile.  The same goes for a version with a
-4th version number, eg
-
-1.2.3.mypatch2
-
-It will be safer if you download 1.2.3 or wait for 1.2.4.
-
 2: REQUIREMENTS
 
-For the compilation and running of LilyPond  you  need  some
+For  the  compilation  and running of LilyPond you need some
 additional  packages.   Please  refer  to  the  installation
 instructions.
 
-NOTE: If you downloaded a binary  (.rpm  or  a  W95/NT  .zip
+NOTE:  If  you  downloaded  a  binary (.rpm or a W95/NT .zip
 file), then you don't have to compile LilyPond.
 
 3: INSTALLATION
 
-For  your  convenience,  a  formatted  copy  of  the INSTALL
+For your  convenience,  a  formatted  copy  of  the  INSTALL
 instructions are in the toplevel directory, as INSTALL.txt
 
-The process is fairly straightforward, but chances are  that
-you  have  to specify directories for  to configure: this is
+The  process is fairly straightforward, but chances are that
+you have to specify directories for  to configure:  this  is
 done with the options --enable-tex-dir and --enable-mf-dir
 
 4: DOCUMENTATION
@@ -59,36 +46,35 @@ ure first, and then do this:
 
 make doc
 
-You  can  also  simply read the .yo sources.  They are ASCII
+You can also simply read the .yo sources.   They  are  ASCII
 text.  The complete documentation is accessible in formatted
-form  at the website http://www.cs.uu.nl/people/hanwen/lily-
+form at the website  http://www.cs.uu.nl/people/hanwen/lily-
 pond/index.html
 
 5: COMMENTS
 
-LilyPond is a long way from finished and  polished.   We  do
+LilyPond  is  a  long way from finished and polished.  We do
 appreciate criticism, comments, bugreports, patches, etc.
 
-Please send your e-mail to one of the MAILING LISTS
+             Please send your e-mail to one of the MAILING LISTS
 
-and  not  to  us personally.  See Documentation/links.yo for
+and not to us personally.   See  Documentation/links.yo  for
 more info.
 
 6: WINDOWS 32
 
-If you have received this file as  part  of  a  DOS/Window32
-distribution  (lilypond-*.zip), then it is advisable to also
-download the source package, since  it  might  contain  more
+If  you  have  received  this file as part of a DOS/Window32
+distribution (LilyPond-*.zip), then it is advisable to  also
+download  the  source  package,  since it might contain more
 documentation ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/
 
 If you decide to build LilyPond from source, please read the
-INSTALL.txt document first,  especially  the  Windows  NT/95
+INSTALL.txt  document  first,  especially  the Windows NT/95
 section.
 
 7: CAVEATS
 
-*  Please read the file BUGS for some ugly bugs.  This espe-
-cially applies Linux-Intel unix users.
+* Please read the file BUGS for some ugly bugs.
 
 * If you have installed  a  previous  version,  be  sure  to
 remove old font files, eg
@@ -101,6 +87,5 @@ fonts.sh
 8: CDROM DISTRIBUTIONS
 
 If you have received LilyPond on a cdrom, chances  are  that
-development  has  moved a some patchlevels up.  If possible,
-please check the latest version of LilyPond before reporting
-bugs.
+development  has  moved a some patchlevels up.  Please check
+the latest version of LilyPond before reporting bugs.
diff --git a/TODO b/TODO
index e0301f88598e3060fc874fd8971d4d726aacecb5..33dd5f04f173cae55e6245da001cc59d9e0bc3d7 100644 (file)
--- a/TODO
+++ b/TODO
@@ -17,33 +17,6 @@ Grep for TODO and ugh/ugr/urg.
 . * staff size for post/prebreaks
 . * .ly files
 .  * input/star-spangled-banner
-. * m=\notes\relative c'''{
-  \time 2/4;
-
-  R2*4 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | \break
-  <{R2*10}{s2 \mark "A"; }> | % Too narrow space for the first rest in
-1.1.29
-  r4 r8 [g16 \p ( a ] |
-[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] |
-[ ) f8-. e16 ( f ][ ) e8-. es16 ( f ] |
-[ ) es8 \f c16 ( d][es8 d16 c ] |
-) d4 r8 [g16 \p ( a ] |
-[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] | \break
-) c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 |
-}
-
-\score{
-  \m
-  \paper{
-    \translator{
-      \ScoreContext
-      SkipBars = 1;
-    }
-    \translator {
-      \OrchestralPartStaffContext
-    }
-  }
-}
 . * midi key.
 . * P.P.S. It can be cool in mudela-book to distinguish in
 pre,postMudelaExample, whether MudelaExample is epsed or not: ( if
@@ -76,11 +49,6 @@ Lyrics and scripts collide.
 
 \key b; \time 4/4; looks bad.  The clef and time signature are too close.
 
-I noticed that ledger lines in the previewer looked like they had a
-double line (of different lengths).  On printed output, I think I can
-see a slight thickening of the ledger lines in the middle.  Is this
-supposed to happen?
-
 restStyle=mensural doesn't seem to work (lots of characters not found
 for rests.fly)
 . * Phrasing:  Indicating the textual underlay of a piece, or
@@ -89,7 +57,6 @@ otherwise dividing a piece into phrases.
 There are distinct ways of specifying the first two (although at
 present, they're not properly distinguished) but no distinct way to
 specify the third.  Should there be?
-. * spacing of mmrests.
 . * rest collision minimum dist.
 . * Matanya's tips: 
 .  * spacing for prefatory matter
@@ -103,6 +70,23 @@ specify the third.  Should there be?
 So that makes for a staff space of 4 2/3 point. I'll add the
 dimensions to the TODO file.
 .  * accidentals closer to note head
+.  * to space the staffs/staffgroups contained in the score.  
+
+In the orchestscore.ly file, I tried:
+\paper{
+    \translator {
+        \OrchestralScoreContext
+        minVerticalAlign = 3.0*\staffheight;
+    }
+    \translator { 
+        \StaffGroupContext
+        minVerticalAlign = 3.0*\staffheight;
+    }
+    \translator { 
+        \StaffContext
+        minVerticalAlign = 3.0*\staffheight;
+    }
+}
 .  * heavier beams?
 
 .* Cleanups needed
@@ -115,6 +99,7 @@ dimensions to the TODO file.
 . * Spring generation
 . * Collision
 . * Rest_collision
+. * clef grav prop's 
 
 .* TODO before 1.2
 . * \selectmusic to cut pieces from music. 
@@ -122,19 +107,10 @@ dimensions to the TODO file.
 .  * Remove mutopia ramblings.
 .  * Remove non-free software links.
 .  * Remove meta article LilyPond.
-. * generic rest ledgers
 . * TODO: merge atom & molecule; make  tree from molecule.
 . * break priority setting from SCM.
 . * Gade score
 .  * remove [] in favour of auto-beamer
-.  * The minimum distance between different staffs works only within 
-  StaffGroups, not between StaffGroups. The Gade Score looks quite
-  strange on the pages where the Timpani and/or Brass sections don't
-  play. I've set the minimum distance with:
-    \translator {
-       \OrchestralScoreContext
-        minVerticalAlign = 2.5*\staffheight;
-    }
 . * hangOnClef with non-breakable clefs.
 . * Aha, the problem is the new TeX code generation for changing fonts.
 > (The explanation below is mostly intended for Han-Wen and Jan)
@@ -152,7 +128,6 @@ dimensions to the TODO file.
 > fontencoding OT1 is for the hyphenation mechanism to work, an 
 > argument that's clearly irrelevant in our application. Yet we
 > see the problem for August.
-. * Check gcc 2.8.1 compatibility
 . * Abstraction for engravers:
 .  * make "in-between" engraver (Tie, Extender)
 .  * make wide_spanner_engraver (line_group_spanne,r staff_symbol)
@@ -297,6 +272,7 @@ touching it.
 . * put errorlevel in Input class
 . * junk nesting slurs
 . * integrate midi-elts from mi2mu and lily?
+. * distinguish between unset and empty properties. 
 
 .* FONT
 . * the bracket is ugly (wings are too parabolic, should be more circular)
@@ -320,6 +296,9 @@ touching it.
 .  * glissando, arpeggio
 .  * lengthened trill
 . * include important spacing dims in fetalog 
+. * scalability: use blot_diameter everywhere, make font chubbier for
+    small sizes.
+
 .* 3RD PARTY BUGS
 . * GNU diff 2.7: diff -rN does not see a new directory with empty file
 . * check out GCC signatures?
diff --git a/VERSION b/VERSION
index a7dabb98b07b039247db8f75f14f9ee5a82c358a..a284ea5e4f68e2a3a41be8ecc632fbd4b21cffc2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=41
-MY_PATCH_LEVEL=tca1
+PATCH_LEVEL=42
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index fbc74976f1832cc162bf4a9dafb03b2a04a9c262..11a12210596085ad88e8b4424edcb71e377a2c0c 100644 (file)
@@ -14,6 +14,24 @@ sys.path.append ('@abs-step-bindir@')
 header_regex = regex.compile('\\header[ \t\n]*{\([^}]*\)}')
 header_entry_regex = regex.compile('[\n\t ]*\([^\n\t ]+\)[\n\t ]*=[\n \t]*\([^;]+\)[\n \t]*;')
 
+headertext= r"""
+These example files are taken from the LilyPond distribution. 
+LilyPond currently only outputs TeX and MIDI.  The pictures and 
+PostScript files were generated using TeX, Ghostscript and some 
+graphics tools.  The papersize used for these examples is A4. 
+The  images are in PNG format, and should be viewable with any current browser.
+We don't use GIFS due to <a href="http://www.gnu.org/philosophy/gif.html">patent problems</a>.
+<p>
+If you want an accurate impression of the output quality please <em>print
+out</em> the samples first.
+"""
+
+headertext_nopics = r"""This is a subdirectory of the LilyPond example
+set.  We decided not to show any examples from this directory.  If you
+want to view them, then you have to download LilyPond and compile them
+yourself."""
+
+
 #
 # FIXME breaks on multiple strings.
 #
@@ -68,7 +86,7 @@ def gen_list(inputs, subdir, filename):
     list = open(filename, 'w')
     list.write ('<html><TITLE>Rendered Examples</TITLE>\n')
     list.write ('<body bgcolor=white>')
-    if len(subdirs):
+    if subdirs:
        list.write  ('<h2>subdirectories</h2>')
        list.write  ('<ul>')    
         for ex in subdirs:
@@ -77,18 +95,14 @@ def gen_list(inputs, subdir, filename):
 
        list.write ('</ul>')
 
-    list.write('<h2>Contents of this directory</h2>\n');
-    list.write ("""
-These example files are taken from the LilyPond distribution. 
-LilyPond currently only outputs TeX and MIDI.  The pictures and 
-PostScript files were generated using TeX, Ghostscript and some 
-graphics tools.  The papersize used for these examples is A4. 
-As you know, <a href="http://www.gnu.org/philosophy/gif.html">no gifs due to patent problems</a>, 
-but the PNG images should be viewable with any current browser
-<p>
-If you want an accurate impression of the output quality please <em>print
-out</em> the samples first.
-    """);
+
+
+    if inputs:
+           list.write('<h2>Contents of this directory</h2>\n');
+
+           list.write (headertext)
+    else:
+           list.write (headertext_nopics)
 
 
     for ex in inputs:
diff --git a/input/Musique-de-Table.ly b/input/Musique-de-Table.ly
new file mode 100644 (file)
index 0000000..74f23a8
--- /dev/null
@@ -0,0 +1,150 @@
+
+\header {
+composer = "Georg Philipp Telemann";
+title = "Musique de Table";
+date = "1733";
+tempo = "Maestoso";
+}
+
+%{
+
+This appeared in Uijlenspieghel, the magazine of the Dutch Horn
+Society, spring issue.
+
+It is part of 3rd production of the Table Music by Telemann. It is a
+concerto for two "Tromba Selvatica" (Wood trumpets, ie. horns.) in
+E-flat.
+
+There probably are violin parts as well. (they weren't printed in
+Uijlenspieghel)
+
+
+%}
+
+
+
+
+trombaUno = \notes \relative  c'' {
+c2. ~
+c4
+g  c |
+e2. ~ e4 c e | 
+g2. ~ g4
+f2 ~
+f4
+e2~  e4
+f2 ~ f4
+d4 e ~ |
+e8 f d4.-\trill c8
+c e e-\trill d d16 e d c  |
+c4 r r |
+r8 e f f16 g e8 e16 f | 
+d4 r r
+r8 d g g16 e f8 f16 d | 
+e16 g g e g e d e f32 g f16 d32 e d16
+e16 g g e g e d e f32 g f16 d32 e d16 |
+e16 d c d e d e d e8 fis g4 r r |
+R2.
+R2.
+r4 d2~ d4 r r R2.
+d2. ~ d 4 g, d'
+d2. ~ d4 g, d' d2. e fis g
+a4. a8 g4 ~ g8 e fis4.-\trill g8
+g g16 a b c d4 c8 b4
+r r
+g c b -\trill c r r |
+r8 [c16 b] c8 c16 d  b8 b16 c |
+a4 r r | r e2~ e4 r r |  r e2~ e4 d r | r c2 ~ c4 d r R2. |
+r4 e8 e e e e4 r r
+r8 [e e-\trill d] d16 e d c| c4 r r|
+r8 e8 f f16 g e8 e16 f |
+d8 d4 f8 e16 d c e d8 d4 f8 e16 d c e
+d4 r r |
+r8 d g g16 e f8 f16 d |
+e16 g g e g e d e f32 g f16 d32 e d16 |
+e16 g g e g e d e f32 g f16 d32 e d16 |
+e16 d c d e f e d e8 d-\trill c4 r r r8 e f f16 g e8 e16 f
+d8 d4 f8 e16 d c e d8 d4 f8 e16 d c e
+d4 r r| 
+c2. ~ c4 g c e2.~ e4 c e |
+g2. ~ g4 f2 ~ f4 e2~e4 f2~f2.
+r4 d e~ e8 f d4.-\trill c8
+c2 r4
+e16 g g e c e e c g c c g e4 r r c4-| e4-| g-| c,2.
+
+
+}
+
+
+trombaDue = \notes \relative c' {
+e2. ~e4 c e g2.~g4 e g8 c |
+e2. ~ e4 d2~d4 d2 c2. d4 g, g  |
+r4 g8 g g g e c' c g g16 e g8 |
+e4 r r
+r8 c' d8 d16 e c8 c, | g'4 r r |
+r4 r8 g d' d16 g, |
+c16 e e c   e c g c   d d g, g |
+c e e c     e c g c   d d g, g |
+c g e g     c g c g   c8 d  |
+d4 r r R2. R2. R2. |
+r4 d2 ~ d4 r r |
+g,2. ~ g4 d' g, | g2. ~ g4 d' g, | g2. ~ g4 c e | r d2 ~ d4 c4 e8. d16  |
+d4. d8 d4 |
+r8 e d4 d | d g fis-\trill | g r r |
+r8 [c,16 d] e f g4 f8 e4 r r |
+r8 [e16 d] e8 e16 f d8 d16 e
+c4 r r | R2. | r4 e2~e4 r r  | r d2 ~ d4 c4 r4 |
+r4 d2~ d4 r  r |
+r [e8 e e e] e4 r r |
+r8 [c8 c g] g16 e g8 e4 r r
+r8 c'8 d8 d16 e c8 c, g'8 g4 d'8 c16 g e c g'8 g4 d'8 c16 g e c
+g'4 r r |
+r4 r8 g d' d16 g, |
+c16 e e c   e c g c  d d g, g
+c   e e c   e c g c  d d g, g |
+[c16 g e g] [c8 c16  c] [c g g32 e32 g16] |
+e4 r r | r8 c' d d16 e c8 c, g'8 g4 d'8 c16 g e c |
+g'8 g4 d'8 c16 g e c | g'4 r r |
+e2.~e4 c e | g2.~g4 e g8 c | e2.~e4 d2 ~ d4 d2 c2. d2. r4 g,4 g r g8 g g g |
+e2 r4
+c'16 e e c g c c g e g g e c4 r r c-| e-| g-| c2. 
+}
+
+global = \notes {
+       \time 3/4;
+       s2.* 80
+       \bar "|.";
+}
+trbname = "Horn (E\\textflat)"
+trbnameI = \trbname + " 1     "
+trbnameII = \trbname + " 2     "
+
+\score {
+       \context GrandStaff <
+        \context Staff = one <
+               \trombaUno
+               \property Staff.instrument = \trbnameI
+               \property Staff.instr = " "
+               \global
+       >
+       \context Staff = two <
+               \property Staff.instrument = \trbnameII
+               \property Staff.instr = " "
+               \global
+               \trombaDue
+       >
+       >
+       \paper {
+                \translator  {
+                       \OrchestralScoreContext
+                       minVerticalAlign = 2.5*\staffheight;
+               }
+               \translator {
+                       \StaffContext
+                       \consists Staff_margin_engraver;
+               }
+
+%              castingalgorithm = \Wordwrap;
+               indent = 2. \cm;
+       }
+}
diff --git a/input/bugs/sv.ly b/input/bugs/sv.ly
new file mode 100644 (file)
index 0000000..a25db83
--- /dev/null
@@ -0,0 +1,18 @@
+
+
+
+\score{
+  \notes{ \time 13/8;
+ %    \property Voice.beamAutoBegin = "1/8"
+ %         \property Voice.beamAutoEnd = "3/8"
+    \property Voice.beamAutoEnd = "10/8"
+    \property Voice."beamAutoEnd_16" = "1/8"
+    \property Voice.beamAutoBegin = "1/4"
+
+     a8 a a a16 a16 a16 a16 a16 a16 a8 a a a a a
+     a a a a a a a a a a a a a
+     a8 a8 a8 a8 a8 a a a a a a a a
+   }
+   \paper{ linewidth = -1.;}
+}
+
index 476ff3601051f93d7b1f9efc14103233836c2ec0..45028507056410740238e872090e01e9383e1469 100644 (file)
@@ -1,7 +1,7 @@
 # input/test/Makefile
 
 depth = ../..
-examples=font20 mark knee beam-interstaff slur-interstaff denneboom sleur repeat hara-kiri  grace
+examples=font20 slur-interstaff sleur hara-kiri grace
 LOCALSTEPMAKE_TEMPLATES=mutopia
 
 include $(depth)/make/stepmake.make 
index e30a5f7633b85cd2156fdab0a685110d3368e3a9..570b34a4d8acad4f016c70e74832d401dfb16b74 100644 (file)
@@ -1,5 +1,5 @@
 \score{
-       \context GrandStaff <
+       \context PianoStaff <
        \context Staff=one \notes\relative c'{
                \stemup [c8 c \translator Staff=two \stemup c c]
                [c c c c]
@@ -22,7 +22,7 @@
        >
        \paper{
                \translator{
-                       \GrandStaffContext
+                       \PianoStaffContext
                        minVerticalAlign = 3.0*\staffheight;
                        maxVerticalAlign = 3.0*\staffheight;
                }
index a0b101780d1cd612956753c093d4d7347def1849..08c81439100cca63702af8d05c6008b884108044 100644 (file)
@@ -2,6 +2,7 @@
 
 \score {
        \notes{ 
+       
          \clef "treble"; c'1^"{treble}" \bar "||";
          \clef "french";c'1^"{french}" \bar "||";
          \clef "soprano";c'1^"{soprano}" \bar "||";
diff --git a/input/test/multi-measure-rest.ly b/input/test/multi-measure-rest.ly
new file mode 100644 (file)
index 0000000..4d42739
--- /dev/null
@@ -0,0 +1,7 @@
+
+\score { \notes { \time 3/4; \key cis; R2. R2.*5 }
+       \paper {
+       \translator { \ScoreContext SkipBars = 1; }
+       linewidth = -1.;        
+       }
+}
index 46806afd5042358b7534e0855b9a74cd93116ae6..b440c6ff43583fb912b264e431b4d12d3602141a 100644 (file)
@@ -4,7 +4,7 @@ m = \notes \relative c''{
 c1 | c2 c | c c | c c | c c | c c | c c | c c | 
 }
 
-\score{ <
+\score{ < 
   \context StaffGroup = wood <
     \context Staff = flauto <
       \property Staff.instrument = "Flauto"
@@ -53,7 +53,7 @@ c1 | c2 c | c c | c c | c c | c c | c c | c c |
     >
   >
   \context StaffGroup = strings <
-%    \context GrandStaff = violins <
+    \context GrandStaff = violins <
       \context Staff = viI <
         \property Staff.instrument = "Violin I"
         \property Staff.instr = "Vi. I"
@@ -64,7 +64,7 @@ c1 | c2 c | c c | c c | c c | c c | c c | c c |
         \property Staff.instr = "Vi. II"
         \m
       >
-%    >
+    >
     \context Staff = vla <
       \property Staff.instrument = "Viola"
       \property Staff.instr = "Vla."
@@ -88,10 +88,17 @@ c1 | c2 c | c c | c c | c c | c c | c c | c c |
     textheight = 260.\mm;
     \translator {
        \OrchestralScoreContext
-        minVerticalAlign = 2.5*\staffheight;
+        minVerticalAlign = 3.5*\staffheight; % No effect!!??
     }
     \translator { \StaffContext
        \consists "Staff_margin_engraver";
+        marginScriptPadding = 15.0;
+    }
+    \translator { \StaffGroupContext
+        minVerticalAlign = 2.5*\staffheight;
+    }
+    \translator { \GrandStaffContext
+        minVerticalAlign = 2.5*\staffheight;
     }
   }
 }
index 30c46c2ec99f019b8348d027dd80cd2a22c645ce..045f16626f8b817f5d4b3b5d731d6d45120af7a7 100644 (file)
@@ -1,5 +1,5 @@
 \score{
-       \context GrandStaff <
+       \context PianoStaff <
        \context Staff=one \notes\relative c'{
                \stemup c4( c \translator Staff=two c )c |
                \translator Staff=one
@@ -30,7 +30,7 @@
                % no slur damping
                slur_slope_damping = 10.0;
                \translator{
-                       \GrandStaffContext
+                       \PianoStaffContext
                        minVerticalAlign = 3.0*\staffheight;
                        maxVerticalAlign = 3.0*\staffheight;
                }
index 176e387f64e861460a0f022292d59554be848377..d6e8fb863e07026a211dac7469a4e4695ce9424a 100644 (file)
@@ -4,8 +4,7 @@
 
 \score {
 
-  \notes     \context PianoStaff <
-  
+  \notes \context PianoStaff <
     \context Staff = treble    {
       \property PianoStaff.instrument = "Piano "
       \property Staff.instrument = "Right " { c''4 }}
index 1fdfbf05594746022eb22e5b619882b918fad24a..1ee912c0aed6ac221b4d4bad36aec4be60816332 100644 (file)
@@ -1,4 +1,5 @@
 \property Staff.textEmptyDimension = 1
+\property Voice.textEmptyDimension = 1
 \property Staff.timeSignatureStyle = "C"
 \time 1/1;
 c''1^"timeSignatureStyle = \"C\"" 
index dc41b5de7f294dd754eaa9beb12e50f2d25e96fb..82111b9e2ef0c6b20bbff485d4bd9b4822a3ecc8 100644 (file)
@@ -134,7 +134,7 @@ Align_element::do_side_processing ()
   if (center_f)
     translate_axis ( - center_f, axis ());
 
-  dim_cache_[axis ()].invalidate ();
+  dim_cache_[axis ()]->invalidate ();
 }
 
 Align_element::Align_element()
index cd6000b464156d2b5ce33bb6fe81fd6279ff6d6e..d843dfbbbbdd825092eff2cd2a5eb370db1628fd 100644 (file)
@@ -62,8 +62,8 @@ void
 Axis_group_element::set_axes (Axis a1, Axis a2)
 {
   Graphical_axis_group::set_axes (a1,a2);
-  dim_cache_[X_AXIS].set_empty ((a1 != X_AXIS && a2 != X_AXIS));
-  dim_cache_[Y_AXIS].set_empty ((a1 != Y_AXIS && a2 != Y_AXIS));
+  dim_cache_[X_AXIS]->set_empty ((a1 != X_AXIS && a2 != X_AXIS));
+  dim_cache_[Y_AXIS]->set_empty ((a1 != Y_AXIS && a2 != Y_AXIS));
 }
 
 
index f466e1bc866b6c99a1c86f633b58739c518c8fbf..a0e33d0d8ee6375636f684fdba1958acc53ab32c 100644 (file)
@@ -40,12 +40,12 @@ void
 Bar_script_engraver::do_acknowledge_element (Item *i)
 {
   Axis other_axis = Axis((axis_ + 1)%2);
-  if (staff_side_p_ && !staff_side_p_->dim_cache_[other_axis].parent_l_) 
+  if (staff_side_p_ && !staff_side_p_->dim_cache_[other_axis]->parent_l_) 
     {
-      staff_side_p_->dim_cache_[other_axis].parent_l_
-       = &i->dim_cache_[other_axis];
-      staff_side_p_->dim_cache_[axis_].parent_l_
-       =  &i->dim_cache_[axis_];         
+      staff_side_p_->dim_cache_[other_axis]->parent_l_
+       = i->dim_cache_[other_axis];
+      staff_side_p_->dim_cache_[axis_]->parent_l_
+       =  i->dim_cache_[axis_];          
 
       staff_side_p_->add_support (i);
 
index 1d8194715678cbf4607d5c4c70787b2389d9981b..3c8f78452a8379c8a2fc196ac503e4ccb85d8718 100644 (file)
@@ -85,6 +85,6 @@ Bar::do_pre_processing ()
     }
 
   if (type_str_ =="")
-    dim_cache_[X_AXIS].set_empty (true);
+    dim_cache_[X_AXIS]->set_empty (true);
 }
   
index 53aa547cd59427ab07451c7b7c9053a01b988d59..16161061561a1d4e5848443cd95c84b2977d1fec 100644 (file)
@@ -14,7 +14,6 @@
 Base_span_bar_engraver::Base_span_bar_engraver()
 {
   spanbar_p_ =0;
-  valign_l_ =0;
   use_priority_b_ = true;
   break_priority_i_ = 0;
 }
@@ -34,7 +33,7 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
       && dynamic_cast<Bar *> (i.elem_l_)) 
     {
       bar_l_arr_.push (dynamic_cast<Bar *> (i.elem_l_));
-       
+
       if (bar_l_arr_.size() >= 2 && !spanbar_p_) 
        /*
          hmm, i do want a bracket with one staff some times, but not always
@@ -51,6 +50,7 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
         */
        {
          spanbar_p_ = get_span_bar_p();
+         spanbar_p_->dim_cache_[Y_AXIS]->parent_l_ = bar_l_arr_[0]->dim_cache_[Y_AXIS];
          String visnam =  String(name()) + "_visibility";
          
          spanbar_p_->set_elt_property (visibility_lambda_scm_sym,
@@ -63,7 +63,7 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
            }
          else
            {
-             spanbar_p_->dim_cache_[X_AXIS].parent_l_ = &bar_l_arr_[0]->dim_cache_[X_AXIS];      
+             spanbar_p_->dim_cache_[X_AXIS]->parent_l_ = bar_l_arr_[0]->dim_cache_[X_AXIS];      
            }
          
          announce_element (Score_element_info (spanbar_p_,0));
@@ -71,11 +71,6 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
            spanbar_p_-> type_str_ = bar_l_arr_[0]->type_str_;
        }
     }
-  else if  (dynamic_cast<Axis_align_spanner *> (i.elem_l_) 
-           && i.origin_grav_l_arr_.size() <= 2) 
-    {
-      valign_l_ = dynamic_cast<Axis_align_spanner *> (i.elem_l_);
-    }
 }
 
 void
@@ -85,7 +80,6 @@ Base_span_bar_engraver::do_pre_move_processing()
     {
       for (int i=0; i < bar_l_arr_.size() ; i++)
        spanbar_p_->add_bar (bar_l_arr_[i]);
-      spanbar_p_->set_align (valign_l_);
       typeset_element (spanbar_p_);
       spanbar_p_ =0;
     }
index fdf2ef5d08433da6d3524f34c509a86fa82289a6..4626c1c5ee9d1d8dd9c26492b7f0113abbc80b03 100644 (file)
@@ -50,7 +50,7 @@ Beam::add_stem (Stem*s)
 #if 0
   if (!stems_.size ())
     {
-      dim_cache_[Y_AXIS].parent_l_ = &s->dim_cache_[Y_AXIS];
+      dim_cache_[Y_AXIS]->parent_l_ = s->dim_cache_[Y_AXIS];
     }
 #endif
   stems_.push (s);
index 75191ca3449513f3e368bfa8ddbc85e275d632d1..9eb8d1b26120d52119aeefde6f0678136f34b16f 100644 (file)
@@ -18,7 +18,7 @@
 void
 Clef_item::do_pre_processing()
 {
-  dim_cache_[Y_AXIS].translate (y_position_i_ * staff_line_leading_f () / 2.0);
+  dim_cache_[Y_AXIS]->translate (y_position_i_ * staff_line_leading_f () / 2.0);
   SCM style_sym =get_elt_property (style_scm_sym);
   String style;
   if (style_sym != SCM_BOOL_F)
@@ -29,7 +29,7 @@ Clef_item::do_pre_processing()
   if (style == "transparent")
     {
       set_elt_property (transparent_scm_sym, SCM_BOOL_T);
-      dim_cache_[X_AXIS].set_empty (true);
+      dim_cache_[X_AXIS]->set_empty (true);
     }
 }
 
@@ -60,12 +60,12 @@ Clef_item::do_add_processing ()
       
          g->text_str_ = "8";
          g->style_str_ = "italic";
-         g->dim_cache_[Y_AXIS].parent_l_ = &dim_cache_[Y_AXIS];
-         g->dim_cache_[X_AXIS].parent_l_ = &dim_cache_[X_AXIS];
+         g->dim_cache_[Y_AXIS]->parent_l_ = dim_cache_[Y_AXIS];
+         g->dim_cache_[X_AXIS]->parent_l_ = dim_cache_[X_AXIS];
          add_dependency (g);   // just to be sure.
 
          Real r = do_height ()[d] - g->extent (Y_AXIS)[-d];
-         g->dim_cache_[Y_AXIS].set_offset (r);
+         g->dim_cache_[Y_AXIS]->set_offset (r);
 
          SCM my_vis = get_elt_property (visibility_lambda_scm_sym);
          if (my_vis != SCM_BOOL_F)
index 06b738e16af24720df7b84edc33113c5475eb711..0271eba2976f803a761ba851d9e68f1e81c9bf4c 100644 (file)
@@ -81,8 +81,8 @@ Encompass_info::Encompass_info (Note_column const* note, Direction dir, Slur con
 
       interstaff_f_ = align->threshold_interval_[MIN];
 
-      Dimension_cache * slur_refpoint = &slur_l->dim_cache_[Y_AXIS];
-      Dimension_cache * note_refpoint = &note->dim_cache_[Y_AXIS];
+      Dimension_cache * slur_refpoint = slur_l->dim_cache_[Y_AXIS];
+      Dimension_cache * note_refpoint = note->dim_cache_[Y_AXIS];
 
       while (slur_refpoint->parent_l_ != common)
        slur_refpoint = slur_refpoint->parent_l_;
index 831f28bc64076c751bdd3f885efb04a370c8b1a7..d7116dcf76060026f93ad17b0a6c33854201bd31 100644 (file)
@@ -59,7 +59,7 @@ G_script_column_engraver::acknowledge_element( Score_element_info inf)
   if (!thing)
     return;
   
-  Dimension_cache * parcache = thing->dim_cache_[Y_AXIS].parent_l_;
+  Dimension_cache * parcache = thing->dim_cache_[Y_AXIS]->parent_l_;
   if (!parcache || !thing)
     return ;
   
index d6f3d8b9f8677485f043382368a7cd863971999b..d16a9cb7959833d3b34a66e474933bea12657916 100644 (file)
@@ -12,7 +12,7 @@
 static G_staff_side_item *
 get_g_staff_side (Item *i)
 {
-  Graphical_element *e1 = i->dim_cache_[Y_AXIS].parent_l_->element_l ();
+  Graphical_element *e1 = i->dim_cache_[Y_AXIS]->parent_l_->element_l ();
 
   return dynamic_cast<G_staff_side_item*>(e1);
 }
index aa167cb3bc27a90f449b5adc320f7abfb5dbd933..b7afb866f52b8ee5bf7d49be21eeab189f7421f4 100644 (file)
@@ -103,9 +103,9 @@ G_script_engraver::acknowledge_element (Score_element_info inf)
        {
          G_staff_side_item * ss = dynamic_cast<G_staff_side_item*>(staff_side_p_arr_[i]);
          
-         if (!ss->dim_cache_[X_AXIS].parent_l_)
+         if (!ss->dim_cache_[X_AXIS]->parent_l_)
            {
-             ss->dim_cache_[X_AXIS].parent_l_ = &inf.elem_l_->dim_cache_[X_AXIS];
+             ss->dim_cache_[X_AXIS]->parent_l_ = inf.elem_l_->dim_cache_[X_AXIS];
            }
          ss->add_support (rh);
        }
index cf3c595b7733f4a8f5f3d9fe60d4af2c8519032f..d08a76800b270ba604ec917ee57bfff790a36579 100644 (file)
@@ -59,7 +59,7 @@ void
 G_script::do_pre_processing ()
 {
   Graphical_element * e
-    = staff_side_l_->dim_cache_[X_AXIS].parent_l_->element_l();
+    = staff_side_l_->dim_cache_[X_AXIS]->parent_l_->element_l();
   translate_axis (e->extent (X_AXIS).center (), X_AXIS);
 }
 
@@ -76,7 +76,7 @@ G_script::set_staff_side (G_staff_side_item*g)
 {
   staff_side_l_ = g;
   add_dependency (g);
-  dim_cache_[Y_AXIS].parent_l_ = & g->dim_cache_[Y_AXIS];
+  dim_cache_[Y_AXIS]->parent_l_ = g->dim_cache_[Y_AXIS];
 }
 
 Molecule*
index 865eb478add7cf4f13774e5ce48b8752f2d08d96..91a6a18195e9ae9eec64f6eb7ae2141066e126ed 100644 (file)
@@ -46,7 +46,7 @@ G_staff_side_item::set_victim (Score_element *e)
 {
   add_dependency (e);
   to_position_l_ = e;
-  to_position_l_->dim_cache_[axis_].parent_l_ = &dim_cache_[axis_];
+  to_position_l_->dim_cache_[axis_]->parent_l_ = dim_cache_[axis_];
 }
 
 void
@@ -89,7 +89,7 @@ G_staff_side_item::position_self ()
        }
     }
   else
-     common = dim_cache_[axis_].parent_l_;
+     common = dim_cache_[axis_]->parent_l_;
 
   if (dim.empty_b ())
     {
@@ -102,7 +102,7 @@ G_staff_side_item::position_self ()
     ? to_position_l_->extent (axis_)
     : Interval(0,0);
 
-  Real off = dim_cache_[axis_].relative_coordinate (common);
+  Real off = dim_cache_[axis_]->relative_coordinate (common);
 
   SCM pad = remove_elt_property (padding_scm_sym);
   if (pad != SCM_BOOL_F)
@@ -110,7 +110,7 @@ G_staff_side_item::position_self ()
       off += gh_scm2double (SCM_CDR(pad)) * dir_;
     }
   Real total_off = dim[dir_] - sym_dim[-dir_] + off;
-  dim_cache_[axis_].set_offset (total_off);
+  dim_cache_[axis_]->set_offset (total_off);
   if (fabs (total_off) > 100 CM)
     programming_error ("Huh ? Improbable staff side dim.");
 }
index b26e8055187b40bbaad7c39d978bbf5156c5b732..05b70e5cf12657a4e7b301030224bf85c19c99c2 100644 (file)
@@ -44,10 +44,10 @@ Graphical_axis_group::add_element (Graphical_element*e)
     {
       Axis a = axes_[i];
       assert (a>=0);
-      Dimension_cache * &d = e->dim_cache_[a].parent_l_;
-      assert (!d || d == &dim_cache_[a]);
-      d = &dim_cache_[a];
-      d->dependencies_l_arr_.push (&dim_cache_[a]);
+      Dimension_cache * &d = e->dim_cache_[a]->parent_l_;
+      assert (!d || d == dim_cache_[a]);
+      d = dim_cache_[a];
+      d->dependencies_l_arr_.push (dim_cache_[a]);
     }
 
   elem_l_arr_.push (e);
@@ -67,9 +67,9 @@ Graphical_axis_group::remove_element (Graphical_element*e)
   for (int i=0; i<  2; i++)
     {
       Axis a=axes_[i];
-      Dimension_cache * d = &e->dim_cache_[a];
+      Dimension_cache * d = e->dim_cache_[a];
       d->parent_l_ = 0;
-      d->dependencies_l_arr_.unordered_substitute (&dim_cache_[a], 0);
+      d->dependencies_l_arr_.unordered_substitute (dim_cache_[a], 0);
     }
 }
 
@@ -82,7 +82,7 @@ Graphical_axis_group::remove_all ()
       for (int i=0; i<  2; i++)
        {
          Axis a=axes_[i];
-         Dimension_cache * d = &e->dim_cache_[a];
+         Dimension_cache * d = e->dim_cache_[a];
          d->parent_l_ = 0;
          d->dependencies_l_arr_.clear ();
        }
index 975b1ffe7a95c2ef5c422bd72ef0e92c739816fe..10daaef6c1909723034c7d5fe1b59ca8362fe3ef 100644 (file)
 
 Graphical_element::Graphical_element ()
 {
+  dim_cache_[X_AXIS] = new Dimension_cache;
+  dim_cache_[Y_AXIS] = new Dimension_cache;
   used_b_ = false;
   init ();
 }
 
 Graphical_element::Graphical_element (Graphical_element const &s)
-  : dim_cache_ (s.dim_cache_)
 {
+  dim_cache_[X_AXIS] = new Dimension_cache (*s.dim_cache_[X_AXIS]);
+  dim_cache_[Y_AXIS] = new Dimension_cache (*s.dim_cache_[Y_AXIS]);
+
   used_b_ = true;
   init ();
 } 
@@ -26,40 +30,31 @@ Graphical_element::Graphical_element (Graphical_element const &s)
 void
 Graphical_element::init ()
 {
-  dim_cache_[X_AXIS].elt_l_ = dim_cache_[Y_AXIS].elt_l_ = this;  
+  dim_cache_[X_AXIS]->elt_l_ = dim_cache_[Y_AXIS]->elt_l_ = this;  
 }
 
 Real
 Graphical_element::absolute_coordinate (Axis a) const
 {
-  return dim_cache_[a].absolute_coordinate ();
-}
-
-Offset
-Graphical_element::absolute_offset() const
-{
-  return Offset (absolute_coordinate (X_AXIS), absolute_coordinate (Y_AXIS));
+  return dim_cache_[a]->absolute_coordinate ();
 }
 
-
-
 void
 Graphical_element::translate_axis (Real y, Axis a)
 {
-  dim_cache_[a].translate (y);
+  dim_cache_[a]->translate (y);
 }  
 
 Real
 Graphical_element::relative_coordinate (Dimension_cache*e, Axis a) const
 {
-  return dim_cache_[a].relative_coordinate (e);
+  return dim_cache_[a]->relative_coordinate (e);
 }
 
 Dimension_cache * 
 Graphical_element::common_group (Graphical_element const* s, Axis a) const
 {
-  return dim_cache_[a].common_group (&s->dim_cache_[a]);
+  return dim_cache_[a]->common_group (s->dim_cache_[a]);
 }
 
 void
@@ -73,14 +68,14 @@ Graphical_element::translate (Offset offset)
 void
 Graphical_element::set_empty (bool b)
 {
-  dim_cache_[X_AXIS].set_empty (b);
-  dim_cache_[Y_AXIS].set_empty (b);
+  dim_cache_[X_AXIS]->set_empty (b);
+  dim_cache_[Y_AXIS]->set_empty (b);
 }
 
 Interval
 Graphical_element::extent (Axis a) const
 {
-  Dimension_cache const * d = &dim_cache_[a];
+  Dimension_cache const * d = dim_cache_[a];
 
   if (d->empty_b ())
     return Interval ();
@@ -102,27 +97,29 @@ Graphical_element::do_print () const
 void
 Graphical_element::invalidate_cache (Axis a)
 {
-  dim_cache_[a].invalidate ();
+  dim_cache_[a]->invalidate ();
 }
 
 Graphical_element*
 Graphical_element::parent_l (Axis a) const
 {
-  Dimension_cache*d= dim_cache_[a].parent_l_;
+  Dimension_cache*d= dim_cache_[a]->parent_l_;
   return d ? d->elt_l_ : 0;
 }
 
 Graphical_element::~Graphical_element ()
 {
+  delete dim_cache_[X_AXIS];
+  delete dim_cache_[Y_AXIS];  
 }
 
 Dimension_cache *
 Graphical_element::common_group (Link_array<Graphical_element> gs, Axis a) const
 {
-  Dimension_cache * common = &dim_cache_[a];
+  Dimension_cache * common = dim_cache_[a];
   for (int i=0; i < gs.size (); i++)
     {
-      common = common->common_group (&gs[i]->dim_cache_[a]);
+      common = common->common_group (gs[i]->dim_cache_[a]);
     }
 
   return common;
index 47c274d758c2528a74d6825d8f7d517f794acf85..87a24103c35641b29c6436fb7cc0bce9c09b464f 100644 (file)
@@ -15,14 +15,17 @@ class Axis_align_spanner;
 /** 
 
   Make bars that span multiple "staffs". Catch bars, and span a
-  Span_bar over them if we find more than 2 bars
+  Span_bar over them if we find more than 2 bars.  Vertical alignment
+  of staffs changes the appearance of spanbars.  It is up to the
+  aligner (Vertical_align_engraver, in this case, to add extra
+  dependencies to the spanbars.
 
   */
 class Base_span_bar_engraver : public Engraver
 {
   Span_bar * spanbar_p_;
   Array<Bar*> bar_l_arr_;
-  Axis_align_spanner * valign_l_;
+
 public:
   VIRTUAL_COPY_CONS(Translator);
   
index bc60c0b41af158b4e9a511d13b3c869ee5618a71..c84a21f7177b0b095ddeb3968606288c164f8bf6 100644 (file)
@@ -25,7 +25,7 @@ class Graphical_element
 {
   void init ();
 public:
-  Dimension_cache dim_cache_[NO_AXES];
+  Dimension_cache *dim_cache_[NO_AXES];
 
   /**
      Set this if anyone points to me, or if I point to anyone.
@@ -42,7 +42,7 @@ public:
   Interval extent (Axis) const;
  
   /**
-    translate the symbol. The symbol does not have to be created yet. 
+    translate the symbol.
     */
   void translate (Offset);
   /**
@@ -52,7 +52,6 @@ public:
   void translate_axis (Real, Axis);
 
   Real relative_coordinate (Dimension_cache*group, Axis) const;
-  Offset absolute_offset() const;
   Real absolute_coordinate (Axis) const;
   /**
     Find the group-element which has both #this# and #s#
index df6222af782079a7ff5af2c664fc40b5abed6a77..ce72ec7a9fc106f8aa88d213a9750528a01f020f 100644 (file)
@@ -40,6 +40,10 @@ public:
   virtual void transpose (Musical_pitch );
   virtual void compress (Moment);
   void add_music (Music *music_p);
+
+
+  Moment cumulative_length () const;
+  Moment maximum_length () const;
 protected:
   virtual void do_print() const;
 };
diff --git a/lily/include/new-repeated-music.hh b/lily/include/new-repeated-music.hh
new file mode 100644 (file)
index 0000000..30a5076
--- /dev/null
@@ -0,0 +1,47 @@
+/*   
+  new-repeated-music.hh -- declare New_repeated_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef NEW_REPEATED_MUSIC_HH
+#define NEW_REPEATED_MUSIC_HH
+
+#include "music.hh"
+
+class New_repeated_music : public Music
+{
+public:
+  bool unfold_b_;
+  int repeats_i_;
+
+  Music * repeat_begin_p_;
+  Music_sequence * alternatives_p_;
+
+  virtual Musical_pitch to_relative_octave (Musical_pitch);
+
+  /// The duration of this piece of music
+  virtual Moment length_mom () const;
+
+
+  void print() const;
+  /// Transpose, with the interval central C to #p#
+  virtual void transpose (Musical_pitch p);
+
+  /// Scale the music in time by #factor#.
+  virtual void compress (Moment factor);
+  VIRTUAL_COPY_CONS(Music);
+
+  New_repeated_music ();
+  New_repeated_music (New_repeated_music const&);
+  ~New_repeated_music ();
+protected:
+  virtual void do_print() const;
+
+};
+
+
+#endif /* NEW_REPEATED_MUSIC_HH */
index 4b42751c0b457ea5d41e246db13a40ab8b6610d5..7bbb8d0a47dde9e36d0dbad1e248bf89b2ce7108 100644 (file)
@@ -25,6 +25,7 @@ public:
 protected:
   virtual void do_print () const;
   virtual void do_process_and_next (Moment);
+
 private:
   void start_next_element ();
 
index a027ad2fe5a6c23a000e152c24b4208871ecf6cd..f7e09f8bf837c8d253b2f69645563776658849bc 100644 (file)
@@ -39,7 +39,7 @@ private:
    */
   void start_next_element();
   void leave_element();
-  void set_Sequential_music_translator();
+  void set_sequential_music_translator();
 };
 
 #endif // SEQUENTIAL_MUSIC_ITERATOR_HH
index f55c5f8626b3eb5bbdefd5eada3bcbc3f4c47c8f..9290b5ae357088852a4429254286d79f14f392ee 100644 (file)
@@ -26,7 +26,6 @@ class Span_bar : public Bar
   Link_array<Score_element> spanning_l_arr_;
   Interval get_spanned_interval () const;
 public:
-  Real extra_x_off_;
   Span_bar();
     
   VIRTUAL_COPY_CONS(Score_element);
@@ -34,6 +33,7 @@ public:
   void set_align (Align_element *);
 protected:
   void evaluate_empty ();
+
   virtual Interval do_width() const;
   virtual void do_pre_processing();
   virtual void do_post_processing();
index 2863799a5984600b020ef3da8cada051de0689a6..7de0df59517b06d96953f7389b06a4d65d353d2b 100644 (file)
@@ -271,6 +271,7 @@ void
 Ineq_constrained_qp::print() const
 {
 #ifndef NPRINT
+  DOUT << "Ineq_constrained_qp { " << '\n';
   DOUT << "Quad " << quad_;
   DOUT << "lin " << lin_ << '\n'
        << "const " << const_term_<< '\n';
@@ -279,5 +280,6 @@ Ineq_constrained_qp::print() const
       DOUT << "constraint["<<i<<"]: " << cons_[i] << " >= " << consrhs_[i];
       DOUT << '\n';
     }
+  DOUT << "}\n"; 
 #endif
 }
index 525e1e1e2ab01f35d22eb93f1134d58b33b1effb..f74418df8db64f2e18cc3af1184d24ff4cb0e77d 100644 (file)
@@ -187,8 +187,8 @@ Item::handle_prebroken_dependents ()
          Item * broken_self = find_prebroken_piece (d);
          Item * broken_parent = parent->find_prebroken_piece (d);
 
-         broken_self->dim_cache_[X_AXIS].parent_l_ =
-           &broken_parent->dim_cache_[X_AXIS];
+         broken_self->dim_cache_[X_AXIS]->parent_l_ =
+           broken_parent->dim_cache_[X_AXIS];
 
          /*
            ugh. Should do this is after breaking?
@@ -204,8 +204,8 @@ Item::handle_prebroken_dependents ()
                programming_error ("Vertical refpoint lost!");
              else if (yparenti)
                {
-                 broken_self->dim_cache_[Y_AXIS].parent_l_ =
-                   &broken_yparent->dim_cache_[Y_AXIS];
+                 broken_self->dim_cache_[Y_AXIS]->parent_l_ =
+                   broken_yparent->dim_cache_[Y_AXIS];
                }
            }
        }
index f53c1506c37e86d50e1f77589b87bcd9383c687d..846e2614eb46ba298e8a21001fa845091cdd131c 100644 (file)
@@ -140,12 +140,17 @@ Molecule
 Lookup::simple_bar (String type, Real h) const
 {
   SCM thick = ly_symbol ("barthick_" + type);
-  Real w = 0.1 PT;
+  Real w = 0.0;
+  
   if (paper_l_->scope_p_->elem_b (thick))
     {
       w = paper_l_->get_realvar (thick);
     }
-
+  else
+    {
+      programming_error ("No bar thickness set ! ");
+      w = 1 PT;
+    }
   return filledbox (Box (Interval(0,w), Interval(-h/2, h/2)));
 }
 
index 0b2aaee70424162ae1c19b068a580fa5ce093708..b249a1b9a3a511af9b87956722b37a1023f6e8a2 100644 (file)
@@ -26,31 +26,63 @@ Multi_measure_rest::Multi_measure_rest ()
 void
 Multi_measure_rest::do_print () const
 {
+#ifndef NPRINT
   DOUT << "measures_i_ " << measures_i_;
+#endif
 }
 
+
+
+/*
+   [TODO]                                          17
+ * variable-sized multi-measure rest symbol: |====| ??
+ * build 3, 5, 6, 7, 8 symbols (how far, property?)
+       from whole, brevis and longa rests
+
+*/
 Molecule*
 Multi_measure_rest::do_brew_molecule_p () const
 {
+  Interval sp_iv;
+  Direction d = LEFT;
+  do
+    {
+      Item * col = spanned_drul_[d]->column_l ();
+
+      Interval coldim = col->extent (X_AXIS);
+
+      sp_iv[d] = coldim[-d]  ;
+    }
+  while ((flip (&d)) != LEFT);
+  Molecule *mol_p  = new Molecule;
+  Real x_off = 0.0;
+
+
+  Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS];
+
+  Real rx  = spanned_drul_[LEFT]->absolute_coordinate (X_AXIS);
   /*
-   [TODO]                                          17
-     * variable-sized multi-measure rest symbol: |====| ??
-     * build 3, 5, 6, 7, 8 symbols (how far, property?)
-       from whole, brevis and longa rests
+    we gotta stay clear of sp_iv, so move a bit to the right if
+    needed.
    */
-  Molecule* mol_p = new Molecule;
-  if (!column_arr_.size ())
-    return mol_p;
+  x_off += (sp_iv[LEFT] -  rx) >? 0;
+
+  /*
+    center between stuff.
+   */
+  x_off += sp_iv.length ()/ 2;
 
+  
   Molecule s;
   if (measures_i_ == 1 || measures_i_ == 2 || measures_i_ == 4) 
     {
-      s = (lookup_l ()->rest (- intlog2(measures_i_), 0, ""));
+      s = lookup_l ()->rest (- intlog2(measures_i_), 0, "");
       s.translate_axis (-s.extent ()[X_AXIS].length () / 2, X_AXIS);
     }
   else 
     {
-      s = (lookup_l ()->rest (-4, 0, ""));
+      s = lookup_l ()->rest (-4, 0, "");
     }
   mol_p->add_molecule (s);
   Real interline_f = staff_line_leading_f ();
@@ -58,8 +90,7 @@ Multi_measure_rest::do_brew_molecule_p () const
     {
       mol_p->translate_axis (interline_f, Y_AXIS);
     }
-
-  if (measures_i_ > 1)
+  else if (measures_i_ > 1)
     {
       Molecule s ( lookup_l ()->text ("number", to_str (measures_i_)));
 
@@ -67,6 +98,7 @@ Multi_measure_rest::do_brew_molecule_p () const
       mol_p->add_molecule (s);
     }
 
+  mol_p->translate_axis (x_off, X_AXIS);
   return mol_p;
 }
 
@@ -83,10 +115,11 @@ Multi_measure_rest::do_add_processing ()
 void
 Multi_measure_rest::do_post_processing ()
 {
-  if (column_arr_.size ())
-    translate_axis (extent (X_AXIS).length () / 2, X_AXIS);
+  if (!column_arr_.size ())
+    set_elt_property (transparent_scm_sym, SCM_BOOL_T);
 }
 
+
 void
 Multi_measure_rest::do_substitute_element_pointer (Score_element* o, Score_element* n)
 {
@@ -107,9 +140,52 @@ Array<Rod>
 Multi_measure_rest::get_rods () const
 {
   Array<Rod> a;
-  Rod r;
-  r.item_l_drul_ = spanned_drul_;
-  r.distance_f_ = paper_l ()->get_var ("mmrest_x_minimum");
-  a.push (r);
+
+  if (!(spanned_drul_[LEFT] && spanned_drul_[RIGHT]))
+    {
+      programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
+       return a;
+    }
+      Rod r;
+      r.item_l_drul_ = spanned_drul_;
+      r.distance_f_ = paper_l ()->get_var ("mmrest_x_minimum");
+      a.push (r);
+
+  
+  /*
+    also set distances in case the left or right ending of the rest is
+    a broken column. This is very common: it happens if the rest is in
+    the beginning of the line, or at the end.
+
+    TODO: merge this code with other discretionary handling code.
+
+    TODO: calc  mmrest_x_minimum (see brew_molecule_p ())
+  */
+
+  Drul_array<Item*> discretionaries;
+  Direction d = LEFT;
+  do
+    {
+      Item *i = r.item_l_drul_[d]->find_prebroken_piece (-d);
+      discretionaries[d] = i;
+      if (i)
+      {
+        Rod k (r);
+
+        k.item_l_drul_[d] = i;
+        a.push (k);
+      }
+    }
+  while ((flip (&d))!= LEFT);
+
+  if (discretionaries[LEFT] && discretionaries[RIGHT])
+    {
+      Rod k(r);
+      k.item_l_drul_ = discretionaries;
+      a.push (k);
+    }
+
+
+
   return a;
 }
index 656798d3cad2d591022ced217e2cc75a5ac2f7ed..d3949b67238bee286a31a25789e5d10dc27daa18 100644 (file)
 Moment
 Simultaneous_music::length_mom () const
 {
-  Moment dur = 0;
-  for (Cons<Music> *i = music_p_list_p_->head_; i;  i = i->next_)
-    dur = dur >? i->car_->length_mom ();
-
-  return dur;
+  return maximum_length ();
 }
 
+
+
 void
 Music_sequence::compress (Moment m)
 {
@@ -44,12 +42,7 @@ Sequential_music::Sequential_music(Music_list *p)
 Moment
 Sequential_music::length_mom () const
 {
-  Moment last=0;
-  for (Cons<Music> *i = music_p_list_p_->head_; i;  i = i->next_)
-    {
-      last += i->car_->length_mom ();
-    }
-  return  last;
+  return cumulative_length ();
 }
 
 Musical_pitch
index 6f50bd56b7471dcb02d0fc5294be996a14c78e3f..2e1a1895175d00f52665c87502291273e16aa6cf 100644 (file)
@@ -45,3 +45,24 @@ Music_sequence::add_music (Music *m_p)
 {
   music_p_list_p_->add_music (m_p);
 }
+
+Moment
+Music_sequence::cumulative_length () const
+{
+  Moment last=0;
+  for (Cons<Music> *i = music_p_list_p_->head_; i;  i = i->next_)
+    {
+      last += i->car_->length_mom ();
+    }
+  return  last;
+}
+
+Moment
+Music_sequence::maximum_length () const
+{
+  Moment dur = 0;
+  for (Cons<Music> *i = music_p_list_p_->head_; i;  i = i->next_)
+    dur = dur >? i->car_->length_mom ();
+
+  return dur;
+}
index 996cc8c5693987248ec3ebf1631dbf38777f33be..b787e2a8d528e533b311522084b2787d6facace4 100644 (file)
@@ -69,6 +69,8 @@ My_lily_parser::parse_file (String init, String s)
     }
 
   inclusion_global_array = lexer_p_->filename_str_arr_;
+
+  error_level_i_ = error_level_i_ | lexer_p_->errorlevel_i_; // ugh naming.
 }
 
 void
diff --git a/lily/new-repeated-music-iterator.cc b/lily/new-repeated-music-iterator.cc
new file mode 100644 (file)
index 0000000..66028bb
--- /dev/null
@@ -0,0 +1,41 @@
+#if 0
+/*   
+  new-repeated-music-iterator.cc --  implement New_repeated_music_iterator
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "music-iterator.hh"
+
+
+/**
+   
+ */
+class New_repeated_music_iterator : public Music_iterator
+{
+  Music_iterator * main_iter_p_;
+  Music_iterator * alternative_iter_p_;
+  int count_;
+  
+public:
+  New_repeated_music_iterator ();
+  ~New_repeated_music_iterator ();
+  
+  
+  virtual void construct_children ();
+  virtual Moment next_moment () const;
+  virtual bool ok () const;
+
+protected:
+  virtual void do_print () const;
+  virtual void do_process_and_next (Moment);
+};
+
+New_repeated_music_iterator::New_repeated_music_iterator ()
+{
+  
+}
+#endif
diff --git a/lily/new-repeated-music.cc b/lily/new-repeated-music.cc
new file mode 100644 (file)
index 0000000..c989de9
--- /dev/null
@@ -0,0 +1,104 @@
+/*   
+  new-repeated-music.cc --  implement New_repeated_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "new-repeated-music.hh"
+#include "music-list.hh"
+#include "musical-pitch.hh"
+
+New_repeated_music::New_repeated_music()
+{
+  repeat_begin_p_ = 0;
+  unfold_b_ = false;
+  repeats_i_ =0;
+  alternatives_p_ = 0;
+}
+
+New_repeated_music::New_repeated_music (New_repeated_music const &s)
+  : Music (s)
+{
+  repeats_i_ = s.repeats_i_;
+  unfold_b_ = s.unfold_b_;
+
+  repeat_begin_p_ = s.repeat_begin_p_ ? s.repeat_begin_p_->clone () : 0;
+  alternatives_p_ = s.alternatives_p_
+    ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
+}
+
+New_repeated_music::~New_repeated_music ()
+{
+  delete repeat_begin_p_;
+  delete alternatives_p_;
+}
+
+void
+New_repeated_music::do_print () const
+{
+  if (repeat_begin_p_)
+    repeat_begin_p_->print();
+  
+  if (alternatives_p_)
+    alternatives_p_->print();
+}
+
+Musical_pitch
+New_repeated_music::to_relative_octave (Musical_pitch p)
+{
+  if (repeat_begin_p_)
+    p = repeat_begin_p_->to_relative_octave (p);
+
+  if (alternatives_p_)
+    p = alternatives_p_->do_relative_octave (p, true);
+  return p;
+}
+
+
+void
+New_repeated_music::transpose (Musical_pitch p)
+{
+  if (repeat_begin_p_)
+    repeat_begin_p_->transpose (p);
+
+  if (alternatives_p_)
+    alternatives_p_->transpose (p);  
+}
+
+void
+New_repeated_music::compress (Moment p)
+{
+  if (repeat_begin_p_)
+    repeat_begin_p_->compress (p);
+
+  if (alternatives_p_)
+    alternatives_p_->compress (p);  
+}
+
+
+Moment
+New_repeated_music::length_mom () const
+{
+  Moment m =0;
+  if (unfold_b_)
+    {
+      if (repeat_begin_p_)
+       m +=  Rational (repeats_i_) * repeat_begin_p_->length_mom ();
+
+      if (alternatives_p_)
+       m += alternatives_p_->cumulative_length ();
+    }
+  else
+    {
+      if (repeat_begin_p_)
+       m +=  repeat_begin_p_->length_mom ();
+
+      if (alternatives_p_)
+       m += alternatives_p_->maximum_length ();
+    }
+  return m;
+}
+
index 64850abe4f1a101d63053ec9c72c0f6fd723fb4c..e6b06a31204cdc3ce54089486f6f1449478f7ee0 100644 (file)
@@ -863,7 +863,7 @@ property_def:
        ;
 
 scalar:
-       STRING          { $$ = new Scalar (*$1); delete $1; }
+       string          { $$ = new Scalar (*$1); delete $1; }
        | int           { $$ = new Scalar ($1); }
        ;
 
@@ -1560,3 +1560,4 @@ My_lily_parser::do_yyparse ()
 }
 
 
+
index 3b11a3e51b3e1aa3b9be970765ea8a10bc8b7a9d..7be075b6ec9a57a6720b872f3231fc82fe749647 100644 (file)
@@ -27,7 +27,7 @@ Interval
 Score_element::dim_cache_callback (Dimension_cache*c)
 {
   Score_element *  e =dynamic_cast<Score_element*>( c->element_l());
-  if(&e->dim_cache_[X_AXIS] == c)
+  if(e->dim_cache_[X_AXIS] == c)
     return e->do_width ();
   else
     return e->do_height ();
@@ -36,8 +36,8 @@ Score_element::dim_cache_callback (Dimension_cache*c)
 Score_element::Score_element()
 {
   output_p_ =0;
-  dim_cache_[X_AXIS].set_callback (dim_cache_callback);
-  dim_cache_[Y_AXIS].set_callback (dim_cache_callback); 
+  dim_cache_[X_AXIS]->set_callback (dim_cache_callback);
+  dim_cache_[Y_AXIS]->set_callback (dim_cache_callback); 
   used_b_ = false;
   pscore_l_=0;
   lookup_l_ =0;
@@ -214,8 +214,10 @@ Score_element::output_processing ()
     delete output_p_;
   
   output_p_ = do_brew_molecule_p ();
+  Offset o (absolute_coordinate (X_AXIS), absolute_coordinate (Y_AXIS));
+  
   pscore_l_->outputter_l_->output_molecule (output_p_,
-                                           absolute_offset (),
+                                           o,
                                            classname(this));
 
   pscore_l_->schedule_for_delete (this);
index 90fb553a55850b2b1d1a2390722e32dd07210ca3..8938ebd8fed904d4f5fe48a852682ff8ce0a244b 100644 (file)
@@ -145,7 +145,7 @@ Score_engraver::typeset_all()
                musical_column_l_->add_element(item_p);
            }
        }
-      if (!elem_p->dim_cache_[Y_AXIS].parent_l_)
+      if (!elem_p->dim_cache_[Y_AXIS]->parent_l_)
        scoreline_l_->add_element (elem_p);
     }
   elem_p_arr_.clear();
index 1082aa83086a12e34e81b9527c8a7442ddbc6819..463cff1ca15b27e6fa04355b73b444b5376f9e98 100644 (file)
@@ -57,7 +57,7 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
 {
   if (Item * item_l = dynamic_cast <Item *> (inf.elem_l_))
     {
-      Dimension_cache * c = &item_l->dim_cache_[X_AXIS];
+      Dimension_cache * c = item_l->dim_cache_[X_AXIS];
       if (c->empty_b () || c->parent_l_)
        return;
 
index b1a9ab61987cba7f4b72ee9b1a61f0f2a5f54277..66a479efad0599370f7ce047f8a37426ce4a0c58 100644 (file)
@@ -28,7 +28,7 @@ Sequential_music_iterator::Sequential_music_iterator ()
 void
 Sequential_music_iterator::construct_children()
 {
-  cursor_ = dynamic_cast<Sequential_music const*> (music_l_)->music_p_list_p_->head_;
+  cursor_ = dynamic_cast<Music_sequence const*> (music_l_)->music_p_list_p_->head_;
   
   while (cursor_)
     {
@@ -39,7 +39,7 @@ Sequential_music_iterator::construct_children()
        }
       else 
        {
-         set_Sequential_music_translator();
+         set_sequential_music_translator();
          break;
        }
     }
@@ -63,7 +63,7 @@ Sequential_music_iterator::start_next_element()
 }
 
 void
-Sequential_music_iterator::set_Sequential_music_translator()
+Sequential_music_iterator::set_sequential_music_translator()
 {
   if (iter_p_->report_to_l()->depth_i () > report_to_l ()->depth_i ())
     set_translator (iter_p_->report_to_l());
@@ -99,7 +99,7 @@ Sequential_music_iterator::do_process_and_next (Moment until)
          if (cursor_)
            {
              start_next_element();
-             set_Sequential_music_translator();
+             set_sequential_music_translator();
            }
          else 
            {
index 45fd7cae7bbbdd242f85c84bcdfd380ed00e6cf4..14983adb9caa6e051bc4aa44748a516c4bf25f3b 100644 (file)
@@ -25,7 +25,7 @@ void
 Simultaneous_music_iterator::construct_children()
 {
   int j = 0;
-  Simultaneous_music const *sim = dynamic_cast<Simultaneous_music const*> (music_l_);
+  Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l_);
 
   for (Cons<Music> *i = sim->music_p_list_p_->head_; i;  i = i->next_, j++)
     {
index 025d7f99f08483c47c9e62ff2d6fcc7e0d323b75..6d5e2e1767cc326e0b6c2642ceef5ce4946f34bf 100644 (file)
@@ -46,7 +46,7 @@ Single_malt_grouping_item::my_width () const
       Interval iv (il->extent (X_AXIS));
       if (!iv.empty_b ())
        {
-         Real off = il->relative_coordinate (&pc->dim_cache_[X_AXIS], X_AXIS);
+         Real off = il->relative_coordinate (pc->dim_cache_[X_AXIS], X_AXIS);
          w.unite  (iv + off);
        }
     }
index 487f2b11d427f61aa4fdddd1f7afbea96b57ea42..b9a435b4cc3e93b6116932d4ff0384790a6faaea 100644 (file)
@@ -27,15 +27,6 @@ Span_bar::do_substitute_element_pointer (Score_element*o, Score_element*n)
   spanning_l_arr_.unordered_substitute (o, n);
 }
 
-void
-Span_bar::set_align (Align_element *a)
-{
-  add_dependency (a);
-  Score_element * e = dynamic_cast<Score_element*>(a);
-  Item * i = dynamic_cast<Item*> (e);
-  e = dynamic_cast<Score_element*> (a);
-  i = dynamic_cast<Item*>(e);
-}
 
 Interval
 Span_bar::do_width () const
@@ -51,9 +42,8 @@ Span_bar::do_pre_processing ()
   Bar::do_pre_processing ();
   
   evaluate_empty ();
-  translate_axis (extra_x_off_, X_AXIS);
   
-  dim_cache_[Y_AXIS].set_empty (false); // a hack to make mark scripts work.
+  dim_cache_[Y_AXIS]->set_empty (false); // a hack to make mark scripts work.
 }
 
 void
@@ -98,8 +88,8 @@ Span_bar::get_spanned_interval () const
       Dimension_cache*common = 
        common_group (spanning_l_arr_[i], Y_AXIS);
        
-      Real y = spanning_l_arr_[i]->dim_cache_[Y_AXIS].relative_coordinate (common)  
-       -dim_cache_[Y_AXIS].relative_coordinate (common);
+      Real y = spanning_l_arr_[i]->dim_cache_[Y_AXIS]->relative_coordinate (common)  
+       -dim_cache_[Y_AXIS]->relative_coordinate (common);
 
       y_int.unite (y + spanning_l_arr_[i]->extent(Y_AXIS));
     }
@@ -124,7 +114,7 @@ Span_bar::do_brew_molecule_p () const
     }
   else
     {
-      warning("Huh? My children deflated (FIXME)");
+      programming_error("Huh? My children deflated (FIXME)");
     }
   return output;
 }
@@ -134,5 +124,4 @@ Span_bar::do_brew_molecule_p () const
 Span_bar::Span_bar ()
 {
   type_str_ = "";
-  extra_x_off_ = 0.0;
 }
index 863d33d789574bc2df41dbe40f6d1c96ae25e16e..d494cdd204afd772f9db2e93599072fdb970b442 100644 (file)
@@ -33,7 +33,7 @@ Span_bar*
 Piano_bar_engraver::get_span_bar_p () const
 {
   Span_bar *s= new Span_bar;
-  s->dim_cache_[X_AXIS].set_empty (true);
+  s->dim_cache_[X_AXIS]->set_empty (true);
   s->type_str_ = "{";
   return s;
 }
@@ -42,7 +42,7 @@ Span_bar*
 Staff_group_bar_engraver::get_span_bar_p () const
 {
   Span_bar *s= new Span_bar;
-  s->dim_cache_[X_AXIS].set_empty (true);
+  s->dim_cache_[X_AXIS]->set_empty (true);
   s->type_str_ = "[";
   return s;
 }
@@ -54,7 +54,8 @@ Staff_group_bar_engraver::acknowledge_element (Score_element_info i)
   if (Span_bar * b = dynamic_cast<Span_bar *> (i.elem_l_))
     {
       if (b->type_str_ == "{")
-       b->extra_x_off_ -=  paper_l ()->get_realvar (interline_scm_sym); // ugh
+       b->translate_axis ( -paper_l ()->get_realvar (interline_scm_sym),
+                           X_AXIS); // ugh
     }
 }
 
index d5ac3fff5f4f21456fa788fc4ba45d8191e943ce..32a047cf8f110ddbd1a498d1eda29d3179c601f3 100644 (file)
@@ -130,7 +130,8 @@ Spanner::output_processing ()
 
   output_p_ = do_brew_molecule_p ();
   Offset left_off (spanned_drul_[LEFT]->absolute_coordinate(X_AXIS), 0);
-  Offset o = absolute_offset() + left_off;
+  Offset o (absolute_coordinate (X_AXIS), absolute_coordinate (Y_AXIS));
+  o += left_off;
   pscore_l_->outputter_l_->output_molecule (output_p_, o, classname (this));
 }
 
index 94877eb9fa4396c83123b09b18c1152ef4701b03..6935bf39098654387d74e0697f5464a3532e1c41 100644 (file)
@@ -122,8 +122,8 @@ Stem_info::Stem_info (Stem*s, int mult)
 
       interstaff_f_ = align->threshold_interval_[MIN] / internote_f;
 
-      Dimension_cache * beam_refpoint = &beam_l->dim_cache_[Y_AXIS];
-      Dimension_cache * stem_refpoint = &stem_l_->dim_cache_[Y_AXIS];
+      Dimension_cache * beam_refpoint = beam_l->dim_cache_[Y_AXIS];
+      Dimension_cache * stem_refpoint = stem_l_->dim_cache_[Y_AXIS];
 
       while (beam_refpoint->parent_l_ != common)
        beam_refpoint = beam_refpoint->parent_l_;
index e673126b2bc04e7e292b9c351964e6d31f654f76..0f0a5d27d97350b0adb846fff78f729eb9b44738 100644 (file)
@@ -103,7 +103,7 @@ Text_engraver::do_process_requests ()
       Scalar empty = get_property ("textEmptyDimension", 0);
       if (empty.to_bool ())
        {
-         text->dim_cache_[X_AXIS].set_empty (true);
+         text->dim_cache_[X_AXIS]->set_empty (true);
        }
       
       announce_element (Score_element_info (text, r));
index 69f29785205cb76ce65f48176fac7c1fb2db73ff..891c1b98d128f495c456b491850be54209b04a9f 100644 (file)
@@ -11,6 +11,7 @@
 #include "vertical-align-engraver.hh"
 #include "axis-align-spanner.hh"
 #include "axis-group-spanner.hh"
+#include "span-bar.hh"
 
 Vertical_align_engraver::Vertical_align_engraver()
 {
@@ -60,8 +61,14 @@ Vertical_align_engraver::qualifies_b (Score_element_info i) const
   Translator * t =   i.origin_grav_l_arr_[0];
   int sz = i.origin_grav_l_arr_.size()  ;
 
+#if 0 
   return (sz == 1 && dynamic_cast<Translator_group*> (t))
     || (sz == 2 && dynamic_cast<Axis_group_engraver*> (t));
+#endif
+
+  Axis_group_element * elt = dynamic_cast<Axis_group_element *> (i.elem_l_);
+
+  return sz > 1 && elt && elt->axes_[0] == Y_AXIS && !elt->parent_l (Y_AXIS);
 }
 
 void
@@ -71,6 +78,10 @@ Vertical_align_engraver::acknowledge_element (Score_element_info i)
     {
       valign_p_->add_element (i.elem_l_);
     }
+  else if (dynamic_cast<Span_bar*>(i.elem_l_) && i.origin_grav_l_arr_.size ())
+    {
+      i.elem_l_->add_dependency (valign_p_);
+    }  
 }
 
 
index 123d8fb627272caf7d83fe340a9c569aeac4b9a4..45bbe4ac3ece6e3e44d1c5af509b1123d4ebadda 100644 (file)
@@ -59,7 +59,6 @@ StaffContext=\translator {
 \translator {
        \type "Engraver_group_engraver";
        \name ChoirStaff;
-       \consists "Vertical_align_engraver";
        alignmentReference = \center;   
        \consists "Staff_group_bar_engraver";
        \consistsend "Axis_group_engraver";
@@ -122,21 +121,22 @@ GrandStaffContext=\translator{
        \type "Engraver_group_engraver";
        \name GrandStaff;
        \consists "Span_bar_engraver";
-       \consists "Vertical_align_engraver";
        \consists "Piano_bar_engraver";
-       alignmentReference = \center;
-       minVerticalAlign = 1.5*\staffheight;
 
-       \consistsend "Axis_group_engraver";
+
        \accepts "Staff";
 
 };
 \translator{\GrandStaffContext}
 
 PianoStaffContext = \translator{\GrandStaffContext
+       alignmentReference = \center;
+
+       \consists "Vertical_align_engraver";
        minVerticalAlign = 3.0*\staffheight;
        maxVerticalAlign = 3.0*\staffheight;
 
+%      \consistsend "Axis_group_engraver";
        \name "PianoStaff";
        
 };
@@ -144,8 +144,7 @@ PianoStaffContext = \translator{\GrandStaffContext
 StaffGroupContext= \translator {
        \type "Engraver_group_engraver";
        \consists "Span_bar_engraver";
-       \consists "Vertical_align_engraver";
-       alignmentReference = \center;
+
        
        \consists "Staff_group_bar_engraver";
        \name StaffGroup;
@@ -175,7 +174,6 @@ StaffGroupContext= \translator {
 \translator {
        \type "Engraver_group_engraver";
        \name Lyrics;
-       \consists "Vertical_align_engraver";
        \consistsend "Axis_group_engraver";
        
        \accepts "LyricVoice";
@@ -194,7 +192,6 @@ StaffGroupContext= \translator {
 ChordNameContext = \translator {
        \type "Engraver_group_engraver";
        \name ChordNames;
-       \consists "Vertical_align_engraver";
        \accepts "ChordNameVoice";
        \consistsend "Axis_group_engraver";
        };
index 9714db87a04e8f0f9062d573ca43cd21081b69b8..5aacc264c1dcff241a3ea16f7ad561f6ab89d05e 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.15";
+\version "1.0.16";
 
 
 \include "declarations.ly"
index 3b7c183d705bc5901feec169414f4785cb40977e..0395103e5f8dea2dd83b07253e32218aeef929a4 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.15";
+\version "1.0.16";
 
 
 \include "declarations.ly"
@@ -11,6 +11,7 @@
   }
   \paper {
     linewidth=-1.0;
+       indent = 0.0;
   }  
   \midi{ }
 }
index c9c66b941d2a61b2f99f1f68056c72fef0f1629e..c18c9a85f4ded64b42fae358bb8f19ecf58ed6f5 100644 (file)
@@ -120,6 +120,7 @@ bar_kern = 3.0 * \staffline;
 bar_thinkern = 3.0 * \staffline;
 barthick_thick = 6.0* \staffline;
 barthick_thin = 1.6*\staffline;
+barthick_score = 1.6*\staffline;
 
 tuplet_thick = 1.0*\staffline;
 volta_thick = 1.6*\staffline;
index aaf527c8e987d9673064e1194ae2aed07cb2f479..d93780891c11f75ad16e0814577a23a344494d0a 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.1.41
-Inschrijf datum: 27APR99
+Versie: 1.1.42
+Inschrijf datum: 10MAY99
 Beschrijving: @FLAPTEKST@
 Trefwoorden: muziek typezetten midi notatie
 Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
 Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
-       770k lilypond-1.1.41.tar.gz 
+       770k lilypond-1.1.42.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.41.tar.gz 
+       770k lilypond-1.1.42.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 53b1a516c98e15d02126211328d89ad7fba167ec..a652441b1d4512fea8cd6024880c6d629f8b60fc 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.1.41
-Entered-date: 27APR99
+Version: 1.1.42
+Entered-date: 10MAY99
 Description: 
 LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
@@ -14,8 +14,8 @@ Author: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       770k lilypond-1.1.41.tar.gz 
+       770k lilypond-1.1.42.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.41.tar.gz 
+       770k lilypond-1.1.42.tar.gz 
 Copying-policy: GPL
 End
index 31d806e60d1ea9529cc6744a59154f99dad4de9e..af07e574468ab5cfd249917cec508262ec6fce7d 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.1.41
+Version: 1.1.42
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.41.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.42.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
index 9e15f6fed10730c0f219806ce8b6a3c470b47e63..0fdc2bdc6a86b3084dd6a38ab8cc642b952b891d 100644 (file)
@@ -62,26 +62,23 @@ def draw_brevis(expr brevwid) =
 
 enddef;
 
-save uitsteek;
- uitsteek = .25;
-def draw_ledger(expr wid)=     
-       set_char_box(uitsteek * wid, (1+ uitsteek)*wid, 
-               ledgerlinethickness#/2,ledgerlinethickness#/2);
-       pickup pencircle scaled ledgerlinethickness;
-       rt x2 = w;
-       lft x1 = -b;
-       y1 = y2 = 0;
-       draw z1 .. z2;
-enddef;
 
 fet_beginchar("Ledger ending", "ledgerending", "ledgerending")
 set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#,
                ledgerlinethickness#/2,ledgerlinethickness#/2);
-        pickup pencircle scaled ledgerlinethickness;
-       lft x1 = -b ;
+       pickup pencircle scaled 1.3 blot_diameter;
+
        rt x2 = w;
-       y1 =0; y2 =0;
-       draw z1 .. z2;
+       lft x1 = -b;
+       x3 = x2;
+       bot y1 = -d;
+       y2 = y1;
+
+       top y3 = h;
+       y4 = y3;
+       x4 = x1;
+
+       filldraw z1 --- z2 --- z3 --- z4 --- cycle ;
 fet_endchar;
 
 fet_beginchar("Brevis notehead", "-1", "brevishead")
index 58be0e457691c537c7f27a104fdb7290da68c4ea..4d38b9e1ddaedea5592e8069e4fa9b30990c0ece 100644 (file)
@@ -14,7 +14,7 @@ if test = -1:
 fi
 
 mode_setup;
-
+%
 
 input feta-macros;
 
@@ -35,9 +35,9 @@ if test = 0:
        input feta-klef;
        input feta-timesig;
 else:
-%      input feta-bolletjes;   
+       input feta-bolletjes;   
 %      input feta-banier;
-       input feta-eindelijk;
+%      input feta-eindelijk;
 %      input feta-klef;
 %      input feta-toevallig;
 %      input feta-schrift;
diff --git a/mf/feta-test11.mf b/mf/feta-test11.mf
new file mode 100644 (file)
index 0000000..4bec669
--- /dev/null
@@ -0,0 +1,21 @@
+% feta-test16
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+fet_beginfont("feta-test", 16);
+staffsize#:=11pt#;
+test:=1;
+
+% smoked cheese
+% test := -1;
+
+
+% dem piksels.
+%test := 1;
+
+input feta-generic;
+
+fet_endfont("feta");
+
+end.
+
diff --git a/mf/feta-test26.mf b/mf/feta-test26.mf
new file mode 100644 (file)
index 0000000..e51a6ce
--- /dev/null
@@ -0,0 +1,21 @@
+% feta-test16
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+fet_beginfont("feta-test", 16);
+staffsize#:=26pt#;
+test:=1;
+
+% smoked cheese
+% test := -1;
+
+
+% dem piksels.
+%test := 1;
+
+input feta-generic;
+
+fet_endfont("feta");
+
+end.
+
index 132bb62307603e756faa2f2e9fefc24295755b57..fbffbfc7e5529efef7195b2e288137e686d6f02a 100644 (file)
@@ -1,4 +1,4 @@
-This ouverture "Imellan Fjeldene" ("Between the Mountains") by 
+This ouverture "Imellem Fjeldene" ("Between the Mountains") by 
 Niels W. Gade (1788-1854) is typeset from handwritten parts 
 available at Statens Musikbibliotek, Stockholm, Sweden. 
 No score was available.
@@ -7,8 +7,23 @@ A few obvious misprints and inconsistencies between the parts
 have been corrected. This is indicated with comments in the
 different source files.
 
-The piece will be performed in Ludvika and Östervåla, March 13-14, 1999,
-by Bergslagens Kammarsymfoniker conducted by Ola Karlsson.
+The piece was performed in Ludvika and Östervåla, Sweden, 
+March 13-14, 1999, by Bergslagens Kammarsymfoniker conducted 
+by Ola Karlsson.
+
+Christian Mondrup has provided the following background on the
+piece: 
+It was composed 1850 as a ouverture for the comedy "Imellem 
+Fjeldene" by the danish poet Carsten Hauch. In the Andante 
+introduction, Gade uses a melody from the collection ``Norske 
+Folkesagn og Melodier'' (``Norwegian folksongs and melodies'') 
+by the danish composer A.P. Bergreen. The song has a norwegian 
+text ``Heimreise fraa Sæteren'' by Edvard Storm. The second 
+theme of the Allegro part might very well come from the same
+collection, namely the song ``Saag du nokke Kjærringa mi''.
+
+The music was typeset using Lilypond, the GNU Project music
+typesetter. 
 
 The score and parts may be freely copied.
 
index 6c169067992ad6f131dc75236c031dab14b42e58..39c552a780c3e0b116ace80642c87025f22361ca 100644 (file)
@@ -679,7 +679,8 @@ timpani=\notes\relative c, {
 
 \property Staff."midi_instrument" = "timpani"
 
-R2.*6 |
+r2. | % Ensure that the staff is printed on page 1 of the score.
+R2.*5 |
 f2.:32 \pp ~ |
 f2.:32 ~ |
 f2.:32 ~ |
@@ -706,22 +707,39 @@ R2 |
 f8 r r4 |
 R2 |
 f8 r r4 |
-R2*16 |
-r4 r8 c' \p |
-[c-. \< c-. c-. \! c-.] |
-c4.:8 \f r8 |
-R2 |
-r4 r8 c \p |
-c2:8 \< |
-\! c4.:8 \f r8 |
-c4:32 ~ c8 r |
+R2*14 |
+\context Staff <{\voiceone \clef "treble";
+  r4^"Tri." r8 e''' |
+  [e e e e ] | 
+  [e e e g,, ] | % In reality: e e e e | e
+  g r r4 |
+  s4. \clef treble; e''8 |
+  e2:8 |
+  [e8 e e g,,] | % In reality: e e e e | e
+  g8 r r4 }
+ {\voicetwo r2 | r |
+  r4_" Timp." r8 \clef bass; c, |
+  [c-. \< c-. c-. \! c-.] |
+  c4.:8 \f r8 |
+  R2 |
+  r4 r8 \clef bass; c \p |
+  c2:8 \< |
+  \! c4.:8 \f r8 } >|
+c,4:32 ~ c8 r |
 c4:32 ~ c8 r |
 R2*2 |
 f,4:32 \f ~ f8 r |
 f4:32 ~ f8 r |
-R2*3 |
-r4 r8 c' \p |
-c2:8 \< |
+\context Staff <{\voiceone \clef "treble";
+  [e''' e e e ] | 
+  e r r e |
+  e2:8 |
+  [e8 e e g,, ] |} % In reality: e e e e 
+ {\voicetwo r2 |
+  r2 |
+  r2 |
+  r4 r8 \clef bass; c, \p |}>
+c,2:8 \< |
 \! c4.:8 r8 |
 R2*4 |
 c4 \f r |
@@ -749,22 +767,44 @@ R2 |
 f8 r r4 |
 R2*3 |
 c'4 \fz r |
-R2*12 |
-r4 r8 f, \p |
-[f \< f f \! f ] |
-f4.:8 \f r8 |
-R2 |
-r4 r8 f \p |
-f2:8 \< |
-\! f4.:8 \f r8 |
-f4:32 \f ~ f8 r |
-f4:32 ~ f8 r |
-R2*2 |
-f4:32 \f ~ f8 r |
-f4:32 ~ f8 r |
-R2*3 |
-r4 r8 f \p |
-f2:8 |
+R2*10 |
+\context Staff <{\voiceone \clef "treble";
+  r4^"Tri." r8 e'' |
+  [e e e e ] | 
+  [e e e g,, ] | % In reality: e e e e | e4
+  g4 r4 |
+  s4. \clef treble; e''8 |
+  [e e e e ] | 
+  [e e e g,, ] | % In reality: e e e e | e4
+  g4 r4 |
+  s2 | s2 |
+  s4. \clef treble; e''8 |
+  [e e e e ] | 
+  e r r e |
+  s2 | s | s |
+  r4 r8 \clef treble; e |
+  [e e e e ] | 
+  [e e e g,, ] | % In reality: e e e e 
+}
+ {\voicetwo r2 |
+  r |
+  r4 r8 \clef bass; f, \p |
+  [f \< f f \! f ] |
+  f4.:8 \f r8 |
+  r2 |
+  r4 r8 \clef bass; f \p |
+  f2:8 \< |
+  \! f4.:8 \f r8 |
+  f4:32 \f ~ f8 r |
+  f4:32 ~ f8 r |
+  r2 |
+  r | \clef bass; 
+  f4:32 \f ~ f8 r |
+  f4:32 ~ f8 r |
+  r2 | r | r |
+  r4 r8 \clef bass; f \p |
+ }>
+f,2:8 |
 f4.:8 r8 |
 R2*2 |
 c'4 \f r |
@@ -813,20 +853,20 @@ s2*9 |
 r4 r8 \clef "treble"; c'-.^"Clar. I" |
 [bes-. a-. g-. f-. ] |
 [e-. d-. c-. ] r8 \clef "bass"; |
-s2*21 |
-r4 r8 \clef "treble"; [g''16^"oboe" \p ( a ] |
-[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] |
-[ ) f8-. e16 ( f ] ) e8-. \clef "bass"; s |
+s2*24 |
+%r4 r8 \clef "treble"; [g''16^"oboe" \p ( a ] |
+%[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] |
+%[ ) f8-. e16 ( f ] ) e8-. \clef "bass"; s |
 s2*77 |
-r4 r8 \clef "treble"; c-.^"Clar. I" |
+r4 r8 \clef "treble"; c'-.^"Clar. I" |
 [bes-. a-. g-. f-. ] |
 [e-. d-. c-. ] r8 \clef "bass"; |
-s2*25
-r4 r8 \clef "treble"; a''^"Oboe" |
-a-. [ gis-. gis-. \< g-.] |
-[g-. fis-. \! fis-. ] \clef "bass"; s8 |
+s2*28
+%r4 r8 \clef "treble"; a''^"Oboe" |
+%a-. [ gis-. gis-. \< g-.] |
+%[g-. fis-. \! fis-. ] \clef "bass"; s8 |
 s2*57 |
-r4 r8 \clef "treble"; bes,^"Vi. I" ( ] |
+r4 r8 \clef "treble"; bes'^"Vi. I" ( |
 ) bes'4. d,8 ( |
 ) d'4. c,8 ( |
 ) c'4. e,8 ( |
index f505db68425554e18e7d96e154c15dcc2915a188..4040324fe7cd336f693876c989867445b20cf6c1 100644 (file)
@@ -1,5 +1,5 @@
 \header{
-title =         "Imellan Fjeldene. Ouverture";
+title =         "Imellem Fjeldene. Ouverture";
 composer =      "Niels W Gade";
 enteredby =     "Mats Bengtsson";
 latexheaders =  "\\input global";
@@ -21,9 +21,6 @@ my_paper = \paper {
     \OrchestralPartStaffContext
     textScriptPadding = 5.0;
   }
-\translator{\VoiceContext
-\remove Auto_beam_engraver;
-}
   \translator { 
     \ScoreContext
     SkipBars = 1;
@@ -32,21 +29,26 @@ my_paper = \paper {
     textEmptyDimension = 1;
     oldTieBehavior = 1;
   }
+  \translator { \VoiceContext
+    oldTieBehavior = 1;
+    textstyle = "italic";
+    textEmptyDimension = 1;
+  }
 }
 
 \score{
   \context Staff <
     \global
     \marks
-    \oboe
-    \oboehelp
+    \flauto
+    \flautohelp
   >
   \header{
-    instrument = "Oboe";
+    instrument = "Flauto";
   }
   \paper{
     \my_paper
-    output = "oboe";
+    output = "flauto";
   }
   \midi {
     \tempo 4=120;
@@ -57,15 +59,15 @@ my_paper = \paper {
   \context Staff <
     \global
     \marks
-    \flauto
-    \flautohelp
+    \oboe
+    \oboehelp
   >
   \header{
-    instrument = "Flauto";
+    instrument = "Oboe";
   }
   \paper{
     \my_paper
-    output = "flauto";
+    output = "oboe";
   }
   \midi {
     \tempo 4=120;
@@ -210,7 +212,7 @@ my_paper = \paper {
     \timphelp
   >
   \header{
-    instrument = "Timpani";
+    instrument = "Timpani \& Triangolo";
   }
   \paper{
     \my_paper
index fc2c96224d1ec2a272f9d8c2c7fb280570cce24d..18e4e45e72bb905b1891982692d4bc770f7de55b 100644 (file)
@@ -1,5 +1,5 @@
 \header{
-title =         "Imellan Fjeldene. Ouverture";
+title =         "Imellem Fjeldene. Ouverture";
 composer =      "Niels W Gade";
 enteredby =     "Mats Bengtsson";
 latexheaders = "\\input global";
@@ -23,13 +23,13 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " +
       \property Staff.instrument = "Flauto"
       \property Staff.instr = "Fl."
       \global
+      \marks
       \flauto
     >
     \context Staff = oboe <
       \property Staff.instrument = "Oboe"
       \property Staff.instr = "Ob."
       \global
-      \marks
       \oboe
     >
     \context Staff = clarI <
@@ -68,14 +68,14 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " +
     >
   >
     \context StaffGroup = percussion <\context Staff = timpani <
-      \property Staff.instrument = "Timpani"
-      \property Staff.instr = "Timp."
+      \property Staff.instrument = "Timp. \& Triang."
+      \property Staff.instr = "Timp. \& Triang."
       \global
       \timpani
     >
   >
   \context StaffGroup = strings <
-%    \context GrandStaff = violins <
+    \context GrandStaff = violins <
       \context Staff = viI <
         \property Staff.instrument = "Violin I"
         \property Staff.instr = "Vi. I"
@@ -88,7 +88,7 @@ copyright =   "Mats Bengtsson, 1999. Free circulation permitted and " +
         \global
         \viII
       >
-%    >
+    >
     \context Staff = vla <
       \property Staff.instrument = "Viola"
       \property Staff.instr = "Vla."
@@ -119,16 +119,15 @@ copyright =       "Mats Bengtsson, 1999. Free circulation permitted and " +
     }
     \translator { \StaffContext
        \consists "Staff_margin_engraver";
-%        marginHangOnClef = 1;
-        marginScriptPadding = "52.0";
+        marginScriptPadding = "15.0";
        textstyle = "italic";
        textScriptPadding = 5.0;
         textEmptyDimension = 1;
         oldTieBehavior = 1;
     }
-%\translator{\VoiceContext
-%\remove Auto_beam_engraver; % Bug workaround!
-%}
+    \translator { \VoiceContext
+        oldTieBehavior = 1;
+    }
   }
 }
 
index 2c93948d71c0a5ca8d518ac67fd59502b53d9a34..2ad7a86eb2abb018e346e1e47b39b5d82ec07f9b 100644 (file)
@@ -61,6 +61,9 @@
 # 0.5.4: (Mats B)
 #   - .fly and .sly files in \mudelafile{} are treated as standalone Lilypond.
 #   - Fragments, .fly and .sly files are in \relative mode.
+# 0.5.5: (Mats B)
+#   - bf: Default fragments have linewidth=-1.0
+#   - Added 'singleline' and 'multiline' options.
 
 import os
 import string
@@ -267,6 +270,10 @@ class Mudela_output:
             self.code_type_override = 'sly'
         if 'nonfragment' in optlist:
             self.code_type_override = 'ly'
+        if 'singleline' in optlist:
+            self.code_type_override = 'sly'
+        if 'multiline' in optlist:
+            self.code_type_override = 'fly'
         if 'eps' in optlist:
             self.graphic_type = 'eps'
         for pt in fontsize_pt2i.keys():
@@ -291,7 +298,7 @@ class Mudela_output:
             self.file.write('\\score{\n\\notes\\relative c{')
     def close (self):
         if self.code_type == 'unknown':
-            self.code_type = 'fly'
+            self.code_type = 'sly'
         if self.code_type_override:
             self.code_type = self.code_type_override
         self.write_red_tape()
index 3be14353cb14472d98e8427a0361b7d698dcc05a..2324ac144379cb4d5b4880d71b62b54a08249290 100755 (executable)
@@ -8,6 +8,6 @@ else
     versionfile=$1;
 fi
 
-cat $versionfile| sed 's/#.*$//g'|sed 's/\([^ ]*\)[\t ]*=[ \t]*\([^ ]*\)$/#define \1 \"\2\"/g' 
+cat $versionfile| sed 's/#.*$//g'|sed 's/\([^ =]*\)[\t ]*=[ \t]*\([^ \t]*\)[ \t]*$/#define \1 \"\2\"/g' 
 echo
     
index 841db19676a3a5597ff3f4f7edbac279b6948d31..6d7b52cba4e4a1c72b3be77cd87206c3b286f746 100644 (file)
@@ -1,2 +1,3 @@
-
 #empty
+
+export TEXPICTS:=$(outdir)$(PATHSEP)$(TEXPICTS)