def _link_map(linkmap, file_name, para, max_level=None): '''add all the links target in para to linkmap''' for p in md_iter.sequence_iter(para, include_root=False, max_level=max_level): if p.head.name: linkmap[p.head.name] = file_name for lnk in p.link_target: linkmap[lnk] = file_name
def _write_para(file_name, para, linkmap, max_level=None): '''write the paragraph `para` to `file_name` - `linkmap` contains the maps from linkname to file_name this is used to replace the orginal link with new external link. - `max_level` indicates to which level of paragraph it will write. the level `max_level` is inclusive. ''' with open(file_name, 'w') as f: for p in md_iter.sequence_iter(para, include_root=False, max_level=max_level): for line in p.content: f.write(_relink(line, file_name, linkmap))
def print_paragraph(para): ''' print the paragraph sequentially ''' total = 0 for p in md_iter.sequence_iter(para): total += 1 print('{}title:{}, name: {}, lines {}, targets {} children {}' .format(' '*4*p.head.level, p.head.title[:min( len(p.head.title), 40)], p.head.name, len(p.content), len(p.link_target), len(p.children))) return total
def print_rules(para): '''print all rules rules are headline with sub-paragraph `reason` ''' total = 0 for p in md_iter.sequence_iter(para): if para.children and para.children[0].head.title.lower() == 'reason': total += 1 print('{}title:{}, name: {}, lines {}, children {}' .format(' '*4*para.head.level, para.head.title[:min( len(para.head.title), 40)], para.head.name, len(para.content), len(para.children))) return total
def test_parse(self): (0, 45, 3, 9, 27, 29, 10) expects = ( (Headline(level=0, name='root', title='main'), 0), (Headline(level=1, name='main', title='C++ Core Guidelines'), 45), (Headline(level=3, name='SS-readers', title='In.target: Target readership'), 3), (Headline(level=2, name='SS-aims', title='In.aims: Aims'), 9), (Headline(level=3, name='R0', title="In.0: Don't panic!"), 27), (Headline(level=2, name='SS-struct', title='In.struct: The structure of this document'), 29), (Headline(level=1, name='S-introduction', title='In: Introduction'), 10), ) curdir = os.path.dirname(__file__) para = md_parser.parse(os.path.join(curdir, 'test_md_parser.md')) self.assertEqual( expects, tuple( (s.head, len(s.content)) for s in md_iter.sequence_iter(para))) self.assertEqual(len(para.children[0].content), 45)