From 1b91aa93687aa11e5deea010129a9b40b1772fad Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Sat, 7 Feb 2026 12:49:32 +0200 Subject: [PATCH 1/3] CI: Switch to GitHub Actions --- .github/workflows/build.yml | 63 +++++++++++++++++++++++++++++++++++++ .travis.yml | 36 --------------------- 2 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..328517b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,63 @@ +name: build + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + runs-on: ubuntu-24.04 + strategy: + matrix: + lua: + - "lua 5.1" + - "lua 5.2" + - "lua 5.3" + - "lua 5.4" + - "luajit 2.0" + - "luajit 2.1" + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Cache Dependencies + uses: actions/cache@v5 + with: + path: | + .lua/ + .luarocks/ + key: ${{ runner.os }}-${{ matrix.lua }}-${{ hashFiles('.github/workflows/build.yml') }} + - name: Dependencies + run: |- + sudo apt install -y libreadline-dev + pip install hererocks + hererocks env --${{ matrix.lua }} -rlatest + source env/bin/activate + luarocks install --only-deps $(find luarocks -name '*-scm-*.rockspec' | sort -g | tail -1) + luarocks install dromozoa-utf8 + luarocks install cluacov + luarocks install busted + luarocks install luacov-coveralls + - name: Test + run: |- + source env/bin/activate + timeout 120 busted -c + - name: Coverage Report + run: | + luacov-coveralls --dryrun -e '.luarocks/' -e spec/ -e luarocks/ -i wcwidth/ -i wcwidth.lua -o coveralls.json -v + - name: Coveralls + uses: coverallsapp/github-action@v2 + with: + parallel: true + file: coveralls.json + finish: + runs-on: ubuntu-24.04 + needs: [build] + if: ${{ always() }} + steps: + - uses: coverallsapp/github-action@v2 + with: + parallel-finished: true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0f0bf4c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -os: linux -dist: bionic -language: python - -env: - global: - - LUACOV=cluacov - jobs: - - LUA="lua 5.1" - - LUA="lua 5.2" - - LUA="lua 5.3" - - LUA="lua 5.4" LUACOV=luacov - - LUA="luajit 2.0" - - LUA="luajit 2.1" - -before_install: - - pip install hererocks - - hererocks here -rlatest --$LUA - - export PATH=$PATH:$PWD/here/bin - - eval `luarocks path --bin` - - lua -v - -install: - - echo 'Installing runtime dependencies...' - - luarocks install --only-deps $(find luarocks -name '*-scm-*.rockspec' | sort -g | tail -1) - - echo 'Installing additional testing dependencies...' - - luarocks install dromozoa-utf8 - - luarocks install $LUACOV - - luarocks install busted - - luarocks install luacov-coveralls - -script: - - timeout 120 busted -c - -after_success: - - luacov-coveralls -i wcwidth/ -e spec/ -e here/ From 58d450f2bf00952e878892f1bf8a9d68bcffa50f Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Sat, 7 Feb 2026 21:43:37 +0200 Subject: [PATCH 2/3] update-tables: Improve char width table parsing Make the script used to parse EastAsianWidth more robust, mapping ambiguous width characters to double-width ones. --- .github/workflows/build.yml | 23 ++++++++++++----------- update-tables | 15 ++++++++------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 328517b..82f5881 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,12 +14,11 @@ jobs: strategy: matrix: lua: - - "lua 5.1" - - "lua 5.2" - - "lua 5.3" - - "lua 5.4" - - "luajit 2.0" - - "luajit 2.1" + - "5.1" + - "5.2" + - "5.3" + - "5.4" + - "luajit-2.1" steps: - name: Checkout uses: actions/checkout@v6 @@ -30,12 +29,15 @@ jobs: .lua/ .luarocks/ key: ${{ runner.os }}-${{ matrix.lua }}-${{ hashFiles('.github/workflows/build.yml') }} + - name: Setup Lua + uses: leafo/gh-actions-lua@v12 + if: steps.cache.outputs.cache-hit != 'true' + with: + luaVersion: ${{ matrix.lua }} + - name: Setup LuaRocks + uses: leafo/gh-actions-luarocks@v6 - name: Dependencies run: |- - sudo apt install -y libreadline-dev - pip install hererocks - hererocks env --${{ matrix.lua }} -rlatest - source env/bin/activate luarocks install --only-deps $(find luarocks -name '*-scm-*.rockspec' | sort -g | tail -1) luarocks install dromozoa-utf8 luarocks install cluacov @@ -43,7 +45,6 @@ jobs: luarocks install luacov-coveralls - name: Test run: |- - source env/bin/activate timeout 120 busted -c - name: Coverage Report run: | diff --git a/update-tables b/update-tables index 9680193..bec9e4a 100755 --- a/update-tables +++ b/update-tables @@ -75,8 +75,9 @@ wide_table () { local tmpfile="${TMPDIR:-/tmp}/update-tables-$$-${RANDOM}" echo "-- Autogenerated from ${WIDE_FILE##*/}" echo 'return {' - while read -r item rest ; do - if [[ -z ${item} || ${item} = \#* ]] ; then + while read -r line ; do + if [[ -z ${line} || ${line} = \#* ]] ; then + read -r line rest <<< "${line}" if [[ ${rest} = *.txt ]] ; then WIDE_VER=${rest} elif [[ ${rest} = Date:\ 20* || ${rest} = ©\ 20* ]] ; then @@ -84,11 +85,11 @@ wide_table () { fi continue fi - range=${item%;*} - flags=${item#*;} - if [[ ${flags} = W* || ${flags} = F* ]] ; then - format_range "${range}" - fi + read -r -a items <<< "${line}" + case ${items[2]} in + F | W | A ) + format_range "${items[0]}" ;; + esac done > "${tmpfile}" sort "${tmpfile}" rm "${tmpfile}" From 3495f9af68809b4d97cc5161d99314dc7066fa0a Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Sun, 8 Feb 2026 01:09:24 +0200 Subject: [PATCH 3/3] Add support for ambiguous-width characters Add a new ambiguous_width parameter to the wcwidth() function, which allows indicating which width should be reported for such characters. By default it will return 1, but can be changed to 2 for those cases where needed. While at it, move table generation to a new generate-tables Lua script, which better handles input and character attributes. --- README.md | 1 + README.md.in | 1 + generate-tables | 114 +++++ spec/wcwidth_spec.lua | 26 +- update-tables | 76 +--- wcwidth/ambitab.lua | 201 +++++++++ wcwidth/init.lua | 37 +- wcwidth/widetab.lua | 427 +++++++++++++------ wcwidth/zerotab.lua | 958 ++++++++++++++++++++++++++---------------- 9 files changed, 1248 insertions(+), 593 deletions(-) create mode 100755 generate-tables create mode 100644 wcwidth/ambitab.lua diff --git a/README.md b/README.md index 9af1eb6..02381b8 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,7 @@ With them, it generates the following files: * [wcwidth/widetab.lua](./wcwidth/widetab.lua) * [wcwidth/zerotab.lua](./wcwidth/zerotab.lua) +* [wcwidth/ambitab.lua](./wcwidth/ambitab.lua) The most current version of `wcwidth` uses the following versions of the above Unicode Standard release files: diff --git a/README.md.in b/README.md.in index 0145071..50d3954 100644 --- a/README.md.in +++ b/README.md.in @@ -136,6 +136,7 @@ With them, it generates the following files: * [wcwidth/widetab.lua](./wcwidth/widetab.lua) * [wcwidth/zerotab.lua](./wcwidth/zerotab.lua) +* [wcwidth/ambitab.lua](./wcwidth/ambitab.lua) The most current version of `wcwidth` uses the following versions of the above Unicode Standard release files: diff --git a/generate-tables b/generate-tables new file mode 100755 index 0000000..3c735eb --- /dev/null +++ b/generate-tables @@ -0,0 +1,114 @@ +#! /usr/bin/env lua +-- vim:set ft=lua:sw=3:ts=3: + +local help_text = [[Usage: %s [-w] [-z] [-a] [-p] [--help | -h] + + -w Path to wide characters table (default: widetab.lua) + -z Path to zero-width characters table (default: zerotab.lua) + -a Path to ambiguous width characters table (default: ambitab.lua) + -p Path prefix to prepend to all above paths (default: .) + -h, --help Show this help text. + +]] + +local path_prefix = "." +local wide_tab_path = "widetab.lua" +local zero_tab_path = "zerotab.lua" +local ambi_tab_path = "ambitab.lua" + +for _, item in ipairs(arg) do + if item == "-h" or item == "--help" then + io.stdout:write(help_text:format(arg[0])) + os.exit(0) + end + local prefix = item:sub(1, 2) + local suffix = item:sub(3) + if prefix == "-w" then + wide_tab_path = suffix + elseif prefix == "-z" then + zero_tab_path = suffix + elseif prefix == "-a" then + ambi_tab_path = suffix + elseif prefix == "-p" then + path_prefix = suffix + else + io.stderr:write(("Unrecognized command line option: %s\n\n"):format(item)) + io.stderr:write(help_text:format(arg[0])) + os.exit(1) + end +end + +local pat_range = "^(%x+)%.%.(%x+)%s*;%s*(%w+)" +local pat_rune = "^(%x+)%s*;%s*(%w+)" + +local wide_tab = {} +local zero_tab = {} +local ambi_tab = {} + +local wide_attrs = { + F = true, + W = true, +} +local zero_attrs = { + Cf = true, + Mc = true, + Me = true, + Mn = true, + Zl = true, + Zp = true, +} +local ambi_attrs = { + A = true, +} + +for line in io.lines() do + local range_start, range_end, attribute, range_start_s, range_end_s + + range_start_s, attribute = line:match(pat_rune) + if range_start_s then + range_start = tonumber(range_start_s, 16) + range_end = range_start + else + range_start_s, range_end_s, attribute = line:match(pat_range) + if range_start_s then + range_start = tonumber(range_start_s, 16) + range_end = tonumber(range_end_s, 16) + end + end + + if range_start then + local tab + if wide_attrs[attribute] then + tab = wide_tab + elseif zero_attrs[attribute] then + tab = zero_tab + elseif ambi_attrs[attribute] then + tab = ambi_tab + end + if tab then + tab[#tab + 1] = { range_start, range_end } + end + end +end + +local function tab_sort_compare(a, b) + return a[1] < b[1] +end + +table.sort(wide_tab, tab_sort_compare) +table.sort(zero_tab, tab_sort_compare) +table.sort(ambi_tab, tab_sort_compare) + +local tab_dump_line_format = "\t0x%X, 0x%X,\n" +local function tab_dump(tab, out) + out:write("-- Automatically generated, do not edit\n") + out:write("return {\n") + for _, item in ipairs(tab) do + out:write(tab_dump_line_format:format(item[1], item[2])) + end + out:write("}\n") +end + +tab_dump(wide_tab, io.open(path_prefix .. "/" .. wide_tab_path, "w")) +tab_dump(zero_tab, io.open(path_prefix .. "/" .. zero_tab_path, "w")) +tab_dump(ambi_tab, io.open(path_prefix .. "/" .. ambi_tab_path, "w")) diff --git a/spec/wcwidth_spec.lua b/spec/wcwidth_spec.lua index 31120d8..77d0435 100644 --- a/spec/wcwidth_spec.lua +++ b/spec/wcwidth_spec.lua @@ -25,10 +25,15 @@ local function test_phrase(input, expected_lengths, expected_total_length) end -- --- Many test cases are from: --- https://github.com/jquast/wcwidth/blob/master/wcwidth/tests/test_core.py +-- A number of test cases are from: +-- https://github.com/jquast/wcwidth/blob/master/tests/ -- describe("wcwidth()", function () + it("reports double-width for Katakana Ko", function () + local input = "コ" + local rune = utf8.codepoint(input) + assert.equal(2, wcwidth(rune)) + end) it("handles a mix of Japanese and ASCII", function () -- Given a phrase of 5 and 3 Katakana ideographs, joined with 3 English -- ASCII punctuation characters, totaling 11, this phrase consumes 19 @@ -54,16 +59,21 @@ describe("wcwidth()", function () -- Phrase cafe + COMBINING ACUTE ACCENT is café of length 4. test_phrase("cafe" .. utf8.char(0x0301), { 1, 1, 1, 1, 0 }, 4) end) - it("handles a combining enclosing", function () - -- CYRILLIC CAPITAL LETTER A + COMBINING CYRILLIC HUNDRED THOUSANDS SIGN is А҈ of length 1. - test_phrase(utf8.char(0x0410, 0x0488), { 1, 0 }, 1) + it("handles a combining enclosing character", function () + -- CAPITAL LETTER A + COMBINING ENCLOSING CIRCLE has length 1. + test_phrase(utf8.char(0x41, 0x20DD), { 1, 0 }, 1) end) - it("handles combining spaces", function () - -- Balinese kapal (ship) is ᬓᬨᬮ᭄ of length 4. - test_phrase(utf8.char(0x1B13, 0x1B28, 0x1B2E, 0x1B44), { 1, 1, 1, 1 }, 4) + it("handles multiple combining characters", function () + -- A + acute + grave + test_phrase(utf8.char(0x41, 0x0301, 0x0300), { 1, 0, 0 }, 1) end) it("handles a 👍 emoji", function () test_phrase("two 👍", { 1, 1, 1, 1, 2 }, 6) end) + it("can report ambiguous-width char as either 1 or 2", function () + assert.equal(1, wcwidth(0x451)) + assert.equal(1, wcwidth(0x451, 1)) + assert.equal(2, wcwidth(0x451, 2)) + end) end) diff --git a/update-tables b/update-tables index bec9e4a..3460e3e 100755 --- a/update-tables +++ b/update-tables @@ -22,78 +22,20 @@ ZERO_FILE="${srcdir}/${ZERO_URL##*/}" [[ -r ${WIDE_FILE} ]] || wget -c -O "${WIDE_FILE}" "${WIDE_URL}" [[ -r ${ZERO_FILE} ]] || wget -c -O "${ZERO_FILE}" "${ZERO_URL}" -# Pad hex values to be 8 characters wide, and prepend "0x" to them. -u32hex () { - local -i len=${#1} - local -i nzeros=$(( 8 - len )) - echo -n '0x' - for (( ; nzeros > 0 ; nzeros-- )) ; do - echo -n '0' - done - echo -n "$1" -} - -format_range () { - if [[ $1 = *..* ]] ; then - u32hex "${1%..*}" - echo -n ',' - u32hex "${1#*..}" - echo ',' - else - u32hex "${1}" - echo -n ',' - u32hex "${1}" - echo ',' - fi -} - -zero_table () { - local tmpfile="${TMPDIR:-/tmp}/update-tables-$$-${RANDOM}" - echo "-- Autogenerated from ${ZERO_FILE##*/}" - echo 'return {' - while read -r line ; do - if [[ -z ${line} || ${line} = \#* ]] ; then - read line rest <<< "${line}" - if [[ ${rest} = *.txt ]] ; then - ZERO_VER=${rest} - elif [[ ${rest} = Date:\ 20* || ${rest} = ©\ 20* ]] ; then - ZERO_VER="${ZERO_VER}, ${rest}" - fi - continue - fi - read -a items <<< "${line}" - if [[ ${items[2]} == Mn || ${items[2]} == Me ]] ; then - format_range "${items[0]}" - fi - done > "${tmpfile}" - sort "${tmpfile}" - rm "${tmpfile}" - echo '}' -} - -wide_table () { - local tmpfile="${TMPDIR:-/tmp}/update-tables-$$-${RANDOM}" - echo "-- Autogenerated from ${WIDE_FILE##*/}" - echo 'return {' +parse_file_version () { + local version rest line while read -r line ; do if [[ -z ${line} || ${line} = \#* ]] ; then read -r line rest <<< "${line}" if [[ ${rest} = *.txt ]] ; then - WIDE_VER=${rest} + version=${rest} elif [[ ${rest} = Date:\ 20* || ${rest} = ©\ 20* ]] ; then - WIDE_VER="${WIDE_VER}, ${rest}" + version="${version}, ${rest}" fi continue fi - read -r -a items <<< "${line}" - case ${items[2]} in - F | W | A ) - format_range "${items[0]}" ;; - esac - done > "${tmpfile}" - sort "${tmpfile}" - rm "${tmpfile}" - echo '}' + done + echo "${version}" } make_readme () { @@ -109,6 +51,8 @@ make_readme () { -e "s+@@LUAROCKS_VER@@+${V}+g" } -wide_table < "${WIDE_FILE}" > "${srcdir}/wcwidth/widetab.lua" -zero_table < "${ZERO_FILE}" > "${srcdir}/wcwidth/zerotab.lua" +WIDE_VER=$(parse_file_version < "${WIDE_FILE}") +ZERO_VER=$(parse_file_version < "${ZERO_FILE}") make_readme < "${srcdir}/README.md.in" > "${srcdir}/README.md" + +cat "${WIDE_FILE}" "${ZERO_FILE}" | "${srcdir}/generate-tables" -p"${srcdir}/wcwidth" diff --git a/wcwidth/ambitab.lua b/wcwidth/ambitab.lua new file mode 100644 index 0000000..8958b21 --- /dev/null +++ b/wcwidth/ambitab.lua @@ -0,0 +1,201 @@ +-- Automatically generated, do not edit +return { + 0xA1, 0xA1, + 0xA4, 0xA4, + 0xA7, 0xA7, + 0xA8, 0xA8, + 0xAA, 0xAA, + 0xAD, 0xAD, + 0xAE, 0xAE, + 0xB0, 0xB0, + 0xB1, 0xB1, + 0xB2, 0xB3, + 0xB4, 0xB4, + 0xB6, 0xB7, + 0xB8, 0xB8, + 0xB9, 0xB9, + 0xBA, 0xBA, + 0xBC, 0xBE, + 0xBF, 0xBF, + 0xC6, 0xC6, + 0xD0, 0xD0, + 0xD7, 0xD7, + 0xD8, 0xD8, + 0xDE, 0xE1, + 0xE6, 0xE6, + 0xE8, 0xEA, + 0xEC, 0xED, + 0xF0, 0xF0, + 0xF2, 0xF3, + 0xF7, 0xF7, + 0xF8, 0xFA, + 0xFC, 0xFC, + 0xFE, 0xFE, + 0x101, 0x101, + 0x111, 0x111, + 0x113, 0x113, + 0x11B, 0x11B, + 0x126, 0x127, + 0x12B, 0x12B, + 0x131, 0x133, + 0x138, 0x138, + 0x13F, 0x142, + 0x144, 0x144, + 0x148, 0x14B, + 0x14D, 0x14D, + 0x152, 0x153, + 0x166, 0x167, + 0x16B, 0x16B, + 0x1CE, 0x1CE, + 0x1D0, 0x1D0, + 0x1D2, 0x1D2, + 0x1D4, 0x1D4, + 0x1D6, 0x1D6, + 0x1D8, 0x1D8, + 0x1DA, 0x1DA, + 0x1DC, 0x1DC, + 0x251, 0x251, + 0x261, 0x261, + 0x2C4, 0x2C4, + 0x2C7, 0x2C7, + 0x2C9, 0x2CB, + 0x2CD, 0x2CD, + 0x2D0, 0x2D0, + 0x2D8, 0x2DB, + 0x2DD, 0x2DD, + 0x2DF, 0x2DF, + 0x300, 0x36F, + 0x391, 0x3A1, + 0x3A3, 0x3A9, + 0x3B1, 0x3C1, + 0x3C3, 0x3C9, + 0x401, 0x401, + 0x410, 0x44F, + 0x451, 0x451, + 0x2010, 0x2010, + 0x2013, 0x2015, + 0x2016, 0x2016, + 0x2018, 0x2018, + 0x2019, 0x2019, + 0x201C, 0x201C, + 0x201D, 0x201D, + 0x2020, 0x2022, + 0x2024, 0x2027, + 0x2030, 0x2030, + 0x2032, 0x2033, + 0x2035, 0x2035, + 0x203B, 0x203B, + 0x203E, 0x203E, + 0x2074, 0x2074, + 0x207F, 0x207F, + 0x2081, 0x2084, + 0x20AC, 0x20AC, + 0x2103, 0x2103, + 0x2105, 0x2105, + 0x2109, 0x2109, + 0x2113, 0x2113, + 0x2116, 0x2116, + 0x2121, 0x2122, + 0x2126, 0x2126, + 0x212B, 0x212B, + 0x2153, 0x2154, + 0x215B, 0x215E, + 0x2160, 0x216B, + 0x2170, 0x2179, + 0x2189, 0x2189, + 0x2190, 0x2194, + 0x2195, 0x2199, + 0x21B8, 0x21B9, + 0x21D2, 0x21D2, + 0x21D4, 0x21D4, + 0x21E7, 0x21E7, + 0x2200, 0x2200, + 0x2202, 0x2203, + 0x2207, 0x2208, + 0x220B, 0x220B, + 0x220F, 0x220F, + 0x2211, 0x2211, + 0x2215, 0x2215, + 0x221A, 0x221A, + 0x221D, 0x2220, + 0x2223, 0x2223, + 0x2225, 0x2225, + 0x2227, 0x222C, + 0x222E, 0x222E, + 0x2234, 0x2237, + 0x223C, 0x223D, + 0x2248, 0x2248, + 0x224C, 0x224C, + 0x2252, 0x2252, + 0x2260, 0x2261, + 0x2264, 0x2267, + 0x226A, 0x226B, + 0x226E, 0x226F, + 0x2282, 0x2283, + 0x2286, 0x2287, + 0x2295, 0x2295, + 0x2299, 0x2299, + 0x22A5, 0x22A5, + 0x22BF, 0x22BF, + 0x2312, 0x2312, + 0x2460, 0x249B, + 0x249C, 0x24E9, + 0x24EB, 0x24FF, + 0x2500, 0x254B, + 0x2550, 0x2573, + 0x2580, 0x258F, + 0x2592, 0x2595, + 0x25A0, 0x25A1, + 0x25A3, 0x25A9, + 0x25B2, 0x25B3, + 0x25B6, 0x25B6, + 0x25B7, 0x25B7, + 0x25BC, 0x25BD, + 0x25C0, 0x25C0, + 0x25C1, 0x25C1, + 0x25C6, 0x25C8, + 0x25CB, 0x25CB, + 0x25CE, 0x25D1, + 0x25E2, 0x25E5, + 0x25EF, 0x25EF, + 0x2605, 0x2606, + 0x2609, 0x2609, + 0x260E, 0x260F, + 0x261C, 0x261C, + 0x261E, 0x261E, + 0x2640, 0x2640, + 0x2642, 0x2642, + 0x2660, 0x2661, + 0x2663, 0x2665, + 0x2667, 0x266A, + 0x266C, 0x266D, + 0x266F, 0x266F, + 0x269E, 0x269F, + 0x26BF, 0x26BF, + 0x26C6, 0x26CD, + 0x26CF, 0x26D3, + 0x26D5, 0x26E1, + 0x26E3, 0x26E3, + 0x26E8, 0x26E9, + 0x26EB, 0x26F1, + 0x26F4, 0x26F4, + 0x26F6, 0x26F9, + 0x26FB, 0x26FC, + 0x26FE, 0x26FF, + 0x273D, 0x273D, + 0x2776, 0x277F, + 0x2B56, 0x2B59, + 0x3248, 0x324F, + 0xE000, 0xF8FF, + 0xFE00, 0xFE0F, + 0xFFFD, 0xFFFD, + 0x1F100, 0x1F10A, + 0x1F110, 0x1F12D, + 0x1F130, 0x1F169, + 0x1F170, 0x1F18D, + 0x1F18F, 0x1F190, + 0x1F19B, 0x1F1AC, + 0xE0100, 0xE01EF, + 0xF0000, 0xFFFFD, + 0x100000, 0x10FFFD, +} diff --git a/wcwidth/init.lua b/wcwidth/init.lua index 38139da..8ac76dc 100644 --- a/wcwidth/init.lua +++ b/wcwidth/init.lua @@ -54,26 +54,25 @@ local function _lookup(rune, table) elseif rune > table[m + 1] then l = m + 2 else - return 1 + return true end end - return 0 + return false end local _tab_zero = require "wcwidth.zerotab" local _tab_wide = require "wcwidth.widetab" +local _tab_ambi = require "wcwidth.ambitab" -local function wcwidth (rune) - if rune == 0 or - rune == 0x034F or - rune == 0x2028 or - rune == 0x2029 or - (0x200B <= rune and rune <= 0x200F) or - (0x202A <= rune and rune <= 0x202E) or - (0x2060 <= rune and rune <= 0x2063) - then - return 0 - end +local function wcwidth (rune, ambiguous_width) + -- Early return for printable ASCII characters + if rune >= 32 and rune < 0x7F then + return 1 + end + + if rune == 0 then + return 0 + end -- C0/C1 control characters if rune < 32 or (0x07F <= rune and rune < 0x0A0) then @@ -81,11 +80,19 @@ local function wcwidth (rune) end -- Combining characters with zero width - if _lookup(rune, _tab_zero) == 1 then + if _lookup(rune, _tab_zero) then return 0 end - return 1 + _lookup(rune, _tab_wide) + if _lookup(rune, _tab_wide) then + return 2 + end + + if ambiguous_width == 2 and _lookup(rune, _tab_ambi) then + return 2 + end + + return 1 end return wcwidth diff --git a/wcwidth/widetab.lua b/wcwidth/widetab.lua index 8487309..de8b57a 100644 --- a/wcwidth/widetab.lua +++ b/wcwidth/widetab.lua @@ -1,135 +1,296 @@ --- Autogenerated from EastAsianWidth.txt +-- Automatically generated, do not edit return { -0x0000F900,0x0000FA6D, -0x0000FA6E,0x0000FA6F, -0x0000FA70,0x0000FAD9, -0x0000FADA,0x0000FAFF, -0x0000FB00,0x0000FB06, -0x0000FB13,0x0000FB17, -0x0000FB1D,0x0000FB1D, -0x0000FB1E,0x0000FB1E, -0x0000FB1F,0x0000FB28, -0x0000FB29,0x0000FB29, -0x0000FB2A,0x0000FB36, -0x0000FB38,0x0000FB3C, -0x0000FB3E,0x0000FB3E, -0x0000FB40,0x0000FB41, -0x0000FB43,0x0000FB44, -0x0000FB46,0x0000FB4F, -0x0000FB50,0x0000FBB1, -0x0000FBB2,0x0000FBC2, -0x0000FBC3,0x0000FBD2, -0x0000FBD3,0x0000FD3D, -0x0000FD3E,0x0000FD3E, -0x0000FD3F,0x0000FD3F, -0x0000FD40,0x0000FD4F, -0x0000FD50,0x0000FD8F, -0x0000FD90,0x0000FD91, -0x0000FD92,0x0000FDC7, -0x0000FDC8,0x0000FDCF, -0x0000FDF0,0x0000FDFB, -0x0000FDFC,0x0000FDFC, -0x0000FDFD,0x0000FDFF, -0x0000FE00,0x0000FE0F, -0x0000FE10,0x0000FE16, -0x0000FE17,0x0000FE17, -0x0000FE18,0x0000FE18, -0x0000FE19,0x0000FE19, -0x0000FE20,0x0000FE2F, -0x0000FE30,0x0000FE30, -0x0000FE31,0x0000FE32, -0x0000FE33,0x0000FE34, -0x0000FE35,0x0000FE35, -0x0000FE36,0x0000FE36, -0x0000FE37,0x0000FE37, -0x0000FE38,0x0000FE38, -0x0000FE39,0x0000FE39, -0x0000FE3A,0x0000FE3A, -0x0000FE3B,0x0000FE3B, -0x0000FE3C,0x0000FE3C, -0x0000FE3D,0x0000FE3D, -0x0000FE3E,0x0000FE3E, -0x0000FE3F,0x0000FE3F, -0x0000FE40,0x0000FE40, -0x0000FE41,0x0000FE41, -0x0000FE42,0x0000FE42, -0x0000FE43,0x0000FE43, -0x0000FE44,0x0000FE44, -0x0000FE45,0x0000FE46, -0x0000FE47,0x0000FE47, -0x0000FE48,0x0000FE48, -0x0000FE49,0x0000FE4C, -0x0000FE4D,0x0000FE4F, -0x0000FE50,0x0000FE52, -0x0000FE54,0x0000FE57, -0x0000FE58,0x0000FE58, -0x0000FE59,0x0000FE59, -0x0000FE5A,0x0000FE5A, -0x0000FE5B,0x0000FE5B, -0x0000FE5C,0x0000FE5C, -0x0000FE5D,0x0000FE5D, -0x0000FE5E,0x0000FE5E, -0x0000FE5F,0x0000FE61, -0x0000FE62,0x0000FE62, -0x0000FE63,0x0000FE63, -0x0000FE64,0x0000FE66, -0x0000FE68,0x0000FE68, -0x0000FE69,0x0000FE69, -0x0000FE6A,0x0000FE6B, -0x0000FE70,0x0000FE74, -0x0000FE76,0x0000FEFC, -0x0000FEFF,0x0000FEFF, -0x0000FF01,0x0000FF03, -0x0000FF04,0x0000FF04, -0x0000FF05,0x0000FF07, -0x0000FF08,0x0000FF08, -0x0000FF09,0x0000FF09, -0x0000FF0A,0x0000FF0A, -0x0000FF0B,0x0000FF0B, -0x0000FF0C,0x0000FF0C, -0x0000FF0D,0x0000FF0D, -0x0000FF0E,0x0000FF0F, -0x0000FF10,0x0000FF19, -0x0000FF1A,0x0000FF1B, -0x0000FF1C,0x0000FF1E, -0x0000FF1F,0x0000FF20, -0x0000FF21,0x0000FF3A, -0x0000FF3B,0x0000FF3B, -0x0000FF3C,0x0000FF3C, -0x0000FF3D,0x0000FF3D, -0x0000FF3E,0x0000FF3E, -0x0000FF3F,0x0000FF3F, -0x0000FF40,0x0000FF40, -0x0000FF41,0x0000FF5A, -0x0000FF5B,0x0000FF5B, -0x0000FF5C,0x0000FF5C, -0x0000FF5D,0x0000FF5D, -0x0000FF5E,0x0000FF5E, -0x0000FF5F,0x0000FF5F, -0x0000FF60,0x0000FF60, -0x0000FF61,0x0000FF61, -0x0000FF62,0x0000FF62, -0x0000FF63,0x0000FF63, -0x0000FF64,0x0000FF65, -0x0000FF66,0x0000FF6F, -0x0000FF70,0x0000FF70, -0x0000FF71,0x0000FF9D, -0x0000FF9E,0x0000FF9F, -0x0000FFA0,0x0000FFBE, -0x0000FFC2,0x0000FFC7, -0x0000FFCA,0x0000FFCF, -0x0000FFD2,0x0000FFD7, -0x0000FFDA,0x0000FFDC, -0x0000FFE0,0x0000FFE1, -0x0000FFE2,0x0000FFE2, -0x0000FFE3,0x0000FFE3, -0x0000FFE4,0x0000FFE4, -0x0000FFE5,0x0000FFE6, -0x0000FFE8,0x0000FFE8, -0x0000FFE9,0x0000FFEC, -0x0000FFED,0x0000FFEE, -0x0000FFF9,0x0000FFFB, -0x0000FFFC,0x0000FFFC, -0x0000FFFD,0x0000FFFD, -0x000F0000,0x000FFFFD, + 0x1100, 0x115F, + 0x231A, 0x231B, + 0x2329, 0x2329, + 0x232A, 0x232A, + 0x23E9, 0x23EC, + 0x23F0, 0x23F0, + 0x23F3, 0x23F3, + 0x25FD, 0x25FE, + 0x2614, 0x2615, + 0x2630, 0x2637, + 0x2648, 0x2653, + 0x267F, 0x267F, + 0x268A, 0x268F, + 0x2693, 0x2693, + 0x26A1, 0x26A1, + 0x26AA, 0x26AB, + 0x26BD, 0x26BE, + 0x26C4, 0x26C5, + 0x26CE, 0x26CE, + 0x26D4, 0x26D4, + 0x26EA, 0x26EA, + 0x26F2, 0x26F3, + 0x26F5, 0x26F5, + 0x26FA, 0x26FA, + 0x26FD, 0x26FD, + 0x2705, 0x2705, + 0x270A, 0x270B, + 0x2728, 0x2728, + 0x274C, 0x274C, + 0x274E, 0x274E, + 0x2753, 0x2755, + 0x2757, 0x2757, + 0x2795, 0x2797, + 0x27B0, 0x27B0, + 0x27BF, 0x27BF, + 0x2B1B, 0x2B1C, + 0x2B50, 0x2B50, + 0x2B55, 0x2B55, + 0x2E80, 0x2E99, + 0x2E9B, 0x2EF3, + 0x2F00, 0x2FD5, + 0x2FF0, 0x2FFF, + 0x3000, 0x3000, + 0x3001, 0x3003, + 0x3004, 0x3004, + 0x3005, 0x3005, + 0x3006, 0x3006, + 0x3007, 0x3007, + 0x3008, 0x3008, + 0x3009, 0x3009, + 0x300A, 0x300A, + 0x300B, 0x300B, + 0x300C, 0x300C, + 0x300D, 0x300D, + 0x300E, 0x300E, + 0x300F, 0x300F, + 0x3010, 0x3010, + 0x3011, 0x3011, + 0x3012, 0x3013, + 0x3014, 0x3014, + 0x3015, 0x3015, + 0x3016, 0x3016, + 0x3017, 0x3017, + 0x3018, 0x3018, + 0x3019, 0x3019, + 0x301A, 0x301A, + 0x301B, 0x301B, + 0x301C, 0x301C, + 0x301D, 0x301D, + 0x301E, 0x301F, + 0x3020, 0x3020, + 0x3021, 0x3029, + 0x302A, 0x302D, + 0x302E, 0x302F, + 0x3030, 0x3030, + 0x3031, 0x3035, + 0x3036, 0x3037, + 0x3038, 0x303A, + 0x303B, 0x303B, + 0x303C, 0x303C, + 0x303D, 0x303D, + 0x303E, 0x303E, + 0x3041, 0x3096, + 0x3099, 0x309A, + 0x309B, 0x309C, + 0x309D, 0x309E, + 0x309F, 0x309F, + 0x30A0, 0x30A0, + 0x30A1, 0x30FA, + 0x30FB, 0x30FB, + 0x30FC, 0x30FE, + 0x30FF, 0x30FF, + 0x3105, 0x312F, + 0x3131, 0x318E, + 0x3190, 0x3191, + 0x3192, 0x3195, + 0x3196, 0x319F, + 0x31A0, 0x31BF, + 0x31C0, 0x31E5, + 0x31EF, 0x31EF, + 0x31F0, 0x31FF, + 0x3200, 0x321E, + 0x3220, 0x3229, + 0x322A, 0x3247, + 0x3250, 0x3250, + 0x3251, 0x325F, + 0x3260, 0x327F, + 0x3280, 0x3289, + 0x328A, 0x32B0, + 0x32B1, 0x32BF, + 0x32C0, 0x32FF, + 0x3300, 0x33FF, + 0x3400, 0x4DBF, + 0x4DC0, 0x4DFF, + 0x4E00, 0x9FFF, + 0xA000, 0xA014, + 0xA015, 0xA015, + 0xA016, 0xA48C, + 0xA490, 0xA4C6, + 0xA960, 0xA97C, + 0xAC00, 0xD7A3, + 0xF900, 0xFA6D, + 0xFA6E, 0xFA6F, + 0xFA70, 0xFAD9, + 0xFADA, 0xFAFF, + 0xFE10, 0xFE16, + 0xFE17, 0xFE17, + 0xFE18, 0xFE18, + 0xFE19, 0xFE19, + 0xFE30, 0xFE30, + 0xFE31, 0xFE32, + 0xFE33, 0xFE34, + 0xFE35, 0xFE35, + 0xFE36, 0xFE36, + 0xFE37, 0xFE37, + 0xFE38, 0xFE38, + 0xFE39, 0xFE39, + 0xFE3A, 0xFE3A, + 0xFE3B, 0xFE3B, + 0xFE3C, 0xFE3C, + 0xFE3D, 0xFE3D, + 0xFE3E, 0xFE3E, + 0xFE3F, 0xFE3F, + 0xFE40, 0xFE40, + 0xFE41, 0xFE41, + 0xFE42, 0xFE42, + 0xFE43, 0xFE43, + 0xFE44, 0xFE44, + 0xFE45, 0xFE46, + 0xFE47, 0xFE47, + 0xFE48, 0xFE48, + 0xFE49, 0xFE4C, + 0xFE4D, 0xFE4F, + 0xFE50, 0xFE52, + 0xFE54, 0xFE57, + 0xFE58, 0xFE58, + 0xFE59, 0xFE59, + 0xFE5A, 0xFE5A, + 0xFE5B, 0xFE5B, + 0xFE5C, 0xFE5C, + 0xFE5D, 0xFE5D, + 0xFE5E, 0xFE5E, + 0xFE5F, 0xFE61, + 0xFE62, 0xFE62, + 0xFE63, 0xFE63, + 0xFE64, 0xFE66, + 0xFE68, 0xFE68, + 0xFE69, 0xFE69, + 0xFE6A, 0xFE6B, + 0xFF01, 0xFF03, + 0xFF04, 0xFF04, + 0xFF05, 0xFF07, + 0xFF08, 0xFF08, + 0xFF09, 0xFF09, + 0xFF0A, 0xFF0A, + 0xFF0B, 0xFF0B, + 0xFF0C, 0xFF0C, + 0xFF0D, 0xFF0D, + 0xFF0E, 0xFF0F, + 0xFF10, 0xFF19, + 0xFF1A, 0xFF1B, + 0xFF1C, 0xFF1E, + 0xFF1F, 0xFF20, + 0xFF21, 0xFF3A, + 0xFF3B, 0xFF3B, + 0xFF3C, 0xFF3C, + 0xFF3D, 0xFF3D, + 0xFF3E, 0xFF3E, + 0xFF3F, 0xFF3F, + 0xFF40, 0xFF40, + 0xFF41, 0xFF5A, + 0xFF5B, 0xFF5B, + 0xFF5C, 0xFF5C, + 0xFF5D, 0xFF5D, + 0xFF5E, 0xFF5E, + 0xFF5F, 0xFF5F, + 0xFF60, 0xFF60, + 0xFFE0, 0xFFE1, + 0xFFE2, 0xFFE2, + 0xFFE3, 0xFFE3, + 0xFFE4, 0xFFE4, + 0xFFE5, 0xFFE6, + 0x16FE0, 0x16FE1, + 0x16FE2, 0x16FE2, + 0x16FE3, 0x16FE3, + 0x16FE4, 0x16FE4, + 0x16FF0, 0x16FF1, + 0x16FF2, 0x16FF3, + 0x16FF4, 0x16FF6, + 0x17000, 0x187FF, + 0x18800, 0x18AFF, + 0x18B00, 0x18CD5, + 0x18CFF, 0x18CFF, + 0x18D00, 0x18D1E, + 0x18D80, 0x18DF2, + 0x1AFF0, 0x1AFF3, + 0x1AFF5, 0x1AFFB, + 0x1AFFD, 0x1AFFE, + 0x1B000, 0x1B0FF, + 0x1B100, 0x1B122, + 0x1B132, 0x1B132, + 0x1B150, 0x1B152, + 0x1B155, 0x1B155, + 0x1B164, 0x1B167, + 0x1B170, 0x1B2FB, + 0x1D300, 0x1D356, + 0x1D360, 0x1D376, + 0x1F004, 0x1F004, + 0x1F0CF, 0x1F0CF, + 0x1F18E, 0x1F18E, + 0x1F191, 0x1F19A, + 0x1F200, 0x1F202, + 0x1F210, 0x1F23B, + 0x1F240, 0x1F248, + 0x1F250, 0x1F251, + 0x1F260, 0x1F265, + 0x1F300, 0x1F320, + 0x1F32D, 0x1F335, + 0x1F337, 0x1F37C, + 0x1F37E, 0x1F393, + 0x1F3A0, 0x1F3CA, + 0x1F3CF, 0x1F3D3, + 0x1F3E0, 0x1F3F0, + 0x1F3F4, 0x1F3F4, + 0x1F3F8, 0x1F3FA, + 0x1F3FB, 0x1F3FF, + 0x1F400, 0x1F43E, + 0x1F440, 0x1F440, + 0x1F442, 0x1F4FC, + 0x1F4FF, 0x1F53D, + 0x1F54B, 0x1F54E, + 0x1F550, 0x1F567, + 0x1F57A, 0x1F57A, + 0x1F595, 0x1F596, + 0x1F5A4, 0x1F5A4, + 0x1F5FB, 0x1F5FF, + 0x1F600, 0x1F64F, + 0x1F680, 0x1F6C5, + 0x1F6CC, 0x1F6CC, + 0x1F6D0, 0x1F6D2, + 0x1F6D5, 0x1F6D8, + 0x1F6DC, 0x1F6DF, + 0x1F6EB, 0x1F6EC, + 0x1F6F4, 0x1F6FC, + 0x1F7E0, 0x1F7EB, + 0x1F7F0, 0x1F7F0, + 0x1F90C, 0x1F93A, + 0x1F93C, 0x1F945, + 0x1F947, 0x1F9FF, + 0x1FA70, 0x1FA7C, + 0x1FA80, 0x1FA8A, + 0x1FA8E, 0x1FAC6, + 0x1FAC8, 0x1FAC8, + 0x1FACD, 0x1FADC, + 0x1FADF, 0x1FAEA, + 0x1FAEF, 0x1FAF8, + 0x20000, 0x2A6DF, + 0x2A6E0, 0x2A6FF, + 0x2A700, 0x2B81D, + 0x2B81E, 0x2B81F, + 0x2B820, 0x2CEAD, + 0x2CEAE, 0x2CEAF, + 0x2CEB0, 0x2EBE0, + 0x2EBE1, 0x2EBEF, + 0x2EBF0, 0x2EE5D, + 0x2EE5E, 0x2F7FF, + 0x2F800, 0x2FA1D, + 0x2FA1E, 0x2FA1F, + 0x2FA20, 0x2FFFD, + 0x30000, 0x3134A, + 0x3134B, 0x3134F, + 0x31350, 0x33479, + 0x3347A, 0x3FFFD, } diff --git a/wcwidth/zerotab.lua b/wcwidth/zerotab.lua index 0d23545..c940f4a 100644 --- a/wcwidth/zerotab.lua +++ b/wcwidth/zerotab.lua @@ -1,373 +1,589 @@ --- Autogenerated from DerivedGeneralCategory.txt +-- Automatically generated, do not edit return { -0x00000300,0x0000036F, -0x00000483,0x00000487, -0x00000488,0x00000489, -0x00000591,0x000005BD, -0x000005BF,0x000005BF, -0x000005C1,0x000005C2, -0x000005C4,0x000005C5, -0x000005C7,0x000005C7, -0x00000610,0x0000061A, -0x0000064B,0x0000065F, -0x00000670,0x00000670, -0x000006D6,0x000006DC, -0x000006DF,0x000006E4, -0x000006E7,0x000006E8, -0x000006EA,0x000006ED, -0x00000711,0x00000711, -0x00000730,0x0000074A, -0x000007A6,0x000007B0, -0x000007EB,0x000007F3, -0x000007FD,0x000007FD, -0x00000816,0x00000819, -0x0000081B,0x00000823, -0x00000825,0x00000827, -0x00000829,0x0000082D, -0x00000859,0x0000085B, -0x00000897,0x0000089F, -0x000008CA,0x000008E1, -0x000008E3,0x00000902, -0x0000093A,0x0000093A, -0x0000093C,0x0000093C, -0x00000941,0x00000948, -0x0000094D,0x0000094D, -0x00000951,0x00000957, -0x00000962,0x00000963, -0x00000981,0x00000981, -0x000009BC,0x000009BC, -0x000009C1,0x000009C4, -0x000009CD,0x000009CD, -0x000009E2,0x000009E3, -0x000009FE,0x000009FE, -0x00000A01,0x00000A02, -0x00000A3C,0x00000A3C, -0x00000A41,0x00000A42, -0x00000A47,0x00000A48, -0x00000A4B,0x00000A4D, -0x00000A51,0x00000A51, -0x00000A70,0x00000A71, -0x00000A75,0x00000A75, -0x00000A81,0x00000A82, -0x00000ABC,0x00000ABC, -0x00000AC1,0x00000AC5, -0x00000AC7,0x00000AC8, -0x00000ACD,0x00000ACD, -0x00000AE2,0x00000AE3, -0x00000AFA,0x00000AFF, -0x00000B01,0x00000B01, -0x00000B3C,0x00000B3C, -0x00000B3F,0x00000B3F, -0x00000B41,0x00000B44, -0x00000B4D,0x00000B4D, -0x00000B55,0x00000B56, -0x00000B62,0x00000B63, -0x00000B82,0x00000B82, -0x00000BC0,0x00000BC0, -0x00000BCD,0x00000BCD, -0x00000C00,0x00000C00, -0x00000C04,0x00000C04, -0x00000C3C,0x00000C3C, -0x00000C3E,0x00000C40, -0x00000C46,0x00000C48, -0x00000C4A,0x00000C4D, -0x00000C55,0x00000C56, -0x00000C62,0x00000C63, -0x00000C81,0x00000C81, -0x00000CBC,0x00000CBC, -0x00000CBF,0x00000CBF, -0x00000CC6,0x00000CC6, -0x00000CCC,0x00000CCD, -0x00000CE2,0x00000CE3, -0x00000D00,0x00000D01, -0x00000D3B,0x00000D3C, -0x00000D41,0x00000D44, -0x00000D4D,0x00000D4D, -0x00000D62,0x00000D63, -0x00000D81,0x00000D81, -0x00000DCA,0x00000DCA, -0x00000DD2,0x00000DD4, -0x00000DD6,0x00000DD6, -0x00000E31,0x00000E31, -0x00000E34,0x00000E3A, -0x00000E47,0x00000E4E, -0x00000EB1,0x00000EB1, -0x00000EB4,0x00000EBC, -0x00000EC8,0x00000ECE, -0x00000F18,0x00000F19, -0x00000F35,0x00000F35, -0x00000F37,0x00000F37, -0x00000F39,0x00000F39, -0x00000F71,0x00000F7E, -0x00000F80,0x00000F84, -0x00000F86,0x00000F87, -0x00000F8D,0x00000F97, -0x00000F99,0x00000FBC, -0x00000FC6,0x00000FC6, -0x0000102D,0x00001030, -0x00001032,0x00001037, -0x00001039,0x0000103A, -0x0000103D,0x0000103E, -0x00001058,0x00001059, -0x0000105E,0x00001060, -0x00001071,0x00001074, -0x00001082,0x00001082, -0x00001085,0x00001086, -0x0000108D,0x0000108D, -0x0000109D,0x0000109D, -0x0000135D,0x0000135F, -0x00001712,0x00001714, -0x00001732,0x00001733, -0x00001752,0x00001753, -0x00001772,0x00001773, -0x000017B4,0x000017B5, -0x000017B7,0x000017BD, -0x000017C6,0x000017C6, -0x000017C9,0x000017D3, -0x000017DD,0x000017DD, -0x0000180B,0x0000180D, -0x0000180F,0x0000180F, -0x00001885,0x00001886, -0x000018A9,0x000018A9, -0x00001920,0x00001922, -0x00001927,0x00001928, -0x00001932,0x00001932, -0x00001939,0x0000193B, -0x00001A17,0x00001A18, -0x00001A1B,0x00001A1B, -0x00001A56,0x00001A56, -0x00001A58,0x00001A5E, -0x00001A60,0x00001A60, -0x00001A62,0x00001A62, -0x00001A65,0x00001A6C, -0x00001A73,0x00001A7C, -0x00001A7F,0x00001A7F, -0x00001AB0,0x00001ABD, -0x00001ABE,0x00001ABE, -0x00001ABF,0x00001ADD, -0x00001AE0,0x00001AEB, -0x00001B00,0x00001B03, -0x00001B34,0x00001B34, -0x00001B36,0x00001B3A, -0x00001B3C,0x00001B3C, -0x00001B42,0x00001B42, -0x00001B6B,0x00001B73, -0x00001B80,0x00001B81, -0x00001BA2,0x00001BA5, -0x00001BA8,0x00001BA9, -0x00001BAB,0x00001BAD, -0x00001BE6,0x00001BE6, -0x00001BE8,0x00001BE9, -0x00001BED,0x00001BED, -0x00001BEF,0x00001BF1, -0x00001C2C,0x00001C33, -0x00001C36,0x00001C37, -0x00001CD0,0x00001CD2, -0x00001CD4,0x00001CE0, -0x00001CE2,0x00001CE8, -0x00001CED,0x00001CED, -0x00001CF4,0x00001CF4, -0x00001CF8,0x00001CF9, -0x00001DC0,0x00001DFF, -0x000020D0,0x000020DC, -0x000020DD,0x000020E0, -0x000020E1,0x000020E1, -0x000020E2,0x000020E4, -0x000020E5,0x000020F0, -0x00002CEF,0x00002CF1, -0x00002D7F,0x00002D7F, -0x00002DE0,0x00002DFF, -0x0000302A,0x0000302D, -0x00003099,0x0000309A, -0x0000A66F,0x0000A66F, -0x0000A670,0x0000A672, -0x0000A674,0x0000A67D, -0x0000A69E,0x0000A69F, -0x0000A6F0,0x0000A6F1, -0x0000A802,0x0000A802, -0x0000A806,0x0000A806, -0x0000A80B,0x0000A80B, -0x0000A825,0x0000A826, -0x0000A82C,0x0000A82C, -0x0000A8C4,0x0000A8C5, -0x0000A8E0,0x0000A8F1, -0x0000A8FF,0x0000A8FF, -0x0000A926,0x0000A92D, -0x0000A947,0x0000A951, -0x0000A980,0x0000A982, -0x0000A9B3,0x0000A9B3, -0x0000A9B6,0x0000A9B9, -0x0000A9BC,0x0000A9BD, -0x0000A9E5,0x0000A9E5, -0x0000AA29,0x0000AA2E, -0x0000AA31,0x0000AA32, -0x0000AA35,0x0000AA36, -0x0000AA43,0x0000AA43, -0x0000AA4C,0x0000AA4C, -0x0000AA7C,0x0000AA7C, -0x0000AAB0,0x0000AAB0, -0x0000AAB2,0x0000AAB4, -0x0000AAB7,0x0000AAB8, -0x0000AABE,0x0000AABF, -0x0000AAC1,0x0000AAC1, -0x0000AAEC,0x0000AAED, -0x0000AAF6,0x0000AAF6, -0x0000ABE5,0x0000ABE5, -0x0000ABE8,0x0000ABE8, -0x0000ABED,0x0000ABED, -0x0000FB1E,0x0000FB1E, -0x0000FE00,0x0000FE0F, -0x0000FE20,0x0000FE2F, -0x000101FD,0x000101FD, -0x000102E0,0x000102E0, -0x00010376,0x0001037A, -0x00010A01,0x00010A03, -0x00010A05,0x00010A06, -0x00010A0C,0x00010A0F, -0x00010A38,0x00010A3A, -0x00010A3F,0x00010A3F, -0x00010AE5,0x00010AE6, -0x00010D24,0x00010D27, -0x00010D69,0x00010D6D, -0x00010EAB,0x00010EAC, -0x00010EFA,0x00010EFF, -0x00010F46,0x00010F50, -0x00010F82,0x00010F85, -0x00011001,0x00011001, -0x00011038,0x00011046, -0x00011070,0x00011070, -0x00011073,0x00011074, -0x0001107F,0x00011081, -0x000110B3,0x000110B6, -0x000110B9,0x000110BA, -0x000110C2,0x000110C2, -0x00011100,0x00011102, -0x00011127,0x0001112B, -0x0001112D,0x00011134, -0x00011173,0x00011173, -0x00011180,0x00011181, -0x000111B6,0x000111BE, -0x000111C9,0x000111CC, -0x000111CF,0x000111CF, -0x0001122F,0x00011231, -0x00011234,0x00011234, -0x00011236,0x00011237, -0x0001123E,0x0001123E, -0x00011241,0x00011241, -0x000112DF,0x000112DF, -0x000112E3,0x000112EA, -0x00011300,0x00011301, -0x0001133B,0x0001133C, -0x00011340,0x00011340, -0x00011366,0x0001136C, -0x00011370,0x00011374, -0x000113BB,0x000113C0, -0x000113CE,0x000113CE, -0x000113D0,0x000113D0, -0x000113D2,0x000113D2, -0x000113E1,0x000113E2, -0x00011438,0x0001143F, -0x00011442,0x00011444, -0x00011446,0x00011446, -0x0001145E,0x0001145E, -0x000114B3,0x000114B8, -0x000114BA,0x000114BA, -0x000114BF,0x000114C0, -0x000114C2,0x000114C3, -0x000115B2,0x000115B5, -0x000115BC,0x000115BD, -0x000115BF,0x000115C0, -0x000115DC,0x000115DD, -0x00011633,0x0001163A, -0x0001163D,0x0001163D, -0x0001163F,0x00011640, -0x000116AB,0x000116AB, -0x000116AD,0x000116AD, -0x000116B0,0x000116B5, -0x000116B7,0x000116B7, -0x0001171D,0x0001171D, -0x0001171F,0x0001171F, -0x00011722,0x00011725, -0x00011727,0x0001172B, -0x0001182F,0x00011837, -0x00011839,0x0001183A, -0x0001193B,0x0001193C, -0x0001193E,0x0001193E, -0x00011943,0x00011943, -0x000119D4,0x000119D7, -0x000119DA,0x000119DB, -0x000119E0,0x000119E0, -0x00011A01,0x00011A0A, -0x00011A33,0x00011A38, -0x00011A3B,0x00011A3E, -0x00011A47,0x00011A47, -0x00011A51,0x00011A56, -0x00011A59,0x00011A5B, -0x00011A8A,0x00011A96, -0x00011A98,0x00011A99, -0x00011B60,0x00011B60, -0x00011B62,0x00011B64, -0x00011B66,0x00011B66, -0x00011C30,0x00011C36, -0x00011C38,0x00011C3D, -0x00011C3F,0x00011C3F, -0x00011C92,0x00011CA7, -0x00011CAA,0x00011CB0, -0x00011CB2,0x00011CB3, -0x00011CB5,0x00011CB6, -0x00011D31,0x00011D36, -0x00011D3A,0x00011D3A, -0x00011D3C,0x00011D3D, -0x00011D3F,0x00011D45, -0x00011D47,0x00011D47, -0x00011D90,0x00011D91, -0x00011D95,0x00011D95, -0x00011D97,0x00011D97, -0x00011EF3,0x00011EF4, -0x00011F00,0x00011F01, -0x00011F36,0x00011F3A, -0x00011F40,0x00011F40, -0x00011F42,0x00011F42, -0x00011F5A,0x00011F5A, -0x00013440,0x00013440, -0x00013447,0x00013455, -0x0001611E,0x00016129, -0x0001612D,0x0001612F, -0x00016AF0,0x00016AF4, -0x00016B30,0x00016B36, -0x00016F4F,0x00016F4F, -0x00016F8F,0x00016F92, -0x00016FE4,0x00016FE4, -0x0001BC9D,0x0001BC9E, -0x0001CF00,0x0001CF2D, -0x0001CF30,0x0001CF46, -0x0001D167,0x0001D169, -0x0001D17B,0x0001D182, -0x0001D185,0x0001D18B, -0x0001D1AA,0x0001D1AD, -0x0001D242,0x0001D244, -0x0001DA00,0x0001DA36, -0x0001DA3B,0x0001DA6C, -0x0001DA75,0x0001DA75, -0x0001DA84,0x0001DA84, -0x0001DA9B,0x0001DA9F, -0x0001DAA1,0x0001DAAF, -0x0001E000,0x0001E006, -0x0001E008,0x0001E018, -0x0001E01B,0x0001E021, -0x0001E023,0x0001E024, -0x0001E026,0x0001E02A, -0x0001E08F,0x0001E08F, -0x0001E130,0x0001E136, -0x0001E2AE,0x0001E2AE, -0x0001E2EC,0x0001E2EF, -0x0001E4EC,0x0001E4EF, -0x0001E5EE,0x0001E5EF, -0x0001E6E3,0x0001E6E3, -0x0001E6E6,0x0001E6E6, -0x0001E6EE,0x0001E6EF, -0x0001E6F5,0x0001E6F5, -0x0001E8D0,0x0001E8D6, -0x0001E944,0x0001E94A, -0x000E0100,0x000E01EF, + 0xAD, 0xAD, + 0x300, 0x36F, + 0x483, 0x487, + 0x488, 0x489, + 0x591, 0x5BD, + 0x5BF, 0x5BF, + 0x5C1, 0x5C2, + 0x5C4, 0x5C5, + 0x5C7, 0x5C7, + 0x600, 0x605, + 0x610, 0x61A, + 0x61C, 0x61C, + 0x64B, 0x65F, + 0x670, 0x670, + 0x6D6, 0x6DC, + 0x6DD, 0x6DD, + 0x6DF, 0x6E4, + 0x6E7, 0x6E8, + 0x6EA, 0x6ED, + 0x70F, 0x70F, + 0x711, 0x711, + 0x730, 0x74A, + 0x7A6, 0x7B0, + 0x7EB, 0x7F3, + 0x7FD, 0x7FD, + 0x816, 0x819, + 0x81B, 0x823, + 0x825, 0x827, + 0x829, 0x82D, + 0x859, 0x85B, + 0x890, 0x891, + 0x897, 0x89F, + 0x8CA, 0x8E1, + 0x8E2, 0x8E2, + 0x8E3, 0x902, + 0x903, 0x903, + 0x93A, 0x93A, + 0x93B, 0x93B, + 0x93C, 0x93C, + 0x93E, 0x940, + 0x941, 0x948, + 0x949, 0x94C, + 0x94D, 0x94D, + 0x94E, 0x94F, + 0x951, 0x957, + 0x962, 0x963, + 0x981, 0x981, + 0x982, 0x983, + 0x9BC, 0x9BC, + 0x9BE, 0x9C0, + 0x9C1, 0x9C4, + 0x9C7, 0x9C8, + 0x9CB, 0x9CC, + 0x9CD, 0x9CD, + 0x9D7, 0x9D7, + 0x9E2, 0x9E3, + 0x9FE, 0x9FE, + 0xA01, 0xA02, + 0xA03, 0xA03, + 0xA3C, 0xA3C, + 0xA3E, 0xA40, + 0xA41, 0xA42, + 0xA47, 0xA48, + 0xA4B, 0xA4D, + 0xA51, 0xA51, + 0xA70, 0xA71, + 0xA75, 0xA75, + 0xA81, 0xA82, + 0xA83, 0xA83, + 0xABC, 0xABC, + 0xABE, 0xAC0, + 0xAC1, 0xAC5, + 0xAC7, 0xAC8, + 0xAC9, 0xAC9, + 0xACB, 0xACC, + 0xACD, 0xACD, + 0xAE2, 0xAE3, + 0xAFA, 0xAFF, + 0xB01, 0xB01, + 0xB02, 0xB03, + 0xB3C, 0xB3C, + 0xB3E, 0xB3E, + 0xB3F, 0xB3F, + 0xB40, 0xB40, + 0xB41, 0xB44, + 0xB47, 0xB48, + 0xB4B, 0xB4C, + 0xB4D, 0xB4D, + 0xB55, 0xB56, + 0xB57, 0xB57, + 0xB62, 0xB63, + 0xB82, 0xB82, + 0xBBE, 0xBBF, + 0xBC0, 0xBC0, + 0xBC1, 0xBC2, + 0xBC6, 0xBC8, + 0xBCA, 0xBCC, + 0xBCD, 0xBCD, + 0xBD7, 0xBD7, + 0xC00, 0xC00, + 0xC01, 0xC03, + 0xC04, 0xC04, + 0xC3C, 0xC3C, + 0xC3E, 0xC40, + 0xC41, 0xC44, + 0xC46, 0xC48, + 0xC4A, 0xC4D, + 0xC55, 0xC56, + 0xC62, 0xC63, + 0xC81, 0xC81, + 0xC82, 0xC83, + 0xCBC, 0xCBC, + 0xCBE, 0xCBE, + 0xCBF, 0xCBF, + 0xCC0, 0xCC4, + 0xCC6, 0xCC6, + 0xCC7, 0xCC8, + 0xCCA, 0xCCB, + 0xCCC, 0xCCD, + 0xCD5, 0xCD6, + 0xCE2, 0xCE3, + 0xCF3, 0xCF3, + 0xD00, 0xD01, + 0xD02, 0xD03, + 0xD3B, 0xD3C, + 0xD3E, 0xD40, + 0xD41, 0xD44, + 0xD46, 0xD48, + 0xD4A, 0xD4C, + 0xD4D, 0xD4D, + 0xD57, 0xD57, + 0xD62, 0xD63, + 0xD81, 0xD81, + 0xD82, 0xD83, + 0xDCA, 0xDCA, + 0xDCF, 0xDD1, + 0xDD2, 0xDD4, + 0xDD6, 0xDD6, + 0xDD8, 0xDDF, + 0xDF2, 0xDF3, + 0xE31, 0xE31, + 0xE34, 0xE3A, + 0xE47, 0xE4E, + 0xEB1, 0xEB1, + 0xEB4, 0xEBC, + 0xEC8, 0xECE, + 0xF18, 0xF19, + 0xF35, 0xF35, + 0xF37, 0xF37, + 0xF39, 0xF39, + 0xF3E, 0xF3F, + 0xF71, 0xF7E, + 0xF7F, 0xF7F, + 0xF80, 0xF84, + 0xF86, 0xF87, + 0xF8D, 0xF97, + 0xF99, 0xFBC, + 0xFC6, 0xFC6, + 0x102B, 0x102C, + 0x102D, 0x1030, + 0x1031, 0x1031, + 0x1032, 0x1037, + 0x1038, 0x1038, + 0x1039, 0x103A, + 0x103B, 0x103C, + 0x103D, 0x103E, + 0x1056, 0x1057, + 0x1058, 0x1059, + 0x105E, 0x1060, + 0x1062, 0x1064, + 0x1067, 0x106D, + 0x1071, 0x1074, + 0x1082, 0x1082, + 0x1083, 0x1084, + 0x1085, 0x1086, + 0x1087, 0x108C, + 0x108D, 0x108D, + 0x108F, 0x108F, + 0x109A, 0x109C, + 0x109D, 0x109D, + 0x135D, 0x135F, + 0x1712, 0x1714, + 0x1715, 0x1715, + 0x1732, 0x1733, + 0x1734, 0x1734, + 0x1752, 0x1753, + 0x1772, 0x1773, + 0x17B4, 0x17B5, + 0x17B6, 0x17B6, + 0x17B7, 0x17BD, + 0x17BE, 0x17C5, + 0x17C6, 0x17C6, + 0x17C7, 0x17C8, + 0x17C9, 0x17D3, + 0x17DD, 0x17DD, + 0x180B, 0x180D, + 0x180E, 0x180E, + 0x180F, 0x180F, + 0x1885, 0x1886, + 0x18A9, 0x18A9, + 0x1920, 0x1922, + 0x1923, 0x1926, + 0x1927, 0x1928, + 0x1929, 0x192B, + 0x1930, 0x1931, + 0x1932, 0x1932, + 0x1933, 0x1938, + 0x1939, 0x193B, + 0x1A17, 0x1A18, + 0x1A19, 0x1A1A, + 0x1A1B, 0x1A1B, + 0x1A55, 0x1A55, + 0x1A56, 0x1A56, + 0x1A57, 0x1A57, + 0x1A58, 0x1A5E, + 0x1A60, 0x1A60, + 0x1A61, 0x1A61, + 0x1A62, 0x1A62, + 0x1A63, 0x1A64, + 0x1A65, 0x1A6C, + 0x1A6D, 0x1A72, + 0x1A73, 0x1A7C, + 0x1A7F, 0x1A7F, + 0x1AB0, 0x1ABD, + 0x1ABE, 0x1ABE, + 0x1ABF, 0x1ADD, + 0x1AE0, 0x1AEB, + 0x1B00, 0x1B03, + 0x1B04, 0x1B04, + 0x1B34, 0x1B34, + 0x1B35, 0x1B35, + 0x1B36, 0x1B3A, + 0x1B3B, 0x1B3B, + 0x1B3C, 0x1B3C, + 0x1B3D, 0x1B41, + 0x1B42, 0x1B42, + 0x1B43, 0x1B44, + 0x1B6B, 0x1B73, + 0x1B80, 0x1B81, + 0x1B82, 0x1B82, + 0x1BA1, 0x1BA1, + 0x1BA2, 0x1BA5, + 0x1BA6, 0x1BA7, + 0x1BA8, 0x1BA9, + 0x1BAA, 0x1BAA, + 0x1BAB, 0x1BAD, + 0x1BE6, 0x1BE6, + 0x1BE7, 0x1BE7, + 0x1BE8, 0x1BE9, + 0x1BEA, 0x1BEC, + 0x1BED, 0x1BED, + 0x1BEE, 0x1BEE, + 0x1BEF, 0x1BF1, + 0x1BF2, 0x1BF3, + 0x1C24, 0x1C2B, + 0x1C2C, 0x1C33, + 0x1C34, 0x1C35, + 0x1C36, 0x1C37, + 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CE0, + 0x1CE1, 0x1CE1, + 0x1CE2, 0x1CE8, + 0x1CED, 0x1CED, + 0x1CF4, 0x1CF4, + 0x1CF7, 0x1CF7, + 0x1CF8, 0x1CF9, + 0x1DC0, 0x1DFF, + 0x200B, 0x200F, + 0x2028, 0x2028, + 0x2029, 0x2029, + 0x202A, 0x202E, + 0x2060, 0x2064, + 0x2066, 0x206F, + 0x20D0, 0x20DC, + 0x20DD, 0x20E0, + 0x20E1, 0x20E1, + 0x20E2, 0x20E4, + 0x20E5, 0x20F0, + 0x2CEF, 0x2CF1, + 0x2D7F, 0x2D7F, + 0x2DE0, 0x2DFF, + 0x302A, 0x302D, + 0x302E, 0x302F, + 0x3099, 0x309A, + 0xA66F, 0xA66F, + 0xA670, 0xA672, + 0xA674, 0xA67D, + 0xA69E, 0xA69F, + 0xA6F0, 0xA6F1, + 0xA802, 0xA802, + 0xA806, 0xA806, + 0xA80B, 0xA80B, + 0xA823, 0xA824, + 0xA825, 0xA826, + 0xA827, 0xA827, + 0xA82C, 0xA82C, + 0xA880, 0xA881, + 0xA8B4, 0xA8C3, + 0xA8C4, 0xA8C5, + 0xA8E0, 0xA8F1, + 0xA8FF, 0xA8FF, + 0xA926, 0xA92D, + 0xA947, 0xA951, + 0xA952, 0xA953, + 0xA980, 0xA982, + 0xA983, 0xA983, + 0xA9B3, 0xA9B3, + 0xA9B4, 0xA9B5, + 0xA9B6, 0xA9B9, + 0xA9BA, 0xA9BB, + 0xA9BC, 0xA9BD, + 0xA9BE, 0xA9C0, + 0xA9E5, 0xA9E5, + 0xAA29, 0xAA2E, + 0xAA2F, 0xAA30, + 0xAA31, 0xAA32, + 0xAA33, 0xAA34, + 0xAA35, 0xAA36, + 0xAA43, 0xAA43, + 0xAA4C, 0xAA4C, + 0xAA4D, 0xAA4D, + 0xAA7B, 0xAA7B, + 0xAA7C, 0xAA7C, + 0xAA7D, 0xAA7D, + 0xAAB0, 0xAAB0, + 0xAAB2, 0xAAB4, + 0xAAB7, 0xAAB8, + 0xAABE, 0xAABF, + 0xAAC1, 0xAAC1, + 0xAAEB, 0xAAEB, + 0xAAEC, 0xAAED, + 0xAAEE, 0xAAEF, + 0xAAF5, 0xAAF5, + 0xAAF6, 0xAAF6, + 0xABE3, 0xABE4, + 0xABE5, 0xABE5, + 0xABE6, 0xABE7, + 0xABE8, 0xABE8, + 0xABE9, 0xABEA, + 0xABEC, 0xABEC, + 0xABED, 0xABED, + 0xFB1E, 0xFB1E, + 0xFE00, 0xFE0F, + 0xFE20, 0xFE2F, + 0xFEFF, 0xFEFF, + 0xFFF9, 0xFFFB, + 0x101FD, 0x101FD, + 0x102E0, 0x102E0, + 0x10376, 0x1037A, + 0x10A01, 0x10A03, + 0x10A05, 0x10A06, + 0x10A0C, 0x10A0F, + 0x10A38, 0x10A3A, + 0x10A3F, 0x10A3F, + 0x10AE5, 0x10AE6, + 0x10D24, 0x10D27, + 0x10D69, 0x10D6D, + 0x10EAB, 0x10EAC, + 0x10EFA, 0x10EFF, + 0x10F46, 0x10F50, + 0x10F82, 0x10F85, + 0x11000, 0x11000, + 0x11001, 0x11001, + 0x11002, 0x11002, + 0x11038, 0x11046, + 0x11070, 0x11070, + 0x11073, 0x11074, + 0x1107F, 0x11081, + 0x11082, 0x11082, + 0x110B0, 0x110B2, + 0x110B3, 0x110B6, + 0x110B7, 0x110B8, + 0x110B9, 0x110BA, + 0x110BD, 0x110BD, + 0x110C2, 0x110C2, + 0x110CD, 0x110CD, + 0x11100, 0x11102, + 0x11127, 0x1112B, + 0x1112C, 0x1112C, + 0x1112D, 0x11134, + 0x11145, 0x11146, + 0x11173, 0x11173, + 0x11180, 0x11181, + 0x11182, 0x11182, + 0x111B3, 0x111B5, + 0x111B6, 0x111BE, + 0x111BF, 0x111C0, + 0x111C9, 0x111CC, + 0x111CE, 0x111CE, + 0x111CF, 0x111CF, + 0x1122C, 0x1122E, + 0x1122F, 0x11231, + 0x11232, 0x11233, + 0x11234, 0x11234, + 0x11235, 0x11235, + 0x11236, 0x11237, + 0x1123E, 0x1123E, + 0x11241, 0x11241, + 0x112DF, 0x112DF, + 0x112E0, 0x112E2, + 0x112E3, 0x112EA, + 0x11300, 0x11301, + 0x11302, 0x11303, + 0x1133B, 0x1133C, + 0x1133E, 0x1133F, + 0x11340, 0x11340, + 0x11341, 0x11344, + 0x11347, 0x11348, + 0x1134B, 0x1134D, + 0x11357, 0x11357, + 0x11362, 0x11363, + 0x11366, 0x1136C, + 0x11370, 0x11374, + 0x113B8, 0x113BA, + 0x113BB, 0x113C0, + 0x113C2, 0x113C2, + 0x113C5, 0x113C5, + 0x113C7, 0x113CA, + 0x113CC, 0x113CD, + 0x113CE, 0x113CE, + 0x113CF, 0x113CF, + 0x113D0, 0x113D0, + 0x113D2, 0x113D2, + 0x113E1, 0x113E2, + 0x11435, 0x11437, + 0x11438, 0x1143F, + 0x11440, 0x11441, + 0x11442, 0x11444, + 0x11445, 0x11445, + 0x11446, 0x11446, + 0x1145E, 0x1145E, + 0x114B0, 0x114B2, + 0x114B3, 0x114B8, + 0x114B9, 0x114B9, + 0x114BA, 0x114BA, + 0x114BB, 0x114BE, + 0x114BF, 0x114C0, + 0x114C1, 0x114C1, + 0x114C2, 0x114C3, + 0x115AF, 0x115B1, + 0x115B2, 0x115B5, + 0x115B8, 0x115BB, + 0x115BC, 0x115BD, + 0x115BE, 0x115BE, + 0x115BF, 0x115C0, + 0x115DC, 0x115DD, + 0x11630, 0x11632, + 0x11633, 0x1163A, + 0x1163B, 0x1163C, + 0x1163D, 0x1163D, + 0x1163E, 0x1163E, + 0x1163F, 0x11640, + 0x116AB, 0x116AB, + 0x116AC, 0x116AC, + 0x116AD, 0x116AD, + 0x116AE, 0x116AF, + 0x116B0, 0x116B5, + 0x116B6, 0x116B6, + 0x116B7, 0x116B7, + 0x1171D, 0x1171D, + 0x1171E, 0x1171E, + 0x1171F, 0x1171F, + 0x11720, 0x11721, + 0x11722, 0x11725, + 0x11726, 0x11726, + 0x11727, 0x1172B, + 0x1182C, 0x1182E, + 0x1182F, 0x11837, + 0x11838, 0x11838, + 0x11839, 0x1183A, + 0x11930, 0x11935, + 0x11937, 0x11938, + 0x1193B, 0x1193C, + 0x1193D, 0x1193D, + 0x1193E, 0x1193E, + 0x11940, 0x11940, + 0x11942, 0x11942, + 0x11943, 0x11943, + 0x119D1, 0x119D3, + 0x119D4, 0x119D7, + 0x119DA, 0x119DB, + 0x119DC, 0x119DF, + 0x119E0, 0x119E0, + 0x119E4, 0x119E4, + 0x11A01, 0x11A0A, + 0x11A33, 0x11A38, + 0x11A39, 0x11A39, + 0x11A3B, 0x11A3E, + 0x11A47, 0x11A47, + 0x11A51, 0x11A56, + 0x11A57, 0x11A58, + 0x11A59, 0x11A5B, + 0x11A8A, 0x11A96, + 0x11A97, 0x11A97, + 0x11A98, 0x11A99, + 0x11B60, 0x11B60, + 0x11B61, 0x11B61, + 0x11B62, 0x11B64, + 0x11B65, 0x11B65, + 0x11B66, 0x11B66, + 0x11B67, 0x11B67, + 0x11C2F, 0x11C2F, + 0x11C30, 0x11C36, + 0x11C38, 0x11C3D, + 0x11C3E, 0x11C3E, + 0x11C3F, 0x11C3F, + 0x11C92, 0x11CA7, + 0x11CA9, 0x11CA9, + 0x11CAA, 0x11CB0, + 0x11CB1, 0x11CB1, + 0x11CB2, 0x11CB3, + 0x11CB4, 0x11CB4, + 0x11CB5, 0x11CB6, + 0x11D31, 0x11D36, + 0x11D3A, 0x11D3A, + 0x11D3C, 0x11D3D, + 0x11D3F, 0x11D45, + 0x11D47, 0x11D47, + 0x11D8A, 0x11D8E, + 0x11D90, 0x11D91, + 0x11D93, 0x11D94, + 0x11D95, 0x11D95, + 0x11D96, 0x11D96, + 0x11D97, 0x11D97, + 0x11EF3, 0x11EF4, + 0x11EF5, 0x11EF6, + 0x11F00, 0x11F01, + 0x11F03, 0x11F03, + 0x11F34, 0x11F35, + 0x11F36, 0x11F3A, + 0x11F3E, 0x11F3F, + 0x11F40, 0x11F40, + 0x11F41, 0x11F41, + 0x11F42, 0x11F42, + 0x11F5A, 0x11F5A, + 0x13430, 0x1343F, + 0x13440, 0x13440, + 0x13447, 0x13455, + 0x1611E, 0x16129, + 0x1612A, 0x1612C, + 0x1612D, 0x1612F, + 0x16AF0, 0x16AF4, + 0x16B30, 0x16B36, + 0x16F4F, 0x16F4F, + 0x16F51, 0x16F87, + 0x16F8F, 0x16F92, + 0x16FE4, 0x16FE4, + 0x16FF0, 0x16FF1, + 0x1BC9D, 0x1BC9E, + 0x1BCA0, 0x1BCA3, + 0x1CF00, 0x1CF2D, + 0x1CF30, 0x1CF46, + 0x1D165, 0x1D166, + 0x1D167, 0x1D169, + 0x1D16D, 0x1D172, + 0x1D173, 0x1D17A, + 0x1D17B, 0x1D182, + 0x1D185, 0x1D18B, + 0x1D1AA, 0x1D1AD, + 0x1D242, 0x1D244, + 0x1DA00, 0x1DA36, + 0x1DA3B, 0x1DA6C, + 0x1DA75, 0x1DA75, + 0x1DA84, 0x1DA84, + 0x1DA9B, 0x1DA9F, + 0x1DAA1, 0x1DAAF, + 0x1E000, 0x1E006, + 0x1E008, 0x1E018, + 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, + 0x1E026, 0x1E02A, + 0x1E08F, 0x1E08F, + 0x1E130, 0x1E136, + 0x1E2AE, 0x1E2AE, + 0x1E2EC, 0x1E2EF, + 0x1E4EC, 0x1E4EF, + 0x1E5EE, 0x1E5EF, + 0x1E6E3, 0x1E6E3, + 0x1E6E6, 0x1E6E6, + 0x1E6EE, 0x1E6EF, + 0x1E6F5, 0x1E6F5, + 0x1E8D0, 0x1E8D6, + 0x1E944, 0x1E94A, + 0xE0001, 0xE0001, + 0xE0020, 0xE007F, + 0xE0100, 0xE01EF, }