]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.1
authorfred <fred>
Tue, 26 Mar 2002 22:42:54 +0000 (22:42 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:42:54 +0000 (22:42 +0000)
65 files changed:
CHANGES
TODO
input/test/staff-line-leading.ly [new file with mode: 0644]
input/test/stem-length.fly [new file with mode: 0644]
input/test/stem-length.ly [new file with mode: 0644]
lily/align-note-column-engraver.cc
lily/auto-beam-engraver.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/bar-script-engraver.cc
lily/beam-engraver.cc
lily/beam.cc
lily/breathing-sign.cc
lily/chord-name-engraver.cc
lily/clef-engraver.cc
lily/clef-item.cc
lily/dynamic-engraver.cc
lily/font-size-engraver.cc
lily/include/bar-script-engraver.hh
lily/include/beam.hh
lily/include/font-size-engraver.hh
lily/include/music-output-def.hh
lily/include/paper-def.hh
lily/include/smobs.hh
lily/include/text-item.hh
lily/include/time-signature.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/lily-guile.cc
lily/lyric-engraver.cc
lily/mark-engraver.cc
lily/moment.cc
lily/note-heads-engraver.cc
lily/note-performer.cc
lily/paper-def.cc
lily/parser.yy
lily/property-engraver.cc [new file with mode: 0644]
lily/property-inspect.cc
lily/rest-engraver.cc
lily/rest.cc
lily/rhythmic-column-engraver.cc
lily/score-element.cc
lily/score-priority-engraver.cc
lily/script-engraver.cc
lily/separating-line-group-engraver.cc
lily/slur-engraver.cc
lily/slur.cc
lily/staff-margin-engraver.cc
lily/staff-performer.cc
lily/staff-sym-engraver.cc
lily/stem-engraver.cc
lily/text-engraver.cc
lily/text-item.cc
lily/tie-engraver.cc
lily/time-signature-engraver.cc
lily/time-signature.cc
lily/timing-translator.cc
lily/translator-group.cc
lily/translator.cc
lily/tuplet-engraver.cc
lily/vertical-align-engraver.cc
ly/declarations.ly
ly/engraver.ly
ly/params.ly
scm/generic-property.scm [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 661f51cdb554f5c9887c810baa39c4a41d1f9d58..b7f048a1001759cab5e2f2e8b2c8ab4144351b9d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,19 @@
+pl 3.hwn2,1
+      - Generic properties and Property_engraver. Moved most of the
+properties.
+
+0.lu1
+       - resurrected midi2ly
+
+0.jcn1
+       - bf: lyrics lexer
+       - reverted mup2ly revert
+
+pl 3.uu1:
+       - frontport of 1.2.17 patches.
+
+**********
+
 1.3.0:
 
 pl 15.hwn2
diff --git a/TODO b/TODO
index 68c356c704bff1585f17c4b62c46dacc7c5aa89c..771ea60f80e6d3542d52a8fc2573a3a18a98aef6 100644 (file)
--- a/TODO
+++ b/TODO
@@ -11,6 +11,13 @@ Grep -i for TODO, FIXME and ugh/ugr/urg.
 .* TODO
 . * make this file understandable for 3rd parties.
 . * use Rhythmic_head::position_i () for all Staff_referenced 
+. * eradicate all VIRTUAL_COPY_CONS () macros ; use indexed creation,
+    eg.
+
+       ctor_dict["Score_element"]->clone_func (orig);
+       ctor_dict["Score_element"]->create_func ();
+
+
 . * note head on stem err msg in dutch.
 . *  why need to run -C mf twice?
 . * fix interstaff stuff
@@ -21,8 +28,7 @@ everything works and matches up; when either is set just a bit above the
 default 5.0 (5.4 is what I was hoping to use), stems miss note heads. So
 it's some sort of a numerical (truncation/roundoff) problem.
 John
-. * metre -> meter
-. * Fixed size staff heights;
+. * Fixed size staff/system heights;
 . * ly2dvi : don't repeat opus if same.
 . * breaks before mmrests are favored.
 . * hara kiri _8 clef.
@@ -55,7 +61,6 @@ from which comes tons of confusion).  It is usually notated as (again, using
 C as the root) Cdim7 or Co7.
 
 . * Mondrup:
-
 - I would like the possibility of forcing clef- and key- changes to be
 printed _after_ the new bar line
 
diff --git a/input/test/staff-line-leading.ly b/input/test/staff-line-leading.ly
new file mode 100644 (file)
index 0000000..03a5daf
--- /dev/null
@@ -0,0 +1,8 @@
+\score { 
+  \notes \relative c'' \context GrandStaff <
+       \context Staff = up { c4 c4  }
+       \context Staff = down { \property Staff. staffLineLeading = #5.5 c4
+         <c8 d f g>
+        }
+>
+}
diff --git a/input/test/stem-length.fly b/input/test/stem-length.fly
new file mode 100644 (file)
index 0000000..00718bc
--- /dev/null
@@ -0,0 +1,2 @@
+
+g''4 \property Voice.stemLength = #14  g4 \property Voice.stemLength = #3 g4  g,,4  
diff --git a/input/test/stem-length.ly b/input/test/stem-length.ly
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index c28320f301dc084e9b66fadf19227c5c7a8786fb..74967e7b66807a8f0ff7144245bf0b82c1d933d7 100644 (file)
@@ -86,7 +86,7 @@ Align_note_column_engraver::process_acknowledged ()
 
       */
       SCM grsp = get_property ("graceAccidentalSpace", 0);
-      if (SCM_NUMBERP(grsp))
+      if (gh_number_p(grsp))
        {
          /*
            ugh.
index 7caf691c79f9e4e02b9da81369eaa87705e4d400..c2d30f6d504a0786506e36e5516c5b9c3943117b 100644 (file)
@@ -66,6 +66,13 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   if (test_mom.den () != 1)
     type_str = type_str + "_" + to_str (test_mom.den ());
 
+  /*
+    URG
+    
+    FIXME: SHOULD USE ALIST
+    
+   */
+
   /*
     Determine end moment for auto beaming (and begin, mostly 0==anywhere) 
     In order of increasing priority:
@@ -203,24 +210,7 @@ Auto_beam_engraver::create_beam_p ()
       beam_p->add_stem ((*stem_l_arr_p_)[i]);
     }
   
-  /* urg, copied from Beam_engraver */
-  SCM prop = get_property ("beamslopedamping", 0);
-  if (SCM_NUMBERP(prop)) 
-    beam_p->set_elt_property (damping_scm_sym, prop);
-
-  prop = get_property ("autoKneeGap", 0);
-  if (SCM_NUMBERP(prop)) 
-    beam_p->set_elt_property (auto_knee_gap_scm_sym, prop);
-
-  prop = get_property ("autoInterstaffKneeGap", 0);
-  if (SCM_NUMBERP(prop)) 
-    beam_p->set_elt_property (auto_interstaff_knee_gap_scm_sym, prop);
-      
-  prop = get_property ("beamquantisation", 0);
-  if (SCM_NUMBERP(prop)) 
-    beam_p->quantisation_ = (Beam::Quantisation)(int)prop;
-  announce_element (Score_element_info (beam_p, 0));
+
   return beam_p;
 }
 
index 5811e6dc864c1b4a4be43938f9f920c03852fc33..92378ccbd8152f1fe14f9d9d3707504675b77e09 100644 (file)
@@ -49,11 +49,6 @@ Bar_engraver::create_bar ()
        {
          bar_p_->set_elt_property (at_line_start_scm_sym, SCM_BOOL_T);
        }
-      prop = get_property ("barSize", 0);
-      if (SCM_NUMBERP(prop))
-       {
-         bar_p_->set_elt_property (bar_size_scm_sym, prop);
-       }
       announce_element (Score_element_info (bar_p_, 0));
     }
 }
index 9db68461fbff5f2932cfc4a9712c806254eb3220..2db31f2b918ab1cc9fcc044a936fc088efc14647 100644 (file)
@@ -33,7 +33,6 @@ Bar_number_engraver::do_process_requests ()
       create_items (0);
        
       text_p_->text_str_ = to_str (time->bars_i_);
-      text_p_->style_str_ = "roman";
     }
 }
 
index 12e94befc1f3d2cae47bd8e0c45f58dd8e9d0f15..cf73f365007d64f116a5d0d8c6685d44883ea832 100644 (file)
@@ -45,7 +45,7 @@ Bar_script_engraver::do_creation_processing ()
 */
  
 void
-Bar_script_engraver::do_acknowledge_element (Item *i)
+Bar_script_engraver::attach_script_to_item (Item *i)
 {
   Axis other_axis = Axis((axis_ + 1)%2);
   if (staff_side_p_ && !staff_side_p_->parent_l(other_axis)) 
@@ -106,7 +106,7 @@ Bar_script_engraver::acknowledge_element (Score_element_info inf)
       if (inf.origin_trans_l_arr_.size () != 1)
        return;
 
-      do_acknowledge_element (i);
+      attach_script_to_item (i);
     }
 }
 
@@ -154,7 +154,7 @@ Bar_script_engraver::create_items (Request *rq)
   staff_side_p_->set_victim(text_p_);
   
   SCM padding = get_property (type_ + "ScriptPadding", 0);
-  if (SCM_NUMBERP(padding))
+  if (gh_number_p(padding))
     {
       staff_side_p_->set_elt_property (padding_scm_sym, padding);
     }
index 6022a0a5781bc8cd929a48dc9c3581c52a897c3a..99a7c00d28bd2880593aa829728c09f24fbc887c 100644 (file)
@@ -99,21 +99,6 @@ Beam_engraver::do_process_requests ()
       
       
       /* urg, must copy to Auto_beam_engraver too */
-      SCM prop = get_property ("beamslopedamping", 0);
-      if (SCM_NUMBERP(prop)) 
-       beam_p_->set_elt_property (damping_scm_sym, prop);
-      
-      prop = get_property ("autoKneeGap", 0);
-      if (SCM_NUMBERP(prop)) 
-       beam_p_->set_elt_property (auto_knee_gap_scm_sym, prop);
-      
-      prop = get_property ("autoInterstaffKneeGap", 0);
-      if (SCM_NUMBERP(prop)) 
-       beam_p_->set_elt_property (auto_interstaff_knee_gap_scm_sym, prop);
-
-      prop = get_property ("beamquantisation", 0);
-      if (SCM_NUMBERP(prop)) 
-       beam_p_->quantisation_ = (Beam::Quantisation)gh_scm2int(prop);
  
       announce_element (Score_element_info (beam_p_, reqs_drul_[START]));
     }
index 83d83260aed0c335742e73dd8131beb00e0fc2b6..69de9292315ab38349ca5ea41697619fe2fe31dd 100644 (file)
@@ -41,7 +41,6 @@ Beam::Beam ()
 {
   slope_f_ = 0;
   left_y_ = 0;
-  quantisation_ = NORMAL;
   multiple_i_ = 0;
 }
 
@@ -283,34 +282,32 @@ Beam::get_default_dir () const
   Direction beam_dir;
   Direction neutral_dir = (Direction)(int)paper_l ()->get_var ("stem_default_neutral_direction");
 
-  Dir_algorithm a = (Dir_algorithm)rint(paper_l ()->get_var ("beam_dir_algorithm"));
-  switch (a)
+  SCM a = get_elt_property (gh_symbol2scm ("beam_dir_algorithm"));
+  a= gh_cdr (a);
+  
+  if (a == gh_symbol2scm ("majority")) // should get default from paper.
+    beam_dir = (count[UP] == count[DOWN]) ? neutral_dir 
+      : (count[UP] > count[DOWN]) ? UP : DOWN;
+  else if (a == gh_symbol2scm ("mean"))
+    // mean center distance
+    beam_dir = (total[UP] == total[DOWN]) ? neutral_dir
+      : (total[UP] > total[DOWN]) ? UP : DOWN;
+  else if (a == gh_symbol2scm ("median"))
     {
-    case MAJORITY:
-      beam_dir = (count[UP] == count[DOWN]) ? neutral_dir 
-        : (count[UP] > count[DOWN]) ? UP : DOWN;
-      break;
-    case MEAN:
-      // mean center distance
-      beam_dir = (total[UP] == total[DOWN]) ? neutral_dir
-        : (total[UP] > total[DOWN]) ? UP : DOWN;
-      break;
-    default:
-    case MEDIAN:
       // median center distance
-      if (!count[DOWN] || !count[UP])
-        {
-         beam_dir = (count[UP] == count[DOWN]) ? neutral_dir 
-           : (count[UP] > count[DOWN]) ? UP : DOWN;
-       }
-      else
-        {
+      if (count[DOWN] && count[UP])
+       {
          beam_dir = (total[UP] / count[UP] == total[DOWN] / count[DOWN]) 
            ? neutral_dir 
-             : (total[UP] / count[UP] > total[DOWN] / count[DOWN]) ? UP : DOWN;
+           : (total[UP] / count[UP] > total[DOWN] / count[DOWN]) ? UP : DOWN;
+       }
+      else
+       {
+         beam_dir = (count[UP] == count[DOWN]) ? neutral_dir 
+           : (count[UP] > count[DOWN]) ? UP : DOWN;
        }
-      break;
     }
+  
   return beam_dir;
 }
 
@@ -517,7 +514,10 @@ Beam::quantise_dy ()
     + n * interline
     */
 
-  if (quantisation_ <= NONE)
+  SCM q = get_elt_property (gh_symbol2scm ("slope_quantisation"));
+  q = gh_cdr (q);
+  
+  if (q == gh_symbol2scm ("none"))
     return;
 
   Real interline_f = stems_[0]->staff_line_leading_f ();
@@ -532,7 +532,6 @@ Beam::quantise_dy ()
   
   Real quanty_f = 0.0;
 
-  /* UGR.   ICE in 2.8.1; bugreport filed. */
   Array<Real> allowed_fraction (3);
   allowed_fraction[0] = 0;
   allowed_fraction[1] = (beam_f / 2 + staffline_f / 2);
@@ -560,9 +559,8 @@ Beam::quantise_left_y (bool extend_b)
     we only need to quantise the start of the beam as dy is quantised too
    if extend_b then stems must *not* get shorter
    */
-
-  if (quantisation_ == NONE)
-    return;
+  SCM q = get_elt_property (gh_symbol2scm ("slope_quantisation"));
+  q = gh_cdr (q);
 
   /*
     ----------------------------------------------------------
@@ -607,7 +605,7 @@ Beam::quantise_left_y (bool extend_b)
   Real beamdy_f = beamdx_f * slope_f_ * internote_f;
 
   Array<Real> allowed_position;
-  if (quantisation_ <= NORMAL) 
+  if (q == gh_symbol2scm ("normal"))
     {
       if ((multiple_i_ <= 2) || (abs (beamdy_f) >= staffline_f / 2))
        allowed_position.push (straddle);
@@ -615,9 +613,9 @@ Beam::quantise_left_y (bool extend_b)
        allowed_position.push (sit);
       allowed_position.push (hang);
     }
-  else
-    // TODO: check and fix TRADITIONAL
+  else if (q == gh_symbol2scm ("traditional"))
     {
+      // TODO: check and fix TRADITIONAL
       if ((multiple_i_ <= 2) || (abs (beamdy_f) >= staffline_f / 2))
        allowed_position.push (straddle);
       if ((multiple_i_ <= 1) && (beamdy_f <= staffline_f / 2))
index 0fff51106f00d4227043cd438442079ffdae85df..923eeeab1e3f4841ae3ec95591ad51b3d5f5d45d 100644 (file)
@@ -23,7 +23,6 @@ Breathing_sign::Breathing_sign ()
 {
   dir_ = UP;
   set_elt_property (breakable_scm_sym, SCM_BOOL_T);
-  set_elt_property (break_priority_scm_sym, gh_int2scm (-4));
   set_elt_property (visibility_lambda_scm_sym,
                    ly_ch_C_eval_scm ("non_postbreak_visibility"));
 }
index d0005c89833380089873a782a1255e9143631311..08d397b6f380e27d6df7f37c3712d3d17b7c7a59 100644 (file)
@@ -83,10 +83,6 @@ Chord_name_engraver::do_process_requests ()
 
   item_p->text_str_ = chord.banter_str (inversion);
   
-  SCM style = get_property ("textStyle", 0);
-  if (gh_string_p (style))
-    item_p->style_str_ = ly_scm2string (style);
-  
   text_p_arr_.push (item_p);
   announce_element (Score_element_info (item_p, 0));
 }
index 68d96cef59cd25f3193dbcb88f7c60a20490e427..335ff0a62f16efbfbb3f78e2bd3ae89e24693296 100644 (file)
@@ -190,11 +190,6 @@ Clef_engraver::create_clef()
   if (!clef_p_)
     {
       Clef_item *c= new Clef_item;
-      c->set_elt_property (break_priority_scm_sym, gh_int2scm (-2)); // ugh
-      SCM clefstyle = get_property ("clefStyle", 0);
-      if (gh_string_p(clefstyle))
-       c->set_elt_property (style_scm_sym, clefstyle);
-      
       announce_element (Score_element_info (c, clef_req_l_));
       clef_p_ = c;
     }
index 2919255e71d13168fb90e1f93a1679df038a9531..f203d39baeac11b79b3cd740d91251c74f67fca3 100644 (file)
@@ -60,7 +60,7 @@ Clef_item::do_add_processing ()
          pscore_l_->typeset_element (g);
       
          g->text_str_ = "8";
-         g->style_str_ = "italic";
+         g->set_elt_property (style_scm_sym, gh_str02scm ("italic"));
          g->set_parent (this, Y_AXIS);
          g->set_parent (this, X_AXIS);   
 
index 2933131c8d26b62339cb48bd4a07469e56230ef7..93dc2e7d5acfa89de09436befac7b41972eeea8e 100644 (file)
@@ -131,7 +131,7 @@ Dynamic_engraver::do_process_requests()
            }
 
          prop = get_property ("dynamicDirection", 0);
-         if (SCM_NUMBERP(prop))
+         if (gh_number_p(prop))
            {
              staff_side_p_->dir_ = to_dir (prop);
            }
@@ -141,7 +141,7 @@ Dynamic_engraver::do_process_requests()
            }
 
          prop = get_property ("dynamicPadding", 0);
-         if (SCM_NUMBERP(prop))
+         if (gh_number_p(prop))
            {
              staff_side_p_->set_elt_property (padding_scm_sym, prop);
            }
@@ -180,7 +180,7 @@ Dynamic_engraver::do_process_requests()
                      to_end_ss_span_p_->dir_ = to_dir (prop);
                    }
                  prop = get_property ("dynamicPadding", 0);
-                 if (SCM_NUMBERP(prop))
+                 if (gh_number_p(prop))
                    {
                      to_end_ss_span_p_->set_elt_property (padding_scm_sym,prop);
                    }
index b8d91ae55cc93c501baff57c2491680d6a923902..4f706b34bf29ad2094e0f6797a2b0c86d27cf89f 100644 (file)
@@ -13,7 +13,7 @@
 
 Font_size_engraver::Font_size_engraver ()
 {
-  size_i_ = 0;
+  size_ = SCM_EOL;
 }
 
 void
@@ -21,20 +21,25 @@ Font_size_engraver::do_process_requests ()
 {
   SCM s (get_property ("fontSize", 0));
   
-  if (SCM_NUMBERP(s))
+  if (gh_number_p(s))
     {
-      size_i_ = gh_scm2int (s);
+      size_ = gh_scm2int (s);
+    }
+  else
+    {
+      size_ = SCM_EOL;
     }
 }
 
 void
 Font_size_engraver::acknowledge_element (Score_element_info e)
 {
-  if (size_i_ && e.elem_l_->get_elt_property (fontsize_scm_sym) == SCM_BOOL_F)
+  if (size_ != SCM_EOL
+      && e.elem_l_->get_elt_property (fontsize_scm_sym) == SCM_BOOL_F)
     {
-      e.elem_l_->set_elt_property (fontsize_scm_sym,
-                                  gh_int2scm (size_i_));
+      e.elem_l_->set_elt_property (fontsize_scm_sym, size_);
     }
 }
+
 ADD_THIS_TRANSLATOR (Font_size_engraver);
 
index dec3c05ef6686107f48adef00e9be76832f6f921..a3642a29a68bb7acdbb9b11b4521b2203b3d9d36 100644 (file)
@@ -31,7 +31,7 @@ protected:
   /**
     Put the script on #it#
    */
-  void do_acknowledge_element (Item *it);
+  void attach_script_to_item (Item *it);
   /**
      Return non-nil if we want to hang something on this.
    */
index 9e1cbb83464ebcac28b9143d10dc68890083b364..de68f6f99ca4936d8d0597da61756bf1e68e22ad 100644 (file)
@@ -23,6 +23,7 @@ damping: amount of beam slope damping. (int)
 
 should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams 
 
+slope_quantisation: 'none, 'normal or 'traditional
 
 */
 class Beam : public Directional_spanner  {
@@ -44,11 +45,7 @@ public:
   /// position of leftmost end of beam  
   Real left_y_;
 
-  /** should beam pos / slope be quantised? 0: no, 1: yes, 2: traditional
-      JUNKME.
-   */
-  Quantisation quantisation_;
-  
+
   /// maximum number of beams (for opening-up of beam-spacing)
   int multiple_i_;
 
index 0edef5be86e4db8908b024867e1a47475e48cb80..d36ee646830232a0f71caf60f017f4758b5ed35e 100644 (file)
@@ -11,7 +11,7 @@
 #define FONT_SIZE_GRAV_HH
 
 #include "engraver.hh"
-
+#include "protected-scm.hh"
 /**
    Set font size on elements that do not have a fontsize set yet.
 
@@ -20,7 +20,7 @@
    Writes element property fontsize 
  */
 class Font_size_engraver : public Engraver {
-  int size_i_;
+  Protected_scm size_;
 protected:
   virtual void acknowledge_element (Score_element_info);
   virtual void  do_process_requests ();
index 45644294ee689e4e237c4ccff2142491bb472342..ee91b59f8a137f82b8a3f88442a548fdeb6971da 100644 (file)
@@ -14,6 +14,7 @@
 #include "lily-proto.hh"
 #include "virtual-methods.hh"
 #include "dictionary.hh"
+#include "scm-hash.hh"
 
 /**
   Definition of how to output mudela. 
@@ -25,6 +26,7 @@ public:
   Scope *scope_p_;
   
   Array<String> filename_str_arr_;
+  Scheme_hash_table default_properties_;
   
   Music_output_def (Music_output_def const&);
   Music_output_def ();
index 8615d9cf86c957ab430f8d8da40e889f88cff8cd..f9393470943728b4f81112537d994015b400d83f 100644 (file)
@@ -57,7 +57,6 @@ public:
   Real get_realvar (SCM symbol) const;
   Real get_var (String id) const;
 
-  SCM get_scm_var (SCM sym) const;
   
   void reinit ();
   Paper_def ();
index a038db298e7ddf004b62358c01e85e9534bc8811..5c44644c2ec22e8542fb697d390a7b063b066121 100644 (file)
@@ -33,6 +33,7 @@
        static scm_sizet free_smob (SCM s);                     \
        static int print_smob (SCM s, SCM p, scm_print_state*); \
        static long smob_tag_;                                  \
+       static SCM equal_p (SCM a, SCM b);\
        static void init_smobs();                               \
        void unsmobify_self ();\
         void do_smobify_self();\
index 8b73e999bb6714aa9b6fc9c1ddda951b1ac40475..4e628f27870ab4a1333f33c52a2a9e20848cfd1d 100644 (file)
@@ -19,9 +19,7 @@ class Text_item : public Item
 {
 public:
   String text_str_;
-  String style_str_;
 
-  Text_item ();
   VIRTUAL_COPY_CONS (Score_element);
 protected:
   virtual void do_print () const;
index 771ff759af86711f64a45dc89095aab89b125e39..39401cb2080de0b519a6d4a94d1cc518abe6c311 100644 (file)
@@ -27,8 +27,6 @@ protected:
 public:
   Time_signature () ;
   Array<int> args_;
-  String time_sig_type_str_;
-  
   
   VIRTUAL_COPY_CONS(Score_element);
 };
index 00da2cd3917804bd9d78a4d71a2d8cf6ac725649..e1d91d1aeab4c7fa0328b2ae8641e3871205ae97 100644 (file)
@@ -38,8 +38,9 @@ class Translator_group : public virtual Translator {
   Cons_list<Translator> trans_p_list_;
 
 public:
-  SCM get_property (String type_str, Translator_group  **where_found_l) const;
+  SCM get_property (SCM name_sym, Translator_group  **where_found_l) const;
   void set_property (String var_name, SCM value);
+  
 
   String id_str_;
 
index ec0feb943f3484cc5de8b985a05a62ff38337dec..598544b142d8cbdf24ddd4714903127acee43b2d 100644 (file)
@@ -59,7 +59,10 @@ public:
     ask daddy for a feature
     */
   Music_output_def *output_def_l () const;
+
   SCM get_property (String, Translator_group **) const;
+  SCM get_property (SCM symbol, Translator_group **) const;
+  
   virtual Moment now_mom () const;  
 
 protected:
index 51b56ca726deb798e2b889965d80486f795a0837..b42b34592e93b3788fe0c8db276aefba09bbf8d5 100644 (file)
@@ -109,7 +109,7 @@ ly_quote_scm (SCM s)
 SCM
 ly_symbol (String name)
 {
-  return gh_car (scm_intern ((char*)name.ch_C(), name.length_i()));
+  return gh_symbol2scm ((char*)name.ch_C());
 }
 
 String
index 080546f2f5fe6524e18e880304043fb607b9f1b1..f6b61316fa50995b51fa8a8ec7f5bceb09d39d99 100644 (file)
@@ -44,10 +44,6 @@ Lyric_engraver::do_process_requests()
       text_p_->text_str_ = req_l_->text_str_;
       text_p_->text_str_ += " ";       // ugh.
 
-      SCM style = get_property ("textStyle", 0);
-      if (gh_string_p(style))
-       text_p_->style_str_ = ly_scm2string (style);
-
       text_p_->set_elt_property (non_rhythmic_scm_sym, SCM_BOOL_T);
       
       announce_element (Score_element_info (text_p_, req_l_));
index 1c4b966a4fa7d139629ff5c84b3abd2e1ad20fb2..444bd2ffeb46985750cf307502fa1c792a443ee3 100644 (file)
@@ -46,7 +46,8 @@ Mark_engraver::do_process_requests ()
     {
       create_items (mark_req_l_);
       text_p_->text_str_ = mark_req_l_->str_;
-      text_p_->style_str_ = text_p_->text_str_.index_any_i ("0123456789") >= 0 
-       ? "mark" : "Large";
+      SCM st = gh_str02scm ((text_p_->text_str_.index_any_i ("0123456789")  >= 0 )
+                           ? "mark" : "large");
+      text_p_->set_elt_property (style_scm_sym,  st);
     }
 }
index 7b76747d7372be3f9d337952ca8303e6d427bd2e..94d65eab45908f2c7505172309927af96bde03fb 100644 (file)
@@ -67,3 +67,12 @@ init_moments ()
 }
 
 ADD_SCM_INIT_FUNC(moms,init_moments);
+
+SCM
+Moment::equal_p (SCM a, SCM b)
+{
+  Moment *m1 = SMOB_TO_TYPE(Moment, a);
+  Moment *m2 = SMOB_TO_TYPE(Moment, b);
+      
+  return (*m1 == *m2) ? SCM_BOOL_T : SCM_BOOL_F;
+}
index 99477e09d74076452d0a4e83db6a3fa6d363d4db..92c4b7ef986f2fc53a4106c51ddee706acdbd418 100644 (file)
@@ -73,12 +73,13 @@ Note_heads_engraver::do_process_requests()
        }
       note_p->position_i_  = note_req_l->pitch_.steps ();
 
+      /*
+       TODO: transparent note heads.
+       */
+        
       if (gh_string_p (noteheadstyle))
        {
-         if (ly_scm2string (noteheadstyle) == "transparent")
-           note_p->set_elt_property (transparent_scm_sym, SCM_BOOL_T);
-         else 
-           note_p->set_elt_property (style_scm_sym, noteheadstyle);
+         note_p->set_elt_property (style_scm_sym, noteheadstyle);
        }
       
       Score_element_info itinf (note_p,note_req_l);
index f455204067df9a2a76e4463d1f11ed3bdc94de9f..25a49c2f8591ff34d540461ab0485fc6d6716d4b 100644 (file)
@@ -38,7 +38,7 @@ Note_performer::do_process_requests ()
       int transposing_i = 0;
       //urg
       SCM prop = get_property ("transposing", 0);
-      if (SCM_NUMBERP(prop)) 
+      if (gh_number_p(prop)) 
        transposing_i = gh_scm2int (prop);
 
       while (note_req_l_arr_.size ())
index c5a9146f811d1240a9c1d6ed563334f7a499804d..ead9c06ae5930001a3c42f56daed25ea3accdf53 100644 (file)
@@ -54,33 +54,6 @@ Paper_def::Paper_def (Paper_def const&s)
     }
 }
 
-SCM
-Paper_def::get_scm_var (SCM s) const
-{
-  if (!scope_p_->elem_b (s))
-    return SCM_BOOL_F;
-
-  Identifier * id = scope_p_->elem (s);
-  
-  SCM z;
-  SCM_NEWCELL (z);
-  SCM_SETCAR(z, s);
-
-  SCM val;
-  
-  if (dynamic_cast<Real_identifier*> (id))
-    {
-      Real r = *id->access_content_Real (false);
-      val = gh_double2scm (r);
-    }
-  else
-    {
-      return SCM_BOOL_F;
-    }
-  
-  SCM_SETCDR(z,val);
-  return z;
-}
 
 Real
 Paper_def::get_var (String s) const
index c5b3927e59392af55540fb7e6a0c1ff7c71d0a74..fb8e92a65e9ac18fc6dee40f4c2b6bf990b01faf 100644 (file)
@@ -550,7 +550,13 @@ paper_def_body:
                $$->set_lookup ($2, l);
        }
        | paper_def_body assignment semicolon {
-
+               
+       }
+       | paper_def_body SCM_T '=' SCM_T {
+               if (!gh_symbol_p ($2))
+                       THIS->parser_error ("expect a symbol as lvalue");
+               else
+                       $$->default_properties_[$2] = $4;
        }
        | paper_def_body translator_spec_block {
                $$->assign_translator ($2);
diff --git a/lily/property-engraver.cc b/lily/property-engraver.cc
new file mode 100644 (file)
index 0000000..1ff1282
--- /dev/null
@@ -0,0 +1,74 @@
+/*   
+  property-engraver.cc --  implement Property engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "lily-guile.hh"
+#include "engraver.hh"
+#include "protected-scm.hh"
+#include "dictionary.hh"
+#include "score-element.hh"
+
+class Property_engraver : public Engraver
+{
+  Dictionary<Protected_scm> prop_dict_;
+  void apply_properties (SCM, Score_element*);
+
+protected:
+  virtual void acknowledge_element (Score_element_info ei);
+  virtual void do_creation_processing ();
+
+  VIRTUAL_COPY_CONS(Translator);
+};
+
+void
+Property_engraver::do_creation_processing ()
+{
+  SCM plist = get_property ("Generic_property_list", 0);
+  for (; SCM_NIMP (plist); plist = gh_cdr (plist))
+    {
+      SCM elt_props = gh_car (plist);
+      prop_dict_[ly_scm2string (gh_car (elt_props))] = gh_cdr (elt_props);
+    }
+}
+
+void
+Property_engraver::acknowledge_element (Score_element_info i)
+{
+  if (prop_dict_.elem_b (i.elem_l_->name()))
+    {
+      SCM p = prop_dict_[i.elem_l_->name()];
+      apply_properties (p,i.elem_l_);
+    }
+  if (prop_dict_.elem_b ("all"))
+    {
+      apply_properties (prop_dict_["all"], i.elem_l_);
+    }
+}
+
+void
+Property_engraver::apply_properties (SCM p, Score_element *e)
+{  
+  for (; SCM_NIMP (p); p = gh_cdr (p))
+    {
+      SCM entry = gh_car (p);
+      SCM prop_sym = gh_car (entry);
+      SCM type_p   = gh_cadr (entry);
+      SCM elt_prop_name = gh_caddr (entry);
+
+      if (e->get_elt_property (elt_prop_name) != SCM_BOOL_F)
+       continue;
+      
+      SCM val = get_property (prop_sym, 0);
+      if (val != SCM_UNDEFINED
+         && gh_apply (type_p, scm_listify (val, SCM_UNDEFINED))
+         == SCM_BOOL_T)
+       e->set_elt_property (elt_prop_name, val);
+    }
+}
+
+ADD_THIS_TRANSLATOR(Property_engraver);
index 5e29f4160b094c8e262ea205cb960ea5ea7bb01e..57093f8bce8adffac3f6485baee180df7ac6415d 100644 (file)
@@ -12,7 +12,7 @@
 bool
 isdir_b (SCM s)
 {
-  if (SCM_NUMBERP (s))
+  if (gh_number_p (s))
     {
       int i = gh_int2scm (s);
       return i>= -1 && i <= 1; 
index 939baa21612a12f04c016b1f7c02a937db5190eb..dde03daa1c844476d32ebdc6dcd2a5126874692c 100644 (file)
@@ -56,12 +56,7 @@ Rest_engraver::do_process_requests ()
          dot_p_->dots_i_ = rest_req_l_->duration_.dots_i_;       
          announce_element (Score_element_info (dot_p_,0));
        }
-      if (rest_p_->balltype_i_ >= 2) 
-       {
-         SCM reststyle = get_property ("restStyle", 0);
-         if (gh_string_p (reststyle))
-           rest_p_->set_elt_property (style_scm_sym,reststyle);
-       }
+
       announce_element (Score_element_info (rest_p_, rest_req_l_));
     }
 }
index daa9ceb5ddfe2780c19559292e340a2d190bb78a..14e10a35379f5b667f2c8e14857db126070e4785 100644 (file)
@@ -52,7 +52,7 @@ Rest::do_brew_molecule_p () const
   
   String style; 
   SCM style_sym =get_elt_property (style_scm_sym);
-  if (style_sym != SCM_BOOL_F)
+  if (balltype_i_ >= 2 && style_sym != SCM_BOOL_F)
     {
       style = ly_scm2string (SCM_CDR(style_sym));
     }
index 914a2c2ecfdefa1577e9f4757a5c861e07d5671a..5862e6f790e2910aae9d633fff7fb52177618a4d 100644 (file)
@@ -107,18 +107,6 @@ Rhythmic_column_engraver::do_pre_move_processing()
 {
   if (ncol_p_) 
     {
-      SCM sh = get_property ("horizontalNoteShift", 0);
-      if (SCM_NUMBERP(sh))
-       {
-         ncol_p_->set_elt_property (horizontal_shift_scm_sym, sh);
-       }
-
-      sh = get_property ("forceHorizontalShift" ,0);
-      if (SCM_NUMBERP(sh))
-       {
-         ncol_p_->set_elt_property (force_hshift_scm_sym, sh);
-       }
-
       typeset_element (ncol_p_);
       ncol_p_ =0;
     }
index a8a82a8a87c6cb0f3e636e28fdce7655a56e4633..487a6c0d56bebb6d1612bf7e2d1d71a7271a8d07 100644 (file)
@@ -93,10 +93,17 @@ Score_element::get_elt_property (SCM sym) const
   SCM s =  scm_assq(sym, element_property_alist_);
 
   // is this a good idea?
-  if (s == SCM_BOOL_F && pscore_l_ && pscore_l_->paper_l_)
-    s = pscore_l_->paper_l_->get_scm_var (sym);
+  if (s != SCM_BOOL_F)
+    return s;
 
-  return s;
+  if (pscore_l_)
+    {
+      // should probably check for Type::sym as well.
+      if (pscore_l_->paper_l_->default_properties_.elem_b (sym))
+       return pscore_l_->paper_l_->default_properties_[sym];
+    }
+  
+  return SCM_BOOL_F;
 }
 
 SCM
@@ -464,3 +471,9 @@ Score_element::do_smobify_self ()
 }
 #include "ly-smobs.icc"
 IMPLEMENT_SMOBS(Score_element);
+
+SCM
+Score_element::equal_p (SCM a, SCM b)
+{
+  return SCM_CDR(a) == SCM_CDR(b) ? SCM_BOOL_T : SCM_BOOL_F;
+}
index 3530c26a255eaaeb17845d3de0ea6fde7cf8e53a..c72a60d01f8ec7ada51ee27e64ba79228f48f336 100644 (file)
@@ -44,8 +44,8 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
       if (item_l->empty_b (X_AXIS) || item_l->parent_l (X_AXIS))
        return;
 
-      bool breakable
-       = (item_l->remove_elt_property (breakable_scm_sym) != SCM_BOOL_F);
+      SCM bp=item_l->remove_elt_property (breakable_scm_sym);
+      bool breakable = (bp != SCM_BOOL_F);
       if (!breakable)
        return ;
 
index ae2dfa312e94d391637f6b7105c0eefb0d7ac057..f7657e676fdb81a0eacae872714814055dbc8e6e 100644 (file)
@@ -71,14 +71,14 @@ Script_engraver::do_process_requests()
          ss->dir_ = (Direction)force_dir;
 
       SCM dir_prop (get_property ("articulationScriptVerticalDirection", 0));
-      if (SCM_NUMBERP(dir_prop))
+      if (gh_number_p(dir_prop))
        ss->dir_ = to_dir (dir_prop);
 
       if (l->dir_)
        ss->dir_ = l->dir_;
 
       SCM paddingprop = get_property ("articulationScriptPadding", 0);
-      if (SCM_NUMBERP(paddingprop))
+      if (gh_number_p(paddingprop))
        {
          ss->set_elt_property (padding_scm_sym, paddingprop);
        }
@@ -92,7 +92,7 @@ Script_engraver::do_process_requests()
 
       p->set_staff_side (ss);
       ss->set_elt_property (script_priority_scm_sym, priority);
-      if (SCM_NUMBERP (paddingprop))
+      if (gh_number_p (paddingprop))
        ss->set_elt_property (padding_scm_sym, paddingprop);
   
   
index 35e24dab23330e86b21c71bbbbbf2ff021717413..41be6e318066be3b064f337df797f5597e285179 100644 (file)
@@ -32,7 +32,7 @@ void
 Separating_line_group_engraver::do_removal_processing ()
 {
   SCM sz (get_property ("postBreakPadding", 0));
-  if (SCM_NUMBERP(sz))
+  if (gh_number_p(sz))
     {
       sep_span_p_->padding_f_ = Real(sz);
     }
index 0ac32e8d347fc1cf2b1af134a732e9a38c19eb54..045373378dc863647b16dddc7ddeae6595040ac3 100644 (file)
@@ -91,10 +91,6 @@ Slur_engraver::do_process_requests()
          // push a new slur onto stack.
          //(use temp. array to wait for all slur STOPs)
          Slur * s_p =new Slur;
-         SCM prop = get_property ("slurDash", 0);
-         if (SCM_NUMBERP(prop)) 
-           s_p->set_elt_property (dashed_scm_sym, prop);
-
          
          requests_arr_.push (slur_req_l);
          start_slur_l_arr_.push (s_p);
@@ -112,7 +108,7 @@ Slur_engraver::do_pre_move_processing()
   SCM dir2 (get_property ("verticalDirection", 0));
 
   Direction slurdir = CENTER;
-  if (SCM_NUMBERP(dir))
+  if (gh_number_p(dir))
     slurdir = to_dir (dir);
   else if (gh_number_p (dir2))
     slurdir = to_dir (dir2);
index 9e3b16d827cf03ec7565db98cdc067f556c6fa0e..8f04b9fa76244646d47304010ef2de119f54a8d5 100644 (file)
@@ -280,9 +280,6 @@ Slur::do_post_processing ()
     Now we've got a fine slur
     Catch and correct some ugly cases
    */
-
-  
-
   String infix = interstaff_b ? "interstaff_" : "";
   Real height_damp_f = paper_l ()->get_var ("slur_"+infix +"height_damping");
   Real slope_damp_f = paper_l ()->get_var ("slur_"+infix +"slope_damping");
index bddeeb9543f3b02ce8d9925d72ef1db4928ef3bc..7fdba6a601eac1937cdae7df164d565af116769b 100644 (file)
@@ -48,18 +48,17 @@ Staff_margin_engraver::acknowledge_element (Score_element_info inf)
     long_name = short_name;
 
   if (gh_string_p (long_name))
-    return;
-
-  create_items (0);
-  text_p_->text_str_ = ly_scm2string (long_name);
-  staff_side_p_->dir_ = LEFT;
-  Bar_script_engraver::do_acknowledge_element (i);
+    {
+      create_items (0);
+      text_p_->text_str_ = ly_scm2string (long_name);
+      staff_side_p_->dir_ = LEFT;
+      Bar_script_engraver::attach_script_to_item (i);
 
-  /*
+      /*
     UGH. ignores font size settings.
    */
-  Interval iv(text_p_->extent (Y_AXIS));
-  text_p_->translate_axis (- iv.center (),  Y_AXIS);
+      Interval iv(text_p_->extent (Y_AXIS));
+      text_p_->translate_axis (- iv.center (),  Y_AXIS);
+    }
 }
 
-
index 853af03f630dca484aec616446067ea1f9116b4f..1ec7d19054eaad6f070e6514164f9ba9f0c04cc9 100644 (file)
@@ -96,10 +96,10 @@ String
 Staff_performer::new_instrument_str () 
 { 
   // mustn't ask Score for instrument: it will return piano!
-  SCM minstr = get_property ("midiInstrument", 0);
+  SCM minstr = get_property (gh_symbol2scm ("midiInstrument"), 0);
 
   if (!gh_string_p(minstr))
-    minstr = get_property ("instrument", 0);
+    minstr = get_property (gh_symbol2scm ("instrument"), 0);
 
   if (ly_scm2string (minstr) == instrument_str_)
     return "";
index 93e41b28ab3733c6b73911f1a008dff78fb7df6e..a326789009b0e3ddd9de9e909e6fb68e3328b89f 100644 (file)
@@ -35,13 +35,13 @@ void
 Staff_symbol_engraver::do_removal_processing()
 {
   SCM l (get_property ("numberOfStaffLines", 0));
-  if (SCM_NUMBERP(l))
+  if (gh_number_p(l))
     {
       span_p_->no_lines_i_ = gh_scm2int (l);
     }
 
   SCM sz (get_property ("staffLineLeading", 0));
-  if (SCM_NUMBERP(sz))
+  if (gh_number_p(sz))
     {
       span_p_->staff_line_leading_f_ = gh_scm2double (sz);
     }
index d48fa3925f3f0db14beaafa23a510d69a3780219..edd978df5e024743d9a6666e8fc22395e5253b7f 100644 (file)
@@ -29,7 +29,7 @@ void
 Stem_engraver::do_creation_processing ()
 {
   SCM prop = get_property ("abbrev", 0);
-  if (SCM_NUMBERP(prop)) 
+  if (gh_number_p(prop)) 
     {
       default_abbrev_i_  = gh_scm2int (prop);
     }
@@ -97,7 +97,7 @@ Stem_engraver::do_pre_move_processing()
   if (stem_p_)
     {
       SCM prop = get_property ("verticalDirection", 0);
-      if (SCM_NUMBERP(prop))
+      if (gh_number_p(prop))
        {
          stem_p_->dir_ = to_dir (prop);
          stem_p_->set_elt_property (dir_forced_scm_sym, SCM_BOOL_T);
@@ -105,36 +105,17 @@ Stem_engraver::do_pre_move_processing()
 
       Translator_group* which;
       prop = get_property ("stemLeftBeamCount", &which);
-      if (SCM_NUMBERP(prop))
+      if (gh_number_p(prop))
        {
          stem_p_->beams_i_drul_[LEFT] = gh_scm2int (prop);
          ((Translator_group*)which)->set_property ("stemLeftBeamCount", SCM_UNDEFINED);
        }
       prop = get_property ("stemRightBeamCount", &which);
-      if (SCM_NUMBERP(prop))
+      if (gh_number_p(prop))
        {
          stem_p_->beams_i_drul_[RIGHT] = gh_scm2int (prop);
          ((Translator_group*)which)->set_property ("stemRightBeamCount", SCM_UNDEFINED);
        }
-
-      prop = get_property ("stemLength", 0);
-      if (SCM_NUMBERP(prop))
-       {
-         stem_p_->set_elt_property (length_scm_sym, prop);
-       }
-
-      prop = get_property ("stemStyle", 0);
-      if (gh_string_p (prop))
-       {
-         stem_p_->set_elt_property (style_scm_sym, prop);
-       }
-      
-      prop = get_property ("noStemExtend", 0);
-      if (gh_boolean_p (prop) && gh_scm2bool (prop))
-       {
-         stem_p_->set_elt_property (no_stem_extend_scm_sym, prop);
-       }
-      
       typeset_element(stem_p_);
       stem_p_ = 0;
     }
index 9ecc46f43402a598e2565f94702b2014ca585dd7..a2bd01461227a8e05a3848f5c80e2d3802f477ec 100644 (file)
@@ -98,21 +98,9 @@ Text_engraver::do_process_requests ()
 
       text->text_str_ = r->text_str_;
       
-      if (r->style_str_.empty_b ())
-       {
-         SCM p (get_property ("textStyle", 0));
-         if (gh_string_p (p))
-           text->style_str_ = ly_scm2string(p);
-       }
-      else
-       text->style_str_ = r->style_str_;
+      if (r->style_str_.length_i ())
+       text->set_elt_property (style_scm_sym, ly_ch_C_to_scm (r->style_str_.ch_C()));
       
-      SCM padding = get_property ("textScriptPadding", 0);
-      if (SCM_NUMBERP(padding))
-       {
-         ss->set_elt_property (padding_scm_sym, padding);
-       }
-
       SCM empty = get_property ("textEmptyDimension", 0);
       if (gh_boolean_p (empty) && gh_scm2bool (empty))
        {
index 6cc6437297c645e4d012deef50e1053f15b2ddd9..eeaf40c30ab1cf982209b97df18f22dee5b89cf8 100644 (file)
 Molecule*
 Text_item::do_brew_molecule_p () const
 {
-  Molecule a= paper_l ()->lookup_l(0)->text (style_str_,text_str_, paper_l ()); 
+  SCM style = get_elt_property (style_scm_sym);
+  String st = (style == SCM_BOOL_F) ? "" : ly_scm2string (gh_cdr (style));
+  
+  Molecule a= paper_l ()->lookup_l(0)->text (st, text_str_, paper_l ());
 
   return new Molecule (a);
 }
 
-Text_item::Text_item ()
-{
-  style_str_ = "roman";
-}
-
 void
 Text_item::do_print () const
 {
index 946f8e93671c96deea57b417a8ef1174229126b4..a3ba0358ca961638ea8869335b21ac64f66edcf6 100644 (file)
@@ -140,7 +140,7 @@ Tie_engraver::do_pre_move_processing ()
   SCM dir2 (get_property ("verticalDirection", 0));
 
   Direction tie_dir = CENTER;
-  if (SCM_NUMBERP(dir))
+  if (gh_number_p(dir))
     tie_dir = to_dir (dir);
   else if (isdir_b (dir2))
     tie_dir = to_dir (dir2);
index d9051d59aee360913ab2f5cc3aab0e03233c1ea2..f6808850642858dedad59a8e678a7c2605545f15 100644 (file)
@@ -54,11 +54,6 @@ Time_signature_engraver::do_pre_move_processing()
 {
   if (time_signature_p_) 
     {
-      SCM sigstyle = get_property ("timeSignatureStyle", 0);
-      if (gh_string_p (sigstyle))
-       {
-         time_signature_p_->time_sig_type_str_ = ly_scm2string (sigstyle);
-       }
 
       typeset_element (time_signature_p_);
       time_signature_p_ =0;
index a4960abc7ba2bc32933626d4a73c91a77b84fb87..1f6234cd9cdc72a7a4be4b721d75d7f43088cf15 100644 (file)
@@ -21,16 +21,19 @@ Time_signature::Time_signature ()
 Molecule*
 Time_signature::do_brew_molecule_p () const
 {
-  if (time_sig_type_str_.length_i ())
+  SCM st = get_elt_property (style_scm_sym);
+  
+  if (st != SCM_BOOL_F)
     {
-      if (time_sig_type_str_[0]=='1')
+      String style (ly_scm2string (gh_cdr (st)));
+      if (style[0]=='1')
        {
          Array<int> tmparr = args_;
          return new Molecule( lookup_l ()->time_signature (args_[0], 0, paper_l ()));
        }
       else
        {
-         return new Molecule( lookup_l ()-> special_time_signature (time_sig_type_str_ ,args_[0], args_[1], paper_l ()));
+         return new Molecule( lookup_l ()-> special_time_signature (style, args_[0], args_[1], paper_l ()));
        }
     }
   else
index 82ab9dc0be63c7e1f4569088eac10ca0861239a3..03479ed5b87e0e917a1dbc0d781be14d79e72a81 100644 (file)
@@ -95,7 +95,7 @@ Timing_translator::do_process_requests()
   Translator_group * tr=0;
 
   SCM barn = get_property ("currentBarNumber", &tr);
-  if (SCM_NUMBERP(barn))
+  if (gh_number_p(barn))
     {
       time_.bars_i_ = gh_scm2int (barn);
       tr->set_property ("currentBarNumber", SCM_UNDEFINED);
index cffdaf8905afa3a7896f97778785fafd925b4c18..f74aef58d486713d37c55ac67c68f85598575aa2 100644 (file)
@@ -448,10 +448,8 @@ Translator_group::do_add_processing ()
 }
 
 SCM
-Translator_group::get_property (String id,
-                               Translator_group **where_l) const
+Translator_group::get_property (SCM sym, Translator_group **where_l) const
 {
-  SCM  sym = ly_symbol (id);
   if (properties_dict_.elem_b (sym))
     {
       if (where_l)
@@ -460,7 +458,7 @@ Translator_group::get_property (String id,
     }
 
   if (daddy_trans_l_)
-    return daddy_trans_l_->get_property (id, where_l);
+    return daddy_trans_l_->get_property (sym, where_l);
   
   if (where_l)
     *where_l = 0;
index 218a8c142339f7c83eca4a5c637919c899888827..c70b629ce8465a32c0b434cf900256ad2f55b792 100644 (file)
@@ -166,7 +166,14 @@ Translator::output_def_l () const
 SCM
 Translator::get_property (String id, Translator_group **where_l) const
 {
-  return daddy_trans_l_->get_property (id, where_l);
+  return daddy_trans_l_->get_property (ly_symbol (id), where_l);
+}
+
+SCM
+Translator::get_property (SCM sym,
+                         Translator_group **where_l) const
+{
+  return daddy_trans_l_->get_property (sym, where_l);
 }
 
 
index ce9c2cd2de27ee75670d9f0b0b55be97e4629f32..b9e3cf16dcbb2c4446e592bfaa7e3e87fa0675c9 100644 (file)
@@ -40,7 +40,7 @@ Tuplet_engraver::do_process_requests ()
     dir = to_dir (prop);
   int visibility = 3;
   prop = get_property ("tupletVisibility", 0);
-  if (SCM_NUMBERP(prop))
+  if (gh_number_p(prop))
     visibility = gh_scm2int (prop);    // bool ?
 
   for (int i= started_span_p_arr_.size ();
index 2497fd4f59cc98d5b056c6b73870417f3be96fe3..48935c674cbe572705430ffdf44b1f781de114b4 100644 (file)
@@ -33,13 +33,13 @@ void
 Vertical_align_engraver::do_removal_processing()
 {
   SCM dist (get_property ("maxVerticalAlign", 0));
-  if (SCM_NUMBERP(dist))
+  if (gh_number_p(dist))
     {
       valign_p_->threshold_interval_[BIGGER]  = gh_scm2double (dist);
     }
 
   dist = get_property ("minVerticalAlign", 0);
-  if (SCM_NUMBERP(dist))
+  if (gh_number_p(dist))
     {
       valign_p_->threshold_interval_[SMALLER]  = gh_scm2double (dist);
     }
index 56438398937461dcee6b51decdc9b5741b66115e..e7b6eac28739a0da4399e73d6bcec329446a7219 100644 (file)
@@ -3,6 +3,8 @@
 breve = \duration { -1 0 }
 longa = \duration { -2 0 }
 
+#(eval-string (ly-gulp-file "generic-property.scm"))
+
 \include "nederlands.ly"               % dutch
 \include "chord-modifiers.ly"
 \include "script.ly"
index b323524d32614e8dd096722ea49fefdf1e9be54d..c1687a847d5e2e5ebd9526bfdfcd85e119c93693 100644 (file)
@@ -5,9 +5,12 @@
 StaffContext=\translator {
        \type "Engraver_group_engraver";
        \name Staff ;
+       
        barAuto = ##t
        voltaVisibility = ##t
-
+       Generic_property_list = #generic-staff-properties
+       \consists "Property_engraver";
+       
        \consists "Multi_measure_rest_engraver";
        \consists "Bar_engraver";
  % Bar_engraver must be first so default bars aren't overwritten
@@ -66,6 +69,9 @@ StaffContext=\translator {
 RhythmicStaffContext=\translator{
        \type "Engraver_group_engraver";
        numberOfStaffLines  = #1
+       \consists "Property_engraver";
+       
+       Generic_property_list = #generic-staff-properties
        
        barSize = \staffheight;
        \consists "Pitch_squash_engraver";
@@ -81,12 +87,16 @@ RhythmicStaffContext=\translator{
 };
 \translator{\RhythmicStaffContext}
 VoiceContext = \translator {
+
        \type "Engraver_group_engraver";
        dynamicPadding = #5.0
+       Generic_property_list = #generic-voice-properties
+
+
        \consists "Dynamic_engraver";   % must come before text_engraver.
        \name Voice ;
-
-%      \consists "Tie_engraver";
+       \consists "Property_engraver";
+       
        \consists "Breathing_sign_engraver";
        \consists "Rest_engraver";
        \consists "Dot_column_engraver";
@@ -95,9 +105,7 @@ VoiceContext = \translator {
        \consists "Auto_beam_engraver";
        \include "auto-beam-settings.ly";
        \consists "Chord_tremolo_engraver";
-%      \consists "Multi_measure_rest_engraver";
 
-       % ugh.  Order matters here.
        \consists "Melisma_engraver";
        textScriptPadding = #3.0
        \consists "Text_engraver";
@@ -117,6 +125,9 @@ VoiceContext = \translator {
 GraceContext=\translator {
        \type "Grace_engraver_group";
        \name "Grace";
+
+       Generic_property_list = #generic-grace-properties
+       
        \consists "Note_heads_engraver";
        \consists "Local_key_engraver";
        \consists "Stem_engraver";
@@ -126,13 +137,16 @@ GraceContext=\translator {
        \consists "Auto_beam_engraver";
        \include "auto-beam-settings.ly";
        \consists "Align_note_column_engraver";
-       \consists "Font_size_engraver";
+
        \consists "Rhythmic_column_engraver";
        \consists "Dynamic_engraver";
 
+       \consists "Property_engraver";
+
        stemStyle = #"grace" 
        weAreGraceContext = ##t 
        fontSize = #-1
+       
        stemLength = #6.0
        verticalDirection = \up ;
        graceAccidentalSpace= 1.5 * \interline;
@@ -143,7 +157,9 @@ GraceContext=\translator {
 
 ThreadContext = \translator{
        \type Engraver_group_engraver;
-       \consists "Note_heads_engraver" ;       
+       \consists "Note_heads_engraver" ;
+       Generic_property_list = #generic-thread-properties
+       \consists "Property_engraver";
        \name Thread;
 };
 
@@ -289,6 +305,9 @@ ScoreContext = \translator {
        \accepts "GrandStaff";
        \accepts "ChoirStaff";
        \accepts "PianoStaff";
+
+       clefBreakPriority = #-2
+       breathingSignBreakPriority = #-4
 };
 
 \translator { \ScoreContext }
index a3e0eba66c45b9d161e120142ca21d2e8c3921de..beb538c9b44119f59b82af42e3c528cbd1085d93 100644 (file)
@@ -97,6 +97,10 @@ MAJORITY = 2.0;
 MEAN = 3.0;
 MEDIAN = 4.0;
 
+#'beam_dir_algorithm = #'majority
+#'slope_quantisation = #'normal
+
+
 %{
 dit(code(beam_dir_algorithm)) Specify algorithm for determining
 whether beams go up or down.  It is real valued.  If set to 2.0 then
diff --git a/scm/generic-property.scm b/scm/generic-property.scm
new file mode 100644 (file)
index 0000000..a895d3b
--- /dev/null
@@ -0,0 +1,96 @@
+
+(define generic-beam-properties
+  (cons "Beam"
+       (list
+        (list 'beamslopedamping number? 'damping)
+        (list 'autoKneeGap number? 'auto_knee_gap)
+        (list 'autoInterstaffKneeGap number? 'auto_interstaff_knee_gap)
+        (list 'beamQuantisation symbol? 'slope_quantisation)
+        (list 'beamDirAlgorithm symbol? 'beam_dir_algorithm)
+        )
+       )
+  )
+
+
+(define generic-stem-properties
+  (cons "Stem"
+       (list
+        (list 'stemLength number? 'length)
+        (list 'stemStyle string? 'style)
+        (list 'noStemExtend boolean? 'no_stem_extend)
+        ))
+  )
+
+(define generic-text-properties
+  (cons "Text_item" (list
+                    (list 'textStyle string? 'style)
+                    (list 'textScriptPadding number? 'padding)
+                    )
+       ))
+
+(define generic-bar-properties
+  (cons "Staff_bar" (list
+                    (list 'barSize number? 'bar_size))
+       )
+  )    
+(define generic-breathing-sign-properties
+  (cons "Breathing_sign"
+       (list
+        (list 'breathingSignBreakPriority number? 'break_priority
+         ))))
+
+(define generic-clef-properties
+  (cons "Clef_item"
+       (list
+        (list 'clefBreakPriority number? 'break_priority)
+        (list 'clefStyle string? 'style))
+       )
+  )
+
+(define generic-All-properties
+  (cons "all"  (list (list 'fontSize number? 'fontsize))))
+
+(define generic-rest-properties
+  (cons "Rest" (list (list 'restStyle string? 'reststyle))))
+
+(define generic-note-column-properties
+  (cons "Note_column"
+       (list
+        (list 'horizontalNoteShift number? 'horizontal_shift)
+        (list 'forceHorizontalShift number? 'force_hshift)
+        )))
+
+(define generic-slur-properties
+  (cons "Slur"
+       (list
+        (list 'slurDash number? 'dashed))))
+
+(define generic-timesig-properties
+  (cons "Time_signature"
+       (list
+        (list 'timeSignatureStyle string? 'sigstyle))))
+
+(define generic-voice-properties
+  (list
+   generic-stem-properties
+   generic-rest-properties
+   generic-slur-properties
+   generic-beam-properties
+   generic-text-properties
+   generic-note-column-properties
+   generic-All-properties
+   ))
+
+(define generic-grace-properties generic-voice-properties)
+(define generic-staff-properties
+  (list
+   generic-bar-properties
+   generic-timesig-properties
+   generic-clef-properties
+   generic-All-properties      
+   )
+  )
+
+(define generic-thread-properties
+  (list generic-All-properties))
+