packages feed

megaparsec-9.8.2: Text/Megaparsec/Unicode/Tables.hs

{-# LANGUAGE Safe #-}

-- |
-- Module      :  Text.Megaparsec.Unicode.Tables
-- Copyright   :  © 2026–present Megaparsec contributors
-- License     :  FreeBSD
--
-- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
-- Stability   :  experimental
-- Portability :  portable
--
-- Character width data extracted from the Unicode Character
-- Database.
--
-- __This module is generated by @script\/GenUnicodeTables.hs@, do not
-- edit it by hand.__
module Text.Megaparsec.Unicode.Tables
  ( unicodeVersion,
    simpleCharLimit,
    wideCharRanges,
    zeroWidthCharRanges,
  )
where

import Data.Array (Array, listArray)

-- | The version of the Unicode Character Database that the tables in
-- this module were extracted from.
unicodeVersion :: String
unicodeVersion = "17.0.0"

-- | Below this code point a character is neither wide nor zero-width,
-- with the exception of the C0 and C1 control characters and the soft
-- hyphen. This is what allows the common case to avoid a table lookup
-- altogether.
simpleCharLimit :: Int
simpleCharLimit = 0x000300

-- | Ranges of characters that span two columns, that is, those whose
-- East Asian Width is Wide or Fullwidth. Zero-width characters are
-- excluded, so the two tables are disjoint.
wideCharRanges :: Array Int (Int, Int)
wideCharRanges =
  listArray
    (0, 123)
    [ (0x001100, 0x00115f),
      (0x00231a, 0x00231b),
      (0x002329, 0x00232a),
      (0x0023e9, 0x0023ec),
      (0x0023f0, 0x0023f0),
      (0x0023f3, 0x0023f3),
      (0x0025fd, 0x0025fe),
      (0x002614, 0x002615),
      (0x002630, 0x002637),
      (0x002648, 0x002653),
      (0x00267f, 0x00267f),
      (0x00268a, 0x00268f),
      (0x002693, 0x002693),
      (0x0026a1, 0x0026a1),
      (0x0026aa, 0x0026ab),
      (0x0026bd, 0x0026be),
      (0x0026c4, 0x0026c5),
      (0x0026ce, 0x0026ce),
      (0x0026d4, 0x0026d4),
      (0x0026ea, 0x0026ea),
      (0x0026f2, 0x0026f3),
      (0x0026f5, 0x0026f5),
      (0x0026fa, 0x0026fa),
      (0x0026fd, 0x0026fd),
      (0x002705, 0x002705),
      (0x00270a, 0x00270b),
      (0x002728, 0x002728),
      (0x00274c, 0x00274c),
      (0x00274e, 0x00274e),
      (0x002753, 0x002755),
      (0x002757, 0x002757),
      (0x002795, 0x002797),
      (0x0027b0, 0x0027b0),
      (0x0027bf, 0x0027bf),
      (0x002b1b, 0x002b1c),
      (0x002b50, 0x002b50),
      (0x002b55, 0x002b55),
      (0x002e80, 0x002e99),
      (0x002e9b, 0x002ef3),
      (0x002f00, 0x002fd5),
      (0x002ff0, 0x003029),
      (0x00302e, 0x00303e),
      (0x003041, 0x003096),
      (0x00309b, 0x0030ff),
      (0x003105, 0x00312f),
      (0x003131, 0x00318e),
      (0x003190, 0x0031e5),
      (0x0031ef, 0x00321e),
      (0x003220, 0x003247),
      (0x003250, 0x00a48c),
      (0x00a490, 0x00a4c6),
      (0x00a960, 0x00a97c),
      (0x00ac00, 0x00d7a3),
      (0x00f900, 0x00faff),
      (0x00fe10, 0x00fe19),
      (0x00fe30, 0x00fe52),
      (0x00fe54, 0x00fe66),
      (0x00fe68, 0x00fe6b),
      (0x00ff01, 0x00ff60),
      (0x00ffe0, 0x00ffe6),
      (0x016fe0, 0x016fe3),
      (0x016ff0, 0x016ff6),
      (0x017000, 0x018cd5),
      (0x018cff, 0x018d1e),
      (0x018d80, 0x018df2),
      (0x01aff0, 0x01aff3),
      (0x01aff5, 0x01affb),
      (0x01affd, 0x01affe),
      (0x01b000, 0x01b122),
      (0x01b132, 0x01b132),
      (0x01b150, 0x01b152),
      (0x01b155, 0x01b155),
      (0x01b164, 0x01b167),
      (0x01b170, 0x01b2fb),
      (0x01d300, 0x01d356),
      (0x01d360, 0x01d376),
      (0x01f004, 0x01f004),
      (0x01f0cf, 0x01f0cf),
      (0x01f18e, 0x01f18e),
      (0x01f191, 0x01f19a),
      (0x01f200, 0x01f202),
      (0x01f210, 0x01f23b),
      (0x01f240, 0x01f248),
      (0x01f250, 0x01f251),
      (0x01f260, 0x01f265),
      (0x01f300, 0x01f320),
      (0x01f32d, 0x01f335),
      (0x01f337, 0x01f37c),
      (0x01f37e, 0x01f393),
      (0x01f3a0, 0x01f3ca),
      (0x01f3cf, 0x01f3d3),
      (0x01f3e0, 0x01f3f0),
      (0x01f3f4, 0x01f3f4),
      (0x01f3f8, 0x01f43e),
      (0x01f440, 0x01f440),
      (0x01f442, 0x01f4fc),
      (0x01f4ff, 0x01f53d),
      (0x01f54b, 0x01f54e),
      (0x01f550, 0x01f567),
      (0x01f57a, 0x01f57a),
      (0x01f595, 0x01f596),
      (0x01f5a4, 0x01f5a4),
      (0x01f5fb, 0x01f64f),
      (0x01f680, 0x01f6c5),
      (0x01f6cc, 0x01f6cc),
      (0x01f6d0, 0x01f6d2),
      (0x01f6d5, 0x01f6d8),
      (0x01f6dc, 0x01f6df),
      (0x01f6eb, 0x01f6ec),
      (0x01f6f4, 0x01f6fc),
      (0x01f7e0, 0x01f7eb),
      (0x01f7f0, 0x01f7f0),
      (0x01f90c, 0x01f93a),
      (0x01f93c, 0x01f945),
      (0x01f947, 0x01f9ff),
      (0x01fa70, 0x01fa7c),
      (0x01fa80, 0x01fa8a),
      (0x01fa8e, 0x01fac6),
      (0x01fac8, 0x01fac8),
      (0x01facd, 0x01fadc),
      (0x01fadf, 0x01faea),
      (0x01faef, 0x01faf8),
      (0x020000, 0x02fffd),
      (0x030000, 0x03fffd)
    ]
{-# NOINLINE wideCharRanges #-}

-- | Ranges of characters that take up no space at all: control
-- characters, non-spacing and enclosing marks, formatting characters,
-- and conjoining Hangul jamo of the medial and final kinds.
zeroWidthCharRanges :: Array Int (Int, Int)
zeroWidthCharRanges =
  listArray
    (0, 378)
    [ (0x000000, 0x00001f),
      (0x00007f, 0x00009f),
      (0x0000ad, 0x0000ad),
      (0x000300, 0x00036f),
      (0x000483, 0x000489),
      (0x000591, 0x0005bd),
      (0x0005bf, 0x0005bf),
      (0x0005c1, 0x0005c2),
      (0x0005c4, 0x0005c5),
      (0x0005c7, 0x0005c7),
      (0x000600, 0x000605),
      (0x000610, 0x00061a),
      (0x00061c, 0x00061c),
      (0x00064b, 0x00065f),
      (0x000670, 0x000670),
      (0x0006d6, 0x0006dd),
      (0x0006df, 0x0006e4),
      (0x0006e7, 0x0006e8),
      (0x0006ea, 0x0006ed),
      (0x00070f, 0x00070f),
      (0x000711, 0x000711),
      (0x000730, 0x00074a),
      (0x0007a6, 0x0007b0),
      (0x0007eb, 0x0007f3),
      (0x0007fd, 0x0007fd),
      (0x000816, 0x000819),
      (0x00081b, 0x000823),
      (0x000825, 0x000827),
      (0x000829, 0x00082d),
      (0x000859, 0x00085b),
      (0x000890, 0x000891),
      (0x000897, 0x00089f),
      (0x0008ca, 0x000902),
      (0x00093a, 0x00093a),
      (0x00093c, 0x00093c),
      (0x000941, 0x000948),
      (0x00094d, 0x00094d),
      (0x000951, 0x000957),
      (0x000962, 0x000963),
      (0x000981, 0x000981),
      (0x0009bc, 0x0009bc),
      (0x0009c1, 0x0009c4),
      (0x0009cd, 0x0009cd),
      (0x0009e2, 0x0009e3),
      (0x0009fe, 0x0009fe),
      (0x000a01, 0x000a02),
      (0x000a3c, 0x000a3c),
      (0x000a41, 0x000a42),
      (0x000a47, 0x000a48),
      (0x000a4b, 0x000a4d),
      (0x000a51, 0x000a51),
      (0x000a70, 0x000a71),
      (0x000a75, 0x000a75),
      (0x000a81, 0x000a82),
      (0x000abc, 0x000abc),
      (0x000ac1, 0x000ac5),
      (0x000ac7, 0x000ac8),
      (0x000acd, 0x000acd),
      (0x000ae2, 0x000ae3),
      (0x000afa, 0x000aff),
      (0x000b01, 0x000b01),
      (0x000b3c, 0x000b3c),
      (0x000b3f, 0x000b3f),
      (0x000b41, 0x000b44),
      (0x000b4d, 0x000b4d),
      (0x000b55, 0x000b56),
      (0x000b62, 0x000b63),
      (0x000b82, 0x000b82),
      (0x000bc0, 0x000bc0),
      (0x000bcd, 0x000bcd),
      (0x000c00, 0x000c00),
      (0x000c04, 0x000c04),
      (0x000c3c, 0x000c3c),
      (0x000c3e, 0x000c40),
      (0x000c46, 0x000c48),
      (0x000c4a, 0x000c4d),
      (0x000c55, 0x000c56),
      (0x000c62, 0x000c63),
      (0x000c81, 0x000c81),
      (0x000cbc, 0x000cbc),
      (0x000cbf, 0x000cbf),
      (0x000cc6, 0x000cc6),
      (0x000ccc, 0x000ccd),
      (0x000ce2, 0x000ce3),
      (0x000d00, 0x000d01),
      (0x000d3b, 0x000d3c),
      (0x000d41, 0x000d44),
      (0x000d4d, 0x000d4d),
      (0x000d62, 0x000d63),
      (0x000d81, 0x000d81),
      (0x000dca, 0x000dca),
      (0x000dd2, 0x000dd4),
      (0x000dd6, 0x000dd6),
      (0x000e31, 0x000e31),
      (0x000e34, 0x000e3a),
      (0x000e47, 0x000e4e),
      (0x000eb1, 0x000eb1),
      (0x000eb4, 0x000ebc),
      (0x000ec8, 0x000ece),
      (0x000f18, 0x000f19),
      (0x000f35, 0x000f35),
      (0x000f37, 0x000f37),
      (0x000f39, 0x000f39),
      (0x000f71, 0x000f7e),
      (0x000f80, 0x000f84),
      (0x000f86, 0x000f87),
      (0x000f8d, 0x000f97),
      (0x000f99, 0x000fbc),
      (0x000fc6, 0x000fc6),
      (0x00102d, 0x001030),
      (0x001032, 0x001037),
      (0x001039, 0x00103a),
      (0x00103d, 0x00103e),
      (0x001058, 0x001059),
      (0x00105e, 0x001060),
      (0x001071, 0x001074),
      (0x001082, 0x001082),
      (0x001085, 0x001086),
      (0x00108d, 0x00108d),
      (0x00109d, 0x00109d),
      (0x001160, 0x0011ff),
      (0x00135d, 0x00135f),
      (0x001712, 0x001714),
      (0x001732, 0x001733),
      (0x001752, 0x001753),
      (0x001772, 0x001773),
      (0x0017b4, 0x0017b5),
      (0x0017b7, 0x0017bd),
      (0x0017c6, 0x0017c6),
      (0x0017c9, 0x0017d3),
      (0x0017dd, 0x0017dd),
      (0x00180b, 0x00180f),
      (0x001885, 0x001886),
      (0x0018a9, 0x0018a9),
      (0x001920, 0x001922),
      (0x001927, 0x001928),
      (0x001932, 0x001932),
      (0x001939, 0x00193b),
      (0x001a17, 0x001a18),
      (0x001a1b, 0x001a1b),
      (0x001a56, 0x001a56),
      (0x001a58, 0x001a5e),
      (0x001a60, 0x001a60),
      (0x001a62, 0x001a62),
      (0x001a65, 0x001a6c),
      (0x001a73, 0x001a7c),
      (0x001a7f, 0x001a7f),
      (0x001ab0, 0x001add),
      (0x001ae0, 0x001aeb),
      (0x001b00, 0x001b03),
      (0x001b34, 0x001b34),
      (0x001b36, 0x001b3a),
      (0x001b3c, 0x001b3c),
      (0x001b42, 0x001b42),
      (0x001b6b, 0x001b73),
      (0x001b80, 0x001b81),
      (0x001ba2, 0x001ba5),
      (0x001ba8, 0x001ba9),
      (0x001bab, 0x001bad),
      (0x001be6, 0x001be6),
      (0x001be8, 0x001be9),
      (0x001bed, 0x001bed),
      (0x001bef, 0x001bf1),
      (0x001c2c, 0x001c33),
      (0x001c36, 0x001c37),
      (0x001cd0, 0x001cd2),
      (0x001cd4, 0x001ce0),
      (0x001ce2, 0x001ce8),
      (0x001ced, 0x001ced),
      (0x001cf4, 0x001cf4),
      (0x001cf8, 0x001cf9),
      (0x001dc0, 0x001dff),
      (0x00200b, 0x00200f),
      (0x00202a, 0x00202e),
      (0x002060, 0x002064),
      (0x002066, 0x00206f),
      (0x0020d0, 0x0020f0),
      (0x002cef, 0x002cf1),
      (0x002d7f, 0x002d7f),
      (0x002de0, 0x002dff),
      (0x00302a, 0x00302d),
      (0x003099, 0x00309a),
      (0x00a66f, 0x00a672),
      (0x00a674, 0x00a67d),
      (0x00a69e, 0x00a69f),
      (0x00a6f0, 0x00a6f1),
      (0x00a802, 0x00a802),
      (0x00a806, 0x00a806),
      (0x00a80b, 0x00a80b),
      (0x00a825, 0x00a826),
      (0x00a82c, 0x00a82c),
      (0x00a8c4, 0x00a8c5),
      (0x00a8e0, 0x00a8f1),
      (0x00a8ff, 0x00a8ff),
      (0x00a926, 0x00a92d),
      (0x00a947, 0x00a951),
      (0x00a980, 0x00a982),
      (0x00a9b3, 0x00a9b3),
      (0x00a9b6, 0x00a9b9),
      (0x00a9bc, 0x00a9bd),
      (0x00a9e5, 0x00a9e5),
      (0x00aa29, 0x00aa2e),
      (0x00aa31, 0x00aa32),
      (0x00aa35, 0x00aa36),
      (0x00aa43, 0x00aa43),
      (0x00aa4c, 0x00aa4c),
      (0x00aa7c, 0x00aa7c),
      (0x00aab0, 0x00aab0),
      (0x00aab2, 0x00aab4),
      (0x00aab7, 0x00aab8),
      (0x00aabe, 0x00aabf),
      (0x00aac1, 0x00aac1),
      (0x00aaec, 0x00aaed),
      (0x00aaf6, 0x00aaf6),
      (0x00abe5, 0x00abe5),
      (0x00abe8, 0x00abe8),
      (0x00abed, 0x00abed),
      (0x00fb1e, 0x00fb1e),
      (0x00fe00, 0x00fe0f),
      (0x00fe20, 0x00fe2f),
      (0x00feff, 0x00feff),
      (0x00fff9, 0x00fffb),
      (0x0101fd, 0x0101fd),
      (0x0102e0, 0x0102e0),
      (0x010376, 0x01037a),
      (0x010a01, 0x010a03),
      (0x010a05, 0x010a06),
      (0x010a0c, 0x010a0f),
      (0x010a38, 0x010a3a),
      (0x010a3f, 0x010a3f),
      (0x010ae5, 0x010ae6),
      (0x010d24, 0x010d27),
      (0x010d69, 0x010d6d),
      (0x010eab, 0x010eac),
      (0x010efa, 0x010eff),
      (0x010f46, 0x010f50),
      (0x010f82, 0x010f85),
      (0x011001, 0x011001),
      (0x011038, 0x011046),
      (0x011070, 0x011070),
      (0x011073, 0x011074),
      (0x01107f, 0x011081),
      (0x0110b3, 0x0110b6),
      (0x0110b9, 0x0110ba),
      (0x0110bd, 0x0110bd),
      (0x0110c2, 0x0110c2),
      (0x0110cd, 0x0110cd),
      (0x011100, 0x011102),
      (0x011127, 0x01112b),
      (0x01112d, 0x011134),
      (0x011173, 0x011173),
      (0x011180, 0x011181),
      (0x0111b6, 0x0111be),
      (0x0111c9, 0x0111cc),
      (0x0111cf, 0x0111cf),
      (0x01122f, 0x011231),
      (0x011234, 0x011234),
      (0x011236, 0x011237),
      (0x01123e, 0x01123e),
      (0x011241, 0x011241),
      (0x0112df, 0x0112df),
      (0x0112e3, 0x0112ea),
      (0x011300, 0x011301),
      (0x01133b, 0x01133c),
      (0x011340, 0x011340),
      (0x011366, 0x01136c),
      (0x011370, 0x011374),
      (0x0113bb, 0x0113c0),
      (0x0113ce, 0x0113ce),
      (0x0113d0, 0x0113d0),
      (0x0113d2, 0x0113d2),
      (0x0113e1, 0x0113e2),
      (0x011438, 0x01143f),
      (0x011442, 0x011444),
      (0x011446, 0x011446),
      (0x01145e, 0x01145e),
      (0x0114b3, 0x0114b8),
      (0x0114ba, 0x0114ba),
      (0x0114bf, 0x0114c0),
      (0x0114c2, 0x0114c3),
      (0x0115b2, 0x0115b5),
      (0x0115bc, 0x0115bd),
      (0x0115bf, 0x0115c0),
      (0x0115dc, 0x0115dd),
      (0x011633, 0x01163a),
      (0x01163d, 0x01163d),
      (0x01163f, 0x011640),
      (0x0116ab, 0x0116ab),
      (0x0116ad, 0x0116ad),
      (0x0116b0, 0x0116b5),
      (0x0116b7, 0x0116b7),
      (0x01171d, 0x01171d),
      (0x01171f, 0x01171f),
      (0x011722, 0x011725),
      (0x011727, 0x01172b),
      (0x01182f, 0x011837),
      (0x011839, 0x01183a),
      (0x01193b, 0x01193c),
      (0x01193e, 0x01193e),
      (0x011943, 0x011943),
      (0x0119d4, 0x0119d7),
      (0x0119da, 0x0119db),
      (0x0119e0, 0x0119e0),
      (0x011a01, 0x011a0a),
      (0x011a33, 0x011a38),
      (0x011a3b, 0x011a3e),
      (0x011a47, 0x011a47),
      (0x011a51, 0x011a56),
      (0x011a59, 0x011a5b),
      (0x011a8a, 0x011a96),
      (0x011a98, 0x011a99),
      (0x011b60, 0x011b60),
      (0x011b62, 0x011b64),
      (0x011b66, 0x011b66),
      (0x011c30, 0x011c36),
      (0x011c38, 0x011c3d),
      (0x011c3f, 0x011c3f),
      (0x011c92, 0x011ca7),
      (0x011caa, 0x011cb0),
      (0x011cb2, 0x011cb3),
      (0x011cb5, 0x011cb6),
      (0x011d31, 0x011d36),
      (0x011d3a, 0x011d3a),
      (0x011d3c, 0x011d3d),
      (0x011d3f, 0x011d45),
      (0x011d47, 0x011d47),
      (0x011d90, 0x011d91),
      (0x011d95, 0x011d95),
      (0x011d97, 0x011d97),
      (0x011ef3, 0x011ef4),
      (0x011f00, 0x011f01),
      (0x011f36, 0x011f3a),
      (0x011f40, 0x011f40),
      (0x011f42, 0x011f42),
      (0x011f5a, 0x011f5a),
      (0x013430, 0x013440),
      (0x013447, 0x013455),
      (0x01611e, 0x016129),
      (0x01612d, 0x01612f),
      (0x016af0, 0x016af4),
      (0x016b30, 0x016b36),
      (0x016f4f, 0x016f4f),
      (0x016f8f, 0x016f92),
      (0x016fe4, 0x016fe4),
      (0x01bc9d, 0x01bc9e),
      (0x01bca0, 0x01bca3),
      (0x01cf00, 0x01cf2d),
      (0x01cf30, 0x01cf46),
      (0x01d167, 0x01d169),
      (0x01d173, 0x01d182),
      (0x01d185, 0x01d18b),
      (0x01d1aa, 0x01d1ad),
      (0x01d242, 0x01d244),
      (0x01da00, 0x01da36),
      (0x01da3b, 0x01da6c),
      (0x01da75, 0x01da75),
      (0x01da84, 0x01da84),
      (0x01da9b, 0x01da9f),
      (0x01daa1, 0x01daaf),
      (0x01e000, 0x01e006),
      (0x01e008, 0x01e018),
      (0x01e01b, 0x01e021),
      (0x01e023, 0x01e024),
      (0x01e026, 0x01e02a),
      (0x01e08f, 0x01e08f),
      (0x01e130, 0x01e136),
      (0x01e2ae, 0x01e2ae),
      (0x01e2ec, 0x01e2ef),
      (0x01e4ec, 0x01e4ef),
      (0x01e5ee, 0x01e5ef),
      (0x01e6e3, 0x01e6e3),
      (0x01e6e6, 0x01e6e6),
      (0x01e6ee, 0x01e6ef),
      (0x01e6f5, 0x01e6f5),
      (0x01e8d0, 0x01e8d6),
      (0x01e944, 0x01e94a),
      (0x0e0001, 0x0e0001),
      (0x0e0020, 0x0e007f),
      (0x0e0100, 0x0e01ef)
    ]
{-# NOINLINE zeroWidthCharRanges #-}