-void
-Paper_def::print() const
-{
-#ifndef NPRINT
- mtor << "Paper {";
- mtor << "out: " <<outfile_str_;
- lookup_p_->print();
- itrans_p_->print();
- for (Assoc_iter<String,Real> i(*real_vars_p_); i.ok(); i++) {
- mtor << i.key() << "= " << i.val() << "\n";
+
+/*
+ todo: use symbols and hashtable idx?
+
+
+*/
+Font_metric *
+Paper_def::find_font (SCM fn, Real m)
+{
+ SCM key = gh_cons (fn, gh_double2scm (m));
+ SCM met = scm_assoc (key, scaled_fonts_);
+
+ if (gh_pair_p (met))
+ return unsmob_metrics (ly_cdr (met));
+
+ /*
+ Hmm. We're chaining font - metrics. Should consider wether to merge
+ virtual-font and scaled_font.
+ */
+ Font_metric* f=0;
+ if (gh_list_p (fn))
+ {
+ f = new Virtual_font_metric (fn, m, this);
+ }
+ else
+ {
+ SCM var = ly_module_lookup (scope_, ly_symbol2scm ("outputscale"));
+ m /= gh_scm2double (scm_variable_ref (var));
+
+ f = all_fonts_global->find_font (ly_scm2string (fn));
+ SCM val = Scaled_font_metric::make_scaled_font_metric (f, m);
+ scaled_fonts_ = scm_acons (key, val, scaled_fonts_);
+ f = unsmob_metrics (val);
+ scm_gc_unprotect_object (val);