- name = gh_cdr (name);
-
- SCM mag = ly_assoc_chain (ly_symbol2scm ("font-magnification"), chain);
-
- Real rmag = gh_pair_p (mag) && gh_number_p (gh_cdr (mag))
- ? gh_scm2double (gh_cdr (mag)) : 1.0;
-
- Font_metric *fm = paper->find_font (name, rmag);
- return fm;
+ name = scm_cdr (name);
+
+ if (scm_is_string (name))
+ {
+ SCM mag = ly_assoc_chain (ly_symbol2scm ("font-magnification"), chain);
+ Real rmag = (scm_is_pair (mag)
+ ? robust_scm2double (scm_cdr (mag), 1.0)
+ : 1);
+ Font_metric *fm = all_fonts_global->find_font (ly_scm2string (name));
+
+ return find_scaled_font (layout, fm, rmag, input_encoding);
+ }
+ else if (scm_instance_p (name))
+ {
+ SCM base_size = scm_slot_ref (name, ly_symbol2scm ("default-size"));
+ SCM vec = scm_slot_ref (name, ly_symbol2scm ("size-vector"));
+
+ SCM font_size = ly_assoc_chain (ly_symbol2scm ("font-size"), chain);
+ Real req = 0;
+ if (scm_is_pair (font_size))
+ req = scm_to_double (scm_cdr (font_size));
+
+ return get_font_by_mag_step (layout, req, vec, scm_to_double (base_size),
+ input_encoding);
+ }
+
+ assert (0);
+ return 0;
+}
+
+Font_metric *
+select_font (Output_def *layout, SCM chain)
+{
+ return select_encoded_font (layout, chain, SCM_EOL);