diff -urN v10/ezhtml.py v11/ezhtml.py --- v10/ezhtml.py 2018-09-20 03:53:08.000000000 +0900 +++ v11/ezhtml.py 2018-09-20 21:28:26.000000000 +0900 @@ -150,9 +150,9 @@ lst = solo_tags_modify(lst) return lst -def close_tag(lst): +def close_tag(lst, pre): (tag, lst) = ( lst[0], lst[1:] ) - lst = close_solo_tag( lst, tag[0].lower() == 'pre' ) + lst = close_solo_tag(lst, pre) v = lst if len(lst) == 1: @@ -163,6 +163,12 @@ def html_load(s): stk = [] + pre_cnt = 0 + + def add_cnt(tag): + pre = ( tag[1] if tag[0] == '/' else tag[0] ).lower() == 'pre' + return ( -1 if tag[0] == '/' else 1 ) if pre else 0 + while True: (p, tag, s) = get_tag(s) if not tag: @@ -171,14 +177,16 @@ stk.append( cv_amp(p, 'dec') ) if tag[0] != '/': stk.append(tag) + pre_cnt += add_cnt(tag) continue i = start_idx( stk, tag[1] ) if i >= 0: - stk = stk[:i] + [ close_tag( stk[i:] ) ] + stk = stk[:i] + [ close_tag( stk[i:], pre_cnt > 0 ) ] + pre_cnt += add_cnt(tag) else: stk.append( solo_tag(tag) ) - o = close_solo_tag(stk) + o = close_solo_tag( stk, pre_cnt > 0 ) return strip_lst1(o) def yaml_dump(o):