|Portada|Blog|Space|
[Índice] > Aprolijamiento de código a escala global
Como no podía ser menos, aquí volvemos con una entrega más de mi blog, y
para no perder la costumbre es que nuevamente vamos a mostrar unos
lindos ejemplos prácticos en sed.
¿Cómo aprolijar el código fuente?
A lo largo de la historia se han presentado varias soluciones, aunque
ninguna perfecta, la más cercana parecería ser usar el programa indent,
aunque lamentablemente este programa no soporta la sintaxis que a mí
tanto me gusta.
Es bien sabido también que las tareas hay que modularizarlas, por eso
ahora vamos a ir separando el problema en secciones y mostrando aquí
soluciones prácticas usando pequeños scripts en sed.
Problema 1:
Gente que por alguna razón se entretiene poniendo espacios al final de
las líneas. La solución es fácil.
Solución:
sed -e 's/[ ]*$//'
^esto es un espacio seguido de una tabulación
Problema 2:
Tipos que abren las llaves en líneas separadas. Ejemplo:
mi_funcion(void)
{
...
Solución:
sed -e ':a;N;s/) *\n[ ]*{/) {/;t;P;s/.*\n//;ta'
^esto es un espacio seguido de una tabulación
Problema 3:
Tipos que ponen los tipos de datos en la línea anterior a la
definición de la función. Ejemplo:
int *
mi_funcion(){
...
Solución:
Habiendo solucionado los problemas anteriores procedemos a ejecutar el
siguiente script:
sed -e ':a;N;/[^} ] *\n[^ ].*{/s/\n/ /;t;P;s/.*\n//;ta'
^esto es un espacio con una tabulación
Problema 4:
Gente que coloca los punteros de forma aleatoria.
Solución:
sed -e 's/\([[:alnum:]_]\) *\* */\1 * /g'
sed -e 's/\(^[[:blank:]]*\|[^[:alnum:]_ ] *\)\* */\1*/g'
Problema 5:
Espacio adictos segunda parte, gente que le gusta poner muchos
espacios entre palabras.
Solución:
sed -e 's/\([[:alnum:]_]\) *\([[:alnum:]_]\)/\1 \2/g'
Problema 6:
Finalmente hay gente que no le gusta colocar los márgenes
correctamente, así que a esa gente les digo esto:
Solución:
sed -e '/^$/b;/[[:blank:]]*#/b;s/^[[:blank:]]*//
/} *\(\/\*\([^*]\|\*[^/]\)*\*\/ *\)*\(\/\/.*\)\?$/{x;s/ -*$//;x};G
ta;:a;s/\(\n.*\)-/\1 /;ta;s/\(.*\)\n\(.*\)/\2\1/
/{ *\(\/\*\([^*]\|\*[^/]\)*\*\/ *\)*\(\/\/.*\)\?$/{x;s/$/ /;x}
/[^{;} ] *\(\/\*\([^*]\|\*[^/]\)*\*\/ *\)*\(\/\/.*\)\?$/{x;s/$/--/;x}
/; *\(\/\*\([^*]\|\*[^/]\)*\*\/ *\)*\(\/\/.*\)\?$/{x;s/-*$//;x}'
Nota: Los scripts anteriores deberán ser ejecutados en orden sobre el
archivo en cuestión para obtener el resultado deseable.
---------
Los documentos en este sitio se encuentran licenciados bajo la GFDL.
Ver comentarios: [Hay i comentarios]
Para agregar un comentario: agregue a la URL: ?do=show_comment_form (explicación)