Stanislav N. aka pztrn
48d43ca097
Pagination now works. Temporary hardcoded 10 pastes per page, will be put in configuration later. Maybe. From now user will receive readable error message if error occured. Started to work on syntax highlighting, tried to make lexers detection work but apparently to no avail.
33 lines
732 B
Go
33 lines
732 B
Go
package chroma
|
|
|
|
// Coalesce is a Lexer interceptor that collapses runs of common types into a single token.
|
|
func Coalesce(lexer Lexer) Lexer { return &coalescer{lexer} }
|
|
|
|
type coalescer struct{ Lexer }
|
|
|
|
func (d *coalescer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) {
|
|
var prev *Token
|
|
it, err := d.Lexer.Tokenise(options, text)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return func() *Token {
|
|
for token := it(); token != nil; token = it() {
|
|
if prev == nil {
|
|
prev = token
|
|
} else {
|
|
if prev.Type == token.Type && len(prev.Value) < 8192 {
|
|
prev.Value += token.Value
|
|
} else {
|
|
out := prev
|
|
prev = token
|
|
return out
|
|
}
|
|
}
|
|
}
|
|
out := prev
|
|
prev = nil
|
|
return out
|
|
}, nil
|
|
}
|