54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package vistas
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"net/http"
|
|
"strings"
|
|
"bytes"
|
|
"regexp"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/yuin/goldmark"
|
|
)
|
|
|
|
func Letra(c *gin.Context) {
|
|
letra := c.PostForm("slug") // FIXME: Sanitize
|
|
// Sanitize "letra"
|
|
letra = regexp.MustCompile(`[^a-zA-Z0-9ñÑáéíóú\- ]+`).ReplaceAllString(letra, "")
|
|
|
|
arquivo := "./letras/" + letra + ".md"
|
|
contido, err := os.ReadFile(arquivo)
|
|
if err != nil {
|
|
fmt.Println("Error lendo.")
|
|
c.Data(http.StatusNotFound, "text/html; charset=utf-8", []byte("Song not found."))
|
|
}
|
|
|
|
toml_marxes_atopados := 0
|
|
var markdown string
|
|
|
|
for _, linea := range strings.Split(string(contido[:]), "\n") {
|
|
// quitase a cabeceira toml, fai falta atopar un bloque:
|
|
// +++
|
|
// title = "Foo, the song"
|
|
// +++
|
|
if strings.HasPrefix(linea, "+++") {
|
|
toml_marxes_atopados = toml_marxes_atopados + 1
|
|
}
|
|
|
|
// Si xa se atoparon os dos marxes do toml e non estamos en un deles:
|
|
if toml_marxes_atopados == 2 && !strings.HasPrefix(linea, "+++") {
|
|
markdown = markdown + linea +"\n"
|
|
}
|
|
}
|
|
|
|
// markdown a html
|
|
var buf bytes.Buffer
|
|
if err := goldmark.Convert([]byte(markdown), &buf); err != nil {
|
|
fmt.Println("Error convertindo markdown a html")
|
|
c.Data(http.StatusInternalServerError, "text/html; charset=utf-8", []byte("Error converting to html."))
|
|
} else {
|
|
c.Data(http.StatusOK, "text/html; charset=utf-8", []byte(buf.String()))
|
|
}
|
|
}
|