Unicode-related routines
Copyright (C) 2025-2026 Trayambak Rai (xtrayambak@disroot.org)
Consts
C0ControlPercentEncode: array[32, uint8] = [255'u, 255'u, 255'u, 255'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 128'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u]
FragmentPercentEncode: array[32, uint8] = [255'u, 255'u, 255'u, 255'u, 5'u, 0'u, 0'u, 80'u, 0'u, 0'u, 0'u, 0'u, 1'u, 0'u, 0'u, 128'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u]
HexToBinaryTable: array[55, uint8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15]
QueryPercentEncode: array[32, uint8] = [255'u, 255'u, 255'u, 255'u, 13'u, 0'u, 0'u, 80'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 128'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u]
SpecialQueryPercentEncode: array[32, uint8] = [255'u, 255'u, 255'u, 255'u, 141'u, 0'u, 0'u, 80'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 0'u, 128'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u]
UserInfoPercentEncode: array[32, uint8] = [255'u, 255'u, 255'u, 255'u, 13'u, 128'u, 0'u, 252'u, 1'u, 0'u, 0'u, 120'u, 1'u, 0'u, 0'u, 184'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u, 255'u]
Procs
func bitAt(a: openArray[uint8]; i: uint8): bool {.inline, ...raises: [], cdecl, ...tags: [], forbids: [].}
func convertHexToBinary(c: char): uint8 {.inline, ...raises: [], cdecl, ...tags: [], forbids: [].}
func isAsciiHexDigit(c: uint8 | char): bool {.inline, ...raises: [], cdecl.}
func isForbiddenHostCodePoint(c: char): bool {.inline, ...raises: [], tags: [], forbids: [].}
func percentDecode(input: StringView; firstPercent: uint32): string {. ...raises: [], tags: [], forbids: [].}
func percentEncode(input: StringView; characterSet: openArray[uint8]): string {. cdecl, ...raises: [], tags: [], forbids: [].}
func toAscii(plain: StringView; firstPercent: uint32): Option[string] {. ...raises: [], tags: [], forbids: [].}