Skip to content

Commit 9ca3fc4

Browse files
committed
[scripts] implement script for showing not marked snippets of sources
1 parent a931901 commit 9ca3fc4

File tree

6 files changed

+146
-87
lines changed

6 files changed

+146
-87
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
target
22
src/missing_llvm_bindings/llvmdeps.rs
33
tmp
4+
__pycache__

COPYRIGHT

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
Copyright 2014 Jauhien Piatlicki
2-
3-
Copyright 2013-2014 The Rust Project Developers
4-
for files taken from the Rust project (see files headers)
1+
Copyright 2014-2016 Jauhien Piatlicki
52

63
Dual licensed under MIT and Apache-2.0 licenses

scripts/generate-from-template.py

Lines changed: 12 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -2,99 +2,28 @@
22
# -*- coding: utf-8 -*-
33

44
"""
5-
Script to generate README with pieces of source files
5+
Script to generate FILE with pieces of source files
66
7-
:copyright: (c) 2015 Jauhien Piatlicki
7+
:copyright: (c) 2015-2016 Jauhien Piatlicki
88
:license: Apache-2.0 or MIT, see LICENSE-* for details
99
"""
1010

1111
import argparse
12-
import re
1312
import sys
1413

15-
def parse_source(source):
16-
snippets = {}
17-
active_snippets = set()
18-
for line in source:
19-
if line[0:3] == "//<":
20-
active_snippets.update(line[3:].split())
21-
elif line[0:3] == "//>":
22-
active_snippets = active_snippets.difference(set(line[3:].split()))
23-
else:
24-
join = False
25-
w = False
26-
if line[0:5] == "/*j*/":
27-
line = line[5:]
28-
join = True
29-
elif line[0:6] == "/*jw*/":
30-
line = line[6:]
31-
join = True
32-
w = True
33-
if join:
34-
line = line.lstrip()
35-
if w:
36-
line = " " + line
37-
38-
for snippet in active_snippets:
39-
try:
40-
snippets[snippet].append(line)
41-
except KeyError:
42-
snippets[snippet] = [line]
43-
44-
if join:
45-
try:
46-
snippets[snippet][-2] = snippets[snippet][-2].rstrip('\n')
47-
except IndexError:
48-
pass
49-
50-
return snippets
51-
52-
def parse_source_file(fname):
53-
source = []
54-
with open(fname) as f:
55-
source = f.readlines()
56-
return parse_source(source)
57-
58-
class Snippets(object):
59-
__slots__ = ['snippets']
60-
61-
def __init__(self):
62-
self.snippets = {}
63-
64-
def get(self, fname, name):
65-
snippets = {}
66-
try:
67-
snippets = self.snippets[fname]
68-
except KeyError:
69-
snippets = parse_source_file(fname)
70-
self.snippets[fname] = snippets
71-
return snippets[name]
72-
73-
def process_readme(readme):
74-
snippets = Snippets()
75-
result = []
76-
regexp = re.compile('<<<(.*):(.*)>>>')
77-
for line in readme:
78-
match = regexp.match(line)
79-
if match:
80-
fname = match.group(1)
81-
name = match.group(2)
82-
result.extend(snippets.get(fname, name))
83-
else:
84-
result.append(line)
85-
return result
14+
import snippets
8615

8716
def main():
88-
parser = argparse.ArgumentParser("Generate README with code snippets")
89-
parser.add_argument('readme_in', help='README template')
90-
parser.add_argument('readme_out', help='README to be generated')
17+
parser = argparse.ArgumentParser("Generate FILE with code snippets")
18+
parser.add_argument('file_in', help='FILE template')
19+
parser.add_argument('file_out', help='FILE to be generated')
9120
args = parser.parse_args()
92-
readme_in = []
93-
with open(args.readme_in) as f:
94-
readme_in = f.readlines()
95-
readme = process_readme(readme_in)
96-
with open(args.readme_out, 'w') as f:
97-
f.write("".join(readme))
21+
file_in = []
22+
with open(args.file_in) as f:
23+
file_in = f.readlines()
24+
text = snippets.process(file_in)
25+
with open(args.file_out, 'w') as f:
26+
f.write("".join(text))
9827

9928
if __name__ == "__main__":
10029
sys.exit(main())

scripts/show-all-not-marked.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/sh
2+
3+
# Call this script from the root of the repo
4+
for i in src/*.rs grammar.ebnf;
5+
do
6+
echo
7+
echo "********************************************************************************"
8+
echo $i
9+
echo "********************************************************************************"
10+
echo
11+
python3 scripts/show-not-marked.py $i
12+
done

scripts/show-not-marked.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/python3
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Script to show not marked pieces of file
6+
7+
:copyright: (c) 2016 Jauhien Piatlicki
8+
:license: Apache-2.0 or MIT, see LICENSE-* for details
9+
"""
10+
11+
import argparse
12+
import sys
13+
14+
import snippets
15+
16+
def main():
17+
parser = argparse.ArgumentParser("Show not marked pieces of FILE")
18+
parser.add_argument('file_in', help='input FILE')
19+
args = parser.parse_args()
20+
file_in = []
21+
with open(args.file_in) as f:
22+
file_in = f.readlines()
23+
file_snippets = snippets.parse_source(file_in)
24+
try:
25+
for line in file_snippets["not-marked"]:
26+
print(line)
27+
except KeyError:
28+
pass
29+
30+
if __name__ == "__main__":
31+
sys.exit(main())

scripts/snippets.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/usr/bin/python3
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Module to work with marked code snippets
6+
7+
:copyright: (c) 2015-2016 Jauhien Piatlicki
8+
:license: Apache-2.0 or MIT, see LICENSE-* for details
9+
"""
10+
11+
import re
12+
13+
def parse_source(source):
14+
snippets = {}
15+
active_snippets = set()
16+
for line in source:
17+
if line[0:3] == "//<":
18+
active_snippets.update(line[3:].split())
19+
elif line[0:3] == "//>":
20+
active_snippets = active_snippets.difference(set(line[3:].split()))
21+
else:
22+
join = False
23+
w = False
24+
if line[0:5] == "/*j*/":
25+
line = line[5:]
26+
join = True
27+
elif line[0:6] == "/*jw*/":
28+
line = line[6:]
29+
join = True
30+
w = True
31+
if join:
32+
line = line.lstrip()
33+
if w:
34+
line = " " + line
35+
36+
if not active_snippets:
37+
try:
38+
snippets["not-marked"].append(line)
39+
except KeyError:
40+
snippets["not-marked"] = [line]
41+
else:
42+
for snippet in active_snippets:
43+
try:
44+
snippets[snippet].append(line)
45+
except KeyError:
46+
snippets[snippet] = [line]
47+
48+
if join:
49+
try:
50+
snippets[snippet][-2] = snippets[snippet][-2].rstrip('\n')
51+
except IndexError:
52+
pass
53+
54+
return snippets
55+
56+
def parse_source_file(fname):
57+
source = []
58+
with open(fname) as f:
59+
source = f.readlines()
60+
return parse_source(source)
61+
62+
class Snippets(object):
63+
__slots__ = ['snippets']
64+
65+
def __init__(self):
66+
self.snippets = {}
67+
68+
def get(self, fname, name):
69+
snippets = {}
70+
try:
71+
snippets = self.snippets[fname]
72+
except KeyError:
73+
snippets = parse_source_file(fname)
74+
self.snippets[fname] = snippets
75+
return snippets[name]
76+
77+
def process(text):
78+
snippets = Snippets()
79+
result = []
80+
regexp = re.compile('<<<(.*):(.*)>>>')
81+
for line in text:
82+
match = regexp.match(line)
83+
if match:
84+
fname = match.group(1)
85+
name = match.group(2)
86+
result.extend(snippets.get(fname, name))
87+
else:
88+
result.append(line)
89+
return result

0 commit comments

Comments
 (0)