diff -ur v33/ezmd.py v34/ezmd.py --- v33/ezmd.py 2019-10-13 14:04:53.000000000 +0900 +++ v34/ezmd.py 2019-10-13 23:34:07.000000000 +0900 @@ -591,6 +591,29 @@ macro_dic = {} +def macro_dic_update(buf): + targ = macro_dic + d = yaml.load( '\n'.join(buf) ) + if type(d) != dict: + return + + add_k = '__ADD__' + add_d = d.pop(add_k) if add_k in d else {} + + cv = lambda o: list( map(cv, o) ) if is_lst(o) else str(o) + d = dict( map( lambda kv: list( map(cv, kv) ), d.items() ) ) + targ.update(d) + d = dict( filter( lambda kv: kv[0] != kv[1], targ.items() ) ) + + for (k, v) in add_d.items(): + if k in d: + dv = d.get(k) + v = dv + v if str(dv) and is_str(v) else to_str(dv) + to_str(v) + d[k] = v + + targ.clear() + targ.update(d) + def do_macro(buf): for (k, v) in macro_dic.items(): def f(s): @@ -606,14 +629,7 @@ def do_mode(mode, buf, hd_names): if mode == 'macro': - d = yaml.load( '\n'.join(buf) ) - if type(d) == dict: - cv = lambda o: list( map(cv, o) ) if is_lst(o) else str(o) - d = dict( map( lambda kv: list( map(cv, kv) ), d.items() ) ) - macro_dic.update(d) - d = dict( filter( lambda kv: kv[0] != kv[1], macro_dic.items() ) ) - macro_dic.clear() - macro_dic.update(d) + macro_dic_update(buf) return if mode != 'pre': buf = do_macro(buf)