You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: ot_use_table.go
    path of file: ./repos/caire/vendor/github.com/go-text/typesetting/harfbuzz
    
    the code of the file until where you have to start completion: // SPDX-License-Identifier: Unlicense OR BSD-3-Clause

package harfbuzz

// Code generated by typesettings-utils/generators/unicodedata/cmd/main.go DO NOT EDIT.
const (
	_B    = useSM_ex_B
	_CGJ  = useSM_ex_CGJ
	_CS   = useSM_ex_CS
	_G    = useSM_ex_G
	_GB   = useSM_ex_GB
	_H    = useSM_ex_H
	_HN   = useSM_ex_HN
	_HVM  = useSM_ex_HVM
	_IS   = useSM_ex_IS
	_J    = useSM_ex_J
	_N    = useSM_ex_N
	_O    = useSM_ex_O
	_R    = useSM_ex_R
	_SB   = useSM_ex_SB
	_SE   = useSM_ex_SE
	_SUB  = useSM_ex_SUB
	_Sk   = useSM_ex_Sk
	_WJ   = useSM_ex_WJ
	_ZWNJ = useSM_ex_ZWNJ
)
const (
	_CMAbv = useSM_ex_CMAbv
	_CMBlw = useSM_ex_CMBlw
	_FAbv  = useSM_ex_FAbv
	_FBlw  = useSM_ex_FBlw
	_FPst  = useSM_ex_FPst
	_FMAbv = useSM_ex_FMAbv
	_FMBlw = useSM_ex_FMBlw
	_FMPst = useSM_ex_FMPst
	_MAbv  = useSM_ex_MAbv
	_MBlw  = useSM_ex_MBlw
	_MPre  = useSM_ex_MPre
	_MPst  = useSM_ex_MPst
	_SMAbv = useSM_ex_SMAbv
	_SMBlw = useSM_ex_SMBlw
	_VAbv  = useSM_ex_VAbv
	_VBlw  = useSM_ex_VBlw
	_VPre  = useSM_ex_VPre
	_VPst  = useSM_ex_VPst
	_VMAbv = useSM_ex_VMAbv
	_VMBlw = useSM_ex_VMBlw
	_VMPre = useSM_ex_VMPre
	_VMPst = useSM_ex_VMPst
)

var useTable = [...]uint8{

	/* Basic Latin */
	_O, _O, _O, _O, _O, _GB, _O, _O,
	/* 0030 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _O, _O, _O, _O, _O, _O,

	/* Latin-1 Supplement */

	/* 00A0 */ _GB, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _WJ, _O, _O,
	/* 00B0 */ _O, _O, _FMPst, _FMPst, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O,
	/* 00C0 */ _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O,
	/* 00D0 */ _O, _O, _O, _O, _O, _O, _O, _GB,

	/* Combining Diacritical Marks */
	_O, _O, _O, _O, _O, _O, _O, _CGJ,

	/* Arabic */

	/* 0640 */ _B, _O, _O, _O, _O, _O, _O, _O,

	/* NKo */
	_O, _O, _B, _B, _B, _B, _B, _B,
	/* 07D0 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 07E0 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _VMAbv, _VMAbv, _VMAbv, _VMAbv, _VMAbv,
	/* 07F0 */ _VMAbv, _VMAbv, _VMAbv, _VMAbv, _O, _O, _O, _O,

	/* Mandaic */

	/* 0840 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0850 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _CMBlw, _CMBlw, _CMBlw, _WJ, _WJ, _O, _WJ,

	/* Devanagari */

	/* 0900 */ _VMAbv, _VMAbv, _VMAbv, _VMPst, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0910 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0920 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0930 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _VAbv, _VPst, _CMBlw, _B, _VPst, _VPre,
	/* 0940 */ _VPst, _VBlw, _VBlw, _VBlw, _VBlw, _VAbv, _VAbv, _VAbv, _VAbv, _VPst, _VPst, _VPst, _VPst, _H, _VPre, _VPst,
	/* 0950 */ _O, _VMAbv, _VMBlw, _O, _O, _VAbv, _VBlw, _VBlw, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0960 */ _B, _B, _VBlw, _VBlw, _O, _O, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0970 */ _O, _O, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,

	/* Bengali */

	/* 0980 */ _GB, _VMAbv, _VMPst, _VMPst, _WJ, _B, _B, _B, _B, _B, _B, _B, _B, _WJ, _WJ, _B,
	/* 0990 */ _B, _WJ, _WJ, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 09A0 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _WJ, _B, _B, _B, _B, _B, _B,
	/* 09B0 */ _B, _WJ, _B, _WJ, _WJ, _WJ, _B, _B, _B, _B, _WJ, _WJ, _CMBlw, _B, _VPst, _VPre,
	/* 09C0 */ _VPst, _VBlw, _VBlw, _VBlw, _VBlw, _WJ, _WJ, _VPre, _VPre, _WJ, _WJ, _VPre, _VPre, _H, _O, _WJ,
	/* 09D0 */ _WJ, _WJ, _WJ, _WJ, _WJ, _WJ, _WJ, _VPst, _WJ, _WJ, _WJ, _WJ, _B, _B, _WJ, _B,
	/* 09E0 */ _B, _B, _VBlw, _VBlw, _WJ, _WJ, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 09F0 */ _B, _B, _O, _O, _O, _O, _O, _O, _O, _O, _O, _O, _B, _O, _FMAbv, _WJ,

	/* Gurmukhi */

	/* 0A00 */ _WJ, _VMAbv, _VMAbv, _VMPst, _WJ, _B, _B, _B, _B, _B, _B, _WJ, _WJ, _WJ, _WJ, _B,
	/* 0A10 */ _B, _WJ, _WJ, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B, _B,
	/* 0A20 */ _B, _B, _B, _B, _B, _B, _B, _B, _B, _WJ, _B, _B, _B, _B, _B, _B,
	/* 0A30 */ _B, _WJ, _B, _B, _WJ, _B, _B, _WJ, _B, _B, _WJ, _WJ, _CMBlw, _WJ, _VPst, _VPre,
	/* 0A40 */ _VPst, _VBlw, _VBlw, _WJ, _W
    
func getUSECategory(u rune) uint8 {
	switch u >> 12 {
	case 0x0:
		if 0x0028 <= u && u <= 0x003F {
			return useTable[u-0x0028+offsetUSE0x0028u]
		}
		if 0x00A0 <= u && u <= 0x00D7 {
			return useTable[u-0x00A0+offsetUSE0x00a0u]
		}
		if 0x0348 <= u && u <= 0x034F {
			return useTable[u-0x0348+offsetUSE0x0348u]
		}
		if 0x0640 <= u && u <= 0x0647 {
			return useTable[u-0x0640+offsetUSE0x0640u]
		}
		if 0x07C8 <= u && u <= 0x07F7 {
			return useTable[u-0x07C8+offsetUSE0x07c8u]
		}
		if 0x0840 <= u && u <= 0x085F {
			return useTable[u-0x0840+offsetUSE0x0840u]
		}
		if 0x0900 <= u && u <= 0x0DF7 {
			return useTable[u-0x0900+offsetUSE0x0900u]
		}
		if 0x0F00 <= u && u <= 0x0FBF {
			return useTable[u-0x0F00+offsetUSE0x0f00u]
		}

	case 0x1:
		if 0x1000 <= u && u <= 0x109F {
			return useTable[u-0x1000+offsetUSE0x1000u]
		}
		if 0x1700 <= u && u <= 0x18AF {
			return useTable[u-0x1700+offsetUSE0x1700u]
		}
		if 0x1900 <= u && u <= 0x1A9F {
			return useTable[u-0x1900+offsetUSE0x1900u]
		}
		if 0x1B00 <= u && u <= 0x1C4F {
			return useTable[u-0x1B00+offsetUSE0x1b00u]
		}
		if 0x1CD0 <= u && u <= 0x1CFF {
			return useTable[u-0x1CD0+offsetUSE0x1cd0u]
		}
		if 0x1DF8 <= u && u <= 0x1DFF {
			return useTable[u-0x1DF8+offsetUSE0x1df8u]
		}

	case 0x2:
		if 0x2008 <= u && u <= 0x2087 {
			return useTable[u-0x2008+offsetUSE0x2008u]
		}
		if 0x20F0 <= u && u <= 0x20F7 {
			return useTable[u-0x20F0+offsetUSE0x20f0u]
		}
		if 0x25C8 <= u && u <= 0x25CF {
			return useTable[u-0x25C8+offsetUSE0x25c8u]
		}
		if 0x2D30 <= u && u <= 0x2D7F {
			return useTable[u-0x2D30+offsetUSE0x2d30u]
		}

	case 0xA:
		if 0xA800 <= u && u <= 0xAAEF {
			return useTable[u-0xA800+offsetUSE0xa800u]
		}
		if 0xABC0 <= u && u <= 0xABFF {
			return useTable[u-0xABC0+offsetUSE0xabc0u]
		}

	case 0xF:
		if 0xFE00 <= u && u <= 0xFE0F {
			return useTable[u-0xFE00+offsetUSE0xfe00u]
		}
		if 0xFEF8 <= u && u <= 0xFEFF {
			return useTable[u-0xFEF8+offsetUSE0xfef8u]
		}
		if 0xFFF0 <= u && u <= 0xFFFF {
			return useTable[u-0xFFF0+offsetUSE0xfff0u]
		}

	case 0x10:
		if 0xFFF0 <= u && u <= 0xFFFF {
			return useTable[u-0xFFF0+offsetUSE0xfff0u]
		}
		if 0x10570 <= u && u <= 0x105B7 {
			return useTable[u-0x10570+offsetUSE0x10570u]
		}
		if 0x10A00 <= u && u <= 0x10A4F {
			return useTable[u-0x10A00+offsetUSE0x10a00u]
		}
		if 0x10AC0 <= u && u <= 0x10AE7 {
			return useTable[u-0x10AC0+offsetUSE0x10ac0u]
		}
		if 0x10B80 <= u && u <= 0x10BAF {
			return useTable[u-0x10B80+offsetUSE0x10b80u]
		}
		if 0x10D00 <= u && u <= 0x10D3F {
			return useTable[u-0x10D00+offsetUSE0x10d00u]
		}
		if 0x10E80 <= u && u <= 0x10EAF {
			return useTable[u-0x10E80+offsetUSE0x10e80u]
		}
		if 0x10F30 <= u && u <= 0x110BF {
			return useTable[u-0x10F30+offsetUSE0x10f30u]
		}

	case 0x11:
		if 0x10F30 <= u && u <= 0x110BF {
			return useTable[u-0x10F30+offsetUSE0x10f30u]
		}
		if 0x11100 <= u && u <= 0x11247 {
			return useTable[u-0x11100+offsetUSE0x11100u]
		}
		if 0x11280 <= u && u <= 0x1136F {
			return useTable[u-0x11280+offsetUSE0x11280u]
		}
		if 0x11400 <= u && u <= 0x114DF {
			return useTable[u-0x11400+offsetUSE0x11400u]
		}
		if 0x11580 <= u && u <= 0x1173F {
			return useTable[u-0x11580+offsetUSE0x11580u]
		}
		if 0x11800 <= u && u <= 0x1183F {
			return useTable[u-0x11800+offsetUSE0x11800u]
		}
		if 0x11900 <= u && u <= 0x1195F {
			return useTable[u-0x11900+offsetUSE0x11900u]
		}
		if 0x119A0 <= u && u <= 0x11A9F {
			return useTable[u-0x119A0+offsetUSE0x119a0u]
		}
		if 0x11C00 <= u && u <= 0x11CB7 {
			return useTable[u-0x11C00+offsetUSE0x11c00u]
		}
		if 0x11D00 <= u && u <= 0x11DAF {
			return useTable[u-0x11D00+offsetUSE0x11d00u]
		}
		if 0x11EE0 <= u && u <= 0x11F5F {
			return useTable[u-0x11EE0+offsetUSE0x11ee0u]
		}

	case 0x13:
		if 0x13000 <= u && u <= 0x13457 {
			return useTable[u-0x13000+offsetUSE0x13000u]
		}

	case 0x16:
		if 0x16AC0 <= u && u <= 0x16B37 {
			return useTable[u-0x16AC0+offsetUSE0x16ac0u]
		}
		if 0x16F00 <= u && u <= 0x16F97 {
			return useTable[u-0x16F00+offsetUSE0x16f00u]
		}
		if 0x16FE0 <= u && u <= 0x16FE7 {
			return useTable[u-0x16FE0+offsetUSE0x16fe0u]
		}

	case 0x18:
		if 0x18B00 <= u && u <= 0x18CD7 {
			return useTable[u-0x18B00+offsetUSE0x18b00u]
		}

	case 0x1B:
		if 0x1BC00 <= u && u <= 0x1BC9F {
			return useTable[u-0x1BC00+offsetUSE0x1bc00u]
		}

	case 0x1D:
		if 0x1D170 <= u && u <= 0x1D177 {
			return useTable[u-0x1D170+offsetUSE0x1d170u]
		}

	case 0x1E:
		if 0x1E100 <= u && u <= 0x1E14F {
			return useTable[u-0x1E100+offsetUSE0x1e100u]
		}
		if 0x1E290 <= u && u <= 0x1E2FF {
			return useTable[u-0x1E290+offsetUSE0x1e290u]
		}
		if 0x1E4D0 <= u && u <= 0x1E4FF {
			return useTable[u-0x1E4D0+offsetUSE0x1e4d0u]
		}
		if 0x1E900 <= u && u <= 0x1E95F {
			return useTable[u-0x1E900+offsetUSE0x1e900u]
		}

	case 0xE0:
		if 0xE0000 <= u && u <= 0xE0FFF {
			return useTable[u-0xE0000+offsetUSE0xe0000u]
		}

	case 0xE1:
		if 0xE0000 <= u && u <= 0xE0FFF {
			return useTable[u-0xE0000+offsetUSE0xe0000u]
		}

	}
	return useSM_ex_O
}