diff options
-rw-r--r-- | Makefile.sources | 2 | ||||
-rw-r--r-- | css/ruleset.c | 1 | ||||
-rw-r--r-- | desktop/browser.c | 1 | ||||
-rw-r--r-- | desktop/frames.c | 1 | ||||
-rw-r--r-- | desktop/netsurf.c | 2 | ||||
-rw-r--r-- | render/box_construct.c | 11 | ||||
-rw-r--r-- | render/layout.c | 1 | ||||
-rw-r--r-- | riscos/401login.c | 1 | ||||
-rw-r--r-- | riscos/download.c | 1 | ||||
-rw-r--r-- | riscos/plugin.c | 1 | ||||
-rw-r--r-- | riscos/wimp.c | 20 | ||||
-rw-r--r-- | utils/locale.c | 53 | ||||
-rw-r--r-- | utils/locale.h | 42 |
13 files changed, 120 insertions, 17 deletions
diff --git a/Makefile.sources b/Makefile.sources index 340070670..adb73167e 100644 --- a/Makefile.sources +++ b/Makefile.sources @@ -11,7 +11,7 @@ S_CSS := css.c css_enum.c parser.c ruleset.c scanner.c S_RENDER := box.c box_construct.c box_normalise.c \ directory.c form.c html.c html_redraw.c \ imagemap.c layout.c list.c table.c textplain.c -S_UTILS := base64.c filename.c hashtable.c messages.c talloc.c \ +S_UTILS := base64.c filename.c hashtable.c locale.c messages.c talloc.c \ url.c utf8.c utils.c useragent.c S_DESKTOP := knockout.c options.c tree.c version.c diff --git a/css/ruleset.c b/css/ruleset.c index 325f43ddd..ae1d097fa 100644 --- a/css/ruleset.c +++ b/css/ruleset.c @@ -31,7 +31,6 @@ #define _GNU_SOURCE /* for strndup */ #include <assert.h> -#include <ctype.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> diff --git a/desktop/browser.c b/desktop/browser.c index 741dba811..55e3f793e 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -26,7 +26,6 @@ */ #include <assert.h> -#include <ctype.h> #include <limits.h> #include <stdbool.h> #include <stdint.h> diff --git a/desktop/frames.c b/desktop/frames.c index e7c95e766..1d9e2c2fc 100644 --- a/desktop/frames.c +++ b/desktop/frames.c @@ -21,7 +21,6 @@ */ #include <assert.h> -#include <ctype.h> #include <limits.h> #include <stdbool.h> #include <stdint.h> diff --git a/desktop/netsurf.c b/desktop/netsurf.c index 1a2eb5f64..cc823d4e9 100644 --- a/desktop/netsurf.c +++ b/desktop/netsurf.c @@ -18,7 +18,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <locale.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> @@ -111,7 +110,6 @@ void netsurf_init(int argc, char** argv) lib_init(); url_init(); gui_init(argc, argv); - setlocale(LC_ALL, ""); fetch_init(); fetchcache_init(); gui_init2(argc, argv); diff --git a/render/box_construct.c b/render/box_construct.c index b05dcc019..9c001cb0d 100644 --- a/render/box_construct.c +++ b/render/box_construct.c @@ -43,6 +43,7 @@ #include "render/form.h" #include "render/html.h" #include "desktop/gui.h" +#include "utils/locale.h" //#define NDEBUG #include "utils/log.h" #include "utils/messages.h" @@ -1362,20 +1363,20 @@ void box_text_transform(char *s, unsigned int len, case CSS_TEXT_TRANSFORM_UPPERCASE: for (i = 0; i < len; ++i) if ((unsigned char) s[i] < 0x80) - s[i] = toupper(s[i]); + s[i] = ls_toupper(s[i]); break; case CSS_TEXT_TRANSFORM_LOWERCASE: for (i = 0; i < len; ++i) if ((unsigned char) s[i] < 0x80) - s[i] = tolower(s[i]); + s[i] = ls_tolower(s[i]); break; case CSS_TEXT_TRANSFORM_CAPITALIZE: if ((unsigned char) s[0] < 0x80) - s[0] = toupper(s[0]); + s[0] = ls_toupper(s[0]); for (i = 1; i < len; ++i) if ((unsigned char) s[i] < 0x80 && - isspace(s[i - 1])) - s[i] = toupper(s[i]); + ls_isspace(s[i - 1])) + s[i] = ls_toupper(s[i]); break; default: break; diff --git a/render/layout.c b/render/layout.c index e93c41a5d..7a8dbd53a 100644 --- a/render/layout.c +++ b/render/layout.c @@ -33,7 +33,6 @@ #define _GNU_SOURCE /* for strndup */ #include <assert.h> -#include <ctype.h> #include <limits.h> #include <stdbool.h> #include <stdio.h> diff --git a/riscos/401login.c b/riscos/401login.c index e65c0097b..cfc256ad8 100644 --- a/riscos/401login.c +++ b/riscos/401login.c @@ -17,7 +17,6 @@ */ #include <assert.h> -#include <ctype.h> #include <stdbool.h> #include <string.h> #include "oslib/wimp.h" diff --git a/riscos/download.c b/riscos/download.c index 4affe26dd..9d0625f4a 100644 --- a/riscos/download.c +++ b/riscos/download.c @@ -29,7 +29,6 @@ */ #include <assert.h> -#include <ctype.h> #include <string.h> #include <sys/time.h> #include <time.h> diff --git a/riscos/plugin.c b/riscos/plugin.c index c08397de4..dd10b3a2d 100644 --- a/riscos/plugin.c +++ b/riscos/plugin.c @@ -38,7 +38,6 @@ */ #include <assert.h> -#include <ctype.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> diff --git a/riscos/wimp.c b/riscos/wimp.c index cc22c1091..9463df56b 100644 --- a/riscos/wimp.c +++ b/riscos/wimp.c @@ -21,7 +21,7 @@ */ #include <assert.h> -#include <ctype.h> +#include <locale.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> @@ -51,7 +51,7 @@ static wimp_w furniture_window = NULL; unsigned char last_sprite_found[16]; /** - * Gets the horzontal scrollbar height + * Gets the horizontal scrollbar height * * \param w the window to read (or NULL to read a cached value) */ @@ -398,7 +398,13 @@ void ro_gui_set_icon_string_le(wimp_w w, wimp_i i, const char *text) { */ void ro_gui_set_icon_integer(wimp_w w, wimp_i i, int value) { char buffer[20]; // Big enough for 64-bit int + + setlocale(LC_NUMERIC, ""); + sprintf(buffer, "%d", value); + + setlocale(LC_NUMERIC, "C"); + ro_gui_set_icon_string(w, i, buffer); } @@ -413,6 +419,8 @@ void ro_gui_set_icon_integer(wimp_w w, wimp_i i, int value) { void ro_gui_set_icon_decimal(wimp_w w, wimp_i i, int value, int decimal_places) { char buffer[20]; // Big enough for 64-bit int + setlocale(LC_NUMERIC, ""); + switch (decimal_places) { case 0: sprintf(buffer, "%d", value); @@ -427,6 +435,9 @@ void ro_gui_set_icon_decimal(wimp_w w, wimp_i i, int value, int decimal_places) assert(!"Unsupported decimal format"); break; } + + setlocale(LC_NUMERIC, "C"); + ro_gui_set_icon_string(w, i, buffer); } @@ -445,7 +456,12 @@ int ro_gui_get_icon_decimal(wimp_w w, wimp_i i, int decimal_places) { for (; decimal_places > 0; decimal_places--) multiple *= 10; + setlocale(LC_NUMERIC, ""); + value = atof(ro_gui_get_icon_string(w, i)) * multiple; + + setlocale(LC_NUMERIC, "C"); + return (int)value; } diff --git a/utils/locale.c b/utils/locale.c new file mode 100644 index 000000000..88509e4d5 --- /dev/null +++ b/utils/locale.c @@ -0,0 +1,53 @@ +/* + * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org> + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf 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; version 2 of the License. + * + * NetSurf 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, see <http://www.gnu.org/licenses/>. + */ + +/** \file + * Locale-specific variants of various routines (implementation) + */ + +#include <ctype.h> +#include <locale.h> + +#include "utils/locale.h" + +/* <ctype.h> functions */ +#define MAKELSCTYPE(x) int ls_##x(int c) \ +{ \ + int ret; \ + setlocale(LC_ALL, ""); \ + ret = x(c); \ + setlocale(LC_ALL, "C"); \ + return ret; \ +} + +MAKELSCTYPE(isalpha) +MAKELSCTYPE(isalnum) +MAKELSCTYPE(iscntrl) +MAKELSCTYPE(isdigit) +MAKELSCTYPE(isgraph) +MAKELSCTYPE(islower) +MAKELSCTYPE(isprint) +MAKELSCTYPE(ispunct) +MAKELSCTYPE(isspace) +MAKELSCTYPE(isupper) +MAKELSCTYPE(isxdigit) +MAKELSCTYPE(tolower) +MAKELSCTYPE(toupper) + +#undef MAKELSCTYPE + diff --git a/utils/locale.h b/utils/locale.h new file mode 100644 index 000000000..ebe9a9063 --- /dev/null +++ b/utils/locale.h @@ -0,0 +1,42 @@ +/* + * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org> + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf 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; version 2 of the License. + * + * NetSurf 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, see <http://www.gnu.org/licenses/>. + */ + +/** \file + * Locale-specific variants of various routines (interface) + */ + +#ifndef _NETSURF_UTILS_LOCALE_H_ +#define _NETSURF_UTILS_LOCALE_H_ + +/* <ctype.h> functions */ +int ls_isalpha(int c); +int ls_isalnum(int c); +int ls_iscntrl(int c); +int ls_isdigit(int c); +int ls_isgraph(int c); +int ls_islower(int c); +int ls_isprint(int c); +int ls_ispunct(int c); +int ls_isspace(int c); +int ls_isupper(int c); +int ls_isxdigit(int c); +int ls_tolower(int c); +int ls_toupper(int c); + +#endif + |