]> git.donarmstrong.com Git - lilypond.git/blob - lily/font-interface.cc
de787fd852bf2e4ff04a1fdb96d80d54e412dc89
[lilypond.git] / lily / font-interface.cc
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 2000--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
5
6   LilyPond is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   LilyPond is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "font-interface.hh"
21
22 #include "all-font-metrics.hh"
23 #include "output-def.hh"
24 #include "warn.hh"
25 #include "grob.hh"
26
27 /* todo: split up this func, reuse in text_item?  */
28 Font_metric *
29 Font_interface::get_default_font (Grob *me)
30 {
31   Font_metric *fm = unsmob<Font_metric> (me->get_property ("font"));
32   if (!fm)
33     {
34       SCM chain = music_font_alist_chain (me);
35
36       fm = select_font (me->layout (), chain);
37       me->set_property ("font", fm->self_scm ());
38     }
39
40   return fm;
41 }
42
43 SCM
44 Font_interface::music_font_alist_chain (Grob *g)
45 {
46   SCM defaults
47     = g->layout ()->lookup_variable (ly_symbol2scm ("font-defaults"));
48   if (SCM_UNBNDP (defaults))
49     defaults = SCM_EOL;
50   return g->get_property_alist_chain (defaults);
51 }
52
53 SCM
54 Font_interface::text_font_alist_chain (Grob *g)
55 {
56   SCM defaults
57     = g->layout ()->lookup_variable (ly_symbol2scm ("text-font-defaults"));
58   if (SCM_UNBNDP (defaults))
59     defaults = SCM_EOL;
60   return g->get_property_alist_chain (defaults);
61 }
62
63 ADD_INTERFACE (Font_interface,
64                "Any symbol that is typeset through fixed sets of glyphs,"
65                " (i.e., fonts).",
66
67                /* properties */
68                "font "
69                "font-encoding "
70                "font-family "
71                "font-name "
72                "font-series "
73                "font-shape "
74                "font-size "
75               );