@ 261027.5

180907.8 · eeaa42ecafbc4bad933bb0b12729eab9c60b63ce

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.

reading declarations

Changes to scripts/. All files

scripts/copy-examples

new file mode 100755@@ -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)