]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.129.jcn3
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Feb 2001 19:12:50 +0000 (20:12 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Feb 2001 19:12:50 +0000 (20:12 +0100)
36 files changed:
Documentation/header.html.in
Documentation/regression-test.tely
Documentation/user/invoking.itexi
Documentation/user/lilypond.tely
Documentation/user/refman.itely
VERSION
buildscripts/lilypond-profile.sh
debian/changelog
debian/control
debian/emacsen-startup
input/bugs/dynamic-switch.ly
input/bugs/forte.ly
input/bugs/gr-instrument.ly [new file with mode: 0644]
input/bugs/lyrics-bar.ly
input/bugs/score-dynamics.ly
input/bugs/ss.ly [new file with mode: 0644]
input/regression/dyn-line.ly
input/regression/dynamics-line.ly [new file with mode: 0644]
input/test/dynamics.ly
input/test/lyrics-bar.ly [new file with mode: 0644]
input/test/mark.ly
input/tricks/staff-container.ly [new file with mode: 0644]
lily/a2-engraver.cc
lily/align-interface.cc
lily/bar.cc
lily/dynamic-engraver.cc
lily/item.cc
lily/mark-engraver.cc
lily/note-head.cc
lily/spanner.cc
lily/staff-symbol-referencer.cc
ly/engraver.ly
ly/params.ly
make/ly-rules.make
scm/grob-description.scm
scm/interface-description.scm

index ce6b4db7fca293fed5e1e201bec9d973525ba914..05a32d05aebb7911421912692308c8b8736871aa 100644 (file)
@@ -53,7 +53,7 @@ which substitutes some @AT_VARIABLES@ as well.
        <a href="http://appel.lilypond.org/wiki?LilyPondFaqs">Full FAQ</a><br>
        <a href="@TOP@Documentation/user/out-www/lilypond/lilypond.html">User manual</a><br>
        <a href="@TOP@Documentation/out-www/regression-test.html">Regression Test</a><br>
-       <a href="http://appel.lilypond.org/wiki?LilyPondToDo">To do</a><br>
+       <a href="@TOP@Documentation/user/out-www/lilypond-internals/lilypond-internals.html">Documentation of internals</a><br>
 <br>
       </td></tr>
       <tr><td bgcolor="#e8e8ff">
index 5e995df80b670f6017fade3e9a0b164a6d85c944..fc18c140bd3f7c6b1140102bfa20b046e87a3dd8 100644 (file)
@@ -51,7 +51,7 @@ and documenting bugfixes.
 
 @lilypondfile[printfilename]{staccato-pos.ly}
 
-@lilypondfile[printfilename]{dyn-line.ly}
+@lilypondfile[printfilename]{dynamics-line.ly}
 
 @lilypondfile[printfilename]{arpeggio.ly}
 
index 55a3b804067d2f127d76e977da6f7d84624ba054..e5e8dd30e678edf5f39f8f926eab066b86714092 100644 (file)
 @item -f,--format=
 Output format for sheet music. Choices are tex (for @TeX{}
 output), ps (for PostScript) and scm (for a Scheme
-dump)
+dump).
+
+For processing both the @TeX{} and the PostScript output, you must
+have appropriate environment variables set.  For @TeX{}, you have to
+set @var{MFINPUTS} and @var{TEXINPUTS} to point to the directory
+containing LilyPond metafont and .tex files.  For processing the
+PostScript with Ghostscript, you have to set @var{GS_FONTPATH} to
+point to the directory containing LilyPond @file{pfa} files.
+
+Scripts to do this are included in
+@file{buildscripts/out/lilypond-profile} (for sh shells) and
+@file{buildscripts/out/lilypond-login} (for C-shells), and should
+normally be run as part of your login process.
+
 
 @item -h,--help
 Show a summary of usage.
index 78a8c0bb85fab49970d72232e89bb52cd5bcee02..93660837faa6bbab503107e2a4f5d231f6284ce3 100644 (file)
@@ -45,6 +45,13 @@ Copyright 1999 Han-Wen Nienhuys, Jan Nieuwenhuizen and Adrian Mariano
 
 @end ifinfo
 
+@ifhtml
+
+This document is also available as a @uref{../lilypond.ps.gz,gzipped
+postscript file}.
+
+@end ifhtml
+
 @ifnottex
 @node Top
 @c FIXME: this should not be necessary...
index 54f4fa6707cf697c68cce8aa093d644ec73d6c05..917ab40816072682a823b23c4afa9f42a3151446 100644 (file)
    fix all FIXMEs
 
    Rhythm staff (clef, x-notehead)
-   \partcombine: ->  orchestral part-HOWTO.
+
    markup text
+
    postscript, scheme output?
+
    (links to?) using/existance of ly2dvi, lilypond-book
+
 @end ignore
 
 
@@ -42,6 +45,7 @@ has been revised for LilyPond 1.3.125
 * Lyrics::                      
 * Chords::                      
 * Writing parts::               
+* Custodes::                    
 * Page layout::                 
 * Sound::                       
 * Music entry::                 
@@ -99,7 +103,7 @@ design of the program.  This manual is ordered in terms of user
 tasks. With each concept will be explained to which of the three parts
 it belongs.
 
-LilyPond input can be classified  into three types:
+LilyPond input can be classified into three types:
 @itemize @bullet
   @item musical expressions: a musical expression is some combination of
 rest, notes, lyrics
@@ -162,7 +166,7 @@ automatically generated documentation.
 
 
 
-@c .  {Repeat}
+@c .  {Repeats}
 @node Repeats
 @section Repeats
 
@@ -275,10 +279,12 @@ the specified number of repeats.
 
 
 As you can see, LilyPond doesn't remember the timing information, nor
-are slurs or ties repeated. We hope to fix this after 1.4.
+are slurs or ties repeated, so you have to reset timing information
+after a repeat, eg using bar-checks, @code{Score.measurePosition} or
+@code{\partial}. We hope to fix this after 1.4.
 
 It is possible to nest @code{\repeat}, although it probably is only
-meaningful for nested repeats.
+meaningful for unfolded repeats.
 
 @node Manual repeat commands
 @subsection Manual repeat commands
@@ -646,6 +652,9 @@ major key, e.g., @code{\minor} is defined as 3.  The standard mode names
 @code{\ionian}, @code{\locrian}, @code{\aeolian}, @code{\mixolydian},
 @code{\lydian}, @code{\phrygian}, and @code{\dorian} are also defined.
 
+This command sets @code{Staff.keySignature}. 
+
+@cindex @code{keySignature}
 
 @c .   {Clef changes}
 @subsubsection Clef changes
@@ -664,8 +673,48 @@ Short-cut for
 
 Supported clef-names include 
 
-[todo]
+@itemize @bullet
+@item treble, violin, G, G2: G clef on 2nd line
+@item french: G clef on 1st line
+@item soprano: C clef on 1st line
+@item mezzosoprano: C clef on 2nd line
+@item alto: C clef on 3rd line
+@item tenor: C clef on 4th line
+@item baritone: C clef on 5th line
+@item varbaritone: F clef on 3rd line
+@item bass, F: F clef on 4th line
+@item subbass: F clef on 5th line
+@item percussion: percussion clef
+@end itemize
 
+[todo: ancient clefs]
+
+Supported associated symbols (for Staff.clefGlyph) are:
+
+@itemize @bullet
+@item clefs-C: modern style C clef
+@item clefs-F: modern style F clef
+@item clefs-G: modern style G clef
+@item clefs-vaticana_do: Editio Vaticana style do clef
+@item clefs-vaticana_fa: Editio Vaticana style fa clef
+@item clefs-medicaea_do: Editio Medicaea style do clef
+@item clefs-medicaea_fa: Editio Medicaea style fa clef
+@item clefs-mensural1_c: modern style mensural C clef
+@item clefs-mensural2_c: historic style small mensural C clef
+@item clefs-mensural3_c: historic style big mensural C clef
+@item clefs-mensural1_f: historic style traditional mensural F clef
+@item clefs-mensural2_f: historic style new mensural F clef
+@item clefs-mensural_g: historic style mensural G clef
+@item clefs-hufnagel_do: historic style hufnagel do clef
+@item clefs-hufnagel_fa: historic style hufnagel fa clef
+@item clefs-hufnagel_do_fa: historic style hufnagel combined do/fa clef
+@item clefs-percussion: modern style percussion clef
+@end itemize
+
+@emph{Modern style} means "as is typeset in current editions".
+@emph{Historic style} means "as was typeset or written in contemporary
+historic editions".  @emph{Editio XXX style} means "as is/was printed in
+Editio XXX".
 
 @c .  {Time signature}
 @node Time signature
@@ -751,6 +800,7 @@ set different shift values.
 @menu
 * Beam::                        
 * Slur ::                       
+* Phrasing slur::               
 * Ornaments::                   
 * Grace notes::                 
 * Bar check::                   
@@ -873,11 +923,6 @@ FIXME
 
 @menu
 * Slur attachments::            
-* Tie::                         
-* Tuplets::                     
-* Text spanner::                
-* Ottava::                      
-* Span requests::               
 @end menu
 
 A slur connects chords and is used to indicate legato.  Slurs avoid
@@ -1005,6 +1050,14 @@ note in the phrasing slur.
 
 
 @c .   {Tie}
+@menu
+* Tie::                         
+* Tuplets::                     
+* Text spanner::                
+* Ottava::                      
+* Span requests::               
+@end menu
+
 @node Tie
 @subsubsection Tie
 
@@ -2210,6 +2263,8 @@ bar numbering
 
 tranposing midi property.
 
+instrument names
+
 ] 
 
 @c .   {Rehearsal marks}
@@ -2218,16 +2273,29 @@ tranposing midi property.
 @cindex Rehearsal marks
 @cindex mark
 @cindex @code{\mark}
+@cindex @code{Mark_engraver}
 
 @example
   \mark @var{unsigned};
-@cindex @code{Mark_engraver}
   \mark @var{string};
+  \mark ; 
 @end example
 
-Prints a mark over or under the staff.  
+With this command, you can print a rehearsal mark above the system. You
+can provide a number, a string or a markup text as argument. If there is
+no argument, the property @code{rehearsalMark} is used and automatically
+incremented.
 
-[TODO: automatic increments]
+@lilypond[fragment,verbatim]
+\relative c'' {
+  c1 \mark "A2";
+  c1 \mark ; 
+  c1 \mark ; 
+  c1 \mark "12";
+  c1 \mark #'(music "scripts-segno") ;
+  c1
+}
+@end lilypond
 
 @node Transpose
 @subsection Transpose
@@ -2290,6 +2358,65 @@ multimeasure rest.
 
 @cindex condensing rests
 
+@c . {Custodes}
+@node Custodes
+@section Custodes
+@cindex Custos
+@cindex Custodes
+
+A @emph{custos} (plural: @emph{custodes}; latin word for "guard") is a
+staff context symbol that appears at the end of a staff line.  It
+anticipates the pitch of the first note(s) of the following line and
+thus helps the player or singer to manage line breaks during
+performance, thus enhancing readability of a score.
+
+@quotation
+@lilypond[verbatim]
+\score {
+  \notes { c'1 d' e' d' \break c' d' e' d' }
+  \paper {
+    \translator {
+      \StaffContext
+      \consists Custos_engraver;
+      Custos \override #'style = #'mensural;
+    }
+  }
+}
+@end lilypond
+@end quotation
+
+Custodes were frequently used in music notation until the 16th century.
+There were different appearences for different notation styles.
+Nowadays, they have survived only in special forms of musical notation
+such as via the editio vaticana dating back to the beginning of the 20th
+century.
+
+For typesetting custodes, just put a @code{Custos_engraver} into the
+@code{StaffContext} when declaring the @code{\paper} block.  In this
+block, you can also globally control the appearance of the custos symbol
+by setting the custos @code{style} property.  Currently supported styles
+are @code{vaticana}, @code{medicaea}, @code{hufnagel} and
+@code{mensural}.
+
+@quotation
+\paper @{
+  \translator @{
+      \StaffContext
+      \consists Custos_engraver;
+      Custos \override #'style = #'mensural;
+  @}
+@}
+@end quotation
+
+The property can also be set locally, for example in a @code{\notes}
+block:
+
+@quotation
+\notes @{
+  \property Staff.Custos \override #'style = #'vaticana
+  c'1 d' e' d' \break c' d' e' d'
+@}
+@end quotation
 
 @c . {Page layout}
 @node Page layout
@@ -3614,15 +3741,15 @@ you need to know exactly how the backend works. Example:
 
 @lilypond[fragment,verbatim]
 \relative c'' { c4
-        \context Staff \outputproperty
-               #(make-type-checker 'note-head-interface)
-               #'extra-offset = #'(0.5 . 0.75)
-<c8 e g> }
+  \context Staff \outputproperty
+  #(make-type-checker 'note-head-interface)
+  #'extra-offset = #'(0.5 . 0.75)
+  <c8 e g> }
 @end lilypond
 
 This selects all note heads occurring at current staff level, and sets
-the @code{extra-offset} of those heads to @code{(0.5,0.75)}, shifting them
-up and right.
+the @code{extra-offset} of those heads to @code{(0.5,0.75)}, shifting
+them up and right.
 
 Use of this feature is entirely on your own risk: if you use this, the
 result will depend very heavily on the implementation of the backend,
diff --git a/VERSION b/VERSION
index 40479530b4678a27a43dbcf77ee9948092708edf..50b9768c168a108407155964e252a8f16f32f6e6 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=129
-MY_PATCH_LEVEL=jcn2
+MY_PATCH_LEVEL=jcn3
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index f2083862dea1dfe89f225c2defb5d81787cd8998..7dbb5dd4673aa41a47e1309c9f2440fddd62997e 100755 (executable)
@@ -11,6 +11,8 @@ LILYPONDPREFIX="@datadir@"
 MFINPUTS="@datadir@/mf:"${MFINPUTS:=":"}
 TEXINPUTS="@datadir@/tex:@datadir@/ps:"${TEXINPUTS:=":"}
 
+
+## gs_lib ??? 
 export LILYINCLUDE LILYPONDPREFIX MFINPUTS TEXINPUTS GS_LIB GS_FONTPATH
 
        
index 6d558f8a7c8cf1d1b4623860ffa51fd5f7d5b7ee..215774e68d3c143773cbbdf4c1d66f266850323b 100644 (file)
@@ -1,3 +1,26 @@
+lilypond1.3 (1.3.129-1) unstable; urgency=low
+
+  * In memory of Werner Icking + (August 26, 1943 - February 8, 2001),
+    a dear friend, a kind educator, and a hard worker in sharing beautiful
+    typeset music to the world.  (Maintainer of the GMD Music Archive,
+    http://www.gmd.de/Misc/Music/).
+
+  * New upstream release.
+  * Upstream has changed from "lilypond-mode" to the "studly caps name"
+    "LilyPond-mode".  Fixed /etc/emacs/site-start.d/50lilypond1.3.el
+    (debian/emacsen-startup).  Thanks to Christophe Rhodes for the bug
+    report.  Closes: Bug#83732.
+  * Added "Build-Conflicts: lilypond, lilypond1.3" to prevent old
+    lilypond font files from potentially interfering with the build on
+    other Debian ports autobuilders.
+  * Built with libguile-dev (1:1.4-9) or newer to ensure correct
+    linkage to libqthreads.so.9.  Also updated the Build-Depends and
+    Depends fields accordingly.  Thanks to guile1.4 package maintainer
+    Rob Browning for his notification and to Daniel Burrows for his bug
+    report.  Closes: Bug#85896.
+
+ -- Anthony Fok <foka@debian.org>  Sat, 10 Feb 2001 01:38:36 -0700
+
 lilypond1.3 (1.3.121-1) unstable; urgency=low
 
   * New upstream release.
index 182166b1f1f8f1af3a446d1bdebdda7904bcff32..d50d51b55fb56142b723cbf6d6770b3c0336cf24 100644 (file)
@@ -1,5 +1,6 @@
 Source: lilypond1.3
-Build-Depends: debhelper (>= 2.0.72), python-base (>= 1.5.2-4), libguile9-dev, tetex-bin, libkpathsea-dev, tetex-extra, flex, bison, texinfo (>= 4.0-1), bibtex2html, groff, gs, netpbm, pnmtopng, m4, gettext (>= 0.10.35-13)
+Build-Depends: debhelper (>= 2.0.72), python-base (>= 1.5.2-4), libguile-dev (>= 1:1.4-9), tetex-bin, libkpathsea-dev, tetex-extra, flex, bison, texinfo (>= 4.0-1), bibtex2html, groff, gs, netpbm, pnmtopng, m4, gettext (>= 0.10.35-13)
+Build-Conflicts: lilypond, lilypond1.3
 Section: tex
 Priority: optional
 Maintainer: Anthony Fok <foka@debian.org>
@@ -9,7 +10,7 @@ Package: lilypond1.3
 Architecture: any
 Replaces: lilypond
 Provides: lilypond
-Depends: ${shlibs:Depends}, tetex-bin (>= 1.0.5-1), python-base (>= 1.5.2-4), guile
+Depends: ${shlibs:Depends}, tetex-bin (>= 1.0.5-1), python-base (>= 1.5.2-4), guile1.4
 Recommends: tetex-extra (>= 1.0-1)
 Conflicts: lilypond, musixtex-fonts
 Description: A program for printing sheet music.
index 2a3812eeed7edb3f819604c9acec4080273ebdb9..0ce6460c08cd3c0760110578ff1a446b68d3fe7e 100644 (file)
@@ -1,3 +1,3 @@
-(autoload 'lilypond-mode "lilypond-mode" nil t)
-(setq auto-mode-alist (cons '("\\.ly$" . lilypond-mode) auto-mode-alist))
-(add-hook 'lilypond-mode-hook (lambda () (turn-on-font-lock)))
+(autoload 'LilyPond-mode "lilypond-mode" nil t)
+(setq auto-mode-alist (append '(("\\.ly$" . LilyPond-mode) auto-mode-alist)))
+(add-hook 'LilyPond-mode-hook (lambda () (turn-on-font-lock)))
index 0c2a69f763924d7b1770e2ae3676e104c1bd6ab8..543ffa9a40bd7e12f4e196ae016836eb1d6b4735 100644 (file)
@@ -1,7 +1,7 @@
 \score{
        \context Staff <
-               \context Voice=one\skip 1;
-               \context Voice=two\skip 1;
+               \context Voice=one \skip 1;
+               \context Voice=two \skip 1;
                \context Voice=one \partcombine Voice
                        \context Thread=one \notes\relative c'' {
                                c2 \clef bass; c2
index bed65d14d7c391b5fa9630aa34649ec54b81f15f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,10 +0,0 @@
-
-% y-pos of f is wrong
-
-\score { 
-   \notes \relative c' \context Voice = viola {
-       <c4-\f g' c>
-       \stemDown g'8. b,16
-       s1 s2. r4
-       g }
-}
diff --git a/input/bugs/gr-instrument.ly b/input/bugs/gr-instrument.ly
new file mode 100644 (file)
index 0000000..1530f76
--- /dev/null
@@ -0,0 +1,42 @@
+%{
+instrument names on grandstaffs. GR is centered on entire score
+%}
+
+\version "1.3.129"
+\include "paper20.ly"
+\header{
+        latexpackages = "amsmath";
+}
+
+\score{
+  \notes <
+  \context Staff = sa {\property Staff.instrument = "A" g,2 c''''2}
+  \context Staff = sb {\property Staff.instrument = "B" g,2 c''''2}
+  \context GrandStaff=gs <
+    \property GrandStaff.instrument = "Gr"
+    \context Staff = ga {\property Staff.instrument = "" c''1 }
+    \context Staff = gb {\property Staff.instrument = "" c''1 }
+  >
+  \context Staff = sc {\property Staff.instrument = "foobar"
+% "\small$\mathrm{\genfrac{}{}{0pt}{0}{C}{D}}$"
+
+<g'1 c''> }
+  \context Staff = sd {\property Staff.instrument = "E" c''1 }
+
+  >
+  \paper{
+    \translator { 
+      \StaffContext
+      \consists "Instrument_name_engraver";
+    }
+    \translator { 
+      \GrandStaffContext
+      \consists "Instrument_name_engraver";
+    }
+
+  }
+}
+
+
+
+
index ec0309b3221556affad21dda2e0a2252dc9aef45..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,39 +0,0 @@
-\header{
-texidoc="
-Adding a @code{Bar_engraver} to the LyricsVoice context makes sure that
-lyrics don't collide with barlines.
-";
-}
-
-\score {
-       \context StaffGroup <
-       \notes \context Staff {
-               b1 b1 \bar "|.";
-       }
-       \lyrics\context Lyrics <
-               \context LyricsVoiceWithBars {
-%                      thisContextHasSpanBarEngraver1  added
-                       ThisContextCertainlyHasSpanBarEngraverAddedButTheresSomethingFunny1.  Here.
-               }
-               \context LyricsVoice {
-                       this4 one has no SpanBarEngraverAddedToContext1
-               }
-       >
-       \notes \context Staff = SB { b1 b1 }
-       >
-       \paper {
-               linewidth = -1.0\cm;
-               \translator {
-                       \LyricsContext
-                       \consists "Span_bar_engraver";
-                       \accepts "LyricsVoiceWithBars";
-               }
-               \translator {
-                       \LyricsVoiceContext
-                       \name "LyricsVoiceWithBars";
-               }
-               \translator {
-                       \LyricsVoiceContext
-               }
-       }
-}
index 9389c525a9a6b7ca4aa23ef3410ccc63ca6a7dca..cec828c53cee6e81873cee169492dd024ced9041 100644 (file)
@@ -1,19 +1,32 @@
-% dynamics collide with staff
+% dynamics should not collide with staff
+% dynamics (of two voices) should not collide with eachother
 
 \header {
 texidoc="Template for part-combining orchestral scores";
 }
 
 
-End = { \skip 1*6; }
+End = { \skip 1*8; }
 violoncello = \notes\relative c'' {
   c1\ff d e \break
   c1\ff d e \break
+  
+  \property Voice.crescendoText = #"cresc."
+  \property Voice.crescendoSpanner = #'dashed-line
+  g4\p\< r r r8 g(|
+  )c,4 r r r8 c|
+  [\!f8\sf(\>as f as][f g d)\!g]|
 }
 
 contrabasso = \notes\relative c'' {
   c1\pp d e
   c2\pp c d1 e
+  
+  \property Voice.crescendoText = #"cresc."
+  \property Voice.crescendoSpanner = #'dashed-line
+  g4\p\< r r r8 g(|
+  )c,4 r r r8 c|
+  [\!f8\sf(\>as f as][f g d)\!g]| 
 }
 
 flautiStaff =  \notes \context Staff = flauti <
diff --git a/input/bugs/ss.ly b/input/bugs/ss.ly
new file mode 100644 (file)
index 0000000..f0585ae
--- /dev/null
@@ -0,0 +1,14 @@
+\version "1.3.129"
+\include "paper16.ly"
+\score{
+  \notes \context Staff = pr {
+         \context Voice < a b c' e'>
+  }
+  \paper{
+    \translator {
+        \StaffContext
+        StaffSymbol \override #'staff-space = #1.3
+    }
+  }
+}
+
index 31f5dc597b0f2d83500d9ce0cc6695b2ce764ab1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,27 +0,0 @@
-\header{
-texidoc="
-Dynamics appear below or above the staff.  If multiple dynamics are
-linked with (de)crescendi, they should be on the same line.
-";
-}
-\score{
-\notes\relative c''{
-a1\fff\> \!c,,\pp a'' a\p
-
-
-% We need this to test if we get two Dynamic line spanners
-a
-
-% because do_removal_processing ()
-% doesn't seem to post_process elements
-d\f
-
-a
-
-}
-\paper{
-}
-\midi{
-\tempo 1 = 60;
-}
-}
diff --git a/input/regression/dynamics-line.ly b/input/regression/dynamics-line.ly
new file mode 100644 (file)
index 0000000..70bdeb3
--- /dev/null
@@ -0,0 +1,29 @@
+\header{
+texidoc=" Dynamics appear below or above the staff.  If multiple
+dynamics are linked with (de)crescendi, they should be on the same
+line. Isolated dynamics may be forced up or down.  ";
+}
+
+\version "1.3.122";
+
+\score{
+\notes\relative c''{
+a1^\sfz
+a1-\fff\> \!c,,-\pp a'' a-\p
+
+% We need this to test if we get two Dynamic line spanners
+a
+
+% because do_removal_processing ()
+% doesn't seem to post_process elements
+d\f
+
+a
+
+}
+\paper{
+}
+\midi{
+\tempo 1 = 60;
+}
+}
index 05fca1aacab07f5506e9c9af928b5b7451b50239..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,10 +0,0 @@
-\score { 
-  \context Voice \notes\relative c {
-    c''4 \p c \ff  c^\ff 
-       \property Voice.dynamicPadding = 10
-       c \p \<  \! c \ff\> c \!c-\p 
-       
-  }
-  \paper { }  
-  \midi { }
-}
diff --git a/input/test/lyrics-bar.ly b/input/test/lyrics-bar.ly
new file mode 100644 (file)
index 0000000..7be6f4c
--- /dev/null
@@ -0,0 +1,37 @@
+\header{
+texidoc="
+Adding a @code{Bar_engraver} to the LyricsVoice context makes sure that
+lyrics don't collide with barlines.
+";
+}
+
+\score {
+       \context StaffGroup <
+       \notes \context Staff {
+               b1 b1 \bar "|.";
+       }
+       \lyrics\context Lyrics <
+               \context LyricsVoiceWithBars {
+%                      thisContextHasSpanBarEngraver1  added
+                       ThisContextCertainlyHasSpanBarEngraverAddedButTheresSomethingFunny1.  Here.
+               }
+               \context LyricsVoice {
+                       this4 one has no SpanBarEngraverAddedToContext1
+               }
+       >
+       \notes \context Staff = SB { b1 b1 }
+       >
+       \paper {
+               linewidth = -1.0\cm;
+               \translator {
+                       \LyricsContext
+                       \accepts "LyricsVoiceWithBars";
+               }
+               \translator {
+                       \LyricsVoiceContext
+                       \consists "Bar_engraver";
+                       \name "LyricsVoiceWithBars";
+               }
+               
+       }
+}
index 948f23019772f53fd0daeb3bd95ac8e0158e11e2..538cdfbf9b41053fefeec9369a9a2788a4e615e2 100644 (file)
@@ -3,6 +3,7 @@
 global =  \notes {
   s1 | \mark "A";
   s1 | \mark ; 
+  s1 | \mark ; 
   s1 | \mark "12";
   s1 | \mark ; 
   s1 | \mark "A2";
diff --git a/input/tricks/staff-container.ly b/input/tricks/staff-container.ly
new file mode 100644 (file)
index 0000000..fb67f54
--- /dev/null
@@ -0,0 +1,36 @@
+
+\header {
+
+ texidoc = "By splitting the grouping (Axis_group_engraver) and
+creation functionality into separate contexts, you can override
+interesting things. You can also drop the \consistsend feature.";
+
+}
+
+
+\score  {
+ \notes <
+       \context StaffContainer = SA { \property StaffContainer.StaffSymbol \set
+         #'staff-space = #0.8
+         \context Staff {        c4 c4 } }
+       \context StaffContainer =SB { \context Staff { d f  } }
+ >
+
+\paper {
+       \translator {
+               \ScoreContext
+               \accepts StaffContainer;
+               \denies Staff;
+       }
+       \translator {
+               \type Engraver_group_engraver;
+               \consists "Axis_group_engraver";
+               \accepts "Staff";
+               \name StaffContainer;
+
+       }
+       \translator {
+               \StaffContext
+               \remove Axis_group_engraver;
+       }
+}
index 54800598068fae9a65514abaecfa2d0d93fc4c8b..5df8930a30054f7e3cd364dc260e3e666fa6f36b 100644 (file)
@@ -134,8 +134,9 @@ A2_engraver::acknowledge_grob (Grob_info i)
       || Slur::has_interface (i.elem_l_)
       /*
        Usually, dynamics are removed by *_devnull_engravers for the
-       second voice.  We don't want all dynamics for the first voice
-       to be placed above the staff.  */
+       second voice.  On the one hand, we don't want all dynamics for
+       the first voice to be placed above the staff.  On the other
+       hand, colliding of scripts may be worse */
 #if 0
       || i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))
       || i.elem_l_->has_interface (ly_symbol2scm ("text-interface"))
index da303bd33e2b2233a8205933ad53cf2896cf0fae..d335966f7f0e6abf33ca43e8922ebdad1e801873 100644 (file)
@@ -107,7 +107,7 @@ Align_interface::align_to_extents (Grob * me, Axis a)
 
   Link_array<Grob> elems;
   Link_array<Grob> all_grobs
-    = Pointer_group_interface__extract_elements (  me, (Grob*) 0, "elements");
+    = Pointer_group_interface__extract_elements (me, (Grob*) 0, "elements");
   for (int i=0; i < all_grobs.size(); i++) 
     {
       Interval y = all_grobs[i]->extent(me, a);
@@ -122,7 +122,6 @@ Align_interface::align_to_extents (Grob * me, Axis a)
              && gh_number_p (gh_cdr (min_dims)))
            {
              y.unite (ly_scm2interval (min_dims));
-             
            }
          
          SCM extra_dims = e->remove_grob_property ("extra-space");
index b74122d0725705f5c400b85d610512884c2fd4cb..0ee7890743f93e6a0ef6b325480b18f957a8b5c4 100644 (file)
@@ -197,8 +197,15 @@ Bar::get_staff_bar_size (SCM smob)
   SCM size = me->get_grob_property ("bar-size");
   if (gh_number_p (size))
     return gh_double2scm (gh_scm2double(size)*ss);
-  else
+  else if (Staff_symbol_referencer::staff_symbol_l (me))
     {
+      /*
+       If there is no staff-symbol, we get -1 from the next
+       calculation. That's a nonsense value, which would collapse the
+       barline so we return 0.0 in the next alternative.
+      */
       return gh_double2scm ((Staff_symbol_referencer::line_count (me) -1) * ss);
     }
+  else
+    return gh_int2scm (0);
 }
index ef3576f881d273694f525a2472376ddd6b9f1b42..83b2def70ad042d47db7656ca8bd77909929da87 100644 (file)
@@ -65,8 +65,7 @@ protected:
   virtual void acknowledge_grob (Grob_info);
   virtual bool try_music (Music *req_l);
   virtual void stop_translation_timestep ();
-
-  virtual void create_grobs ();  
+  virtual void process_music ();  
   virtual void start_translation_timestep ();
 };
 
@@ -129,7 +128,7 @@ Dynamic_engraver::try_music (Music * m)
 }
 
 void
-Dynamic_engraver::create_grobs ()
+Dynamic_engraver::process_music ()
 {
   if (accepted_spanreqs_drul_[START] || accepted_spanreqs_drul_[STOP] || script_req_l_)
     {
@@ -187,8 +186,7 @@ Dynamic_engraver::create_grobs ()
       /*
        finish side position alignment if the (de)cresc ends here, and
        there are no new dynamics.
-    
-   */
+       */
  
       if ( !cresc_p_)
        {
@@ -203,12 +201,15 @@ Dynamic_engraver::create_grobs ()
          cresc_p_->set_bound (RIGHT, script_p_
                               ? script_p_
                               : unsmob_grob (get_property ("currentMusicalColumn")));
+         add_bound_item (line_spanner_, cresc_p_->get_bound (RIGHT));
+         
 
          finished_cresc_p_ = cresc_p_;
          cresc_p_ = 0;
          current_cresc_req_ = 0;
        }
     }
+  
   if (accepted_spanreqs_drul_[START])
     {
       if (current_cresc_req_)
@@ -224,27 +225,27 @@ Dynamic_engraver::create_grobs ()
 
          /*
            TODO: Use symbols.
-          */
+         */
 
          String start_type = ly_scm2string (accepted_spanreqs_drul_[START]->get_mus_property ("span-type"));
 
          /*
            ugh. Use push/pop?
-          */
+         */
          SCM s = get_property ((start_type + "Spanner").ch_C());
          if (!gh_symbol_p (s) || s == ly_symbol2scm ("hairpin"))
            {
              cresc_p_  = new Spanner (get_property ("Hairpin"));
              cresc_p_->set_grob_property ("grow-direction",
-                                         gh_int2scm ((start_type == "crescendo")
-                                                     ? BIGGER : SMALLER));
+                                          gh_int2scm ((start_type == "crescendo")
+                                                      ? BIGGER : SMALLER));
              
            }
          /*
            This is a convenient (and legacy) interface to TextSpanners
            for use in (de)crescendi.
            Hmm.
-          */
+         */
          else
            {
              cresc_p_  = new Spanner (get_property ("TextSpanner"));
@@ -256,7 +257,7 @@ Dynamic_engraver::create_grobs ()
              if (gh_string_p (s))
                {
                  cresc_p_->set_grob_property ("edge-text",
-                                             gh_cons (s, ly_str02scm ("")));
+                                              gh_cons (s, ly_str02scm ("")));
                  daddy_trans_l_->set_property (start_type + "Text",
                                                SCM_UNDEFINED);
                }
@@ -267,18 +268,24 @@ Dynamic_engraver::create_grobs ()
                               : unsmob_grob (get_property ("currentMusicalColumn")));
 
          Axis_group_interface::add_element (line_spanner_, cresc_p_);
+
+         add_bound_item (line_spanner_, cresc_p_->get_bound (LEFT));
+         
          announce_grob (cresc_p_, accepted_spanreqs_drul_[START]);
        }
     }
-  script_req_l_ = 0;
-  accepted_spanreqs_drul_[START] = 0;
-  accepted_spanreqs_drul_[STOP] = 0;
 }
 
 void
 Dynamic_engraver::stop_translation_timestep ()
 {
   typeset_all ();
+  if (script_req_l_ && !current_cresc_req_)
+    {
+      finished_line_spanner_ = line_spanner_;
+      line_spanner_ =0;
+      typeset_all ();
+    }
 }
 
 void
@@ -304,11 +311,16 @@ Dynamic_engraver::typeset_all ()
 {  
   if (finished_cresc_p_)
     {
-#if 1
-      finished_cresc_p_->set_bound (RIGHT, script_p_
-                          ? script_p_
-                          : unsmob_grob (get_property ("currentMusicalColumn")));
-#endif         
+      if (!finished_cresc_p_->get_bound (RIGHT))
+       {
+         finished_cresc_p_->set_bound (RIGHT, script_p_
+                                       ? script_p_
+                                       : unsmob_grob (get_property ("currentMusicalColumn")));
+
+         if (finished_line_spanner_)
+           add_bound_item (finished_line_spanner_,
+                           finished_cresc_p_->get_bound (RIGHT));
+       }
       typeset_grob (finished_cresc_p_);
       finished_cresc_p_ =0;
     }
@@ -320,8 +332,24 @@ Dynamic_engraver::typeset_all ()
     }
   if (finished_line_spanner_)
     {
+      /*
+       To make sure that this works
+      */
       Side_position::add_staff_support (finished_line_spanner_);
-      extend_spanner_over_elements (finished_line_spanner_);
+      /*
+       We used to have
+       
+            extend_spanner_over_elements (finished_line_spanner_);
+
+       but this is rather kludgy, since finished_line_spanner_
+       typically has a staff-symbol field set , extending it over the
+       entire staff.
+
+      */
+
+      if (!finished_line_spanner_->get_bound (RIGHT))
+       finished_line_spanner_->set_bound (RIGHT, finished_line_spanner_->get_bound (LEFT));
+      
       typeset_grob (finished_line_spanner_);
       finished_line_spanner_ = 0;
     }
index 0d5c67b74e844084e140d1246ad86b62f2dd566e..f157b480a2a1e11f41fe9ebe1363c2bd50c5f046 100644 (file)
@@ -47,7 +47,8 @@ Item::breakable_b (Grob*me)
 Paper_column *
 Item::column_l () const
 {
-  return dynamic_cast<Item*> (parent_l (X_AXIS))->column_l ();
+  Item *parent = dynamic_cast<Item*> (parent_l (X_AXIS));
+  return parent ? parent->column_l () : 0;
 }
 
 Line_of_score *
index 42dcb8751389ca182a071b85f4a64d56faaf147f..70136ac143db52259f68dc32e8f275a33138bdfa 100644 (file)
@@ -40,7 +40,7 @@ protected:
   virtual bool try_music (Music *req_l);
   virtual void start_translation_timestep ();
   virtual void initialize ();
-  virtual void create_grobs ();
+  virtual void process_music ();
   
 private:
   Mark_req * mark_req_l_;
@@ -135,8 +135,14 @@ Mark_engraver::try_music (Music* r_l)
   return false;
 }
 
+
+/*
+
+  TODO: make the increment function in Scheme.
+
+*/
 void
-Mark_engraver::create_grobs ()
+Mark_engraver::process_music ()
 {
   if (mark_req_l_)
     {
index 9af3c41f2a26d6636e7f323b7aca72602a53904b..bfd06f080796e14168a59d152574b67a2f0ae4f4 100644 (file)
@@ -5,6 +5,7 @@
 
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
+#include <math.h>
 
 #include "misc.hh"
 #include "dots.hh"
@@ -60,7 +61,7 @@ Note_head::brew_molecule (SCM smob)
   
   Real inter_f = Staff_symbol_referencer::staff_space (me)/2;
   int sz = Staff_symbol_referencer::line_count (me)-1;
-  int p = (int)Staff_symbol_referencer::position_f (me);
+  int p = (int)  rint (Staff_symbol_referencer::position_f (me));
   int streepjes_i = abs (p) < sz 
     ? 0
     : (abs(p) - sz) /2;
index 54f6253131ae4e0f5f8ca44cfc4d804760df664a..d6a356572903dde62a2c892b555712b188fff30c 100644 (file)
@@ -311,6 +311,9 @@ add_bound_item (Spanner* sp, Item*it)
     sp->set_bound (RIGHT, it);
 }
 
+/*
+  Extends EXTREMAL_PAIR to include IT
+ */
 static void
 extend_spanner_over_item (Item *it, SCM extremal_pair)
 {
@@ -330,6 +333,9 @@ extend_spanner_over_item (Item *it, SCM extremal_pair)
     }
 }
 
+/*
+  Extends EXTREMAL_PAIR to include every grob in VALUE
+ */
 static void
 extend_spanner_over_elements (SCM value, SCM extremal_pair)
 {
index 1341bf9a02625e26e01f8a825ed42430508c05da..da1ae75483d048657b5fa09118f272585406e375 100644 (file)
@@ -11,7 +11,7 @@
 #include "staff-symbol-referencer.hh"
 #include "staff-symbol.hh"
 #include "paper-def.hh"
-
 bool
 Staff_symbol_referencer::has_interface (Grob*e)
 {
@@ -29,7 +29,7 @@ Staff_symbol_referencer::line_count (Grob*me)
 bool
 Staff_symbol_referencer::on_staffline (Grob*me)
 {
-  return on_staffline (me, (int) position_f (me));
+  return on_staffline (me, (int) rint (position_f (me)));
 }
 
 bool
index ae5d56fde4f3228f9f72dabfd50ae919bb9eaf4b..ccfb55813ed1fdb905702ed5fdac1857fc79b8e8 100644 (file)
@@ -1,6 +1,6 @@
+\version "1.3.122"
 
-\version "1.3.110"
-       %
+%
 % setup for Request->Element conversion. Guru-only
 %
 
@@ -33,8 +33,6 @@ StaffContext=\translator {
        \consists "Local_key_engraver";
        \consists "Piano_pedal_engraver";
 
-       \consistsend "Axis_group_engraver";
-
 %{
        The Instrument_name_engraver puts the name of the instrument
        (\property Staff.instrument; Staff.instr for subsequent lines)
@@ -45,11 +43,20 @@ StaffContext=\translator {
        \consists "Instrument_name_engraver";
 %}
 
+       \consistsend "Axis_group_engraver";
 
          
        \accepts "Voice";
 }
 
+
+StaffContainerContext = \translator {
+       \type Engraver_group_engraver;
+       \consists "Axis_group_engraver";
+       \accepts Staff;
+       \name StaffContainer;
+}
+
 ChoirStaffContext = \translator {
        \type "Engraver_group_engraver";
        \name ChoirStaff;
@@ -101,7 +108,6 @@ VoiceContext = \translator {
        \consists "Output_property_engraver";   
        \consists "Arpeggio_engraver";
 
-       \consists "Dynamic_engraver";   % must come before text_engraver.
        \consists "Text_spanner_engraver";
        \consists "Property_engraver";
        
@@ -114,9 +120,13 @@ VoiceContext = \translator {
 
        \consists "Chord_tremolo_engraver";
        \consists "Melisma_engraver";
+
+%{
+ Must come before text_engraver, but after note_column engraver.
+
+%}
+       \consists "Dynamic_engraver";
        \consists "Text_engraver";
-       \consists "A2_engraver";
-       \consists "Voice_devnull_engraver";
 
        \consists "Script_engraver";
        \consists "Script_column_engraver";
@@ -126,6 +136,9 @@ VoiceContext = \translator {
        \consists "Tie_engraver";
        \consists "Tuplet_engraver";
        \consists "Grace_position_engraver";
+       \consists "A2_engraver";
+       \consists "Voice_devnull_engraver";
+
        \consists "Skip_req_swallow_translator";
        \accepts Thread; % bug if you leave out this!
        \accepts Grace;
@@ -339,8 +352,8 @@ ScoreContext = \translator {
        \consists "Bar_number_engraver";
        \consists "Span_arpeggio_engraver";
 
-       
-       \accepts "Staff";
+       \accepts "Staff";       
+       \accepts "StaffContainer";
        \accepts "StaffGroup";
        \accepts "RhythmicStaff";       
        \accepts "Lyrics";
index 553e81041ee3ba326c06abdc8d41767589a79e9c..6ac3908098d29a7d6cbc5799e0ae19275e9c8b4a 100644 (file)
@@ -26,7 +26,7 @@ outputscale = \staffheight / 4.0;
 \translator { \ThreadContext}
 \translator { \PianoStaffContext}
 \translator { \LyricsVoiceContext }
-
+\translator { \StaffContainerContext }
 
 
 
index 9b997bf350d9f3b6bb67d0a39aa493cf3617ddf7..49a0f6dd129dbec51bae32312951f13ec8592417 100644 (file)
@@ -9,7 +9,7 @@ $(outdir)/%.latex: %.doc
        chmod -w $@
 
 # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
-# it is not, for --scrdir builds
+# it is not, for --srcdir builds
 $(outdir)/%.texi: %.tely
        rm -f $@
        LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I $(pwd) -I $(input-dir)/tricks/ -I $(input-dir)/regression/ -I $(input-dir)/test/ --dependencies --format=texi $<
index 59e9a54db2476590154481f4e4e479c696c74c62..b1ecfc0a2a1696700b039a59623dc065e229b3f1 100644 (file)
@@ -49,7 +49,9 @@
                (direction . 1)
                 (font-family . roman)
                (font-relative-size . -1)
+               (Y-offset-callbacks . (,Side_position::aligned_side))
                (meta . ,(grob-description "BarNumber"
+                                          side-position-interface
                        text-interface  font-interface break-aligned-interface))
        ))
 
index f17a9f9e5a9acce50d0139cda5a59e9e948fee4e..7d5ee12eaaedd8d5b5039f14ad8c68faf5bf1990 100644 (file)
@@ -69,7 +69,7 @@
 
 #'thickness= weight of beams, in staffspace
   "
-   '(
+   '(auto-knee-gap
      staff-position
     height
     flag-width-function