mirror of https://github.com/anoshenko/rui.git
Added drag-data property conversion to a string
This commit is contained in:
parent
9f0bce4a20
commit
76d572494a
49
viewStyle.go
49
viewStyle.go
|
|
@ -3,9 +3,11 @@ package rui
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"slices"
|
"slices"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ViewStyle interface of the style of view
|
// ViewStyle interface of the style of view
|
||||||
|
|
@ -573,6 +575,16 @@ func isQuotesNeeded(text string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isQuotesNeededForObjectName(name string) bool {
|
||||||
|
for _, char := range name {
|
||||||
|
if unicode.IsSpace(char) ||
|
||||||
|
slices.Contains([]rune{'=', '{', '}', '[', ']', ',', ' ', '\t', '\n', '\'', '"', '`', '/'}, char) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func replaceEscapeSymbols(text string) string {
|
func replaceEscapeSymbols(text string) string {
|
||||||
replace := []struct{ old, new string }{
|
replace := []struct{ old, new string }{
|
||||||
{old: "\\", new: `\\`},
|
{old: "\\", new: `\\`},
|
||||||
|
|
@ -600,6 +612,18 @@ func propertyValueToString(tag PropertyName, value any, indent string) string {
|
||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeObjectNameString := func(buffer *strings.Builder, text string) string {
|
||||||
|
textEscaped := replaceEscapeSymbols(text)
|
||||||
|
if isQuotesNeededForObjectName(textEscaped) {
|
||||||
|
buffer.WriteRune('"')
|
||||||
|
buffer.WriteString(textEscaped)
|
||||||
|
buffer.WriteRune('"')
|
||||||
|
} else {
|
||||||
|
buffer.WriteString(text)
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
switch value := value.(type) {
|
switch value := value.(type) {
|
||||||
case string:
|
case string:
|
||||||
if tag == Text || tag == Title || tag == Summary || isQuotesNeeded(value) {
|
if tag == Text || tag == Title || tag == Summary || isQuotesNeeded(value) {
|
||||||
|
|
@ -640,6 +664,31 @@ func propertyValueToString(tag PropertyName, value any, indent string) string {
|
||||||
buffer.WriteRune(']')
|
buffer.WriteRune(']')
|
||||||
return buffer.String()
|
return buffer.String()
|
||||||
|
|
||||||
|
case map[string]string:
|
||||||
|
if len(value) > 0 {
|
||||||
|
buffer := allocStringBuilder()
|
||||||
|
defer freeStringBuilder(buffer)
|
||||||
|
|
||||||
|
keys := make([]string, 0, len(value))
|
||||||
|
for key := range value {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
|
buffer.WriteString("{\n")
|
||||||
|
for _, key := range keys {
|
||||||
|
buffer.WriteString(indent)
|
||||||
|
buffer.WriteRune('\t')
|
||||||
|
writeObjectNameString(buffer, key)
|
||||||
|
buffer.WriteString(" = ")
|
||||||
|
writeString(buffer, value[key])
|
||||||
|
buffer.WriteString(",\n")
|
||||||
|
}
|
||||||
|
buffer.WriteString(indent)
|
||||||
|
buffer.WriteString("}")
|
||||||
|
return buffer.String()
|
||||||
|
}
|
||||||
|
return ""
|
||||||
case bool:
|
case bool:
|
||||||
if value {
|
if value {
|
||||||
return "true"
|
return "true"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue