import os import re # Directory with the font files directory = './' # Get list of font files font_files = os.listdir(directory) # Initialize an empty list for the typefaces typefaces = [] # Loop over the font files for file in font_files: # Strip the file extension name_weight, extension = os.path.splitext(file) # Only process .ttf, .otf, .woff and .woff2 files if extension.lower() not in ['.ttf', '.otf', '.woff', '.woff2']: continue # Split the name and weight match = re.match(r'(.*)_(\d+)(I)?', name_weight) if match: name, weight, is_italic = match.groups() else: name = name_weight weight = "400" is_italic = None # Check if the typeface is already in the list for typeface in typefaces: if typeface['name'] == name: break else: # If the typeface is not in the list, add a new one typeface = { "name": name, "fonts" : [], "tags" : ["sans-serif"], } typefaces.append(typeface) # Add file to the typeface font_descriptor = { 'weight': weight, 'style': 'italic' if is_italic else 'normal', 'file': file, 'format': 'truetype' if extension == '.ttf' else 'opentype' if extension == '.otf' else 'woff' if extension == '.woff' else 'woff2' } typeface['fonts'].append(font_descriptor) # Create CSS files for typeface in typefaces: css_content = '' for font in typeface['fonts']: css_content += f""" @font-face {{ font-family: '{typeface["name"]}'; src: url('{font["file"]}') format('{font["format"]}'); font-weight: {font["weight"]}; font-style: {font["style"]}; }} """ with open(f'{typeface["name"].lower()}.css', 'w') as f: f.write(css_content)