packages feed

idna2008-1.0.0.0: internal/Text/IDNA2008/Internal/Combining/Data.hs

-- |
-- Module      : Text.IDNA2008.Internal.Combining.Data
-- Description : Codegen'd combining-mark table (gc in @{Mn, Mc, Me}@)
--               for the RFC 5891 section 4.2.3.2 leading-mark check.
-- Copyright   : (c) Viktor Dukhovni, 2026
-- License     : BSD-3-Clause
--
-- Maintainer  : ietf-dane@dukhovni.org
-- Stability   : unstable
--
-- AUTOMATICALLY GENERATED FROM UnicodeData.txt.  Do not edit by
-- hand.  Regenerate with:
--
--   python3 internal/tools/genIdnaCombining.py <unicode-version> \\
--           <UnicodeData.txt>
--
-- Source: https://www.unicode.org/Public/17.0.0/ucd/UnicodeData.txt
-- Aligned with: Unicode 17.0.0
-- Range count: 655
--
-- The table covers every Unicode codepoint in @[0, 0x10FFFF]@ with no
-- gaps: each entry says "from this start until the next entry's start
-- (or 0x10FFFF for the last), the resolved combining-mark status is
-- /T/".  Tag 0 means the codepoint is /not/ a combining mark; tag 1
-- means it is (gc in @{Mn, Mc, Me}@).  Codepoints absent from
-- UnicodeData.txt are treated as non-combining.
module Text.IDNA2008.Internal.Combining.Data
    ( combiningRangeCount
    , combiningRangeStarts
    , combiningRangeTags
    ) where

import Data.Array.Byte (ByteArray)
import Data.Word (Word8, Word32)
import qualified Data.Primitive.ByteArray as PBA

-- | Number of (start, tag) entries.
combiningRangeCount :: Int
combiningRangeCount = 655

-- | Range starts; sorted ascending.
combiningRangeStarts :: ByteArray
combiningRangeStarts = PBA.byteArrayFromList
    [ (0x000000 :: Word32), 0x000300, 0x000370, 0x000483, 0x00048A, 0x000591, 0x0005BE, 0x0005BF
    , 0x0005C0, 0x0005C1, 0x0005C3, 0x0005C4, 0x0005C6, 0x0005C7, 0x0005C8, 0x000610
    , 0x00061B, 0x00064B, 0x000660, 0x000670, 0x000671, 0x0006D6, 0x0006DD, 0x0006DF
    , 0x0006E5, 0x0006E7, 0x0006E9, 0x0006EA, 0x0006EE, 0x000711, 0x000712, 0x000730
    , 0x00074B, 0x0007A6, 0x0007B1, 0x0007EB, 0x0007F4, 0x0007FD, 0x0007FE, 0x000816
    , 0x00081A, 0x00081B, 0x000824, 0x000825, 0x000828, 0x000829, 0x00082E, 0x000859
    , 0x00085C, 0x000897, 0x0008A0, 0x0008CA, 0x0008E2, 0x0008E3, 0x000904, 0x00093A
    , 0x00093D, 0x00093E, 0x000950, 0x000951, 0x000958, 0x000962, 0x000964, 0x000981
    , 0x000984, 0x0009BC, 0x0009BD, 0x0009BE, 0x0009C5, 0x0009C7, 0x0009C9, 0x0009CB
    , 0x0009CE, 0x0009D7, 0x0009D8, 0x0009E2, 0x0009E4, 0x0009FE, 0x0009FF, 0x000A01
    , 0x000A04, 0x000A3C, 0x000A3D, 0x000A3E, 0x000A43, 0x000A47, 0x000A49, 0x000A4B
    , 0x000A4E, 0x000A51, 0x000A52, 0x000A70, 0x000A72, 0x000A75, 0x000A76, 0x000A81
    , 0x000A84, 0x000ABC, 0x000ABD, 0x000ABE, 0x000AC6, 0x000AC7, 0x000ACA, 0x000ACB
    , 0x000ACE, 0x000AE2, 0x000AE4, 0x000AFA, 0x000B00, 0x000B01, 0x000B04, 0x000B3C
    , 0x000B3D, 0x000B3E, 0x000B45, 0x000B47, 0x000B49, 0x000B4B, 0x000B4E, 0x000B55
    , 0x000B58, 0x000B62, 0x000B64, 0x000B82, 0x000B83, 0x000BBE, 0x000BC3, 0x000BC6
    , 0x000BC9, 0x000BCA, 0x000BCE, 0x000BD7, 0x000BD8, 0x000C00, 0x000C05, 0x000C3C
    , 0x000C3D, 0x000C3E, 0x000C45, 0x000C46, 0x000C49, 0x000C4A, 0x000C4E, 0x000C55
    , 0x000C57, 0x000C62, 0x000C64, 0x000C81, 0x000C84, 0x000CBC, 0x000CBD, 0x000CBE
    , 0x000CC5, 0x000CC6, 0x000CC9, 0x000CCA, 0x000CCE, 0x000CD5, 0x000CD7, 0x000CE2
    , 0x000CE4, 0x000CF3, 0x000CF4, 0x000D00, 0x000D04, 0x000D3B, 0x000D3D, 0x000D3E
    , 0x000D45, 0x000D46, 0x000D49, 0x000D4A, 0x000D4E, 0x000D57, 0x000D58, 0x000D62
    , 0x000D64, 0x000D81, 0x000D84, 0x000DCA, 0x000DCB, 0x000DCF, 0x000DD5, 0x000DD6
    , 0x000DD7, 0x000DD8, 0x000DE0, 0x000DF2, 0x000DF4, 0x000E31, 0x000E32, 0x000E34
    , 0x000E3B, 0x000E47, 0x000E4F, 0x000EB1, 0x000EB2, 0x000EB4, 0x000EBD, 0x000EC8
    , 0x000ECF, 0x000F18, 0x000F1A, 0x000F35, 0x000F36, 0x000F37, 0x000F38, 0x000F39
    , 0x000F3A, 0x000F3E, 0x000F40, 0x000F71, 0x000F85, 0x000F86, 0x000F88, 0x000F8D
    , 0x000F98, 0x000F99, 0x000FBD, 0x000FC6, 0x000FC7, 0x00102B, 0x00103F, 0x001056
    , 0x00105A, 0x00105E, 0x001061, 0x001062, 0x001065, 0x001067, 0x00106E, 0x001071
    , 0x001075, 0x001082, 0x00108E, 0x00108F, 0x001090, 0x00109A, 0x00109E, 0x00135D
    , 0x001360, 0x001712, 0x001716, 0x001732, 0x001735, 0x001752, 0x001754, 0x001772
    , 0x001774, 0x0017B4, 0x0017D4, 0x0017DD, 0x0017DE, 0x00180B, 0x00180E, 0x00180F
    , 0x001810, 0x001885, 0x001887, 0x0018A9, 0x0018AA, 0x001920, 0x00192C, 0x001930
    , 0x00193C, 0x001A17, 0x001A1C, 0x001A55, 0x001A5F, 0x001A60, 0x001A7D, 0x001A7F
    , 0x001A80, 0x001AB0, 0x001ADE, 0x001AE0, 0x001AEC, 0x001B00, 0x001B05, 0x001B34
    , 0x001B45, 0x001B6B, 0x001B74, 0x001B80, 0x001B83, 0x001BA1, 0x001BAE, 0x001BE6
    , 0x001BF4, 0x001C24, 0x001C38, 0x001CD0, 0x001CD3, 0x001CD4, 0x001CE9, 0x001CED
    , 0x001CEE, 0x001CF4, 0x001CF5, 0x001CF7, 0x001CFA, 0x001DC0, 0x001E00, 0x0020D0
    , 0x0020F1, 0x002CEF, 0x002CF2, 0x002D7F, 0x002D80, 0x002DE0, 0x002E00, 0x00302A
    , 0x003030, 0x003099, 0x00309B, 0x00A66F, 0x00A673, 0x00A674, 0x00A67E, 0x00A69E
    , 0x00A6A0, 0x00A6F0, 0x00A6F2, 0x00A802, 0x00A803, 0x00A806, 0x00A807, 0x00A80B
    , 0x00A80C, 0x00A823, 0x00A828, 0x00A82C, 0x00A82D, 0x00A880, 0x00A882, 0x00A8B4
    , 0x00A8C6, 0x00A8E0, 0x00A8F2, 0x00A8FF, 0x00A900, 0x00A926, 0x00A92E, 0x00A947
    , 0x00A954, 0x00A980, 0x00A984, 0x00A9B3, 0x00A9C1, 0x00A9E5, 0x00A9E6, 0x00AA29
    , 0x00AA37, 0x00AA43, 0x00AA44, 0x00AA4C, 0x00AA4E, 0x00AA7B, 0x00AA7E, 0x00AAB0
    , 0x00AAB1, 0x00AAB2, 0x00AAB5, 0x00AAB7, 0x00AAB9, 0x00AABE, 0x00AAC0, 0x00AAC1
    , 0x00AAC2, 0x00AAEB, 0x00AAF0, 0x00AAF5, 0x00AAF7, 0x00ABE3, 0x00ABEB, 0x00ABEC
    , 0x00ABEE, 0x00FB1E, 0x00FB1F, 0x00FE00, 0x00FE10, 0x00FE20, 0x00FE30, 0x0101FD
    , 0x0101FE, 0x0102E0, 0x0102E1, 0x010376, 0x01037B, 0x010A01, 0x010A04, 0x010A05
    , 0x010A07, 0x010A0C, 0x010A10, 0x010A38, 0x010A3B, 0x010A3F, 0x010A40, 0x010AE5
    , 0x010AE7, 0x010D24, 0x010D28, 0x010D69, 0x010D6E, 0x010EAB, 0x010EAD, 0x010EFA
    , 0x010F00, 0x010F46, 0x010F51, 0x010F82, 0x010F86, 0x011000, 0x011003, 0x011038
    , 0x011047, 0x011070, 0x011071, 0x011073, 0x011075, 0x01107F, 0x011083, 0x0110B0
    , 0x0110BB, 0x0110C2, 0x0110C3, 0x011100, 0x011103, 0x011127, 0x011135, 0x011145
    , 0x011147, 0x011173, 0x011174, 0x011180, 0x011183, 0x0111B3, 0x0111C1, 0x0111C9
    , 0x0111CD, 0x0111CE, 0x0111D0, 0x01122C, 0x011238, 0x01123E, 0x01123F, 0x011241
    , 0x011242, 0x0112DF, 0x0112EB, 0x011300, 0x011304, 0x01133B, 0x01133D, 0x01133E
    , 0x011345, 0x011347, 0x011349, 0x01134B, 0x01134E, 0x011357, 0x011358, 0x011362
    , 0x011364, 0x011366, 0x01136D, 0x011370, 0x011375, 0x0113B8, 0x0113C1, 0x0113C2
    , 0x0113C3, 0x0113C5, 0x0113C6, 0x0113C7, 0x0113CB, 0x0113CC, 0x0113D1, 0x0113D2
    , 0x0113D3, 0x0113E1, 0x0113E3, 0x011435, 0x011447, 0x01145E, 0x01145F, 0x0114B0
    , 0x0114C4, 0x0115AF, 0x0115B6, 0x0115B8, 0x0115C1, 0x0115DC, 0x0115DE, 0x011630
    , 0x011641, 0x0116AB, 0x0116B8, 0x01171D, 0x01172C, 0x01182C, 0x01183B, 0x011930
    , 0x011936, 0x011937, 0x011939, 0x01193B, 0x01193F, 0x011940, 0x011941, 0x011942
    , 0x011944, 0x0119D1, 0x0119D8, 0x0119DA, 0x0119E1, 0x0119E4, 0x0119E5, 0x011A01
    , 0x011A0B, 0x011A33, 0x011A3A, 0x011A3B, 0x011A3F, 0x011A47, 0x011A48, 0x011A51
    , 0x011A5C, 0x011A8A, 0x011A9A, 0x011B60, 0x011B68, 0x011C2F, 0x011C37, 0x011C38
    , 0x011C40, 0x011C92, 0x011CA8, 0x011CA9, 0x011CB7, 0x011D31, 0x011D37, 0x011D3A
    , 0x011D3B, 0x011D3C, 0x011D3E, 0x011D3F, 0x011D46, 0x011D47, 0x011D48, 0x011D8A
    , 0x011D8F, 0x011D90, 0x011D92, 0x011D93, 0x011D98, 0x011EF3, 0x011EF7, 0x011F00
    , 0x011F02, 0x011F03, 0x011F04, 0x011F34, 0x011F3B, 0x011F3E, 0x011F43, 0x011F5A
    , 0x011F5B, 0x013440, 0x013441, 0x013447, 0x013456, 0x01611E, 0x016130, 0x016AF0
    , 0x016AF5, 0x016B30, 0x016B37, 0x016F4F, 0x016F50, 0x016F51, 0x016F88, 0x016F8F
    , 0x016F93, 0x016FE4, 0x016FE5, 0x016FF0, 0x016FF2, 0x01BC9D, 0x01BC9F, 0x01CF00
    , 0x01CF2E, 0x01CF30, 0x01CF47, 0x01D165, 0x01D16A, 0x01D16D, 0x01D173, 0x01D17B
    , 0x01D183, 0x01D185, 0x01D18C, 0x01D1AA, 0x01D1AE, 0x01D242, 0x01D245, 0x01DA00
    , 0x01DA37, 0x01DA3B, 0x01DA6D, 0x01DA75, 0x01DA76, 0x01DA84, 0x01DA85, 0x01DA9B
    , 0x01DAA0, 0x01DAA1, 0x01DAB0, 0x01E000, 0x01E007, 0x01E008, 0x01E019, 0x01E01B
    , 0x01E022, 0x01E023, 0x01E025, 0x01E026, 0x01E02B, 0x01E08F, 0x01E090, 0x01E130
    , 0x01E137, 0x01E2AE, 0x01E2AF, 0x01E2EC, 0x01E2F0, 0x01E4EC, 0x01E4F0, 0x01E5EE
    , 0x01E5F0, 0x01E6E3, 0x01E6E4, 0x01E6E6, 0x01E6E7, 0x01E6EE, 0x01E6F0, 0x01E6F5
    , 0x01E6F6, 0x01E8D0, 0x01E8D7, 0x01E944, 0x01E94B, 0x0E0100, 0x0E01F0
    ]

-- | Combining-mark tags; parallel to
-- 'combiningRangeStarts'.
--
--   * 0 -- not a combining mark
--   * 1 -- combining mark (gc in @{Mn, Mc, Me}@)
combiningRangeTags :: ByteArray
combiningRangeTags = PBA.byteArrayFromList @Word8
    [ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
    , 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0
    ]