--- esC.py- 2016-09-02 00:30:00.000000000 +0900 +++ esC.py 2016-09-02 01:00:00.000000000 +0900 @@ -1,6 +1,7 @@ #!/usr/bin/env python import sys +import yaml def is_num(s): try: @@ -60,6 +61,18 @@ def div_str_cut_comment(s, kdic, tbl): r = [ [ 'str', decode( s[:j], tbl ) ] ] if k == 'str' else [] return r + div_str_cut_comment( s[j:], kdic, tbl ) +def tree_bra(lst, kdic, sta=None): + d = dict( zip( kdic.get('br_s'), kdic.get('br_e') ) ) + dst = [] + while len(lst) > 0: + e = lst.pop(0) + if e == [ 'br_e', d.get(sta) ]: + break + if e in [ [ 'br_s', s1 ] for s1 in d.keys() ]: + e.append( tree_bra( lst, kdic, e[1] ) ) + dst.append(e) + return dst + def es_split(s): s = s.replace('@', '@ ') @@ -105,6 +118,8 @@ def es_split(s): try_num_name = lambda e, (k, v): [ num_name(v), v ] if k is None else e lst = [ try_num_name(e, e) for e in lst ] + lst = tree_bra(lst, kdic) + return lst if __name__ == "__main__": @@ -115,6 +130,7 @@ if __name__ == "__main__": with open(sys.argv[1], 'r') as f: s = f.read() lst = es_split(s) - print(lst) + print('{}\n'.format(lst)) + print yaml.dump(lst) sys.exit(rcode) # EOF