1
0
html/eq.go
2025-10-06 17:03:52 +02:00

73 lines
997 B
Go

package html
func eq2(t1, t2 Tag) bool {
if Name(t1) != Name(t2) {
return false
}
a1, a2 := AllAttributes(t1), AllAttributes(t2)
if len(a1.names) != len(a2.names) {
return false
}
for i, name := range a1.names {
if a2.names[i] != name {
return false
}
v1 := a1.values[name]
v2, ok := a2.values[name]
if !ok || v1 != v2 {
return false
}
}
var rgq renderGuidesQuery
t1(&rgq)
trg1 := mergeRenderingGuides(rgq.value)
t2(&rgq)
trg2 := mergeRenderingGuides(rgq.value)
if trg1 != trg2 {
return false
}
c1, c2 := Children(t1), Children(t2)
if len(c1) != len(c2) {
return false
}
for i := range c1 {
ct1, ok1 := c1[i].(Tag)
ct2, ok2 := c2[i].(Tag)
if ok1 != ok2 {
return false
}
if ok1 && !Eq(ct1, ct2) {
return false
}
if ok1 {
continue
}
if c1[i] != c2[i] {
return false
}
}
return true
}
func eq(t ...Tag) bool {
if len(t) < 2 {
return true
}
if !eq2(t[0], t[1]) {
return false
}
return eq(t[1:]...)
}