+Tex_font_metric *
+All_font_metrics::find_tfm (string name)
+{
+ SCM sname = ly_symbol2scm (name.c_str ());
+ SCM name_string = scm_makfrom0str (name.c_str ());
+ SCM val;
+ if (!tfm_dict_->try_retrieve (sname, &val))
+ {
+ string file_name;
+
+ if (file_name.empty ())
+ {
+ /* FIXME: should add "cork-" prefix to lm* fonts. How to do
+ that, cleanly? */
+ string p = kpathsea_find_file (name, "tfm");
+ if (p.length ())
+ file_name = p;
+ }
+
+ if (file_name.empty ())
+ file_name = search_path_.find (name + ".tfm");
+ if (file_name.empty ())
+ return 0;
+
+ if (be_verbose_global)
+ progress_indication ("[" + file_name);
+
+ val = Tex_font_metric::make_tfm (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));
+ tfm_dict_->set (sname, val);
+ unsmob_metrics (val)->unprotect ();
+ }
+
+ return dynamic_cast<Tex_font_metric *> (unsmob_metrics (val));
+}
+