]> git.donarmstrong.com Git - lilypond.git/commitdiff
(all-grob-descriptions): remove gap from
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 24 Mar 2004 15:42:24 +0000 (15:42 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 24 Mar 2004 15:42:24 +0000 (15:42 +0000)
tuplet-bracket

Documentation/user/notation.itely
input/regression/cluster-cross-staff.ly [new file with mode: 0644]
lily/cluster.cc
lily/completion-note-heads-engraver.cc
make/lilypond.redhat.spec.in
scm/define-grob-interfaces.scm
scm/define-grobs.scm
scripts/convert-ly.py

index a01a7c3d1fb7cc6153962199b44c53f15bbac2ff..23c3e4370fdae66ae3e2b770676671e4f20a0ef8 100644 (file)
@@ -1482,9 +1482,6 @@ shortest note they contain. For a beam ending rule that only applies
 to beams with 32nd notes (and no shorter notes), use @code{(end 1 32 *
 *)}.
 
-If a score ends while an automatic beam has not been ended and is still
-accepting notes, this last beam will not be typeset at all.
-
 @cindex automatic beam generation
 @cindex autobeam
 @cindex @code{autoBeaming}
@@ -1504,6 +1501,12 @@ beaming should be switched off. This is done by setting
 
 @refbugs
 
+If a score ends while an automatic beam has not been ended and is
+still accepting notes, this last beam will not be typeset at all. The
+same holds polyphonic voices, entered with @code{<< @dots{} \\ @dots{}
+>>}. If a polyphonic voice ends while an automatic beam is still
+accepting notes, it is not typeset.
+
 The rules for ending a beam depend on the shortest note in a beam.
 So, while it is possible to have different ending rules for eight
 beams and sixteenth beams, a beam that contains both eight and
diff --git a/input/regression/cluster-cross-staff.ly b/input/regression/cluster-cross-staff.ly
new file mode 100644 (file)
index 0000000..f21bf39
--- /dev/null
@@ -0,0 +1,24 @@
+\header {
+
+    texidoc = "Clusters can be written across staves."
+
+}
+
+\version "2.1.34"
+
+\score {
+\notes    \new PianoStaff <<
+    \context Staff = up     {
+       s1 *2
+       }
+       \context Staff = down <<
+           \apply #notes-to-clusters \relative c  { <c e>4 <f a> <b e> \change Staff = up <e a>
+                                                    <a d> <d g> }
+
+           { \clef bass s1 * 2 }
+           >>
+>>
+    \paper {
+       raggedright= ##t
+    }
+}
index a95467e0b03d3cf36ab1e77d9f6fb9d0a31d10bf..4900b73dc25872076a9b40bbf82fca4cdc101b0a 100644 (file)
@@ -141,7 +141,7 @@ Cluster::print (SCM smob)
   Item *left_bound = spanner->get_bound (LEFT);
   Item *right_bound = spanner->get_bound (RIGHT);
 
-  Grob *common = left_bound->common_refpoint (right_bound, X_AXIS);
+  Grob *commonx = left_bound->common_refpoint (right_bound, X_AXIS);
   SCM cols  =me->get_property ("columns");
 
   if (!gh_pair_p (cols))
@@ -151,14 +151,14 @@ Cluster::print (SCM smob)
       
       return SCM_EOL;
     }
-  common = common_refpoint_of_list (cols, common, X_AXIS);
+  
+  commonx = common_refpoint_of_list (cols, commonx, X_AXIS);
+  Grob * commony = common_refpoint_of_list (cols, me, Y_AXIS);
   Array<Offset> bottom_points;
   Array<Offset> top_points;
 
 
-  Real left_coord = left_bound->relative_coordinate (common, X_AXIS);
-
-  Real unit = Staff_symbol_referencer::staff_space (me) *0.5;
+  Real left_coord = left_bound->relative_coordinate (commonx, X_AXIS);
 
   /*
     TODO: should we move the cluster a little to the right to be in
@@ -168,17 +168,11 @@ Cluster::print (SCM smob)
   for (SCM s = cols; gh_pair_p (s); s = ly_cdr (s))
     {
       Grob * col = unsmob_grob (ly_car (s));
+      Interval yext = col->extent (commony, Y_AXIS);
 
-      SCM posns = col->get_property ("positions");
-      
-      Slice s (0,0);
-      if (is_number_pair (posns))
-       s = Slice (gh_scm2int (gh_car (posns)),
-                  gh_scm2int (gh_cdr (posns)));
-
-      Real x = col->relative_coordinate (common, X_AXIS) - left_coord;
-      bottom_points.push (Offset (x, s[DOWN] *unit));
-      top_points.push (Offset (x, s[UP] * unit));
+      Real x = col->relative_coordinate (commonx, X_AXIS) - left_coord;
+      bottom_points.push (Offset (x, yext[DOWN]));
+      top_points.push (Offset (x, yext[UP]));
     }
 
   /*
@@ -194,18 +188,14 @@ Cluster::print (SCM smob)
          SCM cols = next->get_property ("columns");
          if (gh_pair_p (cols))
            {
+             Grob *next_commony = common_refpoint_of_list (cols, next, Y_AXIS);
              Grob * col = unsmob_grob (ly_car (scm_last_pair (cols)));
-             SCM posns = col->get_property ("positions");
-      
-             Slice s (0,0);
-             if (is_number_pair (posns))
-               s = Slice (gh_scm2int (gh_car (posns)),
-                          gh_scm2int (gh_cdr (posns)));
 
-             Real x = right_bound->relative_coordinate (common,X_AXIS) - left_coord;
+             Interval v = col->extent (next_commony, Y_AXIS);
+             Real x = right_bound->relative_coordinate (commonx, X_AXIS) - left_coord;
              
-             bottom_points.insert (Offset (x, s[DOWN] * unit),0);
-             top_points.insert (Offset (x, s[UP] * unit),0);
+             bottom_points.insert (Offset (x, v[DOWN]),0);
+             top_points.insert (Offset (x, v[UP]),0);
            }
        }
     }
@@ -214,6 +204,7 @@ Cluster::print (SCM smob)
   top_points.reverse ();
 
   Stencil out = brew_cluster_piece (me, bottom_points, top_points);
+  out.translate_axis (- me->relative_coordinate (commony, Y_AXIS), Y_AXIS);
   return out.smobbed_copy ();
 }
 
@@ -227,3 +218,30 @@ ADD_INTERFACE (Cluster,"cluster-interface",
               "and @code{ramp}.\n"
 ,
   "style padding columns");
+
+
+
+struct Cluster_beacon
+{
+public:
+  DECLARE_SCHEME_CALLBACK (height, (SCM, SCM));
+  static bool has_interface (Grob *);
+};
+
+MAKE_SCHEME_CALLBACK (Cluster_beacon,height,2);
+SCM
+Cluster_beacon::height (SCM g, SCM ax)
+{
+  Grob *me = unsmob_grob (g);
+
+  Interval v = robust_scm2interval (me->get_property ("positions"), Interval (0,0));
+  return ly_interval2scm (Staff_symbol_referencer::staff_space (me) * 0.5  * v);
+}
+
+
+
+ADD_INTERFACE(Cluster_beacon,
+             "cluster-beacon-interface",
+             "A place holder for the cluster spanner to determine the vertical "
+             "extents of a cluster spanner at this X position.",
+             "positions");
index 11e7eb29a7223d9d0a4f581fa52afbfa6bbbe089..bf4437e41f32b24654e4b36ce60b9fb9e5127f03 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  head-grav.cc -- part of GNU LilyPond
+  completion-note-heads-engraver.cc -- Completion_heads_engraver
 
   (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 #include "tie.hh"
 #include "global-context.hh"
 
+/*
+TODO: make matching rest engraver.
+*/
+
 /*
 
   How does this work?
index ce7c2bf91d90f62bb01b30f6d9ebdc8dbc6a6ed2..bb3fc363b90b786add2f62d61480d29e61e5a3ce 100644 (file)
@@ -93,8 +93,8 @@ touch /tmp/.lilypond-install
 rm `find /var/lib/texmf -name 'feta*pk' -or -name 'feta*tfm' -or -name 'parmesan*pk' -or -name 'parmesan*tfm' -print` /tmp/.lilypond-install
 
 %if %{info}
-/sbin/install-info %{_infodir}/lilypond.info.gz %{_infodir}/dir 
-/sbin/install-info %{_infodir}/music-glossary.info.gz %{_infodir}/dir 
+/sbin/install-info %{_infodir}/lilypond/lilypond.info.gz %{_infodir}/dir 
+/sbin/install-info %{_infodir}/lilypond/music-glossary.info.gz %{_infodir}/dir 
 %endif
 
 # chkfontpath --add=%{_datadir}/lilypond/@TOPLEVEL_VERSION@/fonts/type1/
@@ -108,8 +108,8 @@ fi
 
 
 %if %{info}
-    /sbin/install-info --delete %{_infodir}/lilypond.info.gz %{_infodir}/dir 
-    /sbin/install-info --delete %{_infodir}/music-glossary.info.gz %{_infodir}/dir 
+    /sbin/install-info --delete %{_infodir}/lilypond/lilypond.info.gz %{_infodir}/dir 
+    /sbin/install-info --delete %{_infodir}/lilypond/music-glossary.info.gz %{_infodir}/dir 
 %endif
 
 # chkfontpath --remove=%{_datadir}/share/lilypond/@TOPLEVEL_VERSION@/fonts/type1n/
index 7bd3be3f46c0ac3ba7ba95c4b15779242e2de1ae..2cb09558a8f2e3862c3813dd716407c6dc0cfdd0 100644 (file)
@@ -9,15 +9,6 @@
 ; should include default value?
 
 
-(ly:add-interface
- 'cluster-beacon-interface
-
- "A place holder for the cluster spanner to determine the vertical
-extents of a cluster spanner at this X position.
-
- "
- '(positions)
- )
 
 (ly:add-interface
  'dynamic-interface
index 3f096cb215c72900bf7a5239d6a21af720ca9b6b..197733cccc7e9bb4456f47b1c1b3cd74a7d898a5 100644 (file)
     (ClusterSpannerBeacon
      . (
        (print-function . #f)
+       (Y-extent-callback . ,Cluster_beacon::height)
        (meta . ((interfaces . (cluster-beacon-interface item-interface))))
        ))
     
index 2a98feb3676c589678629d0a7e1dce286df443fe..649edd450c0db2a57870d6c580f2926c4addf827 100644 (file)
@@ -1917,7 +1917,7 @@ def conv (str):
        str = re.sub (r'\\modernCautionaries', "#(set-accidental-style 'modern-cautionary)", str)
        str = re.sub (r'\\modernVoiceAccidental', "#(set-accidental-style 'modern-voice)", str)
        str = re.sub (r'\\modernVoiceCautionaries', "#(set-accidental-style 'modern-voice-cautionary)", str)
-       str = re.sub (r'\\pianoAccidentals', "#(set-accidental-style 'piano)' , str)", str)
+       str = re.sub (r'\\pianoAccidentals', "#(set-accidental-style 'piano)", str)
        str = re.sub (r'\\pianoCautionaries', "#(set-accidental-style 'piano-cautionary)", str)
        str = re.sub (r'\\forgetAccidentals', "#(set-accidental-style 'forget)", str)
        str = re.sub (r'\\noResetKey', "#(set-accidental-style 'no-reset)", str)