You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

breakwriter.go 780B

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