]> git.donarmstrong.com Git - lilypond.git/blob - lily/font-config.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / font-config.cc
1 /*
2   font-config.cc -- implement FontConfig related functions
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "config.hh"
10
11 #if HAVE_FONTCONFIG
12
13 #include <fontconfig/fontconfig.h>
14 #include <sys/stat.h>
15
16 #include "file-path.hh"
17 #include "international.hh"
18 #include "main.hh"
19 #include "warn.hh"
20
21
22 FcConfig *font_config_global = 0;
23
24 void
25 init_fontconfig ()
26 {
27   if (be_verbose_global)
28     message (_ ("Initializing FontConfig..."));
29
30   font_config_global = FcInitLoadConfig ();
31   FcChar8 *cache_file = FcConfigGetCache (font_config_global);
32
33   /*
34     This is a terrible kludge, but there is apparently no way for
35     FontConfig to signal whether it needs to rescan directories.
36    */ 
37   if (!is_file ((char*)cache_file))
38     message (_f ("Rebuilding FontConfig cache %s. this may take a while...", cache_file));
39                         
40   vector<string> dirs;
41
42   dirs.push_back (prefix_directory + "/fonts/otf/");
43   dirs.push_back (prefix_directory + "/fonts/type1/");
44   
45   for (vsize i = 0; i < dirs.size (); i++)
46     {
47       string dir = dirs[i];
48       if (!FcConfigAppFontAddDir (font_config_global, (FcChar8 *)dir.c_str ()))
49         error (_f ("adding font directory: %s", dir.c_str ()));
50       else if (be_verbose_global)
51         message (_f ("adding font directory: %s", dir.c_str ()));
52     }
53   
54   if (be_verbose_global)
55     progress_indication ("Building font database.\n");
56   FcConfigBuildFonts (font_config_global);
57   FcConfigSetCurrent (font_config_global);
58   if (be_verbose_global)
59     progress_indication ("\n");
60
61   if (!is_file ((char*)cache_file))
62     {
63       /* inhibit future messages. */
64       FILE *f = fopen ((char*)cache_file, "w");
65       if (f)
66         fclose (f);
67     }
68   
69 }
70
71 #else
72
73 void
74 init_fontconfig ()
75 {
76 }
77
78 #endif