#include "page-spacing.hh"
+#include "international.hh"
#include "matrix.hh"
#include "page-breaking.hh"
#include "warn.hh"
first_line_ = line;
}
+ rod_height_ += account_for_footnotes (line);
inverse_spring_k_ += line.inverse_hooke_;
last_line_ = line;
calc_force ();
}
+Real
+Page_spacing::account_for_footnotes (Line_details const &line)
+{
+ Real footnote_height = 0.0;
+ for (vsize i = 0; i < line.footnotes_.size (); i++)
+ {
+ footnote_height += (has_footnotes_
+ ? 0.0
+ : (breaker_->footnote_separator_stencil_height ()
+ + breaker_->footnote_padding ()));
+
+ has_footnotes_ = true;
+ Interval extent = line.footnotes_[i]->extent (Y_AXIS);
+ footnote_height += extent[UP] - extent[DOWN];
+ footnote_height += breaker_->footnote_padding ();
+ }
+ return footnote_height;
+}
+
void
Page_spacing::prepend_system (const Line_details &line)
{
rod_height_ -= first_line_.full_height ();
rod_height_ += first_line_.tallness_;
rod_height_ += line.full_height();
-
+ rod_height_ += account_for_footnotes (line);
inverse_spring_k_ += line.inverse_hooke_;
first_line_ = line;
{
force_ = rod_height_ = spring_len_ = 0;
inverse_spring_k_ = 0;
+ has_footnotes_ = false;
}