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 PropertiesParser as Parser
00005 import re
00006
00007 class PropertiesSerializer():
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