Skip to content

Instantly share code, notes, and snippets.

@jlgarridol
Last active December 25, 2016 00:30
Show Gist options
  • Save jlgarridol/3ec188afaef4cd463f168815e98400c2 to your computer and use it in GitHub Desktop.
Save jlgarridol/3ec188afaef4cd463f168815e98400c2 to your computer and use it in GitHub Desktop.
Script en Python 3 para Linux para generar un JSON con todas las fuentes instaladas
#!/usr/bin/python3
import os.path
import subprocess
import json
subFamily = ["Thin","ExtraLight","Light","Regular","Medium","SemiBold","Bold","ExtraBold","Black"]
italic = "Italic"
folder = "/usr/share/fonts/TTF/"
ls = "ls "
cutDash1 = "cut -f1 -d\"-\""
cutDash2 = "cut -f2 -d\"-\""
cutPoint = "cut -f1 -d\".\"" #Algunas fuentes regulares no ponen Regular, para quitar el ttf
piper = "|"
extension = ".ttf"
#Leemos la carpeta
familyFile = str(subprocess.check_output(ls+folder+piper+cutPoint,shell=True))
#Esto es para quitar el principio y final que me pone subprocess
familyFile = familyFile.replace("b'","")
familyFile = familyFile.replace("'","")
#Quito de todos los nombres la subfamilia y la extensión
familyFile = familyFile.replace(extension,"")
familyFile = familyFile.replace("-"+italic,"")
for sub in subFamily:
familyFile = familyFile.replace("-"+sub+italic,"")
familyFile = familyFile.replace("-"+sub,"")
family = familyFile.split("\\n") #Lo convierto en una lista
family.pop(len(family)-1) #Quito el espacio final que me crea
#Los valores duplicados no importan porque son la clave del diccionario
#Para cada familia tendremos un fichero del diccionario
fonts = {}
for f in family:
if f not in fonts: #Solamente si no se ha añadido para evitar ciclos inútiles
fonts[f]=[] #Por cada familia tendremos una lista con las subfamilias
#Ahora recorremos las distintas subfamilias
for sub in subFamily:
if os.path.isfile(folder+f+"-"+sub+extension):
fonts[f].append(sub)
if os.path.isfile(folder+f+"-"+sub+italic+extension):
fonts[f].append(sub+italic)
elif sub == "Regular": #Cuando sea regular
if os.path.isfile(folder+f+extension): #Si no pone en el nombre nada de regular
fonts[f].append(sub)
if os.path.isfile(folder+f+"-"+italic+extension): #Para las Regular Italic
fonts[f].append(italic)
finalFile = json.dumps(fonts)
print(finalFile)
@jlgarridol
Copy link
Author

He hecho algunas mejoras permitiendo que las fuentes que contaban con - en el nombre no se vieran afectadas o aquellas que no respetaban el estándar del nombre de subfamilia (siendo asignadas a Regular)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment