diff --git a/.fontfoldercleanup/__init__.py b/.fontfoldercleanup/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/.fontfoldercleanup/cleanup_font_folders.py b/.fontfoldercleanup/cleanup_font_folders.py new file mode 100755 index 0000000..4f3ae0a --- /dev/null +++ b/.fontfoldercleanup/cleanup_font_folders.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +import os +import shutil +import argparse +from pathlib import Path + +class FontFolderCleaner: + def __init__(self, font_location): + self.font_location = Path(font_location) + self.required_dirs = ['ttf', 'otf', 'web', 'other_files'] + self.web_extensions = {'.woff', '.woff2', '.eot', '.svg'} + self.font_extensions = {'.ttf', '.otf'} + + def create_required_directories(self, folder_path): + """Create required subdirectories if they don't exist.""" + for dir_name in self.required_dirs: + dir_path = folder_path / dir_name + if not dir_path.exists(): + dir_path.mkdir(parents=True) + print(f"Created directory: {dir_path}") + + def get_target_directory(self, file_path): + """Determine the target directory based on file extension.""" + ext = file_path.suffix.lower() + if ext == '.ttf': + return 'ttf' + elif ext == '.otf': + return 'otf' + elif ext in self.web_extensions: + return 'web' + else: + return 'other_files' + + def move_file_to_correct_directory(self, file_path, folder_path): + """Move file to the appropriate subdirectory.""" + if file_path.name == '.DS_Store': + file_path.unlink() + print(f"Removed .DS_Store file: {file_path}") + return + + target_dir = self.get_target_directory(file_path) + target_path = folder_path / target_dir / file_path.name + + if file_path != target_path: + shutil.move(str(file_path), str(target_path)) + print(f"Moved {file_path.name} to {target_dir}/") + + def cleanup_folder(self, folder_path): + """Clean up a single font folder.""" + folder_path = Path(folder_path) + + # Skip if not a font folder + if not folder_path.name.startswith('font-'): + print(f"Skipping non-font folder: {folder_path}") + return + + print(f"\nProcessing folder: {folder_path}") + + # Create required directories + self.create_required_directories(folder_path) + + # Move files to appropriate directories + for item in folder_path.iterdir(): + if item.is_file(): + self.move_file_to_correct_directory(item, folder_path) + elif item.is_dir() and item.name not in self.required_dirs: + # Handle nested directories + for file in item.rglob('*'): + if file.is_file(): + self.move_file_to_correct_directory(file, folder_path) + # Remove empty directories + if not any(item.iterdir()): + item.rmdir() + print(f"Removed empty directory: {item}") + + def cleanup_all_folders(self): + """Clean up all font folders in the font location.""" + for item in self.font_location.iterdir(): + if item.is_dir() and not item.name.startswith('.'): + self.cleanup_folder(item) + +def main(): + parser = argparse.ArgumentParser(description='Clean up font folders and organize files.') + parser.add_argument('--path', type=str, default='../font_files', + help='Path to the font files directory (default: ../font_files)') + args = parser.parse_args() + + # Convert relative path to absolute path + font_location = Path(__file__).parent / args.path + font_location = font_location.resolve() + + if not font_location.exists(): + print(f"Error: Font location does not exist: {font_location}") + return + + cleaner = FontFolderCleaner(font_location) + cleaner.cleanup_all_folders() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.fontfoldercleanup/font_folder_cleanup.py b/.fontfoldercleanup/font_folder_cleanup.py deleted file mode 100644 index 018b9a5..0000000 --- a/.fontfoldercleanup/font_folder_cleanup.py +++ /dev/null @@ -1,311 +0,0 @@ -import os -import time -from fileinput import filename -repo_location = '/Users/fishy/custom_fonts' - -os.system(f"cd ") - -font_location = f'{repo_location}/font_files' - -bad_phrases = [' Free', - '-medium', - '-Medium', - '_3', - ' by jeremy vessey', - ' teenage foundry', - ' font', - 'TBJ ', - ' - Zarma Type', - ' Only', - ' Personal use', - ' PERSONAL USE', - ' SVG', - ' Free Non-Commercial Use', - ' Free for Personal Use', - ' Free for personal use', - ' Personal Use', - ' Personl Use Only', - ' Personl Use', - ' Free To Try Personal Use Only', - ' - Personal Use Only', - ' - DCU', - ' - Demo', - ' - Free for Personal Use', - ' - Free for personal use', - ' - Free for personal use only', - ' Demo', - ' DCU', - ' To Try', - ' - Free Personal Use Only', - ' - Free Personal Use', - ' - Personal use Only', - ' -', - "'", - 'Non-Commercial Use', - ] - -def remove_ds_store_files(path=font_location): - """ - Recursively removes .DS_Store files within the given path. - - Args: - path (str): The path to the directory to be checked and cleaned. - - Returns: - None - """ - for root, dirs, files in os.walk(path): - for file in files: - if file == '.DS_Store': - file_path = os.path.join(root, file) - os.remove(file_path) - print(f"Removed .DS_Store file: {file_path}") - -def remove_empty_folders(path=font_location): - """ - Recursively removes empty directories within the given path, except for .git and .env directories and their subdirectories. - - Args: - path (str): The path to the directory to be checked and cleaned. - - Returns: - None - """ - for root, dirs, files in os.walk(path, topdown=False): - for dir in dirs: - dir_path = os.path.join(root, dir) - if '.git' in dir_path.split(os.sep) or '.env' in dir_path.split(os.sep) or '.fontfoldercleanup' in dir_path.split(os.sep): - continue - if not os.listdir(dir_path): - os.rmdir(dir_path) - print(f"Removed empty folder: {dir_path}") - -# Usage -def remove_bad_phrases(path=font_location): - """ - Recursively removes bad phrases from the names of directories at the root of the given path. - - Args: - path (str): The path to the directory to be checked and cleaned. - - Returns: - None - """ - while True: - removed_any = False - for root, dirs, files in os.walk(path): - for dir in dirs: - dir_path = os.path.join(root, dir) - for phrase in bad_phrases: - if phrase in dir: - new_dir = dir.replace(phrase, '') - new_dir_path = os.path.join(root, new_dir) - os.rename(dir_path, new_dir_path) - print(f"Renamed directory: {dir_path} -> {new_dir_path}") - removed_any = True - break # Exit the loop after renaming to avoid modifying the same directory multiple times - if not removed_any: - break - # time.sleep(1) # Delay to allow the file system to settle - -def collect_orphaned_fonts(path=font_location): - """ - Collects orphaned font files at the root of the given path. - - Args: - path (str): The path to the directory to be checked for orphaned font files. - - Returns: - list: A list of orphaned font files. - """ - orphaned_fonts = [] - for file in os.listdir(path): - file_path = os.path.join(path, file) - if os.path.isfile(file_path) and (file.endswith('.otf') or file.endswith('.ttf')): - # Create a directory for the orphaned font - orphan_folder = os.path.join(path, os.path.splitext(file)[0]) - if not os.path.exists(orphan_folder): - os.mkdir(orphan_folder) - - # Move the font file into the new directory - new_path = os.path.join(orphan_folder, file) - os.rename(file_path, new_path) - orphaned_fonts.append(new_path) - print(f"Moved {file_path} to {new_path}") - - return orphaned_fonts - -def lowercase_all_the_folders(root_path=font_location): - """ - Lowercases all the folders recursively in the root_path. - - Args: - root_path (str): The path to the directory to be checked and cleaned. - - Returns: - None - """ - for root, dirs, files in os.walk(root_path): - for dir in dirs: - dir_path = os.path.join(root, dir) - new_dir_path = os.path.join(root, dir.lower()) - os.rename(dir_path, new_dir_path) - print(f"Renamed directory: {dir_path} -> {new_dir_path}") - - -def add_font_folders_to_each(root_path=font_location): - for dir in os.listdir(root_path): - dir_path = os.path.join(root_path, dir) - if os.path.isdir(dir_path): - if dir.startswith('.'): - continue - #get recursive list of files in the directory - files = os.listdir(dir_path) - # print(files) - for file in files: - # if file extension is otf, create a folder named oft if it doesn't exist, and move the file there - if file.endswith('.otf'): - new_dir_path = os.path.join(dir_path, 'otf') - if not os.path.exists(new_dir_path): - os.mkdir(new_dir_path) - new_file_path = os.path.join(new_dir_path, file) - os.rename(os.path.join(dir_path, file), new_file_path) - print(f"Moved {file} to {new_file_path}") - # if file extension is ttf, create a folder named oft if it doesn't exist, and move the file there - elif file.endswith('.ttf'): - new_dir_path = os.path.join(dir_path, 'ttf') - if not os.path.exists(new_dir_path): - os.mkdir(new_dir_path) - new_file_path = os.path.join(new_dir_path, file) - os.rename(os.path.join(dir_path, file), new_file_path) - print(f"Moved {file} to {new_file_path}") - else: - # if file is not a font file,move it to a folder called "other" - new_dir_path = os.path.join(dir_path, 'other') - if not os.path.exists(new_dir_path): - os.mkdir(new_dir_path) - new_file_path = os.path.join(new_dir_path, file) - os.rename(os.path.join(dir_path, file), new_file_path) - -def unzip_if_no_fonts(root_path=font_location): - #if there are no font files, find the zip file and unzip it - for dir in os.listdir(root_path): - dir_path = os.path.join(root_path, dir) - if os.path.isdir(dir_path): - if dir.startswith('.'): - continue - #get recursive list of files in the directory - files = os.listdir(dir_path) - # print(files) - font_files = [] - for file in files: - if file.endswith('.otf') or file.endswith('.ttf'): - font_files.append(file) - if len(font_files) == 0: - zip_files = [] - for file in files: - if file.endswith('.zip'): - zip_files.append(file) - if len(zip_files) == 1: - zip_file = zip_files[0] - zip_file_path = os.path.join(dir_path, zip_file) - os.system(f'unzip {zip_file_path} -d {dir_path}') - print(f"Unzipped {zip_file_path}") - -def remove_setup_complete_files(root_path=font_location): - # walk through the root path directory and remove all files named ".setup_complete" - for root, dirs, files in os.walk(root_path): - for file in files: - if file == '.setup_complete': - file_path = os.path.join(root, file) - os.remove(file_path) - print(f"Removed .setup_complete file: {file_path}") - -def remove_spaces_in_dir_names(root_path=font_location): - for root, dirs, files in os.walk(root_path, topdown=False): - for dir in dirs: - dir_path = os.path.join(root, dir) - if ' ' in dir: - new_dir = dir.replace(' ', '-') - #lowercase the new directory name - while new_dir.endswith('-'): - new_dir = new_dir[:-1] - new_dir = new_dir.lower() - new_dir_path = os.path.join(root, new_dir) - os.rename(dir_path, new_dir_path) - print(f"Renamed directory: {dir_path} -> {new_dir_path}") - - -def prepend_folder_name_to_font_dash(root_path=font_location): - for dir in os.listdir(root_path): - dir_path = os.path.join(root_path, dir) - if os.path.isdir(dir_path): - #if the directory doesn't start with 'font-', already, prepend it - if not dir.startswith('font-'): - new_dir = f'font-{dir}' - new_dir_path = os.path.join(root_path, new_dir) - os.rename(dir_path, new_dir_path) - print(f"Renamed directory: {dir_path} -> {new_dir_path}") - - - -def lowercase_and_dash_file_names(root_path=font_location): - for root, dirs, files in os.walk(root_path): - for file in files: - file_path = os.path.join(root, file) - new_file_path = os.path.join(root, file.lower()) - # Remove spaces in the file names - new_file_path = new_file_path.replace(' ', '-') - # Check if the file exists before renaming - if os.path.exists(file_path): - os.rename(file_path, new_file_path) - print(f"Renamed file: {file_path} -> {new_file_path}") - else: - print(f"File not found: {file_path}") - - -def dont_use_dots_for_font_files(root_path=font_location): - for root, dirs, files in os.walk(root_path): - for file in files: - file_path = os.path.join(root, file) - extensions = ['.otf', '.ttf', '.ttc', '.pdf', '.woff', '.woff2'] - if any(file_path.endswith(ext) for ext in extensions): - new_file_path = None - for x in ['.','_', ' ', '-', '.-','--']: - if file.startswith(x): - new_file_path = os.path.join(root, file.lstrip(x)) - if not os.path.exists(new_file_path): - os.rename(file_path, new_file_path) - print(f"Renamed file: {file_path} -> {new_file_path}") - else: - print(f"Skipped renaming {file_path} as {new_file_path} already exists") - new_file_path = None - -def remove_double_and_triple_dashes(root_path=font_location): - ## remove double and triple dashes from file names - ## should loop until no more double or triple dashes are found - for root, dirs, files in os.walk(root_path): - for file in files: - file_path = os.path.join(root, file) - #replace -- or --- with - - if '--' in file or '---' in file: - new_file = file.replace('--','-') - new_file = new_file.replace('---','-') - new_file_path = os.path.join(root, new_file) - os.rename(file_path, new_file_path) - print(f"Renamed file: {file_path} -> {new_file_path}") - -if __name__ == '__main__': - remove_ds_store_files() - remove_empty_folders() - collect_orphaned_fonts() - remove_bad_phrases() - lowercase_all_the_folders() - remove_spaces_in_dir_names() - lowercase_and_dash_file_names() - prepend_folder_name_to_font_dash() - dont_use_dots_for_font_files() - remove_double_and_triple_dashes() - remove_double_and_triple_dashes() - remove_ds_store_files() - remove_empty_folders() diff --git a/.fontfoldercleanup/iterate.py b/.fontfoldercleanup/iterate.py deleted file mode 100644 index d395164..0000000 --- a/.fontfoldercleanup/iterate.py +++ /dev/null @@ -1,51 +0,0 @@ -import os -import subprocess -import sys - -def main(): - mydir = os.path.dirname(__file__) - - # Define the absolute path to the prep script - prep_script = os.path.join(mydir, 'prep 1 font.sh') - - # Activate python environment - env_activate = os.path.join(mydir, '.env/bin/activate') - subprocess.run(['source', env_activate], shell=True, check=True) - - # Move orphans before we do anything else - orphans_script = os.path.join(mydir, 'orphans.py') - subprocess.run(['python3', orphans_script], check=True) - - # Check if the prep script exists - if not os.path.isfile(prep_script): - print(f"Prep script not found: {prep_script}") - sys.exit(1) - - # Ensure the prep script is executable - os.chmod(prep_script, 0o755) - - # Check if the prep script is executable - if not os.access(prep_script, os.X_OK): - print(f"Prep script not executable: {prep_script}") - sys.exit(1) - - # Define the absolute path to the font_files directory - font_files_dir = os.path.join(mydir, 'font_files') - - # Check if the font_files directory exists - if not os.path.isdir(font_files_dir): - print(f"font_files directory not found: {font_files_dir}") - sys.exit(1) - - # Iterate over each folder in font_files - for folder in os.listdir(font_files_dir): - folder_path = os.path.join(font_files_dir, folder) - if os.path.isdir(folder_path): - os.chdir(folder_path) - subprocess.run(['zsh', prep_script], check=True) - os.chdir('..') - else: - print(f"No such directory: {folder}") - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/.fontfoldercleanup/iterate.sh b/.fontfoldercleanup/iterate.sh deleted file mode 100644 index 1393a4c..0000000 --- a/.fontfoldercleanup/iterate.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/zsh - -mydir=$(dirname "$0") - -# Define the absolute path to the prep script -PREP_SCRIPT="$(cd "$(dirname "$0")" && pwd)/prep 1 font.sh" - -#activate python environment -source "$mydir"/.env/bin/activate - -#move orphans before we do anything else -python3 "$mydir"/orphans.py - -# Check if the prep script exists -if [[ ! -f "$PREP_SCRIPT" ]]; then - echo "Prep script not found: $PREP_SCRIPT" - exit 1 -fi - -# Ensure the prep script is executable -chmod u+x "$PREP_SCRIPT" - -# Check if the prep script is executable -if [[ ! -x "$PREP_SCRIPT" ]]; then - echo "Prep script not executable: $PREP_SCRIPT" - exit 1 -fi - -# Define the absolute path to the font_files directory -FONT_FILES_DIR="$(cd "$(dirname "$0")" && pwd)/font_files" - -# Check if the font_files directory exists -if [[ ! -d "$FONT_FILES_DIR" ]]; then - echo "font_files directory not found: $FONT_FILES_DIR" - exit 1 -fi - -# Iterate over each folder in font_files -for folder in "$FONT_FILES_DIR"/*; do - if [[ -d "$folder" ]]; then - cd "$folder" || continue - zsh "$PREP_SCRIPT" - cd .. - else - echo "No such directory: $folder" - fi -done \ No newline at end of file diff --git a/.fontfoldercleanup/orphans.py b/.fontfoldercleanup/orphans.py deleted file mode 100644 index 05565b1..0000000 --- a/.fontfoldercleanup/orphans.py +++ /dev/null @@ -1,21 +0,0 @@ -import os - -# Define the absolute path to the font_files directory -FONT_FILES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'font_files') -# find all files that are otfs or ttfs at the root of the font_files directory -def handle_orphans(font_files_dir=FONT_FILES_DIR): - FONT_FILES = [file for file in os.listdir(FONT_FILES_DIR) if file.endswith('.otf') or file.endswith('.ttf')] - print(FONT_FILES) - for file in FONT_FILES: - #create a directory for the file - new_dir_path = os.path.join(FONT_FILES_DIR, file.split('.')[0]) - if not os.path.exists(new_dir_path): - os.mkdir(new_dir_path) - print(f"Created directory: {new_dir_path}") - #move the file to the directory - new_file_path = os.path.join(new_dir_path, file) - os.rename(os.path.join(FONT_FILES_DIR, file), new_file_path) - print(f"Moved {file} to {new_file_path}") -if __name__ == '__main__': - - handle_orphans() \ No newline at end of file diff --git a/.fontfoldercleanup/prep 1 font.sh b/.fontfoldercleanup/prep 1 font.sh deleted file mode 100755 index f57f2a0..0000000 --- a/.fontfoldercleanup/prep 1 font.sh +++ /dev/null @@ -1,48 +0,0 @@ -#! /bin/zsh - - - -#uncomment if you want to delete all .setup_complete files and process everything -#find . -name '*.setup_complete' -type f -delete - -#if file name .setup_complete exists, exit -if [ -f .setup_complete ]; then - echo "This folder has already been prepped. Please delete the .setup_complete file if you would like to run this script again." - exit -fi - - -#if current working directory is named font_files or custom_fonts, exit -if [[ $PWD == *"font_files" ]] || [[ $PWD == *"custom_fonts" ]]; then - echo "You are in the wrong directory. Please move to the individual font folder." - exit -fi - -#recursively find all .zip files and unzip them -find . -name '*.zip' -exec unzip {} \; - -# Make otf and ttf folders if they don't exist -mkdir -p otf ttf "other files" - -# Recurse through all folders and subfolders and move files that are not .ttf or .otf into the "other files" folder -find . -type f -exec mv {} "other files" \; - -# Recurse through all folders and subfolders and delete all .DS_Store files -find . -name '.DS_Store' -type f -delete -# Recurse through all folders and subfolders and delete all .g2n files -find . -name '*.g2n' -type f -delete -find . -name '*.ofm' -type f -delete -find . -name '*.cfg' -type f -delete -find . -name '*.zip' -type f -delete - -# Recurse through all folders and subfolders and move all .ttf files into the ttf folder -find . -name '*.ttf' -type f -exec mv {} ttf \; -# Recurse through all folders and subfolders and move all .ttc files into the ttf folder -find . -name '*.ttc' -type f -exec mv {} ttf \; -# Recurse through all folders and subfolders and move all .otf files into the otf folder -find . -name '*.otf' -type f -exec mv {} otf \; - -# Recurse through all folders and subfolders and delete all empty folders -find . -type d -empty -delete -# create a .setup_complete file to indicate that the folder has been prepped -touch .setup_complete \ No newline at end of file diff --git a/.fontfoldercleanup/remove_ds_and_clean_empty_folders.py b/.fontfoldercleanup/remove_ds_and_clean_empty_folders.py deleted file mode 100644 index b0863f7..0000000 --- a/.fontfoldercleanup/remove_ds_and_clean_empty_folders.py +++ /dev/null @@ -1,17 +0,0 @@ -import font_folder_cleanup -import os - -def git_cleanup(): - os.system("cd $(git rev-parse --show-toplevel) && git stash push -- .fontfoldercleanup/ && git reset --hard && git clean -fdx -e .env/ -e .idea/ -e .fontfoldercleanup/") - -def apply_stash(): - os.system("cd $(git rev-parse --show-toplevel) && git stash apply") - -if __name__ == '__main__': - # Clean up git repository - git_cleanup() # Clean up git repository - font_folder_cleanup.remove_ds_store_files() # Remove .DS_Store files from the repository - font_folder_cleanup.remove_setup_complete_files() # Remove setup complete files from the repository - font_folder_cleanup.remove_empty_folders() # Remove empty folders from the repository - git_cleanup() # Clean up git repository again after removing files and folders - apply_stash() # Apply the stash to restore the files that were removed \ No newline at end of file diff --git a/.fontfoldercleanup/repo_tasks.py b/.fontfoldercleanup/repo_tasks.py deleted file mode 100644 index c879b92..0000000 --- a/.fontfoldercleanup/repo_tasks.py +++ /dev/null @@ -1,76 +0,0 @@ -import requests, os - -GITEA_URL = "https://git.trtmn.io" -API_TOKEN = "315d5a6d692eeea061f714725f0d116b819ea62b" -organization = "fonts" - -headers = { - "Authorization": f"token {API_TOKEN}", - "Content-Type": "application/json" -} - -def get_folders_in_folder(path="./font_files"): - return [file for file in os.listdir(path) if os.path.isdir(os.path.join(path, file))] - -folders = ["folder-1", "folder-2", "folder-3", "folder-4", "folder-5"] - -# def make_local_repos(folder_list=folders): -# for folder in folder_list: -# # Create a local folder -# print(f"Creating folder {folder}") -# os.makedirs(folder, exist_ok=True) -# # Create a README.md file in the folder -# with open(f"{folder}/README.md", "w") as f: -# f.write(f"# {folder}\n\nThis is a repo for {folder}") -# #git init -# os.system(f"cd {folder} && git init") -# #git create branch "main" and switch to it -# os.system(f"cd {folder} && git checkout -b main") -# #git add README.md -# os.system(f"cd {folder} && git add README.md") -# #git commit -m "Initial commit" -# os.system(f"cd {folder} && git commit -m 'Initial commit'") -# #git remote add origin -# os.system(f"cd {folder} && git remote add origin {GITEA_URL}/{organization}/{folder}.git") -# #git push -u origin master -# os.system(f"cd {folder} && git push --force -u origin main") - - -# def clone_repos(folder_list=folders): -# for folder in folder_list: -# os.system(f"git clone {GITEA_URL}/{organization}/{folder}.git") - -def add_as_submodule(folder_list=folders): - for folder in folder_list: - os.system(f"git submodule add {GITEA_URL}/{organization}/{folder}.git") - - -def create_repos(folder_list=folders): - for folder in folder_list: - data = { - "name": folder, - "description": f"Repo for {folder}", - "private": False, - "auto_init": True - } - response = requests.post(f"{GITEA_URL}/api/v1/orgs/{organization}/repos", json=data, headers=headers) - if response.status_code == 201: - print(f"Successfully created repo for {folder}") - else: - print(f"Failed to create repo for {folder}: {response.status_code} {response.text}") - -def delete_repos(folder_list=folders): - for folder in folder_list: - response = requests.delete(f"{GITEA_URL}/api/v1/repos/{organization}/{folder}", headers=headers) - if response.status_code == 204: - print(f"Successfully deleted repo for {folder}") - else: - print(f"Failed to delete repo for {folder}: {response.status_code} {response.text}") - - -if __name__ == '__main__': - # create_repos() - # make_local_repos() - # add_as_submodule() - # delete_repos() - print(get_folders_in_folder()) \ No newline at end of file