Colorindo código fonte em C com o SED

Publicado por Marcos Paulo Ferreira 25/07/2009

[ Hits: 6.069 ]

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\)/ {
[email protected]"@\"@g
[email protected]*@<font color='green'>&</font>@
#Nao ha mais nada para colorir (va para o fim do script).
b
}

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

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

#
#Palavras reservadas
[email protected]\b\(int\|char\|void\|float\|double\|long\|short\)\[email protected]<b>&</b>@g
[email protected]\b\(if\|else\|switch\|case\|break\|continue\)@<b>&</b>@g
[email protected]\b\(for\|while\|do\|typedef\|struct\|return\)@<b>&</b>@g
[email protected]\b\(volatile\|extern\|local\|register\|union\)\[email protected]<b>&</b>@g
[email protected]\b(static\|const\|default\|enum\|goto\sizeof)\[email protected]<b>&</b>@g
[email protected]\b\(un\)\?signed\[email protected]<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.
#
[email protected]"\([^"]*\)"@$"\1"[email protected]

#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
/\$"[^>]\+>[^"]*"\$/ {
[email protected]\$"\([^<]*\)<[^>]\+>\([^"]*\)"\[email protected]$"\1\2"[email protected]
tb
}

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

}

#
#Comentarios
\@/\*@ {

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

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

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

}

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

[email protected]//.*[email protected]<font color='blue'>&</font>@g

}

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


Scripts recomendados

Mostra a temperatura da cidade desejada

organização_topografia terceiro arquivo

Lista usuários

Monitor do Squid avançado

agenda


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts