convert_helper.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package binding
  2. import (
  3. "strconv"
  4. "strings"
  5. "fyne.io/fyne/v2"
  6. "fyne.io/fyne/v2/storage"
  7. )
  8. func stripFormatPrecision(in string) string {
  9. // quick exit if certainly not float
  10. if !strings.ContainsAny(in, "f") {
  11. return in
  12. }
  13. start := -1
  14. end := -1
  15. runes := []rune(in)
  16. for i, r := range runes {
  17. switch r {
  18. case '%':
  19. if i > 0 && start == i-1 { // ignore %%
  20. start = -1
  21. } else {
  22. start = i
  23. }
  24. case 'f':
  25. if start == -1 { // not part of format
  26. continue
  27. }
  28. end = i
  29. }
  30. if end > -1 {
  31. break
  32. }
  33. }
  34. if end == start+1 { // no width/precision
  35. return in
  36. }
  37. sizeRunes := runes[start+1 : end]
  38. width, err := parseFloat(string(sizeRunes))
  39. if err != nil {
  40. return string(runes[:start+1]) + string(runes[:end])
  41. }
  42. if sizeRunes[0] == '.' { // formats like %.2f
  43. return string(runes[:start+1]) + string(runes[end:])
  44. }
  45. return string(runes[:start+1]) + strconv.Itoa(int(width)) + string(runes[end:])
  46. }
  47. func uriFromString(in string) (fyne.URI, error) {
  48. return storage.ParseURI(in)
  49. }
  50. func uriToString(in fyne.URI) (string, error) {
  51. if in == nil {
  52. return "", nil
  53. }
  54. return in.String(), nil
  55. }
  56. func parseBool(in string) (bool, error) {
  57. out, err := strconv.ParseBool(in)
  58. if err != nil {
  59. return false, err
  60. }
  61. return out, nil
  62. }
  63. func parseFloat(in string) (float64, error) {
  64. out, err := strconv.ParseFloat(in, 64)
  65. if err != nil {
  66. return 0, err
  67. }
  68. return out, nil
  69. }
  70. func parseInt(in string) (int, error) {
  71. out, err := strconv.ParseInt(in, 0, 64)
  72. if err != nil {
  73. return 0, err
  74. }
  75. return int(out), nil
  76. }
  77. func formatBool(in bool) string {
  78. return strconv.FormatBool(in)
  79. }
  80. func formatFloat(in float64) string {
  81. return strconv.FormatFloat(in, 'f', 6, 64)
  82. }
  83. func formatInt(in int) string {
  84. return strconv.FormatInt(int64(in), 10)
  85. }