forked from Mirrors/gomuks
hicli/html: fix extra newlines when copying code blocks
This commit is contained in:
parent
8ca664c745
commit
540e8fa43e
3 changed files with 25 additions and 2 deletions
|
@ -625,6 +625,20 @@ var CodeBlockFormatter = chromahtml.New(
|
||||||
chromahtml.WithLineNumbers(true),
|
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) {
|
func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder) {
|
||||||
lexer := lexers.Get(language)
|
lexer := lexers.Get(language)
|
||||||
if lexer == nil {
|
if lexer == nil {
|
||||||
|
@ -642,7 +656,7 @@ func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder)
|
||||||
w.WriteString("</code></pre>")
|
w.WriteString("</code></pre>")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = CodeBlockFormatter.Format(w, styles.Fallback, iter)
|
err = CodeBlockFormatter.Format(&lineRewriter{w}, styles.Fallback, iter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// This should never fail
|
// This should never fail
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
|
@ -430,7 +430,7 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const CurrentHTMLSanitizerVersion = 6
|
const CurrentHTMLSanitizerVersion = 7
|
||||||
|
|
||||||
func (h *HiClient) ReprocessExistingEvent(ctx context.Context, evt *database.Event) {
|
func (h *HiClient) ReprocessExistingEvent(ctx context.Context, evt *database.Event) {
|
||||||
if (evt.Type != event.EventMessage.Type && evt.DecryptedType != event.EventMessage.Type) ||
|
if (evt.Type != event.EventMessage.Type && evt.DecryptedType != event.EventMessage.Type) ||
|
||||||
|
|
|
@ -113,6 +113,15 @@ div.html-body {
|
||||||
|
|
||||||
&.chroma {
|
&.chroma {
|
||||||
background-color: var(--codeblock-background-color);
|
background-color: var(--codeblock-background-color);
|
||||||
|
|
||||||
|
span.line > span.ln {
|
||||||
|
-webkit-user-select: initial;
|
||||||
|
user-select: initial;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: attr(data-linenum);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue