Underc0de

Programación Scripting => Python => Mensaje iniciado por: Once en Agosto 30, 2014, 09:00:06 PM

Título: SmartCSS
Publicado por: Once en Agosto 30, 2014, 09:00:06 PM

SmartCSS
uso
(http://i.imgur.com/LYCTk3k.png)
CSS entrada
(http://i.imgur.com/FcqAaJd.png)
CSS salida
(http://i.imgur.com/aUKTKUU.png?1)

Si alguien alguna vez ha tenido que modificar el diseño de una web (CSS) se podra dar cuenta que si en CSS hubieran variables, el diseño sería mucho  más fácil ya que si en algún momento hay que modificar el color de la web (o alguna otra propiedad) hay que cambiarlo todo a mano. El script lo programé cuando estaba modificando el diseño del foro y lo dejo acá por si a alguien le interesa, solo uso un par de expresiones regulares muy sencillas y no tiene control de errores.

Código (python) [Seleccionar]
import re
import os
import sys


variables = []
diccionario = {}

def reemplazar(x):
    x = x.group()
    print "reemplazando:", diccionario[x[1:]]
    return diccionario[x[1:]]
   
def armar(x):
    x = x.group()
    variables.extend(re.findall("(.*?):(.*?);", x))
    for variable in variables:
        diccionario.update(dict([map(lambda x: x.strip(), variable)]))
    return "/*Generado por SmartCSS - Once*/"

if len(sys.argv) > 2:
    css_source =  sys.argv[1]
    css_final = sys.argv[2]
    if not os.path.isfile(css_source):
        print "archivo ingresado incorrecto"
        exit()

with open(css_source) as archivo:
    css = archivo.read()

encontrar = re.compile(r"(vars.*?{.*?})", re.MULTILINE | re.DOTALL)
salida = encontrar.sub(armar, css)

expresion = "!" + "|!".join(diccionario.keys())

final = re.sub("(%s)" % expresion, reemplazar, salida)

with open(css_final, "w") as css_final:
    css_final.write(final)


El funcionamiento es simple, Las variables se declaran en un bloque vars {} usando la misma sintaxis de CSS y se invoca la variable donde se quiere usar anteponiendo al nombre de la variable un !

Saludos!