package uniseg
const (
grAny = iota
grCR
grControlLF
grL
grLVV
grLVTT
grPrepend
grExtendedPictographic
grExtendedPictographicZWJ
grRIOdd
grRIEven
)
const (
grNoBoundary = iota
grBoundary
)
var grTransitions = map [[2 ]int ][3 ]int {
{grAny , prCR }: {grCR , grBoundary , 50 },
{grAny , prLF }: {grControlLF , grBoundary , 50 },
{grAny , prControl }: {grControlLF , grBoundary , 50 },
{grCR , prAny }: {grAny , grBoundary , 40 },
{grControlLF , prAny }: {grAny , grBoundary , 40 },
{grCR , prLF }: {grControlLF , grNoBoundary , 30 },
{grAny , prL }: {grL , grBoundary , 9990 },
{grL , prL }: {grL , grNoBoundary , 60 },
{grL , prV }: {grLVV , grNoBoundary , 60 },
{grL , prLV }: {grLVV , grNoBoundary , 60 },
{grL , prLVT }: {grLVTT , grNoBoundary , 60 },
{grAny , prLV }: {grLVV , grBoundary , 9990 },
{grAny , prV }: {grLVV , grBoundary , 9990 },
{grLVV , prV }: {grLVV , grNoBoundary , 70 },
{grLVV , prT }: {grLVTT , grNoBoundary , 70 },
{grAny , prLVT }: {grLVTT , grBoundary , 9990 },
{grAny , prT }: {grLVTT , grBoundary , 9990 },
{grLVTT , prT }: {grLVTT , grNoBoundary , 80 },
{grAny , prExtend }: {grAny , grNoBoundary , 90 },
{grAny , prZWJ }: {grAny , grNoBoundary , 90 },
{grAny , prSpacingMark }: {grAny , grNoBoundary , 91 },
{grAny , prPrepend }: {grPrepend , grBoundary , 9990 },
{grPrepend , prAny }: {grAny , grNoBoundary , 92 },
{grAny , prExtendedPictographic }: {grExtendedPictographic , grBoundary , 9990 },
{grExtendedPictographic , prExtend }: {grExtendedPictographic , grNoBoundary , 110 },
{grExtendedPictographic , prZWJ }: {grExtendedPictographicZWJ , grNoBoundary , 110 },
{grExtendedPictographicZWJ , prExtendedPictographic }: {grExtendedPictographic , grNoBoundary , 110 },
{grAny , prRegionalIndicator }: {grRIOdd , grBoundary , 9990 },
{grRIOdd , prRegionalIndicator }: {grRIEven , grNoBoundary , 120 },
{grRIEven , prRegionalIndicator }: {grRIOdd , grBoundary , 120 },
}
func transitionGraphemeState(state int , r rune ) (newState , prop int , boundary bool ) {
prop = property (graphemeCodePoints , r )
transition , ok := grTransitions [[2 ]int {state , prop }]
if ok {
return transition [0 ], prop , transition [1 ] == grBoundary
}
transAnyProp , okAnyProp := grTransitions [[2 ]int {state , prAny }]
transAnyState , okAnyState := grTransitions [[2 ]int {grAny , prop }]
if okAnyProp && okAnyState {
newState = transAnyState [0 ]
boundary = transAnyState [1 ] == grBoundary
if transAnyProp [2 ] < transAnyState [2 ] {
boundary = transAnyProp [1 ] == grBoundary
}
return
}
if okAnyProp {
return transAnyProp [0 ], prop , transAnyProp [1 ] == grBoundary
}
if okAnyState {
return transAnyState [0 ], prop , transAnyState [1 ] == grBoundary
}
return grAny , prop , true
}
The pages are generated with Golds v0.6.7 . (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 @Go100and1 (reachable from the left QR code) to get the latest news of Golds .