diff -ur v22/ezmd.py v23/ezmd.py --- v22/ezmd.py 2019-10-04 20:10:13.000000000 +0900 +++ v23/ezmd.py 2019-10-06 13:12:35.000000000 +0900 @@ -9,22 +9,19 @@ is_all_ge_n = lambda s, c, n: all( map( lambda c_: c_ == c, s ) ) and len(s) >= n -def next_mode_switch(s, mode): - if mode == 'pre': - return (None, 'p') if s == '/' else (s, mode) - - if s in modes: - return (None, s) if s != mode else (None, mode) - - if is_all_ge_n(s, '-', 4): - return (s, 'hr') - - if mode == 'hr': - if is_all_ge_n(s, '-', 4): - return (s, 'hr') - return (s, 'p') - - return (s, mode) +def next_mode_switch(e): + if (e.mode, e.s) == ('pre', '/'): + (e.s, e.next_mode) = (None, 'p') + elif e.mode in heads and not e.s.strip(): + (e.s, e.next_mode) = (None, 'p' if e.tmp else e.mode) + elif e.s in modes: + (e.s, e.next_mode) = (None, e.s) + elif is_all_ge_n(e.s, '-', 4): + e.next_mode = 'hr' + elif e.mode == 'hr': + e.next_mode = 'hr' if is_all_ge_n(e.s, '-', 4) else 'p' + else: + e.next_mode = e.mode class Empty: def __init__(self, dic={}): @@ -510,7 +507,7 @@ (buf, hd_names) = ( [], [] ) def is_call(e): - (e.s, e.next_mode) = next_mode_switch(e.s, e.mode) + next_mode_switch(e) return e.next_mode != e.mode func = lambda e: do_mode(e.mode, e.tmp, hd_names)