brz9-cdn/fonts/base/00_build_css.py

69 lines
1.8 KiB
Python

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)