commit 5a1f46b683895f722f38bd4d3e9a995c40d3115c Author: Matt Troutman Date: Wed Mar 12 11:20:21 2025 -0500 add-font.py helper for the repo. diff --git a/add-font.py b/add-font.py new file mode 100644 index 0000000..c9aeab1 --- /dev/null +++ b/add-font.py @@ -0,0 +1,93 @@ +import os +import hashlib +import zipfile +from pathlib import Path + + +def get_font_files(font_folder): + """Find all .ttf and .otf files in the given folder.""" + font_files = [] + for root, _, files in os.walk(font_folder): + for file in files: + if file.lower().endswith(('.ttf', '.otf')): + font_files.append(os.path.join(root, file)) + return font_files + + +def generate_sha256(file_path): + """Generate the sha256 hash of the given file.""" + sha256_hash = hashlib.sha256() + with open(file_path, "rb") as f: + for byte_block in iter(lambda: f.read(4096), b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + + +def create_zip(font_files, font_folder, zip_path): + """Create a zip file from the font files.""" + print(f"Creating zip file at {zip_path} with the following font files:") + for font_file in font_files: + print(f" - {font_file}") + + with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf: + for file in font_files: + # Add the font file with its relative path + arcname = os.path.relpath(file, font_folder) # Now using font_folder + zipf.write(file, arcname) + print(f"Added {file} to the zip as {arcname}") + + +def create_ruby_file(font_name, zip_path, sha256_hash): + """Generate a Ruby formula file for the font.""" + formula_content = f"""class {font_name} < Formula + desc "Font for {font_name}" + homepage "https://github.com/{font_name}" + url "{zip_path}" + sha256 "{sha256_hash}" + version "latest" + + def install + (share/"fonts").install Dir["*.ttf", "*.otf"] + end + + test do + assert_predicate share/"fonts/{font_name}-Regular.ttf", :exist? + end +end +""" + formula_path = f"./{font_name}/{font_name.lower()}.rb" + with open(formula_path, 'w') as formula_file: + formula_file.write(formula_content) + print(f"Ruby file created at {formula_path}") + + +def main(): + font_folder = input("Enter the location of the font folder: ").strip() + + if not os.path.isdir(font_folder): + print("The folder does not exist. Please provide a valid path.") + return + + font_files = get_font_files(font_folder) + if not font_files: + print("No .ttf or .otf font files found in the specified folder.") + return + + font_name = input("Enter the name of the font (e.g., FiraCode): ").strip() + + # Create the folder for the font + font_folder_path = Path(f"./{font_name.lower()}") + font_folder_path.mkdir(exist_ok=True) + + zip_path = f"./{font_name.lower()}/{font_name.lower()}.zip" + create_zip(font_files, font_folder, zip_path) + + sha256_hash = generate_sha256(zip_path) + print(f"SHA256 hash generated: {sha256_hash}") + + create_ruby_file(font_name, zip_path, sha256_hash) + print(f"Font {font_name} has been added successfully.") + + +if __name__ == "__main__": + main() \ No newline at end of file