# Build script for Transparent Twitch Chat # Python 3.6+ import re import os # Prepare OUTPUT_FILE = "dist/TransparentTwitchChat.user.js" SRC_FILE = "src/main.js" VERSION_KEY = "// @version " # Load info current_version = None try: with open(OUTPUT_FILE, 'r') as f: for line in f: if line.startswith(VERSION_KEY): current_version = line[len(VERSION_KEY):].strip() break except IOError: pass # Get version new_version = None if current_version is None: new_version = input("New version: ") else: new_version = input(f"Current version is {current_version}. New version: ") if not new_version: new_version = current_version # Build with open(SRC_FILE, 'r') as src: src_contents = src.read() src_contents = src_contents.replace("{VERSION}", new_version, 1) src_contents = re.sub( pattern = r'@#hex\(([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\)', repl = lambda m: f'rgba({int(m.group(1), 16)},{int(m.group(2), 16)},{int(m.group(3), 16)},{int(m.group(4), 16) / 256})', string = src_contents ) src_contents = re.sub( pattern = r'@#hex\(([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])\)', repl = lambda m: f'rgba({int(m.group(1) * 2, 16)},{int(m.group(2) * 2, 16)},{int(m.group(3) * 2, 16)},{int(m.group(4) * 2, 16) / 256})', string = src_contents ) src_contents = re.sub( pattern = r'@#rem{{(.*?)@#rem}}', repl = lambda m: "\n".join(line for line in map(str.strip, m.group(1).splitlines()) if line and not line.startswith("//")), string = src_contents, flags = re.DOTALL ) src_contents = re.sub( pattern = r'@#css{{(.*?)@#css}}', repl = lambda m: "\n" + re.sub(r"([a-z]): ", "\\1:", m.group(1).replace("\n", "").replace(";}", "}\n").replace(" !important", "!important")), string = src_contents, flags = re.DOTALL ) with open(OUTPUT_FILE, 'w') as out: out.write(src_contents) if os.name == "nt": print("Copying to clipboard") os.system(f"clip < {OUTPUT_FILE}") print("Done")