+ for (int i = 0; i < icols.size (); i++)
+ if (scm_is_pair (icols[i]->get_object ("between-cols")))
+ loose_cols_.push (icols[i]);
+ else
+ cols.push (icols[i]);
+
+ spaced_cols_ = cols;
+ for (int i = 0; i < cols.size () - 1; i++)
+ {
+ Spring_smob *spring = 0;
+
+ for (SCM s = cols[i]->get_object ("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 inverse_hooke = (spring) ? spring->inverse_strength_ : 1.0;
+
+ spacer_->add_spring (ideal, inverse_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 j = binsearch_links (cols, other, &compare_paper_column_rank);
+ if (j >= 0 && cols[j] == other)
+ spacer_->add_rod (i, j, scm_to_double (scm_cdar (s)));
+ }
+
+ if (i
+ && to_boolean (cols[i]->get_property ("keep-inside-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 ()