mirror of
https://github.com/ervanalb/keygen.git
synced 2025-12-17 13:45:25 +00:00
53 lines
1.1 KiB
Python
Executable File
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)
|