2004-01-18 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/lily-guile.cc (robust_scm2double): new function. Use throughout.
+
* lily/line-interface.cc (line): remove thickness from calling interface.
* lily/hairpin.cc: use Line_interface
if (!extent.is_empty ())
{
- Real p = gh_scm2double (me->get_grob_property ("left-padding"));
+ Real p = robust_scm2double (me->get_grob_property ("left-padding"), 0.2);
extent[LEFT] -= p;
}
head_ape-> left_skyline_ = head_skyline;
head_ape->offset_ = 0.0;
- SCM rs = me->get_grob_property ("right-padding");
- if (gh_number_p (rs))
- head_ape->offset_ -= gh_scm2double (rs);
+ head_ape->offset_ -= robust_scm2double ( me->get_grob_property ("right-padding"), 0);
- Real padding = 0.2;
- SCM spad = me->get_grob_property ("padding");
- if (gh_number_p (spad))
- padding = gh_scm2double (spad);
+ Real padding = robust_scm2double (me->get_grob_property ("padding"),0.2);
Array<Skyline_entry> left_skyline = head_ape->left_skyline_;
/*
for (int i = ape->extents_.size(); i--;)
right_extent.unite (ape->offset_ + ape->extents_[i][X_AXIS]);
- SCM ls = me->get_grob_property ("left-padding");
- if (gh_number_p (rs))
- left_extent[LEFT] -= gh_scm2double (ls);
+
+ left_extent[LEFT] -= robust_scm2double (me->get_grob_property ("left-padding"), 0);
Interval width(left_extent[LEFT], right_extent[RIGHT]);
if (!stacking_dir)
stacking_dir = DOWN;
- SCM force = me->get_grob_property ("forced-distance");
-
- Real dy = 0.0;
- if (gh_number_p (force))
- {
- dy = gh_scm2double (force);
- }
+ Real dy = robust_scm2double (me->get_grob_property ("forced-distance"),0.0);
Link_array<Grob> elems
= Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
if (!stacking_dir)
stacking_dir = DOWN;
- Interval threshold = Interval (0, Interval::infinity ());
- SCM thr = me->get_grob_property ("threshold");
- if (gh_pair_p (thr))
- {
- threshold[SMALLER] = gh_scm2double (ly_car (thr));
- threshold[BIGGER] = gh_scm2double (ly_cdr (thr));
- }
-
+ Interval threshold = robust_scm2interval ( me->get_grob_property ("threshold"), Interval (0, Interval::infinity ()));
Array<Interval> dims;
Box orig_extent = m->extent_box ();
Box box_extent = orig_extent;
- SCM widen = me->get_grob_property ("balloon-padding");
- Real w = .1;
- if (gh_number_p (widen))
- {
- w = gh_scm2double (widen);
- }
+ Real w = robust_scm2double (me->get_grob_property ("balloon-padding"), .1);
box_extent.widen (w, w);
{
String str =ly_scm2string (s);
SCM siz = gh_call1 (barsiz_proc, me->self_scm ());
- Real sz = gh_scm2double (siz);
+ Real sz = robust_scm2double (siz, 0);
if (sz < 0)
return SCM_EOL;
Molecule
Bar_line::compound_barline (Grob*me, String str, Real h)
{
- Real kern = gh_scm2double (me->get_grob_property ("kern"));
- Real thinkern = gh_scm2double (me->get_grob_property ("thin-kern"));
- Real hair = gh_scm2double (me->get_grob_property ("hair-thickness"));
- Real fatline = gh_scm2double (me->get_grob_property ("thick-thickness"));
+ Real kern = robust_scm2double (me->get_grob_property ("kern"), 1);
+ Real thinkern = robust_scm2double (me->get_grob_property ("thin-kern"), 1);
+ Real hair = robust_scm2double (me->get_grob_property ("hair-thickness"), 1);
+ Real fatline = robust_scm2double (me->get_grob_property ("thick-thickness"), 1);
Real staffline = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
Real staff_space = Staff_symbol_referencer::staff_space (me);
Real
Beam::get_thickness (Grob * me)
{
- SCM th = me->get_grob_property ("thickness");
- if (gh_number_p (th))
- return gh_scm2double (th)* Staff_symbol_referencer::staff_space (me);
- else
- return 0.0;
+ return robust_scm2double (me->get_grob_property ("thickness"), 0)
+ * Staff_symbol_referencer::staff_space (me);
}
/* Return the translation between 2 adjoining beams. */
Real last_xposn = -1;
Real last_stem_width = -1 ;
- Real gap_length =0.0;
- SCM scm_gap = me->get_grob_property ("gap");
- if (gh_number_p (scm_gap))
- gap_length = gh_scm2double (scm_gap);
+ Real gap_length =robust_scm2double ( me->get_grob_property ("gap"), 0.0);
Molecule the_beam;
Real lt = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
SCM this_beaming = st ? st->get_grob_property ("beaming") : SCM_EOL;
Real xposn = st ? st->relative_coordinate (xcommon, X_AXIS) : 0.0;
- Real stem_width = st ? gh_scm2double (st->get_grob_property ("thickness")) *lt : 0 ;
+ Real stem_width = st ? robust_scm2double (st->get_grob_property ("thickness"), 1.0) *lt : 0 ;
Direction stem_dir = st ? to_dir (st->get_grob_property ("direction")) : CENTER;
/*
We do the space left of ST, with lfliebertjes pointing to the
{
/* FIXME. -> UP */
Direction d = (Direction) (sign (chord.delta ()) * UP);
- pos[d] = gh_scm2double (me->get_grob_property ("thickness")) / 2;
+ pos[d] = get_thickness (me) / 2;
pos[-d] = - pos[d];
}
else
Grob *common_x = rest->common_refpoint (beam, Y_AXIS);
Real rest_dim = rest->extent (common_x, Y_AXIS)[d] / staff_space * d;
- Real minimum_distance = gh_scm2double
- (rest->get_grob_property ("minimum-beam-collision-distance"));
+ Real minimum_distance = robust_scm2double
+ (rest->get_grob_property ("minimum-beam-collision-distance"), 1);
Real distance = beam_y - rest_dim;
Real shift = 0;
+/*
+ UGH : this is full of C&P code. Consolidate! --hwn
+*/
+
/*
Gregorian chant divisio minima. (Actually, this was the original
breathing sign by Michael. -- jr)
{
Real blotdiameter = Staff_symbol_referencer::staff_space (me)/2;
- Real padding;
- SCM padding_scm = me->get_grob_property ("padding");
- if (gh_number_p (padding_scm))
- padding = gh_scm2double (padding_scm);
- else
- padding = 0.0;
+ Real padding =robust_scm2double ( me->get_grob_property ("padding"), 0.0);
+
Offset vpadding = Offset (0, padding);
Offset hpadding = Offset (0.5 * blotdiameter, 0);
Offset hvpadding = 0.5 * hpadding + vpadding;
svolume = gh_call1 (proc, script_req_->get_mus_property ("text"));
}
- Real volume = 0.5;
- if (gh_number_p (svolume))
- volume = gh_scm2double (svolume);
+ Real volume = robust_scm2double (svolume, 0.5);
/*
properties override default equaliser setting
s = gh_call1 (eq, s);
}
- if (gh_pair_p (s))
+ if (is_number_pair (s))
{
- Interval iv;
- iv[MIN] = gh_scm2double (ly_car (s));
- iv[MAX] = gh_scm2double (ly_cdr (s));
+ Interval iv = ly_scm2interval (s);
volume = iv[MIN] + iv.length () * volume;
}
}
{
SCM mag = ly_assoc_chain (ly_symbol2scm ("font-magnification"), chain);
- Real rmag = gh_pair_p (mag) && gh_number_p (gh_cdr (mag))
- ? gh_scm2double (gh_cdr (mag)) : 1.0;
+ Real rmag = gh_pair_p (mag) ? robust_scm2double (gh_cdr (mag), 1.0) : 1;
return paper->find_font (name, rmag);
}
SCM ext = s->get_grob_property ((a == X_AXIS)
? "X-extent"
: "Y-extent");
-
- if (gh_pair_p (ext))
- {
- Real l = gh_scm2double (ly_car (ext));
- Real r = gh_scm2double (ly_cdr (ext));
- return ly_interval2scm (Interval (l, r));
- }
-
- return ly_interval2scm (Interval ());
+
+ if (is_number_pair (ext))
+ return ext;
+ else
+ return ly_interval2scm (Interval());
}
}
bool continued = broken[Direction (-grow_dir)];
- Real height = gh_scm2double (me->get_grob_property ("height"));
+ Real height = robust_scm2double (me->get_grob_property ("height"), 0.2);
Real starth, endh;
if (grow_dir < 0)
while (flip (&d) != LEFT);
Real lt = sp->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
- Real th = gh_scm2double (sp->get_grob_property ("thickness")) * lt ;
- Real h = gh_scm2double (sp->get_grob_property ("height"));
+ Real th = robust_scm2double (sp->get_grob_property ("thickness"), 1) * lt ;
+ Real h = robust_scm2double (sp->get_grob_property ("height"), 0.5);
// interval?
- Real dp = gh_scm2double (sp->get_grob_property ("dash-period"));
- Real dl = gh_scm2double (sp->get_grob_property ("length"));
+ Real dp = robust_scm2double (sp->get_grob_property ("dash-period"), 1.0);
+ Real dl = robust_scm2double (sp->get_grob_property ("length"), .5 );
if (dp < dl)
dp = 1.5 * dl;
SCM ly_interval2scm (Drul_array<Real>);
Real robust_scm2double (SCM, double);
-Drul_array<Real> robust_scm2interval (SCM, Drul_array<Real>);
+Drul_array<Real> robust_scm2drul (SCM, Drul_array<Real>);
+Interval robust_scm2interval (SCM, Drul_array<Real>);
Offset robust_scm2offset (SCM, Offset);
SCM ly_quote_scm (SCM s);
return x;
}
-Drul_array<Real>
+Interval
robust_scm2interval (SCM k, Drul_array<Real> v)
+{
+ Interval i;
+ i[LEFT]= v[LEFT];
+ i[RIGHT]= v[RIGHT];
+ if (is_number_pair (k))
+ i = ly_scm2interval (k);
+ return i;
+}
+
+Drul_array<Real>
+robust_scm2drul (SCM k, Drul_array<Real> v)
{
if (is_number_pair (k))
v = ly_scm2interval (k);
thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0); // todo: staff sym referencer?
Real staff_space = Staff_symbol_referencer::staff_space (me);
- SCM ws = me->get_grob_property ("zigzag-width");
- SCM ls = me->get_grob_property ("zigzag-length");
- double w = (gh_number_p(ws) ? gh_scm2double(ws) : 1)*staff_space;
- double l = (gh_number_p(ls) ? gh_scm2double(ls) : 1)*w;
+
+ double w = robust_scm2double (me->get_grob_property ("zigzag-width"), 1)*staff_space;
+ double l = robust_scm2double ( me->get_grob_property ("zigzag-length"), 1)* w;
double h = l>w/2 ? sqrt(l*l-w*w/4) : 0;
SCM list = scm_list_n (ly_symbol2scm ("zigzag-line"),
me->get_bound (RIGHT));
- Real gap = gh_scm2double (me->get_grob_property ("gap"));
+ Real gap = robust_scm2double (me->get_grob_property ("gap"), 0.0);
Offset ofxy (gap, 0); /*offset from start point to start of line*/
Offset dxy ;
*/
SCM minlen = me->get_grob_property ("minimum-length");
Real right_point
- = left_point + (gh_number_p (minlen) ? gh_scm2double (minlen) : 0.0);
+ = left_point + (robust_scm2double (minlen,0));
if (r->break_status_dir ())
right_point = infinity_f;
else
right_point = right_point >? heads.top ()->extent (common, X_AXIS)[RIGHT];
- Real h = sl * gh_scm2double (me->get_grob_property ("thickness"));
+ Real h = sl * robust_scm2double (me->get_grob_property ("thickness"), 0);
Real pad = 2* h;
right_point = right_point <? (r->extent (common, X_AXIS)[LEFT] - pad);
SCM thick = me->get_grob_property ("thickness");
SCM height = me->get_grob_property ("height");
- Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) * gh_scm2double (thick);
+ Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) * gh_scm2double (thick);
Grob *common = me->get_bound(LEFT)->common_refpoint (me->get_bound (RIGHT),
X_AXIS);
Interval iv (0,w);
- Molecule m;
+ Molecule m;
+
+ /*
+ TODO: use line interface
+ */
if (which == ly_symbol2scm ("bracket"))
{
m = Lookup::bracket (X_AXIS, iv, t,-gh_scm2double (height), t);
Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
Array<Grob_info> primitives)
{
- SCM thickness_scm = ligature->get_grob_property ("thickness");
- Real thickness = (thickness_scm != SCM_EOL) ?
- gh_scm2double (thickness_scm) : 1.4;
+ Real thickness = robust_scm2double (ligature->get_grob_property ("thickness"), 1.4);
thickness *= ligature->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
Real head_width =
Font_interface::get_default_font (ligature)->
find_by_name ("noteheads--1mensural").extent (X_AXIS).length ();
- SCM flexa_width_scm = ligature->get_grob_property ("flexa-width");
- Real flexa_width = (flexa_width_scm != SCM_EOL) ?
- gh_scm2double (flexa_width_scm) : 2.0;
+ Real flexa_width = robust_scm2double (ligature->get_grob_property ("flexa-width"), 2);
flexa_width *= Staff_symbol_referencer::staff_space (ligature);
Real half_flexa_width = 0.5 * (flexa_width + thickness);
delta_pitch = 0;
}
- SCM flexa_width_scm = me->get_grob_property ("flexa-width");
- if (flexa_width_scm != SCM_EOL)
- {
- flexa_width = gh_scm2double (flexa_width_scm);
- }
- else
- {
- programming_error (_f ("Mensural_ligature:"
- "flexa-width undefined on flexa %d; assuming 2.0",
- primitive));
- flexa_width = 2.0 * staff_space;
- }
+ flexa_width = robust_scm2double (me->get_grob_property ("flexa-width"), 2.0 * staff_space);
}
switch (primitive)
Molecule
Multi_measure_rest::big_rest (Grob *me, Real width)
{
- Real thick_thick = gh_scm2double (me->get_grob_property ("thick-thickness"));
- Real hair_thick = gh_scm2double (me->get_grob_property ("hair-thickness"));
+ Real thick_thick =robust_scm2double (me->get_grob_property ("thick-thickness"), 1.0);
+ Real hair_thick = robust_scm2double (me->get_grob_property ("hair-thickness"), .1);
Real ss = Staff_symbol_referencer::staff_space (me);
rod.distance_ = l->extent (l, X_AXIS)[BIGGER] - r->extent (r, X_AXIS)[SMALLER]
+ sym_width + 2.0; // 2.0 = magic!
- Real minlen =0.0;
- SCM ml =me->get_grob_property ("minimum-length");
- if (gh_number_p (ml)) minlen = gh_scm2double (ml);
+ Real minlen = robust_scm2double (me->get_grob_property ("minimum-length"), 0.0);
rod.distance_ = max(rod.distance_,
minlen);
rod.add_to_cols ();
result = (a == X_AXIS) ? ly_car (result) : ly_cdr (result);
- return gh_number_p (result) ? gh_scm2double (result) : 0.0;
+ return robust_scm2double (result,0);
}
int
if (st)
{
- Real thick = gh_scm2double (st->get_grob_property ("thickness"))
+ Real thick = robust_scm2double (st->get_grob_property ("thickness"), 1)
* st->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
note_head_width -= thick;
}
correction = note_head_width* stem_dirs[LEFT];
- correction *= gh_scm2double (me->get_grob_property ("knee-spacing-correction"));
+ correction *= robust_scm2double (me->get_grob_property ("knee-spacing-correction"), 0);
*fixed += correction;
}
else
correction = (correction/7) <? 1.0;
correction *= stem_dirs[LEFT] ;
correction *=
- gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+ robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 0);
}
if (!bar_yextent.is_empty ())
(head_posns[LEFT][DOWN] > head_posns[RIGHT][UP]) ? RIGHT : LEFT;
Real delta = head_posns[-lowest][DOWN] - head_posns[lowest][UP] ;
- Real corr = gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+ Real corr = robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 0);
corr = (delta <= 1) ? 0.0 : 0.25;
correction= -lowest * corr ;
Molecule
Percent_repeat_item_interface::brew_slash ( Grob *me)
{
- Real slope = gh_scm2double (me->get_grob_property ("slope"));
+ Real slope = robust_scm2double (me->get_grob_property ("slope"), 1);
Real wid = 2.0 / slope;
/*
todo: check out if in staff-rule thickness normally.
*/
- Real thick = gh_scm2double (me->get_grob_property ("thickness"));
+ Real thick = robust_scm2double (me->get_grob_property ("thickness"), 1);
Molecule m = Lookup::repeat_slash (wid, slope, thick);
m.translate_axis (-m.extent (Y_AXIS).center (), Y_AXIS);
return m;
SCM pad = me->get_grob_property ("padding");
- if (gh_number_p (pad))
- {
- w[RIGHT] += gh_scm2double (pad)/2;
- w[LEFT] -= gh_scm2double (pad)/2;
- }
+ w.widen (robust_scm2double (pad, 0.0));
return w;
}
SCM pad = me->get_grob_property ("padding");
- if (gh_number_p (pad))
- {
- w[RIGHT] += gh_scm2double (pad)/2;
- w[LEFT] -= gh_scm2double (pad)/2;
- }
+ w.widen (robust_scm2double (pad, 0.0));
me->set_grob_property ("X-extent", ly_interval2scm (w));
SCM minimum = me->get_grob_property ("minimum-space");
Real total_off = dim.linear_combination (dir) - off;
- SCM padding = me->get_grob_property ("padding");
- if (gh_number_p (padding))
- {
- total_off += gh_scm2double (padding) * dir;
- }
+ total_off += robust_scm2double ( me->get_grob_property ("padding"), 0);
if (gh_number_p (minimum)
&& dir
if (!st)
return gh_int2scm (0);
- Real padding=0.0;
- SCM spad = me->get_grob_property ("staff-padding");
-
- if (gh_number_p (spad))
- padding = gh_scm2double (spad);
+ Real padding= robust_scm2double ( me->get_grob_property ("staff-padding"), 0);
Grob *common = me->common_refpoint (st, Y_AXIS);
Direction d = Side_position_interface::get_direction (me);
Default position is on stem X, at stem end Y
*/
Real stem_thickness =
- gh_scm2double (stem->get_grob_property ("thickness"))
+ robust_scm2double (stem->get_grob_property ("thickness"), 1)
* stem->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
o += Offset (0.5 *
x_extent * (1 + Stem::get_direction (stem))
/*
leave a gap: slur mustn't touch head/stem
*/
- o[Y_AXIS] += dir * gh_scm2double (me->get_grob_property ("y-free")) *
+ o[Y_AXIS] += dir * robust_scm2double (me->get_grob_property ("y-free"), 0) *
1.0;
return o;
}
return SCM_EOL;
}
- Real base_thick = gh_scm2double (me->get_grob_property ("thickness"));
+ Real base_thick = robust_scm2double (me->get_grob_property ("thickness"), 1);
Real thick = base_thick *
me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
Molecule a;
SCM d = me->get_grob_property ("dashed");
if (gh_number_p (d))
- a = Lookup::dashed_slur (one, thick, thick * gh_scm2double (d));
+ a = Lookup::dashed_slur (one, thick, thick * robust_scm2double (d, 0));
else
a = Lookup::slur (one, get_grob_direction (me) * base_thick * ss / 10.0,
thick);
SCM h_inf_scm = me->get_grob_property ("height-limit");
SCM r_0_scm = me->get_grob_property ("ratio");
- Real r_0 = gh_scm2double (r_0_scm);
+ Real r_0 = robust_scm2double (r_0_scm, 1);
Real h_inf = staff_space * gh_scm2double (h_inf_scm);
Slur_bezier_bow bb (get_encompass_offsets (me),
Spacing_spanner::prune_loose_columns (Grob*me,Link_array<Grob> *cols, Rational shortest)
{
Link_array<Grob> newcols;
- Real increment = gh_scm2double (me->get_grob_property ("spacing-increment"));
+ Real increment = robust_scm2double (me->get_grob_property ("spacing-increment"), 1.2);
for (int i=0; i < cols->size (); i++)
{
if (Item::breakable_b (cols->elem(i)) || Paper_column::musical_b (cols->elem (i)))
Spacing_spanner::do_measure (Rational shortest, Grob*me, Link_array<Grob> *cols)
{
- Real headwid = gh_scm2double (me->get_grob_property ("spacing-increment"));
+ Real headwid = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
for (int i= 0; i < cols->size () - 1; i++)
{
Item * l = dynamic_cast<Item*> (cols->elem (i));
if (dt)
mlen = *dt;
- Real incr = gh_scm2double (me->get_grob_property ("spacing-increment"));
+ Real incr = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
*space = *fixed + incr * double (mlen.main_part_ / shortest.main_part_) * 0.8;
}
Real
Spacing_spanner::get_duration_space (Grob*me, Moment d, Rational shortest, bool * expand_only)
{
- Real k = gh_scm2double (me->get_grob_property ("shortest-duration-space"));
- Real incr = gh_scm2double (me->get_grob_property ("spacing-increment"));
+ Real k = robust_scm2double (me->get_grob_property ("shortest-duration-space"), 1);
+ Real incr = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
if (d < shortest)
{
*/
dist = get_duration_space (me, shortest, shortest.main_part_, expand_only);
- Real grace_fact = 1.0;
- SCM gf = me->get_grob_property ("grace-space-factor");
- if (gh_number_p (gf))
- grace_fact = gh_scm2double (gf);
+ Real grace_fact
+ = robust_scm2double (me->get_grob_property ("grace-space-factor"), 1);
dist *= grace_fact;
}
r.item_l_drul_[LEFT] = sp->get_bound (LEFT);
r.item_l_drul_[RIGHT] = sp->get_bound (RIGHT);
r.distance_ =
- gh_scm2double (me->get_grob_property ("minimum-length"));
+ robust_scm2double (me->get_grob_property ("minimum-length"), 0);
r.add_to_cols ();
return SCM_UNSPECIFIED;
Real corr = abs (stem_posns.length ()/7.) <? 1.0;
corr *=
- gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+ robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 1);
if (d != DOWN)
corr = 0.0;
{
SCM sz = Bar_line::get_staff_bar_size (bar_grob->self_scm());
bar_size = Interval (-1,1);
- bar_size *= gh_scm2double (sz)
+ bar_size *= robust_scm2double (sz, 1)
/ Staff_symbol_referencer::staff_space (bar_grob);
}
}
p += 2.0 * y / Staff_symbol::staff_space (st);
}
- else
- {
- SCM pos = me->get_grob_property ("staff-position");
- if (gh_number_p (pos))
- return gh_scm2double (pos);
- }
-
- return p;
+
+ return robust_scm2double ( me->get_grob_property ("staff-position"), p);
}
}
Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
- SCM my_thick = me->get_grob_property("thickness");
- if (gh_number_p (my_thick))
- t *= gh_scm2double (my_thick);
+ t *= robust_scm2double ( me->get_grob_property("thickness"), 1.0);
int l = Staff_symbol::line_count (me);
Real
Staff_symbol::staff_space (Grob*me)
{
- Real ss = 1.0;
-
- SCM s = me->get_grob_property ("staff-space");
- if (gh_number_p (s))
- ss *= gh_scm2double (s);
- return ss;
+ return robust_scm2double ( me->get_grob_property ("staff-space"), 1.0);
}
dydx = 0.25;
Real ss = Staff_symbol_referencer::staff_space (me);
- Real thick = gh_scm2double (me->get_grob_property ("beam-thickness"));
- Real width = gh_scm2double (me->get_grob_property ("beam-width"));
+ Real thick = robust_scm2double (me->get_grob_property ("beam-thickness"),1);
+ Real width = robust_scm2double (me->get_grob_property ("beam-width"),1);
Real blot = me->get_paper ()->get_realvar (ly_symbol2scm ("blotdiameter"));
width *= ss;
|| (get_direction (me) != get_default_dir (me)))
{
- Real shorten = 0.0;
SCM sshorten = me->get_grob_property ("stem-shorten");
SCM scm_shorten = gh_pair_p (sshorten) ?
robust_list_ref ((duration_log (me) - 2) >? 0, sshorten): SCM_EOL;
- if (gh_number_p (scm_shorten))
- {
- shorten = 2* gh_scm2double (scm_shorten);
- }
+ Real shorten = 2* robust_scm2double (scm_shorten,0);
+
/* On boundary: shorten only half */
if (abs (head_positions (me)[get_direction (me)]) <= 1)
heads.reverse ();
- Real thick = gh_scm2double (me->get_grob_property ("thickness"))
+ Real thick = robust_scm2double (me->get_grob_property ("thickness"),1)
* me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
Grob *hed = support_head (me);
// URG
- Real stem_width = gh_scm2double (me->get_grob_property ("thickness"))
+ Real stem_width = robust_scm2double (me->get_grob_property ("thickness"), 1)
* me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
Real blot =
me->get_paper ()->get_realvar (ly_symbol2scm ("blotdiameter"));
if (attach)
{
Real rule_thick
- = gh_scm2double (me->get_grob_property ("thickness"))
+ = robust_scm2double (me->get_grob_property ("thickness"), 1)
* me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
r += - d * rule_thick * 0.5;
Real staff_space = Staff_symbol_referencer::staff_space (me);
Grob *beam = get_beam (me);
Real beam_translation = Beam::get_beam_translation (beam);
- Real beam_thickness = gh_scm2double (beam->get_grob_property ("thickness"));
+ Real beam_thickness = robust_scm2double (beam->get_grob_property ("thickness"), 1);
int beam_count = Beam::get_direction_beam_count (beam, my_dir);
}
- SCM shorten = beam->get_grob_property ("shorten");
- if (gh_number_p (shorten))
- ideal_y -= gh_scm2double (shorten);
+ ideal_y -= robust_scm2double (beam->get_grob_property ("shorten"), 0);
Real minimum_free =
gh_scm2double (robust_list_ref
{
inf.grob_->translate_axis ( -0.8, X_AXIS); // ugh
inf.grob_->set_grob_property ("arch-height",
- gh_double2scm(gh_scm2double(inf.grob_->get_grob_property
+ gh_double2scm (gh_scm2double(inf.grob_->get_grob_property
("arch-height"))+0.5));
}
}
System_start_delimiter::simple_bar (Grob*me,Real h)
{
Real lt =me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) ;
- Real w = lt * gh_scm2double (me->get_grob_property ("thickness"));
+ Real w = lt * robust_scm2double (me->get_grob_property ("thickness"), 1);
return Lookup::round_filled_box (Box (Interval (0,w), Interval (-h/2, h/2)),
lt);
}
if (!gh_string_p (s))
return SCM_EOL;
SCM gsym = scm_string_to_symbol (s) ;
- SCM c = me->get_grob_property ("collapse-height");
Real staff_space = Staff_symbol_referencer::staff_space (me);
Interval ext = ly_scm2interval (Axis_group_interface::group_extent_callback
Real l = ext.length () / staff_space;
if (ext.is_empty ()
- || (gh_number_p (c) && l <= gh_scm2double (c)))
+ || (robust_scm2double (me->get_grob_property ("collapse-height"), 0.0) >= l))
{
me->suicide ();
return SCM_EOL;
Spanner *spanner = dynamic_cast<Spanner*> (me);
/* Ugh, must be same as Hairpin::brew_molecule. */
- Real padding = 0.0;
- SCM itp= me->get_grob_property ("if-text-padding");
- if (gh_number_p (itp))
- padding = gh_scm2double (itp);
+ Real padding = robust_scm2double ( me->get_grob_property ("if-text-padding"), 0);
Grob *common = spanner->get_bound (LEFT)->common_refpoint (spanner->get_bound (RIGHT), X_AXIS);
Paper_def * paper = me->get_paper();
continue;
Real dx = 0.0;
- if (gh_pair_p (flare))
+ if (is_number_pair (flare))
dx = gh_scm2double (index_get_cell (flare, d)) * d;
Real dy = - dir * edge_height[d] ;
Real staff_space = Staff_symbol_referencer::staff_space (me);
- Real x_gap_f = gh_scm2double (me->get_grob_property ("x-gap"));
+ Real x_gap_f = robust_scm2double (me->get_grob_property ("x-gap"), 0);
Grob* l = me->get_bound (LEFT);
Grob* r = me->get_bound (RIGHT);
after_line_breaking (smob);
}
- Real ly = gh_scm2double (me->get_grob_property ("left-position"));
- Real ry = gh_scm2double (me->get_grob_property ("right-position"));
+ Real ly = robust_scm2double (me->get_grob_property ("left-position"), 0);
+ Real ry = robust_scm2double (me->get_grob_property ("right-position"), 0);
bool equally_long = false;
Grob * par_beam = parallel_beam (me, columns, &equally_long);
Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
Array<Grob_info> primitives)
{
- Real flexa_width;
- SCM flexa_width_scm = ligature->get_grob_property ("flexa-width");
- if (flexa_width_scm != SCM_EOL)
- {
- flexa_width = gh_scm2double (flexa_width_scm);
- }
- else
- {
- ligature->programming_error ("Vaticana_ligature_engraver:"
- "flexa-width undefined; "
- "assuming 2.0 staff space");
- flexa_width =
- 2.0 * Staff_symbol_referencer::staff_space (ligature);
- }
+ Real flexa_width= robust_scm2double ( ligature->get_grob_property ("flexa-width"), 2);
- Real thickness;
- SCM thickness_scm = ligature->get_grob_property ("thickness");
- if (thickness_scm != SCM_EOL)
- {
- thickness = gh_scm2double (thickness_scm);
- }
- else
- {
- ligature->programming_error ("Vaticana_ligature_engraver:"
- "thickness undefined; assuming 1.0");
- thickness = 1.0;
- }
+ Real thickness= robust_scm2double ( ligature->get_grob_property ("thickness"), 1);
Item *prev_primitive = 0;
int prev_prefix_set = 0;
me->warning (_ ("ascending vaticana style flexa"));
}
- Real width;
- SCM flexa_width_scm = me->get_grob_property ("flexa-width");
- if (flexa_width_scm != SCM_EOL)
- {
- width = gh_scm2double (flexa_width_scm);
- }
- else
- {
- me->warning ("Vaticana_ligature: "
- "flexa-width undefined; assuming 2.0");
- width = 2.0 * staff_space;
- }
+ Real width = robust_scm2double ( me->get_grob_property ("flexa-width"), 2);
/*
* Compensate curve thickness that appears to be smaller in steep
Molecule out;
int flexa_height = 0;
- Real thickness;
-
- SCM thickness_scm = me->get_grob_property ("thickness");
- if (thickness_scm != SCM_EOL)
- {
- thickness = gh_scm2double (thickness_scm);
- }
- else
- {
- me->programming_error ("Vaticana_ligature: "
- "thickness undefined; assuming 1.0");
- thickness = 1.0;
- }
+ Real thickness = robust_scm2double ( me->get_grob_property ("thickness"), 1);
Real line_thickness =
thickness * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
else
delta_pitch = 0;
- Real x_offset = 0.0;
- SCM x_offset_scm = me->get_grob_property ("x-offset");
- if (x_offset_scm != SCM_EOL)
- {
- x_offset = gh_scm2double (x_offset_scm);
- }
- else
- {
- me->programming_error ("Vaticana_ligature: "
- "x-offset undefined; assuming 0.0");
- }
+ Real x_offset = robust_scm2double ( me->get_grob_property ("x-offset"), 0);
bool add_stem = to_boolean (me->get_grob_property ("add-stem"));
bool add_cauda = to_boolean (me->get_grob_property ("add-cauda"));
* flexa_width.)
*/
Real staff_space = Staff_symbol_referencer::staff_space (me);
- Real flexa_width;
- SCM flexa_width_scm = me->get_grob_property ("flexa-width");
- if (flexa_width_scm != SCM_EOL)
- {
- flexa_width = gh_scm2double (flexa_width_scm);
- }
- else
- {
- me->warning ("Vaticana_ligature: "
- "flexa-width undefined; assuming 2.0");
- flexa_width = 2.0 * staff_space;
- }
+ Real flexa_width = robust_scm2double ( me->get_grob_property ("flexa-width"), 2);
out =
Lookup::blank (Box (Interval (0, 0.5*flexa_width), Interval (0,0)));
}
}
Real w = dynamic_cast<Spanner*> (me)->spanner_length () - left - half_space;
- Real h = gh_scm2double (me->get_grob_property ("height"));
+ Real h = robust_scm2double (me->get_grob_property ("height"), 1);
Molecule start,end ;
if (!no_vertical_start)