Here is an attempt at a Windows encoding manager.  All the non-unix
platforms have stub encoding managers that always return ISO-8859-1
as the native encoding.

My code is an adaption of the unix code so you might want to compare
them.

Andrew Dunbar.

-- 
http://linguaphile.sourceforge.net
--- src/af/xap/win/xap_Win32EncodingManager.orig.cpp    Sat Apr 21 01:24:10 2001
+++ src/af/xap/win/xap_Win32EncodingManager.cpp Tue May 22 19:54:50 2001
@@ -1,11 +1,106 @@
-#include "xap_EncodingManager.h"
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include "ut_assert.h"
+#include "ut_debugmsg.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()
 {
        if (_instance == 0)
        {
-               _instance = new XAP_EncodingManager();
+               UT_DEBUGMSG(("Building XAP_EncodingManager\n"));
+               _instance = new XAP_Win32EncodingManager();
                _instance->initialize();
+               UT_DEBUGMSG(("XAP_EncodingManager built\n"));
        }
+
        return _instance;
 }
+
+/************************************************************/
+
+XAP_Win32EncodingManager::XAP_Win32EncodingManager() 
+{
+}
+
+XAP_Win32EncodingManager::~XAP_Win32EncodingManager() {}
+
+static const char* NativeEncodingName, *LanguageISOName, *LanguageISOTerritory;
+
+const char* XAP_Win32EncodingManager::getNativeEncodingName() const
+{     return NativeEncodingName; };
+
+const char* XAP_Win32EncodingManager::getLanguageISOName() const
+{      return LanguageISOName; };
+
+const char* XAP_Win32EncodingManager::getLanguageISOTerritory() const
+{      return LanguageISOTerritory; };
+
+
+void  XAP_Win32EncodingManager::initialize()
+{
+       char szLocaleInfo[64];
+       static char szLanguage[64];
+       static char szTerritory[64];
+       bool bNorwaySpecialCase = false;
+
+       NativeEncodingName = "ISO-8859-1";
+       LanguageISOName = "en";
+       LanguageISOTerritory = NULL;
+
+       // Encoding 
+       if 
+(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IDEFAULTANSICODEPAGE,szLocaleInfo,sizeof(szLocaleInfo)/sizeof(szLocaleInfo[0])))
+       {
+               // Windows Unicode locale?
+               if (!strcmp(szLocaleInfo,"0"))
+               {
+                       NativeEncodingName = "UCS-2-INTERNAL";  // As in 
+ev_Win32Keyboard.cpp
+                       m_bIsUnicodeLocale = true;
+               }
+               else
+               {
+                       NativeEncodingName = charsetFromCodepage(atoi(szLocaleInfo));
+                       m_bIsUnicodeLocale = false;
+               }
+       }
+
+       // Language
+       if 
+(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,szLanguage,sizeof(szLanguage)/sizeof(szLanguage[0])))
+       {
+               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])))
+       {
+               // 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';
+               LanguageISOTerritory = szTerritory;
+       }
+
+       XAP_EncodingManager::initialize();
+       describe();
+};
+
+

xap_Win32EncodingManager.h

Reply via email to