|
|
|
// -*- 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[] = { "cs_",
|
|
|
|
"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 if(lang.find(".") != lang.npos)
|
|
|
|
return lang.substr(0, lang.find("."));
|
|
|
|
else
|
|
|
|
return lang;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return Translation;
|
|
|
|
}
|
|
|
|
/*}}}*/
|