forked from tangled.org/core
this repo has no description

appview/pages/markup: syntax highlight code blocks

Signed-off-by: oppiliappan <me@oppi.li>

authored by oppi.li and committed by Tangled bf02ed25 cb901317

Changed files
+35 -11
appview
pages
markup
nix
+20 -1
appview/pages/markup/markdown.go
··· 5 5 "bytes" 6 6 "fmt" 7 7 "io" 8 + "maps" 8 9 "net/url" 9 10 "path" 10 11 "regexp" 12 + "slices" 11 13 "strings" 12 14 15 + "github.com/alecthomas/chroma/v2" 16 + chromahtml "github.com/alecthomas/chroma/v2/formatters/html" 17 + "github.com/alecthomas/chroma/v2/styles" 13 18 "github.com/microcosm-cc/bluemonday" 14 19 "github.com/yuin/goldmark" 20 + highlighting "github.com/yuin/goldmark-highlighting/v2" 15 21 "github.com/yuin/goldmark/ast" 16 22 "github.com/yuin/goldmark/extension" 17 23 "github.com/yuin/goldmark/parser" ··· 50 56 51 57 func (rctx *RenderContext) RenderMarkdown(source string) string { 52 58 md := goldmark.New( 53 - goldmark.WithExtensions(extension.GFM), 59 + goldmark.WithExtensions( 60 + extension.GFM, 61 + highlighting.NewHighlighting( 62 + highlighting.WithFormatOptions( 63 + chromahtml.Standalone(false), 64 + chromahtml.WithClasses(true), 65 + ), 66 + highlighting.WithCustomStyle(styles.Get("catppuccin-latte")), 67 + ), 68 + ), 54 69 goldmark.WithParserOptions( 55 70 parser.WithAutoHeadingID(), 56 71 ), ··· 201 216 // checkboxes 202 217 policy.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input") 203 218 policy.AllowAttrs("checked", "disabled", "data-source-position").OnElements("input") 219 + 220 + // for code blocks 221 + policy.AllowAttrs("class").Matching(regexp.MustCompile(`chroma`)).OnElements("pre") 222 + policy.AllowAttrs("class").Matching(regexp.MustCompile(strings.Join(slices.Collect(maps.Values(chroma.StandardTypes)), "|"))).OnElements("span") 204 223 205 224 // centering content 206 225 policy.AllowElements("center")
+3 -2
go.mod
··· 22 22 github.com/go-enry/go-enry/v2 v2.9.2 23 23 github.com/go-git/go-git/v5 v5.14.0 24 24 github.com/google/uuid v1.6.0 25 + github.com/gorilla/feeds v1.2.0 25 26 github.com/gorilla/sessions v1.4.0 26 27 github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 27 28 github.com/hiddeco/sshsig v0.2.0 ··· 38 39 github.com/stretchr/testify v1.10.0 39 40 github.com/urfave/cli/v3 v3.3.3 40 41 github.com/whyrusleeping/cbor-gen v0.3.1 41 - github.com/yuin/goldmark v1.4.13 42 + github.com/yuin/goldmark v1.4.15 43 + github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc 42 44 golang.org/x/crypto v0.40.0 43 45 golang.org/x/net v0.42.0 44 46 golang.org/x/sync v0.16.0 ··· 88 90 github.com/golang/mock v1.6.0 // indirect 89 91 github.com/google/go-querystring v1.1.0 // indirect 90 92 github.com/gorilla/css v1.0.1 // indirect 91 - github.com/gorilla/feeds v1.2.0 // indirect 92 93 github.com/gorilla/securecookie v1.1.2 // indirect 93 94 github.com/hashicorp/errwrap v1.1.0 // indirect 94 95 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
+5 -1
go.sum
··· 79 79 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 80 80 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= 81 81 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= 82 + github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= 82 83 github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= 83 84 github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= 84 85 github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= ··· 429 430 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 430 431 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 431 432 github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 432 - github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= 433 433 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 434 + github.com/yuin/goldmark v1.4.15 h1:CFa84T0goNn/UIXYS+dmjjVxMyTAvpOmzld40N/nfK0= 435 + github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 436 + github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ= 437 + github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I= 434 438 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= 435 439 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= 436 440 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q=
+1 -2
input.css
··· 146 146 /* PreWrapper */ 147 147 .chroma { 148 148 color: #4c4f69; 149 - background-color: #eff1f5; 149 + background-color: #00000000; 150 150 } 151 151 /* Error */ 152 152 .chroma .err { ··· 483 483 /* PreWrapper */ 484 484 .chroma { 485 485 color: #cad3f5; 486 - background-color: #24273a; 487 486 } 488 487 /* Error */ 489 488 .chroma .err {
+5 -2
nix/gomod2nix.toml
··· 426 426 version = "v0.3.1" 427 427 hash = "sha256-PAd8M2Z8t6rVRBII+Rg8Bz+QaJIwbW64bfyqsv31kgc=" 428 428 [mod."github.com/yuin/goldmark"] 429 - version = "v1.4.13" 430 - hash = "sha256-GVwFKZY6moIS6I0ZGuio/WtDif+lkZRfqWS6b4AAJyI=" 429 + version = "v1.4.15" 430 + hash = "sha256-MvSOT6dwf5hVYkIg4MnqMpsy5ZtWZ7amAE7Zo9HkEa0=" 431 + [mod."github.com/yuin/goldmark-highlighting/v2"] 432 + version = "v2.0.0-20230729083705-37449abec8cc" 433 + hash = "sha256-HpiwU7jIeDUAg2zOpTIiviQir8dpRPuXYh2nqFFccpg=" 431 434 [mod."gitlab.com/yawning/secp256k1-voi"] 432 435 version = "v0.0.0-20230925100816-f2616030848b" 433 436 hash = "sha256-X8INg01LTg13iOuwPI3uOhPN7r01sPZtmtwJ2sudjCA="
+1 -3
tailwind.config.js
··· 36 36 css: { 37 37 maxWidth: "none", 38 38 pre: { 39 - backgroundColor: colors.gray[100], 40 - color: colors.black, 41 - "@apply font-normal text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700 dark:border": {}, 39 + "@apply font-normal text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700 border": {}, 42 40 }, 43 41 code: { 44 42 "@apply font-normal font-mono p-1 rounded text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700": {},