void TextCodecGtk::registerEncodingNames(EncodingNameRegistrar registrar, bool extended) { const void* const* encodingList; unsigned int listLength = 0; if (extended) { encodingList = m_iconvExtendedCodecList; listLength = sizeof(m_iconvExtendedCodecList)/sizeof(gpointer); } else { encodingList = m_iconvBaseCodecList; listLength = sizeof(m_iconvBaseCodecList)/sizeof(gpointer); } for (unsigned int i = 0; i < listLength; ++i) { codecAliasList *codecAliases = static_cast<codecAliasList*>(encodingList[i]); // Our convention is, the first entry in codecAliases is the canonical name, // see above in the list of declarations. // Probe GLib for this one first. If it's not available, we skip the whole group of aliases. int codecCount = 0; const char *canonicalName; canonicalName = (*codecAliases)[codecCount]; if (!isEncodingAvailable(canonicalName)) continue; registrar(canonicalName, canonicalName); const char *currentAlias; while ((currentAlias = (*codecAliases)[++codecCount])) { if (isEncodingAvailable(currentAlias)) registrar(currentAlias, canonicalName); } } }
static bool registerEncodingNameIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName) { if (isEncodingAvailable(canonicalName)) { registrar(canonicalName, canonicalName); return true; } return false; }
void TextCodecGtk::registerCodecs(TextCodecRegistrar registrar, bool extended) { const void* const* encodingList; unsigned int listLength = 0; if (extended) { encodingList = m_iconvExtendedCodecList; listLength = sizeof(m_iconvExtendedCodecList)/sizeof(gpointer); } else { encodingList = m_iconvBaseCodecList; listLength = sizeof(m_iconvBaseCodecList)/sizeof(gpointer); } for (unsigned int i = 0; i < listLength; ++i) { codecAliasList *codecAliases = static_cast<codecAliasList*>(encodingList[i]); // by convention, the first "alias" should be the canonical name, see the definition of the alias lists const gchar *codecName = (*codecAliases)[0]; if (isEncodingAvailable(codecName)) registrar(codecName, newTextCodecGtk, 0); } }
static void registerCodecIfAvailable(TextCodecRegistrar registrar, const char* codecName) { if (isEncodingAvailable(codecName)) registrar(codecName, newTextCodecGtk, 0); }
static void registerEncodingAliasIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName, const char* aliasName) { if (isEncodingAvailable(aliasName)) registrar(aliasName, canonicalName); }