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 .