]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.5.36
authorfred <fred>
Wed, 27 Mar 2002 02:06:18 +0000 (02:06 +0000)
committerfred <fred>
Wed, 27 Mar 2002 02:06:18 +0000 (02:06 +0000)
16 files changed:
ChangeLog
lily/align-interface.cc
lily/arpeggio.cc
lily/directional-element-interface.cc
lily/fingering-engraver.cc
lily/grob.cc
lily/hairpin.cc
lily/include/lily-guile.hh
lily/lily-guile.cc
lily/lookup.cc
lily/molecule.cc
lily/request.cc
lily/script-engraver.cc
lily/side-position-interface.cc
lily/text-item.cc
lily/tuplet-bracket.cc

index 83eeee5a6b9b8e2e531fda75e2701cfabaad7dff..b03413d2b964b6d13d8851ec20b269a83f1aeb0f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,48 @@
+2002-03-02  Han-Wen  <hanwen@cs.uu.nl>
+
+       * lily/lily-guile.cc: isdir_b and isaxis_b changed to ly_axis_p,
+       ly_dir_p
+
+       * lily/music.cc (ly_get_mus_property): typechecking
+       (ly_set_mus_property): idem
+       (ly_make_music): idem
+       (ly_music_name): idem
+
+       * lily/chord.cc: use scm_reverse_x iso. gh_reverse()
+
+       * lily/note-spacing.cc (stem_dir_correction): correction for
+       same stem notes as well. 
+
+       * lily/pitch.cc (pitch_transpose): stricter typechecking
+
+       * mf/parmesan*mf: magnification fixes.
+
+       * Documentation/topdocs/INSTALL.texi: update RedHat reqs
+
+2002-03-01  Mats Bengtsson  <mats.bengtsson@s3.kth.se>
+
+       * buildscripts/mf-to-table.py (postfixes): Output also .ly file
+       documenting the font. (Doesn't work for parmesan at the moment)
+
+       * Documentation/user/appendices.itely (The Feta font): Add list of
+       Feta font symbols with names.
+
+       * mf/GNUmakefile ($(outdir)/lilypond.map): Generate lilypond.map
+       automatically
+
+2002-03-01  Han-Wen  <hanwen@cs.uu.nl>
+
+       * lily/translator-group.cc (ly_set_trans_property): typechecking
+       (ly_get_trans_property): typechecking.
+
+       * lily/font-metric.cc (ly_text_dimension): typechecking 
+       (ly_find_glyph_by_name): idem.
+
+       * scm/bass-figure.scm (brew-complete-figure): support for
+       bracketed numbers.
+       
+       * lily/grob.cc (ly_get_paper_var): new function
+
 2002-02-28  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
        * VERSION (PATCH_LEVEL): 1.5.35 released.
index 0ab7a87b1b57491dc02ab35ddf04a8c73f41e5b5..ec1f482ef47257d20b0f026143e1f804d0aa1edb 100644 (file)
@@ -251,7 +251,7 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a)
        FIXME: uncommenting freaks out the Y-alignment of
        line-of-score.
        */
-      // Real align_param = isdir_b (align)  ? gh_scm2double (align) : 0.0;
+      // Real align_param = ly_dir_p (align)  ? gh_scm2double (align) : 0.0;
       
       if (gh_number_p (align))
        center_offset = total.linear_combination (gh_scm2double (align));
index 73340a4e0f9ed168f99ba206d41e0b5e5c085bca..f480a6acb9b3f29e7635f1767d1f9b75cd5a5978 100644 (file)
@@ -68,7 +68,7 @@ Arpeggio::brew_molecule (SCM smob)
     }
 
   Direction dir = CENTER;
-  if (isdir_b (me->get_grob_property ("arpeggio-direction")))
+  if (ly_dir_p (me->get_grob_property ("arpeggio-direction")))
     {
       dir = to_dir (me->get_grob_property ("arpeggio-direction"));
     }
index aadc62a4db1fe18202cfe87414daeba7860e4d2e..ccbdc5de9c70d08055ab92c6867c76fb2dc1d7b8 100644 (file)
@@ -15,7 +15,7 @@
 bool
 Directional_element_interface::has_interface (Grob*me) 
 {
-  return isdir_b (me->get_grob_property ("direction"));
+  return ly_dir_p (me->get_grob_property ("direction"));
 }
 
 Direction
@@ -23,7 +23,7 @@ Directional_element_interface::get (Grob*me)
 {
   // return dir_;
   SCM d= me->get_grob_property ("direction");
-  if (!isdir_b (d))
+  if (!ly_dir_p (d))
     return CENTER;
       
   return to_dir (d);
index 45196adb9fe5ce5687680858f311e6d2bc48d1ab..8a7bab80b3fe36b65d5a316efebc783c642486b4 100644 (file)
@@ -116,7 +116,7 @@ Fingering_engraver::process_music ()
   for (int i= pitch_sorted_reqs.size(); i--;)
     {
       SCM dir = pitch_sorted_reqs[i]->get_mus_property ("direction");
-      if (isdir_b (dir) && to_dir (dir)) {
+      if (ly_dir_p (dir) && to_dir (dir)) {
        if (to_dir (dir) == UP)
          up_reqs_.push (pitch_sorted_reqs[i]);
        else if (to_dir (dir) == DOWN)
@@ -189,7 +189,7 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a,  int i)
                                gh_int2scm (100 + d* i));
 
 
-  if (!isdir_b (fingering->get_grob_property ("direction")))
+  if (!ly_dir_p (fingering->get_grob_property ("direction")))
     {
       if (d)
        fingering->set_grob_property ("direction", gh_int2scm (d));
index 064b68faabba5bc4d54787c0ba0b4128929bf454..deea0beadf1f3971a04d86b4fda680278d9527bb 100644 (file)
@@ -847,9 +847,21 @@ Grob::discretionary_processing ()
 SCM
 spanner_get_bound (SCM slur, SCM dir)
 {
-  return dynamic_cast<Spanner*> (unsmob_grob (slur))->get_bound (to_dir (dir))->self_scm ();
+  Spanner * sl = dynamic_cast<Spanner*> (unsmob_grob (slur));
+  SCM_ASSERT_TYPE(sl, slur, SCM_ARG1, __FUNCTION__, "spanner grob");
+  SCM_ASSERT_TYPE(ly_dir_p (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
+  return sl->get_bound (to_dir (dir))->self_scm ();
 }
 
+SCM
+ly_get_paper_var (SCM grob, SCM sym)
+{
+  Grob * sc = unsmob_grob (grob);
+  SCM_ASSERT_TYPE(sc, grob, SCM_ARG1, __FUNCTION__, "grob");
+  SCM_ASSERT_TYPE(gh_symbol_p(sym), sym, SCM_ARG2, __FUNCTION__, "symbol");  
+
+  return sc->paper_l() ->get_scmvar_scm (sym);
+}
 
 
 
@@ -862,6 +874,8 @@ init_functions ()
                      (Scheme_function_unknown)ly_set_grob_property);
   scm_c_define_gsubr ("ly-get-spanner-bound", 2 , 0, 0,
                      (Scheme_function_unknown) spanner_get_bound);
+  scm_c_define_gsubr ("ly-get-paper-variable", 2 , 0, 0,
+                     (Scheme_function_unknown) ly_get_paper_var);
 }
 
 bool
index d0e78f62895a800dff44c5c5fd1eb0d900406e48..1e4d659f82bfcff9069bc7f4b1817baceb421629 100644 (file)
@@ -26,7 +26,7 @@ Hairpin::brew_molecule (SCM smob)
   Real line = me->paper_l ()->get_var ("stafflinethickness");  
   
   SCM s = me->get_grob_property ("grow-direction");
-  if (!isdir_b (s))
+  if (!ly_dir_p (s))
     {
       me->suicide ();
       return SCM_EOL;
index f957616d8bd838457a56de1eb9ad8fda6df09997..d4ea1f81926547f10755d17bfbcf544b7593e021 100644 (file)
@@ -184,8 +184,7 @@ void ly_display_scm (SCM s);
 void read_lily_scm_file (String);
 void init_lily_guile (String dir);
 
-bool isdir_b (SCM s);
-bool isaxis_b (SCM s);
+bool ly_dir_p (SCM s);
 bool ly_number_pair_p (SCM);
 bool ly_axis_p (SCM);
 
@@ -204,6 +203,10 @@ SCM index_cell (SCM cellp, Direction d);
 SCM index_set_cell (SCM cellp, Direction d, SCM val);
 
 
+
+SCM ly_snoc (SCM s, SCM list);
+SCM ly_split_list (SCM s, SCM list);
+SCM ly_unique (SCM list);
 /*
   snarfing.
  */
index cf15fbd9628ab5f790a346e3e84138c401d4e73f..794062bfdd21cbc297f6c2698bf4b19a8a7111f4 100644 (file)
@@ -230,12 +230,6 @@ ly_number_pair_p (SCM p)
   return gh_pair_p (p) && gh_number_p (ly_car (p)) && gh_number_p (ly_cdr (p));
 }
 
-bool
-ly_axis_p (SCM a)
-{
-  return gh_number_p (a) && (gh_scm2int (a) == 0 || gh_scm2int (a) == 1); 
-}
-
 typedef void (*Void_fptr) ();
 Array<Void_fptr> *scm_init_funcs_;
 
@@ -289,7 +283,7 @@ unsigned int ly_scm_hash (SCM s)
 
 
 bool
-isdir_b (SCM s)
+ly_dir_p (SCM s)
 {
   if (gh_number_p (s))
     {
@@ -301,7 +295,7 @@ isdir_b (SCM s)
 
 
 bool
-isaxis_b (SCM s)
+ly_axis_p (SCM s)
 {
   if (gh_number_p (s))
     {
@@ -667,3 +661,51 @@ type_check_assignment (SCM sym, SCM val,  SCM type_symbol)
     }
   return ok;
 }
+
+
+/* some SCM abbrevs
+
+   zijn deze nou handig?
+   zijn ze er al in scheme, maar heten ze anders? */
+
+
+/* Remove doubles from (sorted) list */
+SCM
+ly_unique (SCM list)
+{
+  SCM unique = SCM_EOL;
+  for (SCM i = list; gh_pair_p (i); i = ly_cdr (i))
+    {
+      if (!gh_pair_p (ly_cdr (i))
+         || !gh_equal_p (ly_car (i), ly_cadr (i)))
+       unique = gh_cons (ly_car (i), unique);
+    }
+  return scm_reverse_x (unique, SCM_EOL);
+}
+
+/* tail add */
+SCM
+ly_snoc (SCM s, SCM list)
+{
+  return gh_append2 (list, scm_list_n (s, SCM_UNDEFINED));
+}
+
+
+/* Split list at member s, removing s.
+   Return (BEFORE . AFTER) */
+SCM
+ly_split_list (SCM s, SCM list)
+{
+  SCM before = SCM_EOL;
+  SCM after = list;
+  for (; gh_pair_p (after);)
+    {
+      SCM i = ly_car (after);
+      after = ly_cdr (after);
+      if (gh_equal_p (i, s))
+       break;
+      before = gh_cons (i, before);
+    }
+  return gh_cons ( scm_reverse_x (before, SCM_EOL),  after);
+  
+}
index 34158202053f5004d607035aea16f13304f6928f..2d832c965b9cdf6694fdb905e4ee07e7d30250b8 100644 (file)
@@ -408,7 +408,7 @@ ly_bracket (SCM a, SCM iv, SCM d, SCM t, SCM p)
 {
   SCM_ASSERT_TYPE(ly_axis_p (a), a, SCM_ARG1, __FUNCTION__, "axis") ;
   SCM_ASSERT_TYPE(ly_number_pair_p (iv), iv, SCM_ARG1, __FUNCTION__, "number pair") ;
-  SCM_ASSERT_TYPE(isdir_b (d), a, SCM_ARG1, __FUNCTION__, "direction") ;
+  SCM_ASSERT_TYPE(ly_dir_p (d), a, SCM_ARG1, __FUNCTION__, "direction") ;
   SCM_ASSERT_TYPE(gh_number_p (t), a, SCM_ARG1, __FUNCTION__, "number") ;
   SCM_ASSERT_TYPE(gh_number_p(p), a, SCM_ARG1, __FUNCTION__, "number") ;
 
index 6a7709a5bce23ffc323dfc4cca2cf3004103f330..6bb59a58a1b3239e0cf01332e45b74d75e1880bc 100644 (file)
@@ -151,13 +151,9 @@ SCM
 Molecule::ly_get_molecule_extent (SCM mol, SCM axis)
 {
   Molecule *m = unsmob_molecule (mol);
+  SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
+  SCM_ASSERT_TYPE (ly_axis_p(axis), axis, SCM_ARG2, __FUNCTION__, "axis");
  
-  if (!m || !ly_axis_p (axis))
-    {
-      warning ("ly-get-molecule-extent: invalid arguments");
-      return ly_interval2scm (Interval (0,0));
-    }
-
   return ly_interval2scm (m->extent (Axis (gh_scm2int (axis))));
 }
 
@@ -173,7 +169,7 @@ Molecule::ly_molecule_combined_at_edge (SCM first, SCM axis, SCM direction,
 
 
   SCM_ASSERT_TYPE(ly_axis_p(axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE(isdir_b (direction), direction, SCM_ARG3, __FUNCTION__, "dir");
+  SCM_ASSERT_TYPE(ly_dir_p (direction), direction, SCM_ARG3, __FUNCTION__, "dir");
   SCM_ASSERT_TYPE(gh_number_p(padding), padding, SCM_ARG4, __FUNCTION__, "number");
 
   if (m1)
@@ -220,7 +216,7 @@ ly_align_to_x (SCM mol, SCM axis, SCM dir)
 {
   SCM_ASSERT_TYPE(unsmob_molecule (mol), mol, SCM_ARG1, __FUNCTION__, "molecule");
   SCM_ASSERT_TYPE(ly_axis_p(axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE(isdir_b (dir), dir, SCM_ARG3, __FUNCTION__, "dir");
+  SCM_ASSERT_TYPE(ly_dir_p (dir), dir, SCM_ARG3, __FUNCTION__, "dir");
 
   unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis), Direction (gh_scm2int (dir)));
 
index 810936918a8cb66a9177583908bab97b919feeb9..aefeb1f7a0e51ddcfac1b8ba08d62152016a3524 100644 (file)
@@ -43,7 +43,7 @@ Script_req::get_direction () const
 {
   SCM d = get_mus_property ("direction");
 
-  return (isdir_b (d)) ?  to_dir (d) : CENTER;
+  return (ly_dir_p (d)) ?  to_dir (d) : CENTER;
 }
 
 Direction
@@ -51,7 +51,7 @@ Span_req::get_span_dir () const
 {
   SCM d = get_mus_property ("span-direction");
 
-  return (isdir_b (d)) ?  to_dir (d) : CENTER;
+  return (ly_dir_p (d)) ?  to_dir (d) : CENTER;
 }
 
 void
index 3ef8142b94eb42c2b96b3e05369bdf196dd1dcad..0466630e3a8fa702598373ed25b5330a5b871f06 100644 (file)
@@ -78,13 +78,13 @@ Script_engraver::process_music ()
       art = ly_cdr (art);
 
       SCM force_dir = l->get_mus_property ("direction");
-      if (isdir_b (force_dir) && !to_dir (force_dir))
+      if (ly_dir_p (force_dir) && !to_dir (force_dir))
        force_dir = ly_car (art);
       
       art = ly_cdr (art);
       SCM priority = ly_car (art);
 
-      if (isdir_b (force_dir) && to_dir (force_dir))
+      if (ly_dir_p (force_dir) && to_dir (force_dir))
        p->set_grob_property ("direction", force_dir);
       else if (to_dir (relative_stem_dir))
        p->set_grob_property ("side-relative-direction", relative_stem_dir);
index 2e83ee183c082527306229df7f1c409f2a85f741..9acf165858db16ee93ced2c38a35e330bd8e7fdc 100644 (file)
@@ -28,12 +28,12 @@ Direction
 Side_position_interface::get_direction (Grob*me)
 {
   SCM d = me->get_grob_property ("direction");
-  if (isdir_b (d) && to_dir (d))
+  if (ly_dir_p (d) && to_dir (d))
     return to_dir (d);
 
   Direction relative_dir = Direction (1);
   SCM reldir = me->get_grob_property ("side-relative-direction");      // should use a lambda.
-  if (isdir_b (reldir))
+  if (ly_dir_p (reldir))
     {
       relative_dir = to_dir (reldir);
     }
index 802eeefc9bb1b6e54275d982741d9d5c970ee421..b165e86711e5dc4004ba3d8550e437a77bd7520f 100644 (file)
@@ -125,7 +125,7 @@ Text_item::markup_text2molecule (Grob *me, SCM markup_text,
   Axis axis = X_AXIS;
 
   SCM a = ly_assoc_chain (ly_symbol2scm ("axis"), p);
-  if (gh_pair_p (a) && isaxis_b (ly_cdr (a)))
+  if (gh_pair_p (a) && ly_axis_p (ly_cdr (a)))
     axis = (Axis)gh_scm2int (ly_cdr (a));
 
   Real baseline_skip = 0;
index b93ff670d67a6f9816a44b3b8bf2e34ab7387a14..dc74135a3c42e8fae888a6a70f4babd5bec2994e 100644 (file)
@@ -271,7 +271,7 @@ Tuplet_bracket::get_default_dir (Grob*me)
 {
   Direction d = UP;
   SCM dir_sym =me->get_grob_property ("dir-forced");
-  if (isdir_b (dir_sym))
+  if (ly_dir_p (dir_sym))
     {
       d= to_dir (dir_sym);
       if (d != CENTER)