Replacing gettext i18n backend by boost::locale one.
[blender.git] / source / blender / blenfont / intern / blf_translation.c
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. 
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2011 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Blender Foundation,
22  *                 Sergey Sharybin
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file blender/blenfont/intern/blf_translation.c
28  *  \ingroup blf
29  */
30
31 #include <stdlib.h>
32 #include <string.h>
33
34 #include "BLF_translation.h"
35
36 #ifdef WITH_INTERNATIONAL
37
38 #include "boost_locale_wrapper.h"
39
40 #include "MEM_guardedalloc.h"
41
42 #include "BLI_utildefines.h"
43 #include "BLI_path_util.h"
44 #include "BLI_string.h"
45 #include "BLI_path_util.h"
46 #include "BLI_fileops.h"
47
48 #include "DNA_userdef_types.h" /* For user settings. */
49
50 static const char unifont_filename[] = "droidsans.ttf.gz";
51 static unsigned char *unifont_ttf = NULL;
52 static int unifont_size = 0;
53
54 unsigned char *BLF_get_unifont(int *unifont_size_r)
55 {
56         if (unifont_ttf == NULL) {
57                 char *fontpath = BLI_get_folder(BLENDER_DATAFILES, "fonts");
58                 if (fontpath) {
59                         char unifont_path[1024];
60
61                         BLI_snprintf(unifont_path, sizeof(unifont_path), "%s/%s", fontpath, unifont_filename);
62
63                         unifont_ttf = (unsigned char *)BLI_file_ungzip_to_mem(unifont_path, &unifont_size);
64                 }
65                 else {
66                         printf("%s: 'fonts' data path not found for international font, continuing\n", __func__);
67                 }
68         }
69
70         *unifont_size_r = unifont_size;
71
72         return unifont_ttf;
73 }
74
75 void BLF_free_unifont(void)
76 {
77         if (unifont_ttf)
78                 MEM_freeN(unifont_ttf);
79 }
80
81 #endif
82
83 const char *BLF_pgettext(const char *msgctxt, const char *msgid)
84 {
85 #ifdef WITH_INTERNATIONAL
86         if (msgid && msgid[0]) {
87                 return bl_locale_pgettext(msgctxt, msgid);
88         }
89         return "";
90 #else
91         (void)msgctxt;
92         return msgid;
93 #endif
94 }
95
96 int BLF_translate_iface(void)
97 {
98 #ifdef WITH_INTERNATIONAL
99         return (U.transopts & USER_DOTRANSLATE) && (U.transopts & USER_TR_IFACE);
100 #else
101         return 0;
102 #endif
103 }
104
105 int BLF_translate_tooltips(void)
106 {
107 #ifdef WITH_INTERNATIONAL
108         return (U.transopts & USER_DOTRANSLATE) && (U.transopts & USER_TR_TOOLTIPS);
109 #else
110         return 0;
111 #endif
112 }
113
114 const char *BLF_translate_do_iface(const char *msgctxt, const char *msgid)
115 {
116 #ifdef WITH_INTERNATIONAL
117         if (BLF_translate_iface()) {
118                 return BLF_pgettext(msgctxt, msgid);
119         }
120         else {
121                 return msgid;
122         }
123 #else
124         (void)msgctxt;
125         return msgid;
126 #endif
127 }
128
129 const char *BLF_translate_do_tooltip(const char *msgctxt, const char *msgid)
130 {
131 #ifdef WITH_INTERNATIONAL
132         if (BLF_translate_tooltips()) {
133                 return BLF_pgettext(msgctxt, msgid);
134         }
135         else {
136                 return msgid;
137         }
138 #else
139         (void)msgctxt;
140         return msgid;
141 #endif
142 }