Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / blenfont / intern / blf_font_i18n.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2011 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup blf
21  *
22  * API for accessing font files.
23  */
24
25 #include <stdlib.h>
26 #include <string.h>
27
28 #include "BLF_api.h"
29
30 #include "MEM_guardedalloc.h"
31
32 #include "BLI_utildefines.h"
33
34 #include "BKE_appdir.h"
35
36 #ifdef WITH_INTERNATIONAL
37
38 #include "BLI_fileops.h"
39 #include "BLI_string.h"
40
41 struct FontBuf {
42         const char *filename;
43         uchar *data;
44         int data_len;
45 };
46
47 static struct FontBuf unifont_ttf =  {"droidsans.ttf.gz"};
48 static struct FontBuf unifont_mono_ttf = {"bmonofont-i18n.ttf.gz"};
49
50 static void fontbuf_load(struct FontBuf *fb)
51 {
52         const char *fontpath = BKE_appdir_folder_id(BLENDER_DATAFILES, "fonts");
53         if (fontpath) {
54                 char unifont_path[1024];
55                 BLI_snprintf(unifont_path, sizeof(unifont_path), "%s/%s", fontpath, fb->filename);
56                 fb->data = (uchar *)BLI_file_ungzip_to_mem(unifont_path, &fb->data_len);
57
58         }
59         else {
60                 printf("%s: 'fonts' data path not found for '%s', continuing\n", __func__, fb->filename);
61         }
62 }
63
64 static void fontbuf_free(struct FontBuf *fb)
65 {
66         MEM_SAFE_FREE(fb->data);
67         fb->data_len = 0;
68 }
69
70 static uchar *fontbuf_get_mem(struct FontBuf *fb, int *r_size)
71 {
72         if (fb->data == NULL) {
73                 fontbuf_load(fb);
74         }
75         *r_size = fb->data_len;
76         return fb->data;
77 }
78
79 #endif /* WITH_INTERNATIONAL */
80
81
82 uchar *BLF_get_unifont(int *r_unifont_size)
83 {
84 #ifdef WITH_INTERNATIONAL
85         return fontbuf_get_mem(&unifont_ttf, r_unifont_size);
86 #else
87         UNUSED_VARS(r_unifont_size);
88         return NULL;
89 #endif
90 }
91
92 uchar *BLF_get_unifont_mono(int *r_unifont_size)
93 {
94 #ifdef WITH_INTERNATIONAL
95         return fontbuf_get_mem(&unifont_mono_ttf, r_unifont_size);
96 #else
97         UNUSED_VARS(r_unifont_size);
98         return NULL;
99 #endif
100 }
101
102 void BLF_free_unifont(void)
103 {
104 #ifdef WITH_INTERNATIONAL
105         fontbuf_free(&unifont_ttf);
106 #endif
107 }
108
109 void BLF_free_unifont_mono(void)
110 {
111 #ifdef WITH_INTERNATIONAL
112         fontbuf_free(&unifont_mono_ttf);
113 #endif
114 }