diff -ur v3/ezmd.py v4/ezmd.py --- v3/ezmd.py 2019-09-24 00:19:15.000000000 +0900 +++ v4/ezmd.py 2019-09-25 00:23:47.000000000 +0900 @@ -14,6 +14,8 @@ next_mode = lambda s: 'p' if s == '/' else s +lst_strip = lambda lst: list( map( lambda s: s.strip(), lst ) ) + def strip_head(s): while s and s[0] in (' ', '\t'): s = s[1:] @@ -41,6 +43,22 @@ res.append(s) return res +s_idx = lambda s, p, dv=-1: s.index(p) if p in s else dv + +def do_str(s): + # a href + (h, t) = ('[[', ']]') + (ih, it) = list( map( lambda p: s_idx(s, p), (h, t) ) ) + if 0 <= ih and ih < it: + s3 = lst_strip( ( s[:ih], s[ih+len(h):it], s[it+len(t):] ) ) + m = s3[1] + if m: + (href, v) = lst_strip( m.split('|') ) if '|' in m else (m, m) + s3[1] = { 'a href="{}"'.format(href): v } if href else v + lst = list( filter( lambda o: o, s3 ) ) + return lst[0] if len(lst) == 1 else lst + return s + def do_mode_ul(buf, res): buf = esc_join(buf) buf = list( filter( lambda s: s.strip(), buf ) ) @@ -70,7 +88,7 @@ list( map(buf_to_stk_lsts, buf) ) # make lists def lst_to(lst): - f = lambda o: lst_to(o) if type(o) == list else {'li /': o} + f = lambda o: lst_to(o) if type(o) == list else {'li /': do_str(o) } lst = list( map(f, lst) ) return { 'ul': lst } @@ -78,12 +96,12 @@ def do_mode(mode, buf, res): if mode in heads: - buf = list( map( lambda s: s.strip(), buf ) ) + buf = lst_strip(buf) buf = list( filter( lambda s: s!='', buf ) ) s = ''.join(buf) res.append( { mode: s } ) elif mode == 'p': - buf = list( map( lambda s: s.strip(), buf ) ) + buf = lst_strip(buf) buf.append('') (lsts, lst) = ( [], [] ) @@ -94,6 +112,8 @@ lsts.append(lst) lst = [] for lst in lsts: + to_lst = lambda o: o if type(o) == list else [o] + lst = sum( map( lambda s: to_lst( do_str(s) ), lst ), [] ) res.append( { 'p': lst } ) elif mode == 'pre': while buf and buf[0] == '':