diff -urN v6/ezhtml.py v7/ezhtml.py
--- v6/ezhtml.py 2018-09-18 21:51:22.000000000 +0900
+++ v7/ezhtml.py 2018-09-18 21:52:05.000000000 +0900
@@ -79,6 +79,39 @@
return { h + ' '.join(e): '/' }
return e
+def is_solo_tag_has_v(e):
+ lst = ['li']
+ if type(e) != dict:
+ return False
+ (tag, v) = e.items()[0]
+ return v == '/' and tag.split(' ')[0] in lst
+
+def solo_tag_has_v_idx(lst):
+ for i in range( len(lst) ):
+ if is_solo_tag_has_v( lst[i] ):
+ return i
+ return -1
+
+def strip_lst1(o):
+ while type(o) == list and len(o) == 1:
+ o = o[0]
+ return o
+
+def solo_tags_modify(lst):
+ def div_lst(lst):
+ i = solo_tag_has_v_idx(lst)
+ return ( lst[:i], lst[i:] ) if i >= 0 else ( lst, [] )
+ r = []
+ while lst:
+ (p, lst) = div_lst(lst)
+ r += p
+ if lst:
+ (e, lst) = ( lst[0], lst[1:] )
+ (tag, v) = e.items()[0] # v == '/'
+ (p, lst) = div_lst(lst)
+ r += [ { tag + ' /': strip_lst1(p) } ]
+ return r
+
def solo_tags(lst):
return list( map( solo_tag, lst ) )
@@ -95,7 +128,7 @@
lst = map(f, lst)
return '\n'.join(lst)
-def strip_lst(lst, pre=False):
+def strip_lst(lst, pre):
def f(e):
if type(e) == dict:
return e
@@ -107,10 +140,16 @@
return list( filter( lambda e: e != '', map(f, lst) ) )
+def close_solo_tag(lst, pre=False):
+ lst = solo_tags(lst)
+ lst = strip_lst(lst, pre)
+ lst = solo_tags_modify(lst)
+ return lst
+
def close_tag(lst):
- tag = lst[0]
- lst = solo_tags( lst[1:] )
- lst = strip_lst( lst, tag[0].lower() == 'pre' )
+ (tag, lst) = ( lst[0], lst[1:] )
+ lst = close_solo_tag( lst, tag[0].lower() == 'pre' )
+
v = lst
if len(lst) == 1:
v = lst[0]
@@ -135,10 +174,8 @@
else:
stk.append( solo_tag(tag) )
- o = strip_lst( solo_tags(stk) )
- while type(o) == list and len(o) == 1:
- o = o[0]
- return o
+ o = close_solo_tag(stk)
+ return strip_lst1(o)
def yaml_dump(o):
def represent_str(dumper, instance):