reader.go 610 B

12345678910111213141516171819202122232425
  1. // Package graphemes implements Unicode grapheme cluster boundaries: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
  2. package graphemes
  3. import (
  4. "bufio"
  5. "io"
  6. )
  7. type Scanner struct {
  8. *bufio.Scanner
  9. }
  10. // FromReader returns a Scanner, to split graphemes per
  11. // https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries.
  12. //
  13. // It embeds a [bufio.Scanner], so you can use its methods.
  14. //
  15. // Iterate through graphemes by calling Scan() until false, then check Err().
  16. func FromReader(r io.Reader) *Scanner {
  17. sc := bufio.NewScanner(r)
  18. sc.Split(SplitFunc)
  19. return &Scanner{
  20. Scanner: sc,
  21. }
  22. }