Source File
normalize.go
Belonging Package
vendor/golang.org/x/text/unicode/norm
package norm // import "golang.org/x/text/unicode/norm"
import (
)
func ( Form) ( []byte) bool {
:= inputBytes()
:= formTable[]
, := .quickSpan(, 0, len(), true)
if {
return true
}
:= reorderBuffer{f: *, src: , nsrc: len()}
.setFlusher(nil, cmpNormalBytes)
for < len() {
.out = [:]
if = decomposeSegment(&, , true); < 0 {
return false
}
, _ = .f.quickSpan(.src, , len(), true)
}
return true
}
func ( *reorderBuffer) bool {
:= .out
for := 0; < .nrune; ++ {
:= .rune[]
if int(.size) > len() {
return false
}
:= .pos
:= + .size
for ; < ; ++ {
if [0] != .byte[] {
return false
}
= [1:]
}
}
return true
}
func ( Form) ( string) bool {
:= inputString()
:= formTable[]
, := .quickSpan(, 0, len(), true)
if {
return true
}
:= reorderBuffer{f: *, src: , nsrc: len()}
.setFlusher(nil, func( *reorderBuffer) bool {
for := 0; < .nrune; ++ {
:= .rune[]
if +int(.size) > len() {
return false
}
:= .pos
:= + .size
for ; < ; ++ {
if [] != .byte[] {
return false
}
++
}
}
return true
})
for < len() {
if = decomposeSegment(&, , true); < 0 {
return false
}
, _ = .f.quickSpan(.src, , len(), true)
}
return true
}
:= make([]byte, 0)
= append(, .out[len(.out)-:]...)
.out = .out[:]
decomposeToLastBoundary()
.doFlush()
.out = append(.out, ...)
return false
}
:= .out[:]
.out = .out[:]
decomposeToLastBoundary()
if := .ss.next(); == ssStarter {
.doFlush()
.ss.first()
} else if == ssOverflow {
.doFlush()
.insertCGJ()
.ss = 0
}
.insertUnsafe(inputBytes(), 0, )
return true
}
func ( *reorderBuffer, int) int {
if .nsrc == {
return
}
, := .f.quickSpan(.src, , .nsrc, true)
.out = .src.appendSlice(.out, , )
return
}
if len() == 0 {
, := .quickSpan(, 0, , true)
= .appendSlice(, 0, )
if == {
return
}
:= reorderBuffer{f: *, src: , nsrc: , out: , flushF: appendFlush}
return doAppendInner(&, )
}
:= reorderBuffer{f: *, src: , nsrc: }
return doAppend(&, , 0)
}
func ( *reorderBuffer, []byte, int) []byte {
.setFlusher(, appendFlush)
, := .src, .nsrc
:= len() > 0
.out = .appendSlice(.out, , )
=
= patchTail()
}
:= &.f
if {
var Properties
if < {
= .info(, )
if !.BoundaryBefore() || .nLeadingNonStarters() > 0 {
if == 0 {
decomposeToLastBoundary()
}
= decomposeSegment(, , true)
}
}
if .size == 0 {
return .appendSlice(.out, , )
}
if .nrune > 0 {
return doAppendInner(, )
}
}
= appendQuick(, )
return doAppendInner(, )
}
func ( *reorderBuffer, int) []byte {
for := .nsrc; < ; {
= decomposeSegment(, , true)
= appendQuick(, )
}
return .out
}
func ( Form) ( []byte, bool) ( int, error) {
, := formTable[].quickSpan(inputBytes(), 0, len(), )
if < len() {
if ! {
= transform.ErrEndOfSpan
} else {
= transform.ErrShortSrc
}
}
return ,
}
func ( Form) ( string, bool) ( int, error) {
, := formTable[].quickSpan(inputString(), 0, len(), )
if < len() {
if ! {
= transform.ErrEndOfSpan
} else {
= transform.ErrShortSrc
}
}
return ,
}
func ( Form) ( []byte) int {
return .firstBoundary(inputBytes(), len())
}
func ( Form) ( input, int) int {
:= .skipContinuationBytes(0)
if >= {
return -1
}
:= formTable[]
func ( Form) ( string) int {
return .firstBoundary(inputString(), len())
}
func ( Form) ( []byte, bool) int {
return .nextBoundary(inputBytes(), len(), )
}
func ( Form) ( string, bool) int {
return .nextBoundary(inputString(), len(), )
}
func ( Form) ( input, int, bool) int {
if == 0 {
if {
return 0
}
return -1
}
:= formTable[]
:= .info(, 0)
if .size == 0 {
if {
return 1
}
return -1
}
:= streamSafe(0)
.first()
for := int(.size); < ; += int(.size) {
= .info(, )
if .size == 0 {
if {
return
}
return -1
if := .next(); != ssSuccess {
return
}
}
if ! && !.BoundaryAfter() && !.isMax() {
return -1
}
return
}
func ( Form) ( []byte) int {
return lastBoundary(formTable[], )
}
func ( *formInfo, []byte) int {
:= len()
, := lastRuneStart(, )
if == -1 {
return -1
}
if .size == 0 { // ends with incomplete rune
if == 0 { // starts with incomplete rune
return -1
}
=
, = lastRuneStart(, [:])
if == -1 { // incomplete UTF-8 encoding or non-starter bytes without a starter
return
}
}
if +int(.size) != { // trailing non-starter bytes: illegal UTF-8
return
}
if .BoundaryAfter() {
return
}
:= streamSafe(0)
:= .backwards()
for = ; >= 0 && != ssStarter; = {
, = lastRuneStart(, [:])
if = .backwards(); == ssOverflow {
break
}
if +int(.size) != {
if == -1 { // no boundary found
return -1
}
return // boundary after an illegal UTF-8 encoding
}
}
return
}
if .nrune > 0 {
goto
}
} else if == ssOverflow {
.insertCGJ()
goto
}
if := .insertFlush(.src, , ); != iSuccess {
return int()
}
for {
+= int(.size)
if >= .nsrc {
if ! && !.BoundaryAfter() {
return int(iShortSrc)
}
break
}
= .f.info(.src, )
if .size == 0 {
if ! {
return int(iShortSrc)
}
break
}
if := .ss.next(); == ssStarter {
break
} else if == ssOverflow {
.insertCGJ()
break
}
if := .insertFlush(.src, , ); != iSuccess {
return int()
}
}
:
if !.doFlush() {
return int(iShortDst)
}
return
}
func ( *formInfo, []byte) (Properties, int) {
:= len() - 1
for ; >= 0 && !utf8.RuneStart([]); -- {
}
if < 0 {
return Properties{}, -1
}
return .info(inputBytes(), ),
}
func ( *reorderBuffer) {
:= &.f
, := lastRuneStart(, .out)
return
}
if .BoundaryAfter() {
return
}
var [maxNonStarters + 1]Properties // stores runeInfo in reverse order
:= 0
:= streamSafe(0)
:= len(.out)
for {
[] =
:= .backwards()
var [maxBufferSize * utf8.UTFMax]byte
:= [:copy([:], .out[:])]
.out = .out[:]
for --; >= 0; -- {
= []
.insertUnsafe(inputBytes(), 0, )
= [.size:]
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |