6 from optparse import OptionParser
8 from util import Reporter, read_markdown
16 for filename in get_filenames(args.source_dir):
17 images += get_images(args.parser, filename)
18 save(sys.stdout, images)
22 """Parse command-line arguments."""
24 parser = OptionParser()
25 parser.add_option('-p', '--parser',
28 help='path to Markdown parser')
29 parser.add_option('-s', '--source',
32 help='source directory')
34 args, extras = parser.parse_args()
35 require(args.parser is not None,
36 'Path to Markdown parser not provided')
37 require(args.source_dir is not None,
38 'Source directory not provided')
40 'Unexpected trailing command-line arguments "{0}"'.format(extras))
45 def get_filenames(source_dir):
46 """Get all filenames to be searched for images."""
48 return glob.glob(os.path.join(source_dir, '*.md'))
51 def get_images(parser, filename):
52 """Extract all images from file."""
54 content = read_markdown(parser, filename)
56 find_image_nodes(content['doc'], result)
60 def find_image_nodes(doc, result):
61 """Find all nested nodes representing images."""
63 if (doc["type"] == "img") or \
64 ((doc["type"] == "html_element") and (doc["value"] == "img")):
65 result.append({'alt': doc['attr']['alt'], 'src': doc['attr']['src']})
67 for child in doc.get("children", []):
68 find_image_nodes(child, result)
71 def save(stream, images):
72 """Save results as Markdown."""
74 text = '\n<hr/>\n'.join(['<p><img alt="{0}" src="{1}" /></p>'.format(img['alt'], img['src']) for img in images])
75 print(text, file=stream)
78 def require(condition, message):
79 """Fail if condition not met."""
82 print(message, file=sys.stderr)
86 if __name__ == '__main__':