de.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-FileCopyrightText: Adam Evyčędo
  2. //
  3. // SPDX-License-Identifier: AGPL-3.0-or-later
  4. package transformers
  5. import (
  6. "golang.org/x/text/transform"
  7. )
  8. //nolint:gochecknoglobals
  9. var TransformerDE transform.Transformer = ContextualLatiniser{
  10. Replace: func(previous, r rune) []rune {
  11. switch r {
  12. case 'ö':
  13. if previous == ZWJ {
  14. return []rune{'o', 'e'}
  15. }
  16. return []rune{r}
  17. case 'Ö':
  18. if previous == ZWJ {
  19. return []rune{'O', 'e'}
  20. }
  21. return []rune{r}
  22. case 'ä':
  23. if previous == ZWJ {
  24. return []rune{'a', 'e'}
  25. }
  26. return []rune{r}
  27. case 'Ä':
  28. if previous == ZWJ {
  29. return []rune{'A', 'e'}
  30. }
  31. return []rune{r}
  32. case 'ß':
  33. if previous == ZWJ {
  34. return []rune{'s', 's'}
  35. }
  36. return []rune{r}
  37. case 'ẞ':
  38. if previous == ZWJ {
  39. return []rune{'S', 'S'}
  40. }
  41. return []rune{r}
  42. case 'ü':
  43. if previous == ZWJ {
  44. return []rune{'u', 'e'}
  45. }
  46. return []rune{r}
  47. case 'Ü':
  48. if previous == ZWJ {
  49. return []rune{'U', 'e'}
  50. }
  51. return []rune{r}
  52. default:
  53. return []rune{r}
  54. }
  55. },
  56. }