hicli/html: fix extra newlines when copying code blocks

This commit is contained in:
Tulir Asokan 2024-11-08 09:39:58 +01:00
parent 8ca664c745
commit 540e8fa43e
3 changed files with 25 additions and 2 deletions

View file

@ -625,6 +625,20 @@ var CodeBlockFormatter = chromahtml.New(
chromahtml.WithLineNumbers(true),
)
type lineRewriter struct {
w *strings.Builder
}
var lineNumberRewriter = regexp.MustCompile(`<span class="ln">(\s*\d+)</span>`)
var lineNumberReplacement = []byte(`<span class="ln" data-linenum="$1"></span>`)
func (lr *lineRewriter) Write(p []byte) (n int, err error) {
n = len(p)
p = lineNumberRewriter.ReplaceAll(p, lineNumberReplacement)
lr.w.Write(p)
return
}
func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder) {
lexer := lexers.Get(language)
if lexer == nil {
@ -642,7 +656,7 @@ func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder)
w.WriteString("</code></pre>")
return
}
err = CodeBlockFormatter.Format(w, styles.Fallback, iter)
err = CodeBlockFormatter.Format(&lineRewriter{w}, styles.Fallback, iter)
if err != nil {
// This should never fail
panic(err)

View file

@ -430,7 +430,7 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev
return nil, nil
}
const CurrentHTMLSanitizerVersion = 6
const CurrentHTMLSanitizerVersion = 7
func (h *HiClient) ReprocessExistingEvent(ctx context.Context, evt *database.Event) {
if (evt.Type != event.EventMessage.Type && evt.DecryptedType != event.EventMessage.Type) ||

View file

@ -113,6 +113,15 @@ div.html-body {
&.chroma {
background-color: var(--codeblock-background-color);
span.line > span.ln {
-webkit-user-select: initial;
user-select: initial;
&::before {
content: attr(data-linenum);
}
}
}
}