22 from atlas
import Object, Messages
24 import encoder, decoder
26 special_characters =
"+[]()@#$=\n\r" 36 def encode1stream(self, object):
37 return string.join(to_string_and_type(object),
"") +
"\n" 39 encode1 = encode1stream
42 def get_encoder(stream_flag=None):
46 return "[%s]\n" % map2packed(obj)
48 type_name2packed_code = {
"map": (
"[",
"]"),
55 def to_string_and_type(value):
56 type_str = get_atlas_type(value)
57 if type_str ==
"string":
60 if ch
in special_characters:
61 hex_str = hex(ord(ch))[2:]
62 if len(hex_str)<2: hex_str =
"0" + hex_str
63 str_value = str_value +
"+" + hex_str
65 str_value = str_value + ch
66 elif type_str ==
"map":
67 str_value = map2packed(value)
68 elif type_str ==
"list":
69 str_value = list2packed(value)
71 str_value = str(value)
72 end_type = type_name2packed_code[type_str][1]
73 type_str = type_name2packed_code[type_str][0]
74 return type_str, str_value, end_type
77 """this encodes mappings""" 79 add_item = str_list.append
80 for name, value
in list(obj.items()):
81 type_str, str_value, end_type = to_string_and_type(value)
82 add_item(
'%s%s=%s%s' % (type_str, name, str_value, end_type))
83 return string.join(str_list,
"")
87 add_item = str_list.append
89 type_str, str_value, end_type = to_string_and_type(item)
90 add_item(
'%s%s%s' % (type_str, str_value, end_type))
91 return string.join(str_list,
"")
98 """uses tree that start from root_obj, current route to leave 99 is kept in obj_stack""" 108 self.
setup(stream_flag=
None)
116 if ch
in special_characters:
120 if ch
not in string.digits +
"abcdef":
129 if self.
mode!=
"none":
134 def start_value(self, mode):
137 self.name_stack.append(
"")
140 """put value into mapping/list""" 144 name = self.name_stack.pop()
146 if not isinstance(obj,Object):
149 setattr(obj, name, value)
151 if type(obj)!=ListType:
156 """for list/map: add to stack""" 157 self.obj_stack.append(initial_value)
159 """for list/map: remove from stack""" 161 obj = self.obj_stack.pop()
166 self.msgList.append(obj)
180 def start_list(self):
191 def start_float(self):
196 def start_string(self):
198 def end_string(self):
201 def name_value(self):
209 character2method = {
"+": quote,
224 packed_msg_parser=PackedParser()
225 return packed_msg_parser
def __init__(self, stream_flag=None)
def push_value(self, initial_value)
dictionary character2method
def end_value(self, value)
def start_value(self, mode)
def setup(self, stream_flag=None)