import re
import struct
from pprint import pprint


# https://gist.github.com/yushiyangk/206bceefbfeb7b86895bbff24825e532
float_numeric_pattern = r"[+-]?(?:[0-9]\.?|[0-9][0-9_]*[0-9]\.?|(?:[0-9]|[0-9][0-9_]*[0-9])?\.(?:[0-9]|[0-9][0-9_]*[0-9]))(?:[eE][+-](?:[0-9]|[0-9][0-9_]*[0-9]))?"

float_data: list[list[float]] = []
with open("g0.txt", 'r') as fin:
	for line in fin:
		match = re.match(r"^G0 X(" + float_numeric_pattern + ") Y(" + float_numeric_pattern + ")$", line)
		if match:
			datum = [float(match.group(1)), float(match.group(2))]
			float_data.append(datum)

def encode_row(row):
	return list(map(lambda val: struct.pack('f', val), row))

data: list[list[bytes]] = list(map(encode_row, float_data))

pprint(data)

text = ""
for row in data:
	for val in row:
		for byte in struct.unpack('cccc', val):
			if byte != b"\x00":
				text += byte.decode('utf-8')

print(text)
