X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffont-interface.cc;h=16f51c82b344422fcfb2caec317c03e1627690d3;hb=665aa6046a11676fab68826fd61a99e53b704e01;hp=dc6bd81d57117680f793c74021d18815d90095b1;hpb=7776d4901caa57e1d0f3ab7cf01348b930a6dbee;p=lilypond.git diff --git a/lily/font-interface.cc b/lily/font-interface.cc index dc6bd81d57..16f51c82b3 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -1,79 +1,64 @@ -/* - font-interface.cc -- implement Font_interface - - source file of the GNU LilyPond music typesetter - - (c) 2000 Han-Wen Nienhuys - - */ - -#include "all-font-metrics.hh" -#include "font-metric.hh" -#include "font-interface.hh" -#include "score-element.hh" -#include "paper-def.hh" +/* + font-interface.cc -- implement Font_interface + source file of the GNU LilyPond music typesetter -SCM -Font_interface::font_alist_chain (Score_element *me) -{ - SCM defaults = gh_cdr (scm_assoc (ly_symbol2scm ("font-defaults"), - me->paper_l ()->style_sheet_ )); + (c) 2000--2007 Han-Wen Nienhuys +*/ - SCM ch = gh_list (me->mutable_property_alist_, - me->immutable_property_alist_, - defaults, - SCM_UNDEFINED); +#include "font-interface.hh" - return ch; -} +#include "all-font-metrics.hh" +#include "output-def.hh" +#include "warn.hh" +#include "grob.hh" -/* - todo: split up this func, reuse in text_item? - */ +/* todo: split up this func, reuse in text_item? */ Font_metric * -Font_interface::get_default_font (Score_element*me) +Font_interface::get_default_font (Grob *me) { - Font_metric * fm = unsmob_metrics (me->get_elt_property ("font")); - if (fm) - return fm; + Font_metric *fm = unsmob_metrics (me->get_property ("font")); + if (!fm) + { + SCM chain = music_font_alist_chain (me); + + fm = select_font (me->layout (), chain); + me->set_property ("font", fm->self_scm ()); + } - fm = get_font (me, font_alist_chain (me)); - me->set_elt_property ("font", fm->self_scm ()); return fm; } -Font_metric * -Font_interface::get_font (Score_element *me, SCM chain) +SCM +Font_interface::music_font_alist_chain (Grob *g) { - - SCM ss = me->paper_l ()->style_sheet_; - - SCM proc = gh_cdr (scm_assoc (ly_symbol2scm ("properties-to-font"), - ss)); - - SCM fonts = gh_cdr (scm_assoc (ly_symbol2scm ("fonts"), ss)); - - assert (gh_procedure_p (proc)); - SCM font_name = gh_call2 (proc, fonts, chain); - - Font_metric *fm = me->paper_l ()->find_font (font_name, 1.0); - - return fm; + SCM defaults + = g->layout ()->lookup_variable (ly_symbol2scm ("font-defaults")); + if (defaults == SCM_UNDEFINED) + defaults = SCM_EOL; + return g->get_property_alist_chain (defaults); } SCM -Font_interface::add_style (Score_element* me, SCM style, SCM chain) +Font_interface::text_font_alist_chain (Grob *g) { - assert (gh_symbol_p (style)); - - SCM sheet = me->paper_l ()->style_sheet_; - - SCM style_alist = gh_cdr (scm_assoc (ly_symbol2scm ("style-alist"), sheet)); - SCM entry = scm_assoc (style, style_alist); - if (gh_pair_p (entry)) - { - chain = gh_cons (gh_cdr (entry), chain); - } - return chain; + SCM defaults + = g->layout ()->lookup_variable (ly_symbol2scm ("text-font-defaults")); + if (defaults == SCM_UNDEFINED) + defaults = SCM_EOL; + return g->get_property_alist_chain (defaults); } + +ADD_INTERFACE (Font_interface, + "Any symbol that is typeset through fixed sets of glyphs," + " (i.e., fonts).", + + /* properties */ + "font " + "font-encoding " + "font-family " + "font-name " + "font-series " + "font-shape " + "font-size " + );