+Open_type_font *
+All_font_metrics::find_otf (String name)
+{
+ SCM sname = ly_symbol2scm (name.to_str0 ());
+ SCM name_string = scm_makfrom0str (name.to_str0 ());
+ SCM val;
+ if (!otf_dict_->try_retrieve (sname, &val))
+ {
+ String file_name;
+
+ if (file_name.is_empty ())
+ file_name = search_path_.find (name + ".otf");
+ if (file_name.is_empty ())
+ return 0;
+
+ if (be_verbose_global)
+ progress_indication ("[" + file_name);
+
+ val = Open_type_font::make_otf (file_name);
+
+ if (be_verbose_global)
+ progress_indication ("]");
+
+ unsmob_metrics (val)->file_name_ = file_name;
+ unsmob_metrics (val)->description_ = scm_cons (name_string,
+ scm_from_double (1.0));
+ otf_dict_->set (sname, val);
+ unsmob_metrics (val)->unprotect ();
+ }
+
+ return dynamic_cast<Open_type_font *> (unsmob_metrics (val));
+}