Colorindo código fonte em C com o SED
Publicado por Marcos Paulo Ferreira 25/07/2009
[ Hits: 6.679 ]
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>\
Verifica os maiores arquivos no diretório informado
Script que instala o repositório do BT em outras distros
Extrair ID de jogos de PS1 e PS2
Script de firewall para evitar ataques comuns
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (40)
Pfsense inacessivel após um periodo de tempo (2)









