From eeaa42ecafbc4bad933bb0b12729eab9c60b63ce Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Fri, 7 Sep 2018 12:27:48 -0400 Subject: [PATCH] scripts: add copy-examples This is a preliminary script to copy example code from a Markdown file into a crate's example directory. This is intended to be used for the upcoming libripgrep guide, but we don't commit any examples yet. --- scripts/copy-examples | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 scripts/copy-examples diff --git a/scripts/copy-examples b/scripts/copy-examples new file mode 100755 index 00000000..e8eb2f24 --- /dev/null +++ b/scripts/copy-examples @@ -0,0 +1,33 @@ +#!/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)(?:```|\{\{< high rust[^>]+>\}\})[^\n]*\n(.*?)(?:```|\{\{< /high >\}\})' # noqa +) +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='grep/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)