Source code for RWESharp.Core.lingoIO
import json.decoder
import re
import json as jsonenc
[docs]
def tojson(string: str, replacement: str = None, log=False):
try:
closebracketscount = string.count("]")
openbracketscount = string.count("[")
t = string
if closebracketscount > openbracketscount:
t = t[:-1]
t = t.replace("#Data:", "#data:") \
.replace("#Options:", "#options:") \
.replace("[#", "{#") \
.replace("point(", "\"point(") \
.replace("rect(", "\"rect(") \
.replace("color(", "\"color(") \
.replace("color (", "\"color(") \
.replace(")\"", ")") \
.replace(")", ")\"") \
.replace("void", "0")
count = 0
m = list(t)
brcount = 0
for i in m:
if i == "{":
localcount = 0
v = count
while v < len(m):
if m[v] == "[" or m[v] == "{":
localcount += 1
elif m[v] == "]" or m[v] == "}":
localcount -= 1
if localcount == 0:
m[v] = "}"
break
v += 1
count += 1
if i in ["{", "["]:
brcount += 1
elif i in ["}", "]"]:
brcount -= 1
if brcount == 0:
m = m[:count+1]
break
t = "".join(m)
t = t.replace("#", "\"").replace(":", "\":").replace("1\":st", "1':st").replace("2\":nd", "2':nd").replace("3\":rd", "3':rd")
# print(t)
if t.replace(" ", "") != "":
if replacement is not None:
return {**tojson(replacement), **json.loads(t)}
return json.loads(t)
else:
if replacement is not None:
return tojson(replacement)
return {}
except:
print("fixing, just wait bro we got it bro")
if replacement is None:
raise
return tojson(replacement)
[docs]
def tolingo(string: dict):
s = jsonenc.dumps(string)
# print(s)
t = s.replace("\"point(", "point(").replace("\"rect(", "rect(").replace("\"color(", "color(") \
.replace(")\"", ")").replace("{", "[").replace("}", "]").replace("'", "")
t = re.sub(r"\"([a-zA-Z]+[0-9]*)\":", r"#\1:", t)
# print(t)
return t
[docs]
def fromarr(col: str, mark: str) -> list[float | int]:
s = col.replace(mark + "(", "")
s = s.replace(",", " ")
s = s.replace(")", "")
a = []
for i in s.split():
n = float(i)
if float(i) == int(float(i)):
n = int(float(i))
a.append(n)
return a
[docs]
def point(col: list | tuple) -> str:
return f"point({round(col[0], 4)}, {round(col[1], 4)})"
[docs]
def frompoint(col: str) -> list[float | int]:
return fromarr(col, "point")
[docs]
def makearr(col: list | tuple, mark: str):
return f"{mark}({col[0]}, {col[1]})"