code.gitea.io/gitea@v1.19.3/modules/charset/breakwriter.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package charset 5 6 import ( 7 "bytes" 8 "io" 9 ) 10 11 // BreakWriter wraps an io.Writer to always write '\n' as '<br>' 12 type BreakWriter struct { 13 io.Writer 14 } 15 16 // Write writes the provided byte slice transparently replacing '\n' with '<br>' 17 func (b *BreakWriter) Write(bs []byte) (n int, err error) { 18 pos := 0 19 for pos < len(bs) { 20 idx := bytes.IndexByte(bs[pos:], '\n') 21 if idx < 0 { 22 wn, err := b.Writer.Write(bs[pos:]) 23 return n + wn, err 24 } 25 26 if idx > 0 { 27 wn, err := b.Writer.Write(bs[pos : pos+idx]) 28 n += wn 29 if err != nil { 30 return n, err 31 } 32 } 33 34 if _, err = b.Writer.Write([]byte("<br>")); err != nil { 35 return n, err 36 } 37 pos += idx + 1 38 39 n++ 40 } 41 42 return n, err 43 }