code / tomo

Lines41.3K C23.7K Markdown9.7K YAML5.0K Tomo2.3K
7 others 763
Python231 Shell230 make212 INI47 Text21 SVG16 Lua6
(36 lines)
1 #!/bin/env python3
3 # This script converts API YAML files into markdown documentation
4 # and prints it to standard out.
6 import yaml
7 import re
9 def single_test(name:str, test)->str:
10 if "example" not in test: return
11 if name.startswith("Path.") or name in ['exit', 'say', 'print', 'sleep', 'fail', 'getenv', 'setenv', 'at_cleanup', 'ask']:
12 return f" if no # Test {name}\n " + test["example"].replace('\n', '\n ').strip()
13 return f" do # Test {name}\n " + test["example"].replace('\n', '\n ').strip()
15 def print_tests(yaml_doc:str):
16 data = yaml.safe_load(yaml_doc)
18 all_tests = []
19 for name in sorted([k for k in data.keys()]):
20 t = single_test(name, data[name])
21 if t: all_tests.append(t)
23 print("# This file contains auto-generated tests from the examples in api/*.yaml\n")
24 print("func main()")
25 print('\n\n'.join(all_tests))
27 if __name__ == "__main__":
28 import sys
29 if len(sys.argv) > 1:
30 all_files = ""
31 for filename in sys.argv[1:]:
32 with open(filename, "r") as f:
33 all_files += f.read()
34 print_tests(all_files)
35 else:
36 print_tests(sys.stdin.read())