Colorindo código fonte em C com o SED
Publicado por Marcos Paulo Ferreira 25/07/2009
[ Hits: 6.628 ]
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>\
Comparar datas (muito simples)
Console gráfico para vizualizar logs.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (4)
Warcraft II Remastered no Linux? (3)









