Add pyrsc_regeneratior.py
This commit is contained in:
1 parent
7edf6f32d2
commit
6631797a3f
1 file changed
+46
@@ -0,0 +1,46 @@
|
||||
"""for pyrs.c
|
||||
|
||||
Replace the char* s and the printf line with `$` and `@` respectively, then run this script to generate both lines. Then copy that and replace the `$...@` range (inclusive) with them.
|
||||
"""
|
||||
|
||||
|
||||
LIST = '\\\n"%'
|
||||
|
||||
|
||||
def take(s):
|
||||
r = []
|
||||
n = []
|
||||
for c in s:
|
||||
if c in LIST:
|
||||
n.append("%c")
|
||||
r.append(ord(c))
|
||||
else:
|
||||
if c in "$":
|
||||
r.extend([ord('"'), "s", ord('"')])
|
||||
n.append(c)
|
||||
return r, "".join(n)
|
||||
|
||||
|
||||
|
||||
def proc(s):
|
||||
r, n = take(s)
|
||||
a = n.index("$")
|
||||
b = n.index("@")
|
||||
assert a < b
|
||||
chars = "char* s = %c%s%c;"
|
||||
printf = f"printf(s, {', '.join(map(str, r))});"
|
||||
a = n[:a] + chars + n[a + 1:b] + printf + n[b + 1 :]
|
||||
return a, printf
|
||||
|
||||
if __name__ == "__main__":
|
||||
import json
|
||||
import sys
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
with open(sys.argv[1], "r") as f:
|
||||
s = f.read()
|
||||
else:
|
||||
s = sys.stdin.read()
|
||||
a, p = proc(s)
|
||||
print(f"char* s = {json.dumps(a)};")
|
||||
print(f" {p}")
|
||||
Reference in new issue
Block a user