vendor: golang.org/x/text v0.43.0

- secure/bidirule: lazily precompute ASCII table
- unicode/bidi: avoid quadratic behavior in Paragraph.Order and Paragraph.Line

full diff: https://github.com/golang/text/compare/v0.42.0...v0.43.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn
2026-10-20 13:40:24 +02:00
parent 1faf23e25f
commit c7bdacad70
5 changed files with 58 additions and 65 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ require (
golang.org/x/sync v0.24.0
golang.org/x/sys v0.49.0
golang.org/x/term v0.47.0
golang.org/x/text v0.42.0
golang.org/x/text v0.43.0
gotest.tools/v3 v3.5.2
tags.cncf.io/container-device-interface v1.1.1
)
+2 -2
View File
@@ -210,8 +210,8 @@ golang.org/x/term v0.47.0 h1:cpyOwQkr2Nzxe2p6KnrTG7Ei2wtzjsuSjhpXXepZ/BM=
golang.org/x/term v0.47.0/go.mod h1:efAfAuG6RKABvg1ArGebRkvX6LXul14SM67o2e4mUCY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc=
golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s=
golang.org/x/time v0.16.0 h1:vMb6ptszcQMkcwiRTAuNNU50gom6++Q/6gY2hDM6VDE=
golang.org/x/time v0.16.0/go.mod h1:rVKOqvZeKvrDKTQiAHJ7wmwP0RzleSphoEA9RcdLA0s=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+7 -1
View File
@@ -10,6 +10,7 @@ package bidirule
import (
"errors"
"sync"
"unicode/utf8"
"golang.org/x/text/transform"
@@ -246,8 +247,9 @@ func (t *Transformer) Span(src []byte, atEOF bool) (n int, err error) {
// Precomputing the ASCII values decreases running time for the ASCII fast path
// by about 30%.
var asciiTable [128]bidi.Properties
var asciiTableOnce sync.Once
func init() {
func initASCIITable() {
for i := range asciiTable {
p, _ := bidi.LookupRune(rune(i))
asciiTable[i] = p
@@ -255,6 +257,8 @@ func init() {
}
func (t *Transformer) advance(s []byte) (n int, ok bool) {
asciiTableOnce.Do(initASCIITable)
var e bidi.Properties
var sz int
for n < len(s) {
@@ -297,6 +301,8 @@ func (t *Transformer) advance(s []byte) (n int, ok bool) {
}
func (t *Transformer) advanceString(s string) (n int, ok bool) {
asciiTableOnce.Do(initASCIITable)
var e bidi.Properties
var sz int
for n < len(s) {
+47 -60
View File
@@ -208,27 +208,23 @@ func (p *paragraph) determineMatchingIsolates() {
p.matchingIsolateInitiator[i] = -1
}
var open []int
for i := range p.matchingPDI {
p.matchingPDI[i] = -1
if t := p.resultTypes[i]; t.in(LRI, RLI, FSI) {
depthCounter := 1
for j := i + 1; j < p.Len(); j++ {
if u := p.resultTypes[j]; u.in(LRI, RLI, FSI) {
depthCounter++
} else if u == PDI {
if depthCounter--; depthCounter == 0 {
p.matchingPDI[i] = j
p.matchingIsolateInitiator[j] = i
break
}
}
}
if p.matchingPDI[i] == -1 {
p.matchingPDI[i] = p.Len()
}
switch t := p.resultTypes[i]; {
case t.in(LRI, RLI, FSI):
open = append(open, i)
case t == PDI && len(open) > 0:
j := open[len(open)-1]
open = open[:len(open)-1]
p.matchingPDI[j] = i
p.matchingIsolateInitiator[i] = j
}
}
for _, i := range open {
p.matchingPDI[i] = p.Len()
}
}
// determineParagraphEmbeddingLevel reports the resolved paragraph direction of
@@ -496,16 +492,13 @@ func (s *isolatingRunSequence) resolveWeakTypes() {
// Rule W2.
// EN does not change at the start of the run, because sos != AL.
lastStrong := unknownClass
for i, t := range s.types {
if t == EN {
for j := i - 1; j >= 0; j-- {
if t := s.types[j]; t.in(L, R, AL) {
if t == AL {
s.types[i] = AN
}
break
}
}
switch {
case t.in(L, R, AL):
lastStrong = t
case t == EN && lastStrong == AL:
s.types[i] = AN
}
}
@@ -543,29 +536,30 @@ func (s *isolatingRunSequence) resolveWeakTypes() {
}
// Rule W5.
for i, t := range s.types {
if t == ET {
// locate end of sequence
runStart := i
runEnd := s.findRunLimit(runStart, ET)
// check values at ends of sequence
t := s.sos
if runStart > 0 {
t = s.types[runStart-1]
}
if t != EN {
t = s.eos
if runEnd < len(s.types) {
t = s.types[runEnd]
}
}
if t == EN {
setTypes(s.types[runStart:runEnd], EN)
}
// continue at end of sequence
i = runEnd
for i := 0; i < len(s.types); i++ {
if s.types[i] != ET {
continue
}
// locate end of sequence
runStart := i
runEnd := s.findRunLimit(runStart, ET)
// check values at ends of sequence
t := s.sos
if runStart > 0 {
t = s.types[runStart-1]
}
if t != EN {
t = s.eos
if runEnd < len(s.types) {
t = s.types[runEnd]
}
}
if t == EN {
setTypes(s.types[runStart:runEnd], EN)
}
// continue at end of sequence
i = runEnd
}
// Rule W6.
@@ -576,20 +570,13 @@ func (s *isolatingRunSequence) resolveWeakTypes() {
}
// Rule W7.
prevStrongType := s.sos
for i, t := range s.types {
if t == EN {
// set default if we reach start of run
prevStrongType := s.sos
for j := i - 1; j >= 0; j-- {
t = s.types[j]
if t == L || t == R { // AL's have been changed to R
prevStrongType = t
break
}
}
if prevStrongType == L {
s.types[i] = L
}
switch {
case t == L || t == R: // AL's have been changed to R
prevStrongType = t
case t == EN && prevStrongType == L:
s.types[i] = L
}
}
}
+1 -1
View File
@@ -419,7 +419,7 @@ golang.org/x/sys/windows/registry
# golang.org/x/term v0.47.0
## explicit; go 1.26.0
golang.org/x/term
# golang.org/x/text v0.42.0
# golang.org/x/text v0.43.0
## explicit; go 1.26.0
golang.org/x/text/feature/plural
golang.org/x/text/internal