+ for (Assoc_iter<int, Lookup*> ai(*lookup_p_assoc_p_); ai.ok (); ai++)
+ {
+ delete ai.val ();
+ }
+
+ delete scope_p_;
+ delete lookup_p_assoc_p_;
+}
+
+Paper_def::Paper_def (Paper_def const&s)
+ : Music_output_def (s)
+{
+ lookup_p_assoc_p_ = new Assoc<int, Lookup*>;
+ for (Assoc_iter<int, Lookup*> ai(*s.lookup_p_assoc_p_); ai.ok (); ai++)
+ {
+ Lookup * l=new Lookup (*ai.val ());
+ l->paper_l_ = this;
+ set_lookup (ai.key(), l);
+ }
+
+ scope_p_ = new Scope (*s.scope_p_);
+}
+
+Real
+Paper_def::get_var (String s) const
+{
+ if (!scope_p_->elt_b (s))
+ error (_f ("unknown paper variable: `%s\'", s));
+ Real * p = scope_p_->elem (s)->access_Real (false);
+ if (!p)
+ {
+ error (_ ("not a real variable"));
+ return 0.0;
+ }
+
+ return *p;
+}
+
+Interval
+Paper_def::line_dimensions_int (int n) const
+{
+ if (!shape_int_a_.size ())
+ if (n)
+ return Interval (0, linewidth_f ());
+ else
+ return Interval (get_var ("indent"), linewidth_f ());
+
+ if (n >= shape_int_a_.size ())
+ n = shape_int_a_.size () -1;
+
+ return shape_int_a_[n];