syntax highlighting because why not. go code or go home.
This commit is contained in:
parent
9617011a50
commit
b32b7b9dcc
15
fun.go
15
fun.go
|
@ -32,9 +32,24 @@ import (
|
||||||
"humungus.tedunangst.com/r/webs/httpsig"
|
"humungus.tedunangst.com/r/webs/httpsig"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var allowedclasses = make(map[string]bool)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
allowedclasses["kw"] = true
|
||||||
|
allowedclasses["bi"] = true
|
||||||
|
allowedclasses["st"] = true
|
||||||
|
allowedclasses["nm"] = true
|
||||||
|
allowedclasses["tp"] = true
|
||||||
|
allowedclasses["op"] = true
|
||||||
|
allowedclasses["cm"] = true
|
||||||
|
allowedclasses["al"] = true
|
||||||
|
allowedclasses["dl"] = true
|
||||||
|
}
|
||||||
|
|
||||||
func reverbolate(userid int64, honks []*Honk) {
|
func reverbolate(userid int64, honks []*Honk) {
|
||||||
filt := htfilter.New()
|
filt := htfilter.New()
|
||||||
filt.Imager = replaceimg
|
filt.Imager = replaceimg
|
||||||
|
filt.SpanClasses = allowedclasses
|
||||||
for _, h := range honks {
|
for _, h := range honks {
|
||||||
h.What += "ed"
|
h.What += "ed"
|
||||||
if h.What == "tonked" {
|
if h.What == "tonked" {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -7,5 +7,5 @@ require (
|
||||||
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
|
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859
|
||||||
humungus.tedunangst.com/r/go-sqlite3 v1.1.3
|
humungus.tedunangst.com/r/go-sqlite3 v1.1.3
|
||||||
humungus.tedunangst.com/r/webs v0.6.8
|
humungus.tedunangst.com/r/webs v0.6.9
|
||||||
)
|
)
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -23,3 +23,5 @@ humungus.tedunangst.com/r/go-sqlite3 v1.1.3 h1:G2N4wzDS0NbuvrZtQJhh4F+3X+s7BF8b9
|
||||||
humungus.tedunangst.com/r/go-sqlite3 v1.1.3/go.mod h1:FtEEmQM7U2Ey1TuEEOyY1BmphTZnmiEjPsNLEAkpf/M=
|
humungus.tedunangst.com/r/go-sqlite3 v1.1.3/go.mod h1:FtEEmQM7U2Ey1TuEEOyY1BmphTZnmiEjPsNLEAkpf/M=
|
||||||
humungus.tedunangst.com/r/webs v0.6.8 h1:0Xn6+iHZO8F4R3jhkql0qBR8nh5v9D59xG2vWQJzoa8=
|
humungus.tedunangst.com/r/webs v0.6.8 h1:0Xn6+iHZO8F4R3jhkql0qBR8nh5v9D59xG2vWQJzoa8=
|
||||||
humungus.tedunangst.com/r/webs v0.6.8/go.mod h1:Ho+nmafD/aUWF7LnH+Yl2/b0ob7f2pCkXm4onteWvLE=
|
humungus.tedunangst.com/r/webs v0.6.8/go.mod h1:Ho+nmafD/aUWF7LnH+Yl2/b0ob7f2pCkXm4onteWvLE=
|
||||||
|
humungus.tedunangst.com/r/webs v0.6.9 h1:bW2rBRZTBgov2yNUCvQ09dAK9oLfQ9A84QkMRLwaXZM=
|
||||||
|
humungus.tedunangst.com/r/webs v0.6.9/go.mod h1:Ho+nmafD/aUWF7LnH+Yl2/b0ob7f2pCkXm4onteWvLE=
|
||||||
|
|
|
@ -21,22 +21,23 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/net/html"
|
"golang.org/x/net/html"
|
||||||
|
"humungus.tedunangst.com/r/webs/synlight"
|
||||||
)
|
)
|
||||||
|
|
||||||
var re_bolder = regexp.MustCompile(`(^|\W)\*\*([\w\s,.!?':_-]+)\*\*($|\W)`)
|
var re_bolder = regexp.MustCompile(`(^|\W)\*\*([\w\s,.!?':_-]+)\*\*($|\W)`)
|
||||||
var re_italicer = regexp.MustCompile(`(^|\W)\*([\w\s,.!?':_-]+)\*($|\W)`)
|
var re_italicer = regexp.MustCompile(`(^|\W)\*([\w\s,.!?':_-]+)\*($|\W)`)
|
||||||
var re_bigcoder = regexp.MustCompile("```\n?((?s:.*?))\n?```\n?")
|
var re_bigcoder = regexp.MustCompile("```(.*)\n?((?s:.*?))\n?```\n?")
|
||||||
var re_coder = regexp.MustCompile("`([^`]*)`")
|
var re_coder = regexp.MustCompile("`([^`]*)`")
|
||||||
var re_quoter = regexp.MustCompile(`(?m:^> (.*)\n?)`)
|
var re_quoter = regexp.MustCompile(`(?m:^> (.*)\n?)`)
|
||||||
var re_link = regexp.MustCompile(`.?.?https?://[^\s"]+[\w/)]`)
|
var re_link = regexp.MustCompile(`.?.?https?://[^\s"]+[\w/)]`)
|
||||||
var re_zerolink = regexp.MustCompile(`\[([^]]*)\]\(([^)]*\)?)\)`)
|
var re_zerolink = regexp.MustCompile(`\[([^]]*)\]\(([^)]*\)?)\)`)
|
||||||
|
|
||||||
|
var lighter = synlight.New(synlight.Options{Format: synlight.HTML})
|
||||||
|
|
||||||
func markitzero(s string) string {
|
func markitzero(s string) string {
|
||||||
// prepare the string
|
// prepare the string
|
||||||
s = strings.TrimSpace(s)
|
s = strings.TrimSpace(s)
|
||||||
s = strings.Replace(s, "\r", "", -1)
|
s = strings.Replace(s, "\r", "", -1)
|
||||||
s = html.EscapeString(s)
|
|
||||||
s = strings.Replace(s, "'", "'", -1) // dammit go
|
|
||||||
|
|
||||||
// save away the code blocks so we don't mess them up further
|
// save away the code blocks so we don't mess them up further
|
||||||
var bigcodes, lilcodes []string
|
var bigcodes, lilcodes []string
|
||||||
|
@ -49,6 +50,9 @@ func markitzero(s string) string {
|
||||||
return "`x`"
|
return "`x`"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
s = html.EscapeString(s)
|
||||||
|
s = strings.Replace(s, "'", "'", -1) // dammit go
|
||||||
|
|
||||||
// mark it zero
|
// mark it zero
|
||||||
s = re_bolder.ReplaceAllString(s, "$1<b>$2</b>$3")
|
s = re_bolder.ReplaceAllString(s, "$1<b>$2</b>$3")
|
||||||
s = re_italicer.ReplaceAllString(s, "$1<i>$2</i>$3")
|
s = re_italicer.ReplaceAllString(s, "$1<i>$2</i>$3")
|
||||||
|
@ -57,17 +61,18 @@ func markitzero(s string) string {
|
||||||
s = re_zerolink.ReplaceAllString(s, `<a class="mention u-url" href="$2">$1</a>`)
|
s = re_zerolink.ReplaceAllString(s, `<a class="mention u-url" href="$2">$1</a>`)
|
||||||
|
|
||||||
// now restore the code blocks
|
// now restore the code blocks
|
||||||
s = re_coder.ReplaceAllStringFunc(s, func(s string) string {
|
s = re_coder.ReplaceAllStringFunc(s, func(string) string {
|
||||||
code := lilcodes[0]
|
code := lilcodes[0]
|
||||||
lilcodes = lilcodes[1:]
|
lilcodes = lilcodes[1:]
|
||||||
|
code = html.EscapeString(code)
|
||||||
return code
|
return code
|
||||||
})
|
})
|
||||||
s = re_bigcoder.ReplaceAllStringFunc(s, func(s string) string {
|
s = re_bigcoder.ReplaceAllStringFunc(s, func(string) string {
|
||||||
code := bigcodes[0]
|
code := bigcodes[0]
|
||||||
bigcodes = bigcodes[1:]
|
bigcodes = bigcodes[1:]
|
||||||
return code
|
m := re_bigcoder.FindStringSubmatch(code)
|
||||||
|
return "<pre><code>" + lighter.HighlightString(m[2], m[1]) + "</code></pre><p>"
|
||||||
})
|
})
|
||||||
s = re_bigcoder.ReplaceAllString(s, "<pre><code>$1</code></pre><p>")
|
|
||||||
s = re_coder.ReplaceAllString(s, "<code>$1</code>")
|
s = re_coder.ReplaceAllString(s, "<code>$1</code>")
|
||||||
|
|
||||||
// some final fixups
|
// some final fixups
|
||||||
|
|
|
@ -193,6 +193,18 @@ input[type=file] {
|
||||||
}
|
}
|
||||||
.noise {
|
.noise {
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
|
code {
|
||||||
|
.kw { font-weight: bold; }
|
||||||
|
.bi { font-weight: bold; }
|
||||||
|
.st { color: $fg-subtle; }
|
||||||
|
.nm { color: #ba88ff; }
|
||||||
|
.op { color: #ba88ff; }
|
||||||
|
.tp { font-weight: bold; }
|
||||||
|
.cm { color: $fg-subtle; font-style: italic; }
|
||||||
|
.al { }
|
||||||
|
.dl { }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
details.actions summary {
|
details.actions summary {
|
||||||
color: $fg-subtle;
|
color: $fg-subtle;
|
||||||
|
|
Loading…
Reference in New Issue