+struct Line_details
+{
+ Grob *last_column_;
+ Real force_;
+ 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) */
+ 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_;
+ SCM page_permission_;
+ SCM turn_permission_;
+ Real break_penalty_;
+ Real page_penalty_;
+ Real turn_penalty_;
+
+ bool title_;
+
+ /* The page-breaker deals with forbidden page breaks by "compressing"
+ two Line_detailses into one. The following fields are used by the
+ page-breaker to keep track of this. If the number of fields needed
+ by the page-breaker grows, it might be a good idea to create a separate
+ class. */
+ int compressed_lines_count_;
+ int compressed_nontitle_lines_count_;
+ bool last_markup_line_;
+ bool first_markup_line_;
+ bool tight_spacing_;
+
+ Line_details ()
+ {
+ last_column_ = 0;
+ force_ = infinity_f;
+ 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");
+ break_penalty_ = 0;
+ page_penalty_ = 0;
+ turn_penalty_ = 0;
+ title_ = false;
+ compressed_lines_count_ = 1;
+ 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;
+};
+
+/*