Colorindo código fonte em C com o SED

Publicado por Marcos Paulo Ferreira 25/07/2009

[ Hits: 6.629 ]

Homepage: http://daemoniolabs.wordpress.com

Download c2html.sed




Este script inacabado recebe um código em C e retorna o mesmo código colorido, só que em formato HTML. Posteriormente você pode transformar este arquivo HTML em PDF.

Qualquer ajuda na manutenção do código será muito bem vinda.

Daemonio

  



Esconder código-fonte

#!/bin/sed -f

#
#Autor: Daemonio
#Email: undefinido at gmail.com
#Fri Jun 26 00:09:55 BRT 2009
#
#Script SED que colori um codigo fonte em C
#retorando o codigo colorido em um arquivo
#html.
#
#[sintaxe] c2html.sed codigo.c > codigo.html
#


1 i\
<html>\
<head>\
<title>** c2html.sed - Sed Colorido **</title>\
</head>\
<body>\
<pre>

#Junta todas as linhas que contem um '\' no final.
:a
/\\$/ {
   N
   ba
}

#
#Substituir pelos (alguns) chars especiais do HTML
s/&/\&/g
s/</\</g
s/>/\>/g

#
#Includes e defines
#
#Codigo para #ifdef e companhia faltando. :(
#
/^[ \t]*\(#include\|#define\)/ {
s@"@\"@g
s@.*@<font color='green'>&</font>@
#Nao ha mais nada para colorir (va para o fim do script).
b
}

#
#Um caracter C entre ''
s@'\(..\?\)'@<font color='red'>&</font>@

#
#Colorir os digitos (rosa escuro)
s@\b\([[:digit:]]\+\)\b@<font color='#FF0099'>\1</font>@g

#
#Palavras reservadas
s@\b\(int\|char\|void\|float\|double\|long\|short\)\b@<b>&</b>@g
s@\b\(if\|else\|switch\|case\|break\|continue\)@<b>&</b>@g
s@\b\(for\|while\|do\|typedef\|struct\|return\)@<b>&</b>@g
s@\b\(volatile\|extern\|local\|register\|union\)\b@<b>&</b>@g
s@\b(static\|const\|default\|enum\|goto\sizeof)\b@<b>&</b>@g
s@\b\(un\)\?signed\b@<b>&</b>@g

#
#Aspas
/"/ {

#Substitui "" por $""$ onde o $ eh um char especial.
#
# exemplo: "entre aspas" -> vira -> $"entre aspas"$
#
#Isso pra facilitar a manipulacao e para nao
#casar uma aspas final com uma inicial.
#
s@"\([^"]*\)"@$"\1"$@g

#Retirar tags HTML entre as aspas sem casar
#com o conteudo entre o fim de uma dupla
#de aspas com o inicio da outra dupla.

:b
/\$"[^>]\+>[^"]*"\$/ {
s@\$"\([^<]*\)<[^>]\+>\([^"]*\)"\$@$"\1\2"$@
tb
}

#Colorir de vermelho as aspas
s@\$"\([^"]*\)"\$@<font color='red'>"\1"</font>@g

}

#
#Comentarios
\@/\*@ {

#Comentarios com mais de uma linha
:c
\@\*/@!{
N
bc
}

#Eliminar tags HTML entre os comentarios
:d
s@/\*\([^<]*\)<[^>]\+>\(.*\)\*/@/*\1\2*/@
td

s@\(\([^/][^\*])\)*\)/\*\(.*\)\*/@\2<font color='blue'>/*\3*/</font>@g

}

#
#Comentarios indicados por //
\@//@ {
#Eliminar tags HTML
:e
s@//\([^<]*\)<[^>]\+>\([^$]\+$\)@//\1\2@
te

s@//.*$@<font color='blue'>&</font>@g

}

#
$ a\
</pre>\
</body> \
</html>\


Scripts recomendados

Atualização do sistema (Gentoo)

Security Scirpt 2

Monitora Ping

Miguxeitor.sed - converse com seus miguxos

urlDecoder.sed: Decodificar de URL's


  

Comentários
[1] Comentário enviado por uberalles em 26/07/2009 - 20:14h

Que trampo, hein cara.. Mas da hora!! Parabéns.

[2] Comentário enviado por Daemonio em 28/07/2009 - 09:17h

Fala uberalles! Valew pelo comentário mas este código aí é um versão antiga, até que ela funciona beleza em alguns códigos C. Ele contém alguns erros como na linha do sizeof (quando fui ver já era tarde d+ :[ )

Olhando pelo site sed.sourceforge, vi um algoritmo bacana usado no script:

http://sed.sourceforge.net/local/scripts/remccoms3.sed.html

Daí modifiquei o código e fiz um outro script, ficou muito melhor, se der eu coloco ele aqui no vol.

Abraços.


Contribuir com comentário