Skip to content

Commit b7ab645

Browse files
committed
works
1 parent a6a97b9 commit b7ab645

File tree

16 files changed

+193
-230
lines changed

16 files changed

+193
-230
lines changed

cli/cmd/get.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/dustin/go-humanize"
1212
"github.com/spf13/cobra"
1313
"github.com/spf13/viper"
14-
"github.com/topi314/chroma/v2/lexers"
1514

1615
"github.com/topi314/gobin/v2/internal/ezhttp"
1716
"github.com/topi314/gobin/v2/server"
@@ -207,10 +206,4 @@ Will return the document with the id of jis74978.`,
207206
}); err != nil {
208207
log.Printf("failed to register formatter flag completion func: %s", err)
209208
}
210-
211-
if err := cmd.RegisterFlagCompletionFunc("language", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
212-
return lexers.Names(true), cobra.ShellCompDirectiveNoFileComp
213-
}); err != nil {
214-
log.Printf("failed to register language flag completion func: %s", err)
215-
}
216209
}

cli/cmd/post.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414

1515
"github.com/spf13/cobra"
1616
"github.com/spf13/viper"
17-
"github.com/topi314/chroma/v2/lexers"
1817

1918
"github.com/topi314/gobin/v2/internal/cfg"
2019
"github.com/topi314/gobin/v2/internal/ezhttp"
@@ -218,10 +217,4 @@ Will post "hello world!" to the server`,
218217
if err := cmd.RegisterFlagCompletionFunc("document", documentCompletion); err != nil {
219218
log.Printf("failed to register document flag completion func: %s", err)
220219
}
221-
222-
if err := cmd.RegisterFlagCompletionFunc("languages", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
223-
return lexers.Names(true), cobra.ShellCompDirectiveNoFileComp
224-
}); err != nil {
225-
log.Printf("failed to register languages flag completion func: %s", err)
226-
}
227220
}

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/a-h/templ v0.2.793
1010
github.com/cespare/xxhash/v2 v2.3.0
1111
github.com/dustin/go-humanize v1.0.1
12+
github.com/ebitengine/purego v0.8.1
1213
github.com/go-chi/chi/v5 v5.1.0
1314
github.com/go-chi/stampede v0.6.0
1415
github.com/go-jose/go-jose/v3 v3.0.3
@@ -20,7 +21,6 @@ require (
2021
github.com/samber/slog-chi v1.12.3
2122
github.com/spf13/cobra v1.8.1
2223
github.com/spf13/viper v1.19.0
23-
github.com/topi314/chroma/v2 v2.0.0-20240614212830-eb9beba2251d
2424
github.com/topi314/gomigrate v0.0.0-20241004214626-bb286a22f06c
2525
github.com/topi314/otelchi v0.0.0-20240303215413-6ead809329d9
2626
github.com/topi314/tint v0.0.0-20240303212505-44dd4a1b4f7f
@@ -42,7 +42,6 @@ require (
4242
require (
4343
github.com/beorn7/perks v1.0.1 // indirect
4444
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
45-
github.com/dlclark/regexp2 v1.11.4 // indirect
4645
github.com/felixge/httpsnoop v1.0.4 // indirect
4746
github.com/fsnotify/fsnotify v1.8.0 // indirect
4847
github.com/go-logr/logr v1.4.2 // indirect

go.sum

Lines changed: 11 additions & 86 deletions
Large diffs are not rendered by default.

main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ func main() {
133133
assets = http.FS(sub)
134134
}
135135

136+
if err = server.LoadLanguages(Queries, Languages); err != nil {
137+
slog.Error("Error while loading languages", tint.Err(err))
138+
return
139+
}
136140
loadEmbeddedStyles()
137141
loadLocalStyles(cfg.CustomStyles)
138142

server/assets/style.css

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -381,30 +381,9 @@ main {
381381

382382
#code-view {
383383
width: 0;
384-
height: 0;
385384
min-width: 100%;
386-
min-height: 100%;
387385
overflow: auto;
388386
padding: 1em;
389-
display: block;
390-
}
391-
392-
#code-view > .ch-line {
393-
counter-increment: line-counter;
394-
}
395-
396-
#code-view > .ch-line::before {
397-
content: counter(line-counter);
398-
display: inline-block;
399-
width: 2rem;
400-
text-align: right;
401-
margin-right: 1rem;
402-
color: var(--text-secondary);
403-
flex-shrink: 0;
404-
}
405-
406-
#code-view:first-child {
407-
counter-reset: line-counter;
408387
}
409388

410389
#code-edit {

server/document.go

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919

2020
"github.com/dustin/go-humanize"
2121
"github.com/go-chi/chi/v5"
22-
"github.com/topi314/chroma/v2/lexers"
2322
"github.com/topi314/tint"
2423

2524
"github.com/topi314/gobin/v2/internal/ezhttp"
@@ -103,7 +102,7 @@ func (s *Server) DocumentVersions(w http.ResponseWriter, r *http.Request) {
103102
for i, file := range dbFiles {
104103
var formatted string
105104
if withContent {
106-
formatted, err = s.formatFile(file, s.htmlRenderer, theme)
105+
formatted, err = s.formatFile(r.Context(), file, s.htmlRenderer, theme)
107106
if err != nil {
108107
s.error(w, r, err)
109108
return
@@ -171,7 +170,7 @@ func (s *Server) GetPrettyDocument(w http.ResponseWriter, r *http.Request) {
171170
)
172171
templateFiles := make([]templates.File, len(document.Files))
173172
for i, file := range document.Files {
174-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
173+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
175174
if err != nil {
176175
s.prettyError(w, r, err)
177176
return
@@ -230,10 +229,10 @@ func (s *Server) GetPrettyDocument(w http.ResponseWriter, r *http.Request) {
230229
TotalLength: totalLength,
231230
Versions: templateVersions,
232231

233-
Lexers: lexers.Names(false),
234-
Styles: s.themes,
235-
Style: theme.Name,
236-
Theme: theme.ColorScheme,
232+
Languages: getLanguageNames(),
233+
Styles: s.themes,
234+
Style: theme.Name,
235+
Theme: theme.ColorScheme,
237236

238237
Max: s.cfg.MaxDocumentSize,
239238
Host: r.Host,
@@ -258,13 +257,10 @@ func (s *Server) GetDocument(w http.ResponseWriter, r *http.Request) {
258257
for _, file := range document.Files {
259258
if strings.EqualFold(file.Name, fileName) {
260259
if language := r.URL.Query().Get("language"); language != "" {
261-
lexer := lexers.Get(language)
262-
if lexer != nil {
263-
file.Language = lexer.Config().Name
264-
}
260+
file.Language = getLanguageFallback(language).Config.Name
265261
}
266262

267-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
263+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
268264
if err != nil {
269265
s.error(w, r, err)
270266
return
@@ -288,7 +284,7 @@ func (s *Server) GetDocument(w http.ResponseWriter, r *http.Request) {
288284
Files: make([]ResponseFile, len(document.Files)),
289285
}
290286
for i, file := range document.Files {
291-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
287+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
292288
if err != nil {
293289
s.error(w, r, err)
294290
return
@@ -316,7 +312,7 @@ func (s *Server) GetRawDocument(w http.ResponseWriter, r *http.Request) {
316312
if len(document.Files) == 1 {
317313
file := document.Files[0]
318314

319-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
315+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
320316
if err != nil {
321317
s.error(w, r, fmt.Errorf("failed to render raw document: %w", err))
322318
return
@@ -330,11 +326,8 @@ func (s *Server) GetRawDocument(w http.ResponseWriter, r *http.Request) {
330326
"filename": fileName,
331327
}))
332328

333-
lexer := lexers.Get(file.Language)
334-
if lexer == nil {
335-
lexer = lexers.Fallback
336-
}
337-
w.Header().Set(ezhttp.HeaderLanguage, lexer.Config().Name)
329+
language := getLanguageFallback(file.Language)
330+
w.Header().Set(ezhttp.HeaderLanguage, language.Config.Name)
338331

339332
w.Header().Set(ezhttp.HeaderContentType, contentType)
340333
if _, err = w.Write([]byte(formatted)); err != nil {
@@ -345,7 +338,7 @@ func (s *Server) GetRawDocument(w http.ResponseWriter, r *http.Request) {
345338

346339
mpw := multipart.NewWriter(w)
347340
for i, file := range document.Files {
348-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
341+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
349342
if err != nil {
350343
s.error(w, r, fmt.Errorf("failed to render raw document: %w", err))
351344
return
@@ -357,7 +350,7 @@ func (s *Server) GetRawDocument(w http.ResponseWriter, r *http.Request) {
357350
"filename": file.Name,
358351
}))
359352

360-
language := getLanguage(file.Language)
353+
language := getLanguageFallback(file.Language)
361354

362355
headers.Set(ezhttp.HeaderLanguage, language.Highlight.LanguageName)
363356
headers.Set(ezhttp.HeaderContentType, ezhttp.ContentTypeHTML)
@@ -480,13 +473,10 @@ func (s *Server) GetDocumentFile(w http.ResponseWriter, r *http.Request) {
480473
theme := getTheme(r)
481474

482475
if language := r.URL.Query().Get("language"); language != "" {
483-
lexer := lexers.Get(language)
484-
if lexer != nil {
485-
file.Language = lexer.Config().Name
486-
}
476+
file.Language = getLanguageFallback(language).Config.Name
487477
}
488478

489-
formatted, err := s.formatFile(*file, s.htmlRenderer, theme)
479+
formatted, err := s.formatFile(r.Context(), *file, s.htmlRenderer, theme)
490480
if err != nil {
491481
s.error(w, r, err)
492482
return
@@ -509,13 +499,10 @@ func (s *Server) GetRawDocumentFile(w http.ResponseWriter, r *http.Request) {
509499

510500
theme := getTheme(r)
511501

512-
lexer := lexers.Get(file.Language)
513-
if lexer == nil {
514-
lexer = lexers.Fallback
515-
}
516-
w.Header().Set(ezhttp.HeaderLanguage, lexer.Config().Name)
502+
language := getLanguageFallback(file.Language)
503+
w.Header().Set(ezhttp.HeaderLanguage, language.Config.Name)
517504

518-
formatted, err := s.formatFile(*file, s.htmlRenderer, theme)
505+
formatted, err := s.formatFile(r.Context(), *file, s.htmlRenderer, theme)
519506
if err != nil {
520507
s.error(w, r, fmt.Errorf("failed to render raw document: %w", err))
521508
return
@@ -607,7 +594,7 @@ func (s *Server) PostDocument(w http.ResponseWriter, r *http.Request) {
607594

608595
var rsFiles []ResponseFile
609596
for _, file := range dbFiles {
610-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
597+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
611598
if err != nil {
612599
s.error(w, r, err)
613600
return
@@ -675,7 +662,7 @@ func (s *Server) PatchDocument(w http.ResponseWriter, r *http.Request) {
675662

676663
var rsFiles []ResponseFile
677664
for _, file := range dbFiles {
678-
formatted, err := s.formatFile(file, s.htmlRenderer, theme)
665+
formatted, err := s.formatFile(r.Context(), file, s.htmlRenderer, theme)
679666
if err != nil {
680667
s.error(w, r, err)
681668
return

server/formatting.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"context"
66
"fmt"
7+
"time"
78

89
"go.gopad.dev/go-tree-sitter-highlight/folds"
910
"go.gopad.dev/go-tree-sitter-highlight/highlight"
@@ -13,21 +14,25 @@ import (
1314
"github.com/topi314/gobin/v2/server/database"
1415
)
1516

16-
func (s *Server) formatFile(file database.File, renderer *html.Renderer, theme Theme) (string, error) {
17+
func (s *Server) formatFile(ctx context.Context, file database.File, renderer *html.Renderer, theme Theme) (string, error) {
1718
if renderer == nil {
1819
return file.Content, nil
1920
}
2021

21-
language := getLanguage(file.Language)
22-
2322
if s.cfg.MaxHighlightSize > 0 && len([]rune(file.Content)) > s.cfg.MaxHighlightSize {
24-
language = getLanguage("plaintext")
23+
return file.Content, nil
24+
}
25+
26+
language := getLanguageFallback(file.Language)
27+
if language.Language == nil {
28+
return file.Content, nil
2529
}
2630

27-
ctx := context.Background()
31+
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
32+
defer cancel()
2833

2934
highlighter := highlight.New()
30-
events, err := highlighter.Highlight(ctx, language.Highlight, []byte(file.Content), nil)
35+
events, err := highlighter.Highlight(ctx, language.Highlight, []byte(file.Content), injectionLanguage)
3136
if err != nil {
3237
return "", fmt.Errorf("highlight: %w", err)
3338
}
@@ -49,7 +54,7 @@ func (s *Server) formatFile(file database.File, renderer *html.Renderer, theme T
4954
}
5055

5156
buff := new(bytes.Buffer)
52-
if err = renderer.Render(buff, events, resolvedTags, foldsIter, []byte(file.Content), theme.CaptureNames); err != nil {
57+
if err = renderer.Render(buff, events, resolvedTags, foldsIter, []byte(file.Content), theme.Theme); err != nil {
5358
return "", fmt.Errorf("render: %w", err)
5459
}
5560

0 commit comments

Comments
 (0)