package cases
import
type context struct {
dst, src []byte
atEOF bool
pDst int
pSrc int
nDst, nSrc int
err error
sz int
info info
isMidWord bool
}
func ( *context) () {
.isMidWord = false
}
func ( *context) () (, int, error) {
if .err != nil || .nSrc == len(.src) {
return .nDst, .nSrc, .err
}
if .atEOF && .pSrc == len(.src) {
return .pDst, .pSrc, nil
}
return .nDst, .nSrc, transform.ErrShortSrc
}
func ( *context) () ( int, error) {
, , := .ret()
return ,
}
func ( *context) () {
if .err == nil {
.nDst, .nSrc = .pDst, .pSrc+.sz
}
}
func ( *context) () {
.sz = 0
}
func ( *context) () bool {
.pSrc += .sz
if .pSrc == len(.src) || .err != nil {
.info, .sz = 0, 0
return false
}
, := trie.lookup(.src[.pSrc:])
.info, .sz = info(),
if .sz == 0 {
if .atEOF {
.sz = 1
} else {
.err = transform.ErrShortSrc
return false
}
}
return true
}
func ( *context) ( []byte) bool {
if len(.dst)-.pDst < len() {
.err = transform.ErrShortDst
return false
}
for , := range {
.dst[.pDst] =
.pDst++
}
return true
}
func ( *context) ( string) bool {
if len(.dst)-.pDst < len() {
.err = transform.ErrShortDst
return false
}
for := 0; < len(); ++ {
.dst[.pDst] = []
.pDst++
}
return true
}
func ( *context) () bool {
return .writeBytes(.src[.pSrc : .pSrc+.sz])
}
func ( *context) () bool {
if !.copy() {
return false
}
if .info&xorIndexBit == 0 {
.dst[.pDst-1] ^= byte(.info >> xorShift)
} else {
:= .info >> xorShift
for := .pDst - 1; ; -- {
.dst[] ^= xorData[]
--
if xorData[] == 0 {
break
}
}
}
return true
}
func ( *context) ( string) bool {
:= .src[.pSrc:]
if len() < len() {
return false
}
for , := range [:len()] {
if != [] {
return false
}
}
return true
}
func ( *context) () info {
:= .info & 0x7
if < 4 {
return
}
if >= cXORCase {
:= .src[.pSrc+.sz-1]
return info(&1) ^ &0x3
}
if == cIgnorableCased {
return cLower
}
return cUncased
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cLower {
return .copy()
}
if .info&exceptionBit == 0 {
return .copyXOR()
}
:= exceptions[.info>>exceptionShift:]
:= 2 + [0]&lengthMask
if := ([1] >> lengthBits) & lengthMask; != noChange {
return .writeString([ : +])
}
return .copy()
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cLower {
return true
}
if .info&exceptionBit == 0 {
.err = transform.ErrEndOfSpan
return false
}
:= exceptions[.info>>exceptionShift:]
if := ([1] >> lengthBits) & lengthMask; != noChange {
.err = transform.ErrEndOfSpan
return false
}
return true
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cUpper {
return .copy()
}
if .info&exceptionBit == 0 {
return .copyXOR()
}
:= exceptions[.info>>exceptionShift:]
:= 2 + [0]&lengthMask
:= ([1] >> lengthBits) & lengthMask
if == cTitle {
if == noChange {
= 0
}
, = [1]&lengthMask, [:]
}
if != noChange {
return .writeString([ : +])
}
return .copy()
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cUpper {
return true
}
if .info&exceptionBit == 0 {
.err = transform.ErrEndOfSpan
return false
}
:= exceptions[.info>>exceptionShift:]
:= ([1] >> lengthBits) & lengthMask
if == cTitle {
= [1] & lengthMask
}
if != noChange {
.err = transform.ErrEndOfSpan
return false
}
return true
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cTitle {
return .copy()
}
if .info&exceptionBit == 0 {
if == cLower {
return .copyXOR()
}
return .copy()
}
:= exceptions[.info>>exceptionShift:]
:= 2 + [0]&lengthMask
:= ([1] >> lengthBits) & lengthMask
if := [1] & lengthMask; != noChange {
if != noChange {
= [:]
}
return .writeString([ : +])
}
if == cLower && != noChange {
return .writeString([ : +])
}
return .copy()
}
func ( *context) bool {
:= .caseType()
if .info&hasMappingMask == 0 || == cTitle {
return true
}
if .info&exceptionBit == 0 {
if == cLower {
.err = transform.ErrEndOfSpan
return false
}
return true
}
:= exceptions[.info>>exceptionShift:]
if := [1] & lengthMask; != noChange {
.err = transform.ErrEndOfSpan
return false
}
:= ([1] >> lengthBits) & lengthMask
if == cLower && != noChange {
.err = transform.ErrEndOfSpan
return false
}
return true
}
func ( *context) bool {
if .info&hasMappingMask == 0 {
return .copy()
}
:= .caseType()
if .info&exceptionBit == 0 {
if != cLower || .info&inverseFoldBit != 0 {
return .copyXOR()
}
return .copy()
}
:= exceptions[.info>>exceptionShift:]
:= [0] & lengthMask
if == 0 {
if == cLower {
return .copy()
}
= ([1] >> lengthBits) & lengthMask
}
return .writeString([2 : 2+])
}
func ( *context) bool {
if .info&hasMappingMask == 0 {
return true
}
:= .caseType()
if .info&exceptionBit == 0 {
if != cLower || .info&inverseFoldBit != 0 {
.err = transform.ErrEndOfSpan
return false
}
return true
}
:= exceptions[.info>>exceptionShift:]
:= [0] & lengthMask
if == 0 && == cLower {
return true
}
.err = transform.ErrEndOfSpan
return false
}