]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.42
authorfred <fred>
Tue, 26 Mar 2002 23:10:29 +0000 (23:10 +0000)
committerfred <fred>
Tue, 26 Mar 2002 23:10:29 +0000 (23:10 +0000)
41 files changed:
config.make.in
input/test/staff-margin.ly
lily/align-interface.cc
lily/axis-group-interface.cc
lily/bar-engraver.cc
lily/bar.cc
lily/break-align-engraver.cc
lily/break-align-item.cc
lily/breathing-sign-engraver.cc
lily/clef-engraver.cc
lily/include/align-interface.hh
lily/include/axis-group-interface.hh
lily/include/bar.hh
lily/include/break-align-item.hh
lily/include/span-bar.hh
lily/include/system-start-delimiter.hh [new file with mode: 0644]
lily/include/translator-group.hh
lily/instrument-name-engraver.cc [new file with mode: 0644]
lily/key-engraver.cc
lily/my-lily-parser.cc
lily/new-span-bar-engraver.cc [new file with mode: 0644]
lily/score-element.cc
lily/side-position-interface.cc
lily/spacing-spanner.cc
lily/span-bar-engraver.cc
lily/span-bar.cc
lily/span-score-bar-engraver.cc
lily/staff-margin-engraver.cc
lily/system-start-delimiter-engraver.cc [new file with mode: 0644]
lily/system-start-delimiter.cc [new file with mode: 0644]
lily/time-signature-engraver.cc
lily/timing-engraver.cc
lily/translator-group.cc
ly/engraver.ly
make/generic-vars.make
make/lilypond.spec.in
make/substitute.make
scm/lily.scm
stepmake/aclocal.m4
stepmake/stepmake/executable-targets.make
stepmake/stepmake/generic-vars.make

index a0d9338300b89e7df845d5f18e14be2174f59630..8a72dfea93dcdebac7d0be4ac35568538cb976ae 100644 (file)
@@ -35,6 +35,8 @@ bindir = @bindir@
 includedir = @includedir@
 datadir = @datadir@
 localedir = @localedir@
+program_prefix = @program_prefix@
+program_suffix = @program_suffix@
 EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@
 TEX_TFMDIR = @TEX_TFMDIR@
 RANLIB = @RANLIB@
index 455a2c6e423bb189320f7cbcacca0a085d3e87e7..1e2ec60b600b2ad762b5ac65abd802a645e3c6cf 100644 (file)
@@ -15,7 +15,9 @@ linewidth=-1.0;
 \translator { \ScoreContext
        %textVerticalAlignment = #0
        }
-\translator { \StaffContext \consists "Staff_margin_engraver"; }
-\translator { \PianoStaffContext \consists "Staff_margin_engraver"; }
+%\translator { \StaffContext \consists "Staff_margin_engraver"; }
+%\translator { \PianoStaffContext \consists "Staff_margin_engraver"; }
+\translator { \StaffContext \consists "New_staff_margin_engraver"; }
+\translator { \PianoStaffContext \consists "New_staff_margin_engraver"; }
 }}
 
index 690814750457513b376dffefeb9c669c7fef1c3d..9d5a00abf52c975cbc657d7299738e7f361fd8ac 100644 (file)
@@ -30,6 +30,21 @@ Align_interface::alignment_callback (Dimension_cache const *c)
   return 0.0;
 }
 
+
+Real
+Align_interface::center_on_element (Dimension_cache const *c)
+{
+  Score_element *me = c->element_l ();
+  Score_element *cent = unsmob_element (me->get_elt_property ("group-center-element"));
+
+  if (cent)
+    {
+      Real r = cent->relative_coordinate (me,  c->axis ());
+      return -r;
+    }
+  return 0;
+}
+
 /*
   Hairy function to put elements where they should be. Can be tweaked
   from the outside by setting minimum-space and extra-space in its
index 8cdb9ef67a2f7892d253b5bd50087be9114cb119..c22bbeedb0e31d5a56437ffd77a10f31c7ba6dda 100644 (file)
@@ -48,26 +48,38 @@ Axis_group_interface::axis_b (Axis a )const
   return elt_l_->dim_cache_[a]->extent_callback_l_ == group_extent_callback;
 }
 
+Interval
+Axis_group_interface::relative_group_extent (Axis a, Score_element *common, SCM elts)
+{
+  Interval r;
+  for (SCM s = elts; gh_pair_p (s); s = gh_cdr (s))
+    {
+      Score_element * se = unsmob_element (gh_car (s));
+      Interval dims = se->extent (a);
+      if (!dims.empty_b ())
+       r.unite (dims + se->relative_coordinate (common, a));
+    }
+  return r;
+}
+
 Interval
 Axis_group_interface::group_extent_callback (Dimension_cache const *c) 
 {
   Axis a = c->axis ();
   Score_element * me = c->element_l ();
+  Score_element * common = me;
 
-  Interval r;
   for (SCM s = me->get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
     {
-      SCM e=gh_car (s); 
-      Score_element * se = SMOB_TO_TYPE (Score_element, e);
-
-      Interval dims = se->extent (a);
-      if (!dims.empty_b ())
-       r.unite (dims + se->relative_coordinate (me, a));
+      Score_element * se = unsmob_element (gh_car (s));
+      common = se->common_refpoint (common, a);
     }
 
-  return r;
-}
+  Real my_coord = me->relative_coordinate (common, a);
+  Interval r (relative_group_extent (a, common, me->get_elt_property ("elements")));
 
+  return r - my_coord;
+}
 
 void
 Axis_group_interface::set_interface ()
@@ -75,7 +87,7 @@ Axis_group_interface::set_interface ()
   if (!has_interface_b ())
     {
       elt_l_->set_elt_property ("elements", SCM_EOL);
-      elt_l_->set_elt_property ("transparent", SCM_BOOL_T);
+      elt_l_->set_elt_property ("transparent", SCM_BOOL_T); //  junk this?
       elt_l_->set_elt_property ("axes" , SCM_EOL);
       group (elt_l_, "interfaces").add_thing (ly_symbol2scm ("Axis_group"));
     }
index c138d6c3c304bfba895df69bb8c877e915938430..c14198a0d25fc49bcb991616b7d0be93273d93c8 100644 (file)
@@ -29,7 +29,7 @@ Bar_engraver::create_bar ()
   if (!bar_p_)
     {
       bar_p_ = new Staff_bar;
-      bar_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
+      bar_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Staff_bar"));
 
       // urg: "" != empty...
       SCM default_type = get_property ("defaultBarType");
index 70432970eee65e98d05cd6652731a6e96c84360f..299c5e9b3d073124c3727e4d7ab45e701ead1400 100644 (file)
@@ -39,41 +39,12 @@ Bar::do_brew_molecule () const
   if (gh_string_p (s))
     {
       String str  =ly_scm2string (s);
-      if (str == "bracket")
-       return staff_bracket (get_bar_size ());
-      else if  (str == "brace")
-       return staff_brace (get_bar_size ());
-      else
-       return compound_barline (str, get_bar_size ());
+      return compound_barline (str, get_bar_size ());
     }
   return Molecule ();
 }
 
 
-Molecule
-Bar::staff_bracket (Real height) const 
-{
-  Paper_def* p= paper_l ();
-  Real arc_height = p->get_var("bracket_arch_height");
-  SCM at = gh_list (ly_symbol2scm ("bracket"),
-                   gh_double2scm (p->get_var("bracket_arch_angle")),
-                   gh_double2scm (p->get_var("bracket_arch_width")),
-                   gh_double2scm (arc_height),
-                   gh_double2scm (p->get_var("bracket_width")),
-                   gh_double2scm (height),
-                   gh_double2scm (p->get_var("bracket_arch_thick")),
-                   gh_double2scm (p->get_var("bracket_thick")),
-                   SCM_UNDEFINED);
-
-  Real staff_space = p->get_var ("interline");
-  Real h = height + 2 * arc_height;
-  Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2));
-  Molecule mol (b, at);
-  
-  mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS);
-  return mol;
-}
-
 Molecule
 Bar::compound_barline (String str, Real h) const
 {
@@ -141,40 +112,6 @@ Bar::compound_barline (String str, Real h) const
   return m;
 }
 
-/*
-  ugh. Suck me plenty.
- */
-Molecule
-Bar::staff_brace (Real y)  const
-{
-  Real staffht  = paper_l ()->get_var ("staffheight");
-  int staff_size  = int (rint (staffht ));
-
-  // URG
-  Real step  = 1.0;
-  int minht  = 2 * staff_size;
-  int maxht = 7 *  minht;
-  int idx = int (((maxht - step) <? y - minht) / step);
-  idx = idx >? 0;
-
-  SCM l = scm_eval (gh_list (ly_symbol2scm ("style-to-cmr"),
-                           ly_str02scm ("brace"),
-                           SCM_UNDEFINED));
-  
-  String nm = "feta-braces";
-  if (l != SCM_BOOL_F)
-    nm = ly_scm2string (gh_cdr (l));
-  nm += to_str (staff_size);
-  SCM e =gh_list (ly_symbol2scm ("char"), gh_int2scm (idx), SCM_UNDEFINED);
-  SCM at = (e);
-
-  at = fontify_atom (all_fonts_global_p->find_font (nm), at);
-  
-  Box b (Interval (0,0), Interval (-y/2, y/2));
-
-  return Molecule(b, at);
-}
-  
 
 Molecule
 Bar::simple_barline (Real w, Real h) const
index ec8495d9baf17ce207d23488b822cd07a906b1cb..24900b3f8132b9e9c37e9b7a2b29500f3923aee6 100644 (file)
@@ -11,6 +11,7 @@
 #include "break-align-item.hh"
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
+#include "dimension-cache.hh"
 
 class Break_align_engraver : public Engraver
 {
@@ -88,20 +89,36 @@ Break_align_engraver::acknowledge_element (Score_element_info inf)
       if (!breakable)
        return ;
 
-      SCM al = item_l->remove_elt_property ("break-aligned");
-      if (!gh_boolean_p (al ) || !gh_scm2bool (al))
+      SCM align_name = item_l->remove_elt_property ("break-align-symbol");
+      if (!gh_symbol_p (align_name))
        return ;
 
-      
       if (!align_l_)
        {
          align_l_ = new Break_align_item;
          align_l_->set_elt_property ("breakable", SCM_BOOL_T);
          announce_element (Score_element_info (align_l_,0));
+
+
+         Item * edge = new Item;
+         SCM edge_sym =   ly_symbol2scm ("Left_edge_item");
+         edge->set_elt_property ("break-align-symbol", edge_sym);
+
+         /*
+           If the element is empty, it will be ignored in the break
+           alignment stuff.
+
+           TODO: switch off ignoring empty stuff?
+         */
+         edge->dim_cache_[X_AXIS]->set_extent_callback (Dimension_cache::point_dimension_callback);
+         
+         align_l_->set_elt_property ("group-center-element", edge->self_scm_);
+
+         announce_element (Score_element_info(edge, 0));
+         column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm_);
        }
 
-      SCM name = ly_str02scm (inf.elem_l_->name());
-      SCM s = scm_assoc (name, column_alist_);
+      SCM s = scm_assoc (align_name, column_alist_);
 
       Item * group = 0;
 
@@ -117,10 +134,10 @@ Break_align_engraver::acknowledge_element (Score_element_info inf)
          Axis_group_interface (group).set_interface ();
          Axis_group_interface (group).set_axes (X_AXIS,X_AXIS);
 
-         group->set_elt_property ("origin", name);
+         group->set_elt_property ("break-align-symbol", align_name);
          group->set_parent (align_l_, Y_AXIS);
          announce_element (Score_element_info (group, 0));
-         column_alist_ = scm_assoc_set_x (column_alist_, name, group->self_scm_);
+         column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm_);
        }
       Axis_group_interface (group).add_element (item_l);
     }
index ebaf7f3aee71632a62164ca6e305b7250ffc63b2..74fc20e399882e4e12906a1fd1d1d9819e4ea7b6 100644 (file)
 void
 Break_align_item::before_line_breaking ()
 {
-  Direction ad = (break_status_dir() == LEFT) ? RIGHT : LEFT;
-  Real interline= paper_l ()->get_var ("interline");   
-
-  set_elt_property ("self-alignment-X", gh_int2scm (ad));
+  if (break_status_dir() == LEFT)
+    {
+      set_elt_property ("self-alignment-X", gh_int2scm (RIGHT));
+    }
+  else
+    {
+      add_offset_callback (Align_interface::center_on_element, X_AXIS);
+    }
+  
 
 
+  Real interline= paper_l ()->get_var ("interline");   
   Link_array<Score_element> elems;
   Link_array<Score_element> all_elems
     = Group_interface__extract_elements (this, (Score_element*)0,
@@ -45,7 +51,7 @@ Break_align_item::before_line_breaking ()
 
   SCM symbol_list = SCM_EOL;
   Array<Real> dists;
-  SCM current_origin = ly_str02scm ("");
+  SCM current_origin = ly_symbol2scm ("none");
   for (int i=0; i <= elems.size (); i++)
     {
       Score_element *next_elt  = i < elems.size ()
@@ -56,18 +62,20 @@ Break_align_item::before_line_breaking ()
 
       if (next_elt)
        {
-         next_origin = next_elt->get_elt_property ("origin");
+         next_origin = next_elt->get_elt_property ("break-align-symbol");
          next_origin =
            (next_origin == SCM_UNDEFINED)
-           ? ly_str02scm ("")
+           ? ly_symbol2scm ("none")
            : next_origin;
        }
       else
-       next_origin = ly_str02scm ("begin-of-note");
+       next_origin = ly_symbol2scm ("begin-of-note");
       
       SCM extra_space
        = scm_eval (scm_listify (ly_symbol2scm ("break-align-spacer"),
-                                current_origin, next_origin, SCM_UNDEFINED)); 
+                                ly_quote_scm (current_origin),
+                                ly_quote_scm (next_origin),
+                                SCM_UNDEFINED));
       SCM symbol = gh_car  (extra_space);
       Real spc = gh_scm2double (SCM_CADR(extra_space));
       spc *= interline;
@@ -137,7 +145,6 @@ Break_align_item::before_line_breaking ()
   /*
     Hint the spacing engine how much space to put in.
 
-
     The pairs are in the format of an interval (ie. CAR <  CDR).
   */
   column_l ()->set_elt_property ("extra-space",
index afa950d618bbd159bf38e1e0838c967c9a2ab2b0..2508bb83902d5a4be99846f7459f6246a515b589 100644 (file)
@@ -47,7 +47,8 @@ Breathing_sign_engraver::do_process_music()
   if(breathing_sign_req_l_)
     {
       breathing_sign_p_ = new Breathing_sign;
-      breathing_sign_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
+      breathing_sign_p_->set_elt_property ("break-align-symbol",
+                                          ly_symbol2scm ("Breathing_sign"));
       Staff_symbol_referencer_interface st (breathing_sign_p_);
       st.set_interface ();
 
index 041e3410f5c1ad04014148fe3d2cc992d496648e..bfd3c54f5a2a565b046fa92c31447b948453a383 100644 (file)
@@ -164,7 +164,7 @@ Clef_engraver::create_clef()
     {
       Clef_item *c= new Clef_item;
       c->set_elt_property ("breakable", SCM_BOOL_T);
-      c->set_elt_property ("break-aligned", SCM_BOOL_T);
+      c->set_elt_property ("break-align-symbol", ly_symbol2scm ("Clef_item"));
       announce_element (Score_element_info (c, clef_req_l_));
 
       Staff_symbol_referencer_interface si(c);
index 0809620234a3ca9b1b0886175ccb44bd1169f19f..ad9d51f8761de368e5442a93661020b9a1d1f9ee 100644 (file)
@@ -46,6 +46,7 @@ struct Align_interface  {
   int get_count (Score_element*)const;
   void set_interface ();
   bool has_interface_b ();
+  static Real center_on_element (Dimension_cache const *c);
 };
 
 #endif /* ALIGN_INTERFACE_HH */
index f1382da9be632585cfbe3c43a03e8f96ec29a8b7..7bacbf8ac394150f638dd867fa664f49d5d3e262 100644 (file)
@@ -32,6 +32,7 @@ struct Axis_group_interface
   Axis_group_interface (Score_element*);
 
   static Interval group_extent_callback (Dimension_cache const*);
+  static Interval relative_group_extent (Axis, Score_element * common, SCM list);
 
   void add_element (Score_element*);
   void set_axes (Axis,Axis);
@@ -39,6 +40,7 @@ struct Axis_group_interface
   Link_array<Score_element> get_children ();
   bool has_interface_b ();
   void set_interface ();
+  
 };
 
 #endif /* AXIS_GROUP_INTERFACE_HH */
index 994f04b5006b7b7c5394329801e0b61509a28167..aa429c89bb0523cba6bd8dc82bbb6823f4750f55 100644 (file)
@@ -16,8 +16,6 @@ public:
   VIRTUAL_COPY_CONS(Score_element);
   Bar();
 
-  Molecule staff_bracket (Real height) const;
-  Molecule staff_brace (Real height) const;
   Molecule compound_barline (String, Real height) const;
   Molecule simple_barline (Real wid, Real height) const;      
 
index c9a5aa16321c4c08c9698c68ab9440b25c8c4759..49057bde8d0ebf8dbe53f574abfa6d66274902af 100644 (file)
 
 #include "item.hh"
 
-/// align breakable items (clef, bar, etc.)
+/**
+   align breakable items (clef, bar, etc.)
+
+   Properties:
+
+   break-align-symbol -- the index in the spacing table (symbol) of
+   the to be aligned item.
+
+
+   TODO: remove this as a class, and make interface.
+ */
+
 class Break_align_item : public Item
 {
 protected:
index 93213fa0b26b9b2cac75330078689e283cacbbf3..796df94a1c1849056b0ffc863ef1277f46c1e284 100644 (file)
@@ -33,7 +33,6 @@ protected:
   void evaluate_empty ();
 
   static Interval width_callback(Dimension_cache const*) ;
-  static Interval height_callback(Dimension_cache const*) ;  
   
   virtual Real get_bar_size () const;
   virtual void before_line_breaking ();
diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh
new file mode 100644 (file)
index 0000000..7d7b5c6
--- /dev/null
@@ -0,0 +1,31 @@
+/*   
+  System-start-delimiter.hh -- declare System_start_delimiter
+     
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef SYSTEM_START_DELIMITER_HH
+#define SYSTEM_START_DELIMITER_HH
+
+#include "spanner.hh"
+
+/*
+  Braces/brackets across staffs.
+ */
+class System_start_delimiter : public Spanner
+{
+public:
+  System_start_delimiter ();
+  VIRTUAL_COPY_CONS (Score_element);
+protected:
+  virtual  Molecule do_brew_molecule () const;
+  Molecule staff_bracket (Real) const;
+  Molecule staff_brace (Real) const;
+  Molecule simple_bar (Real) const;
+};
+
+#endif /* SYSTEM_START_DELIMITER_HH */
+
index b2cba74b19dae4802dbdb1c189fa97a55fc5c469..e144a3e8e43961cee9e298bd5d2130df0513a0a5 100644 (file)
@@ -41,7 +41,7 @@ protected:
 public:
   SCM get_property (SCM name_sym) const;
   void set_property (String var_name, SCM value);
-  
+  Translator_group *where_defined (SCM name_sym) const;
 
   String id_str_;
   void add_last_element (String s);
diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc
new file mode 100644 (file)
index 0000000..e16a53c
--- /dev/null
@@ -0,0 +1,89 @@
+/*   
+  new-staff-margin-engraver.cc --  implement Instrument_name_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "engraver.hh"
+#include "text-item.hh"
+#include "bar.hh"
+#include "span-bar.hh"
+
+class Instrument_name_engraver : public Engraver
+{
+  Text_item *text_;
+
+  void create_text (SCM s);
+public:
+  VIRTUAL_COPY_CONS(Translator);
+  Instrument_name_engraver ();
+
+  virtual void acknowledge_element (Score_element_info);
+  virtual void do_pre_move_processing ();
+};
+
+ADD_THIS_TRANSLATOR(Instrument_name_engraver);
+
+Instrument_name_engraver::Instrument_name_engraver ()
+{
+  text_ = 0;
+}
+
+
+void
+Instrument_name_engraver::do_pre_move_processing ()
+{
+  if (text_)
+    {
+      typeset_element (text_);
+      text_ = 0;
+    }
+}
+
+void
+Instrument_name_engraver::create_text (SCM txt)
+{
+  if(!text_)
+    {
+      text_ = new Text_item;
+      text_->set_elt_property ("text", txt);
+      text_->set_elt_property ("breakable", SCM_BOOL_T);
+
+      /*
+       TODO: use more lispish names for break-align-symbols
+       */
+      text_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Instrument_name"));
+      text_->set_elt_property ("visibility-lambda",
+                              scm_eval (ly_symbol2scm ("begin-of-line-visible")));
+
+      announce_element (Score_element_info (text_,0));
+    }
+}
+
+void
+Instrument_name_engraver::acknowledge_element (Score_element_info i)
+{
+  SCM s = get_property ("instrument");
+  
+  if (now_mom () > Moment (0))
+    s = get_property ("instr");
+
+  if (gh_string_p (s))
+    {
+      if (Bar* b= dynamic_cast<Bar*> (i.elem_l_))
+       {
+         create_text (s);
+         if (Span_bar* s= dynamic_cast<Span_bar*> (b))
+           {
+             text_->set_parent (s, Y_AXIS);
+           }
+       }
+    }
+}
+
+
+
+
index e81e72c2279be0843bad427eeb4353a13f5b215c..ac977363448f6fd14c7c401292bc97aa1c935e06 100644 (file)
@@ -36,9 +36,9 @@ Key_engraver::create_key ()
       item_p_ = new Key_item;
       Staff_symbol_referencer_interface st (item_p_);
       st.set_interface ();
+
       
-      item_p_->set_elt_property ("break-aligned", SCM_BOOL_T); // ugh
-      
+      item_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Key_item")); 
       item_p_->set_elt_property ("multi-octave",
                                 gh_bool2scm (key_.multi_octave_b_));
       
index 233f910ca6a0dbf097e520a0368449925a599d9c..65e3c69adc6c3ea1b11e35d7d4c506eacf6f0976 100644 (file)
@@ -116,24 +116,26 @@ My_lily_parser::get_chord (Musical_pitch tonic,
     ugh
    */
   Chord chord = to_chord (tonic, add_arr_p, sub_arr_p, inversion_p, bass_p);
+  inversion_p = 0;
+  bass_p = 0;
 
   Tonic_req* t = new Tonic_req;
   t->pitch_ = tonic;
   v->add_music (t);
 
   //urg
-  if (inversion_p
-      && Chord::find_notename_i (&chord.pitch_arr_, *inversion_p) > 0)
+  if (chord.inversion_b_
+      && Chord::find_notename_i (&chord.pitch_arr_, chord.inversion_pitch_) > 0)
     {
       Inversion_req* i = new Inversion_req;
-      i->pitch_ = *inversion_p;
+      i->pitch_ = chord.inversion_pitch_;
       v->add_music (i);
     }
 
-  if (bass_p)
+  if (chord.bass_b_)
     {
       Bass_req* b = new Bass_req;
-      b->pitch_ = *bass_p;
+      b->pitch_ = chord.bass_pitch_;
       v->add_music (b);
     }
 
diff --git a/lily/new-span-bar-engraver.cc b/lily/new-span-bar-engraver.cc
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index 8da3d235a0d6d87c3128190dc61ad2d122581f2e..447426519bac01c80a2cf9b96914a32ec705330f 100644 (file)
@@ -512,7 +512,9 @@ Score_element::extent (Axis a) const
   Dimension_cache const * d = dim_cache_[a];
   Interval ext = d->get_dim ();
 
-  
+  if (empty_b (a)) 
+    return ext;
+
   SCM extra = get_elt_property (a == X_AXIS ? "extra-extent-X"
                                : "extra-extent-Y");
 
index 2d29cf9e330612b137c013309a09a6d8c39c910b..f93dd1856fe12c73b95a04f049cf7973c830dea1 100644 (file)
@@ -145,6 +145,8 @@ Side_position_interface::aligned_on_self (Dimension_cache const *c)
     return 0.0;
 }
 
+
+
 Real
 directed_round (Real f, Direction d)
 {
index d485c9abfdf3d3b32ad166d4a60249d4b683fa5b..edd41f5ae64c523bce7c85f3cad4473445814659 100644 (file)
@@ -143,8 +143,7 @@ Spacing_spanner::do_measure (Link_array<Paper_column> cols) const
          if (rc->musical_b () && to_boolean (rc->get_elt_property ("contains-grace")))
            right_dist *= paper_l ()->get_var ("before_grace_spacing_factor");
  
-         s.distance_f_ = left_distance + right_dist;
+         s.distance_f_ = left_distance + right_dist;
            
          Real stretch_dist = 0.;
          if (gh_number_p (stretch_hint))
index 135d978c15864841a09858bdaa4441a38485d1fa..e8d771e263953601f8b78d7ce5e691bb84713a38 100644 (file)
@@ -1,17 +1,99 @@
-#include "base-span-bar-engraver.hh"
+/*
+  span-bar-grav.cc -- implement Span_bar_engraver
 
+  source file of the GNU LilyPond music typesetter
 
-class Span_bar_engraver : public Base_span_bar_engraver
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include "dimension-cache.hh"
+#include "lily-guile.hh"
+#include "span-bar.hh"
+#include "engraver.hh"
+
+/** 
+
+  Make bars that span multiple "staffs". Catch bars, and span a
+  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 Span_bar_engraver : public Engraver
 {
+  Span_bar * spanbar_p_;
+  Link_array<Bar> bar_l_arr_;
+
 public:
-  Span_bar_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  VIRTUAL_COPY_CONS(Translator);
+  Span_bar_engraver();
+protected:
+  virtual void acknowledge_element (Score_element_info);
+  virtual void do_pre_move_processing();
+  virtual Span_bar* get_span_bar_p() const;
 };
 
 
-Span_bar_engraver::Span_bar_engraver ()
+Span_bar_engraver::Span_bar_engraver()
+{
+  spanbar_p_ =0;
+}
+
+Span_bar*
+Span_bar_engraver::get_span_bar_p() const
+{
+  return new Span_bar;
+}
+
+
+void
+Span_bar_engraver::acknowledge_element (Score_element_info i)
 {
-  use_priority_b_ = false;
+  int depth = i.origin_trans_l_arr (this).size();
+  if (depth > 1
+      && dynamic_cast<Bar *> (i.elem_l_)) 
+    {
+      bar_l_arr_.push (dynamic_cast<Bar *> (i.elem_l_));
+
+      if (bar_l_arr_.size() >= 2 && !spanbar_p_) 
+       {
+         spanbar_p_ = get_span_bar_p();
+         spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
+
+         /*
+           UGH. UGH UUHGK GUHG G
+          */
+         String visnam =  String(name()) + "-visibility";
+
+         spanbar_p_->set_elt_property ("visibility-lambda",
+                                       scm_eval (ly_symbol2scm (visnam.ch_C())));
+
+         spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
+         announce_element (Score_element_info (spanbar_p_,0));
+         if (!gh_string_p (spanbar_p_->get_elt_property ("glyph")))
+           spanbar_p_-> set_elt_property ("glyph",
+                                          bar_l_arr_[0]->get_elt_property ("glyph"));
+       }
+    }
+}
+
+void
+Span_bar_engraver::do_pre_move_processing()
+{
+  if (spanbar_p_) 
+    {
+      for (int i=0; i < bar_l_arr_.size() ; i++)
+       spanbar_p_->add_bar (bar_l_arr_[i]);
+      typeset_element (spanbar_p_);
+      spanbar_p_ =0;
+    }
+  bar_l_arr_.set_size (0);
 }
 
+
+
 ADD_THIS_TRANSLATOR(Span_bar_engraver);
+
+
+
index ac458ad177d0343ae111a6121d53d29ada22a2cd..494a90b2ffdb997ba050d27d1ac1e7fb157b540c 100644 (file)
@@ -12,9 +12,9 @@
 #include "paper-def.hh"
 #include "molecule.hh"
 #include "warn.hh"
+#include "axis-group-interface.hh"
 #include "group-interface.hh"
 
-
 void
 Span_bar::add_bar (Score_element*b)
 {
@@ -31,7 +31,8 @@ Span_bar::width_callback (Dimension_cache const * c)
   Span_bar*  s= dynamic_cast<Span_bar*> (c->element_l ());  
   String gl = ly_scm2string (s->get_elt_property ("glyph"));
 
-  /*urg.
+  /*
+    urg.
    */
   Molecule m = s->compound_barline (gl, 40 PT);
   
@@ -44,23 +45,12 @@ Span_bar::before_line_breaking ()
   Bar::before_line_breaking ();
   
   evaluate_empty ();
-  
-  //  set_empty (false, Y_AXIS); // a hack to make mark scripts work.
 }
 
 void
 Span_bar::after_line_breaking ()
 {
   Bar::after_line_breaking ();
-  SCM s = get_elt_property ("collapse-height");
-  if (gh_number_p (s)
-      && get_spanned_interval ().length () < gh_scm2double (s))
-    {
-      set_elt_property ("transparent", SCM_BOOL_T);
-      set_empty (X_AXIS);
-      set_empty (Y_AXIS);   
-    }
-
   Interval i (get_spanned_interval ());
   translate_axis (i.center (), Y_AXIS);
 }
@@ -106,36 +96,9 @@ Span_bar::evaluate_empty ()
 Interval
 Span_bar::get_spanned_interval () const
 {
-  Interval y_int;
-
-  for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
-    {
-      Score_element *bar = unsmob_element ( gh_car (s));
-
-      if (!bar)
-       continue;
-      
-      Score_element*common = common_refpoint (bar, Y_AXIS);
-
-      Interval iv (bar->extent(Y_AXIS));
-      if (!iv.empty_b ())
-       {
-         Real y = bar->relative_coordinate (common, Y_AXIS)  
-           - relative_coordinate (common, Y_AXIS);
-
-         y_int.unite (y + iv);
-       }
-    }
-  
-  return y_int;
+  return Axis_group_interface::group_extent_callback (dim_cache_[Y_AXIS]);  
 }
 
-Interval
-Span_bar::height_callback (Dimension_cache const *c) 
-{
-  Span_bar * s= dynamic_cast<Span_bar*> (c->element_l ()); 
-  return s->get_spanned_interval ();
-}
 
 Real
 Span_bar::get_bar_size () const
@@ -153,6 +116,6 @@ Span_bar::Span_bar ()
 {
   group (this).set_interface ();
   dim_cache_[X_AXIS]->set_extent_callback (width_callback);
-  dim_cache_[Y_AXIS]->set_extent_callback (height_callback);  
+  dim_cache_[Y_AXIS]->set_extent_callback (Axis_group_interface::group_extent_callback);  
 }
 
index dc71a0ea175e8892ac615b74447fe544f731d79c..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
@@ -1,77 +1 @@
-/*
-  span-score-bar-engraver.cc -- implement Span_score_bar_engraver,
-  Piano_bar_engraver and Staff_group_bar_engraver
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "span-bar.hh"
-#include "span-score-bar-engraver.hh"
-#include "paper-def.hh"
-#include "dimension-cache.hh"
-
-Span_bar*
-Span_score_bar_engraver::get_span_bar_p () const
-{
-  Span_bar*s =  new Span_bar;
-  s->set_elt_property ("glyph",  gh_str02scm ("scorebar"));
-  s->set_elt_property ("break-aligned",SCM_BOOL_T);
-
-  return s;
-}
-
-
-Span_score_bar_engraver::Span_score_bar_engraver ()
-{
-  use_priority_b_ = true;
-}
-
-Span_bar*
-Piano_bar_engraver::get_span_bar_p () const
-{
-  Span_bar *s= new Span_bar;
-  s->set_empty (X_AXIS);
-  s->set_elt_property ("glyph", gh_str02scm ("brace"));
-  return s;
-}
-
-Span_bar*
-Staff_group_bar_engraver::get_span_bar_p () const
-{
-  Span_bar *s= new Span_bar;
-  s->set_empty (X_AXIS);
-  s->set_elt_property ("glyph",  gh_str02scm ("bracket"));
-
-  SCM collapse = get_property ("bracketCollapseHeight");
-  if (gh_number_p (collapse))
-    s->set_elt_property ("collapse-height", collapse);
-  else
-    s->set_elt_property ("collapse-height", gh_double2scm (1));
-      
-  return s;
-}
-
-void
-Staff_group_bar_engraver::acknowledge_element (Score_element_info i)
-{
-  Base_span_bar_engraver::acknowledge_element (i);
-
-  /*
-    UGH. This has to go into the backend. 
-   */
-  if (Span_bar * b = dynamic_cast<Span_bar *> (i.elem_l_))
-    {
-      SCM gl = b->get_elt_property ("glyph");
-      if (gh_string_p (gl) && ly_scm2string (gl)  == "brace")
-       b->translate_axis ( -paper_l ()->get_var ("interline"),
-                           X_AXIS); // ugh
-    }
-}
-
-ADD_THIS_TRANSLATOR (Piano_bar_engraver);
-ADD_THIS_TRANSLATOR (Staff_group_bar_engraver);
-ADD_THIS_TRANSLATOR (Span_score_bar_engraver);
-
 
index f0887d650a635b1eb7e59594ff70abdc12e54bce..d200746bed43faa73b93993ea1381b652f2d9fdb 100644 (file)
     * merge with/derive from/add functionality to Bar_script_engraver
  */
 
-/**
-   Hang on left edge of staff to provide suppor for simple items.
- */
-class Left_edge_item : public Item
-{
-public:
-  VIRTUAL_COPY_CONS (Score_element);
-};
 
 /**
   put (instrument) text to left of line
@@ -52,7 +44,7 @@ protected:
 private:
   String type_;
   Text_item* text_p_;
-  Left_edge_item* left_edge_p_;
+  Item* left_edge_p_;
   void create_text (SCM);
 };
 
@@ -81,7 +73,6 @@ Staff_margin_engraver::acknowledge_element (Score_element_info info)
          create_text (s);
          if (Span_bar* s= dynamic_cast<Span_bar*> (b))
            {
-             assert (text_p_);
              text_p_->set_parent (s, Y_AXIS);
            }
        }
@@ -94,27 +85,25 @@ Staff_margin_engraver::create_text (SCM text)
   if (!text_p_)
     {
       assert (!left_edge_p_);
-      Left_edge_item* l = new Left_edge_item;
-      
-      l->set_elt_property ("breakable", SCM_BOOL_T);
-      l->set_elt_property ("break-aligned", SCM_BOOL_T);
+      left_edge_p_ = new Item;
+      left_edge_p_->set_elt_property ("breakable", SCM_BOOL_T);
+      left_edge_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Left_edge_item"));
 
-      announce_element (Score_element_info (l, 0));
+      announce_element (Score_element_info (left_edge_p_, 0));
 
-      Staff_symbol_referencer_interface sl (l);
+      Staff_symbol_referencer_interface sl (left_edge_p_);
       sl.set_interface ();
-      left_edge_p_ = l;
       
       Text_item* t = new Text_item;
 
       t->set_elt_property ("self-alignment-Y", gh_int2scm (0));
       t->add_offset_callback (Side_position_interface::aligned_on_self, Y_AXIS);
 
-      t->set_parent (l, X_AXIS);
-      t->set_parent (l, Y_AXIS);
+      t->set_parent (left_edge_p_, X_AXIS);
+      t->set_parent (left_edge_p_, Y_AXIS);
 
       // 'just to be sure': see Clef_item::do_add_processing
-      l->add_dependency (t);
+      left_edge_p_->add_dependency (t);
 
 
       /*
@@ -158,7 +147,7 @@ Staff_margin_engraver::create_text (SCM text)
       else
        {
          side_position (t).set_axis (X_AXIS);
-         side_position (t).add_support (l);
+         side_position (t).add_support (left_edge_p_);
       
          Direction d;
          if (isdir_b (s))
@@ -200,7 +189,7 @@ Staff_margin_engraver::do_pre_move_processing ()
                                scm_eval (ly_symbol2scm ("begin-of-line-visible")));
       typeset_element (text_p_);
       text_p_ = 0;
-      assert (left_edge_p_);
+
       typeset_element (left_edge_p_);
       left_edge_p_ = 0;
     }
diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc
new file mode 100644 (file)
index 0000000..d8ec2ae
--- /dev/null
@@ -0,0 +1,97 @@
+/*   
+  system-start-delimiter-engraver.cc -- implement System_start_delimiter_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+
+#include "system-start-delimiter.hh"
+#include "engraver.hh"
+#include "staff-symbol.hh"
+#include "group-interface.hh"
+#include "paper-column.hh"
+#include "paper-def.hh"
+
+/*
+  TODO: rename this to system-open-engraver (or whatever.)
+
+ */
+class System_start_delimiter_engraver : public Engraver
+{
+public:
+  VIRTUAL_COPY_CONS(Translator);
+  System_start_delimiter_engraver();
+
+  Spanner * spanbar_;
+protected:
+
+  virtual void acknowledge_element (Score_element_info);
+  virtual void do_creation_processing ();
+  virtual void do_removal_processing ();
+};
+
+ADD_THIS_TRANSLATOR(System_start_delimiter_engraver);
+
+
+void
+System_start_delimiter_engraver::acknowledge_element (Score_element_info inf)
+{
+  if (dynamic_cast<Staff_symbol*> (inf.elem_l_))
+    {
+      /*
+       don't add as Axis_group_interface (spanbar_).add_element (),
+       because that would set the parent as well */
+         
+      Group_interface (spanbar_).add_element (inf.elem_l_);
+    }
+  else if (System_start_delimiter * b = dynamic_cast<System_start_delimiter *> (inf.elem_l_))
+    {
+      SCM gl = b->get_elt_property ("glyph");
+      SCM my_gl = get_property ("spanBarGlyph");
+
+      /*
+       UGH UGH
+       */
+      if (gh_symbol_p (gl) && gl  == ly_symbol2scm ("brace")
+         && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
+       b->translate_axis ( -paper_l ()->get_var ("interline"), X_AXIS); // ugh
+    }
+
+}
+
+System_start_delimiter_engraver::System_start_delimiter_engraver()
+{
+  spanbar_ = 0;
+}
+
+void
+System_start_delimiter_engraver::do_creation_processing()
+{
+  spanbar_ = new System_start_delimiter;
+  spanbar_->set_bound (LEFT, get_staff_info ().command_pcol_l ());
+  announce_element (Score_element_info (spanbar_,0));
+}
+
+void
+System_start_delimiter_engraver::do_removal_processing ()
+{
+  SCM s = get_property ("systemStartDelimiterGlyph");
+  if (gh_symbol_p (s))
+    {
+      spanbar_->set_elt_property ("glyph", s);
+    }
+
+  // ugh, should have naming without bracket
+  SCM collapse = get_property ("bracketCollapseHeight");
+  if (gh_number_p (collapse))
+    spanbar_->set_elt_property ("collapse-height", collapse);
+  else
+    spanbar_->set_elt_property ("collapse-height", gh_double2scm (1));
+      
+  spanbar_->set_bound (RIGHT, get_staff_info ().command_pcol_l ());
+  typeset_element (spanbar_);
+}
+
diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc
new file mode 100644 (file)
index 0000000..bc94277
--- /dev/null
@@ -0,0 +1,119 @@
+/*   
+  system-start-delimiter.cc --  implement System_start_delimiter
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+#include <math.h>
+
+#include "system-start-delimiter.hh"
+#include "paper-def.hh"
+#include "molecule.hh"
+#include "axis-group-interface.hh"
+#include "lookup.hh"
+#include "all-font-metrics.hh"
+
+Molecule
+System_start_delimiter::staff_bracket (Real height) const 
+{
+  Paper_def* p= paper_l ();
+  Real arc_height = p->get_var("bracket_arch_height");
+  SCM at = gh_list (ly_symbol2scm ("bracket"),
+                   gh_double2scm (p->get_var("bracket_arch_angle")),
+                   gh_double2scm (p->get_var("bracket_arch_width")),
+                   gh_double2scm (arc_height),
+                   gh_double2scm (p->get_var("bracket_width")),
+                   gh_double2scm (height),
+                   gh_double2scm (p->get_var("bracket_arch_thick")),
+                   gh_double2scm (p->get_var("bracket_thick")),
+                   SCM_UNDEFINED);
+
+  Real staff_space = p->get_var ("interline");
+  Real h = height + 2 * arc_height;
+  Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2));
+  Molecule mol (b, at);
+  
+  mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS);
+  return mol;
+}
+
+System_start_delimiter::System_start_delimiter ()
+{
+  set_empty (Y_AXIS);
+}
+
+Molecule
+System_start_delimiter::simple_bar (Real h) const
+{
+  Real w = paper_l ()->get_var ("barthick_score");
+  return lookup_l ()->filledbox (Box (Interval(0,w), Interval(-h/2, h/2)));
+}
+   
+
+Molecule
+System_start_delimiter::do_brew_molecule ()const
+{
+  Interval ext = Axis_group_interface::group_extent_callback (dim_cache_[Y_AXIS]);
+  Real l = ext.length (); 
+  Molecule m;
+
+  SCM s = get_elt_property ("collapse-height");
+  if (gh_number_p (s) && l < gh_scm2double (s))
+    {
+      System_start_delimiter * me = (System_start_delimiter*)this;
+      me->set_elt_property ("transparent", SCM_BOOL_T);
+      me->set_empty (X_AXIS);
+      me->set_empty (Y_AXIS);
+      return m;
+    }
+
+  
+  s = get_elt_property ("glyph");
+  if (gh_symbol_p (s) && s == ly_symbol2scm ("bracket"))
+    m = staff_bracket (l);
+  else if (gh_symbol_p (s) && s == ly_symbol2scm ("brace"))
+    m =  staff_brace (l);
+  else
+    m = simple_bar (l);
+  
+  
+  m.translate_axis (ext.center (), Y_AXIS);
+  return m;
+}
+
+/*
+  ugh. Suck me plenty.
+ */
+Molecule
+System_start_delimiter::staff_brace (Real y)  const
+{
+  Real staffht  = paper_l ()->get_var ("staffheight");
+  int staff_size  = int (rint (staffht ));
+
+  // URG
+  Real step  = 1.0;
+  int minht  = 2 * staff_size;
+  int maxht = 7 *  minht;
+  int idx = int (((maxht - step) <? y - minht) / step);
+  idx = idx >? 0;
+
+  SCM l = scm_eval (gh_list (ly_symbol2scm ("style-to-cmr"),
+                           ly_str02scm ("brace"),
+                           SCM_UNDEFINED));
+  
+  String nm = "feta-braces";
+  if (l != SCM_BOOL_F)
+    nm = ly_scm2string (gh_cdr (l));
+  nm += to_str (staff_size);
+  SCM e =gh_list (ly_symbol2scm ("char"), gh_int2scm (idx), SCM_UNDEFINED);
+  SCM at = (e);
+
+  at = fontify_atom (find_font (nm), at);
+  
+  Box b (Interval (0,0), Interval (-y/2, y/2));
+
+  return Molecule(b, at);
+}
+  
index 547d4c2ef451c21898ad57746fd685298bc8ffee..6a4a1deed75fc85ea90c674c21db68529c493346 100644 (file)
@@ -39,7 +39,7 @@ Time_signature_engraver::do_process_music()
       time_signature_p_->set_elt_property ("fraction",
                                           gh_cons (gh_int2scm (req->beats_i_),
                                                    gh_int2scm (req->one_beat_i_))); 
-      time_signature_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
+      time_signature_p_->set_elt_property ("break-align-symbol", ly_symbol2scm(  "Time_signature"));
     }
 
   
index c88e521412b098754c744780fe5758db461f418f..e64182a3a8955d84e095558b4bf0f408f1471d4c 100644 (file)
@@ -19,6 +19,7 @@ Timing_engraver::do_post_move_processing( )
 {
   bar_req_l_ = 0;
   Timing_translator::do_post_move_processing ();
+  
 }
 
 bool
@@ -35,6 +36,22 @@ Timing_engraver::do_try_music (Music*m)
   
   return Timing_translator::do_try_music (m);
 }
+#if 0
+String
+Timing_engraver::do_process_music ()
+{
+  if (gh_string_p (get_property  ("barType")))
+    ;
+  else if (!now_mom ())
+    {
+      daddy_trans_l_->set_property ("barType", ly_str02scm ("|"));
+    }
+  else
+
+  {
+  }
+}
+#endif
 
 
 String
index 2a071f2e9a9d31d27273deddb6d833f41aa216c8..d4ac8ff52862595f8bf23dcf1249803345737a34 100644 (file)
@@ -428,6 +428,17 @@ Translator_group::do_add_processing ()
     }
 }
 
+Translator_group*
+Translator_group::where_defined (SCM sym) const
+{
+  if (properties_dict_.elem_b (sym))
+    {
+      return (Translator_group*)this;
+    }
+
+  return (daddy_trans_l_) ? daddy_trans_l_->where_defined (sym) : 0;
+}
+
 SCM
 Translator_group::get_property (SCM sym) const
 {
@@ -448,3 +459,4 @@ Translator_group::set_property (String id, SCM val)
 {
   properties_dict_.set (ly_symbol2scm (id.ch_C()), val);
 }
+
index 8e6f1f58b3c1df455e4acff00e62df5f63bf4296..e9a17f134f8ffdce4f9e8c7edb43fff4abda712b 100644 (file)
@@ -55,12 +55,12 @@ StaffContext=\translator {
 
 
 %{
-       The Staff_margin_engraver puts the name of the instrument
+       The Instrument_name_engraver puts the name of the instrument
        (\property Staff.instrument; Staff.instr for subsequent lines)
        to the left of a staff.
        Usually, you only want this in the full score, not in the parts.
 
-       \consists "Staff_margin_engraver";
+       \consists "Instrument_name_engraver";
 %}
 
        defaultClef = #"treble"
@@ -75,8 +75,10 @@ StaffContext=\translator {
 \translator {
        \type "Engraver_group_engraver";
        \name ChoirStaff;
-       alignmentReference = \center;   
-       \consists "Staff_group_bar_engraver";
+       alignmentReference = \center;
+       \consists "System_start_delimiter_engraver";
+       systemStartDelimiterGlyph = #'bracket
+
 
 
        \accepts "Staff";
@@ -201,7 +203,9 @@ GrandStaffContext=\translator{
        \type "Engraver_group_engraver";
        \name GrandStaff;
        \consists "Span_bar_engraver";
-       \consists "Piano_bar_engraver";
+       \consists "System_start_delimiter_engraver";
+       systemStartDelimiterGlyph = #'brace
+       
        \consists "Property_engraver";  
        Generic_property_list = #generic-grand-staff-properties
        \accepts "Staff";
@@ -224,7 +228,12 @@ StaffGroupContext= \translator {
        \type "Engraver_group_engraver";
        \consists "Span_bar_engraver";
        \consists "Output_property_engraver";   
-       \consists "Staff_group_bar_engraver";
+       \consists "System_start_delimiter_engraver";
+       systemStartDelimiterGlyph = #'bracket
+       
+
+       \consistsend "Axis_group_engraver" ;
+
 
        \name StaffGroup;
        \accepts "Staff";
@@ -310,7 +319,7 @@ HaraKiriStaffContext = \translator {
        \StaffContext
        \remove "Axis_group_engraver";
        \consistsend "Hara_kiri_engraver";        
-       \consists "Staff_margin_engraver";
+       \consists "Instrument_name_engraver";
        \accepts "Voice";
 };
 %{
@@ -336,17 +345,19 @@ ScoreContext = \translator {
        \consists "Output_property_engraver";   
 
        %bracketCollapseHeight = #10  % \pt
-       \consists "Span_score_bar_engraver";
+       \consists "System_start_delimiter_engraver";
+       
 %      \consists "Score_priority_engraver";
        \consists "Break_align_engraver";
        breakAlignOrder = #'(
-         "Left_edge_item"
-         "Span_bar"
-         "Breathing_sign"
-         "Clef_item"
-         "Key_item"
-         "Staff_bar"
-         "Time_signature"
+         Instrument_name
+         Left_edge_item
+         Span_bar
+         Breathing_sign
+         Clef_item
+         Key_item
+         Staff_bar
+         Time_signature
        )
        \consists "Spacing_engraver";
        \consists "Vertical_align_engraver";
@@ -365,7 +376,6 @@ ScoreContext = \translator {
 
        markVisibilityFunction = #end-of-line-invisible
        barNumberVisibilityFunction = #begin-of-line-visible
-       marginVisibilityFunction = #begin-of-line-visible
 };
 
 \translator { \ScoreContext }
index 1581a6e7687cc24a342b61a6f0f6dd934d29f716..95d6e82f74cdb37de4435987cb08c48a9f36fdb0 100644 (file)
@@ -43,8 +43,8 @@ INSTALL_DIST_FILES = \
   bin/convert-mudela\
   bin/mudela-book\
   bin/ly2dvi\
-  bin/lilypond$(DOTEXE)\
-  bin/mi2mu$(DOTEXE)\
+  bin/$(program_prefix)lilypond$(program_suffix)\
+  bin/$(program_prefix)mi2mu$(program-suffix)\
   info/lilypond.info\
   man/man1/mi2mu.1\
   man/man1/lilypond.1\
index f7bee128c43e70dc6bea87edfae41edfd42cc4f2..1c4f427152172dfbaba2134b497198b3094ad0e9 100644 (file)
@@ -28,10 +28,13 @@ The documentation of LilyPond, both in HTML and PostScript.
 
 %prep
 %setup
+
 %build
-#./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --disable-optimise --enable-shared
+
 %{configure} --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --disable-optimise --enable-shared
+
 make all
+
 ln -s %{_prefix}/share/texmf/fonts/tfm/public/cm/ tfm
 
 # urg
@@ -63,6 +66,10 @@ tar -C htmldocs -xzf out/htmldoc.tar.gz || true
 mkdir -p out/examples/
 tar -cf - input/  | tar -C out/examples/ -xf- || true
 
+%ifos cygwin
+%{fix_suffixes}
+%endif
+
 %post
 
 touch /tmp/.lilypond-install
@@ -79,12 +86,17 @@ fi
 # hairy to hook it in (possibly non-existing) emacs
 %doc mudela-mode.el
 
+%ifnos cygwin
 %{_prefix}/bin/abc2ly
 %{_prefix}/bin/convert-mudela
 %{_prefix}/bin/mudela-book
 %{_prefix}/bin/ly2dvi
 %{_prefix}/bin/lilypond
 %{_prefix}/bin/midi2ly
+%else
+%{_prefix}/bin
+%endif
+
 %{_prefix}/man/man1/midi2ly.1
 %{_prefix}/man/man1/lilypond.1
 %{_prefix}/man/man1/mudela-book.1
index c4be0de6aeb17cee06d1b43537c08d7301ac765d..f35294a5547699bd16f66c5cadece0138f6a12b2 100644 (file)
@@ -14,10 +14,10 @@ ATVARIABLES = \
   package\
   PATHSEP\
   PERL\
+  program_prefix\
+  program_suffix\
   PYTHON\
   SHELL\
   TOPLEVEL_VERSION\
   step-bindir\
-  abs-step-bindir\
-
 
index f2645988b89a668526598bfd1ae0d5a2cb86975e..df8e73a6075eb21af0017084f7c8851ffa0e6e59 100644 (file)
 ;; Score_span_bars are only visible at start of line
 ;; i.e. if break_dir == RIGHT == 1
 (define Span_bar_engraver-visibility begin-of-line-invisible)
-(define Base_span_bar_engraver-visibility begin-of-line-invisible)
 (define mark-visibility end-of-line-invisible)
-(define Span_score_bar_engraver-visibility begin-of-line-visible)
-(define Piano_bar_engraver-visibility begin-of-line-visible)
-(define Staff_group_bar_engraver-visibility begin-of-line-visible)
 
 ;; Spacing constants for prefatory matter.
 ;;
 ;; (Measured in staff space)
 (define space-alist
  '(
-   (("" "Left_edge_item") . (extra-space -15.0))
-   (("" "Clef_item") . (minimum-space 1.0))
-   (("" "Staff_bar") . (minimum-space 0.0))
-   (("" "Clef_item") . (minimum-space 1.0))
-   (("" "Key_item") . (minimum-space 0.5))
-   (("" "Span_bar") . (extra-space 0.0))
-   (("" "Time_signature") . (extra-space 0.0))
-   (("" "begin-of-note") . (minimum-space 1.5))
-   (("Clef_item" "Key_item") . (minimum-space 4.0))
-   (("Key_item" "Time_signature") . (extra-space 1.0))
-   (("Clef_item"  "Time_signature") . (minimum-space 3.5))
-   (("Staff_bar" "Clef_item") .   (minimum-space 1.0))
-   (("Clef_item"  "Staff_bar") .  (minimum-space 3.7))
-   (("Time_signature" "Staff_bar") .  (minimum-space 2.0))
-   (("Key_item"  "Staff_bar") .  (extra-space 1.0))
-   (("Span_bar" "Clef_item") .   (extra-space 1.0))
-   (("Clef_item"  "Span_bar") . (minimum-space 3.7))
-   (("Time_signature" "Span_bar") . (minimum-space 2.0))
-   (("Key_item"  "Span_bar") . (minimum-space 2.5))
-   (("Staff_bar" "Time_signature") . (minimum-space 1.5)) ;double check this.
-   (("Time_signature" "begin-of-note") . (extra-space 2.0)) ;double check this.
-   (("Key_item" "begin-of-note") . (extra-space 2.5))
-   (("Staff_bar" "begin-of-note") . (extra-space 1.0))
-   (("Clef_item" "begin-of-note") . (minimum-space 5.0))
-   (("" "Breathing_sign") . (minimum-space 0.0))
-   (("Breathing_sign" "Key_item") . (minimum-space 1.5))
-   (("Breathing_sign" "begin-of-note") . (minimum-space 1.0))
-   (("Breathing_sign" "Staff_bar") . (minimum-space 1.5))
-   (("Breathing_sign" "Clef_item") . (minimum-space 2.0))
+   ((none Instrument_name) . (extra-space 1.0))
+   ((Instrument_name Left_edge_item) . (extra-space 1.0))
+   ((Left_edge_item Clef_item) . (extra-space 1.0))
+   ((none Left_edge_item) . (extra-space 0.0))
+   ((Left_edge_item Staff_bar) . (extra-space 0.0))        
+;   ((none Left_edge_item) . (extra-space -15.0))
+;   ((none Left_edge_item) . (extra-space -15.0))
+   ((none Clef_item) . (minimum-space 1.0))
+   ((none Staff_bar) . (minimum-space 0.0))
+   ((none Clef_item) . (minimum-space 1.0))
+   ((none Key_item) . (minimum-space 0.5))
+   ((none Time_signature) . (extra-space 0.0))
+   ((none begin-of-note) . (minimum-space 1.5))
+   ((Clef_item Key_item) . (minimum-space 4.0))
+   ((Key_item Time_signature) . (extra-space 1.0))
+   ((Clef_item  Time_signature) . (minimum-space 3.5))
+   ((Staff_bar Clef_item) .   (minimum-space 1.0))
+   ((Clef_item  Staff_bar) .  (minimum-space 3.7))
+   ((Time_signature Staff_bar) .  (minimum-space 2.0))
+   ((Key_item  Staff_bar) .  (extra-space 1.0))
+   ((Staff_bar Time_signature) . (minimum-space 1.5)) ;double check this.
+   ((Time_signature begin-of-note) . (extra-space 2.0)) ;double check this.
+   ((Key_item begin-of-note) . (extra-space 2.5))
+   ((Staff_bar begin-of-note) . (extra-space 1.0))
+   ((Clef_item begin-of-note) . (minimum-space 5.0))
+   ((none Breathing_sign) . (minimum-space 0.0))
+   ((Breathing_sign Key_item) . (minimum-space 1.5))
+   ((Breathing_sign begin-of-note) . (minimum-space 1.0))
+   ((Breathing_sign Staff_bar) . (minimum-space 1.5))
+   ((Breathing_sign Clef_item) . (minimum-space 2.0))
    )
 )
+
+;; (define (ly-warn s) (error s))
 (define (break-align-spacer this next)
-  (let ((entry (assoc `(,this ,next) space-alist)))
+  (let ((entry (assoc (list this next) space-alist)))
     (if entry
        (cdr entry)
        (begin (ly-warn (string-append "Unknown spacing pair `" this "', `" next "'"))
index 6b2886d4cb8daafed5fc25be9cbd2ad3e349fdf9..3e488a8f4f66b06d2b65bb93931053027c2d6bae 100644 (file)
@@ -208,6 +208,14 @@ AC_DEFUN(AC_STEPMAKE_INIT, [
     fi
     stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
 
+    # urg, how is this supposed to work?
+    if test "$program_prefix" = "NONE"; then
+         program_prefix=
+    fi
+    if test "$program_suffix" = "NONE"; then
+         program_suffix=
+    fi
+
     AC_MSG_CHECKING(Package)
     if test "x$PACKAGE" = "xSTEPMAKE"; then
        AC_MSG_RESULT(Stepmake package!)
@@ -336,7 +344,7 @@ dnl    fi
        LN=cp # hard link does not work under cygnus-nt
        LN_S='cp -r' # symbolic link does not work for native nt
        ZIP="zip -r -9" #
-       DOTEXE=.exe
+       program_suffix=.exe
        # urg
         # DIRSEP='\\'
        # PATHSEP=';'
@@ -371,7 +379,8 @@ dnl    fi
        ZIP="zip -r -9"
         INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c"
     fi
-    AC_SUBST(DOTEXE)
+    AC_SUBST(program_prefix)
+    AC_SUBST(program_suffix)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
     AC_SUBST(LN_S)
index 66e33173a68a13071d4c45d48bf97d5b87126843..f0af1ac552521d3042abe4d9d243ead98f93b613 100644 (file)
@@ -20,13 +20,15 @@ localuninstall: uninstallexe
 installexe: all
        -$(INSTALL) -d $(bindir)
        $(foreach a, $(EXECUTABLES), \
-               $(INSTALL) -m 755 $(outdir)/$(a) $(bindir)/$(a)$(DOTEXE) && \
-               strip $(bindir)/$(a)$(DOTEXE) && ) true
+               $(INSTALL) -m 755 $(outdir)/$(a) \
+               $(bindir)/$(program_prefix)$(a)$(program_suffix) && \
+               strip $(bindir)/$(program_prefix)$(a)$(program_suffix) && ) true
        $(foreach a, $(SEXECUTABLES), \
                $(INSTALL) -m 755 $(outdir)/$(a) $(bindir) &&) true
 
 uninstallexe:
-       $(foreach a, $(EXECUTABLES), rm -f $(bindir)/$(a)$(DOTEXE) &&) true
+       $(foreach a, $(EXECUTABLES), rm -f \
+               $(bindir)/$(program_prefix)$(a)$(program_suffix) && ) true
        $(foreach a, $(SEXECUTABLES), rm -f $(bindir)/$(a) &&) true
 
 
index 3fe7ed8dfb7660bb03c78aa5c4f3fabae950a0ef..ebcbe573aaddd9d632cf3934a23b0fa091854de4 100644 (file)
@@ -110,7 +110,7 @@ DODEP=rm -f $(depfile); DEPENDENCIES_OUTPUT="$(depfile) $(outdir)/$(notdir $@)"
 # generic target names:
 #
 ifdef NAME
-EXECUTABLE = $(outdir)/$(NAME)$(EXE)
+EXECUTABLE = $(outdir)/$(NAME)
 else
 EXECUTABLE =
 endif