#if 0
# -----------------------------------------------------------------------
# $Id: table.py 345 2004-05-28 12:26:24Z dischi $
# -----------------------------------------------------------------------
# $Log$
# Revision 1.9  2004/05/28 12:26:24  dischi
# Replace __str__ with unicode to avoid bad transformations. Everything
# inside mmpython should be handled as unicode object.
#
# Revision 1.8  2003/07/02 11:17:29  the_krow
# language is now part of the table key
#
# -----------------------------------------------------------------------
# MMPython - Media Metadata for Python
# Copyright (C) 2003 Thomas Schueppel, Dirk Meyer
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MER-
# CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# 
# -----------------------------------------------------------------------
#endif

from gettext import GNUTranslations
import os

LOCALEDIR = 'i18n'

class Table:
    def __init__(self, hashmap, name, language='en'):
        self.dict = hashmap
        self.name = name
        self.language = language
        self.translations = {}
        self.languages = []
        self.i18ndir = os.path.join(LOCALEDIR, name.lower())
        try:
            self.read_translations()
        except:
            pass
    
    def read_translations(self):
        for filename in [x for x in os.listdir(self.i18ndir) if x.endswith('.mo')]:
            lang = filename[:-3]
            filename = os.path.join(self.i18ndir, filename)
            f = open(filename, 'rb')
            self.translations[lang] = GNUTranslations(f)
            f.close()
        self.languages = self.translations.keys()
        
    def gettext(self, message, language = None):
        try:
            return self.translations[language].gettext(unicode(message))
        except KeyError:
            return unicode(message)
        
    def __setitem__(self,key,value):
        self.dict[key] = value
        
    def __getitem__(self,key):
        try:
            return self.dict[key]
        except KeyError:
            return None
         
    def getstr(self,key):
        s = self[key]
        try:
            if s and len(unicode(s)) < 100: 
                return s
            else:
                return "Not Displayable"
        except UnicodeDecodeError:
            return "Not Displayable"
         
    def has_key(self, key):
        return self.dict.has_key(key)    
    
    def getEntry(self, key, language = 'en'):
        pair = (self.gettext(key), unicode(self.dict[key]))
    
    def __unicode__(self):
        header = "\nTable %s (%s):" % (self.name, self.language)
        result = reduce( lambda a,b: self[b] and "%s\n        %s: %s" % \
                         (a, self.gettext(b,'en'), self.getstr(b)) or \
                         a, self.dict.keys(), header )
        return result

    def accept(self,mi):
        pass
