cerrado @ 3be25766027178489a0c5f1f82e65f9be518c79c

feat: Add chroma support
  1diff --git a/go.mod b/go.mod
  2index b8b36b4cc85febdf92f178dea6604511c034b56d..ff4f2dd03286fea07e936a6b3961402b2971dae9 100644
  3--- a/go.mod
  4+++ b/go.mod
  5@@ -4,9 +4,13 @@ go 1.22.2
  6 
  7 require (
  8 	git.sr.ht/~emersion/go-scfg v0.0.0-20240128091534-2ae16e782082
  9+	github.com/alecthomas/chroma/v2 v2.13.0
 10 	github.com/google/go-cmp v0.6.0
 11 	github.com/valyala/quicktemplate v1.7.0
 12 	golang.org/x/sync v0.7.0
 13 )
 14 
 15-require github.com/valyala/bytebufferpool v1.0.0 // indirect
 16+require (
 17+	github.com/dlclark/regexp2 v1.11.0 // indirect
 18+	github.com/valyala/bytebufferpool v1.0.0 // indirect
 19+)
 20diff --git a/go.sum b/go.sum
 21index 0ba6fdb880c9cf8d7bef209163294c73990aab69..15e574af4ac10ebbfb80200b39121f4d3cda7584 100644
 22--- a/go.sum
 23+++ b/go.sum
 24@@ -1,12 +1,22 @@
 25 git.sr.ht/~emersion/go-scfg v0.0.0-20240128091534-2ae16e782082 h1:9Udx5fm4vRtmgDIBjy2ef5QioHbzpw5oHabbhpAUyEw=
 26 git.sr.ht/~emersion/go-scfg v0.0.0-20240128091534-2ae16e782082/go.mod h1:ybgvEJTIx5XbaspSviB3KNa6OdPmAZqDoSud7z8fFlw=
 27+github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU=
 28+github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
 29+github.com/alecthomas/chroma/v2 v2.13.0 h1:VP72+99Fb2zEcYM0MeaWJmV+xQvz5v5cxRHd+ooU1lI=
 30+github.com/alecthomas/chroma/v2 v2.13.0/go.mod h1:BUGjjsD+ndS6eX37YgTchSEG+Jg9Jv1GiZs9sqPqztk=
 31+github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
 32+github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
 33 github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
 34 github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 35 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 36 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 37+github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
 38+github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
 39 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 40 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 41 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 42+github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
 43+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
 44 github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
 45 github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 46 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 47diff --git a/main.go b/main.go
 48index 55f866e18d0497c7d8c44ff21ea0adf1517b90be..3d6411d1c2cac54353b520600f1ffe6fa21054b3 100644
 49--- a/main.go
 50+++ b/main.go
 51@@ -1,6 +1,7 @@
 52 package main
 53 
 54 import (
 55+	"bytes"
 56 	"context"
 57 	"encoding/json"
 58 	"flag"
 59@@ -10,6 +11,10 @@ 	"os"
 60 	"os/signal"
 61 	"time"
 62 
 63+	"github.com/alecthomas/chroma/v2/formatters/html"
 64+	"github.com/alecthomas/chroma/v2/lexers"
 65+	"github.com/alecthomas/chroma/v2/styles"
 66+
 67 	"git.gabrielgio.me/cerrado/pkg/config"
 68 	"git.gabrielgio.me/cerrado/pkg/worker"
 69 	"git.gabrielgio.me/cerrado/templates"
 70@@ -33,6 +38,7 @@ 	flag.Parse()
 71 
 72 	mux := http.NewServeMux()
 73 	mux.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
 74+		slog.Info("Handling index")
 75 
 76 		f, err := os.Open(*configPath)
 77 		if err != nil {
 78@@ -52,8 +58,26 @@ 			slog.Error("Error parsing json", "error", err)
 79 			return
 80 		}
 81 
 82+		lexer := lexers.Get("json")
 83+		style := styles.Get("monokailight")
 84+		formatter := html.New(
 85+			html.WithLineNumbers(true),
 86+		)
 87+		iterator, err := lexer.Tokenise(nil, string(b))
 88+		if err != nil {
 89+			slog.Error("Error tokenise", "error", err)
 90+			return
 91+		}
 92+
 93+		var code bytes.Buffer
 94+		err = formatter.Format(&code, style, iterator)
 95+		if err != nil {
 96+			slog.Error("Error format", "error", err)
 97+			return
 98+		}
 99+
100 		hello := &templates.HelloPage{
101-			Body: string(b),
102+			Body: code.String(),
103 		}
104 
105 		templates.WritePageTemplate(w, hello)
106diff --git a/templates/helloworld.qtpl b/templates/helloworld.qtpl
107index 02c09681378f5fad6de6fa1ec9550d59233cf887..66287eac78fadb51d34da5420d2700ff4b4bb511 100644
108--- a/templates/helloworld.qtpl
109+++ b/templates/helloworld.qtpl
110@@ -9,7 +9,7 @@
111 {% func (p *HelloPage) Content() %}
112 HelloWorld
113 
114-{%s p.Body %}
115+{%s= p.Body %}
116 {% endfunc %}
117 
118 {% func (p *HelloPage) Script() %}
119diff --git a/templates/helloworld.qtpl.go b/templates/helloworld.qtpl.go
120index 9ef78f55e201f7d50d7d373dc40fa30c682169bf..a12455fe6c09e8027a97fd8b4a1fe30179553928 100644
121--- a/templates/helloworld.qtpl.go
122+++ b/templates/helloworld.qtpl.go
123@@ -63,7 +63,7 @@ HelloWorld
124 
125 `)
126 //line helloworld.qtpl:12
127-	qw422016.E().S(p.Body)
128+	qw422016.N().S(p.Body)
129 //line helloworld.qtpl:12
130 	qw422016.N().S(`
131 `)