summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-02-17 00:08:28 +0000
committerVincent Sanders <vince@kyllikki.org>2019-02-17 00:11:27 +0000
commit54371c28f07e638694ad2148e8900e1bae71e3d4 (patch)
tree70e32c6b86f5d584d039b01edf4d9b5eb3a7d039 /frontends
parentcfb6c461fc61c64cf39e4708922ad024ac5fce91 (diff)
downloadnetsurf-54371c28f07e638694ad2148e8900e1bae71e3d4.tar.gz
netsurf-54371c28f07e638694ad2148e8900e1bae71e3d4.tar.bz2
make framebuffer use the language environment for the UI resources
Diffstat (limited to 'frontends')
-rw-r--r--frontends/framebuffer/Makefile15
-rw-r--r--frontends/framebuffer/findfile.c107
-rw-r--r--frontends/framebuffer/findfile.h2
-rw-r--r--frontends/framebuffer/gui.c5
l---------frontends/framebuffer/res/Messages2
l---------frontends/framebuffer/res/de/welcome.html1
l---------frontends/framebuffer/res/en/credits.html1
l---------frontends/framebuffer/res/en/licence.html1
l---------frontends/framebuffer/res/en/maps.html1
l---------frontends/framebuffer/res/en/welcome.html1
l---------frontends/framebuffer/res/it/credits.html1
l---------frontends/framebuffer/res/it/licence.html1
l---------frontends/framebuffer/res/ja/welcome.html1
l---------frontends/framebuffer/res/nl/credits.html1
l---------frontends/framebuffer/res/nl/licence.html1
l---------frontends/framebuffer/res/nl/welcome.html1
16 files changed, 133 insertions, 9 deletions
diff --git a/frontends/framebuffer/Makefile b/frontends/framebuffer/Makefile
index 06e7afbaa..9bb042f4a 100644
--- a/frontends/framebuffer/Makefile
+++ b/frontends/framebuffer/Makefile
@@ -1,5 +1,10 @@
+#
+# Makefile for NetSurf Framebuffer frontend
+#
+# This file is part of NetSurf
+#
# ----------------------------------------------------------------------------
-# Framebuffer target setup
+# Framebuffer flag setup (using pkg-config)
# ----------------------------------------------------------------------------
CFLAGS += -std=c99 -g \
@@ -51,6 +56,14 @@ $(eval $(call pkg_config_find_and_add,libnsfb,libnsfb))
LDFLAGS += -Wl,--no-whole-archive
# ---------------------------------------------------------------------------
+# Target setup
+# ---------------------------------------------------------------------------
+
+# The filter and target for split messages
+MESSAGES_FILTER=fb
+MESSAGES_TARGET=$(FRONTEND_RESOURCES_DIR)
+
+# ---------------------------------------------------------------------------
# HOST specific feature flags
# ---------------------------------------------------------------------------
diff --git a/frontends/framebuffer/findfile.c b/frontends/framebuffer/findfile.c
index 67312f452..44a07b383 100644
--- a/frontends/framebuffer/findfile.c
+++ b/frontends/framebuffer/findfile.c
@@ -17,29 +17,128 @@
*/
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include "utils/filepath.h"
+#include "utils/log.h"
#include "framebuffer/findfile.h"
char **respaths; /** resource search path vector */
-/** Create an array of valid paths to search for resources.
+#define MAX_LANGV_SIZE 32
+
+/**
+ * goes through the environment in appropriate order to find configured language
+ *
+ * \return language to use or "C" if nothing appropriate is set
+ */
+static const char *get_language_env(void)
+{
+ const char *envstr;
+
+ envstr = getenv("LANGUAGE");
+ if ((envstr != NULL) && (envstr[0] != 0)) {
+ return envstr;
+ }
+
+ envstr = getenv("LC_ALL");
+ if ((envstr != NULL) && (envstr[0] != 0)) {
+ return envstr;
+ }
+
+ envstr = getenv("LC_MESSAGES");
+ if ((envstr != NULL) && (envstr[0] != 0)) {
+ return envstr;
+ }
+
+ envstr = getenv("LANG");
+ if ((envstr != NULL) && (envstr[0] != 0)) {
+ return envstr;
+ }
+
+ return "C";
+}
+
+/**
+ * build a string vector of language names
+ */
+static char **get_language_names(void)
+{
+ char **langv; /* output string vector of languages */
+ int langc; /* count of languages in vector */
+ const char *envlang; /* colon separated list of languages from environment */
+ int lstart = 0; /* offset to start of current language */
+ int lunder = 0; /* offset to underscore in current language */
+ int lend = 0; /* offset to end of current language */
+ char *nlang;
+
+ langv = calloc(MAX_LANGV_SIZE + 2, sizeof(char *));
+ if (langv == NULL) {
+ return NULL;
+ }
+
+ envlang = get_language_env();
+
+ for (langc = 0; langc < MAX_LANGV_SIZE; langc++) {
+ /* work through envlang splitting on : */
+ while ((envlang[lend] != 0) &&
+ (envlang[lend] != ':') &&
+ (envlang[lend] != '.')) {
+ if (envlang[lend] == '_') {
+ lunder = lend;
+ }
+ lend++;
+ }
+ /* place language in string vector */
+ nlang = malloc(lend - lstart + 1);
+ memcpy(nlang, envlang + lstart, lend - lstart);
+ nlang[lend - lstart] = 0;
+ langv[langc] = nlang;
+
+ /* add language without specialisation to vector */
+ if (lunder != lstart) {
+ nlang = malloc(lunder - lstart + 1);
+ memcpy(nlang, envlang + lstart, lunder - lstart);
+ nlang[lunder - lstart] = 0;
+ langv[++langc] = nlang;
+ }
+
+ /* if we stopped at the dot, move to the colon delimiter */
+ while ((envlang[lend] != 0) &&
+ (envlang[lend] != ':')) {
+ lend++;
+ }
+ if (envlang[lend] == 0) {
+ /* reached end of environment language list */
+ break;
+ }
+ lend++;
+ lstart = lunder = lend;
+ }
+ return langv;
+}
+
+/**
+ * Create an array of valid paths to search for resources.
*
* The idea is that all the complex path computation to find resources
* is performed here, once, rather than every time a resource is
* searched for.
*/
char **
-fb_init_resource(const char *resource_path)
+fb_init_resource_path(const char *resource_path)
{
char **pathv; /* resource path string vector */
char **respath; /* resource paths vector */
- const char *lang = NULL;
+ char **langv;
pathv = filepath_path_to_strvec(resource_path);
- respath = filepath_generate(pathv, &lang);
+ langv = get_language_names();
+
+ respath = filepath_generate(pathv, (const char * const *)langv);
filepath_free_strvec(pathv);
diff --git a/frontends/framebuffer/findfile.h b/frontends/framebuffer/findfile.h
index 1f3db6eb1..5e9e3186b 100644
--- a/frontends/framebuffer/findfile.h
+++ b/frontends/framebuffer/findfile.h
@@ -27,6 +27,6 @@ extern char **respaths;
* is performed here, once, rather than every time a resource is
* searched for.
*/
-char **fb_init_resource(const char *resource_path);
+char **fb_init_resource_path(const char *resource_path);
#endif /* NETSURF_FB_FINDFILE_H */
diff --git a/frontends/framebuffer/gui.c b/frontends/framebuffer/gui.c
index 1e27dafb6..95e35fb30 100644
--- a/frontends/framebuffer/gui.c
+++ b/frontends/framebuffer/gui.c
@@ -2104,7 +2104,8 @@ static struct gui_misc_table framebuffer_misc_table = {
.quit = gui_quit,
};
-/** Entry point from OS.
+/**
+ * Entry point from OS.
*
* /param argc The number of arguments in the string vector.
* /param argv The argument string vector.
@@ -2134,7 +2135,7 @@ main(int argc, char** argv)
die("NetSurf operation table failed registration");
}
- respaths = fb_init_resource(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH);
+ respaths = fb_init_resource_path(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH);
/* initialise logging. Not fatal if it fails but not much we
* can do about it either.
diff --git a/frontends/framebuffer/res/Messages b/frontends/framebuffer/res/Messages
index 43148a263..75bfdf53d 120000
--- a/frontends/framebuffer/res/Messages
+++ b/frontends/framebuffer/res/Messages
@@ -1 +1 @@
-../../../resources/en/Messages \ No newline at end of file
+en/Messages \ No newline at end of file
diff --git a/frontends/framebuffer/res/de/welcome.html b/frontends/framebuffer/res/de/welcome.html
new file mode 120000
index 000000000..b77e23743
--- /dev/null
+++ b/frontends/framebuffer/res/de/welcome.html
@@ -0,0 +1 @@
+../../../../resources/de/welcome.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/en/credits.html b/frontends/framebuffer/res/en/credits.html
new file mode 120000
index 000000000..f73ecd4aa
--- /dev/null
+++ b/frontends/framebuffer/res/en/credits.html
@@ -0,0 +1 @@
+../../../../resources/en/credits.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/en/licence.html b/frontends/framebuffer/res/en/licence.html
new file mode 120000
index 000000000..0c3b430b7
--- /dev/null
+++ b/frontends/framebuffer/res/en/licence.html
@@ -0,0 +1 @@
+../../../../resources/en/licence.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/en/maps.html b/frontends/framebuffer/res/en/maps.html
new file mode 120000
index 000000000..507a4b248
--- /dev/null
+++ b/frontends/framebuffer/res/en/maps.html
@@ -0,0 +1 @@
+../../../../resources/en/maps.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/en/welcome.html b/frontends/framebuffer/res/en/welcome.html
new file mode 120000
index 000000000..543f31ddd
--- /dev/null
+++ b/frontends/framebuffer/res/en/welcome.html
@@ -0,0 +1 @@
+../../../../resources/en/welcome.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/it/credits.html b/frontends/framebuffer/res/it/credits.html
new file mode 120000
index 000000000..2b7c99542
--- /dev/null
+++ b/frontends/framebuffer/res/it/credits.html
@@ -0,0 +1 @@
+../../../../resources/it/credits.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/it/licence.html b/frontends/framebuffer/res/it/licence.html
new file mode 120000
index 000000000..92afce85b
--- /dev/null
+++ b/frontends/framebuffer/res/it/licence.html
@@ -0,0 +1 @@
+../../../../resources/it/licence.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/ja/welcome.html b/frontends/framebuffer/res/ja/welcome.html
new file mode 120000
index 000000000..8b603f3df
--- /dev/null
+++ b/frontends/framebuffer/res/ja/welcome.html
@@ -0,0 +1 @@
+../../../../resources/ja/welcome.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/nl/credits.html b/frontends/framebuffer/res/nl/credits.html
new file mode 120000
index 000000000..71b27e40a
--- /dev/null
+++ b/frontends/framebuffer/res/nl/credits.html
@@ -0,0 +1 @@
+../../../../resources/nl/credits.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/nl/licence.html b/frontends/framebuffer/res/nl/licence.html
new file mode 120000
index 000000000..5aaf1cb44
--- /dev/null
+++ b/frontends/framebuffer/res/nl/licence.html
@@ -0,0 +1 @@
+../../../../resources/nl/licence.html \ No newline at end of file
diff --git a/frontends/framebuffer/res/nl/welcome.html b/frontends/framebuffer/res/nl/welcome.html
new file mode 120000
index 000000000..ef7a97cc9
--- /dev/null
+++ b/frontends/framebuffer/res/nl/welcome.html
@@ -0,0 +1 @@
+../../../../resources/nl/welcome.html \ No newline at end of file