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
@@ -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)