diff -ur v24/ezmd.py v25/ezmd.py --- v24/ezmd.py 2019-10-07 04:19:38.000000000 +0900 +++ v25/ezmd.py 2019-10-07 22:18:22.000000000 +0900 @@ -69,7 +69,14 @@ outbuf = outbuf_new() +tag_props = {} + def tag_new(name, prop, v): + b = tag_props.get(name, {}) + if b: + (arg, prop) = ( prop, b.copy() ) + prop.update(arg) + return Empty( locals() ) def tag_to_dic(tag): @@ -144,17 +151,36 @@ f = lambda lst: ( lst[0], delim.join( lst[1:] ) ) return f( s.split(delim) ) +def do_prop(v1, v2): + tag_props.clear() + if v2 and v2 != v1: + try: + d = yaml.load(v2) + if type(d) == dict: + tag_props.update(d) + except: + pass + return [] + def do_v1v2(v1, v2): + lst = ('s', 'em', 'strong', 'u', 'i', 'b') + if v1 in lst: + return tag_new(v1, {}, v2) + + d = { '-': 's', '*': 'em', '**': 'strong', '_': 'u', '/': 'i' } + if v1 in d: + return tag_new( d.get(v1), {}, v2 ) + if v1 == 'img': return tag_new('img', {'src': v2}, '/') if v1 == 'video': return tag_new('video', {'src': v2, 'controls': None, 'playsinline': None}, '') - if v1 == '-': - return tag_new('s', {}, v2) if v1 == 'name': return tag_new('a', {'name': v2}, '') if v1 == 'paste': return outbuf.lst_get(v2) + if v1 == 'prop': + return do_prop(v1, v2) return tag_new('a', {'href': v1}, v2) if v1 else v2 def do_br(s): @@ -223,8 +249,11 @@ list( map(buf_to_stk_lsts, buf) ) # make lists def lst_to(lst): - f = lambda o: lst_to(o) if type(o) == list else tag_new( 'li', {'/': None}, do_str(o) ) - lst = list( map(f, lst) ) + def fs(s): + sol = do_str(s) + return tag_new( 'li', {'/': None}, sol ) if sol != [] else [] + f = lambda o: lst_to(o) if type(o) == list else fs(o) + lst = list( flat_map(f, lst) ) return tag_new('ul', {}, lst) outbuf.extend( list( map(lst_to, lsts) ) ) @@ -283,10 +312,11 @@ (t, s) = split_num(s) if t: prop[ '{}span'.format(cr) ] = int(t) - return tag_new( md, prop, do_str( s.strip() ) ) + v = do_str( s.strip() ) + return tag_new(md, prop, v) if v != [] else [] lst = flat_map( lambda s_md: th_td(*s_md), lst ) - return tag_new('tr', {}, lst) + return tag_new('tr', {}, lst) if lst != [] else [] tbl_prop = { 'border': 1, 'cellspacing': 0 } @@ -295,7 +325,7 @@ buf = lst_strip(buf) buf = cut_empty(buf) if buf: - v = list( map(do_tr, buf) ) + v = list( flat_map(do_tr, buf) ) outbuf.append( tag_new('table', tbl_prop, v) ) def ul_to_tbl(ul): @@ -339,6 +369,7 @@ cv_to_tbl(tag_, x, tbl) elif tag.name == 'li': prop = {} + prop.update( dict( filter( lambda kv: kv[0] not in ('sub_ul', '/'), tag.prop.items() ) ) ) tr = tbl.v[-1] (name, v) = li_to_name_v(tag.v) tr.v.append( tag_new(name, prop, v) )