Files
keygen/bin/parse.py

53 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import os
import re
import json
import string
import itertools
scad_fn = sys.argv[1]
json_fn = sys.argv[2]
with open(scad_fn) as f:
scad_text = f.read()
poly_reqs = re.findall(r'<(.+\.gen\.scad)>', scad_text)
modules = re.findall(r"module\s+([^\s\(]+)\s*\("
r".+"
r'name\s*=\s*("[^"]+")'
r".+"
r'/\*(.+?)\*/'
r".+"
r"outlines_k\s*=\s*(\[[^\]]+\])"
r".+"
r"wardings_k\s*=\s*(\[[^\]]+\])"
, scad_text, flags=re.S)
if len(modules) == 0:
print("Could not find any compatible modules in {}".format(scad_fn), file=sys.stderr)
sys.exit(1)
module = modules[0]
(m, n, d, os, ws) = module
# Dirty hack to parse OpenSCAD types
n = json.loads(n)
d = d.strip()
os = json.loads(os)
ws = json.loads(ws)
json_obj = {
"name": n,
"filename": scad_fn,
"description": d,
"outlines": os,
"wardings": ws
}
with open(json_fn, "w") as f:
print(json.dumps(json_obj), file=f)