-Font_metric *
-Font_interface::get_font (Paper_def *paper, SCM chain)
-{
- SCM name = ly_assoc_chain (ly_symbol2scm ("font-name"), chain);
-
- if (!gh_pair_p (name) || !gh_string_p (gh_cdr (name)))
- {
- SCM proc = paper->lookup_variable (ly_symbol2scm ("properties-to-font"));
- SCM fonts = paper->lookup_variable (ly_symbol2scm ("fonts"));
-
- assert (gh_procedure_p (proc));
- name = gh_call2 (proc, fonts, chain);
- }
- else
- 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;
-}
-
-/*
-SCM routines for looking up fonts.
-
-wtk-fugue2, SCM:
-
-real 0m31.862s
-user 0m29.110s
-sys 0m0.260s
-
-wtk-fugue2, C++:
-
-real 0m26.964s
-user 0m24.850s
-sys 0m0.280s
-
-
-so a 14% speedup.
-
-*/
-
-static SCM shape_sym, family_sym, series_sym, rel_str0_sym, design_str0_sym, wild_sym;
-
-
-static void
-init_syms ()
-{
- shape_sym = scm_permanent_object (ly_symbol2scm ("font-shape"));
- family_sym = scm_permanent_object (ly_symbol2scm ("font-family"));
- series_sym = scm_permanent_object (ly_symbol2scm ("font-series"));
- rel_str0_sym = scm_permanent_object (ly_symbol2scm ("font-relative-size"));
- design_str0_sym = scm_permanent_object (ly_symbol2scm ("font-design-size"));
- wild_sym = scm_permanent_object (ly_symbol2scm ("*"));
-}
-
-ADD_SCM_INIT_FUNC(fi_init_syms, init_syms);
-
-bool
-Font_interface::wild_compare (SCM field_val, SCM val)
-{
- return (val == SCM_BOOL_F || field_val == wild_sym || field_val == val);
-}
-
-
-MAKE_SCHEME_CALLBACK (Font_interface,properties_to_font_name,2);