X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1678ad780265f08fc8b84d180c04ae3a9900b1bb..b6a158b04e7784dc30ad8fc043eb94ae71c19e4f:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 9750b9d809..6cb46f1be0 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -46,8 +46,8 @@ // ---------------------------------------------------------------------------- // magic number identifying the .mo format file -const uint32 MSGCATALOG_MAGIC = 0x950412de; -const uint32 MSGCATALOG_MAGIC_SW = 0xde120495; +const size_t32 MSGCATALOG_MAGIC = 0x950412de; +const size_t32 MSGCATALOG_MAGIC_SW = 0xde120495; // extension of ".mo" files #define MSGCATALOG_EXTENSION ".mo" @@ -104,40 +104,40 @@ private: // an entry in the string table struct wxMsgTableEntry { - uint32 nLen; // length of the string - uint32 ofsString; // pointer to the string + size_t32 nLen; // length of the string + size_t32 ofsString; // pointer to the string }; // header of a .mo file struct wxMsgCatalogHeader { - uint32 magic, // offset +00: magic id + size_t32 magic, // offset +00: magic id revision, // +04: revision numStrings; // +08: number of strings in the file - uint32 ofsOrigTable, // +0C: start of original string table + size_t32 ofsOrigTable, // +0C: start of original string table ofsTransTable; // +10: start of translated string table - uint32 nHashSize, // +14: hash table size + size_t32 nHashSize, // +14: hash table size ofsHashTable; // +18: offset of hash table start }; // all data is stored here, NULL if no data loaded - uint8 *m_pData; + size_t8 *m_pData; // data description - uint32 m_numStrings, // number of strings in this domain + size_t32 m_numStrings, // number of strings in this domain m_nHashSize; // number of entries in hash table - uint32 *m_pHashTable; // pointer to hash table + size_t32 *m_pHashTable; // pointer to hash table wxMsgTableEntry *m_pOrigTable, // pointer to original strings *m_pTransTable; // translated - const char *StringAtOfs(wxMsgTableEntry *pTable, uint32 index) const + const char *StringAtOfs(wxMsgTableEntry *pTable, size_t32 index) const { return (const char *)(m_pData + Swap(pTable[index].ofsString)); } // utility functions // calculate the hash value of given string - static inline uint32 GetHash(const char *sz); + static inline size_t32 GetHash(const char *sz); // big<->little endian - inline uint32 Swap(uint32 ui) const; + inline size_t32 Swap(size_t32 ui) const; // internal state bool HasHashTable() const // true if hash table is present @@ -158,16 +158,16 @@ private: // calculate hash value using the so called hashpjw function by P.J. Weinberger // [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools] -uint32 wxMsgCatalog::GetHash(const char *sz) +size_t32 wxMsgCatalog::GetHash(const char *sz) { - #define HASHWORDBITS 32 // the length of uint32 + #define HASHWORDBITS 32 // the length of size_t32 - uint32 hval = 0; - uint32 g; + size_t32 hval = 0; + size_t32 g; while ( *sz != '\0' ) { hval <<= 4; - hval += (uint32)*sz++; - g = hval & ((uint32)0xf << (HASHWORDBITS - 4)); + hval += (size_t32)*sz++; + g = hval & ((size_t32)0xf << (HASHWORDBITS - 4)); if ( g != 0 ) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; @@ -178,7 +178,7 @@ uint32 wxMsgCatalog::GetHash(const char *sz) } // swap the 2 halves of 32 bit integer if needed -uint32 wxMsgCatalog::Swap(uint32 ui) const +size_t32 wxMsgCatalog::Swap(size_t32 ui) const { return m_bSwapped ? (ui << 24) | ((ui & 0xff00) << 8) | ((ui >> 8) & 0xff00) | (ui >> 24) @@ -193,8 +193,8 @@ wxMsgCatalog::wxMsgCatalog() wxMsgCatalog::~wxMsgCatalog() { - DELETEA(m_pData); - DELETEA(m_pszName); + wxDELETEA(m_pData); + wxDELETEA(m_pszName); } class NoTransErr @@ -243,17 +243,17 @@ bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName) // (we're using an object because we have several return paths) NoTransErr noTransErr; - wxLogVerbose("looking for catalog '%s' in path '%s'.", + wxLogVerbose(_("looking for catalog '%s' in path '%s'."), szName, strPath.c_str()); wxString strFullName; if ( !wxFindFileInPath(&strFullName, strPath, strFile) ) { - wxLogWarning("catalog file for domain '%s' not found.", szName); + wxLogWarning(_("catalog file for domain '%s' not found."), szName); return FALSE; } // open file - wxLogVerbose("using catalog '%s' from '%s'.", + wxLogVerbose(_("using catalog '%s' from '%s'."), szName, strFullName.c_str()); wxFile fileMsg(strFullName); @@ -266,10 +266,9 @@ bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName) return FALSE; // read the whole file in memory - m_pData = new uint8[nSize]; + m_pData = new size_t8[nSize]; if ( fileMsg.Read(m_pData, nSize) != nSize ) { - DELETEA(m_pData); - m_pData = NULL; + wxDELETEA(m_pData); return FALSE; } @@ -289,10 +288,9 @@ bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName) if ( !bValid ) { // it's either too short or has incorrect magic number - wxLogWarning("'%s' is not a valid message catalog.", strFullName.c_str()); + wxLogWarning(_("'%s' is not a valid message catalog."), strFullName.c_str()); - DELETEA(m_pData); - m_pData = NULL; + wxDELETEA(m_pData); return FALSE; } @@ -304,7 +302,7 @@ bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName) Swap(pHeader->ofsTransTable)); m_nHashSize = Swap(pHeader->nHashSize); - m_pHashTable = (uint32 *)(m_pData + Swap(pHeader->ofsHashTable)); + m_pHashTable = (size_t32 *)(m_pData + Swap(pHeader->ofsHashTable)); m_pszName = new char[strlen(szName) + 1]; strcpy(m_pszName, szName); @@ -320,13 +318,13 @@ const char *wxMsgCatalog::GetString(const char *szOrig) const return NULL; if ( HasHashTable() ) { // use hash table for lookup if possible - uint32 nHashVal = GetHash(szOrig); - uint32 nIndex = nHashVal % m_nHashSize; + size_t32 nHashVal = GetHash(szOrig); + size_t32 nIndex = nHashVal % m_nHashSize; - uint32 nIncr = 1 + (nHashVal % (m_nHashSize - 2)); + size_t32 nIncr = 1 + (nHashVal % (m_nHashSize - 2)); while ( TRUE ) { - uint32 nStr = Swap(m_pHashTable[nIndex]); + size_t32 nStr = Swap(m_pHashTable[nIndex]); if ( nStr == 0 ) return NULL; @@ -340,7 +338,7 @@ const char *wxMsgCatalog::GetString(const char *szOrig) const } } else { // no hash table: use default binary search - uint32 bottom = 0, + size_t32 bottom = 0, top = m_numStrings, current; while ( bottom < top ) { @@ -363,19 +361,27 @@ const char *wxMsgCatalog::GetString(const char *szOrig) const // wxLocale // ---------------------------------------------------------------------------- -// NB: ctor has (desired) side effect of changing current locale -wxLocale::wxLocale(const char *szName, - const char *szShort, - const char *szLocale, - bool bLoadDefault) - : m_strLocale(szName), m_strShort(szShort) +wxLocale::wxLocale() { + m_pszOldLocale = NULL; + m_pMsgCat = NULL; +} + +// NB: this function has (desired) side effect of changing current locale +bool wxLocale::Init(const char *szName, + const char *szShort, + const char *szLocale, + bool bLoadDefault) +{ + m_strLocale = szName; + m_strShort = szShort; + // change current locale (default: same as long name) if ( szLocale == NULL ) szLocale = szName; m_pszOldLocale = setlocale(LC_ALL, szLocale); if ( m_pszOldLocale == NULL ) - wxLogError("locale '%s' can not be set.", szLocale); + wxLogError(_("locale '%s' can not be set."), szLocale); // the short name will be used to look for catalog files as well, // so we need something here @@ -390,8 +396,11 @@ wxLocale::wxLocale(const char *szName, // load the default catalog with wxWindows standard messages m_pMsgCat = NULL; + bool bOk = TRUE; if ( bLoadDefault ) - AddCatalog("wxstd"); + bOk = AddCatalog("wxstd"); + + return bOk; } // clean up @@ -442,10 +451,10 @@ const char *wxLocale::GetString(const char *szOrigString, wxSuppressTransErrors(); if ( szDomain != NULL ) - wxLogWarning("string '%s' not found in domain '%s' for locale '%s'.", + wxLogWarning(_("string '%s' not found in domain '%s' for locale '%s'."), szOrigString, szDomain, m_strLocale.c_str()); else - wxLogWarning("string '%s' not found in locale '%s'.", + wxLogWarning(_("string '%s' not found in locale '%s'."), szOrigString, m_strLocale.c_str()); }