+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.
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));
}
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"));
}
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
{
// return dir_;
SCM d= me->get_grob_property ("direction");
- if (!isdir_b (d))
+ if (!ly_dir_p (d))
return CENTER;
return to_dir (d);
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)
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));
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);
+}
(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
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;
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);
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.
*/
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_;
bool
-isdir_b (SCM s)
+ly_dir_p (SCM s)
{
if (gh_number_p (s))
{
bool
-isaxis_b (SCM s)
+ly_axis_p (SCM s)
{
if (gh_number_p (s))
{
}
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);
+
+}
{
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") ;
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))));
}
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)
{
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)));
{
SCM d = get_mus_property ("direction");
- return (isdir_b (d)) ? to_dir (d) : CENTER;
+ return (ly_dir_p (d)) ? to_dir (d) : CENTER;
}
Direction
{
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
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);
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);
}
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;
{
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)