]> git.donarmstrong.com Git - lilypond.git/commitdiff
''
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 16 Jun 2002 22:17:33 +0000 (22:17 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 16 Jun 2002 22:17:33 +0000 (22:17 +0000)
ChangeLog
Documentation/user/converters.itely
Documentation/user/glossary.tely
Documentation/user/refman.itely
Documentation/user/tutorial.itely
buildscripts/lilypond-profile.sh
lily/bar-number-engraver.cc
lily/lyric-phrasing-engraver.cc
lily/paper-column.cc

index 1d7531a456ca12a2214afa403e3a9b5b63fcba39..a993ab3754bdf4802c31b4caa8b92f122e8f38e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2002-06-17  Han-Wen  <hanwen@cs.uu.nl>
+
+       * lily/spacing-spanner.cc (loose_column): add another check: don't
+       move around bar lines as loose columns.
+
+       * scm/basic-properties.scm (default-break-barline):  add pre-break
+       for .| barline
+
 2002-06-16  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * GNUmakefile.in (builddir-setup): Bugfix: include srcdir/tex as
index dceade26385e9d71e27d18a034712f21839a6f61..0a487b448e42cf9ac07d5bdd2585dfba9875b375 100644 (file)
@@ -139,7 +139,7 @@ There is a rudimentary facility for adding lilypond code to the ABC
 source file.  If you say:
 
 @example
-        %%LY voices \property Voice.noAutoBeaming=##t
+        %%LY voices \property Voice.autoBeaming=##f
 @end example
 
 This will cause the text following the keyword ``voices'' to be inserted 
index c2f7b5a74d6ca3ef5f6191e582a89ed8db2f31fb..bbb9caa00ef373cef45c2d8746502afab813a262 100644 (file)
@@ -2265,7 +2265,7 @@ note. @w{@ar{}@strong{beam}}
 @
 
 @lilypond[13pt,eps]
-\property Score.noAutoBeaming = ##t
+\property Score.autoBeaming = ##f
 \property Score.barNonAuto = ##t
 \property Score.TextScript \set #'font-style = #'large
 \notes\relative c'' { 
index bb3f7e426bfe4fc6bd26b78e0a091173ef28312a..0557af6f1a64ab34b4529415244d0943590f9666 100644 (file)
@@ -57,7 +57,7 @@ encouraged to study the tutorial first.
 * Repeats::                     
 * Rhythmic music::              
 * Piano music::                 
-* Tablatures::                 
+* Tablatures::                  
 * Lyrics::                      
 * Chords::                      
 * Writing parts::               
@@ -1203,8 +1203,9 @@ indicate this preference by increasing the @code{beautiful} value:
 Producing nice slurs is a difficult problem, and LilyPond currently
 uses a simple, empiric method to produce slurs. In some cases, the
 results of this method don't look too good.  This is reflected by the
-@code{beautiful} parameter. It is an arbitrary parameter in the slur
-formatter.  Useful values can only be determined by trial and error.
+@code{beautiful} property, which it is an arbitrary parameter in the
+slur formatter.  Useful values can only be determined by trial and
+error.
 
 @cindex Adjusting slurs
 
@@ -1450,16 +1451,48 @@ helpful identifier definitions appear in @file{script.ly}.
 
 
 
-@cindex Grace music
 @cindex @code{\grace}
 @cindex ornaments
 @cindex grace notes
-@cindex @code{graceAlignPosition}
 
+Grace notes are ornaments  are written out ornaments
+@lilypond[relative=2,fragment] 
+  c4  \grace c16  c4 \grace { [c16 d16] } c4 
+@end lilypond
+
+In normal notation, grace notes are supposed to take up no logical
+time in a measure. Such an idea is practical for normal notation, but
+is not strict enough to put it into a program. The model that LilyPond
+uses for grace notes internally is that all timing is done in two
+steps:
+
+Every point in musical time consists of two rational numbers: one
+denotes the logical time, one denotes the grace timing. The above
+example is shown here with timing tuples.
+
+@lilypond[relative=2,fragment] 
+  c4^"(0,0)"  \grace c16^"(1/4,-1/16)"  c4^"(1/4,0)"  \grace {
+  [c16^"(2/4,-1/8)"  d16^"(2/4,-1/16)" ] } c4^"(2/4,0)"  
+@end lilypond
+
+The advantage of this approach is that you can use almost any lilypond
+construction together with grace notes, for example slurs and clef
+changes may appear halfway in between grace notes:
+
+@lilypond[relative=2,fragment] 
+  c4  \grace { [ c16 c, \clef bass c, b(] }  )c4 
+@end lilypond
 
-Grace notes are ornaments that are written out, but do not take up  any
-logical time in a measure. LilyPond has limited support for grace notes.
-The syntax is as follows. 
+The placement of these grace notes is synchronized between different
+staffs, using this grace timing.
+
+@lilypond[relative=2,fragment] 
+\context Staff = SA { e4 \grace { c16 d e f } e4 }
+\context Staff = SB { c4 \grace { g8 b } c4 }
+@end lilypond
+
+
+The syntax is as follows.
 @example
   \grace @var{musicexpr}
 @end example
@@ -1484,8 +1517,20 @@ set @code{Voice.graceAlignPosition} to @code{1}.
 
 @refbugs
 
+
+Grace note synchronization can also lead to surprises. Staff notation,
+such as key signatures, barlines, etc. are also synchronized. Take
+care when you mix staffs with grace notes and staffs without.
+
+@lilypond[relative=2,fragment]
+\context Staff = SA { e4 \bar "|:" \grace c16 d4 }
+\context Staff = SB { c4 \bar "|:"  d4 }
+@end lilypond
+
 Nesting @code{\grace} notes is not supported. The following may cause
-run-time errors: @example
+run-time errors:
+@c
+@example
   @code{\grace @{ \grace c32 c16 @} c4}
 @end example
 Since the meaning of such a construct is unclear, we don't consider this
@@ -2107,9 +2152,9 @@ The associated grob is @internalsref{VoiceFollower}.
 @section Tablatures
 
 @menu
-* Tablatures basic::
-* Non-guitar tablatures::
-* Tablature in addition to normal staff::
+* Tablatures basic::            
+* Non-guitar tablatures::       
+* Tablature in addition to normal staff::  
 @end menu
 
 @node Tablatures basic
@@ -2718,6 +2763,10 @@ If you want boxed bar numbers, see the example file
 It is not possible to have bar numbers printed at regular intervals
 only.
 
+Barnumbers can collide with the StaffGroup, if there is one at the
+top. To solve this, You have to twiddle with the padding-property of
+the bar-number if your score starts with a staff-group. 
+
 @node Instrument names
 @subsection Instrument names
 
@@ -3131,6 +3180,7 @@ object, and set a grob property in that object.
 * Text markup::                 
 * Invisible grobs::             
 * Dirty tricks::                
+* Spacing::                     
 @end menu
 
 @node Tuning groups of grobs 
@@ -3670,6 +3720,32 @@ space.
 }
 @end lilypond
 
+@node Spacing
+@subsection Spacing
+
+TODO: Move this section.
+
+
+@refbugs
+
+
+Generating optically pleasing spacing is black magic. LilyPond tries
+to deal with a number of frequent cases. Here is an example that is
+not handled correctly, due to the combination of chord collisions and
+kneed stems.
+
+@lilypond
+\score {
+     \context PianoStaff \notes \transpose c''' <
+     \context Staff = up { s1 }
+     \context Staff = down { [c8 c \translator Staff=up <c d> c 
+\translator Staff=down c c c] }
+     >
+     \paper { linewidth = -1 }
+}
+@end lilypond
+
+
 
 @c . {Page layout}
 @node Page layout
index e22a3f1f4f1d91ad93e188b65b70cdf18d7e17a1..79cc1c79be02cbb04750648d00efaca5da4af527 100644 (file)
@@ -90,7 +90,7 @@ a1 a2 a4 a16 a32
 @lilypond[fragment]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 %\property Staff.Clef = \turnOff
 \transpose c'' { a1 a2 a4 a16 a32 }
 s16_" "
@@ -653,7 +653,7 @@ fine tuning output, polyphonic music, and integrating text and music.
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 [a8 b]
 @end lilypond
@@ -664,7 +664,7 @@ fine tuning output, polyphonic music, and integrating text and music.
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 d ~ d
 @end lilypond
@@ -675,7 +675,7 @@ d ~ d
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 c( d )e
 @end lilypond
@@ -685,7 +685,7 @@ c( d )e
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 a a'
 @end lilypond
@@ -696,7 +696,7 @@ a a'
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 c c,
 @end lilypond
@@ -707,7 +707,7 @@ c c,
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 \context Voice { <a c> }
 @end lilypond
@@ -718,7 +718,7 @@ c c,
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 a\< a \!a
 @end lilypond
@@ -729,7 +729,7 @@ a\< a \!a
 @lilypond[fragment, relative 1]
 \property Score.timing = ##f
 \property Staff.TimeSignature = \turnOff
-\property Staff.noAutoBeaming = ##t
+\property Staff.autoBeaming = ##f
 \property Staff.Clef = \turnOff
 a\> a \!a
 @end lilypond
@@ -1235,7 +1235,7 @@ accompaniment =\chords @{
 
           \addlyrics
             \context Staff = mel @{        
-              \property Staff.noAutoBeaming = ##t
+              \property Staff.autoBeaming = ##f
               \property Staff.automaticMelismata = ##t
               \melody 
             @}
@@ -1286,7 +1286,7 @@ accompaniment =\chords {
 
           \addlyrics
             \context Staff = mel {
-              \property Staff.noAutoBeaming = ##t
+              \property Staff.autoBeaming = ##f
               \property Staff.automaticMelismata = ##t
               \melody 
             }
@@ -1542,16 +1542,16 @@ the melody and accompaniment staves different names.
 @separate
 @example 
 
-        \property Staff.noAutoBeaming = ##t
+        \property Staff.autoBeaming = ##f
  
 @end example
 @cindex \property
 @cindex context variables
 @cindex setting context variables
 An interpretation context has variables, called properties, that tune
-its behavior.  One of the variables is @code{noAutoBeaming}.  Setting
-this @code{Staff}'s property to @code{##t}, which is the boolean value
-@var{true}, turns the automatic beaming mechanism off for the current
+its behavior.  One of the variables is @code{autoBeaming}.  Setting
+this @code{Staff}'s property to @code{##f}, which is the boolean value
+@var{false}, turns the automatic beaming mechanism off for the current
 staff.
 @cindex GUILE
 @cindex Scheme
index 720f2dc0991cd2dd467c11b477dcb61985cf1a37..22af4fb64c87b63f99cf807f0f9a378a726ec039 100644 (file)
@@ -12,7 +12,6 @@
 if [ "$LILYPONDPREFIX" == "" ] ; then
     datadir=`echo "@datadir@" | sed 's!//!/!g'`
 else
-
 ## to support development from ~/usr/src/lilypon.
     datadir=$LILYPONDPREFIX
 fi
index 5d6373392fb014ef4d325d96d4ba63f030b1c8ec..bd04befbbc17a7b655a515ccaa2eb310644d7a65 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  bar-number-grav.cc -- implement Bar_number_engraver
+  bar-number-engraver.cc -- implement Bar_number_engraver
 
   source file of the GNU LilyPond music typesetter
 
 #include "engraver.hh"
 #include "translator-group.hh"
 
+/*
+  
+TODO: detect the top staff (staffsFound), and acknowledge staff-group
+system-start-delims. If we find these, and the top staff is in the
+staff-group, add padding to the bar number.
+
+*/
+
 
 class Bar_number_engraver : public Engraver
 {
index e5d5855b4e4c1e84b333c3a137f1f4f72959e797..23b8fd4cdcd2e40b4c66388c8b3cd1858c3e0df2 100644 (file)
@@ -31,13 +31,13 @@ String trim_suffix (String &id);
 
   
 
-> About lyrics, it happens that there are common words for many bars, like
-> for a refrain say.  When there is an even number of lyrics lines, I do not
-> know how to force the positioning of the common lyric line in the plain
-> middle of the others, because this is in between lines.  Not a big matter,
-> but it would be a bit nicer if this was doable.
+  > About lyrics, it happens that there are common words for many bars, like
+  > for a refrain say.  When there is an even number of lyrics lines, I do not
+  > know how to force the positioning of the common lyric line in the plain
+  > middle of the others, because this is in between lines.  Not a big matter,
+  > but it would be a bit nicer if this was doable.
 
- */
+*/
 
 /*
   We find start and end of phrases, and align lyrics of multiple stanzas
@@ -48,11 +48,11 @@ String trim_suffix (String &id);
   that seems to be the case now -- jcn)
 
 
-          |        |        |     |      |
-         x|       x|       x|    x|     x|
+  |        |        |     |      |
+  x|       x|       x|    x|     x|
 
-     1:  Start  sentence  melisma      end.
-     2:  x         x         x_____       x
+  1:  Start  sentence  melisma      end.
+  2:  x         x         x_____       x
 
   Only lyrics that are followed by '__' while there's a melisma,
   are left-aligned, in this case the third x.
@@ -61,20 +61,20 @@ String trim_suffix (String &id);
   Alignment and melismata
 
   I've taken [a different] approach:
-         |      |
-         |      |
-        O      O  <-- second note throws a melisma score element
-         \____/
+  |      |
+  |      |
+  O      O  <-- second note throws a melisma score element
+  \____/
 
-        ^      ^
-        |      |
-       Lyric (None)
+  ^      ^
+  |      |
+  Lyric (None)
 
   Lyric_phrasing_engraver keeps track of the current and previous notes and
   lyrics for each voice, and when it catches a melisma, it adjusts the
   alignment of the lyrics of the previous note. I hope this isn't
   unnecessarily convoluted.
- */
+*/
 
 Lyric_phrasing_engraver::Lyric_phrasing_engraver ()
 {
@@ -86,7 +86,7 @@ Lyric_phrasing_engraver::~Lyric_phrasing_engraver ()
 {
   /*
     No need to delete alist_; that's what Garbage collection is for.
-   */
+  */
 }
 
 void
@@ -94,7 +94,7 @@ Lyric_phrasing_engraver::finalize ()
 {
   /*
     but do need to unprotect alist_, since Engravers are gc'd now.
-   */
+  */
 
   voice_alist_ = SCM_EOL;
 }
@@ -104,25 +104,28 @@ Syllable_group *
 Lyric_phrasing_engraver::lookup_context_id (const String &context_id)
 {
   SCM key = ly_str02scm (context_id.ch_C ());
-  if (! gh_null_p (voice_alist_)) {
-    SCM s = scm_assoc (key, voice_alist_);
-    if (! (gh_boolean_p (s) && !to_boolean (s))) {
-      /* match found */
-      // (key . ((alist_entry . old_entry) . previous_entry))
-      if (to_boolean (ly_cdadr (s))) { // it's an old entry ... make it a new one
-       SCM val = gh_cons (gh_cons (ly_caadr (s), SCM_BOOL_F), ly_cddr (s)); 
-       voice_alist_ = scm_assoc_set_x (voice_alist_, ly_car (s), val);
-       return unsmob_voice_entry (ly_caar (val));
-      }
-      else { // the entry is current ... return it.
-       SCM entry_scm = ly_caadr (s);
-       return unsmob_voice_entry (entry_scm);
-      }
+  if (! gh_null_p (voice_alist_))
+    {
+      SCM s = scm_assoc (key, voice_alist_);
+      if (! (gh_boolean_p (s) && !to_boolean (s)))
+       {
+         /* match found */
+         // (key . ((alist_entry . old_entry) . previous_entry))
+         if (to_boolean (ly_cdadr (s)))
+           { // it's an old entry ... make it a new one
+             SCM val = gh_cons (gh_cons (ly_caadr (s), SCM_BOOL_F), ly_cddr (s)); 
+             voice_alist_ = scm_assoc_set_x (voice_alist_, ly_car (s), val);
+             return unsmob_voice_entry (ly_caar (val));
+           }
+         else { // the entry is current ... return it.
+           SCM entry_scm = ly_caadr (s);
+           return unsmob_voice_entry (entry_scm);
+         }
+       }
     }
-  }
   // ((alist_entry . old_entry) . previous_entry)
   SCM val = gh_cons (gh_cons (Syllable_group::make_entry (), SCM_BOOL_F), 
-                   Syllable_group::make_entry ()); 
+                    Syllable_group::make_entry ()); 
 
   voice_alist_ = scm_acons (key, val, voice_alist_);
   return unsmob_voice_entry (ly_caar (val));
@@ -131,7 +134,7 @@ Lyric_phrasing_engraver::lookup_context_id (const String &context_id)
 
 void 
 Lyric_phrasing_engraver::record_notehead (const String &context_id, 
-                                        Grob * notehead)
+                                         Grob * notehead)
 {
   Syllable_group * v = lookup_context_id (context_id);
   v->set_notehead (notehead);
@@ -150,18 +153,21 @@ void
 Lyric_phrasing_engraver::record_extender (const String &context_id, Grob * extender)
 {
   SCM key = ly_str02scm (context_id.ch_C ());
-  if (! gh_null_p (voice_alist_)) {
-    SCM s = scm_assoc (key, voice_alist_);
-    if (! (gh_boolean_p (s) && !to_boolean (s))) {
-      /* match found */
-      // (key . ((alist_entry . old_entry) . previous_entry))
-      SCM previous_scm = ly_cddr (s);
-      if (previous_scm != SCM_EOL) {
-       Syllable_group * v = unsmob_voice_entry (previous_scm);
-       v->add_extender (extender);
-      }
+  if (! gh_null_p (voice_alist_))
+    {
+      SCM s = scm_assoc (key, voice_alist_);
+      if (! (gh_boolean_p (s) && !to_boolean (s)))
+       {
+         /* match found */
+         // (key . ((alist_entry . old_entry) . previous_entry))
+         SCM previous_scm = ly_cddr (s);
+         if (previous_scm != SCM_EOL)
+           {
+             Syllable_group * v = unsmob_voice_entry (previous_scm);
+             v->add_extender (extender);
+           }
+       }
     }
-  }
 }
 
 void 
@@ -181,36 +187,40 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i)
 
   Grob *h = i.grob_l_;
 
-  if (Note_head::has_interface (h)) {
-    /* caught a note head ... do something with it */
+  if (Note_head::has_interface (h))
+    {
+      /* caught a note head ... do something with it */
 
-    /* what's its Voice context name? */
-    String voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "Voice");
-    record_notehead (voice_context_id, h);
+      /* what's its Voice context name? */
+      String voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "Voice");
+      record_notehead (voice_context_id, h);
 
-    /* is it in a melisma ? */
-    if (to_boolean (i.origin_trans_l_->get_property ("melismaEngraverBusy"))) {
-      record_melisma (voice_context_id);
+      /* is it in a melisma ? */
+      if (to_boolean (i.origin_trans_l_->get_property ("melismaEngraverBusy")))
+       {
+         record_melisma (voice_context_id);
+       }
+      return;
     }
-    return;
-  }
 
   /* now try for a lyric */
-  if (h->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface"))) {
-
-    /* what's its LyricsVoice context name? */
-    String voice_context_id;
-    SCM voice_context_scm = i.origin_trans_l_->get_property ("associatedVoice");
-    if (gh_string_p (voice_context_scm)) {
-      voice_context_id = ly_scm2string (voice_context_scm);
-    }
-    else {
-      voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "LyricsVoice");
-      voice_context_id = trim_suffix (voice_context_id);
+  if (h->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
+    {
+
+      /* what's its LyricsVoice context name? */
+      String voice_context_id;
+      SCM voice_context_scm = i.origin_trans_l_->get_property ("associatedVoice");
+      if (gh_string_p (voice_context_scm))
+       {
+         voice_context_id = ly_scm2string (voice_context_scm);
+       }
+      else {
+       voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "LyricsVoice");
+       voice_context_id = trim_suffix (voice_context_id);
+      }
+      record_lyric (voice_context_id, h);
+      return;
     }
-    record_lyric (voice_context_id, h);
-    return;
-  }
 
   /* Catch any extender items and then if we have a melisma, 
      set the RIGHT item of the extender spanner to the melismatic note in 
@@ -225,23 +235,26 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i)
      then ignore it and let the Extender_engraver take care of it (i.e. finish at next
      lyric).
   */
-  if (h->internal_has_interface (ly_symbol2scm ("lyric-extender-interface"))) {
-    String voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "LyricsVoice");
-    record_extender (trim_suffix (voice_context_id), h);
-    return;
-  }
+  if (h->internal_has_interface (ly_symbol2scm ("lyric-extender-interface")))
+    {
+      String voice_context_id = get_context_id (i.origin_trans_l_->daddy_trans_l_, "LyricsVoice");
+      record_extender (trim_suffix (voice_context_id), h);
+      return;
+    }
 }
 
 String 
 get_context_id (Translator_group * ancestor, const char *type)
 {
-  while (ancestor != 0 && ancestor->type_str_ != type) {
-    ancestor = ancestor->daddy_trans_l_;
-  }
+  while (ancestor != 0 && ancestor->type_str_ != type)
+    {
+      ancestor = ancestor->daddy_trans_l_;
+    }
 
-  if (ancestor != 0) {
-    return ancestor->id_str_;
-  }
+  if (ancestor != 0)
+    {
+      return ancestor->id_str_;
+    }
 
   return "";
 }
@@ -250,15 +263,22 @@ String
 trim_suffix (String &id)
 {
   int index = id.index_i ('-');
-  if (index >= 0) {
-    return id.left_str (index);
-  }
+  if (index >= 0)
+    {
+      return id.left_str (index);
+    }
   return id;
 }
 
 
-void Lyric_phrasing_engraver::create_grobs () 
+void
+Lyric_phrasing_engraver::create_grobs () 
 {
+  SCM p = get_property ("automaticPhrasing");
+  if (!to_boolean (p))
+    return;
+
+  
   /* iterate through entries in voice_alist_
      for each, call set_lyric_align (alignment). Issue a warning if this returns false.
   */
@@ -266,60 +286,66 @@ void Lyric_phrasing_engraver::create_grobs ()
   SCM sp = get_property ("phrasingPunctuation");
   punc = gh_string_p (sp) ? ly_scm2string (sp) : ".,;:?!\""; 
   
-  for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) {
-    SCM v_entry = ly_cdar (v);
-    // ((current . oldflag) . previous)
-    if (!to_boolean (ly_cdar (v_entry))) { // not an old entry left over from a prior note ...
-      Syllable_group *entry = unsmob_voice_entry (ly_caar (v_entry));
-
-      /*
-       TODO: give context for warning.
-       */
-      if (! entry->set_lyric_align (punc.ch_C (), any_notehead_l_))
-       warning (_ ("lyrics found without any matching notehead"));
-
-      // is this note melismatic? If so adjust alignment of previous one.
-      if (entry->get_melisma ()) {
-       if (entry->lyric_count ())
-         warning (_ ("Huh? Melismatic note found to have associated lyrics."));
-       SCM previous_scm = ly_cdr (v_entry);
-       if (previous_scm != SCM_EOL) {
-         Syllable_group *previous = unsmob_voice_entry (previous_scm);
-         if (previous->lyric_count ())
-           previous->adjust_melisma_align ();
+  for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v))
+    {
+      SCM v_entry = ly_cdar (v);
+      // ((current . oldflag) . previous)
+      if (!to_boolean (ly_cdar (v_entry)))
+       { // not an old entry left over from a prior note ...
+         Syllable_group *entry = unsmob_voice_entry (ly_caar (v_entry));
+
+         /*
+           TODO: give context for warning.
+         */
+         if (! entry->set_lyric_align (punc.ch_C (), any_notehead_l_))
+           warning (_ ("lyrics found without any matching notehead"));
+
+         // is this note melismatic? If so adjust alignment of previous one.
+         if (entry->get_melisma ())
+           {
+             if (entry->lyric_count ())
+               warning (_ ("Huh? Melismatic note found to have associated lyrics."));
+             SCM previous_scm = ly_cdr (v_entry);
+             if (previous_scm != SCM_EOL)
+               {
+                 Syllable_group *previous = unsmob_voice_entry (previous_scm);
+                 if (previous->lyric_count ())
+                   previous->adjust_melisma_align ();
+               }
+           }
        }
-      }
     }
-  }
 }
 
 
 void
 Lyric_phrasing_engraver::stop_translation_timestep ()
 {
-  for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) {
-    SCM entry_scm = ly_cdar (v);
-    // ((alist_entry . entry_is_old) . previous_entry)
-    Syllable_group * entry = unsmob_voice_entry (ly_caar (entry_scm));
-
-    // set previous_entry, set entry_is_old, and resave it to alist_
-    // but only change if this current was not old.
-    if (! to_boolean (ly_cdar (entry_scm))) { 
-      Syllable_group * previous_entry = unsmob_voice_entry (ly_cdr (entry_scm));
-      previous_entry->copy (entry);
-      entry_scm = gh_cons (gh_cons (ly_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm));
-      voice_alist_ = scm_assoc_set_x (voice_alist_, ly_caar (v), entry_scm);
+  for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v))
+    {
+      SCM entry_scm = ly_cdar (v);
+      // ((alist_entry . entry_is_old) . previous_entry)
+      Syllable_group * entry = unsmob_voice_entry (ly_caar (entry_scm));
+
+      // set previous_entry, set entry_is_old, and resave it to alist_
+      // but only change if this current was not old.
+      if (! to_boolean (ly_cdar (entry_scm)))
+       { 
+         Syllable_group * previous_entry = unsmob_voice_entry (ly_cdr (entry_scm));
+         previous_entry->copy (entry);
+         entry_scm = gh_cons (gh_cons (ly_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm));
+         voice_alist_ = scm_assoc_set_x (voice_alist_, ly_caar (v), entry_scm);
+       }
+      entry->next_lyric ();
     }
-    entry->next_lyric ();
-  }
   any_notehead_l_ = 0;
 }
 
 
 
 ENTER_DESCRIPTION(Lyric_phrasing_engraver,
-/* descr */       "",
-/* creats*/       "",
-/* acks  */       "lyric-syllable-interface note-head-interface lyric-extender-interface",
-/* reads */       "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
-/* write */       "");
+                 /* descr */       "",
+                 /* creats*/       "",
+                 /* acks  */       "lyric-syllable-interface note-head-interface lyric-extender-interface",
+                 /* reads */       "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
+                 /* write */       "");
index 248af8cabf632d8656f0b92083aabb8a02bbf984..5c344836d4bf576e5407c629b9eed5d87be6058c 100644 (file)
 #include "font-interface.hh"
 
 
-/*
-  Paper_columns form the top-most item parent. (The Paper_columns X
+
+
+
+ADD_INTERFACE (Paper_column, "paper-column-interface",
+  "  Paper_columns form the top-most item parent. (The Paper_columns X
   parent is System, which is a spanner.)
 
   Paper_columns form the units for the spacing engine. They are
   Since many columns go unused, you should only use the rank field to
   get ordering information.  Two adjacent columns may have
   non-adjacent numbers.
-  
- */
+
+  Don't be confused by right-items: each spacing wish can also contain
+  a number of items, with which a spacing constraint may be kept. It's
+  a little baroque, but it might come in handy later on?
+",
+  "between-cols between-system-string when bounded-by-me shortest-playing-duration shortest-starter-duration");
+
 
 void
 Paper_column::do_break_processing ()
@@ -123,9 +131,3 @@ Paper_column::brew_molecule (SCM p)
   return t.smobbed_copy ();                                            
 }
 
-
-
-
-ADD_INTERFACE (Paper_column, "paper-column-interface",
-  "",
-  "between-cols between-system-string when bounded-by-me shortest-playing-duration shortest-starter-duration");