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=""):
52 self.
valuevalue = value
60 """uses tree that start from root_obj, current route to leave
61 is kept in obj_stack"""
68 self.
setupsetup(stream_flag=
None)
72 return not self.
datadata
and not self.
stackstack
83 return self.
stackstack[-1]
86 value = self.
stackstack.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=""):
113 if mode: self.
modemode = mode
115 if ch: self.
modemode(ch)
119 if len(self.
stackstack)>1:
121 if len(self.
stackstack)==1:
122 obj=self.
stackstack[0].value.pop(0)
123 self.
msgListmsgList.append(obj)
125 self.
stackstack.pop()
127 if len(self.
stackstack)==1:
128 obj=self.
stackstack.pop().value
129 self.
msgListmsgList.append(obj)
133 def get_next_mode(self, ch):
137 self.
pushpush([], excepted_value=
"list_value")
140 elif ch
in int_characters:
141 self.
pushpush(
"", self.
intint, ch)
144 elif ch
in plain_name_characters:
145 self.
pushpush(
"", self.
namename, ch)
146 elif ch
in ",:" + string.whitespace:
151 raise BachException(
"illegal character (%s (%s) at line %i)!" % (ch, ord(ch), self.
linenolineno))
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 push(self, value, mode=None, ch=None, excepted_value="")
def skip_white_space(self, ch)
def get_next_mode(self, ch)
def add_comment(self, ch)
def setup(self, stream_flag=None)