Module:Unicode data/scripts
< Module:Unicode data
Jump to navigation
Jump to search
Revision as of 23:22, 15 August 2018 by en>Erutuon (add set of right-to-left scripts from data in Module:lang/data)
This Lua module is used on approximately 260,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to it should first be tested in the module's /sandbox or /testcases subpages. The tested changes can then be added to this page in a single edit. Please consider discussing changes on the talk page before implementing them. |
Usage
Extracted from Scripts.txt and PropertyValueAliases.txt from the Unicode Character Database using two scripts shown below, written in Lua 5.3 and using LPeg. The scripts must be in the same folder as the two data files, and you must have a global function named "sortedpairs" that can iterate over integer keys in a sparse table in numerical order. (The sortedPairs function in Module:table on English Wiktionary will work.)
Lua 5.3 scripts |
---|
local lpeg = require 'lpeg'
local infilehandle = assert(io.open('./Scripts.txt', 'rb'))
local scriptdata = assert(infilehandle:read 'a')
infilehandle:close()
local outfile = './data.lua'
local script_name_to_code = dofile './name_to_code.lua'
for k, v in pairs(lpeg) do
local firstletter = k:sub(1, 1)
if firstletter:upper() == firstletter then
_ENV[k] = v
end
end
local function numtohex(number)
return ('%04X'):format(number)
end
local function hextonum(hex)
return tonumber(hex, 16)
end
-- Create table that contains arrays of codepoint ranges as well as codepoint-to-script fields.
-- Need separate tables for map and ranges.
local prev
local maxscriptnamelen = 0
local function process(t, cp1, cp2, scriptname, ...)
if not scriptname then return t end
local script_code = script_name_to_code[scriptname]
local rangearray = t.ranges[script_code] -- Place in script-specific array initially.
if not rangearray then
rangearray = {}
t.ranges[script_code] = rangearray
prev = nil
end
local cpnumber1, cpnumber2
cpnumber1 = hextonum(cp1)
if cp2 then
cpnumber2 = hextonum(cp2)
end
if prev and cpnumber1 == prev + 1 then
if t.individual[prev] then -- Move individual condepoint to previously created range.
t.individual[prev] = nil
table.insert(rangearray, { prev, cpnumber2 or cpnumber1, script_code })
else
rangearray[#rangearray][2] = cpnumber2 or cpnumber1 -- Increment top of previous codepoint range.
end
else
if cpnumber2 then
table.insert(rangearray, { cpnumber1, cpnumber2, script_code })
else
t.individual[cpnumber1] = script_code
end
end
prev = cpnumber2 or cpnumber1
return t
end
local patt = P {
Cf((Cc{ ranges = {}, individual = {} } * V 'patt' + 1)^1, process),
patt = V 'nl' * (Cg(V 'data_line') + V 'comment'),
data_line = V 'cprange' * V 'opts'
* P ';' * V 'opts' * C(V 'scriptname') * V 'opts'
* (V 'count' * V 'opts')^-1
* P '#' * V 'opts' * V 'category' * V 'opts'
* V 'not_nl',
comment = P '#' * V 'not_nl',
count = '[' * R '09'^1 * ']',
category = R 'AZ' * R('az', '&&'),
scriptname = R('AZ', 'az', '__')^1, -- Actually starts with capital and rest is alphabetic or underscore.
cprange = C(V 'cp') * (P '..' * C(V 'cp') + Cc(nil)), -- XXXX; XXXX..XXXX -> string, string; string, nil
not_nl = (1 - V 'nl')^0,
cp = V 'hex' * V 'hex' * V 'hex' * V 'hex' * V 'hex'^-1,-- maximum of 5 hex digits
hex = R('09', 'AF', 'af'), -- Actually just 0-9A-F.
opts = S ' \t'^0, -- Actually just space.
nl = P '\r'^-1 * P '\n'
}
local scriptdatatable = patt:match(scriptdata)
-- Move arrays for individual scripts to a single array.
local i = 0
local new_ranges = {}
for script, ranges in pairs(scriptdatatable.ranges) do
for _, range in ipairs(ranges) do
i = i + 1
new_ranges[i] = range
end
end
scriptdatatable.ranges = new_ranges
table.sort(
scriptdatatable.ranges,
function (range1, range2)
return range1[1] < range2[1]
end)
-- P R I N T R E S U L T
local out = assert(io.open(outfile, 'wb'))
out:write [[
-- Generated by make_script_data.lua.
return {
individual = {
]]
for cp, script in sortedpairs(scriptdatatable.individual) do
out:write(('\t\t[0x%05X] = "%s",\n'):format(cp, script))
end
out:write[[
},
ranges = {
]]
for _, range in ipairs(scriptdatatable.ranges) do
out:write(('\t\t{ 0x%05X, 0x%05X, %-' .. maxscriptnamelen .. 's },\n')
:format(range[1], range[2], ('%q'):format(range[3])))
end
out:write [[
},
}
]]
assert(out:close())
local lpeg = require 'lpeg'
local property_value_aliases_filename = "./PropertyValueAliases.txt"
local property_value_aliases = assert(io.open(property_value_aliases_filename, 'rb')):read('a')
for k, v in pairs(lpeg) do
local firstletter = k:sub(1, 1)
if firstletter:upper() == firstletter then
_ENV[k] = v
end
end
local script_name_to_code = {}
local function add_to_table(code, name)
script_name_to_code[name] = code
end
local patt = P {
(V 'script_line' / add_to_table + 1)^1,
script_line = V 'nl' * P 'sc' * V 'sep' * C(V 'code') * V 'sep' * C(V 'name') * (P(1) - V 'nl')^0,
code = R 'AZ' * V 'lower' * V 'lower' * V 'lower',
name = R('AZ', 'az', '__')^1,
lower = R 'az',
sep = V 'w' * P ';' * V 'w',
w = S ' \t'^0,
nl = P '\r'^-1 * P '\n'
}
patt:match(property_value_aliases)
return script_name_to_code
|
--[=[
-- Official Unicode script values for individual codepoints and ranges of
-- codepoints.
-- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided
-- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt
-- provided script codes corresponding to the names (see [[Script (Unicode)]]).
--]=]
local data = {
singles = {
[0x000AA] = "Latn",
[0x000BA] = "Latn",
[0x000D7] = "Zyyy",
[0x000F7] = "Zyyy",
[0x00374] = "Zyyy",
[0x0037E] = "Zyyy",
[0x0037F] = "Grek",
[0x00384] = "Grek",
[0x00385] = "Zyyy",
[0x00386] = "Grek",
[0x00387] = "Zyyy",
[0x0038C] = "Grek",
[0x00589] = "Zyyy",
[0x0058A] = "Armn",
[0x00605] = "Zyyy",
[0x0060C] = "Zyyy",
[0x0061B] = "Zyyy",
[0x0061C] = "Arab",
[0x0061E] = "Arab",
[0x0061F] = "Zyyy",
[0x00640] = "Zyyy",
[0x00670] = "Zinh",
[0x006DD] = "Zyyy",
[0x0085E] = "Mand",
[0x008E2] = "Zyyy",
[0x009B2] = "Beng",
[0x009D7] = "Beng",
[0x00A3C] = "Guru",
[0x00A51] = "Guru",
[0x00A5E] = "Guru",
[0x00AD0] = "Gujr",
[0x00B9C] = "Taml",
[0x00BD0] = "Taml",
[0x00BD7] = "Taml",
[0x00CDE] = "Knda",
[0x00DBD] = "Sinh",
[0x00DCA] = "Sinh",
[0x00DD6] = "Sinh",
[0x00E3F] = "Zyyy",
[0x00E84] = "Laoo",
[0x00E8A] = "Laoo",
[0x00E8D] = "Laoo",
[0x00EA5] = "Laoo",
[0x00EA7] = "Laoo",
[0x00EC6] = "Laoo",
[0x010C7] = "Geor",
[0x010CD] = "Geor",
[0x010FB] = "Zyyy",
[0x01258] = "Ethi",
[0x012C0] = "Ethi",
[0x01804] = "Mong",
[0x01805] = "Zyyy",
[0x01940] = "Limb",
[0x01CD3] = "Zyyy",
[0x01CE1] = "Zyyy",
[0x01CED] = "Zinh",
[0x01CF4] = "Zinh",
[0x01D2B] = "Cyrl",
[0x01D78] = "Cyrl",
[0x01DBF] = "Grek",
[0x01F59] = "Grek",
[0x01F5B] = "Grek",
[0x01F5D] = "Grek",
[0x02071] = "Latn",
[0x0207F] = "Latn",
[0x02126] = "Grek",
[0x02132] = "Latn",
[0x0214E] = "Latn",
[0x02D27] = "Geor",
[0x02D2D] = "Geor",
[0x02D7F] = "Tfng",
[0x03005] = "Hani",
[0x03006] = "Zyyy",
[0x03007] = "Hani",
[0x030A0] = "Zyyy",
[0x0A92E] = "Zyyy",
[0x0A92F] = "Kali",
[0x0A95F] = "Rjng",
[0x0A9CF] = "Zyyy",
[0x0AB5B] = "Zyyy",
[0x0AB65] = "Grek",
[0x0FB3E] = "Hebr",
[0x0FEFF] = "Zyyy",
[0x0FF70] = "Zyyy",
[0x101A0] = "Grek",
[0x101FD] = "Zinh",
[0x102E0] = "Zinh",
[0x1039F] = "Ugar",
[0x1056F] = "Aghb",
[0x10808] = "Cprt",
[0x1083C] = "Cprt",
[0x1083F] = "Cprt",
[0x1091F] = "Phnx",
[0x1093F] = "Lydi",
[0x1107F] = "Brah",
[0x110CD] = "Kthi",
[0x11288] = "Mult",
[0x1133B] = "Zinh",
[0x11350] = "Gran",
[0x11357] = "Gran",
[0x1145B] = "Newa",
[0x118FF] = "Wara",
[0x11D3A] = "Gonm",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x1B000] = "Kana",
[0x1D4A2] = "Zyyy",
[0x1D4BB] = "Zyyy",
[0x1D546] = "Zyyy",
[0x1EE24] = "Arab",
[0x1EE27] = "Arab",
[0x1EE39] = "Arab",
[0x1EE3B] = "Arab",
[0x1EE42] = "Arab",
[0x1EE47] = "Arab",
[0x1EE49] = "Arab",
[0x1EE4B] = "Arab",
[0x1EE54] = "Arab",
[0x1EE57] = "Arab",
[0x1EE59] = "Arab",
[0x1EE5B] = "Arab",
[0x1EE5D] = "Arab",
[0x1EE5F] = "Arab",
[0x1EE64] = "Arab",
[0x1EE7E] = "Arab",
[0x1F200] = "Hira",
[0x1F97A] = "Zyyy",
[0xE0001] = "Zyyy",
},
ranges = {
{ 0x00000, 0x00040, "Zyyy" },
{ 0x00041, 0x0005A, "Latn" },
{ 0x0005B, 0x00060, "Zyyy" },
{ 0x00061, 0x0007A, "Latn" },
{ 0x0007B, 0x000A9, "Zyyy" },
{ 0x000AB, 0x000B9, "Zyyy" },
{ 0x000BB, 0x000BF, "Zyyy" },
{ 0x000C0, 0x000D6, "Latn" },
{ 0x000D8, 0x000F6, "Latn" },
{ 0x000F8, 0x002B8, "Latn" },
{ 0x002B9, 0x002DF, "Zyyy" },
{ 0x002E0, 0x002E4, "Latn" },
{ 0x002E5, 0x002E9, "Zyyy" },
{ 0x002EA, 0x002EB, "Bopo" },
{ 0x002EC, 0x002FF, "Zyyy" },
{ 0x00300, 0x0036F, "Zinh" },
{ 0x00370, 0x00373, "Grek" },
{ 0x00375, 0x00377, "Grek" },
{ 0x0037A, 0x0037D, "Grek" },
{ 0x00388, 0x0038A, "Grek" },
{ 0x0038E, 0x003A1, "Grek" },
{ 0x003A3, 0x003E1, "Grek" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek" },
{ 0x00400, 0x00484, "Cyrl" },
{ 0x00485, 0x00486, "Zinh" },
{ 0x00487, 0x0052F, "Cyrl" },
{ 0x00531, 0x00556, "Armn" },
{ 0x00559, 0x00588, "Armn" },
{ 0x0058D, 0x0058F, "Armn" },
{ 0x00591, 0x005C7, "Hebr" },
{ 0x005D0, 0x005EA, "Hebr" },
{ 0x005EF, 0x005F4, "Hebr" },
{ 0x00600, 0x00604, "Arab" },
{ 0x00606, 0x0060B, "Arab" },
{ 0x0060D, 0x0061A, "Arab" },
{ 0x00620, 0x0063F, "Arab" },
{ 0x00641, 0x0064A, "Arab" },
{ 0x0064B, 0x00655, "Zinh" },
{ 0x00656, 0x0066F, "Arab" },
{ 0x00671, 0x006DC, "Arab" },
{ 0x006DE, 0x006FF, "Arab" },
{ 0x00700, 0x0070D, "Syrc" },
{ 0x0070F, 0x0074A, "Syrc" },
{ 0x0074D, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FA, "Nkoo" },
{ 0x007FD, 0x007FF, "Nkoo" },
{ 0x00800, 0x0082D, "Samr" },
{ 0x00830, 0x0083E, "Samr" },
{ 0x00840, 0x0085B, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x008A0, 0x008B4, "Arab" },
{ 0x008B6, 0x008BD, "Arab" },
{ 0x008D3, 0x008E1, "Arab" },
{ 0x008E3, 0x008FF, "Arab" },
{ 0x00900, 0x00950, "Deva" },
{ 0x00951, 0x00952, "Zinh" },
{ 0x00953, 0x00963, "Deva" },
{ 0x00964, 0x00965, "Zyyy" },
{ 0x00966, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x0098F, 0x00990, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009C7, 0x009C8, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009DC, 0x009DD, "Beng" },
{ 0x009DF, 0x009E3, "Beng" },
{ 0x009E6, 0x009FE, "Beng" },
{ 0x00A01, 0x00A03, "Guru" },
{ 0x00A05, 0x00A0A, "Guru" },
{ 0x00A0F, 0x00A10, "Guru" },
{ 0x00A13, 0x00A28, "Guru" },
{ 0x00A2A, 0x00A30, "Guru" },
{ 0x00A32, 0x00A33, "Guru" },
{ 0x00A35, 0x00A36, "Guru" },
{ 0x00A38, 0x00A39, "Guru" },
{ 0x00A3E, 0x00A42, "Guru" },
{ 0x00A47, 0x00A48, "Guru" },
{ 0x00A4B, 0x00A4D, "Guru" },
{ 0x00A59, 0x00A5C, "Guru" },
{ 0x00A66, 0x00A76, "Guru" },
{ 0x00A81, 0x00A83, "Gujr" },
{ 0x00A85, 0x00A8D, "Gujr" },
{ 0x00A8F, 0x00A91, "Gujr" },
{ 0x00A93, 0x00AA8, "Gujr" },
{ 0x00AAA, 0x00AB0, "Gujr" },
{ 0x00AB2, 0x00AB3, "Gujr" },
{ 0x00AB5, 0x00AB9, "Gujr" },
{ 0x00ABC, 0x00AC5, "Gujr" },
{ 0x00AC7, 0x00AC9, "Gujr" },
{ 0x00ACB, 0x00ACD, "Gujr" },
{ 0x00AE0, 0x00AE3, "Gujr" },
{ 0x00AE6, 0x00AF1, "Gujr" },
{ 0x00AF9, 0x00AFF, "Gujr" },
{ 0x00B01, 0x00B03, "Orya" },
{ 0x00B05, 0x00B0C, "Orya" },
{ 0x00B0F, 0x00B10, "Orya" },
{ 0x00B13, 0x00B28, "Orya" },
{ 0x00B2A, 0x00B30, "Orya" },
{ 0x00B32, 0x00B33, "Orya" },
{ 0x00B35, 0x00B39, "Orya" },
{ 0x00B3C, 0x00B44, "Orya" },
{ 0x00B47, 0x00B48, "Orya" },
{ 0x00B4B, 0x00B4D, "Orya" },
{ 0x00B56, 0x00B57, "Orya" },
{ 0x00B5C, 0x00B5D, "Orya" },
{ 0x00B5F, 0x00B63, "Orya" },
{ 0x00B66, 0x00B77, "Orya" },
{ 0x00B82, 0x00B83, "Taml" },
{ 0x00B85, 0x00B8A, "Taml" },
{ 0x00B8E, 0x00B90, "Taml" },
{ 0x00B92, 0x00B95, "Taml" },
{ 0x00B99, 0x00B9A, "Taml" },
{ 0x00B9E, 0x00B9F, "Taml" },
{ 0x00BA3, 0x00BA4, "Taml" },
{ 0x00BA8, 0x00BAA, "Taml" },
{ 0x00BAE, 0x00BB9, "Taml" },
{ 0x00BBE, 0x00BC2, "Taml" },
{ 0x00BC6, 0x00BC8, "Taml" },
{ 0x00BCA, 0x00BCD, "Taml" },
{ 0x00BE6, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C0C, "Telu" },
{ 0x00C0E, 0x00C10, "Telu" },
{ 0x00C12, 0x00C28, "Telu" },
{ 0x00C2A, 0x00C39, "Telu" },
{ 0x00C3D, 0x00C44, "Telu" },
{ 0x00C46, 0x00C48, "Telu" },
{ 0x00C4A, 0x00C4D, "Telu" },
{ 0x00C55, 0x00C56, "Telu" },
{ 0x00C58, 0x00C5A, "Telu" },
{ 0x00C60, 0x00C63, "Telu" },
{ 0x00C66, 0x00C6F, "Telu" },
{ 0x00C78, 0x00C7F, "Telu" },
{ 0x00C80, 0x00C8C, "Knda" },
{ 0x00C8E, 0x00C90, "Knda" },
{ 0x00C92, 0x00CA8, "Knda" },
{ 0x00CAA, 0x00CB3, "Knda" },
{ 0x00CB5, 0x00CB9, "Knda" },
{ 0x00CBC, 0x00CC4, "Knda" },
{ 0x00CC6, 0x00CC8, "Knda" },
{ 0x00CCA, 0x00CCD, "Knda" },
{ 0x00CD5, 0x00CD6, "Knda" },
{ 0x00CE0, 0x00CE3, "Knda" },
{ 0x00CE6, 0x00CEF, "Knda" },
{ 0x00CF1, 0x00CF2, "Knda" },
{ 0x00D00, 0x00D03, "Mlym" },
{ 0x00D05, 0x00D0C, "Mlym" },
{ 0x00D0E, 0x00D10, "Mlym" },
{ 0x00D12, 0x00D44, "Mlym" },
{ 0x00D46, 0x00D48, "Mlym" },
{ 0x00D4A, 0x00D4F, "Mlym" },
{ 0x00D54, 0x00D63, "Mlym" },
{ 0x00D66, 0x00D7F, "Mlym" },
{ 0x00D82, 0x00D83, "Sinh" },
{ 0x00D85, 0x00D96, "Sinh" },
{ 0x00D9A, 0x00DB1, "Sinh" },
{ 0x00DB3, 0x00DBB, "Sinh" },
{ 0x00DC0, 0x00DC6, "Sinh" },
{ 0x00DCF, 0x00DD4, "Sinh" },
{ 0x00DD8, 0x00DDF, "Sinh" },
{ 0x00DE6, 0x00DEF, "Sinh" },
{ 0x00DF2, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E3A, "Thai" },
{ 0x00E40, 0x00E5B, "Thai" },
{ 0x00E81, 0x00E82, "Laoo" },
{ 0x00E87, 0x00E88, "Laoo" },
{ 0x00E94, 0x00E97, "Laoo" },
{ 0x00E99, 0x00E9F, "Laoo" },
{ 0x00EA1, 0x00EA3, "Laoo" },
{ 0x00EAA, 0x00EAB, "Laoo" },
{ 0x00EAD, 0x00EB9, "Laoo" },
{ 0x00EBB, 0x00EBD, "Laoo" },
{ 0x00EC0, 0x00EC4, "Laoo" },
{ 0x00EC8, 0x00ECD, "Laoo" },
{ 0x00ED0, 0x00ED9, "Laoo" },
{ 0x00EDC, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00F47, "Tibt" },
{ 0x00F49, 0x00F6C, "Tibt" },
{ 0x00F71, 0x00F97, "Tibt" },
{ 0x00F99, 0x00FBC, "Tibt" },
{ 0x00FBE, 0x00FCC, "Tibt" },
{ 0x00FCE, 0x00FD4, "Tibt" },
{ 0x00FD5, 0x00FD8, "Zyyy" },
{ 0x00FD9, 0x00FDA, "Tibt" },
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010C5, "Geor" },
{ 0x010D0, 0x010FA, "Geor" },
{ 0x010FC, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01248, "Ethi" },
{ 0x0124A, 0x0124D, "Ethi" },
{ 0x01250, 0x01256, "Ethi" },
{ 0x0125A, 0x0125D, "Ethi" },
{ 0x01260, 0x01288, "Ethi" },
{ 0x0128A, 0x0128D, "Ethi" },
{ 0x01290, 0x012B0, "Ethi" },
{ 0x012B2, 0x012B5, "Ethi" },
{ 0x012B8, 0x012BE, "Ethi" },
{ 0x012C2, 0x012C5, "Ethi" },
{ 0x012C8, 0x012D6, "Ethi" },
{ 0x012D8, 0x01310, "Ethi" },
{ 0x01312, 0x01315, "Ethi" },
{ 0x01318, 0x0135A, "Ethi" },
{ 0x0135D, 0x0137C, "Ethi" },
{ 0x01380, 0x01399, "Ethi" },
{ 0x013A0, 0x013F5, "Cher" },
{ 0x013F8, 0x013FD, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016EA, "Runr" },
{ 0x016EB, 0x016ED, "Zyyy" },
{ 0x016EE, 0x016F8, "Runr" },
{ 0x01700, 0x0170C, "Tglg" },
{ 0x0170E, 0x01714, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01735, 0x01736, "Zyyy" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x0176C, "Tagb" },
{ 0x0176E, 0x01770, "Tagb" },
{ 0x01772, 0x01773, "Tagb" },
{ 0x01780, 0x017DD, "Khmr" },
{ 0x017E0, 0x017E9, "Khmr" },
{ 0x017F0, 0x017F9, "Khmr" },
{ 0x01800, 0x01801, "Mong" },
{ 0x01802, 0x01803, "Zyyy" },
{ 0x01806, 0x0180E, "Mong" },
{ 0x01810, 0x01819, "Mong" },
{ 0x01820, 0x01878, "Mong" },
{ 0x01880, 0x018AA, "Mong" },
{ 0x018B0, 0x018F5, "Cans" },
{ 0x01900, 0x0191E, "Limb" },
{ 0x01920, 0x0192B, "Limb" },
{ 0x01930, 0x0193B, "Limb" },
{ 0x01944, 0x0194F, "Limb" },
{ 0x01950, 0x0196D, "Tale" },
{ 0x01970, 0x01974, "Tale" },
{ 0x01980, 0x019AB, "Talu" },
{ 0x019B0, 0x019C9, "Talu" },
{ 0x019D0, 0x019DA, "Talu" },
{ 0x019DE, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1B, "Bugi" },
{ 0x01A1E, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01A5E, "Lana" },
{ 0x01A60, 0x01A7C, "Lana" },
{ 0x01A7F, 0x01A89, "Lana" },
{ 0x01A90, 0x01A99, "Lana" },
{ 0x01AA0, 0x01AAD, "Lana" },
{ 0x01AB0, 0x01ABE, "Zinh" },
{ 0x01B00, 0x01B4B, "Bali" },
{ 0x01B50, 0x01B7C, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BF3, "Batk" },
{ 0x01BFC, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C37, "Lepc" },
{ 0x01C3B, 0x01C49, "Lepc" },
{ 0x01C4D, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C80, 0x01C88, "Cyrl" },
{ 0x01C90, 0x01CBA, "Geor" },
{ 0x01CBD, 0x01CBF, "Geor" },
{ 0x01CC0, 0x01CC7, "Sund" },
{ 0x01CD0, 0x01CD2, "Zinh" },
{ 0x01CD4, 0x01CE0, "Zinh" },
{ 0x01CE2, 0x01CE8, "Zinh" },
{ 0x01CE9, 0x01CEC, "Zyyy" },
{ 0x01CEE, 0x01CF3, "Zyyy" },
{ 0x01CF5, 0x01CF7, "Zyyy" },
{ 0x01CF8, 0x01CF9, "Zinh" },
{ 0x01D00, 0x01D25, "Latn" },
{ 0x01D26, 0x01D2A, "Grek" },
{ 0x01D2C, 0x01D5C, "Latn" },
{ 0x01D5D, 0x01D61, "Grek" },
{ 0x01D62, 0x01D65, "Latn" },
{ 0x01D66, 0x01D6A, "Grek" },
{ 0x01D6B, 0x01D77, "Latn" },
{ 0x01D79, 0x01DBE, "Latn" },
{ 0x01DC0, 0x01DF9, "Zinh" },
{ 0x01DFB, 0x01DFF, "Zinh" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01F15, "Grek" },
{ 0x01F18, 0x01F1D, "Grek" },
{ 0x01F20, 0x01F45, "Grek" },
{ 0x01F48, 0x01F4D, "Grek" },
{ 0x01F50, 0x01F57, "Grek" },
{ 0x01F5F, 0x01F7D, "Grek" },
{ 0x01F80, 0x01FB4, "Grek" },
{ 0x01FB6, 0x01FC4, "Grek" },
{ 0x01FC6, 0x01FD3, "Grek" },
{ 0x01FD6, 0x01FDB, "Grek" },
{ 0x01FDD, 0x01FEF, "Grek" },
{ 0x01FF2, 0x01FF4, "Grek" },
{ 0x01FF6, 0x01FFE, "Grek" },
{ 0x02000, 0x0200B, "Zyyy" },
{ 0x0200C, 0x0200D, "Zinh" },
{ 0x0200E, 0x02064, "Zyyy" },
{ 0x02066, 0x02070, "Zyyy" },
{ 0x02074, 0x0207E, "Zyyy" },
{ 0x02080, 0x0208E, "Zyyy" },
{ 0x02090, 0x0209C, "Latn" },
{ 0x020A0, 0x020BF, "Zyyy" },
{ 0x020D0, 0x020F0, "Zinh" },
{ 0x02100, 0x02125, "Zyyy" },
{ 0x02127, 0x02129, "Zyyy" },
{ 0x0212A, 0x0212B, "Latn" },
{ 0x0212C, 0x02131, "Zyyy" },
{ 0x02133, 0x0214D, "Zyyy" },
{ 0x0214F, 0x0215F, "Zyyy" },
{ 0x02160, 0x02188, "Latn" },
{ 0x02189, 0x0218B, "Zyyy" },
{ 0x02190, 0x02426, "Zyyy" },
{ 0x02440, 0x0244A, "Zyyy" },
{ 0x02460, 0x027FF, "Zyyy" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02900, 0x02B73, "Zyyy" },
{ 0x02B76, 0x02B95, "Zyyy" },
{ 0x02B98, 0x02BC8, "Zyyy" },
{ 0x02BCA, 0x02BFE, "Zyyy" },
{ 0x02C00, 0x02C2E, "Glag" },
{ 0x02C30, 0x02C5E, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CF3, "Copt" },
{ 0x02CF9, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D25, "Geor" },
{ 0x02D30, 0x02D67, "Tfng" },
{ 0x02D6F, 0x02D70, "Tfng" },
{ 0x02D80, 0x02D96, "Ethi" },
{ 0x02DA0, 0x02DA6, "Ethi" },
{ 0x02DA8, 0x02DAE, "Ethi" },
{ 0x02DB0, 0x02DB6, "Ethi" },
{ 0x02DB8, 0x02DBE, "Ethi" },
{ 0x02DC0, 0x02DC6, "Ethi" },
{ 0x02DC8, 0x02DCE, "Ethi" },
{ 0x02DD0, 0x02DD6, "Ethi" },
{ 0x02DD8, 0x02DDE, "Ethi" },
{ 0x02DE0, 0x02DFF, "Cyrl" },
{ 0x02E00, 0x02E4E, "Zyyy" },
{ 0x02E80, 0x02E99, "Hani" },
{ 0x02E9B, 0x02EF3, "Hani" },
{ 0x02F00, 0x02FD5, "Hani" },
{ 0x02FF0, 0x02FFB, "Zyyy" },
{ 0x03000, 0x03004, "Zyyy" },
{ 0x03008, 0x03020, "Zyyy" },
{ 0x03021, 0x03029, "Hani" },
{ 0x0302A, 0x0302D, "Zinh" },
{ 0x0302E, 0x0302F, "Hang" },
{ 0x03030, 0x03037, "Zyyy" },
{ 0x03038, 0x0303B, "Hani" },
{ 0x0303C, 0x0303F, "Zyyy" },
{ 0x03041, 0x03096, "Hira" },
{ 0x03099, 0x0309A, "Zinh" },
{ 0x0309B, 0x0309C, "Zyyy" },
{ 0x0309D, 0x0309F, "Hira" },
{ 0x030A1, 0x030FA, "Kana" },
{ 0x030FB, 0x030FC, "Zyyy" },
{ 0x030FD, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x03190, 0x0319F, "Zyyy" },
{ 0x031A0, 0x031BA, "Bopo" },
{ 0x031C0, 0x031E3, "Zyyy" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03200, 0x0321E, "Hang" },
{ 0x03220, 0x0325F, "Zyyy" },
{ 0x03260, 0x0327E, "Hang" },
{ 0x0327F, 0x032CF, "Zyyy" },
{ 0x032D0, 0x032FE, "Kana" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x033FF, "Zyyy" },
{ 0x03400, 0x04DB5, "Hani" },
{ 0x04DC0, 0x04DFF, "Zyyy" },
{ 0x04E00, 0x09FEF, "Hani" },
{ 0x0A000, 0x0A48C, "Yiii" },
{ 0x0A490, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A69F, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A700, 0x0A721, "Zyyy" },
{ 0x0A722, 0x0A787, "Latn" },
{ 0x0A788, 0x0A78A, "Zyyy" },
{ 0x0A78B, 0x0A7B9, "Latn" },
{ 0x0A7F7, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82B, "Sylo" },
{ 0x0A830, 0x0A839, "Zyyy" },
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8C5, "Saur" },
{ 0x0A8CE, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92D, "Kali" },
{ 0x0A930, 0x0A953, "Rjng" },
{ 0x0A960, 0x0A97C, "Hang" },
{ 0x0A980, 0x0A9CD, "Java" },
{ 0x0A9D0, 0x0A9D9, "Java" },
{ 0x0A9DE, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA36, "Cham" },
{ 0x0AA40, 0x0AA4D, "Cham" },
{ 0x0AA50, 0x0AA59, "Cham" },
{ 0x0AA5C, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AAC2, "Tavt" },
{ 0x0AADB, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAF6, "Mtei" },
{ 0x0AB01, 0x0AB06, "Ethi" },
{ 0x0AB09, 0x0AB0E, "Ethi" },
{ 0x0AB11, 0x0AB16, "Ethi" },
{ 0x0AB20, 0x0AB26, "Ethi" },
{ 0x0AB28, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB5A, "Latn" },
{ 0x0AB5C, 0x0AB64, "Latn" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABED, "Mtei" },
{ 0x0ABF0, 0x0ABF9, "Mtei" },
{ 0x0AC00, 0x0D7A3, "Hang" },
{ 0x0D7B0, 0x0D7C6, "Hang" },
{ 0x0D7CB, 0x0D7FB, "Hang" },
{ 0x0F900, 0x0FA6D, "Hani" },
{ 0x0FA70, 0x0FAD9, "Hani" },
{ 0x0FB00, 0x0FB06, "Latn" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB36, "Hebr" },
{ 0x0FB38, 0x0FB3C, "Hebr" },
{ 0x0FB40, 0x0FB41, "Hebr" },
{ 0x0FB43, 0x0FB44, "Hebr" },
{ 0x0FB46, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FBC1, "Arab" },
{ 0x0FBD3, 0x0FD3D, "Arab" },
{ 0x0FD3E, 0x0FD3F, "Zyyy" },
{ 0x0FD50, 0x0FD8F, "Arab" },
{ 0x0FD92, 0x0FDC7, "Arab" },
{ 0x0FDF0, 0x0FDFD, "Arab" },
{ 0x0FE00, 0x0FE0F, "Zinh" },
{ 0x0FE10, 0x0FE19, "Zyyy" },
{ 0x0FE20, 0x0FE2D, "Zinh" },
{ 0x0FE2E, 0x0FE2F, "Cyrl" },
{ 0x0FE30, 0x0FE52, "Zyyy" },
{ 0x0FE54, 0x0FE66, "Zyyy" },
{ 0x0FE68, 0x0FE6B, "Zyyy" },
{ 0x0FE70, 0x0FE74, "Arab" },
{ 0x0FE76, 0x0FEFC, "Arab" },
{ 0x0FF01, 0x0FF20, "Zyyy" },
{ 0x0FF21, 0x0FF3A, "Latn" },
{ 0x0FF3B, 0x0FF40, "Zyyy" },
{ 0x0FF41, 0x0FF5A, "Latn" },
{ 0x0FF5B, 0x0FF65, "Zyyy" },
{ 0x0FF66, 0x0FF6F, "Kana" },
{ 0x0FF71, 0x0FF9D, "Kana" },
{ 0x0FF9E, 0x0FF9F, "Zyyy" },
{ 0x0FFA0, 0x0FFBE, "Hang" },
{ 0x0FFC2, 0x0FFC7, "Hang" },
{ 0x0FFCA, 0x0FFCF, "Hang" },
{ 0x0FFD2, 0x0FFD7, "Hang" },
{ 0x0FFDA, 0x0FFDC, "Hang" },
{ 0x0FFE0, 0x0FFE6, "Zyyy" },
{ 0x0FFE8, 0x0FFEE, "Zyyy" },
{ 0x0FFF9, 0x0FFFD, "Zyyy" },
{ 0x10000, 0x1000B, "Linb" },
{ 0x1000D, 0x10026, "Linb" },
{ 0x10028, 0x1003A, "Linb" },
{ 0x1003C, 0x1003D, "Linb" },
{ 0x1003F, 0x1004D, "Linb" },
{ 0x10050, 0x1005D, "Linb" },
{ 0x10080, 0x100FA, "Linb" },
{ 0x10100, 0x10102, "Zyyy" },
{ 0x10107, 0x10133, "Zyyy" },
{ 0x10137, 0x1013F, "Zyyy" },
{ 0x10140, 0x1018E, "Grek" },
{ 0x10190, 0x1019B, "Zyyy" },
{ 0x101D0, 0x101FC, "Zyyy" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Zyyy" },
{ 0x10300, 0x10323, "Ital" },
{ 0x1032D, 0x1032F, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039D, "Ugar" },
{ 0x103A0, 0x103C3, "Xpeo" },
{ 0x103C8, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x1049D, "Osma" },
{ 0x104A0, 0x104A9, "Osma" },
{ 0x104B0, 0x104D3, "Osge" },
{ 0x104D8, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10600, 0x10736, "Lina" },
{ 0x10740, 0x10755, "Lina" },
{ 0x10760, 0x10767, "Lina" },
{ 0x10800, 0x10805, "Cprt" },
{ 0x1080A, 0x10835, "Cprt" },
{ 0x10837, 0x10838, "Cprt" },
{ 0x10840, 0x10855, "Armi" },
{ 0x10857, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x1089E, "Nbat" },
{ 0x108A7, 0x108AF, "Nbat" },
{ 0x108E0, 0x108F2, "Hatr" },
{ 0x108F4, 0x108F5, "Hatr" },
{ 0x108FB, 0x108FF, "Hatr" },
{ 0x10900, 0x1091B, "Phnx" },
{ 0x10920, 0x10939, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109B7, "Merc" },
{ 0x109BC, 0x109CF, "Merc" },
{ 0x109D2, 0x109FF, "Merc" },
{ 0x10A00, 0x10A03, "Khar" },
{ 0x10A05, 0x10A06, "Khar" },
{ 0x10A0C, 0x10A13, "Khar" },
{ 0x10A15, 0x10A17, "Khar" },
{ 0x10A19, 0x10A35, "Khar" },
{ 0x10A38, 0x10A3A, "Khar" },
{ 0x10A3F, 0x10A48, "Khar" },
{ 0x10A50, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AE6, "Mani" },
{ 0x10AEB, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B35, "Avst" },
{ 0x10B39, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B55, "Prti" },
{ 0x10B58, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B72, "Phli" },
{ 0x10B78, 0x10B7F, "Phli" },
{ 0x10B80, 0x10B91, "Phlp" },
{ 0x10B99, 0x10B9C, "Phlp" },
{ 0x10BA9, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10CC0, 0x10CF2, "Hung" },
{ 0x10CFA, 0x10CFF, "Hung" },
{ 0x10D00, 0x10D27, "Rohg" },
{ 0x10D30, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Arab" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x11000, 0x1104D, "Brah" },
{ 0x11052, 0x1106F, "Brah" },
{ 0x11080, 0x110C1, "Kthi" },
{ 0x110D0, 0x110E8, "Sora" },
{ 0x110F0, 0x110F9, "Sora" },
{ 0x11100, 0x11134, "Cakm" },
{ 0x11136, 0x11146, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111CD, "Shrd" },
{ 0x111D0, 0x111DF, "Shrd" },
{ 0x111E1, 0x111F4, "Sinh" },
{ 0x11200, 0x11211, "Khoj" },
{ 0x11213, 0x1123E, "Khoj" },
{ 0x11280, 0x11286, "Mult" },
{ 0x1128A, 0x1128D, "Mult" },
{ 0x1128F, 0x1129D, "Mult" },
{ 0x1129F, 0x112A9, "Mult" },
{ 0x112B0, 0x112EA, "Sind" },
{ 0x112F0, 0x112F9, "Sind" },
{ 0x11300, 0x11303, "Gran" },
{ 0x11305, 0x1130C, "Gran" },
{ 0x1130F, 0x11310, "Gran" },
{ 0x11313, 0x11328, "Gran" },
{ 0x1132A, 0x11330, "Gran" },
{ 0x11332, 0x11333, "Gran" },
{ 0x11335, 0x11339, "Gran" },
{ 0x1133C, 0x11344, "Gran" },
{ 0x11347, 0x11348, "Gran" },
{ 0x1134B, 0x1134D, "Gran" },
{ 0x1135D, 0x11363, "Gran" },
{ 0x11366, 0x1136C, "Gran" },
{ 0x11370, 0x11374, "Gran" },
{ 0x11400, 0x11459, "Newa" },
{ 0x1145D, 0x1145E, "Newa" },
{ 0x11480, 0x114C7, "Tirh" },
{ 0x114D0, 0x114D9, "Tirh" },
{ 0x11580, 0x115B5, "Sidd" },
{ 0x115B8, 0x115DD, "Sidd" },
{ 0x11600, 0x11644, "Modi" },
{ 0x11650, 0x11659, "Modi" },
{ 0x11660, 0x1166C, "Mong" },
{ 0x11680, 0x116B7, "Takr" },
{ 0x116C0, 0x116C9, "Takr" },
{ 0x11700, 0x1171A, "Ahom" },
{ 0x1171D, 0x1172B, "Ahom" },
{ 0x11730, 0x1173F, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118F2, "Wara" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11A83, "Soyo" },
{ 0x11A86, 0x11AA2, "Soyo" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11C00, 0x11C08, "Bhks" },
{ 0x11C0A, 0x11C36, "Bhks" },
{ 0x11C38, 0x11C45, "Bhks" },
{ 0x11C50, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11C8F, "Marc" },
{ 0x11C92, 0x11CA7, "Marc" },
{ 0x11CA9, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D06, "Gonm" },
{ 0x11D08, 0x11D09, "Gonm" },
{ 0x11D0B, 0x11D36, "Gonm" },
{ 0x11D3C, 0x11D3D, "Gonm" },
{ 0x11D3F, 0x11D47, "Gonm" },
{ 0x11D50, 0x11D59, "Gonm" },
{ 0x11D60, 0x11D65, "Gong" },
{ 0x11D67, 0x11D68, "Gong" },
{ 0x11D6A, 0x11D8E, "Gong" },
{ 0x11D90, 0x11D91, "Gong" },
{ 0x11D93, 0x11D98, "Gong" },
{ 0x11DA0, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
{ 0x12000, 0x12399, "Xsux" },
{ 0x12400, 0x1246E, "Xsux" },
{ 0x12470, 0x12474, "Xsux" },
{ 0x12480, 0x12543, "Xsux" },
{ 0x13000, 0x1342E, "Egyp" },
{ 0x14400, 0x14646, "Hluw" },
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A5E, "Mroo" },
{ 0x16A60, 0x16A69, "Mroo" },
{ 0x16A6E, 0x16A6F, "Mroo" },
{ 0x16AD0, 0x16AED, "Bass" },
{ 0x16AF0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B45, "Hmng" },
{ 0x16B50, 0x16B59, "Hmng" },
{ 0x16B5B, 0x16B61, "Hmng" },
{ 0x16B63, 0x16B77, "Hmng" },
{ 0x16B7D, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F44, "Plrd" },
{ 0x16F50, 0x16F7E, "Plrd" },
{ 0x16F8F, 0x16F9F, "Plrd" },
{ 0x17000, 0x187F1, "Tang" },
{ 0x18800, 0x18AF2, "Tang" },
{ 0x1B001, 0x1B11E, "Hira" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC6A, "Dupl" },
{ 0x1BC70, 0x1BC7C, "Dupl" },
{ 0x1BC80, 0x1BC88, "Dupl" },
{ 0x1BC90, 0x1BC99, "Dupl" },
{ 0x1BC9C, 0x1BC9F, "Dupl" },
{ 0x1BCA0, 0x1BCA3, "Zyyy" },
{ 0x1D000, 0x1D0F5, "Zyyy" },
{ 0x1D100, 0x1D126, "Zyyy" },
{ 0x1D129, 0x1D166, "Zyyy" },
{ 0x1D167, 0x1D169, "Zinh" },
{ 0x1D16A, 0x1D17A, "Zyyy" },
{ 0x1D17B, 0x1D182, "Zinh" },
{ 0x1D183, 0x1D184, "Zyyy" },
{ 0x1D185, 0x1D18B, "Zinh" },
{ 0x1D18C, 0x1D1A9, "Zyyy" },
{ 0x1D1AA, 0x1D1AD, "Zinh" },
{ 0x1D1AE, 0x1D1E8, "Zyyy" },
{ 0x1D200, 0x1D245, "Grek" },
{ 0x1D2E0, 0x1D2F3, "Zyyy" },
{ 0x1D300, 0x1D356, "Zyyy" },
{ 0x1D360, 0x1D378, "Zyyy" },
{ 0x1D400, 0x1D454, "Zyyy" },
{ 0x1D456, 0x1D49C, "Zyyy" },
{ 0x1D49E, 0x1D49F, "Zyyy" },
{ 0x1D4A5, 0x1D4A6, "Zyyy" },
{ 0x1D4A9, 0x1D4AC, "Zyyy" },
{ 0x1D4AE, 0x1D4B9, "Zyyy" },
{ 0x1D4BD, 0x1D4C3, "Zyyy" },
{ 0x1D4C5, 0x1D505, "Zyyy" },
{ 0x1D507, 0x1D50A, "Zyyy" },
{ 0x1D50D, 0x1D514, "Zyyy" },
{ 0x1D516, 0x1D51C, "Zyyy" },
{ 0x1D51E, 0x1D539, "Zyyy" },
{ 0x1D53B, 0x1D53E, "Zyyy" },
{ 0x1D540, 0x1D544, "Zyyy" },
{ 0x1D54A, 0x1D550, "Zyyy" },
{ 0x1D552, 0x1D6A5, "Zyyy" },
{ 0x1D6A8, 0x1D7CB, "Zyyy" },
{ 0x1D7CE, 0x1D7FF, "Zyyy" },
{ 0x1D800, 0x1DA8B, "Sgnw" },
{ 0x1DA9B, 0x1DA9F, "Sgnw" },
{ 0x1DAA1, 0x1DAAF, "Sgnw" },
{ 0x1E000, 0x1E006, "Glag" },
{ 0x1E008, 0x1E018, "Glag" },
{ 0x1E01B, 0x1E021, "Glag" },
{ 0x1E023, 0x1E024, "Glag" },
{ 0x1E026, 0x1E02A, "Glag" },
{ 0x1E800, 0x1E8C4, "Mend" },
{ 0x1E8C7, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E94A, "Adlm" },
{ 0x1E950, 0x1E959, "Adlm" },
{ 0x1E95E, 0x1E95F, "Adlm" },
{ 0x1EC71, 0x1ECB4, "Zyyy" },
{ 0x1EE00, 0x1EE03, "Arab" },
{ 0x1EE05, 0x1EE1F, "Arab" },
{ 0x1EE21, 0x1EE22, "Arab" },
{ 0x1EE29, 0x1EE32, "Arab" },
{ 0x1EE34, 0x1EE37, "Arab" },
{ 0x1EE4D, 0x1EE4F, "Arab" },
{ 0x1EE51, 0x1EE52, "Arab" },
{ 0x1EE61, 0x1EE62, "Arab" },
{ 0x1EE67, 0x1EE6A, "Arab" },
{ 0x1EE6C, 0x1EE72, "Arab" },
{ 0x1EE74, 0x1EE77, "Arab" },
{ 0x1EE79, 0x1EE7C, "Arab" },
{ 0x1EE80, 0x1EE89, "Arab" },
{ 0x1EE8B, 0x1EE9B, "Arab" },
{ 0x1EEA1, 0x1EEA3, "Arab" },
{ 0x1EEA5, 0x1EEA9, "Arab" },
{ 0x1EEAB, 0x1EEBB, "Arab" },
{ 0x1EEF0, 0x1EEF1, "Arab" },
{ 0x1F000, 0x1F02B, "Zyyy" },
{ 0x1F030, 0x1F093, "Zyyy" },
{ 0x1F0A0, 0x1F0AE, "Zyyy" },
{ 0x1F0B1, 0x1F0BF, "Zyyy" },
{ 0x1F0C1, 0x1F0CF, "Zyyy" },
{ 0x1F0D1, 0x1F0F5, "Zyyy" },
{ 0x1F100, 0x1F10C, "Zyyy" },
{ 0x1F110, 0x1F16B, "Zyyy" },
{ 0x1F170, 0x1F1AC, "Zyyy" },
{ 0x1F1E6, 0x1F1FF, "Zyyy" },
{ 0x1F201, 0x1F202, "Zyyy" },
{ 0x1F210, 0x1F23B, "Zyyy" },
{ 0x1F240, 0x1F248, "Zyyy" },
{ 0x1F250, 0x1F251, "Zyyy" },
{ 0x1F260, 0x1F265, "Zyyy" },
{ 0x1F300, 0x1F6D4, "Zyyy" },
{ 0x1F6E0, 0x1F6EC, "Zyyy" },
{ 0x1F6F0, 0x1F6F9, "Zyyy" },
{ 0x1F700, 0x1F773, "Zyyy" },
{ 0x1F780, 0x1F7D8, "Zyyy" },
{ 0x1F800, 0x1F80B, "Zyyy" },
{ 0x1F810, 0x1F847, "Zyyy" },
{ 0x1F850, 0x1F859, "Zyyy" },
{ 0x1F860, 0x1F887, "Zyyy" },
{ 0x1F890, 0x1F8AD, "Zyyy" },
{ 0x1F900, 0x1F90B, "Zyyy" },
{ 0x1F910, 0x1F93E, "Zyyy" },
{ 0x1F940, 0x1F970, "Zyyy" },
{ 0x1F973, 0x1F976, "Zyyy" },
{ 0x1F97C, 0x1F9A2, "Zyyy" },
{ 0x1F9B0, 0x1F9B9, "Zyyy" },
{ 0x1F9C0, 0x1F9C2, "Zyyy" },
{ 0x1F9D0, 0x1F9FF, "Zyyy" },
{ 0x1FA60, 0x1FA6D, "Zyyy" },
{ 0x20000, 0x2A6D6, "Hani" },
{ 0x2A700, 0x2B734, "Hani" },
{ 0x2B740, 0x2B81D, "Hani" },
{ 0x2B820, 0x2CEA1, "Hani" },
{ 0x2CEB0, 0x2EBE0, "Hani" },
{ 0x2F800, 0x2FA1D, "Hani" },
{ 0xE0020, 0xE007F, "Zyyy" },
{ 0xE0100, 0xE01EF, "Zinh" },
},
-- Scripts.txt gives full names; here we consider them aliases to save space.
aliases = {
Adlm = "Adlam",
Aghb = "Caucasian Albanian",
Ahom = "Ahom",
Arab = "Arabic",
Armi = "Imperial Aramaic",
Armn = "Armenian",
Avst = "Avestan",
Bali = "Balinese",
Bamu = "Bamum",
Bass = "Bassa Vah",
Batk = "Batak",
Beng = "Bengali",
Bhks = "Bhaiksuki",
Bopo = "Bopomofo",
Brah = "Brahmi",
Brai = "Braille",
Bugi = "Buginese",
Buhd = "Buhid",
Cakm = "Chakma",
Cans = "Canadian Aboriginal",
Cari = "Carian",
Cham = "Cham",
Cher = "Cherokee",
Copt = "Coptic",
Cprt = "Cypriot",
Cyrl = "Cyrillic",
Deva = "Devanagari",
Dogr = "Dogra",
Dsrt = "Deseret",
Dupl = "Duployan",
Egyp = "Egyptian Hieroglyphs",
Elba = "Elbasan",
Ethi = "Ethiopic",
Geor = "Georgian",
Glag = "Glagolitic",
Gong = "Gunjala Gondi",
Gonm = "Masaram Gondi",
Goth = "Gothic",
Gran = "Grantha",
Grek = "Greek",
Gujr = "Gujarati",
Guru = "Gurmukhi",
Hang = "Hangul",
Hani = "Han",
Hano = "Hanunoo",
Hatr = "Hatran",
Hebr = "Hebrew",
Hira = "Hiragana",
Hluw = "Anatolian Hieroglyphs",
Hmng = "Pahawh Hmong",
Hrkt = "Katakana Or Hiragana",
Hung = "Old Hungarian",
Ital = "Old Italic",
Java = "Javanese",
Kali = "Kayah Li",
Kana = "Katakana",
Khar = "Kharoshthi",
Khmr = "Khmer",
Khoj = "Khojki",
Knda = "Kannada",
Kthi = "Kaithi",
Lana = "Tai Tham",
Laoo = "Lao",
Latn = "Latin",
Lepc = "Lepcha",
Limb = "Limbu",
Lina = "Linear A",
Linb = "Linear B",
Lisu = "Lisu",
Lyci = "Lycian",
Lydi = "Lydian",
Mahj = "Mahajani",
Maka = "Makasar",
Mand = "Mandaic",
Mani = "Manichaean",
Marc = "Marchen",
Medf = "Medefaidrin",
Mend = "Mende Kikakui",
Merc = "Meroitic Cursive",
Mero = "Meroitic Hieroglyphs",
Mlym = "Malayalam",
Modi = "Modi",
Mong = "Mongolian",
Mroo = "Mro",
Mtei = "Meetei Mayek",
Mult = "Multani",
Mymr = "Myanmar",
Narb = "Old North Arabian",
Nbat = "Nabataean",
Newa = "Newa",
Nkoo = "Nko",
Nshu = "Nushu",
Ogam = "Ogham",
Olck = "Ol Chiki",
Orkh = "Old Turkic",
Orya = "Oriya",
Osge = "Osage",
Osma = "Osmanya",
Palm = "Palmyrene",
Pauc = "Pau Cin Hau",
Perm = "Old Permic",
Phag = "Phags Pa",
Phli = "Inscriptional Pahlavi",
Phlp = "Psalter Pahlavi",
Phnx = "Phoenician",
Plrd = "Miao",
Prti = "Inscriptional Parthian",
Rjng = "Rejang",
Rohg = "Hanifi Rohingya",
Runr = "Runic",
Samr = "Samaritan",
Sarb = "Old South Arabian",
Saur = "Saurashtra",
Sgnw = "SignWriting",
Shaw = "Shavian",
Shrd = "Sharada",
Sidd = "Siddham",
Sind = "Khudawadi",
Sinh = "Sinhala",
Sogd = "Sogdian",
Sogo = "Old Sogdian",
Sora = "Sora Sompeng",
Soyo = "Soyombo",
Sund = "Sundanese",
Sylo = "Syloti Nagri",
Syrc = "Syriac",
Tagb = "Tagbanwa",
Takr = "Takri",
Tale = "Tai Le",
Talu = "New Tai Lue",
Taml = "Tamil",
Tang = "Tangut",
Tavt = "Tai Viet",
Telu = "Telugu",
Tfng = "Tifinagh",
Tglg = "Tagalog",
Thaa = "Thaana",
Thai = "Thai",
Tibt = "Tibetan",
Tirh = "Tirhuta",
Ugar = "Ugaritic",
Vaii = "Vai",
Wara = "Warang Citi",
Xpeo = "Old Persian",
Xsux = "Cuneiform",
Yiii = "Yi",
Zanb = "Zanabazar Square",
Zinh = "Inherited",
Zyyy = "Common",
Zzzz = "Unknown",
},
}
-- Required for binary search function in [[Module:Language/scripts]].
-- Cannot get length of module loaded with mw.loadData.
data.ranges.length = #data.ranges
data.rtl = {}
for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do
-- [[Module:Lang/data]] has script codes in lowercase;
-- this module has script codes with the first letter capitalized.
data.rtl[script:gsub("^%a", string.upper)] = true
end
return data