Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenfont')
-rw-r--r--source/blender/blenfont/BLF_api.h52
-rw-r--r--source/blender/blenfont/Makefile30
-rw-r--r--source/blender/blenfont/SConscript9
-rw-r--r--source/blender/blenfont/intern/Makefile42
-rw-r--r--source/blender/blenfont/intern/blf_internal_types.h45
-rw-r--r--source/blender/blenfont/intern/blf_lang.c242
6 files changed, 420 insertions, 0 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
new file mode 100644
index 00000000000..0a4ed0d7020
--- /dev/null
+++ b/source/blender/blenfont/BLF_api.h
@@ -0,0 +1,52 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BLF_API_H
+#define BLF_API_H
+
+/* Read the .Blanguages file, return 1 on success or 0 if fails. */
+int BLF_lang_init(void);
+
+/* Free the memory allocate for the .Blanguages. */
+void BLF_lang_exit(void);
+
+/* Set the current Language. */
+void BLF_lang_set(int id);
+
+/* Return a string with all the Language available. */
+char *BLF_lang_pup(void);
+
+/* Return the number of invalid lines in the .Blanguages file,
+ * zero means no error found.
+ */
+int BLF_lang_error(void);
+
+/* Return the code string for the specified language code. */
+char *BLF_lang_find_code(short langid);
+
+#endif /* BLF_API_H */
diff --git a/source/blender/blenfont/Makefile b/source/blender/blenfont/Makefile
new file mode 100644
index 00000000000..70dd2e5052b
--- /dev/null
+++ b/source/blender/blenfont/Makefile
@@ -0,0 +1,30 @@
+#
+# $Id:
+#
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2009 Blender Foundation
+# All rights reserved.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+SOURCEDIR = source/blender/blenfont
+DIRS = intern
+
+include nan_subdirs.mk
diff --git a/source/blender/blenfont/SConscript b/source/blender/blenfont/SConscript
new file mode 100644
index 00000000000..aa48143efef
--- /dev/null
+++ b/source/blender/blenfont/SConscript
@@ -0,0 +1,9 @@
+#!/usr/bin/python
+import sys
+Import ('env')
+
+sources = env.Glob('intern/*.c')
+
+incs = '. intern ../blenkernel ../blenlib ../makesdna ../ftfont'
+
+env.BlenderLib ( 'bf_blenfont', sources, Split(incs), Split(defs), libtype=['core'], priority=[210] )
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile
new file mode 100644
index 00000000000..94e80466782
--- /dev/null
+++ b/source/blender/blenfont/intern/Makefile
@@ -0,0 +1,42 @@
+#
+# $Id:
+#
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2008 Blender Foundation.
+# All rights reserved.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL LICENSE BLOCK *****
+#
+#
+
+LIBNAME = blenfont
+DIR = $(OCGDIR)/blender/blenfont
+
+include nan_compile.mk
+
+CFLAGS += $(LEVEL_1_C_WARNINGS)
+
+CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../blenlib
+CPPFLAGS += -I../../blenkernel
+CPPFLAGS += -I../../ftfont
+
+CPPFLAGS += -I..
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
new file mode 100644
index 00000000000..3a8c1bca3f5
--- /dev/null
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -0,0 +1,45 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BLF_INTERNAL_TYPES_H
+#define BLF_INTERNAL_TYPES_H
+
+typedef struct LangBLF {
+ struct LangBLF *next;
+ struct LangBLF *prev;
+
+ char *line;
+ char *language;
+ char *code;
+ int id;
+} LangBLF;
+
+#define BLF_LANG_FIND_BY_LINE 0
+#define BLF_LANG_FIND_BY_LANGUAGE 1
+#define BLF_LANG_FIND_BY_CODE 2
+
+#endif /* BLF_INTERNAL_TYPES_H */
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
new file mode 100644
index 00000000000..527656f67b0
--- /dev/null
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -0,0 +1,242 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_listBase.h"
+
+#include "BKE_utildefines.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_linklist.h" /* linknode */
+#include "BLI_string.h"
+
+#include "blf_internal_types.h"
+
+// XXX 2.50 Remove this later.
+#include "FTF_Api.h"
+
+static ListBase global_lang= { NULL, NULL };
+static int global_tot_lang= 0;
+static int global_err_lang= 0;
+
+int BLF_lang_error(void)
+{
+ return(global_err_lang);
+}
+
+char *BLF_lang_pup(void)
+{
+ LangBLF *lme;
+ static char string[1024];
+ static char tmp[1024];
+
+ if(global_tot_lang == 0)
+ sprintf(string, "Choose Language: %%t|Language: English %%x0");
+ else {
+ lme= global_lang.first;
+ sprintf(string, "Choose Language: %%t");
+ while (lme) {
+ sprintf(tmp, "|Language: %s %%x%d", lme->language, lme->id);
+ strcat(string, tmp);
+ lme= lme->next;
+ }
+ }
+
+ return(string);
+}
+
+LangBLF *blf_lang_find_by_id(short langid)
+{
+ LangBLF *p;
+
+ p= global_lang.first;
+ while (p) {
+ if (p->id == langid)
+ return(p);
+ p= p->next;
+ }
+ return(NULL);
+}
+
+char *BLF_lang_find_code(short langid)
+{
+ LangBLF *p;
+
+ p= blf_lang_find_by_id(langid);
+ if (p)
+ return(p->code);
+ return(NULL);
+}
+
+void BLF_lang_set(int id)
+{
+ LangBLF *lme;
+
+ // XXX 2.50 Remove this later, with ftfont
+ lme= blf_lang_find_by_id(id);
+ if(lme) FTF_SetLanguage(lme->code);
+ else FTF_SetLanguage("en_US");
+}
+
+static void blf_lang_split(char *line, LangBLF* lme)
+{
+ char *dpointchar= strchr(line, ':');
+
+ if (dpointchar) {
+ lme->code= BLI_strdup(dpointchar+1);
+ *(dpointchar)=0;
+ lme->language= BLI_strdup(line);
+ } else {
+ lme->code= NULL;
+ lme->language= NULL;
+ /* XXX 2.50 bad call error("Invalid language file");
+ * If we set this to NULL, the function blf_lang_new
+ * drop the line and increment the error lang value
+ * so the init code can call BLF_lang_error to get
+ * the number of invalid lines and show the error.
+ */
+ }
+}
+
+LangBLF *blf_lang_find(char *s, int find_by)
+{
+ LangBLF *p;
+
+ p= global_lang.first;
+ while (p) {
+ if (find_by == BLF_LANG_FIND_BY_LINE) {
+ if (BLI_streq(s, p->line))
+ return(p);
+ }
+ else if (find_by == BLF_LANG_FIND_BY_CODE) {
+ if (BLI_streq(s, p->code))
+ return(p);
+ }
+ else if (find_by == BLF_LANG_FIND_BY_LANGUAGE) {
+ if (BLI_streq(s, p->language))
+ return(p);
+ }
+ p= p->next;
+ }
+ return(NULL);
+}
+
+static void blf_lang_new(char *line)
+{
+ LangBLF *lme;
+
+ lme= blf_lang_find(line, BLF_LANG_FIND_BY_LINE);
+ if (!lme) {
+ lme= MEM_mallocN(sizeof(LangBLF), "blf_lang_new");
+ lme->next= NULL;
+ lme->prev= NULL;
+ lme->line = BLI_strdup(line);
+ blf_lang_split(line, lme);
+
+ if (lme->code && lme->language) {
+ lme->id = global_tot_lang;
+ global_tot_lang++;
+ BLI_addhead(&global_lang, lme);
+ }
+ else {
+ global_err_lang++;
+ MEM_freeN(lme->line);
+ MEM_freeN(lme);
+ }
+ }
+}
+
+int BLF_lang_init(void)
+{
+ char name[FILE_MAXDIR+FILE_MAXFILE];
+ LinkNode *l, *lines;
+
+ /* .Blanguages, http://www.blender3d.org/cms/Installation_Policy.352.0.html*/
+#if defined (__APPLE__) || (WIN32)
+ BLI_make_file_string("/", name, BLI_gethome(), ".Blanguages");
+#else
+ BLI_make_file_string("/", name, BLI_gethome(), ".blender/.Blanguages");
+#endif
+
+ lines= BLI_read_file_as_lines(name);
+
+ if(lines == NULL) {
+ /* If not found in home, try current dir
+ * (Resources folder of app bundle on OS X) */
+#if defined (__APPLE__)
+ char *bundlePath = BLI_getbundle();
+ strcpy(name, bundlePath);
+ strcat(name, "/Contents/Resources/.Blanguages");
+#else
+ /* Check the CWD. Takes care of the case where users
+ * unpack blender tarball; cd blender-dir; ./blender */
+ strcpy(name, ".blender/.Blanguages");
+#endif
+ lines= BLI_read_file_as_lines(name);
+
+ if(lines == NULL) {
+ /* If not found in .blender, try current dir */
+ strcpy(name, ".Blanguages");
+ lines= BLI_read_file_as_lines(name);
+ if(lines == NULL) {
+// XXX 2.50 if(G.f & G_DEBUG)
+ printf("File .Blanguages not found\n");
+ return(0);
+ }
+ }
+ }
+
+ for (l= lines; l; l= l->next) {
+ char *line= l->link;
+
+ if (!BLI_streq(line, "")) {
+ blf_lang_new(line);
+ }
+ }
+
+ BLI_free_file_lines(lines);
+ return(1);
+}
+
+void BLF_lang_exit(void)
+{
+ LangBLF *p;
+
+ while (global_lang.first) {
+ p= global_lang.first;
+ BLI_remlink(&global_lang, p);
+ MEM_freeN(p->line);
+ MEM_freeN(p->language);
+ MEM_freeN(p->code);
+ MEM_freeN(p);
+ }
+}