From af82662ed2c28efe61c0b87b0b9b44ccccbb2af7 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Mon, 4 Oct 2021 21:01:00 +0900 Subject: [PATCH] emoji: unify emoji tables of different versions --- blerc | 3 +- docs/ChangeLog.md | 21 +- ...emoji.measure-width.sh => canvas.emoji.sh} | 175 ++++---- make_command.sh | 210 ++++----- note.txt | 58 +++ src/canvas.emoji.sh | 423 ++++-------------- src/canvas.sh | 56 +-- 7 files changed, 374 insertions(+), 572 deletions(-) rename make/{canvas.emoji.measure-width.sh => canvas.emoji.sh} (84%) diff --git a/blerc b/blerc index 0199190c..c129c699 100644 --- a/blerc +++ b/blerc @@ -322,7 +322,8 @@ ## "emoji_version" specifies the version of Unicode Emoji. Available values -## are 1.0, 2.0, 3.0, 4.0, 5.0, 11.0, 12.0, 12.1, 13.0, and 13.1. +## are 0.6, 0.7, 1.0, 2.0, 3.0, 4.0, 5.0, 11.0, 12.0, 12.1, 13.0, 13.1, and +## 14.0. #bleopt emoji_version=13.1 diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 0dd8e9d0..f615e1f8 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -13,6 +13,7 @@ - edit (kill/copy): combine multiple kills and copies (suggested by 3ximus) `#D1443` 66564e1 - edit (`{kill,copy}-region-or`): fix unconditionally combined kills/copies (reported by 3ximus) `#D1447` 1631751 - canvas: update emoji database and support `bleopt emoji_version` (motivated by endorfina) `#D1454` d1f8c27 + - emoji: unify emoji tables of different versions `#D1671` 0000000 - canvas, edit: support `bleopt info_display` (suggested by 0neGuyDev) `#D1458` 69228fa - canvas (panel): always call `panel::render` to update height `#D1472` 51d2c05 - util (visible-bell): work around coordinate mismatches in subshells `#D1495` 01cfb10 @@ -28,7 +29,7 @@ - decode: support `ble-bind -m KEYMAP --cursor DECSCUSR` (motivated by jmederosalvarado) `#D1514` `#D1515` `#D1516` 79d671d - edit: support `nsearch` options (motivated by Alyetama, rashil2000, carv-silva) `#D1517` 9125795 - edit: support `nsearch` opts `empty=emulate-readline` (motivated by jainpratik163) `#D1661` d68ba61 - - edit: support bash-5.2 binding of `prior/next` to `history-search-{for,back}ward` `#D1661` 0000000 + - edit: support bash-5.2 binding of `prior/next` to `history-search-{for,back}ward` `#D1661` d26a6e1 - syntax: support the deprecated redirection `>& file` `#D1539` b9b0de4 - complete: complete file descriptors and heredoc words after redirections `#D1539` b9b0de4 - main: support `blehook ATTACH DETACH`, `BLE_ONLOAD`, `BLE_ATTACHED` `#D1543` 750ca38 @@ -64,16 +65,16 @@ - canvas: support grapheme clusters (motivated by huresche) `#D1619` c0d997b - canvas (`ble/util/c2w`): use `EastAsianWidth` and `GeneralCategory` to mimic `wcwidth` `#D1645` 9a132b7 - canvas (c2w:auto): work around combining chars applied to the previous line `#D1649` 1cbbecb - - canvas (c2w:auto): avoid duplicate requests `#D1649` 1cbbecb 0000000 - - canvas (c2w:auto): send DSR(6) in the internal state `#D1664` 0000000 - - canvas (c2w): support `bleopt char_width_mode=musl` `#D1668` 0000000 - - canvas (c2w:auto): detect `emacs` and `musl` `#D1668` 0000000 + - canvas (c2w:auto): avoid duplicate requests `#D1649` 1cbbecb a3047f56 + - canvas (c2w:auto): send DSR(6) in the internal state `#D1664` a3047f5 + - canvas (c2w): support `bleopt char_width_mode=musl` `#D1668` 05b258f `#D1672` 0000000 + - canvas (c2w:auto): detect `emacs` and `musl` `#D1668` 05b258f - rlfunc: support vi word operations in `emacs` keymap (requested by SolarAquarion) `#D1624` 21d636a - edit: support `TMOUT` for the session timeout `#D1631` 0e16dbd - edit: support bash-5.2 `READLINE_ARGUMENT` `#D1638` d347fb3 - complete: support `complete [-DI]` in old versions of Bash through `_DefaultCmD_` and `_InitialWorD_` `#D1639` 925b2cd - rlfunc: support nsearch widgets in `vi_nmap` keymap (requested by cornfeedhobo) `#D1651` 9a7c8b1 -- prompt: support `bleopt prompt_ruler` `#D1666` 0000000 +- prompt: support `bleopt prompt_ruler` `#D1666` 05cf638 ## Changes @@ -110,8 +111,8 @@ - prompt: do not evaluate `PROMPT_COMMAND` for subprompts `#D1654` 08e903e - Makefile: work around the case the repository is cloned without `--recursive` `#D1655` 22ace5f - repo: add subdirectories `make` and `docs` `#D1657` 75bd04c -- blerc: add all the missing options `#D1667` 0000000 -- util: time out CPR requests `#D1669` 00000000 +- blerc: add all the missing options `#D1667` 0228d76 +- util: time out CPR requests `#D1669` 1481d48 ## Fixes @@ -176,7 +177,7 @@ - complete: fix a task scheduling bug of referencing two different clocks (reported by rashil2000) `#D1636` fea5f5b - canvas: update prompt trace on `char_width_mode` change (reported by Barbarossa93) `#D1642` 68ee111 - decode (`cmap/initialize`): fix unquoted special chars in the cmap cache `#D1647` 7434d2d -- decode: fix a bug that the characters input while initialization are delayed `#D1670` 0000000 +- decode: fix a bug that the characters input while initialization are delayed `#D1670` 430f449 ## Optimization @@ -245,7 +246,7 @@ - util: fix `ble/util/dense-array#fill-range` a46fdaf - util: fix leak variables `buff`, `trap`, `{x,y}{1,2}` `#D1572` 5967d6c - util: fix leak variables `#D1643` fcf634b -- edit (`command-help`): use `ble/util/assign/.mktmp` to determine the temporary filename `#D1663` +- edit (`command-help`): use `ble/util/assign/.mktmp` to determine the temporary filename `#D1663` 1af0800 # ble-0.4.0-devel2 diff --git a/make/canvas.emoji.measure-width.sh b/make/canvas.emoji.sh similarity index 84% rename from make/canvas.emoji.measure-width.sh rename to make/canvas.emoji.sh index ce27d18f..0b986a9c 100644 --- a/make/canvas.emoji.measure-width.sh +++ b/make/canvas.emoji.sh @@ -2,7 +2,60 @@ function mkd { [[ -d $1 ]] || mkdir -p "$1"; } -function sub:compare { +## @fn make/canvas.emoji/get-emoji-data [emoji_version] +## @var[out] emoji_data +## @var[out] emoji_cache_file +function make/canvas.emoji/get-emoji-data { + #local unicode_version=$(wget https://unicode.org/Public/emoji/ -O - | grep -Eo 'href="[0-9]+\.[0-9]+/"' | sed 's,^href=",,;s,/"$,,' | tail -n 1) + local unicode_version=${1:-14.0} + emoji_cache_file=out/data/unicode-emoji-$unicode_version.txt + if [[ ! -s $emoji_cache_file ]]; then + mkd out/data + wget "https://unicode.org/Public/emoji/$unicode_version/emoji-test.txt" -O "$emoji_cache_file.part" && + mv "$emoji_cache_file.part" "$emoji_cache_file" + fi + + local gawk_script=' + /^[[:space:]]*#/ { next; } + sub(/;.*$/, "") { print $0; }' + ble/util/assign-array emoji_data 'gawk "$gawk_script" "$emoji_cache_file"' +} + +function make/canvas.emoji/sub:help { + ble/util/print "usage: source ${BASH_SOURCE##*/}${BASH_SOURCE:-canvas.emoji.sh} SUBCOMMAND ARGS..." + ble/util/print + ble/util/print "SUBCOMMAND" + declare -F | sed -n 's/^declare -f make\/canvas.emoji\/sub:\([^[:space:]]*\)/ \1/p' + ble/util/print +} + +function make/canvas.emoji/sub:save-emoji-type { + local emoji_data emoji_cache_file + make/canvas.emoji/get-emoji-data + gawk ' + /^[[:space:]]*#/ { next; } + { + if (/unqualified/) { + type = "UQ"; + } else if (/fully-qualified/) { + type = "FQ"; + } else if (/minimally-qualified/) { + type = "MQ"; + } else { + type = "XX"; + } + } + sub(/;.*$/, "") { + s = ""; + for (i = 1; i <= NF; i++) { + s = s sprintf("\\U%05X", strtonum("0x" $i)); + } + print s ": " type; + } + ' "$emoji_cache_file" | sort -u > out/data/emoji.TYPE.txt +} + +function make/canvas.emoji/sub:compare { grep '^\\' out/data/emoji.TYPE.txt | join - <(awk '/^\\/ { sub(/^w=/, "blesh=", $2); print; }' out/data/emoji.blesh.txt) | join - <(awk '/^\\/ { sub(/^w=/, "kitty=", $2); print; }' out/data/emoji.kitty.txt) @@ -10,6 +63,7 @@ function sub:compare { } #------------------------------------------------------------------------------ +# measure-emoji.impl1 _tool_emoji_width_code=() _tool_emoji_width_gcb=() @@ -26,7 +80,7 @@ function inspect1/proc { ble/util/c2s "$c" ble/canvas/put.draw "$ret" done - + ble/array#push _tool_emoji_width_code "${code[*]}" ble/array#push _tool_emoji_width_gcb "${gcb[*]}" ble/term/CPR/request.draw inspect1/callback @@ -48,7 +102,20 @@ function inspect1/callback-final { done | sort -u } >> emoji.txt +function make/canvas.emoji/sub:measure-emoji.impl1 { + local emoji_data emoji_cache_file + make/canvas.emoji/get-emoji-data + ble/util/buffer.flush >&2 + local line + for line in "${emoji_data[@]}"; do + eval "inspect1/proc $line" + done + ble/term/CPR/request.buff inspect1/callback-final + ble/util/buffer.flush >&2 +} + #------------------------------------------------------------------------------ +# measure-emoji _term_emojiw_index_req=0 _term_emojiw_index_rcv=0 @@ -61,7 +128,7 @@ _term_emojiw_output=emoji.txt function inspect2/start { _term_emojiw_index_req=0 _term_emojiw_index_rcv=0 - _term_emojiw_data=("${data[@]}") + _term_emojiw_data=("${emoji_data[@]}") _term_emojiw_output=emoji.txt : > "$_term_emojiw_output" inspect2/next @@ -124,14 +191,21 @@ function inspect2/final { echo Done } +function make/canvas.emoji/sub:measure-emoji { + local emoji_data emoji_cache_file + make/canvas.emoji/get-emoji-data 14.0 + inspect2/start +} + #------------------------------------------------------------------------------ +# measure-emoji-sequences ## @fn ble/unicode/measure-emoji-sequences -## @var[in] data +## @var[in] emoji_data function ble/unicode/measure-emoji-sequences { local line words ret count=0 local -a codes=() gcbs=() widths=() - for line in "${data[@]}"; do + for line in "${emoji_data[@]}"; do ble/string#split-words words "$line" local s= word c @@ -163,9 +237,11 @@ function ble/unicode/test-emoji-sequence-width { diff -bwu <(grep '^\\U' out/data/emoji."blesh-$scheme".txt) <(grep '^\\U' out/data/emoji."$term".txt) } -## @fn main/sub:measure-blesh term [scheme] -## @var[in] data cache -function main/sub:measure-blesh { +## @fn make/canvas.emoji/sub:measure-blesh term [scheme] +function make/canvas.emoji/sub:measure-blesh { + local emoji_data emoji_cache_file + make/canvas.emoji/get-emoji-data 14.0 + local term=$1 scheme=${2:-$1} case $scheme in (blesh) @@ -396,78 +472,25 @@ function main/sub:measure-blesh { } #------------------------------------------------------------------------------ - -function main { - local type=$1 - #local unicode_version=$(wget https://unicode.org/Public/emoji/ -O - | grep -Eo 'href="[0-9]+\.[0-9]+/"' | sed 's,^href=",,;s,/"$,,' | tail -n 1) - local unicode_version=14.0 - local cache=out/data/unicode-emoji-$unicode_version.txt - if [[ ! -s $cache ]]; then - mkd out/data - wget "https://unicode.org/Public/emoji/$unicode_version/emoji-test.txt" -O "$cache.part" && - mv "$cache.part" "$cache" - fi +function make/canvas.emoji/sub:dump-EmojiStatus { + local emoji_data emoji_cache_file + make/canvas.emoji/get-emoji-data - local gawk_script=' - /^[[:space:]]*#/ { next; } - sub(/;.*$/, "") { print $0; }' - local data - ble/util/assign-array data 'gawk "$gawk_script" "$cache"' - - case $type in - (measure-at-once) - ble/util/buffer.flush >&2 - local line - for line in "${data[@]}"; do - eval "inspect1/proc $line" - done - ble/term/CPR/request.buff inspect1/callback-final - ble/util/buffer.flush >&2 ;; - (measure-emoji-by-emoji) - inspect2/start ;; - (measure-blesh) - main/sub:measure-blesh "$2" "$3" ;; - (save-emoji-type) - gawk ' - /^[[:space:]]*#/ { next; } - { - if (/unqualified/) { - type = "UQ"; - } else if (/fully-qualified/) { - type = "FQ"; - } else if (/minimally-qualified/) { - type = "MQ"; - } else { - type = "XX"; - } - } - sub(/;.*$/, "") { - s = ""; - for (i = 1; i <= NF; i++) { - s = s sprintf("\\U%05X", strtonum("0x" $i)); - } - print s ": " type; - } - ' "$cache" | sort -u > out/data/emoji.TYPE.txt ;; - esac -} + local line words code + for line in "${emoji_data[@]}"; do + ble/string#split-words words "$line" -function sub:measure-emoji-impl1 { - main measure-at-once -} -function sub:measure-emoji { - main measure-emoji-by-emoji -} -function sub:measure-blesh { - main measure-blesh "$@" -} -function sub:save-emoji-type { - main save-emoji-type + ((${#words[@]}==1)) || continue + ((code=16#${words[0]})) + ble/unicode/EmojiStatus "$code" + printf 'U+%05X %d\n' "$code" "$ret" + done } -if declare -F "sub:$1" &>/dev/null; then - "sub:$@" + +if declare -F "make/canvas.emoji/sub:$1" &>/dev/null; then + "make/canvas.emoji/sub:$@" else - sub:measure-emoji + make/canvas.emoji/sub:help fi diff --git a/make_command.sh b/make_command.sh index 122993d9..efea5b3a 100755 --- a/make_command.sh +++ b/make_command.sh @@ -96,25 +96,19 @@ function sub:ignoreeof-messages { } function sub:generate-emoji-table { - #local unicode_version=$(wget https://unicode.org/Public/emoji/ -O - | grep -Eo 'href="[0-9]+\.[0-9]+/"' | sed 's,^href=",,;s,/"$,,' | tail -n 1) + local -x name=${1:-_ble_unicode_EmojiStatus} + local unicode_version=14.0 local cache=out/data/unicode-emoji-$unicode_version.txt download "https://unicode.org/Public/emoji/$unicode_version/emoji-test.txt" "$cache" - local q=\' + local -x q=\' local versions=$(gawk 'match($0, / E([0-9]+\.[0-9]+)/, m) > 0 { print m[1]; }' "$cache" | sort -Vu | tr '\n' ' ') gawk -v versions="$versions" ' - function join(arr, sep, _, r, i, n) { - r = ""; - n = length(arr); - for (i = 1; i <= n; i++) { - if (i > 1) r = r sep; - r = r arr[i]; - } - return r; - } - BEGIN { + NAME = ENVIRON["name"]; + q = ENVIRON["q"]; + EmojiStatus_None = 0; EmojiStatus_FullyQualified = 1; EmojiStatus_MinimallyQualified = 2; @@ -127,14 +121,16 @@ function sub:generate-emoji-table { print "_ble_unicode_EmojiStatus_Component=" EmojiStatus_Component; } - function register_codepoint(char_code, char_emoji_version, char_qtype, _, i) { - for (i = nvers; i >= 1; i--) { - emoji_version = vers[i]; - data[emoji_version, char_code]++; - data[emoji_version, char_code + 1]++; - data_qtype[emoji_version, char_code] = char_qtype; - if (char_emoji_version == emoji_version) break; + function register_codepoint(char_code, char_emoji_version, char_qtype, _, iver) { + iver = ver2iver[char_emoji_version]; + if (iver == "") { + print "unknown version \"" char_emoji_version "\"" > "/dev/stderr"; + return; } + + g_code2qtype[char_code] = iver == 0 ? char_qtype : q "V>=" iver "?" char_qtype ":0" q; + if (g_code2qtype[char_code + 1] == "") + g_code2qtype[char_code + 1] = "0"; } function register_RegionalIndicators(_, code) { @@ -145,15 +141,14 @@ function sub:generate-emoji-table { BEGIN { split(versions, vers); nvers = length(vers); + for (iver = 0; iver < nvers; iver++) { + ver2iver[vers[iver + 1]] = iver; + iver2ver[iver] = vers[iver + 1]; + } register_RegionalIndicators(); } # 単一絵文字 (sequence でない) のみを登録する。 - # - # 2021-06-18 やはり unqualified は絵文字に含めない。多くの場合は既定では通 - # 常文字で EPVS によって絵文字として表示する様である。component は肌の色 - # (Extend) と髪 (Pictographic) の2種類がある。取り敢えず幅2で計算する。 - # match($0, / E([0-9]+\.[0-9]+)/, m) > 0 { if ($3 == "fully-qualified") { register_codepoint(strtonum("0x" $1), m[1], EmojiStatus_FullyQualified); @@ -164,119 +159,87 @@ function sub:generate-emoji-table { } } - function get_database_name(version, _, m) { - if (match(version, /^0*([0-9]+)\.0*([0-9]+)$/, m) > 0) - return sprintf("_ble_unicode_EmojiStatus_%04d", m[1] * 100 + m[2]); - else - return ""; - } - + function print_database(_, codes, qtypes, len, i, n, keys, code, qtype, prev_qtype) { - function etable_start(version) { - g_emoji_version = version; - g_prev_qtype = EmojiStatus_None; - delete etable; - return 1; - } - - function etable_register_boundary(code, qtype) { - etable[code] = qtype; - } - - function etable_end(_, database_name, i, n, code, qtype, prev_code, prev_qtype, codes, bcodes, nbcodes, ranges, iranges, qtypes, iqtypes) { - if (g_emoji_version == "") return; - - if ((database_name = get_database_name(g_emoji_version))) { - - # @arr bcodes: determine boundary codes - nbcodes = 0; - n = asorti(etable, codes, "@ind_num_asc"); - prev_qtype = EmojiStatus_None; - for (i = 1; i <= n; i++) { - code = codes[i]; - qtype = etable[code]; - if (qtype == prev_qtype) continue; - prev_qtype = qtype; - bcodes[++nbcodes] = code; - } - - # @arr ranges, qtypes - iranges = 0; - iqtypes = 0; - prev_code = 0; - prev_qtype = EmojiStatus_None; - for (i = 1; i <= nbcodes; i++) { - code = bcodes[i]; - qtype = etable[code]; - if (i + 1 < nbcodes && (n = bcodes[i + 1]) - code <= 1) { - for (; code < n; code++) - qtypes[++iqtypes] = "[" code "]=" qtype; - } else if (qtype != prev_qtype) { - ranges[++iranges] = code; - qtypes[++iqtypes] = "[" code "]=" qtype; - - # 非孤立領域の範囲 - p = int(code); - if (qtype == EmojiStatus_None) p--; - if (p < 0x10000) { - if (bmp_min == "" || p < bmp_min) bmp_min = p; - if (bmp_max == "" || p > bmp_max) bmp_max = p; - } else { - if (smp_min == "" || p < smp_min) smp_min = p; - if (smp_max == "" || p > smp_max) smp_max = p; - } - if (prev_qtype != EmojiStatus_None && prev_code < 0x10000 && 0x10000 < code) - print "\x1b[31mEmojiStatus_xmaybe: a BMP-SMP crossing range unexpected.\x1b[m" > "/dev/stderr"; - prev_code = code; - prev_qtype = qtype; - } + # uniq g_code2qtype + len = 0; + prev_qtype = EmojiStatus_None; + n = asorti(g_code2qtype, keys, "@ind_num_asc"); + for (i = 1; i <= n; i++) { + code = int(keys[i]); + qtype = g_code2qtype[code]; + if (qtype == "") qtype = EmojiStatus_None; + if (qtype != prev_qtype) { + codes[len] = code; + qtypes[len] = qtype; + len++; } - - g_def_ranges[g_emoji_version] = database_name "_ranges=(" join(ranges, " ") ")"; - g_def_status[g_emoji_version] = database_name "=(" join(qtypes, " ") ")" + prev_qtype = qtype; } - g_emoji_version = ""; - } + output_values = ""; + output_ranges = ""; + prev_code = 0; + prev_qtype = EmojiStatus_None; + for (i = 0; i < len; i++) { + code = codes[i]; + qtype = qtypes[i]; + + if (i + 1 < len && (n = codes[i + 1]) - code <= 1) { + # 孤立コード + for (; code < n; code++) + output_values = output_values " [" code "]=" qtype; + + } else if (qtype != prev_qtype) { + output_values = output_values " [" code "]=" qtype; + output_ranges = output_ranges " " code + + # 非孤立領域の範囲 + p = int(code); + if (qtype == EmojiStatus_None) p--; + if (p < 0x10000) { + if (bmp_min == "" || p < bmp_min) bmp_min = p; + if (bmp_max == "" || p > bmp_max) bmp_max = p; + } else { + if (smp_min == "" || p < smp_min) smp_min = p; + if (smp_max == "" || p > smp_max) smp_max = p; + } - function print_database(_, i, n, pairs, pair, version, code, qtype, emoji_version, latest_version) { - # Scan "version SUBSEP code" pairs - n = asorti(data, pairs); - g_emoji_version = ""; - for (i = 1; i <= n; i++) { - split(pairs[i], pair, SUBSEP); - version = pair[1]; - if (version != g_emoji_version) { - if (g_emoji_version != "") etable_end(); - etable_start(version); + # 非孤立領域が BMP/SMP を跨がない事の確認 + if (prev_qtype != EmojiStatus_None && prev_code < 0x10000 && 0x10000 < code) + print "\x1b[31mEmojiStatus_xmaybe: a BMP-SMP crossing range unexpected.\x1b[m" > "/dev/stderr"; + prev_code = code; + prev_qtype = qtype; } - code = pair[2]; - qtype = data_qtype[pairs[i]]; - if (qtype == "") qtype = EmojiStatus_None; - etable_register_boundary(code, qtype); } - if (g_emoji_version != "") etable_end(); - printf("_ble_unicode_EmojiStatus_xmaybe='$q'%d<=code&&code<=%d||%d<=code&&code<=%d'$q'\n", bmp_min, bmp_max, smp_min, smp_max); # printf("_ble_unicode_EmojiStatus_bmp_min=%-6d # U+%04X\n", bmp_min, bmp_min); # printf("_ble_unicode_EmojiStatus_bmp_max=%-6d # U+%04X\n", bmp_max, bmp_max); # printf("_ble_unicode_EmojiStatus_smp_min=%-6d # U+%04X\n", smp_min, smp_min); # printf("_ble_unicode_EmojiStatus_smp_max=%-6d # U+%04X\n", smp_max, smp_max); - for (i = 1; i <= nvers; i++) { - emoji_version = vers[i]; - if (emoji_version >= 1.0) { - print g_def_ranges[emoji_version]; - print g_def_status[emoji_version]; - } - } - latest_version = vers[nvers]; - print "bleopt/declare -n emoji_version " latest_version; - print "_ble_unicode_EmojiStatus_ranges=(\"${" get_database_name(latest_version) "_ranges[@]}\")"; - print "ble/idict#copy _ble_unicode_EmojiStatus " get_database_name(latest_version); + printf("_ble_unicode_EmojiStatus_xmaybe='$q'%d<=code&&code<=%d||%d<=code&&code<=%d'$q'\n", bmp_min, bmp_max, smp_min, smp_max); + print NAME "=(" substr(output_values, 2) ")" + print NAME "_ranges=(" substr(output_ranges, 2) ")"; + + } + + function print_functions(_, iver) { + print "function ble/unicode/EmojiStatus/version2index {"; + print " case $1 in"; + for (iver = 0; iver < nvers; iver++) + print " (" iver2ver[iver] ") ret=" iver " ;;"; + print " (*) return 1 ;;"; + print " esac"; + print "}" + print "_ble_unicode_EmojiStatus_version=" nvers - 1; + print "bleopt/declare -n emoji_version " iver2ver[nvers - 1]; } - END { print_database(); } + END { + print_database(); + print_functions(); + } ' "$cache" | ifold -w 131 --spaces --no-text-justify --indent=.. } @@ -989,7 +952,8 @@ function sub:convert-custom-c2w-table { END { name = ENVIRON["name"]; print name "=(" substr(g_output_values, 2) ")"; - print name "_ranges=(" substr(g_output_ranges, 2) ")"; + # print name "_ranges=(" substr(g_output_ranges, 2) ")"; + print name "_ranges=(\"${!" name "[@]}\")" } ' | ifold -w 131 --spaces --no-text-justify --indent=.. } diff --git a/note.txt b/note.txt index dc4af325..08ccf3ad 100644 --- a/note.txt +++ b/note.txt @@ -1301,6 +1301,9 @@ bash_tips $ RANDOM=0; b=$(< "$RANDOM"); echo "$RANDOM" 24386 + うーん。これに関しては zsh も ksh も副作用を残す形に実装している様だ。つま + り、$(< ...) は特別な構文として同じシェルで評価するものとしているという事。 + 2021-09-07 * segv: bash-dev -c "declare -A A; unset 'A[\${v[0]}]'" @@ -1627,6 +1630,12 @@ bash_tips た方が良いかもしれないというぐらいである。通常の場所ではどんどん使って問題 ないのではないか。 + →検索してみたが実は意外とそんなに沢山あるという訳でもない様だ。少しずつ置 + き換えていけば数日で終わるぐらいの箇所しか無い。概算で140箇所程度である。然 + し、そもそも其処までして置き換える必要があるのかという疑問もある。現状で動 + いているのであればそれで良いのではないか。一応他のシェルに移植する時に一括 + で動作を変更するのが楽という可能性はなくはない。 + 2021-09-20 * sabbrev を accept-line の時にも展開する可能性について。 @@ -5382,6 +5391,55 @@ bash_tips Done (実装ログ) ------------------------------------------------------------------------------- +2021-10-04 + + * canvas (c2w.*.sh): テーブルの初期化に於いて *_ranges は ${!table[@]} に実は置き換えられる? [#D1672] + + 但し、table に飛び地も記録している場合にはこの方法は使えない。 + canvas.c2w.musl.sh を見ていて思ったのだが、他には短縮できそうな物はなかった。 + + * canvas.emoji: version 毎のテーブルを統合 [#D1671] + + c2w.emoji.sh: version 毎にテーブルを作るのではなくて、合成したテーブルを使っ + た方がスペースを節約できるのではないか。 + + 実装し直した。 + + x fixed: 出力結果を比較してみたが全然違う値になってしまっている。何故だろう + か。うーん。実際に出力されているテーブル自体が何だか違う結果になっている + 気がする。何かデータがスキップされてしまっている可能性? + + 念の為元のデータを確認しておく。U+1F7E5 (128997) が以前は 1 + (fully-qualified) だったのが現在は 0 になってしまっている。元のデータには + ちゃんとこれは含まれている。最新のテーブルを確認すると値が消滅している。 + + →と思ったらミスが見つかった。修正する。 + + x fixed: emoji_version=13.1 で比較した所、以下の code point の EmojiStatus + が変わってしまっている。 + + -U+0270F 3 + +U+0270F 1 + + 元のデータを参照するとこれは unqualified でなければならない。何故値が変化 + してしまっているのだろうか? 新しいテーブルの実装を確認する。270F = 9999 + である。 + + % うーん。最新のテーブルを見るとそもそも 0 になるべきの気がする。何故 1 + % になっているのだろうか。と思ったが、分かった。範囲としては 9994-10000 + % に含まれていて、9994 は 1 という事になっている。 + + つまりテーブル生成の時点で何故か 9999 (unqualified) が 9994 (270A) に属す + る形になってしまっているのが原因である。 + + →これは gawk の中で < による比較が文字列比較になっていたのが原因だった。 + int() で整数に変換してから処理する様にした。 + + o 13.1, 14.0 で比較した。ちゃんと一致している。 + o 11.0, 5.0, 2.0, 1.0 でもちゃんと一致する事を確認した。 + o 0.6, 0.7 は以前は対応していなかったが対応する事にした。 + o 14.0 も新しく対応した。 + 2021-09-27 * 2021-09-24 decode: 起動中に入力した文字が遅延する問題 [#D1670] diff --git a/src/canvas.emoji.sh b/src/canvas.emoji.sh index 6dadc259..5559e955 100644 --- a/src/canvas.emoji.sh +++ b/src/canvas.emoji.sh @@ -4,340 +4,91 @@ _ble_unicode_EmojiStatus_MinimallyQualified=2 _ble_unicode_EmojiStatus_Unqualified=3 _ble_unicode_EmojiStatus_Component=4 _ble_unicode_EmojiStatus_xmaybe='8596<=code&&code<=11036||127344<=code&&code<=129782' -_ble_unicode_EmojiStatus_0100_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9829 9833 9878 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 - 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 - 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 127904 - 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128378 128394 128398 - 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128721 128736 128742 - 128747 128749 129296 129305 129408 129413 129472 129473) -_ble_unicode_EmojiStatus_0100=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9800]=1 [9812]=0 [9824]=3 [9827]=3 [9828]=0 [9829]=3 - [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9877]=0 [9878]=3 [9880]=0 [9881]=3 [9882]=0 [9885]=0 - [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 [9934]=1 [9935]=3 [9936]=0 - [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 [9975]=3 [9978]=1 [9979]=0 - [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 [10006]=3 - [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 [10070]=0 - [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 [10548]=3 [10550]=0 [11013]=3 - [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 [127183]=1 - [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 [127490]=3 - [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127777]=3 [127778]=0 - [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 [127902]=3 [127904]=1 [127947]=3 - [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 [127991]=3 [127992]=1 [127995]=4 - [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 [128331]=1 [128335]=0 [128360]=0 - [128367]=3 [128369]=0 [128371]=3 [128378]=0 [128391]=3 [128394]=3 [128398]=0 [128400]=3 [128405]=1 [128407]=0 [128421]=3 - [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 - [128482]=0 [128483]=3 [128495]=3 [128499]=3 [128506]=3 [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 - [128717]=3 [128720]=1 [128721]=0 [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 - [129296]=1 [129305]=0 [129408]=1 [129413]=0 [129472]=1 [129473]=0) -_ble_unicode_EmojiStatus_0200_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9829 9833 9878 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 - 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 - 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 127904 - 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128378 128394 128398 - 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128721 128736 128742 - 128747 128749 129296 129305 129408 129413 129472 129473) -_ble_unicode_EmojiStatus_0200=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9800]=1 [9812]=0 [9824]=3 [9827]=3 [9828]=0 [9829]=3 - [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9877]=0 [9878]=3 [9880]=0 [9881]=3 [9882]=0 [9885]=0 - [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 [9934]=1 [9935]=3 [9936]=0 - [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 [9975]=3 [9978]=1 [9979]=0 - [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 [10006]=3 - [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 [10070]=0 - [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 [10548]=3 [10550]=0 [11013]=3 - [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 [127183]=1 - [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 [127490]=3 - [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127777]=3 [127778]=0 - [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 [127902]=3 [127904]=1 [127947]=3 - [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 [127991]=3 [127992]=1 [127995]=4 - [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 [128331]=1 [128335]=0 [128360]=0 - [128367]=3 [128369]=0 [128371]=3 [128378]=0 [128391]=3 [128394]=3 [128398]=0 [128400]=3 [128405]=1 [128407]=0 [128421]=3 - [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 - [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 - [128716]=1 [128717]=3 [128720]=1 [128721]=0 [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 - [128755]=3 [129296]=1 [129305]=0 [129408]=1 [129413]=0 [129472]=1 [129473]=0) -_ble_unicode_EmojiStatus_0300_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9829 9833 9878 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 - 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 - 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 127904 - 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 128398 - 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 128736 - 128742 128747 128749 128756 128759 129296 129320 129331 129356 129360 129375 129408 129426 129472 129473) -_ble_unicode_EmojiStatus_0300=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9800]=1 [9812]=0 [9824]=3 [9827]=3 [9828]=0 [9829]=3 - [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9877]=0 [9878]=3 [9880]=0 [9881]=3 [9882]=0 [9885]=0 - [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 [9934]=1 [9935]=3 [9936]=0 - [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 [9975]=3 [9978]=1 [9979]=0 - [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 [10006]=3 - [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 [10070]=0 - [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 [10548]=3 [10550]=0 [11013]=3 - [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 [127183]=1 - [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 [127490]=3 - [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127777]=3 [127778]=0 - [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 [127902]=3 [127904]=1 [127947]=3 - [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 [127991]=3 [127992]=1 [127995]=4 - [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 [128331]=1 [128335]=0 [128360]=0 - [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 [128400]=3 [128405]=1 [128407]=0 - [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 [128465]=3 [128468]=0 [128476]=3 - [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 [128507]=1 [128592]=0 [128640]=1 - [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 - [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128759]=0 [129296]=1 [129311]=0 [129320]=0 [129328]=1 [129331]=1 [129339]=0 - [129343]=0 [129350]=0 [129356]=0 [129360]=1 [129375]=0 [129408]=1 [129426]=0 [129472]=1 [129473]=0) -_ble_unicode_EmojiStatus_0400_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 - 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 - 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 127904 - 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 128398 - 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 128736 - 128742 128747 128749 128756 128759 129296 129320 129331 129356 129360 129375 129408 129426 129472 129473) -_ble_unicode_EmojiStatus_0400=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9824]=3 - [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 [9881]=3 [9882]=0 - [9885]=0 [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 [9934]=1 [9935]=3 - [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 [9975]=3 [9978]=1 - [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 - [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 - [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 [10548]=3 [10550]=0 - [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 - [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 - [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127777]=3 - [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 [127902]=3 [127904]=1 - [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 [127991]=3 [127992]=1 - [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 [128331]=1 [128335]=0 - [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 [128400]=3 [128405]=1 - [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 [128465]=3 [128468]=0 - [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 [128507]=1 [128592]=0 - [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128736]=3 [128742]=0 [128745]=3 [128746]=0 - [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128759]=0 [129296]=1 [129311]=0 [129320]=0 [129328]=1 [129331]=1 - [129339]=0 [129343]=0 [129350]=0 [129356]=0 [129360]=1 [129375]=0 [129408]=1 [129426]=0 [129472]=1 [129473]=0) -_ble_unicode_EmojiStatus_0500_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 - 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 - 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 127904 - 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 128398 - 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 128736 - 128742 128747 128749 128756 128761 129296 129357 129360 129388 129408 129432 129488 129511) -_ble_unicode_EmojiStatus_0500=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9824]=3 - [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 [9881]=3 [9882]=0 - [9885]=0 [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 [9934]=1 [9935]=3 - [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 [9975]=3 [9978]=1 - [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 - [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 - [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 [10548]=3 [10550]=0 - [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 - [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 - [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127777]=3 - [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 [127902]=3 [127904]=1 - [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 [127991]=3 [127992]=1 - [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 [128331]=1 [128335]=0 - [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 [128400]=3 [128405]=1 - [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 [128465]=3 [128468]=0 - [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 [128507]=1 [128592]=0 - [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128736]=3 [128742]=0 [128745]=3 [128746]=0 - [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128761]=0 [129296]=1 [129339]=0 [129343]=0 [129350]=0 [129357]=0 - [129360]=1 [129388]=0 [129408]=1 [129432]=0 [129472]=1 [129488]=1 [129511]=0) -_ble_unicode_EmojiStatus_1100_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128736 128742 128747 128749 128756 128762 129296 129393 129395 129399 129404 129443 129456 129460 129466 129472 129475 129488 - 129536) -_ble_unicode_EmojiStatus_1100=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 - [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 - [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128736]=3 [128742]=0 - [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128762]=0 [129296]=1 [129339]=0 [129343]=0 - [129350]=0 [129393]=0 [129395]=1 [129399]=0 [129402]=1 [129403]=0 [129404]=1 [129443]=0 [129456]=4 [129460]=1 [129466]=0 - [129472]=1 [129475]=0 [129488]=1 [129536]=0) -_ble_unicode_EmojiStatus_1200_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128736 128742 128747 128749 128756 128763 128992 129004 129293 129399 129402 129443 129445 129451 129454 129456 129460 129483 - 129485 129536 129648 129652 129656 129659 129664 129667 129680 129686) -_ble_unicode_EmojiStatus_1200=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 - [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 - [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128725]=1 [128736]=3 - [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128763]=0 [128992]=1 [129004]=0 - [129293]=1 [129339]=0 [129350]=0 [129394]=0 [129399]=0 [129402]=1 [129443]=0 [129445]=1 [129451]=0 [129454]=1 [129456]=4 - [129460]=1 [129483]=0 [129485]=1 [129536]=0 [129648]=1 [129652]=0 [129656]=1 [129659]=0 [129664]=1 [129667]=0 [129680]=1 - [129686]=0) -_ble_unicode_EmojiStatus_1201_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128736 128742 128747 128749 128756 128763 128992 129004 129293 129399 129402 129443 129445 129451 129454 129456 129460 129483 - 129485 129536 129648 129652 129656 129659 129664 129667 129680 129686) -_ble_unicode_EmojiStatus_1201=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]=3 - [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 [9974]=0 - [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128725]=1 [128736]=3 - [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128763]=0 [128992]=1 [129004]=0 - [129293]=1 [129339]=0 [129350]=0 [129394]=0 [129399]=0 [129402]=1 [129443]=0 [129445]=1 [129451]=0 [129454]=1 [129456]=4 - [129460]=1 [129483]=0 [129485]=1 [129536]=0 [129648]=1 [129652]=0 [129656]=1 [129659]=0 [129664]=1 [129667]=0 [129680]=1 - [129686]=0) -_ble_unicode_EmojiStatus_1300_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128725 128728 128736 128742 128747 128749 128756 128765 128992 129004 129292 129456 129460 129536 129648 129653 129656 129659 - 129664 129671 129680 129705 129712 129719 129728 129731 129744 129751) -_ble_unicode_EmojiStatus_1300=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9895]=3 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 - [9928]=3 [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 - [9974]=0 [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128725]=1 [128728]=0 - [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128765]=0 [128992]=1 - [129004]=0 [129292]=1 [129339]=0 [129350]=0 [129401]=0 [129456]=4 [129460]=1 [129484]=0 [129536]=0 [129648]=1 [129653]=0 - [129656]=1 [129659]=0 [129664]=1 [129671]=0 [129680]=1 [129705]=0 [129712]=1 [129719]=0 [129728]=1 [129731]=0 [129744]=1 - [129751]=0) -_ble_unicode_EmojiStatus_1301_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128725 128728 128736 128742 128747 128749 128756 128765 128992 129004 129292 129456 129460 129536 129648 129653 129656 129659 - 129664 129671 129680 129705 129712 129719 129728 129731 129744 129751) -_ble_unicode_EmojiStatus_1301=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9895]=3 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 - [9928]=3 [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 - [9974]=0 [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128725]=1 [128728]=0 - [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128765]=0 [128992]=1 - [129004]=0 [129292]=1 [129339]=0 [129350]=0 [129401]=0 [129456]=4 [129460]=1 [129484]=0 [129536]=0 [129648]=1 [129653]=0 - [129656]=1 [129659]=0 [129664]=1 [129671]=0 [129680]=1 [129705]=0 [129712]=1 [129719]=0 [129728]=1 [129731]=0 [129744]=1 - [129751]=0) -_ble_unicode_EmojiStatus_1400_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9204 9208 9211 9642 9644 9723 9725 9728 9733 9748 - 9750 9762 9764 9774 9776 9784 9787 9800 9812 9823 9825 9829 9833 9876 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 - 9975 9979 9992 9994 9996 10000 10035 10037 10067 10072 10083 10085 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 - 127358 127360 127377 127387 127462 127491 127538 127547 127568 127570 127744 127778 127780 127789 127892 127894 127900 127902 - 127904 127947 127951 127956 127968 127985 127992 127995 128000 128318 128329 128331 128360 128367 128369 128371 128379 128394 - 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128592 128640 128710 128717 128720 128723 - 128725 128728 128733 128736 128742 128747 128749 128756 128765 128992 129004 129292 129456 129460 129536 129648 129653 129656 - 129661 129664 129671 129680 129709 129712 129723 129728 129734 129744 129754 129760 129768 129776 129783) -_ble_unicode_EmojiStatus_1400=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 - [8988]=0 [9000]=3 [9167]=3 [9193]=1 [9197]=3 [9200]=1 [9203]=1 [9204]=0 [9208]=3 [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 - [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]=3 [9757]=3 [9760]=3 [9761]=0 - [9762]=3 [9764]=0 [9766]=3 [9770]=3 [9774]=3 [9776]=0 [9784]=3 [9787]=0 [9792]=3 [9793]=0 [9794]=3 [9800]=1 [9812]=0 [9823]=3 - [9825]=0 [9827]=3 [9828]=0 [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]=3 [9855]=1 [9874]=3 [9875]=1 [9876]=3 [9880]=0 - [9881]=3 [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9895]=3 [9898]=1 [9900]=0 [9904]=3 [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 - [9928]=3 [9934]=1 [9935]=3 [9936]=0 [9937]=3 [9938]=0 [9939]=3 [9940]=1 [9961]=3 [9962]=1 [9968]=3 [9970]=1 [9972]=3 [9973]=1 - [9974]=0 [9975]=3 [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9998]=0 [10000]=0 [10002]=3 [10003]=0 - [10004]=3 [10005]=0 [10006]=3 [10013]=3 [10017]=3 [10024]=1 [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 - [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]=3 [10085]=0 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]=1 - [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 - [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 - [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 - [127744]=1 [127777]=3 [127778]=0 [127780]=3 [127789]=1 [127798]=3 [127869]=3 [127892]=0 [127894]=3 [127896]=0 [127900]=0 - [127902]=3 [127904]=1 [127947]=3 [127951]=1 [127956]=3 [127968]=1 [127985]=0 [127987]=3 [127988]=1 [127989]=3 [127990]=0 - [127991]=3 [127992]=1 [127995]=4 [128000]=1 [128063]=3 [128064]=1 [128065]=3 [128253]=3 [128254]=0 [128318]=0 [128329]=3 - [128331]=1 [128335]=0 [128360]=0 [128367]=3 [128369]=0 [128371]=3 [128378]=1 [128379]=0 [128391]=3 [128394]=3 [128398]=0 - [128400]=3 [128405]=1 [128407]=0 [128420]=1 [128421]=3 [128424]=3 [128433]=3 [128435]=0 [128444]=3 [128450]=3 [128453]=0 - [128465]=3 [128468]=0 [128476]=3 [128479]=0 [128481]=3 [128482]=0 [128483]=3 [128488]=3 [128495]=3 [128499]=3 [128506]=3 - [128507]=1 [128592]=0 [128640]=1 [128710]=0 [128715]=3 [128716]=1 [128717]=3 [128720]=1 [128723]=0 [128725]=1 [128728]=0 - [128733]=1 [128736]=3 [128742]=0 [128745]=3 [128746]=0 [128747]=1 [128749]=0 [128752]=3 [128755]=3 [128756]=1 [128765]=0 - [128992]=1 [129004]=0 [129008]=1 [129292]=1 [129339]=0 [129350]=0 [129456]=4 [129460]=1 [129536]=0 [129648]=1 [129653]=0 - [129656]=1 [129661]=0 [129664]=1 [129671]=0 [129680]=1 [129709]=0 [129712]=1 [129723]=0 [129728]=1 [129734]=0 [129744]=1 - [129754]=0 [129760]=1 [129768]=0 [129776]=1 [129783]=0) +_ble_unicode_EmojiStatus=([169]=3 [174]=3 [8252]=3 [8265]=3 [8482]=3 [8505]=3 [8596]=3 [8602]=0 [8617]=3 [8619]=0 [8986]=1 + [8988]=0 [9000]='V>=2?3:0' [9167]='V>=2?3:0' [9193]=1 [9197]='V>=1?3:0' [9199]='V>=2?3:0' [9200]=1 [9201]='V>=2?3:0' [9203]=1 + [9204]=0 [9208]='V>=1?3:0' [9211]=0 [9410]=3 [9642]=3 [9644]=0 [9654]=3 [9664]=3 [9723]=3 [9725]=1 [9727]=0 [9728]=3 + [9730]='V>=1?3:0' [9732]='V>=2?3:0' [9733]=0 [9742]=3 [9745]=3 [9748]=1 [9750]=0 [9752]='V>=2?3:0' [9757]=3 [9760]='V>=2?3:0' + [9761]=0 [9762]='V>=2?3:0' [9764]=0 [9766]='V>=2?3:0' [9770]='V>=1?3:0' [9774]='V>=2?3:0' [9775]='V>=1?3:0' [9784]='V>=1?3:0' + [9786]=3 [9787]=0 [9792]='V>=5?3:0' [9793]=0 [9794]='V>=5?3:0' [9800]=1 [9812]=0 [9823]='V>=7?3:0' [9824]=3 [9827]=3 [9828]=0 + [9829]=3 [9831]=0 [9832]=3 [9833]=0 [9851]=3 [9854]='V>=7?3:0' [9855]=1 [9874]='V>=2?3:0' [9875]=1 [9876]='V>=2?3:0' + [9877]='V>=5?3:0' [9878]='V>=2?3:0' [9880]=0 [9881]='V>=2?3:0' [9882]=0 [9885]=0 [9888]=3 [9889]=1 [9895]='V>=10?3:0' [9898]=1 + [9900]=0 [9904]='V>=2?3:0' [9906]=0 [9917]=1 [9919]=0 [9924]=1 [9926]=0 [9928]='V>=1?3:0' [9934]=1 [9935]='V>=1?3:0' [9936]=0 + [9937]='V>=1?3:0' [9938]=0 [9939]='V>=1?3:0' [9940]=1 [9961]='V>=1?3:0' [9962]=1 [9968]='V>=1?3:0' [9970]=1 [9972]='V>=1?3:0' + [9973]=1 [9974]=0 [9975]='V>=1?3:0' [9978]=1 [9979]=0 [9981]=1 [9986]=3 [9989]=1 [9992]=3 [9994]=1 [9996]=3 [9997]='V>=1?3:0' + [9998]=0 [9999]=3 [10000]=0 [10002]=3 [10003]=0 [10004]=3 [10005]=0 [10006]=3 [10013]='V>=1?3:0' [10017]='V>=1?3:0' [10024]=1 + [10035]=3 [10037]=0 [10052]=3 [10055]=3 [10060]=1 [10061]=0 [10062]=1 [10067]=1 [10070]=0 [10071]=1 [10072]=0 [10083]='V>=2?3:0' + [10084]=3 [10133]=1 [10136]=0 [10145]=3 [10160]=1 [10175]='V>=2?1:0' [10548]=3 [10550]=0 [11013]=3 [11016]=0 [11035]=1 [11037]=0 + [11088]=1 [11093]=1 [12336]=3 [12349]=3 [12951]=3 [12952]=0 [12953]=3 [126980]=1 [127183]=1 [127344]=3 [127346]=0 [127358]=3 + [127360]=0 [127374]=1 [127377]=1 [127387]=0 [127462]=1 [127488]=0 [127489]=1 [127490]=3 [127491]=0 [127514]=1 [127535]=1 + [127538]=1 [127543]=3 [127547]=0 [127568]=1 [127570]=0 [127744]=1 [127757]='V>=1?1:0' [127759]=1 [127760]='V>=2?1:0' [127761]=1 + [127762]='V>=2?1:0' [127763]=1 [127766]='V>=2?1:0' [127769]=1 [127770]='V>=2?1:0' [127771]=1 [127772]='V>=1?1:0' [127775]=1 + [127777]='V>=1?3:0' [127778]=0 [127780]='V>=1?3:0' [127789]='V>=2?1:0' [127792]=1 [127794]='V>=2?1:0' [127796]=1 + [127798]='V>=1?3:0' [127819]='V>=2?1:0' [127824]='V>=2?1:0' [127868]='V>=2?1:0' [127869]='V>=1?3:0' [127870]='V>=2?1:0' + [127872]=1 [127892]=0 [127894]='V>=1?3:0' [127896]=0 [127900]=0 [127902]='V>=1?3:0' [127904]=1 [127941]='V>=2?1:0' [127942]=1 + [127943]='V>=2?1:0' [127944]=1 [127945]='V>=2?1:0' [127946]=1 [127947]='V>=1?3:0' [127951]='V>=2?1:0' [127956]='V>=1?3:0' + [127968]=1 [127972]='V>=2?1:0' [127985]=0 [127987]='V>=1?3:0' [127988]='V>=2?1:0' [127989]='V>=1?3:0' [127990]=0 + [127991]='V>=1?3:0' [127992]='V>=2?1:0' [127995]='V>=2?4:0' [128000]='V>=2?1:0' [128008]='V>=1?1:0' [128012]=1 + [128015]='V>=2?1:0' [128017]=1 [128019]='V>=2?1:0' [128020]=1 [128021]='V>=1?1:0' [128022]='V>=2?1:0' [128042]='V>=2?1:0' + [128063]='V>=1?3:0' [128064]=1 [128065]='V>=1?3:0' [128101]='V>=2?1:0' [128108]='V>=2?1:0' [128110]=1 [128173]='V>=2?1:0' + [128182]='V>=2?1:0' [128184]=1 [128236]='V>=1?1:0' [128238]=1 [128239]='V>=2?1:0' [128240]=1 [128245]='V>=2?1:0' + [128248]='V>=2?1:0' [128253]='V>=1?3:0' [128254]=0 [128255]='V>=2?1:0' [128259]=1 [128264]='V>=1?1:0' [128265]='V>=2?1:0' + [128266]=1 [128277]='V>=2?1:0' [128300]='V>=2?1:0' [128302]=1 [128318]=0 [128329]='V>=1?3:0' [128331]='V>=2?1:0' [128335]=0 + [128336]=1 [128348]='V>=1?1:0' [128360]=0 [128367]='V>=1?3:0' [128369]=0 [128371]='V>=1?3:0' [128378]='V>=4?1:0' [128379]=0 + [128391]='V>=1?3:0' [128394]='V>=1?3:0' [128398]=0 [128400]='V>=1?3:0' [128405]='V>=2?1:0' [128407]=0 [128420]='V>=4?1:0' + [128421]='V>=1?3:0' [128424]='V>=1?3:0' [128433]='V>=1?3:0' [128435]=0 [128444]='V>=1?3:0' [128450]='V>=1?3:0' [128453]=0 + [128465]='V>=1?3:0' [128468]=0 [128476]='V>=1?3:0' [128479]=0 [128481]='V>=1?3:0' [128482]=0 [128483]='V>=1?3:0' + [128488]='V>=3?3:0' [128495]='V>=1?3:0' [128499]='V>=1?3:0' [128506]='V>=1?3:0' [128507]=1 [128512]='V>=2?1:0' + [128519]='V>=2?1:0' [128521]=1 [128526]='V>=2?1:0' [128527]=1 [128528]='V>=1?1:0' [128529]='V>=2?1:0' [128533]='V>=2?1:0' + [128534]=1 [128535]='V>=2?1:0' [128536]=1 [128537]='V>=2?1:0' [128538]=1 [128539]='V>=2?1:0' [128543]='V>=2?1:0' + [128550]='V>=2?1:0' [128552]=1 [128556]='V>=2?1:0' [128557]=1 [128558]='V>=2?1:0' [128560]=1 [128564]='V>=2?1:0' [128565]=1 + [128566]='V>=2?1:0' [128577]='V>=2?1:0' [128581]=1 [128592]=0 [128640]=1 [128641]='V>=2?1:0' [128643]=1 [128646]='V>=2?1:0' + [128647]=1 [128648]='V>=2?1:0' [128649]=1 [128650]='V>=2?1:0' [128652]=1 [128653]='V>=1?1:0' [128654]='V>=2?1:0' [128655]=1 + [128656]='V>=2?1:0' [128657]=1 [128660]='V>=1?1:0' [128661]=1 [128662]='V>=2?1:0' [128663]=1 [128664]='V>=1?1:0' + [128667]='V>=2?1:0' [128674]=1 [128675]='V>=2?1:0' [128676]=1 [128678]='V>=2?1:0' [128686]='V>=2?1:0' [128690]=1 [128694]=1 + [128697]=1 [128703]='V>=2?1:0' [128704]=1 [128705]='V>=2?1:0' [128710]=0 [128715]='V>=1?3:0' [128716]='V>=2?1:0' + [128717]='V>=1?3:0' [128720]='V>=2?1:0' [128721]='V>=4?1:0' [128723]=0 [128725]='V>=8?1:0' [128726]='V>=10?1:0' [128728]=0 + [128733]='V>=12?1:0' [128736]='V>=1?3:0' [128742]=0 [128745]='V>=1?3:0' [128746]=0 [128747]='V>=2?1:0' [128749]=0 + [128752]='V>=1?3:0' [128755]='V>=1?3:0' [128756]='V>=4?1:0' [128759]='V>=6?1:0' [128761]='V>=7?1:0' [128762]='V>=8?1:0' + [128763]='V>=10?1:0' [128765]=0 [128992]='V>=8?1:0' [129004]=0 [129008]='V>=12?1:0' [129292]='V>=10?1:0' [129293]='V>=8?1:0' + [129296]='V>=2?1:0' [129305]='V>=4?1:0' [129311]='V>=6?1:0' [129320]='V>=6?1:0' [129328]='V>=4?1:0' [129331]='V>=4?1:0' + [129339]=0 [129343]='V>=8?1:0' [129350]=0 [129356]='V>=6?1:0' [129357]='V>=7?1:0' [129360]='V>=4?1:0' [129375]='V>=6?1:0' + [129388]='V>=7?1:0' [129393]='V>=8?1:0' [129394]='V>=10?1:0' [129399]='V>=10?1:0' [129401]='V>=12?1:0' [129402]='V>=7?1:0' + [129403]='V>=8?1:0' [129404]='V>=7?1:0' [129408]='V>=2?1:0' [129413]='V>=4?1:0' [129426]='V>=6?1:0' [129432]='V>=7?1:0' + [129443]='V>=10?1:0' [129445]='V>=8?1:0' [129451]='V>=10?1:0' [129454]='V>=8?1:0' [129456]='V>=7?4:0' [129460]='V>=7?1:0' + [129466]='V>=8?1:0' [129472]='V>=2?1:0' [129473]='V>=7?1:0' [129475]='V>=8?1:0' [129483]='V>=10?1:0' [129484]='V>=12?1:0' + [129488]='V>=6?1:0' [129511]='V>=7?1:0' [129536]=0 [129648]='V>=8?1:0' [129652]='V>=10?1:0' [129653]=0 [129656]='V>=8?1:0' + [129659]='V>=12?1:0' [129661]=0 [129664]='V>=8?1:0' [129667]='V>=10?1:0' [129671]=0 [129680]='V>=8?1:0' [129686]='V>=10?1:0' + [129705]='V>=12?1:0' [129709]=0 [129712]='V>=10?1:0' [129719]='V>=12?1:0' [129723]=0 [129728]='V>=10?1:0' [129731]='V>=12?1:0' + [129734]=0 [129744]='V>=10?1:0' [129751]='V>=12?1:0' [129754]=0 [129760]='V>=12?1:0' [129768]=0 [129776]='V>=12?1:0' [129783]=0) +_ble_unicode_EmojiStatus_ranges=(8596 8602 8617 8619 8986 8988 9193 9197 9201 9204 9208 9211 9642 9644 9723 9725 9728 9730 9733 + 9748 9750 9762 9764 9784 9787 9800 9812 9829 9833 9878 9885 9898 9900 9904 9906 9917 9919 9924 9926 9968 9970 9975 9979 9992 + 9994 10000 10035 10037 10067 10072 10133 10136 10548 10550 11013 11016 11035 11037 127344 127346 127358 127360 127377 127387 + 127462 127491 127538 127547 127568 127570 127744 127757 127763 127766 127775 127778 127780 127789 127792 127794 127796 127870 + 127872 127892 127894 127900 127902 127904 127947 127951 127956 127968 127985 127992 127995 128000 128012 128015 128017 128108 + 128110 128182 128184 128236 128240 128255 128266 128300 128302 128318 128329 128331 128336 128348 128360 128367 128369 128371 + 128379 128394 128398 128405 128407 128433 128435 128450 128453 128465 128468 128476 128479 128507 128519 128521 128550 128552 + 128558 128560 128577 128581 128592 128641 128643 128650 128657 128667 128676 128686 128697 128705 128710 128717 128721 128723 + 128726 128728 128733 128736 128742 128747 128749 128756 128759 128763 128765 128992 129004 129293 129296 129305 129320 129331 + 129357 129360 129375 129388 129399 129404 129408 129413 129426 129432 129443 129445 129451 129454 129456 129460 129466 129473 + 129475 129488 129511 129536 129648 129653 129656 129659 129661 129664 129667 129671 129680 129686 129705 129709 129712 129719 + 129723 129728 129731 129734 129744 129751 129754 129760 129768 129776 129783) +function ble/unicode/EmojiStatus/version2index { + case $1 in + (0.6) ret=0 ;; + (0.7) ret=1 ;; + (1.0) ret=2 ;; + (2.0) ret=3 ;; + (3.0) ret=4 ;; + (4.0) ret=5 ;; + (5.0) ret=6 ;; + (11.0) ret=7 ;; + (12.0) ret=8 ;; + (12.1) ret=9 ;; + (13.0) ret=10 ;; + (13.1) ret=11 ;; + (14.0) ret=12 ;; + (*) return 1 ;; + esac +} +_ble_unicode_EmojiStatus_version=12 bleopt/declare -n emoji_version 14.0 -_ble_unicode_EmojiStatus_ranges=("${_ble_unicode_EmojiStatus_1400_ranges[@]}") -ble/idict#copy _ble_unicode_EmojiStatus _ble_unicode_EmojiStatus_1400 diff --git a/src/canvas.sh b/src/canvas.sh index 7f83f9be..97b4ba1a 100644 --- a/src/canvas.sh +++ b/src/canvas.sh @@ -177,10 +177,12 @@ function ble/unicode/c2w { } +## @const _ble_unicode_EmojiStatus_* +## ## @var _ble_unicode_EmojiStatus_xmaybe +## @arr _ble_unicode_EmojiStatus ## @arr _ble_unicode_EmojiStatus_ranges -## @arr _ble_unicode_EmojiStatus_???? -## @arr _ble_unicode_EmojiStatus_????_ranges +## @var _ble_unicode_EmojiStatus_version ## @bleopt emoji_version ## ## ファイル src/canvas.emoji.sh は以下のコマンドで生成する。 @@ -192,26 +194,27 @@ bleopt/declare -v emoji_width 2 bleopt/declare -v emoji_opts ri function bleopt/check:emoji_version { - local rex='^0*([0-9]+)\.0*([0-9]+)$' - if ! [[ $value =~ $rex ]]; then - ble/util/print "bleopt: Invalid value for emoji_version: '$value'." >&2 - return 1 - fi - - local src - ble/util/sprintf src _ble_unicode_EmojiStatus_%04d $((BASH_REMATCH[1]*100+BASH_REMATCH[2])) - if ! ble/is-array "$src"; then - ble/util/print "bleopt: Unsupported emoji_version '$value'." >&2 - return 1 + local ret + if ! ble/unicode/EmojiStatus/version2index "$value"; then + local rex='^0*([0-9]+)\.0*([0-9]+)$' + if ! [[ $value =~ $rex ]]; then + ble/util/print "bleopt: Invalid format for emoji_version: '$value'." >&2 + return 1 + else + ble/util/print "bleopt: Unsupported emoji_version: '$value'." >&2 + return 1 + fi fi + _ble_unicode_EmojiStatus_version=$ret ble/util/c2w/clear-cache - ble/idict#copy _ble_unicode_EmojiStatus "$src" - builtin eval -- "_ble_unicode_EmojiStatus_ranges=(\"\${${src}_ranges[@]}\")" return 0 } function bleopt/check:emoji_width { ble/util/c2w/clear-cache; } +# 2021-06-18 unqualified は絵文字に含めない。多くの場合は既定では通常文字で +# EPVS によって絵文字として表示する様である。component は肌の色(Extend) と髪 +# (Pictographic) の2種類がある。取り敢えず幅2で計算する。 _ble_unicode_EmojiStatus_xIsEmoji='ret&&ret!=_ble_unicode_EmojiStatus_Unqualified' function bleopt/check:emoji_opts { _ble_unicode_EmojiStatus_xIsEmoji='ret' @@ -225,19 +228,20 @@ function bleopt/check:emoji_opts { } function ble/unicode/EmojiStatus { - local code=$1 + local code=$1 V=$_ble_unicode_EmojiStatus_version ret=${_ble_unicode_EmojiStatus[code]} - [[ $ret ]] && return 0 - ret=$_ble_unicode_EmojiStatus_None - if ((_ble_unicode_EmojiStatus_xmaybe)); then - local l=0 u=${#_ble_unicode_EmojiStatus_ranges[@]} m - while ((l+1