Optimisation

This commit is contained in:
Alexei Anoshenko 2026-06-15 18:02:23 +03:00
parent 91860d799d
commit 69a4d1e712
12 changed files with 92 additions and 78 deletions

View File

@ -866,8 +866,8 @@ func isTimingFunctionValid(timingFunction string) bool {
}
case "cubic-bezier":
if params := strings.Split(args, ","); len(params) == 4 {
for _, param := range params {
if strings.Count(args, ",") == 3 {
for param := range strings.SplitSeq(args, ",") {
if _, err := strconv.ParseFloat(strings.Trim(param, " \t\n"), 64); err != nil {
return false
}

View File

@ -630,9 +630,8 @@ func (canvas *canvasData) fontWithParams(name string, size SizeUnit, params Font
buffer.WriteString(params.LineHeight.cssString("", canvas.View().Session()))
}
names := strings.Split(name, ",")
lead := " "
for _, font := range names {
for font := range strings.SplitSeq(name, ",") {
font = strings.Trim(font, " \n\"'")
buffer.WriteString(lead)
lead = ","

View File

@ -480,14 +480,13 @@ func polygonClipDataSet(properties Properties, tag PropertyName, value any) []Pr
return []PropertyName{tag}
case string:
values := strings.Split(value, ",")
points := make([]any, len(values))
for i, val := range values {
points := make([]any, 0, strings.Count(value, ",")+1)
for val := range strings.SplitSeq(value, ",") {
val = strings.Trim(val, " \t\n\r")
if ok, _ := isConstantName(val); ok {
points[i] = val
points = append(points, val)
} else if size, ok := StringToSizeUnit(val); ok {
points[i] = size
points = append(points, size)
} else {
notCompatibleType(tag, val)
return nil

View File

@ -229,15 +229,13 @@ func (event *DragAndDropEvent) init(session Session, data DataObject) {
event.Data = map[string]string{}
if value, ok := data.PropertyValue("data"); ok {
data := strings.Split(value, ";")
for _, line := range data {
pair := strings.Split(line, ":")
if len(pair) == 2 {
mime, err := base64.StdEncoding.DecodeString(pair[0])
for line := range strings.SplitSeq(value, ";") {
if mimeData, data, ok := strings.Cut(line, ":"); ok {
mime, err := base64.StdEncoding.DecodeString(mimeData)
if err != nil {
ErrorLog(err.Error())
} else {
val, err := base64.StdEncoding.DecodeString(pair[1])
val, err := base64.StdEncoding.DecodeString(data)
if err == nil {
event.Data[string(mime)] = string(val)
} else {
@ -322,9 +320,8 @@ func (view *viewData) setDropEffect(value any) []PropertyName {
func stringToDropEffectAllowed(text string) (int, bool) {
if strings.ContainsRune(text, '|') {
elements := strings.Split(text, "|")
result := 0
for _, element := range elements {
for element := range strings.SplitSeq(text, "|") {
if n, ok := stringToDropEffect(element); ok && n != DropEffectUndefined {
result |= n
} else {

View File

@ -489,10 +489,13 @@ func gridCellSizes(properties Properties, tag PropertyName, session Session) []S
case string:
if text, ok := session.resolveConstants(value); ok {
values := strings.Split(text, ",")
result := make([]SizeUnit, len(values))
for i, val := range values {
result[i], _ = stringToSizeUnit(val)
result := make([]SizeUnit, 0, strings.Count(text, ",")+1)
for val := range strings.SplitSeq(text, ",") {
size, err := stringToSizeUnit(val)
if err != nil {
ErrorLog(err.Error())
}
result = append(result, size)
}
return result
}

View File

@ -187,12 +187,15 @@ func (imageView *imageViewData) propertyChanged(tag PropertyName) {
func imageViewSrcSet(view View, path string) string {
if value := view.getRaw(SrcSet); value != nil {
if text, ok := value.(string); ok {
srcset := strings.Split(text, ",")
buffer := allocStringBuilder()
defer freeStringBuilder(buffer)
for i, src := range srcset {
if i > 0 {
comma := false
for src := range strings.SplitSeq(text, ",") {
if comma {
buffer.WriteString(", ")
} else {
comma = true
}
src = strings.Trim(src, " \t\n")
buffer.WriteString(src)

View File

@ -220,9 +220,8 @@ func (listView *listViewData) setFunc(tag PropertyName, value any) []PropertyNam
var checked []int
switch value := value.(type) {
case string:
elements := strings.Split(value, ",")
checked = make([]int, 0, len(elements))
for _, val := range elements {
checked = make([]int, 0, strings.Count(value, ",")+1)
for val := range strings.SplitSeq(value, ",") {
if val = strings.Trim(val, " \t"); val != "" {
n, err := strconv.Atoi(val)
if err != nil {

View File

@ -649,22 +649,25 @@ func radiusPropertySet(radius Properties, tag PropertyName, value any) []Propert
deleteRadiusUnusedTags(radius, result)
case string:
if strings.ContainsRune(value, '/') {
if values := strings.Split(value, "/"); len(values) == 2 {
if result = radiusPropertySet(radius, tag+"-x", values[0]); result != nil {
if resultY := radiusPropertySet(radius, tag+"-y", values[1]); resultY != nil {
result = append(result, resultY...)
}
}
} else {
notCompatibleType(tag, value)
}
} else {
switch strings.Count(value, "/") {
case 0:
if result = setSizeProperty(radius, tag, value); result != nil {
deleteTags([]PropertyName{tag + "-x", tag + "-y"})
deleteRadiusUnusedTags(radius, result)
}
case 1:
if x, y, ok := strings.Cut(value, "/"); ok {
if result = radiusPropertySet(radius, tag+"-x", x); result != nil {
if resultY := radiusPropertySet(radius, tag+"-y", y); resultY != nil {
result = append(result, resultY...)
}
}
} else {
notCompatibleType(tag, value)
}
default:
notCompatibleType(tag, value)
}
}

View File

@ -20,30 +20,34 @@ func (r Range) String() string {
}
func (r *Range) setValue(value string) bool {
var err error
if strings.ContainsRune(value, ':') {
values := strings.Split(value, ":")
if len(values) != 2 {
ErrorLog("Invalid range value: " + value)
return false
}
if r.First, err = strconv.Atoi(strings.Trim(values[0], " \t\n\r")); err != nil {
ErrorLog(`Invalid first range value "` + value + `" (` + err.Error() + ")")
return false
}
if r.Last, err = strconv.Atoi(strings.Trim(values[1], " \t\n\r")); err != nil {
ErrorLog(`Invalid last range value "` + value + `" (` + err.Error() + ")")
switch strings.Count(value, ":") {
case 0:
if r.First, err = strconv.Atoi(value); err != nil {
ErrorLog(`Invalid range value "` + value + `" (` + err.Error() + ")")
return false
}
r.Last = r.First
return true
case 1:
if first, last, ok := strings.Cut(value, ":"); ok {
if r.First, err = strconv.Atoi(strings.Trim(first, " \t\n\r")); err != nil {
ErrorLog(`Invalid first range value "` + value + `" (` + err.Error() + ")")
return false
}
if r.Last, err = strconv.Atoi(strings.Trim(last, " \t\n\r")); err != nil {
ErrorLog(`Invalid last range value "` + value + `" (` + err.Error() + ")")
return false
}
return true
}
}
if r.First, err = strconv.Atoi(value); err != nil {
ErrorLog(`Invalid range value "` + value + `" (` + err.Error() + ")")
return false
}
r.Last = r.First
return true
ErrorLog("Invalid range value: " + value)
return false
}
func setRangeProperty(properties Properties, tag PropertyName, value any) []PropertyName {

View File

@ -175,9 +175,8 @@ func resizableSide(view View) int {
}
if strings.ContainsRune(value, '|') {
values := strings.Split(value, "|")
sides := 0
for _, val := range values {
for val := range strings.SplitSeq(value, "|") {
if n, err := strconv.Atoi(val); err == nil {
if n < 1 || n > AllSides {
return AllSides

View File

@ -804,29 +804,37 @@ func (table *tableViewData) setFunc(tag PropertyName, value any) []PropertyName
}
case string:
if strings.ContainsRune(value, ',') {
if values := strings.Split(value, ","); len(values) == 2 {
var n = []int{0, 0}
for i := range 2 {
var err error
if n[i], err = strconv.Atoi(values[i]); err != nil {
ErrorLog(err.Error())
return nil
}
}
current.Row = n[0]
current.Column = n[1]
} else {
notCompatibleType(tag, value)
return nil
}
} else {
switch strings.Count(value, ",") {
case 0:
n, err := strconv.Atoi(value)
if err != nil {
ErrorLog(err.Error())
return nil
}
current.Row = n
case 1:
n := make([]int, 0, 2)
for val := range strings.SplitSeq(value, ",") {
if i, err := strconv.Atoi(val); err != nil {
ErrorLog(err.Error())
return nil
} else {
n = append(n, i)
}
}
if len(n) == 2 {
current.Row = n[0]
current.Column = n[1]
} else {
notCompatibleType(tag, value)
return nil
}
default:
notCompatibleType(tag, value)
return nil
}
default:

View File

@ -143,8 +143,8 @@ func stringToTime(value string) (time.Time, bool) {
pm := strings.HasSuffix(lowText, "PM") || strings.HasSuffix(lowText, "AM")
var format string
switch len(strings.Split(value, ":")) {
case 2:
switch strings.Count(value, ":") {
case 1:
if pm {
format = "3:04 PM"
} else {