diff options
| -rw-r--r-- | unicode/book.xml | 17 | ||||
| -rw-r--r-- | unicode/courier-unicode.h | 10 | ||||
| -rw-r--r-- | unicode/unicode.c | 57 | ||||
| -rw-r--r-- | unicode/unicodecpp.C | 15 |
4 files changed, 26 insertions, 73 deletions
diff --git a/unicode/book.xml b/unicode/book.xml index 3c5d758..b9a7000 100644 --- a/unicode/book.xml +++ b/unicode/book.xml @@ -2380,11 +2380,6 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> </funcprototype> <funcprototype> - <funcdef>void <function>unicode::tolower</function></funcdef> - <paramdef>std::vector<unicode_char> &<parameter>u</parameter></paramdef> - </funcprototype> - - <funcprototype> <funcdef>std::string <function>unicode::toupper</function></funcdef> <paramdef>const std::string &<parameter>string</parameter></paramdef> </funcprototype> @@ -2399,11 +2394,6 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> <funcdef>std::vector<unicode_char> <function>unicode::toupper</function></funcdef> <paramdef>const std::vector<unicode_char> &<parameter>u</parameter></paramdef> </funcprototype> - - <funcprototype> - <funcdef>void <function>unicode::toupper</function></funcdef> - <paramdef>std::vector<unicode_char> &<parameter>u</parameter></paramdef> - </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -2428,11 +2418,10 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> </para> <para> - An alternative is to pass a - <classname>std::vector<unicode_char> &</classname> - that gets converted in-place, or a + Passing a <classname>const std::vector<unicode_char> &</classname> - that gets converted, and returned. + directly also converts it accordingly, returning the converted + unicode string. </para> </refsect1> diff --git a/unicode/courier-unicode.h b/unicode/courier-unicode.h index 3d3715c..3315f75 100644 --- a/unicode/courier-unicode.h +++ b/unicode/courier-unicode.h @@ -37,7 +37,7 @@ extern const char *unicode_default_chset(); ** The current locale character set. */ -extern const char *unicode_locale_charset(); +extern const char *unicode_locale_chset(); /* Unicode upper/lower/title case conversion functions */ @@ -1848,18 +1848,10 @@ std::string toupper(const std::string &string, //! Convert unicode to lowercase -void tolower(std::vector<unicode_char> &u); - -//! Convert unicode to lowercase - std::vector<unicode_char> tolower(const std::vector<unicode_char> &u); //! Convert unicode to uppercase -void toupper(std::vector<unicode_char> &u); - -//! Convert unicode to uppercase - std::vector<unicode_char> toupper(const std::vector<unicode_char> &u); #if 0 diff --git a/unicode/unicode.c b/unicode/unicode.c index 551854d..ab138f6 100644 --- a/unicode/unicode.c +++ b/unicode/unicode.c @@ -24,13 +24,27 @@ static char default_chset_buf[32]; -const char *unicode_locale_charset() +const char *unicode_locale_chset() { + const char *c; + #if USE_LIBCHARSET - return locale_charset(); + c=locale_charset(); #else - return nl_langinfo(CODESET); + c=nl_langinfo(CODESET); #endif + + if (!c) + c="US-ASCII"; + + if (c && + + /* Map GNU libc iconv oddity to us-ascii */ + + (strcmp(c, "ANSI_X3.4") == 0 || + strncmp(c, "ANSI_X3.4-", 10) == 0)) + c="US-ASCII"; + return c; } static void init_default_chset() @@ -49,45 +63,12 @@ static void init_default_chset() { old_locale=setlocale(LC_ALL, ""); locale_cpy=old_locale ? strdup(old_locale):NULL; - chset=unicode_locale_charset(); + chset=unicode_locale_chset(); } memset(buf, 0, sizeof(buf)); - if (chset && - - /* Map GNU libc iconv oddity to us-ascii */ - - (strcmp(chset, "ANSI_X3.4") == 0 || - strncmp(chset, "ANSI_X3.4-", 10) == 0)) - chset="US-ASCII"; - - if (chset) - { - strncat(buf, chset, sizeof(buf)-1); - } - else - { - const char *p=getenv("LANG"); - - /* LANG is xx_yy.CHARSET@modifier */ - - if (p && *p && (p=strchr(p, '.')) != NULL) - { - const char *q=strchr(++p, '@'); - - if (!q) - q=p+strlen(p); - - if (q-p >= sizeof(buf)-1) - q=p+sizeof(buf)-1; - - memcpy(buf, p, q-p); - buf[q-p]=0; - } - else - strcpy(buf, "US-ASCII"); - } + strncat(buf, chset, sizeof(buf)-1); memcpy(default_chset_buf, buf, sizeof(buf)); diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C index 214eb5d..48ea759 100644 --- a/unicode/unicodecpp.C +++ b/unicode/unicodecpp.C @@ -529,15 +529,10 @@ std::vector<unicode_char> unicode::tolower(const std::vector<unicode_char> &u) { std::vector<unicode_char> copy=u; - tolower(copy); + std::transform(copy.begin(), copy.end(), copy.begin(), unicode_lc); return copy; } -void unicode::tolower(std::vector<unicode_char> &uc) -{ - std::transform(uc.begin(), uc.end(), uc.begin(), unicode_lc); -} - std::string unicode::toupper(const std::string &string) { return toupper(string, unicode_default_chset()); @@ -559,11 +554,7 @@ std::vector<unicode_char> unicode::toupper(const std::vector<unicode_char> &u) { std::vector<unicode_char> copy=u; - toupper(copy); - return copy; -} + std::transform(copy.begin(), copy.end(), copy.begin(), unicode_uc); -void unicode::toupper(std::vector<unicode_char> &uc) -{ - std::transform(uc.begin(), uc.end(), uc.begin(), unicode_uc); + return copy; } |
