26 import encoder, decoder
34 empty_end_string =
"[]\n" 36 def encode1stream(self, object):
37 return "\t" + encode(object,
"\t")
39 def encode1(self, object):
40 return gen_bach(object)
44 def get_encoder(stream_flag=None):
51 def __init__(self, value, excepted_value=""):
60 """uses tree that start from root_obj, current route to leave 61 is kept in obj_stack""" 68 self.
setup(stream_flag=
None)
86 value = self.stack.pop().value
89 if c.excepted_value ==
"map_name":
91 raise BachException(
"attribute name outside mapping (%s)!" % \
94 c.excepted_value =
"map_value" 95 elif c.excepted_value ==
"map_value":
97 raise BachException(
"attribute value outside mapping (%s:%s)!" % \
99 if not isinstance(c.name, str):
101 setattr(obj, c.name, value)
102 c.excepted_value =
"map_name" 103 elif c.excepted_value ==
"list_value":
104 if not isinstance(obj, list):
111 def push(self, value, mode = None, ch=None, excepted_value=""):
112 self.stack.append(
Context(value, excepted_value))
113 if mode: self.
mode = mode
119 if len(self.
stack)>1:
121 if len(self.
stack)==1:
122 obj=self.
stack[0].value.pop(0)
123 self.msgList.append(obj)
127 if len(self.
stack)==1:
128 obj=self.stack.pop().value
129 self.msgList.append(obj)
133 def get_next_mode(self, ch):
137 self.
push([], excepted_value=
"list_value")
140 elif ch
in int_characters:
144 elif ch
in plain_name_characters:
146 elif ch
in ",:" + string.whitespace:
151 raise BachException(
"illegal character (%s (%s) at line %i)!" % (ch, ord(ch), self.
lineno))
153 def add_comment(self, ch):
159 def skip_white_space(self, ch):
160 if ch
in string.whitespace:
166 if ch
in int_characters:
167 c.value = c.value + ch
168 elif ch
in float_characters:
173 c.value = int(c.value)
175 c.value = int(c.value)
181 if ch
in float_characters:
182 c.value = c.value + ch
184 c.value = float(c.value)
190 c.value = c.value + ch
193 def string(self, ch):
198 c.value = c.value + ch
204 if ch
in plain_name_characters:
205 c.value = c.value + ch
206 elif ch
in ":" + string.whitespace:
211 def get_decoder(stream_flag=None):
213 return bach_msg_parser
def __init__(self, stream_flag=None)
def get_next_mode(self, ch)
def add_comment(self, ch)
def setup(self, stream_flag=None)
def skip_white_space(self, ch)
def push(self, value, mode=None, ch=None, excepted_value="")