186 lines
3.4 KiB
Awk
186 lines
3.4 KiB
Awk
|
# gemtext2html
|
||
|
# convierte un archivo en gemtext a html de acuerdo a la spec
|
||
|
# excepción: enlaces a imagen (jpg, png, gif) se vuelven <img>
|
||
|
#
|
||
|
# modo de uso:
|
||
|
# awk -f gemtext2html.awk archivo.gmi > archivo.html
|
||
|
#
|
||
|
BEGIN{
|
||
|
# para poder abrir y cerrar <ul>, <pre>, <p>:
|
||
|
modo_lista = 0
|
||
|
modo_pre = 0
|
||
|
modo_parrafo = 0
|
||
|
|
||
|
bloque = 0 # para no agregar <br/> después de headers y blockquotes
|
||
|
|
||
|
print "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>"
|
||
|
print "<html xmlns='http://www.w3.org/1999/xhtml' lang='es-MX'>"
|
||
|
print "<head>"
|
||
|
print "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
|
||
|
print "<meta content='initial-scale=1.0, maximum-scale=1.0, user-scalable=yes' name='viewport'/>"
|
||
|
}
|
||
|
NR == 1{
|
||
|
titulo = $0
|
||
|
sub("#[[:blank:]]+","",titulo) #prefijo
|
||
|
print "<title>"titulo" - codeVGA</title>"
|
||
|
print "</head>"
|
||
|
print "<body>"
|
||
|
}
|
||
|
|
||
|
$0 !~ /^(=>|```|#{1,3} |* |>|[[:blank:]]*$)/{ # líneas de texto (no "especiales")
|
||
|
if(!modo_pre){
|
||
|
if(!modo_parrafo){
|
||
|
modo_parrafo = 1
|
||
|
print "<p>"
|
||
|
}
|
||
|
else # nueva línea en el mismo párrafo
|
||
|
print "<br/>"
|
||
|
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^[[:blank:]]*$/ { # línea vacía
|
||
|
if( !modo_pre ) {
|
||
|
if( modo_lista ){ # cierra la lista
|
||
|
modo_lista = 0
|
||
|
print "</ul>"
|
||
|
}
|
||
|
else if( modo_parrafo ){ # cierra el párrafo
|
||
|
modo_parrafo = 0
|
||
|
print "</p>"
|
||
|
}
|
||
|
else if( bloque ) # si lo previo fue header o blockquote
|
||
|
bloque = 0;
|
||
|
else
|
||
|
print "<br/>"
|
||
|
}
|
||
|
else
|
||
|
print $0
|
||
|
|
||
|
}
|
||
|
|
||
|
/^=>/{ # link
|
||
|
if(!modo_pre){
|
||
|
if( modo_lista ){ # cierra la lista
|
||
|
modo_lista = 0
|
||
|
print "</ul>"
|
||
|
}
|
||
|
else if( modo_parrafo ){ # cierra el párrafo
|
||
|
modo_parrafo = 0
|
||
|
print "</p>"
|
||
|
}
|
||
|
# borra flecha del inicio
|
||
|
sub("^=>","",$0)
|
||
|
# ahora $1 es el path, $2 a $NF el texto
|
||
|
|
||
|
# concatena todo el texto
|
||
|
texto = $2
|
||
|
for(i=3; i<=NF; i++){
|
||
|
texto = texto" "$i
|
||
|
}
|
||
|
|
||
|
# si el path es imagen
|
||
|
if( match($1, /(png|jpg|gif)$/) ){
|
||
|
# crea imagen <img>
|
||
|
$0="<img src='"$1"' alt='"texto"'/>"
|
||
|
}
|
||
|
# si el path no es imagen
|
||
|
else{
|
||
|
# convierte enlace de .gmi a .html !
|
||
|
sub(".gmi$",".html",$1)
|
||
|
|
||
|
# crea link <a>
|
||
|
$0="<a href='"$1"'>"texto"</a><br/>"
|
||
|
}
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^* /{ # lista
|
||
|
if(!modo_pre){
|
||
|
if(!modo_lista){ # inicia la lista
|
||
|
if(modo_parrafo){
|
||
|
modo_parrafo = 0
|
||
|
print "</p>"
|
||
|
}
|
||
|
modo_lista = 1
|
||
|
print "<ul>"
|
||
|
}
|
||
|
sub("*[[:blank:]]+","<li>",$0)
|
||
|
sub("$","</li>",$0)
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^```/{ # preformatted
|
||
|
if(modo_pre){
|
||
|
# cierra preformatted
|
||
|
modo_pre = 0
|
||
|
print "</pre>"
|
||
|
}
|
||
|
else{
|
||
|
if( modo_lista ){ # cierra la lista
|
||
|
modo_lista = 0
|
||
|
print "</ul>"
|
||
|
}
|
||
|
else if( modo_parrafo ){ # cierra el párrafo
|
||
|
modo_parrafo = 0
|
||
|
print "</p>"
|
||
|
}
|
||
|
|
||
|
# abre preformatted
|
||
|
modo_pre = 1
|
||
|
print "<pre>"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/^> /{ # blockquote
|
||
|
if(!modo_pre){
|
||
|
sub(">[[:blank:]]+","<blockquote>",$0)
|
||
|
sub("$","</blockquote>",$0)
|
||
|
bloque = 1
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^# /{ # h1
|
||
|
if(!modo_pre){
|
||
|
sub("#[[:blank:]]+","<h1>",$0) #prefijo
|
||
|
sub("$","</h1>",$0) #sufijo
|
||
|
bloque = 1
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^## /{ # h2
|
||
|
if(!modo_pre){
|
||
|
sub("##[[:blank:]]+","<h2>",$0)
|
||
|
sub("$","</h2>",$0)
|
||
|
bloque = 1
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
/^### /{ # h3
|
||
|
if(!modo_pre){
|
||
|
sub("###[[:blank:]]+","<h3>",$0)
|
||
|
sub("$","</h3>",$0)
|
||
|
bloque = 1
|
||
|
}
|
||
|
print $0
|
||
|
}
|
||
|
|
||
|
END{
|
||
|
# cierra tags que pudiero n haber quedado abiertas
|
||
|
if(modo_pre)
|
||
|
print "</pre>"
|
||
|
else if(modo_parrafo)
|
||
|
print "</p>"
|
||
|
else if(modo_lista)
|
||
|
print "</ul>"
|
||
|
|
||
|
print "</body>"
|
||
|
print "</html>"
|
||
|
}
|