/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM order = break_align_order (me);
- if (order == SCM_BOOL_F)
+ if (scm_is_false (order))
return elts;
vector<Grob *> writable_elts (elts);
for (vsize i = writable_elts.size (); i--;)
{
Grob *g = writable_elts[i];
- if (g && sym == g->get_property ("break-align-symbol"))
+ if (g && scm_is_eq (sym, g->get_property ("break-align-symbol")))
{
new_elts.push_back (g);
writable_elts.erase (writable_elts.begin () + i);
SCM
Break_alignment_interface::calc_positioning_done (SCM smob)
{
- Grob *grob = unsmob_grob (smob);
+ Grob *grob = unsmob<Grob> (smob);
Item *me = dynamic_cast<Item *> (grob);
me->set_property ("positioning-done", SCM_BOOL_T);
Grob *elt = elts[i];
if (edge_idx == VPOS
- && (elt->get_property ("break-align-symbol")
- == ly_symbol2scm ("left-edge")))
+ && scm_is_eq (elt->get_property ("break-align-symbol"),
+ ly_symbol2scm ("left-edge")))
edge_idx = idx;
SCM l = elt->get_property ("space-alist");
}
}
- if (rsym == ly_symbol2scm ("left-edge"))
+ if (scm_is_eq (rsym, ly_symbol2scm ("left-edge")))
edge_idx = next_idx;
SCM entry = SCM_EOL;
sym_string = ly_symbol2string (rsym);
string orig_string;
- if (unsmob_grob (l->get_property ("cause")))
- orig_string = unsmob_grob (l->get_property ("cause"))->name ();
+ if (unsmob<Grob> (l->get_property ("cause")))
+ orig_string = unsmob<Grob> (l->get_property ("cause"))->name ();
programming_error (to_string ("No spacing entry from %s to `%s'",
orig_string.c_str (),
if (r)
{
- if (type == ly_symbol2scm ("extra-space"))
+ if (scm_is_eq (type, ly_symbol2scm ("extra-space")))
offsets[next_idx] = extents[idx][RIGHT] + distance
- extents[next_idx][LEFT];
/* should probably junk minimum-space */
- else if (type == ly_symbol2scm ("minimum-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("minimum-space")))
offsets[next_idx] = max (extents[idx][RIGHT], distance);
}
else
SCM
Break_alignable_interface::self_align_callback (SCM grob)
{
- Grob *me = unsmob_grob (grob);
+ Grob *me = unsmob<Grob> (grob);
Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
- if (!Break_alignment_interface::has_interface (alignment))
+ if (!has_interface<Break_alignment_interface> (alignment))
return scm_from_int (0);
SCM symbol_list = me->get_property ("break-align-symbols");
SCM sym = scm_car (symbol_list);
for (vsize i = 0; i < elements.size (); i++)
{
- if (elements[i]->get_property ("break-align-symbol") == sym)
+ if (scm_is_eq (sym, elements[i]->get_property ("break-align-symbol")))
{
if (Item::break_visible (elements[i])
+ // TODO SCM: simplify syntax?
&& !elements[i]->extent (elements[i], X_AXIS).is_empty ())
{
break_aligned_grob = i;
SCM
Break_aligned_interface::calc_average_anchor (SCM grob)
{
- Grob *me = unsmob_grob (grob);
+ Grob *me = unsmob<Grob> (grob);
Real avg = 0.0;
int count = 0;
SCM
Break_aligned_interface::calc_extent_aligned_anchor (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real alignment = robust_scm2double (me->get_property ("break-align-anchor-alignment"), 0.0);
Interval iv = me->extent (me, X_AXIS);
Break_aligned_interface::calc_break_visibility (SCM smob)
{
/* a BreakAlignGroup is break-visible if it has one element that is break-visible */
- Grob *me = unsmob_grob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM ret = scm_c_make_vector (3, SCM_EOL);
extract_grob_set (me, "elements", elts);
for (int dir = 0; dir <= 2; dir++)
return ret;
}
+ADD_INTERFACE (Break_alignment_interface,
+ "The object that performs break alignment.\n"
+ "\n"
+ "Three interfaces deal specifically with break alignment:\n"
+ "@enumerate\n"
+ "@item break-alignment-interface (this one),\n"
+ "@item @ref{break-alignable-interface}, and\n"
+ "@item @ref{break-aligned-interface}.\n"
+ "@end enumerate\n"
+ "\n"
+ " Each of these interfaces supports grob properties that use"
+ " @w{@emph{break-align symbols}}, which are Scheme symbols that"
+ " are used to specify the alignment, ordering, and spacing of"
+ " certain notational elements (@q{breakable}@tie{}items)."
+ "\n"
+ "@subsubheading Available break-align symbols:\n"
+ "\n"
+ "@example\n"
+ "ambitus\n"
+ "breathing-sign\n"
+ "clef\n"
+ "cue-clef\n"
+ "cue-end-clef\n"
+ "custos\n"
+ "key-cancellation\n"
+ "key-signature\n"
+ "left-edge\n"
+ "staff-bar\n"
+ "time-signature\n"
+ "@end example",
+
+ /* properties */
+ "positioning-done "
+ "break-align-orders "
+ );
+
ADD_INTERFACE (Break_alignable_interface,
"Object that is aligned on a break alignment.",
);
ADD_INTERFACE (Break_aligned_interface,
- "Items that are aligned in prefatory matter.\n"
- "\n"
- "The spacing of these items is controlled by the"
- " @code{space-alist} property. It contains a list"
- " @code{break-align-symbol}s with a specification of the"
- " associated space. The space specification can be\n"
- "\n"
- "@table @code\n"
- "@item (minimum-space . @var{spc}))\n"
- "Pad space until the distance is @var{spc}.\n"
- "@item (fixed-space . @var{spc})\n"
- "Set a fixed space.\n"
- "@item (semi-fixed-space . @var{spc})\n"
- "Set a space. Half of it is fixed and half is stretchable."
- " (does not work at start of line. fixme)\n"
- "@item (extra-space . @var{spc})\n"
- "Add @var{spc} amount of space.\n"
- "@end table\n"
- "\n"
- "Special keys for the alist are @code{first-note} and"
- " @code{next-note}, signifying the first note on a line, and"
- " the next note halfway a line.\n"
- "\n"
- "Rules for this spacing are much more complicated than this."
- " See [Wanske] page 126--134, [Ross] page 143--147.",
+ "Breakable items.",
/* properties */
"break-align-anchor "
"break-align-symbol "
"space-alist "
);
-
-ADD_INTERFACE (Break_alignment_interface,
- "The object that performs break alignment. See"
- " @ref{break-aligned-interface}.",
-
- /* properties */
- "positioning-done "
- "break-align-orders "
- );