+ for (int i = cols.size (); i--;)
+ if (scm_is_pair (cols[i]->get_property ("between-cols")))
+ {
+ loose_cols_.push (cols[i]);
+ cols.del (i);
+ }
+
+ spaced_cols_ = cols;
+ for (int i = 0; i < cols.size () - 1; i++)
+ {
+ Spring_smob *spring = 0;
+
+ for (SCM s = cols[i]->get_property ("ideal-distances");
+ !spring && scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ Spring_smob *sp = unsmob_spring (scm_car (s));
+
+ if (sp->other_ == cols[i + 1])
+ spring = sp;
+ }
+
+ if (!spring)
+ programming_error (_f ("No spring between column %d and next one",
+ Paper_column::get_rank (cols[i])));
+
+ Real ideal = (spring) ? spring->distance_ : spacer_->default_space_;
+ Real hooke = (spring) ? spring->strength_ : 1.0;
+
+ spacer_->add_spring (ideal, hooke);
+ }
+
+ for (int i = 0; i < cols.size () - 1; i++)
+ {
+ for (SCM s = Spaceable_grob::get_minimum_distances (cols[i]);
+ scm_is_pair (s); s = scm_cdr (s))
+ {
+ Grob *other = unsmob_grob (scm_caar (s));
+ int oi = binsearch_links (cols, other, &compare_paper_column_rank);
+ if (oi >= 0
+ && cols[oi] == other)
+ {
+ spacer_->add_rod (i, oi, scm_to_double (scm_cdar (s)));
+ }
+ }
+
+ if (i
+ && !to_boolean (cols[i]->get_property ("allow-outside-line")))
+ {
+ Interval e = cols[i]->extent (cols[i], X_AXIS);
+ if (!e.is_empty ())
+ {
+ spacer_->add_rod (i, cols.size () - 1, e[RIGHT]);
+ spacer_->add_rod (0, i, e[LEFT]);
+ }
+ }
+ }
+}
+
+Simple_spacer_wrapper::Simple_spacer_wrapper ()