#!/usr/bin/env python import yaml import nkf heads = [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8', 'h9' ] end = '$$$_end_$$$' modes = heads + [ 'p', end ] def do_mode(mode, buf, res): if mode in heads: buf = list( map( lambda s: s.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.append('') (lsts, lst) = ( [], [] ) for s in buf: if s: lst.append(s) elif lst: lsts.append(lst) lst = [] for lst in lsts: res.append( { 'p': lst } ) def ezmd(lst): lst = ['p'] + lst + [end] (buf, res) = ( [], [] ) mode = '' while mode != end: s = lst.pop(0) if s in modes and s != mode: do_mode(mode, buf, res) mode = s buf = [] else: buf.append(s) return res if __name__ == "__main__": b = nkf.get_stdin() (s, nkf_opt) = nkf.to_str(b) lst = s.split('\n') lst = ezmd(lst) u8 = yaml.dump( lst, default_flow_style=False, allow_unicode=True, encoding='utf-8' ) b = nkf.cvt(u8, nkf_opt) if nkf_opt != '-u' else u8 nkf.put_stdout(b) # EOF