Colorindo código fonte em C com o SED
Publicado por Marcos Paulo Ferreira 25/07/2009
[ Hits: 6.710 ]
Homepage: http://daemoniolabs.wordpress.com
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
#!/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>\
Atualiza núcleo do sistema para Kernel 4.4 (Ubuntu)
Atualizador automático simples e extremamente funcional
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Links importantes de usuários do vol (4)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (2)
Para os fãs de DOOM, um vídeo do Romero (com dublagem em pt-br disponí... (2)









