Regularium expresionum… o algo así.
Thursday 10 de May de 2007
(Se supone que sea “De Expresiones regulares” en latín… )
El otro día posteé diciendo que el CSS quedó un asco, y me quedé pensando en eso. Se me ocurrió una forma: usar alguna mezcla de sed y awk para organizar y agrupar los elementos… pero no tengo ni idea de cómo se usa awk.
Después de un rato se me ocurrió una forma (y más de un linuxero experto me va a querer pegar por usar algo tan feo, pero anda): primero pongo todo en una línea, y después se resuelve fácil lo demás con expresiones regulares.
El problema empezó con la primera linea: sed 's/\n//g' no hacía lo que esperaba caso. Unos minutos de búsqueda me llevaron a una forma que sí sirvió: sed ':a; $!N; s/\n//; ta'. (:a crea una nueva etiqueta, la expresión junta 2 líneas, y ta hace que se repita mientras haya habido un cambio.)
Después, sacamos los comentarios (por un comando más adelante se vuelven inútiles igual): sed 's/\/\*.*?\*\///g'.
Ahora viene lo interesante: primero separamos los grupos de comas (ejemplo p, a {border-bottom: 1px solid red;} por p {border-bottom: 1px solid red;} a {border-bottom: 1px solid red;}): sed ':a; s/\([^,]*\), *\([^{}]*\)\({[^}]*}\)/\1 \3 \2 \3/; ta’. (Esto probablemente agrande el archivo bastante, pero esto no es para comprimirlo, sino para editarlo; hay páginas con compresores que están muy buenas, si se necesita ahorrar ancho de banda.)
Ahora hay que agrupar los estilos que modifiquen las mismas etiquetas; quizá hay una mejor solución con awk, pero así anda: primero ponemos un estilo por línea: sed 's/}/}\n/g', y los ordenamos con sort.
Haciendo esto ví que había 3 descripciones distintas de margin para un mismo elemento…
Y… bueno, ahora se puede manejar más fácil;
Para indentar más cómodamente, podemos poner sed 's/\([{};]\)/\1\n’, y trabajamos cómodos; también podríamos agrupar los elementos antes, con una expresión más… ¿Qué tal?
Me pasé un par de noches hasta bien tarde jugando con eso… creo que tengo que agregar a la lista de “Cómo darte cuenta que sos un geek” “Pasarse toda la noche jugando con la consola y archivos de texto, y divertirte”.
Wednesday 30 de May de 2007, 4:42 pm
Parecen complicadas esas expresiones :-)
Me preguntaba si no inagurarias un Blogroll e intercambiamos enlaces ? ;)
Mi blog es de tecnologia y a veces tambien hablo de programacion ….
En fin…. es mas tecno.com
Si te parece podriamos intercambiar enlaces…. asi que podes avisarme por correo a pbozzolo@gmail.com
Salu2!
Wednesday 30 de May de 2007, 11:17 pm
Sólo parecen, al principio, pero después te das cuenta que es engañoso. Lo único es aprenderse los elementos y cómo relacionarlos.
Wednesday 30 de May de 2007, 11:22 pm
Ah, y, yo pienso que en un blogroll van los blogs que te gustan; si querés poner un link al mio, bienvenido seas, pero sólo voy a poner un link al tuyo si me gusta.