/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2009 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "matrix.hh"
#include "prob.hh"
-struct Line_details {
+/*
+ * Begin/rest-of-line hack. This geometrical shape is a crude approximation
+ * of Skyline, but it is better than a rectangle.
+ */
+struct Line_shape
+{
+ Interval begin_;
+ Interval rest_;
+
+ Line_shape ()
+ {
+ }
+ Line_shape (Interval begin, Interval rest);
+ Line_shape piggyback (Line_shape mount, Real padding) const;
+};
+
+struct Line_details
+{
Grob *last_column_;
Real force_;
- Interval extent_; /* Y-extent of the system */
+ Line_shape shape_;
+ vector<Real> footnote_heights_; /* The footnotes at the bottom of the
+ page, where each stencil represents
+ a different footnote. */
+ vector<Real> in_note_heights_; /* The in-notes under a system,
+ where each stencil represents
+ a different in-note. */
+ Interval refpoint_extent_; /* The refpoints of the first and last
+ spaceable staff in this line. min-distance
+ should be measured from the bottom
+ refpoint_extent of one line to the
+ top refpoint_extent of the next. */
+ Real tallness_; /* Y-extent, adjusted according to begin/rest-of-line*/
Real padding_; /* compulsory space after this system (if we're not
- last on a page) */
+ last on a page) */
Real title_padding_;
+ Real min_distance_;
+ Real title_min_distance_;
Real bottom_padding_;
Real space_; /* spring length */
+ Real title_space_;
Real inverse_hooke_;
SCM break_permission_;
int compressed_nontitle_lines_count_;
bool last_markup_line_;
bool first_markup_line_;
+ bool tight_spacing_;
Line_details ()
{
padding_ = 0;
title_padding_ = 0;
bottom_padding_ = 0;
+ min_distance_ = 0;
+ title_min_distance_ = 0;
space_ = 0;
+ title_space_ = 0;
inverse_hooke_ = 1;
+ tight_spacing_ = false;
break_permission_ = ly_symbol2scm ("allow");
page_permission_ = ly_symbol2scm ("allow");
turn_permission_ = ly_symbol2scm ("allow");
compressed_nontitle_lines_count_ = 1;
last_markup_line_ = false;
first_markup_line_ = false;
+ tallness_ = 0;
+ refpoint_extent_ = Interval (0, 0);
}
Line_details (Prob *pb, Output_def *paper);
+ Real full_height () const;
+ Real tallness () const;
+ Real spring_length (Line_details const &next_line) const;
};
/*
vsize systems_;
bool ragged_right_;
bool ragged_last_;
- Real between_system_space_;
- Real before_title_padding_;
- Real between_system_padding_;
+
+ Real system_system_min_distance_;
+ Real system_system_padding_;
+ Real system_system_space_;
+ Real system_markup_space_;
+ Real score_system_min_distance_;
+ Real score_system_padding_;
+ Real score_markup_min_distance_;
+ Real score_markup_padding_;
/* the (i,j)th entry is the configuration for breaking between
columns i and j */
vector<vsize> start_; /* the columns at which we might be asked to start breaking */
vector<vsize> starting_breakpoints_; /* the corresponding index in breaks_ */
- vector<Grob*> all_;
+ vector<Grob *> all_;
vector<vsize> breaks_;
void initialize ();
Real combine_demerits (Real force, Real prev_force);
bool calc_subproblem (vsize start, vsize systems, vsize max_break_index);
- void fill_line_details (Line_details *const, vsize, vsize);
+ void fill_line_details (Line_details *, vsize, vsize);
};
#endif /* CONSTRAINED_BREAKING_HH */