LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
extract_grob_set (sys, "footnotes-after-line-breaking", footnote_grobs);
footnotes.insert (footnotes.end (), footnote_grobs.begin (), footnote_grobs.end ());
}
extract_grob_set (sys, "footnotes-after-line-breaking", footnote_grobs);
footnotes.insert (footnotes.end (), footnote_grobs.begin (), footnote_grobs.end ());
}
out = scm_cons (p->get_property ("footnote-stencil"), out);
else
programming_error ("Systems on a page must be a prob or grob.");
out = scm_cons (p->get_property ("footnote-stencil"), out);
else
programming_error ("Systems on a page must be a prob or grob.");
number_footnote_table = SCM_EOL;
SCM numbering_function = paper->c_variable ("footnote-numbering-function");
SCM layout = paper->self_scm ();
number_footnote_table = SCM_EOL;
SCM numbering_function = paper->c_variable ("footnote-numbering-function");
SCM layout = paper->self_scm ();
Real padding = robust_scm2double (paper->c_variable ("footnote-padding"), 0.0);
Real number_raise = robust_scm2double (paper->c_variable ("footnote-number-raise"), 0.0);
Real padding = robust_scm2double (paper->c_variable ("footnote-padding"), 0.0);
Real number_raise = robust_scm2double (paper->c_variable ("footnote-number-raise"), 0.0);
}
SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
SCM stencil = Text_interface::interpret_markup (layout, props, markup);
}
SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
SCM stencil = Text_interface::interpret_markup (layout, props, markup);
if (!st)
{
programming_error ("Your numbering function needs to return a stencil.");
markup = SCM_EOL;
stencil = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL).smobbed_copy ();
if (!st)
{
programming_error ("Your numbering function needs to return a stencil.");
markup = SCM_EOL;
stencil = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL).smobbed_copy ();
}
in_text_numbers = scm_cons (markup, in_text_numbers);
numbers = scm_cons (stencil, numbers);
}
in_text_numbers = scm_cons (markup, in_text_numbers);
numbers = scm_cons (stencil, numbers);
if (!st->extent (X_AXIS).is_empty ())
st->translate_axis ((max_length - st->extent (X_AXIS)[RIGHT]),
X_AXIS);
if (!st->extent (X_AXIS).is_empty ())
st->translate_axis ((max_length - st->extent (X_AXIS)[RIGHT]),
X_AXIS);
bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
{
bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
{
annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+ number_raise
- annotation.extent (Y_AXIS)[UP]),
annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+ number_raise
- annotation.extent (Y_AXIS)[UP]),
sys->set_property ("footnote-stencil", mol.smobbed_copy ());
}
// Take care of top-level markups
sys->set_property ("footnote-stencil", mol.smobbed_copy ());
}
// Take care of top-level markups
{
SCM stencils = p->get_property ("footnotes");
Stencil mol;
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
{
{
SCM stencils = p->get_property ("footnotes");
Stencil mol;
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
{
SCM in_text_annotation = scm_car (in_text_numbers);
in_text_stencil = Text_interface::interpret_markup (layout,
props,
in_text_annotation);
SCM in_text_annotation = scm_car (in_text_numbers);
in_text_stencil = Text_interface::interpret_markup (layout,
props,
in_text_annotation);
- Stencil *head = unsmob_stencil (page->get_property ("head-stencil"));
- Stencil *foot = unsmob_stencil (page->get_property ("foot-stencil"));
+ Stencil *head = unsmob<Stencil> (page->get_property ("head-stencil"));
+ Stencil *foot = unsmob<Stencil> (page->get_property ("foot-stencil"));
markup_markup_spacing = paper->c_variable ("markup-markup-spacing");
last_bottom_spacing = paper->c_variable ("last-bottom-spacing");
top_system_spacing = paper->c_variable ("top-system-spacing");
markup_markup_spacing = paper->c_variable ("markup-markup-spacing");
last_bottom_spacing = paper->c_variable ("last-bottom-spacing");
top_system_spacing = paper->c_variable ("top-system-spacing");
top_system_spacing = paper->c_variable ("top-markup-spacing");
// Note: the page height here does _not_ reserve space for headers and
top_system_spacing = paper->c_variable ("top-markup-spacing");
// Note: the page height here does _not_ reserve space for headers and
append_system (sys, spring, indent, padding);
last_system_was_title = false;
}
append_system (sys, spring, indent, padding);
last_system_was_title = false;
}
{
SCM spec = first ? top_system_spacing
: (last_system_was_title ? markup_markup_spacing : score_markup_spacing);
{
SCM spec = first ? top_system_spacing
: (last_system_was_title ? markup_markup_spacing : score_markup_spacing);
void
Page_layout_problem::append_system (System *sys, Spring const &spring, Real indent, Real padding)
{
void
Page_layout_problem::append_system (System *sys, Spring const &spring, Real indent, Real padding)
{
build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline);
up_skyline.shift (indent);
down_skyline.shift (indent);
build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline);
up_skyline.shift (indent);
down_skyline.shift (indent);
// store the minimum distance, considering relative indents,
// for a loose line
Skyline first_skyline (UP);
// store the minimum distance, considering relative indents,
// for a loose line
Skyline first_skyline (UP);
{
*tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL);
tail = SCM_CDRLOC (*tail);
{
*tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL);
tail = SCM_CDRLOC (*tail);