Patch: Win32 locale improvements


Subject: Patch: Win32 locale improvements
From: Andrew Dunbar (hippietrail@yahoo.com)
Date: Sat May 26 2001 - 01:13:12 CDT


This is a followup to my locale questions from the other day.
Please let me know if I've taken the wrong approach.

Andrew.

-- 
http://linguaphile.sourceforge.net

? src/af/util/win/ut_Win32Locale.h ? src/af/util/win/ut_Win32Locale.cpp Index: src/af/util/Makefile =================================================================== RCS file: /cvsroot/abi/src/af/util/Makefile,v retrieving revision 1.50 diff -u -r1.50 Makefile --- src/af/util/Makefile 2001/05/25 05:52:08 1.50 +++ src/af/util/Makefile 2001/05/26 05:54:40 @@ -50,6 +50,7 @@ $(OBJDIR)/ut_$(ABI_FE)OS.$(OBJ_SUFFIX) \ $(OBJDIR)/ut_$(ABI_FE)String.$(OBJ_SUFFIX) \ $(OBJDIR)/ut_$(ABI_FE)Timer.$(OBJ_SUFFIX) \ + $(OBJDIR)/ut_$(ABI_FE)Locale.$(OBJ_SUFFIX) \ $(OBJDIR)/ut_iconv.$(OBJ_SUFFIX) \ $(OBJDIR)/ut_Xpm2Bmp.$(OBJ_SUFFIX) endif Index: src/af/util/win/Makefile =================================================================== RCS file: /cvsroot/abi/src/af/util/win/Makefile,v retrieving revision 1.13 diff -u -r1.13 Makefile --- src/af/util/win/Makefile 2000/02/14 11:24:49 1.13 +++ src/af/util/win/Makefile 2001/05/26 05:54:41 @@ -27,6 +27,7 @@ ut_Win32OS.cpp \ ut_Win32String.cpp \ ut_Win32Timer.cpp \ + ut_Win32Locale.cpp \ ut_Xpm2Bmp.cpp INCLUDES= -I$(ABI_XX_ROOT)/../libiconv/include Index: src/af/xap/win/xap_Win32EncodingManager.cpp =================================================================== RCS file: /cvsroot/abi/src/af/xap/win/xap_Win32EncodingManager.cpp,v retrieving revision 1.3 diff -u -r1.3 xap_Win32EncodingManager.cpp --- src/af/xap/win/xap_Win32EncodingManager.cpp 2001/05/25 18:12:44 1.3 +++ src/af/xap/win/xap_Win32EncodingManager.cpp 2001/05/26 05:54:44 @@ -2,12 +2,9 @@ #include <windows.h> #include "ut_assert.h" #include "ut_debugmsg.h" +#include "ut_Win32Locale.h" #include "xap_Win32EncodingManager.h" -// TODO This data is defined in ap_Win32Prefs.cpp - -extern char s_ISO3166_2_and_3[1190]; - /************************************************************/ XAP_EncodingManager *XAP_EncodingManager::get_instance() @@ -46,11 +43,12 @@ void XAP_Win32EncodingManager::initialize() { char szLocaleInfo[64]; + static char szCodepage[64]; static char szLanguage[64]; static char szTerritory[64]; bool bNorwaySpecialCase = false; - NativeEncodingName = "ISO-8859-1"; + NativeEncodingName = "CP1252"; LanguageISOName = "en"; LanguageISOTerritory = NULL; @@ -60,42 +58,32 @@ // Windows Unicode locale? if (!strcmp(szLocaleInfo,"0")) { - NativeEncodingName = "UCS-2-INTERNAL"; // As in ev_Win32Keyboard.cpp + // As in ev_Win32Keyboard.cpp + // TODO Would UCS-2-LE / UCS-2-BE be preferable? + // TODO Does NT use UCS-2-BE internally on non-Intel CPUs? + NativeEncodingName = "UCS-2-INTERNAL"; m_bIsUnicodeLocale = true; } else { - NativeEncodingName = charsetFromCodepage(atoi(szLocaleInfo)); + szCodepage[0] = 'C'; + szCodepage[1] = 'P'; + strcpy(szCodepage+2,szLocaleInfo); + NativeEncodingName = szCodepage; m_bIsUnicodeLocale = false; } } - // Language - if (GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,szLanguage,sizeof(szLanguage)/sizeof(szLanguage[0]))) + if (UT_getISO639Language(szLanguage)) { - if (!strcmp(szLanguage,"Non")) // Special case: Nynorsk in Norway - bNorwaySpecialCase = true; // As in ap_Win32Prefs.cpp - - szLanguage[0] = tolower(szLanguage[0]); - szLanguage[1] = tolower(szLanguage[1]); - szLanguage[2] = '\0'; LanguageISOName = szLanguage; } - - // Territory - if (bNorwaySpecialCase == true) // Special case: Nynorsk in Norway - LanguageISOTerritory = "NYNORSK"; // As in ap_Win32Prefs.cpp - else if (GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVCTRYNAME,szLocaleInfo,sizeof(szLocaleInfo)/sizeof(szLocaleInfo[0]))) + else { - // TODO This code is copied from ap_Win32Prefs.cpp - char *psz; - - for (psz = s_ISO3166_2_and_3; *psz != '\0'; psz += 5 ) - if (!strncmp(&psz[2],szLocaleInfo,3)) - break; - - strncpy(szTerritory, psz, 2 ); - szTerritory[2] = '\0'; + UT_ASSERT(UT_SHOULD_NOT_HAPPEN); + } + if (UT_getISO3166Country(szTerritory)) + { LanguageISOTerritory = szTerritory; } Index: src/wp/ap/win/ap_Win32Prefs.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/ap/win/ap_Win32Prefs.cpp,v retrieving revision 1.10 diff -u -r1.10 ap_Win32Prefs.cpp --- src/wp/ap/win/ap_Win32Prefs.cpp 2001/02/06 22:54:55 1.10 +++ src/wp/ap/win/ap_Win32Prefs.cpp 2001/05/26 05:55:34 @@ -26,31 +26,10 @@ #include "ut_units.h" #include "ut_debugmsg.h" +#include "ut_Win32Locale.h" #include "ap_Win32Prefs.h" -// Codes from ISO 3166 -// Very compressed form. Two char code folowed by tree char code. - -char s_ISO3166_2_and_3[] = -"AFAFGALALBDZDZAASASMADANDAOAGOAIAIAAQATAAGATGARARGAMARMAWABWAUAUSATAUT" -"AZAZEBSBHSBHBHRBDBGDBBBRBBYBLRBEBELBZBLZBJBENBMBMUBTBTNBOBOLBABIHBWBWA" -"BVBVTBRBRAIOIOTBNBRNBGBGRBFBFABIBDIKHKHMCMCMRCACANCVCPVKYCYMCFCAFTDTCD" -"CLCHLCNCHNCXCXRCCCCKCOCOLKMCOMCGCOGCKCOKCRCRICICIVHRHRVCUCUBCYCYPCZCZE" -"DKDNKDJDJIDMDMADODOMTPTMPECECUEGEGYSVSLVGQGNQERERIEEESTETETHFKFLKFOFRO" -"FJFJIFIFINFRFRAFXFXXGFGUFPFPYFTFATFGAGABGMGMBGEGEODEDEUGHGHAGIGIBGRGRC" -"GLGRLGDGRDGPGLPGUGUMGTGTMGNGINGWGNBGYGUYHTHTIHMHMDHNHNDHKHKGHUHUNISISL" -"ININDIDIDNIRIRNIQIRQIEIRLILISRITITAJMJAMJPJPNJOJORKZKAZKEKENKIKIRKPPRK" -"KRKORKWKWTKGKGZLALAOLVLVALBLBNLSLSOLRLBRLYLBYLILIELTLTULULUXMOMACMKMKD" -"MGMDGMWMWIMYMYSMVMDVMLMLIMTMLTMHMHLMQMTQMRMRTMUMUSYTMYTMXMEXFMFSMMDMDA" -"MCMCOMNMNGMSMSRMAMARMZMOZMMMMRNANAMNRNRUNPNPLNLNLDANANTNCNCLNZNZLNINIC" -"NENERNGNGANUNIUNFNFKMPMNPNONOROMOMNPKPAKPWPLWPAPANPGPNGPYPRYPEPERPHPHL" -"PNPCNPLPOLPTPRTPRPRIQAQATREREUROROMRURUSRWRWAKNKNALCLCAVCVCTWSWSMSMSMR" -"STSTPSASAUSNSENSCSYCSLSLESGSGPSKSVKSISVNSBSLBSOSOMZAZAFESESPLKLKASHSHN" -"PMSPMSDSDNSRSURSJSJMSZSWZSESWECHCHESYSYRTWTWNTJTJKTZTZATHTHATGTGOTKTKL" -"TOTONTTTTOTNTUNTRTURTMTKMTCTCATVTUVUGUGAUAUKRAEAREGBGBRUSUSAUMUMIUYURY" -"UZUZBVUVUTVAVATVEVENVNVNMVGVGBVIVIRWFWLFEHESHYEYEMYUYUGZRZARZMZMBZWZWE"; - /*****************************************************************/ AP_Win32Prefs::AP_Win32Prefs(XAP_App * pApp) @@ -73,41 +52,20 @@ m_builtinScheme->setValue( AP_PREF_KEY_RulerUnits, UT_dimensionName( szLocaleInfo[0] == '0' ? DIM_CM : DIM_IN ) ); } - if( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, szLocaleInfo, sizeof( szLocaleInfo ) / sizeof( szLocaleInfo[0] ) ) ) + if (UT_getISO639Language(szLocaleInfo)) { - char szTmp[64]; - - if( !strcmp( szLocaleInfo, "Non" ) ) // Special case: Nynorsk in Norway - { - strcpy( szLocaleInfo, "no-NYNORSK" ); - } - else if( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME, szTmp, sizeof( szTmp ) / sizeof( szTmp[0] ) ) ) - { - char *psz; - - szLocaleInfo[0] = tolower( szLocaleInfo[0] ); - szLocaleInfo[1] = tolower( szLocaleInfo[1] ); - szLocaleInfo[2] = '-'; - - for( psz = s_ISO3166_2_and_3; *psz != '\0'; psz += 5 ) - if( !strncmp( &psz[2], szTmp, 3 ) ) - break; - - strncpy( &szLocaleInfo[3], psz, 2 ); - szLocaleInfo[5] = '\0'; - } - else - { - szLocaleInfo[0] = tolower( szLocaleInfo[0] ); - szLocaleInfo[1] = tolower( szLocaleInfo[1] ); - szLocaleInfo[2] = '\0'; - } + if (UT_getISO3166Country(&szLocaleInfo[3])) + szLocaleInfo[2] = '-'; UT_DEBUGMSG(("Prefs: Using LOCALE info from environment [%s]\n", szLocaleInfo)); m_builtinScheme->setValue( AP_PREF_KEY_MenuLabelSet, szLocaleInfo ); m_builtinScheme->setValue( AP_PREF_KEY_ToolbarLabelSet, szLocaleInfo ); m_builtinScheme->setValue( AP_PREF_KEY_StringSet, szLocaleInfo ); + } + else + { + UT_ASSERT(UT_SHOULD_NOT_HAPPEN); } return ret;



_________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com



This archive was generated by hypermail 2b25 : Sat May 26 2001 - 03:51:07 CDT