serializer.py

Go to the documentation of this file.
00001 from silme.core.entity import EntityList, Entity
00002 from silme.core.object import Comment
00003 from structure import *
00004 from parser import IniParser as Parser
00005 import re
00006 
00007 class IniSerializer():
00008     @classmethod
00009     def serialize(cls, l10nobject, fallback=None):
00010         if not fallback:
00011             fallback = l10nobject.fallback
00012         string = u''.join([cls.dump_element(element, fallback) for element in l10nobject])
00013         return string
00014 
00015     @classmethod
00016     def dump_element(cls, element, fallback=None):
00017         if isinstance(element, Entity):
00018             return cls.dump_entity(element, fallback=fallback)
00019         elif isinstance(element, Comment):
00020             return cls.dump_comment(element)
00021         else:
00022             return element
00023 
00024     @classmethod
00025     def dump_entity (cls, entity, fallback=None):
00026         if entity.params.has_key('source') and entity.params['source']['type']=='properties':
00027             match = Parser.patterns['entity'].match(entity.params['source']['string'])
00028             string = entity.params['source']['string'][0:match.start(1)]
00029             string += entity.id
00030             string += entity.params['source']['string'][match.end(1):match.start(2)]
00031             string += entity.get_value(fallback)
00032             string += entity.params['source']['string'][match.end(2):]
00033         else:
00034             string = entity.id+u' = '+entity.get_value(fallback)
00035         return string
00036 
00037     @classmethod
00038     def dump_entitylist(cls, elist, fallback=None):
00039         if not fallback:
00040             fallback = elist.fallback
00041         string = u''.join([cls.dump_entity(entity, fallback)+'\n' for entity in elist.get_entities()])
00042         return string
00043 
00044     @classmethod
00045     def dump_comment (cls, comment):
00046         string = u''
00047         for element in comment:
00048             string += cls.dump_element(element)
00049         if string:
00050             pattern = re.compile('\n')
00051             string = pattern.sub('\n#', string)
00052             string = '#' + string
00053             if string.endswith('#'):
00054                 string = string[:-1]
00055         return string

Generated on Tue May 12 17:37:27 2009 for silme by  doxygen 1.5.8