]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.0.1
authorfred <fred>
Sun, 24 Mar 2002 20:13:09 +0000 (20:13 +0000)
committerfred <fred>
Sun, 24 Mar 2002 20:13:09 +0000 (20:13 +0000)
init/engraver.ly
lily/dot-column-engraver.cc [new file with mode: 0644]
lily/heads-engraver.cc [new file with mode: 0644]
lily/include/dot-column-engraver.hh [new file with mode: 0644]
lily/include/heads-engraver.hh [new file with mode: 0644]
lily/include/rhythmic-head.hh

index 8e6c1a1a0076de93a51bb03a2b3b3472931f1a5d..d2f6c24d2dc6efa0db7b9a71140bcb25a71930f2 100644 (file)
@@ -3,14 +3,22 @@
 %
 
 Staff = \translator {
-       \type "Engraver_group_engraver";
+       \type "Line_group_engraver_group";
+%{
+       The Hara_kiri_line_group_engraver is a Line_group_engraver 
+       that will not typeset an empty line of staff, i.e., a line 
+       of staff with only rests in it.  This is needed for orchestral
+       scores.  Comment-out Line_group_engraver_group, and uncomment 
+       Hara_kiri_line_group_engraver.
+%}
+%      \type "Hara_kiri_line_group_engraver";
        defaultclef = violin;
 
        \consists "Bar_engraver";
        \consists "Clef_engraver";
        \consists "Key_engraver";
-       \consists "Meter_engraver";
        \consists "Local_key_engraver";
+       \consists "Time_signature_engraver";
        \consists "Staff_sym_engraver";
        \consists "Collision_engraver";
        \consists "Rest_collision_engraver";
@@ -29,24 +37,39 @@ Staff = \translator {
 %{
        \consists "Bar_column_engraver";
        \consists "Bar_number_engraver";
+%}
+%{
+       The Staff_margin_engraver puts the name of the instrument
+       (\property Staff.instrument; Staff.instr for subsequent lines)
+       to the left of a staff.
+%}
+%{
+       \consists "Staff_margin_engraver";
 %}
        \consists "Separating_line_group_engraver";
-       \consists "Line_group_engraver";
-%      \consists "Hara_kiri_line_group_engraver";
          
        \accepts "Voice";
 }
+ChoireStaff = \translator {
+       \type "Line_group_engraver_group";
+       \consists "Vertical_align_engraver";
+       \consists "Staff_group_bar_engraver";
+       \accepts "Staff";
+       \accepts "RhythmicStaff";
+       \accepts "GrandStaff";
+       \accepts "Lyrics";
+}
+
 
-Rhythmic_staff = \translator
+RhythmicStaff = \translator
 {
-       \type "Engraver_group_engraver";
+       \type "Line_group_engraver_group";
        nolines  = "1";
        \consists "Pitch_squash_engraver";
 
        \consists "Bar_engraver";
-       \consists "Meter_engraver";
+       \consists "Time_signature_engraver";
        \consists "Staff_sym_engraver";
-       \consists "Line_group_engraver";
        \accepts "Voice";
 }
 
@@ -54,6 +77,7 @@ Voice = \translator {
        \type "Engraver_group_engraver";
        \consists "Dynamic_engraver";
        \consists "Rest_engraver";
+       \consists "Dot_column_engraver";
        \consists "Stem_engraver";
        \consists "Plet_engraver";
        \consists "Beam_engraver";
@@ -61,58 +85,58 @@ Voice = \translator {
        \consists "Multi_measure_rest_engraver";
        \consists "Script_engraver";
        \consists "Rhythmic_column_engraver";
+       \consists "Font_size_engraver";
        \consists "Slur_engraver";
-       \accepts "Thread";
+       \consists "Ties_engraver";
+       \consists "Note_heads_engraver" ;       
+       \consists "Skip_req_swallow_translator";
+       %\accepts "Thread";
 }
 
 Thread = \translator {
        \type "Engraver_group_engraver";
-       \consists "Skip_req_swallow_translator";
-       \consists "Note_head_engraver" ;
-       \consists "Tie_engraver";
+%      \consists "Note_head_engraver" ;
+%      \consists "Tie_engraver";
 }
 
-Grand_staff = \translator {
-       \type "Engraver_group_engraver";
+GrandStaff = \translator {
+       \type "Line_group_engraver_group";
 
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Piano_bar_engraver";
 
        % This should come last
-       \consists "Line_group_engraver";
        \accepts "Staff";
 }
 
-Staff_group = \translator {
-       \type "Engraver_group_engraver";
+StaffGroup = \translator {
+       \type "Line_group_engraver_group";
+%      \type "Hara_kiri_line_group_engraver";
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Staff_group_bar_engraver";
-       \consists "Line_group_engraver";
-%      \consists "Hara_kiri_line_group_engraver";
+
        \accepts "Staff";
-       \accepts "Rhythmic_staff";
-       \accepts "Grand_staff";
+       \accepts "RhythmicStaff";
+       \accepts "GrandStaff";
        \accepts "Lyrics";
 }
 
-Lyric_voice = 
+LyricVoice = 
 \translator{
-       \type "Engraver_group_engraver";
+       \type "Line_group_engraver_group";
 
        \consists "Separating_line_group_engraver";
        \consists "Lyric_engraver";
-       \consists "Line_group_engraver";
        \consists "Beam_req_swallow_translator";
        \consists "Plet_swallow_engraver";
 }
 
 Lyrics = \translator {
-       \type "Engraver_group_engraver";
+       \type "Line_group_engraver_group";
        \consists "Vertical_align_engraver";
-       \consists "Line_group_engraver";
-       \accepts "Lyric_voice";
+       \accepts "LyricVoice";
 }
 
 Score = \translator {
@@ -124,20 +148,22 @@ Score = \translator {
        \consists "Bar_column_engraver";
        \consists "Bar_number_engraver";
 %}
+       \consists "Bar_column_engraver";
        \consists "Span_score_bar_engraver";
        \consists "Score_priority_engraver";
        \consists "Priority_horizontal_align_engraver";
        \consists "Vertical_align_engraver";
 
 
-       \accepts "Staff_group";
+       \accepts "StaffGroup";
        \accepts "Staff";
-       \accepts "Rhythmic_staff";      
+       \accepts "RhythmicStaff";       
        \accepts "Lyrics";
-       \accepts "Grand_staff";
+       \accepts "GrandStaff";
+       \accepts "ChoireStaff";
 }
 
-Stupid_score = \translator {
+StupidScore = \translator {
        \type Score_engraver;
        \consists "Staff_sym_engraver";
 }
diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc
new file mode 100644 (file)
index 0000000..04ae0bf
--- /dev/null
@@ -0,0 +1,54 @@
+/*   
+  dot-column-engraver.cc -- implement Dot_column_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "dot-column-engraver.hh"
+#include "rhythmic-head.hh"
+#include "dot-column.hh"
+
+Dot_column_engraver::Dot_column_engraver ()
+{
+  dotcol_p_ =0;
+}
+
+void
+Dot_column_engraver::do_pre_move_processing ()
+{
+  if (dotcol_p_)
+    {
+      typeset_element (dotcol_p_);
+      dotcol_p_ =0;
+    }
+  head_l_arr_.clear ();
+}
+
+void
+Dot_column_engraver::acknowledge_element (Score_element_info info)
+{
+  Item * i=info.elem_l_->access_Item ();
+  
+  if (! (i && i->is_type_b (Rhythmic_head::static_name ())))
+      return;
+
+  Rhythmic_head * h = (Rhythmic_head*)i;
+  
+  if (!h->dots_l_)
+    return;
+
+  if (!dotcol_p_)
+    {
+      dotcol_p_ = new Dot_column;
+      announce_element (Score_element_info (dotcol_p_, 0));
+    }
+
+  dotcol_p_->add_head (h);
+}
+
+
+ADD_THIS_TRANSLATOR(Dot_column_engraver);
+IMPLEMENT_IS_TYPE_B1(Dot_column_engraver,Engraver);
diff --git a/lily/heads-engraver.cc b/lily/heads-engraver.cc
new file mode 100644 (file)
index 0000000..63e192e
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+  head-grav.cc -- part of GNU LilyPond
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include "note-head.hh"
+#include "heads-engraver.hh"
+#include "paper-def.hh"
+#include "musical-request.hh"
+#include "dots.hh"
+#include "dot-column.hh"
+
+Note_heads_engraver::Note_heads_engraver()
+{
+}
+
+bool
+Note_heads_engraver::do_try_request (Request *req_l) 
+{
+  if (!req_l->access_Musical_req ()) 
+    return false;
+
+  Note_req * n =req_l->access_Musical_req ()->access_Note_req ();
+  if (!n)
+    return false;
+  
+  note_req_l_arr_.push (n);
+  return true;
+}
+
+void
+Note_heads_engraver::do_process_requests()
+{
+  if (note_p_arr_.size ())
+    return ;
+  
+  for (int i=0; i < note_req_l_arr_.size (); i++)
+    {
+      Note_head *note_p  = new Note_head;
+      Note_req * note_req_l = note_req_l_arr_[i];
+      note_p->balltype_i_ = note_req_l->duration_.durlog_i_;
+      note_p->dots_i_ = note_req_l->duration_.dots_i_;
+      if (note_p->dots_i_)
+       {
+         Dots * d = new Dots;
+         note_p->dots_l_ = d;
+         announce_element (Score_element_info (d,0));
+         dot_p_arr_.push (d);
+       }
+
+      note_p->position_i_ = note_req_l->access_Note_req ()->pitch_.steps ();
+
+  
+      Score_element_info itinf (note_p,note_req_l);
+      announce_element (itinf);
+      note_p_arr_.push (note_p);
+    }
+}
+void
+Note_heads_engraver::do_pre_move_processing()
+{
+  for (int i=0; i < note_p_arr_.size (); i++)
+    {
+      typeset_element (note_p_arr_[i]);
+    }
+  note_p_arr_.clear ();
+  for (int i=0; i < dot_p_arr_.size (); i++)
+    {
+      typeset_element (dot_p_arr_[i]);
+    }
+  dot_p_arr_.clear ();
+  
+  note_req_l_arr_.clear ();
+}
+
+void
+Note_heads_engraver::do_post_move_processing()
+{
+
+}
+
+
+IMPLEMENT_IS_TYPE_B1(Note_heads_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Note_heads_engraver);
diff --git a/lily/include/dot-column-engraver.hh b/lily/include/dot-column-engraver.hh
new file mode 100644 (file)
index 0000000..0454e41
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+  dot-column-engraver.hh -- declare Dot_column_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef DOT_COLUMN_GRAV_HH
+#define DOT_COLUMN_GRAV_HH
+
+#include "engraver.hh"
+
+class Dot_column_engraver : public Engraver
+{
+  Dot_column *dotcol_p_ ;
+  Link_array<Rhythmic_head> head_l_arr_;
+public:
+  TRANSLATOR_CLONE(Dot_column_engraver);
+  Dot_column_engraver();
+  DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
+  virtual void acknowledge_element (Score_element_info);
+  virtual void do_pre_move_processing ();  
+};
+
+#endif // DOT_COLUMN_GRAV_HH
diff --git a/lily/include/heads-engraver.hh b/lily/include/heads-engraver.hh
new file mode 100644 (file)
index 0000000..c00d46f
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  head-engraver.hh -- part of GNU LilyPond
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef HEADSGRAV_HH
+#define HEADSGRAV_HH
+#include "engraver.hh"
+
+/**
+  make balls and rests
+ */
+class Note_heads_engraver : public Engraver {
+  Link_array<Note_head> note_p_arr_;
+  Link_array<Dots> dot_p_arr_;
+  Link_array<Note_req> note_req_l_arr_;
+
+public:
+  TRANSLATOR_CLONE(Note_heads_engraver);
+  Note_heads_engraver();
+  DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
+  virtual bool do_try_request (Request *req_l) ;
+  virtual void do_process_requests();
+  virtual void do_pre_move_processing();
+  virtual void do_post_move_processing();
+};
+
+
+#endif // HEADSGRAV_HH
index 84a1728b0a4ac7d89c11dda7461bcba87f209edd..4c11b50fd0767fb49fc423be8410298288c7a1ac 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  rhythmic-head.hh -- declare 
+  rhythmic-head.hh -- declare Rhythmic_head
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 
@@ -21,12 +21,12 @@ public:
   int dots_i_;
   Dots * dots_l_;
 
-  void add (Dots *);
+  void add_dots (Dots *);
   Rhythmic_head ();
 protected:
   virtual void do_add_processing ();
   virtual void do_print () const;
-  virtual void do_substitute_dependent (Score_elem*,Score_elem*);
+  virtual void do_substitute_dependent (Score_element*,Score_element*);
 };
 
 #endif // RHYTHMIC_HEAD_HH