| #!/usr/bin/env python |
| |
| from __future__ import absolute_import, division, print_function |
| import argparse |
| import codecs |
| import os.path |
| import re |
| |
| RE_EACH_CODE_BLOCK = re.compile(r'(?s)```[^\n]*\n(.*?)```') |
| RE_MARKER = re.compile(r'^(?:# )?//(.+)$') |
| RE_STRIP_COMMENT = re.compile(r'^#($| +)') |
| |
| if __name__ == '__main__': |
| p = argparse.ArgumentParser() |
| p.add_argument('--rust-file', default='src/cookbook.rs') |
| p.add_argument('--example-dir', default='examples') |
| args = p.parse_args() |
| |
| with codecs.open(args.rust_file, encoding='utf-8') as f: |
| rustcode = f.read() |
| for m in RE_EACH_CODE_BLOCK.finditer(rustcode): |
| lines = m.group(1).splitlines() |
| marker, codelines = lines[0], lines[1:] |
| m = RE_MARKER.search(marker) |
| if m is None: |
| continue |
| |
| code = '\n'.join(RE_STRIP_COMMENT.sub('', line) for line in codelines) |
| fpath = os.path.join(args.example_dir, m.group(1)) |
| with codecs.open(fpath, mode='w+', encoding='utf-8') as f: |
| print(code, file=f) |