package uniseg
const (
grAny = iota
grCR
grControlLF
grL
grLVV
grLVTT
grPrepend
grExtendedPictographic
grExtendedPictographicZWJ
grRIOdd
grRIEven
)
const (
grNoBoundary = iota
grBoundary
)
func grTransitions(state , prop int ) (newState int , newProp int , boundary int ) {
switch uint64 (state ) | uint64 (prop )<<32 {
case grAny | prCR <<32 :
return grCR , grBoundary , 50
case grAny | prLF <<32 :
return grControlLF , grBoundary , 50
case grAny | prControl <<32 :
return grControlLF , grBoundary , 50
case grCR | prAny <<32 :
return grAny , grBoundary , 40
case grControlLF | prAny <<32 :
return grAny , grBoundary , 40
case grCR | prLF <<32 :
return grControlLF , grNoBoundary , 30
case grAny | prL <<32 :
return grL , grBoundary , 9990
case grL | prL <<32 :
return grL , grNoBoundary , 60
case grL | prV <<32 :
return grLVV , grNoBoundary , 60
case grL | prLV <<32 :
return grLVV , grNoBoundary , 60
case grL | prLVT <<32 :
return grLVTT , grNoBoundary , 60
case grAny | prLV <<32 :
return grLVV , grBoundary , 9990
case grAny | prV <<32 :
return grLVV , grBoundary , 9990
case grLVV | prV <<32 :
return grLVV , grNoBoundary , 70
case grLVV | prT <<32 :
return grLVTT , grNoBoundary , 70
case grAny | prLVT <<32 :
return grLVTT , grBoundary , 9990
case grAny | prT <<32 :
return grLVTT , grBoundary , 9990
case grLVTT | prT <<32 :
return grLVTT , grNoBoundary , 80
case grAny | prExtend <<32 :
return grAny , grNoBoundary , 90
case grAny | prZWJ <<32 :
return grAny , grNoBoundary , 90
case grAny | prSpacingMark <<32 :
return grAny , grNoBoundary , 91
case grAny | prPrepend <<32 :
return grPrepend , grBoundary , 9990
case grPrepend | prAny <<32 :
return grAny , grNoBoundary , 92
case grAny | prExtendedPictographic <<32 :
return grExtendedPictographic , grBoundary , 9990
case grExtendedPictographic | prExtend <<32 :
return grExtendedPictographic , grNoBoundary , 110
case grExtendedPictographic | prZWJ <<32 :
return grExtendedPictographicZWJ , grNoBoundary , 110
case grExtendedPictographicZWJ | prExtendedPictographic <<32 :
return grExtendedPictographic , grNoBoundary , 110
case grAny | prRegionalIndicator <<32 :
return grRIOdd , grBoundary , 9990
case grRIOdd | prRegionalIndicator <<32 :
return grRIEven , grNoBoundary , 120
case grRIEven | prRegionalIndicator <<32 :
return grRIOdd , grBoundary , 120
default :
return -1 , -1 , -1
}
}
func transitionGraphemeState(state int , r rune ) (newState , prop int , boundary bool ) {
prop = propertyGraphemes (r )
nextState , nextProp , _ := grTransitions (state , prop )
if nextState >= 0 {
return nextState , prop , nextProp == grBoundary
}
anyPropState , anyPropProp , anyPropRule := grTransitions (state , prAny )
anyStateState , anyStateProp , anyStateRule := grTransitions (grAny , prop )
if anyPropState >= 0 && anyStateState >= 0 {
newState = anyStateState
boundary = anyStateProp == grBoundary
if anyPropRule < anyStateRule {
boundary = anyPropProp == grBoundary
}
return
}
if anyPropState >= 0 {
return anyPropState , prop , anyPropProp == grBoundary
}
if anyStateState >= 0 {
return anyStateState , prop , anyStateProp == grBoundary
}
return grAny , prop , true
}
The pages are generated with Golds v0.8.2 . (GOOS=linux 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 @zigo_101 (reachable from the left QR code) to get the latest news of Golds .