// -*- mode: cpp; mode: fold -*- // Description /*{{{*/ // $Id: indexfile.cc,v 1.2.2.1 2003/12/24 23:09:17 mdz Exp $ /* ###################################################################### Index File - Abstraction for an index of archive/souce file. ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ #include <apt-pkg/configuration.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/error.h> #include <clocale> #include <cstring> /*}}}*/ // Global list of Item supported static pkgIndexFile::Type *ItmList[10]; pkgIndexFile::Type **pkgIndexFile::Type::GlobalList = ItmList; unsigned long pkgIndexFile::Type::GlobalListLen = 0; // Type::Type - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ pkgIndexFile::Type::Type() { ItmList[GlobalListLen] = this; GlobalListLen++; } /*}}}*/ // Type::GetType - Locate the type by name /*{{{*/ // --------------------------------------------------------------------- /* */ pkgIndexFile::Type *pkgIndexFile::Type::GetType(const char *Type) { for (unsigned I = 0; I != GlobalListLen; I++) if (strcmp(GlobalList[I]->Label,Type) == 0) return GlobalList[I]; return 0; } /*}}}*/ // IndexFile::ArchiveInfo - Stub /*{{{*/ // --------------------------------------------------------------------- /* */ string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator Ver) const { return string(); } /*}}}*/ // IndexFile::FindInCache - Stub /*{{{*/ // --------------------------------------------------------------------- /* */ pkgCache::PkgFileIterator pkgIndexFile::FindInCache(pkgCache &Cache) const { return pkgCache::PkgFileIterator(Cache); } /*}}}*/ // IndexFile::SourceIndex - Stub /*{{{*/ // --------------------------------------------------------------------- /* */ string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record, pkgSrcRecords::File const &File) const { return string(); } /*}}}*/ // IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/ // --------------------------------------------------------------------- /* */ bool pkgIndexFile::TranslationsAvailable() { const string Translation = _config->Find("APT::Acquire::Translation"); if (Translation.compare("none") != 0) return CheckLanguageCode(LanguageCode().c_str()); else return false; } /*}}}*/ // IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/ // --------------------------------------------------------------------- /* */ /* common cases: de_DE, de_DE@euro, de_DE.UTF-8, de_DE.UTF-8@euro, de_DE.ISO8859-1, tig_ER more in /etc/gdm/locale.conf */ bool pkgIndexFile::CheckLanguageCode(const char *Lang) { if (strlen(Lang) == 2 || strlen(Lang) == 3 || (strlen(Lang) > 3 && Lang[3] == '_') || (strlen(Lang) == 5 && Lang[2] == '_')) return true; if (strcmp(Lang,"C") != 0) _error->Warning("Wrong language code %s", Lang); return false; } /*}}}*/ // IndexFile::LanguageCode - Return the Language Code /*{{{*/ // --------------------------------------------------------------------- /* return the language code */ string pkgIndexFile::LanguageCode() { const string Translation = _config->Find("APT::Acquire::Translation"); if (Translation.compare("environment") == 0) { string lang = std::setlocale(LC_MESSAGES,NULL); // we have a mapping of the language codes that contains all the language // codes that need the country code as well // (like pt_BR, pt_PT, sv_SE, zh_*, en_*) const char *need_full_langcode[] = { "en_", "pt_", "sv_", "zh_", NULL }; for(const char **s = need_full_langcode;*s != NULL; s++) if(lang.find(*s) == 0) return lang.substr(0,5); if(lang.find("_") != lang.npos) return lang.substr(0, lang.find("_")); else return lang; } else return Translation; } /*}}}*/