]> gitweb.factorcode.org Git - factor.git/commitdiff
UNICODE TEXT SEGMENTATION 12.0.0
authorKUSUMOTO Norio <norio@mac-mini.local>
Fri, 5 Jul 2019 14:32:49 +0000 (23:32 +0900)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 30 Jul 2019 07:12:41 +0000 (02:12 -0500)
basis/unicode/UCD/auxiliary/emoji-data.txt [new file with mode: 0644]
basis/unicode/breaks/breaks.factor
basis/unicode/unicode.factor

diff --git a/basis/unicode/UCD/auxiliary/emoji-data.txt b/basis/unicode/UCD/auxiliary/emoji-data.txt
new file mode 100644 (file)
index 0000000..2fb5c3f
--- /dev/null
@@ -0,0 +1,769 @@
+# emoji-data.txt
+# Date: 2019-01-15, 12:10:05 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji Data for UTS #51
+# Version: 12.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format: 
+# <codepoint(s)> ; <property> # <comments> 
+# Note: there is no guarantee as to the structure of whitespace or comments
+#
+# Characters and sequences are listed in code point order. Users should be shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+
+# ================================================
+
+# All omitted code points have Emoji=No 
+# @missing: 0000..10FFFF  ; Emoji ; No
+
+0023          ; Emoji                #  1.1  [1] (#️)       number sign
+002A          ; Emoji                #  1.1  [1] (*️)       asterisk
+0030..0039    ; Emoji                #  1.1 [10] (0️..9️)    digit zero..digit nine
+00A9          ; Emoji                #  1.1  [1] (©️)       copyright
+00AE          ; Emoji                #  1.1  [1] (®️)       registered
+203C          ; Emoji                #  1.1  [1] (‼️)       double exclamation mark
+2049          ; Emoji                #  3.0  [1] (⁉️)       exclamation question mark
+2122          ; Emoji                #  1.1  [1] (™️)       trade mark
+2139          ; Emoji                #  3.0  [1] (ℹ️)       information
+2194..2199    ; Emoji                #  1.1  [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Emoji                #  1.1  [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Emoji                #  1.1  [2] (⌚..⌛)    watch..hourglass done
+2328          ; Emoji                #  1.1  [1] (⌨️)       keyboard
+23CF          ; Emoji                #  4.0  [1] (⏏️)       eject button
+23E9..23F3    ; Emoji                #  6.0 [11] (⏩..⏳)    fast-forward button..hourglass not done
+23F8..23FA    ; Emoji                #  7.0  [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Emoji                #  1.1  [1] (Ⓜ️)       circled M
+25AA..25AB    ; Emoji                #  1.1  [2] (▪️..▫️)    black small square..white small square
+25B6          ; Emoji                #  1.1  [1] (▶️)       play button
+25C0          ; Emoji                #  1.1  [1] (◀️)       reverse button
+25FB..25FE    ; Emoji                #  3.2  [4] (◻️..◾)    white medium square..black medium-small square
+2600..2604    ; Emoji                #  1.1  [5] (☀️..☄️)    sun..comet
+260E          ; Emoji                #  1.1  [1] (☎️)       telephone
+2611          ; Emoji                #  1.1  [1] (☑️)       check box with check
+2614..2615    ; Emoji                #  4.0  [2] (☔..☕)    umbrella with rain drops..hot beverage
+2618          ; Emoji                #  4.1  [1] (☘️)       shamrock
+261D          ; Emoji                #  1.1  [1] (☝️)       index pointing up
+2620          ; Emoji                #  1.1  [1] (☠️)       skull and crossbones
+2622..2623    ; Emoji                #  1.1  [2] (☢️..☣️)    radioactive..biohazard
+2626          ; Emoji                #  1.1  [1] (☦️)       orthodox cross
+262A          ; Emoji                #  1.1  [1] (☪️)       star and crescent
+262E..262F    ; Emoji                #  1.1  [2] (☮️..☯️)    peace symbol..yin yang
+2638..263A    ; Emoji                #  1.1  [3] (☸️..☺️)    wheel of dharma..smiling face
+2640          ; Emoji                #  1.1  [1] (♀️)       female sign
+2642          ; Emoji                #  1.1  [1] (♂️)       male sign
+2648..2653    ; Emoji                #  1.1 [12] (♈..♓)    Aries..Pisces
+265F..2660    ; Emoji                #  1.1  [2] (♟️..♠️)    chess pawn..spade suit
+2663          ; Emoji                #  1.1  [1] (♣️)       club suit
+2665..2666    ; Emoji                #  1.1  [2] (♥️..♦️)    heart suit..diamond suit
+2668          ; Emoji                #  1.1  [1] (♨️)       hot springs
+267B          ; Emoji                #  3.2  [1] (♻️)       recycling symbol
+267E..267F    ; Emoji                #  4.1  [2] (♾️..♿)    infinity..wheelchair symbol
+2692..2697    ; Emoji                #  4.1  [6] (⚒️..⚗️)    hammer and pick..alembic
+2699          ; Emoji                #  4.1  [1] (⚙️)       gear
+269B..269C    ; Emoji                #  4.1  [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
+26A0..26A1    ; Emoji                #  4.0  [2] (⚠️..⚡)    warning..high voltage
+26AA..26AB    ; Emoji                #  4.1  [2] (⚪..⚫)    white circle..black circle
+26B0..26B1    ; Emoji                #  4.1  [2] (⚰️..⚱️)    coffin..funeral urn
+26BD..26BE    ; Emoji                #  5.2  [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji                #  5.2  [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26C8          ; Emoji                #  5.2  [1] (⛈️)       cloud with lightning and rain
+26CE          ; Emoji                #  6.0  [1] (⛎)       Ophiuchus
+26CF          ; Emoji                #  5.2  [1] (⛏️)       pick
+26D1          ; Emoji                #  5.2  [1] (⛑️)       rescue worker’s helmet
+26D3..26D4    ; Emoji                #  5.2  [2] (⛓️..⛔)    chains..no entry
+26E9..26EA    ; Emoji                #  5.2  [2] (⛩️..⛪)    shinto shrine..church
+26F0..26F5    ; Emoji                #  5.2  [6] (⛰️..⛵)    mountain..sailboat
+26F7..26FA    ; Emoji                #  5.2  [4] (⛷️..⛺)    skier..tent
+26FD          ; Emoji                #  5.2  [1] (⛽)       fuel pump
+2702          ; Emoji                #  1.1  [1] (✂️)       scissors
+2705          ; Emoji                #  6.0  [1] (✅)       check mark button
+2708..2709    ; Emoji                #  1.1  [2] (✈️..✉️)    airplane..envelope
+270A..270B    ; Emoji                #  6.0  [2] (✊..✋)    raised fist..raised hand
+270C..270D    ; Emoji                #  1.1  [2] (✌️..✍️)    victory hand..writing hand
+270F          ; Emoji                #  1.1  [1] (✏️)       pencil
+2712          ; Emoji                #  1.1  [1] (✒️)       black nib
+2714          ; Emoji                #  1.1  [1] (✔️)       check mark
+2716          ; Emoji                #  1.1  [1] (✖️)       multiplication sign
+271D          ; Emoji                #  1.1  [1] (✝️)       latin cross
+2721          ; Emoji                #  1.1  [1] (✡️)       star of David
+2728          ; Emoji                #  6.0  [1] (✨)       sparkles
+2733..2734    ; Emoji                #  1.1  [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Emoji                #  1.1  [1] (❄️)       snowflake
+2747          ; Emoji                #  1.1  [1] (❇️)       sparkle
+274C          ; Emoji                #  6.0  [1] (❌)       cross mark
+274E          ; Emoji                #  6.0  [1] (❎)       cross mark button
+2753..2755    ; Emoji                #  6.0  [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji                #  5.2  [1] (❗)       exclamation mark
+2763..2764    ; Emoji                #  1.1  [2] (❣️..❤️)    heart exclamation..red heart
+2795..2797    ; Emoji                #  6.0  [3] (➕..➗)    plus sign..division sign
+27A1          ; Emoji                #  1.1  [1] (➡️)       right arrow
+27B0          ; Emoji                #  6.0  [1] (➰)       curly loop
+27BF          ; Emoji                #  6.0  [1] (➿)       double curly loop
+2934..2935    ; Emoji                #  3.2  [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Emoji                #  4.0  [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Emoji                #  5.1  [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji                #  5.1  [1] (⭐)       star
+2B55          ; Emoji                #  5.2  [1] (⭕)       hollow red circle
+3030          ; Emoji                #  1.1  [1] (〰️)       wavy dash
+303D          ; Emoji                #  3.2  [1] (〽️)       part alternation mark
+3297          ; Emoji                #  1.1  [1] (㊗️)       Japanese “congratulations” button
+3299          ; Emoji                #  1.1  [1] (㊙️)       Japanese “secret” button
+1F004         ; Emoji                #  5.1  [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji                #  6.0  [1] (🃏)       joker
+1F170..1F171  ; Emoji                #  6.0  [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E         ; Emoji                #  6.0  [1] (🅾️)       O button (blood type)
+1F17F         ; Emoji                #  5.2  [1] (🅿️)       P button
+1F18E         ; Emoji                #  6.0  [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji                #  6.0 [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji                #  6.0 [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201..1F202  ; Emoji                #  6.0  [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F21A         ; Emoji                #  5.2  [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji                #  5.2  [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Emoji                #  6.0  [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F250..1F251  ; Emoji                #  6.0  [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F320  ; Emoji                #  6.0 [33] (🌀..🌠)    cyclone..shooting star
+1F321         ; Emoji                #  7.0  [1] (🌡️)       thermometer
+1F324..1F32C  ; Emoji                #  7.0  [9] (🌤️..🌬️)    sun behind small cloud..wind face
+1F32D..1F32F  ; Emoji                #  8.0  [3] (🌭..🌯)    hot dog..burrito
+1F330..1F335  ; Emoji                #  6.0  [6] (🌰..🌵)    chestnut..cactus
+1F336         ; Emoji                #  7.0  [1] (🌶️)       hot pepper
+1F337..1F37C  ; Emoji                #  6.0 [70] (🌷..🍼)    tulip..baby bottle
+1F37D         ; Emoji                #  7.0  [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Emoji                #  8.0  [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji                #  6.0 [20] (🎀..🎓)    ribbon..graduation cap
+1F396..1F397  ; Emoji                #  7.0  [2] (🎖️..🎗️)    military medal..reminder ribbon
+1F399..1F39B  ; Emoji                #  7.0  [3] (🎙️..🎛️)    studio microphone..control knobs
+1F39E..1F39F  ; Emoji                #  7.0  [2] (🎞️..🎟️)    film frames..admission tickets
+1F3A0..1F3C4  ; Emoji                #  6.0 [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji                #  7.0  [1] (🏅)       sports medal
+1F3C6..1F3CA  ; Emoji                #  6.0  [5] (🏆..🏊)    trophy..person swimming
+1F3CB..1F3CE  ; Emoji                #  7.0  [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Emoji                #  8.0  [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Emoji                #  7.0 [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3F0  ; Emoji                #  6.0 [17] (🏠..🏰)    house..castle
+1F3F3..1F3F5  ; Emoji                #  7.0  [3] (🏳️..🏵️)    white flag..rosette
+1F3F7         ; Emoji                #  7.0  [1] (🏷️)       label
+1F3F8..1F3FF  ; Emoji                #  8.0  [8] (🏸..🏿)    badminton..dark skin tone
+1F400..1F43E  ; Emoji                #  6.0 [63] (🐀..🐾)    rat..paw prints
+1F43F         ; Emoji                #  7.0  [1] (🐿️)       chipmunk
+1F440         ; Emoji                #  6.0  [1] (👀)       eyes
+1F441         ; Emoji                #  7.0  [1] (👁️)       eye
+1F442..1F4F7  ; Emoji                #  6.0[182] (👂..📷)    ear..camera
+1F4F8         ; Emoji                #  7.0  [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji                #  6.0  [4] (📹..📼)    video camera..videocassette
+1F4FD         ; Emoji                #  7.0  [1] (📽️)       film projector
+1F4FF         ; Emoji                #  8.0  [1] (📿)       prayer beads
+1F500..1F53D  ; Emoji                #  6.0 [62] (🔀..🔽)    shuffle tracks button..downwards button
+1F549..1F54A  ; Emoji                #  7.0  [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Emoji                #  8.0  [4] (🕋..🕎)    kaaba..menorah
+1F550..1F567  ; Emoji                #  6.0 [24] (🕐..🕧)    one o’clock..twelve-thirty
+1F56F..1F570  ; Emoji                #  7.0  [2] (🕯️..🕰️)    candle..mantelpiece clock
+1F573..1F579  ; Emoji                #  7.0  [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Emoji                #  9.0  [1] (🕺)       man dancing
+1F587         ; Emoji                #  7.0  [1] (🖇️)       linked paperclips
+1F58A..1F58D  ; Emoji                #  7.0  [4] (🖊️..🖍️)    pen..crayon
+1F590         ; Emoji                #  7.0  [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji                #  7.0  [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji                #  9.0  [1] (🖤)       black heart
+1F5A5         ; Emoji                #  7.0  [1] (🖥️)       desktop computer
+1F5A8         ; Emoji                #  7.0  [1] (🖨️)       printer
+1F5B1..1F5B2  ; Emoji                #  7.0  [2] (🖱️..🖲️)    computer mouse..trackball
+1F5BC         ; Emoji                #  7.0  [1] (🖼️)       framed picture
+1F5C2..1F5C4  ; Emoji                #  7.0  [3] (🗂️..🗄️)    card index dividers..file cabinet
+1F5D1..1F5D3  ; Emoji                #  7.0  [3] (🗑️..🗓️)    wastebasket..spiral calendar
+1F5DC..1F5DE  ; Emoji                #  7.0  [3] (🗜️..🗞️)    clamp..rolled-up newspaper
+1F5E1         ; Emoji                #  7.0  [1] (🗡️)       dagger
+1F5E3         ; Emoji                #  7.0  [1] (🗣️)       speaking head
+1F5E8         ; Emoji                #  7.0  [1] (🗨️)       left speech bubble
+1F5EF         ; Emoji                #  7.0  [1] (🗯️)       right anger bubble
+1F5F3         ; Emoji                #  7.0  [1] (🗳️)       ballot box with ballot
+1F5FA         ; Emoji                #  7.0  [1] (🗺️)       world map
+1F5FB..1F5FF  ; Emoji                #  6.0  [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji                #  6.1  [1] (😀)       grinning face
+1F601..1F610  ; Emoji                #  6.0 [16] (😁..😐)    beaming face with smiling eyes..neutral face
+1F611         ; Emoji                #  6.1  [1] (😑)       expressionless face
+1F612..1F614  ; Emoji                #  6.0  [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji                #  6.1  [1] (😕)       confused face
+1F616         ; Emoji                #  6.0  [1] (😖)       confounded face
+1F617         ; Emoji                #  6.1  [1] (😗)       kissing face
+1F618         ; Emoji                #  6.0  [1] (😘)       face blowing a kiss
+1F619         ; Emoji                #  6.1  [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji                #  6.0  [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji                #  6.1  [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji                #  6.0  [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji                #  6.1  [1] (😟)       worried face
+1F620..1F625  ; Emoji                #  6.0  [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji                #  6.1  [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji                #  6.0  [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji                #  6.1  [1] (😬)       grimacing face
+1F62D         ; Emoji                #  6.0  [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji                #  6.1  [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji                #  6.0  [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji                #  6.1  [1] (😴)       sleeping face
+1F635..1F640  ; Emoji                #  6.0 [12] (😵..🙀)    dizzy face..weary cat
+1F641..1F642  ; Emoji                #  7.0  [2] (🙁..🙂)    slightly frowning face..slightly smiling face
+1F643..1F644  ; Emoji                #  8.0  [2] (🙃..🙄)    upside-down face..face with rolling eyes
+1F645..1F64F  ; Emoji                #  6.0 [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680..1F6C5  ; Emoji                #  6.0 [70] (🚀..🛅)    rocket..left luggage
+1F6CB..1F6CF  ; Emoji                #  7.0  [5] (🛋️..🛏️)    couch and lamp..bed
+1F6D0         ; Emoji                #  8.0  [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji                #  9.0  [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji                # 12.0  [1] (🛕)       hindu temple
+1F6E0..1F6E5  ; Emoji                #  7.0  [6] (🛠️..🛥️)    hammer and wrench..motor boat
+1F6E9         ; Emoji                #  7.0  [1] (🛩️)       small airplane
+1F6EB..1F6EC  ; Emoji                #  7.0  [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F0         ; Emoji                #  7.0  [1] (🛰️)       satellite
+1F6F3         ; Emoji                #  7.0  [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Emoji                #  9.0  [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji                # 10.0  [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji                # 11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji                # 12.0  [1] (🛺)       auto rickshaw
+1F7E0..1F7EB  ; Emoji                # 12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90D..1F90F  ; Emoji                # 12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji                #  8.0  [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji                #  9.0  [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji                # 10.0  [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji                #  9.0  [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji                # 10.0  [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji                #  9.0  [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji                # 10.0  [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji                #  9.0  [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji                #  9.0  [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji                # 12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji                #  9.0  [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji                #  9.0  [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji                # 10.0  [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji                # 11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji                #  9.0 [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji                # 10.0 [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji                # 11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji                # 12.0  [1] (🥱)       yawning face
+1F973..1F976  ; Emoji                # 11.0  [4] (🥳..🥶)    partying face..cold face
+1F97A         ; Emoji                # 11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji                # 12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji                # 11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji                #  8.0  [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji                #  9.0 [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji                # 10.0  [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji                # 11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A5..1F9AA  ; Emoji                # 12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AE..1F9AF  ; Emoji                # 12.0  [2] (🦮..🦯)    guide dog..probing cane
+1F9B0..1F9B9  ; Emoji                # 11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji                # 12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji                #  8.0  [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji                # 11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji                # 12.0  [8] (🧃..🧊)    beverage box..ice cube
+1F9CD..1F9CF  ; Emoji                # 12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji                # 10.0 [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji                # 11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji                # 12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA78..1FA7A  ; Emoji                # 12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji                # 12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA90..1FA95  ; Emoji                # 12.0  [6] (🪐..🪕)    ringed planet..banjo
+
+# Total elements: 1311
+
+# ================================================
+
+# All omitted code points have Emoji_Presentation=No 
+# @missing: 0000..10FFFF  ; Emoji_Presentation ; No
+
+231A..231B    ; Emoji_Presentation   #  1.1  [2] (⌚..⌛)    watch..hourglass done
+23E9..23EC    ; Emoji_Presentation   #  6.0  [4] (⏩..⏬)    fast-forward button..fast down button
+23F0          ; Emoji_Presentation   #  6.0  [1] (⏰)       alarm clock
+23F3          ; Emoji_Presentation   #  6.0  [1] (⏳)       hourglass not done
+25FD..25FE    ; Emoji_Presentation   #  3.2  [2] (◽..◾)    white medium-small square..black medium-small square
+2614..2615    ; Emoji_Presentation   #  4.0  [2] (☔..☕)    umbrella with rain drops..hot beverage
+2648..2653    ; Emoji_Presentation   #  1.1 [12] (♈..♓)    Aries..Pisces
+267F          ; Emoji_Presentation   #  4.1  [1] (♿)       wheelchair symbol
+2693          ; Emoji_Presentation   #  4.1  [1] (⚓)       anchor
+26A1          ; Emoji_Presentation   #  4.0  [1] (⚡)       high voltage
+26AA..26AB    ; Emoji_Presentation   #  4.1  [2] (⚪..⚫)    white circle..black circle
+26BD..26BE    ; Emoji_Presentation   #  5.2  [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji_Presentation   #  5.2  [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26CE          ; Emoji_Presentation   #  6.0  [1] (⛎)       Ophiuchus
+26D4          ; Emoji_Presentation   #  5.2  [1] (⛔)       no entry
+26EA          ; Emoji_Presentation   #  5.2  [1] (⛪)       church
+26F2..26F3    ; Emoji_Presentation   #  5.2  [2] (⛲..⛳)    fountain..flag in hole
+26F5          ; Emoji_Presentation   #  5.2  [1] (⛵)       sailboat
+26FA          ; Emoji_Presentation   #  5.2  [1] (⛺)       tent
+26FD          ; Emoji_Presentation   #  5.2  [1] (⛽)       fuel pump
+2705          ; Emoji_Presentation   #  6.0  [1] (✅)       check mark button
+270A..270B    ; Emoji_Presentation   #  6.0  [2] (✊..✋)    raised fist..raised hand
+2728          ; Emoji_Presentation   #  6.0  [1] (✨)       sparkles
+274C          ; Emoji_Presentation   #  6.0  [1] (❌)       cross mark
+274E          ; Emoji_Presentation   #  6.0  [1] (❎)       cross mark button
+2753..2755    ; Emoji_Presentation   #  6.0  [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji_Presentation   #  5.2  [1] (❗)       exclamation mark
+2795..2797    ; Emoji_Presentation   #  6.0  [3] (➕..➗)    plus sign..division sign
+27B0          ; Emoji_Presentation   #  6.0  [1] (➰)       curly loop
+27BF          ; Emoji_Presentation   #  6.0  [1] (➿)       double curly loop
+2B1B..2B1C    ; Emoji_Presentation   #  5.1  [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji_Presentation   #  5.1  [1] (⭐)       star
+2B55          ; Emoji_Presentation   #  5.2  [1] (⭕)       hollow red circle
+1F004         ; Emoji_Presentation   #  5.1  [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji_Presentation   #  6.0  [1] (🃏)       joker
+1F18E         ; Emoji_Presentation   #  6.0  [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji_Presentation   #  6.0 [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji_Presentation   #  6.0 [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201         ; Emoji_Presentation   #  6.0  [1] (🈁)       Japanese “here” button
+1F21A         ; Emoji_Presentation   #  5.2  [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji_Presentation   #  5.2  [1] (🈯)       Japanese “reserved” button
+1F232..1F236  ; Emoji_Presentation   #  6.0  [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
+1F238..1F23A  ; Emoji_Presentation   #  6.0  [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
+1F250..1F251  ; Emoji_Presentation   #  6.0  [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F320  ; Emoji_Presentation   #  6.0 [33] (🌀..🌠)    cyclone..shooting star
+1F32D..1F32F  ; Emoji_Presentation   #  8.0  [3] (🌭..🌯)    hot dog..burrito
+1F330..1F335  ; Emoji_Presentation   #  6.0  [6] (🌰..🌵)    chestnut..cactus
+1F337..1F37C  ; Emoji_Presentation   #  6.0 [70] (🌷..🍼)    tulip..baby bottle
+1F37E..1F37F  ; Emoji_Presentation   #  8.0  [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji_Presentation   #  6.0 [20] (🎀..🎓)    ribbon..graduation cap
+1F3A0..1F3C4  ; Emoji_Presentation   #  6.0 [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji_Presentation   #  7.0  [1] (🏅)       sports medal
+1F3C6..1F3CA  ; Emoji_Presentation   #  6.0  [5] (🏆..🏊)    trophy..person swimming
+1F3CF..1F3D3  ; Emoji_Presentation   #  8.0  [5] (🏏..🏓)    cricket game..ping pong
+1F3E0..1F3F0  ; Emoji_Presentation   #  6.0 [17] (🏠..🏰)    house..castle
+1F3F4         ; Emoji_Presentation   #  7.0  [1] (🏴)       black flag
+1F3F8..1F3FF  ; Emoji_Presentation   #  8.0  [8] (🏸..🏿)    badminton..dark skin tone
+1F400..1F43E  ; Emoji_Presentation   #  6.0 [63] (🐀..🐾)    rat..paw prints
+1F440         ; Emoji_Presentation   #  6.0  [1] (👀)       eyes
+1F442..1F4F7  ; Emoji_Presentation   #  6.0[182] (👂..📷)    ear..camera
+1F4F8         ; Emoji_Presentation   #  7.0  [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji_Presentation   #  6.0  [4] (📹..📼)    video camera..videocassette
+1F4FF         ; Emoji_Presentation   #  8.0  [1] (📿)       prayer beads
+1F500..1F53D  ; Emoji_Presentation   #  6.0 [62] (🔀..🔽)    shuffle tracks button..downwards button
+1F54B..1F54E  ; Emoji_Presentation   #  8.0  [4] (🕋..🕎)    kaaba..menorah
+1F550..1F567  ; Emoji_Presentation   #  6.0 [24] (🕐..🕧)    one o’clock..twelve-thirty
+1F57A         ; Emoji_Presentation   #  9.0  [1] (🕺)       man dancing
+1F595..1F596  ; Emoji_Presentation   #  7.0  [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji_Presentation   #  9.0  [1] (🖤)       black heart
+1F5FB..1F5FF  ; Emoji_Presentation   #  6.0  [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji_Presentation   #  6.1  [1] (😀)       grinning face
+1F601..1F610  ; Emoji_Presentation   #  6.0 [16] (😁..😐)    beaming face with smiling eyes..neutral face
+1F611         ; Emoji_Presentation   #  6.1  [1] (😑)       expressionless face
+1F612..1F614  ; Emoji_Presentation   #  6.0  [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji_Presentation   #  6.1  [1] (😕)       confused face
+1F616         ; Emoji_Presentation   #  6.0  [1] (😖)       confounded face
+1F617         ; Emoji_Presentation   #  6.1  [1] (😗)       kissing face
+1F618         ; Emoji_Presentation   #  6.0  [1] (😘)       face blowing a kiss
+1F619         ; Emoji_Presentation   #  6.1  [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji_Presentation   #  6.0  [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji_Presentation   #  6.1  [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji_Presentation   #  6.0  [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji_Presentation   #  6.1  [1] (😟)       worried face
+1F620..1F625  ; Emoji_Presentation   #  6.0  [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji_Presentation   #  6.1  [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji_Presentation   #  6.0  [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji_Presentation   #  6.1  [1] (😬)       grimacing face
+1F62D         ; Emoji_Presentation   #  6.0  [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji_Presentation   #  6.1  [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji_Presentation   #  6.0  [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji_Presentation   #  6.1  [1] (😴)       sleeping face
+1F635..1F640  ; Emoji_Presentation   #  6.0 [12] (😵..🙀)    dizzy face..weary cat
+1F641..1F642  ; Emoji_Presentation   #  7.0  [2] (🙁..🙂)    slightly frowning face..slightly smiling face
+1F643..1F644  ; Emoji_Presentation   #  8.0  [2] (🙃..🙄)    upside-down face..face with rolling eyes
+1F645..1F64F  ; Emoji_Presentation   #  6.0 [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680..1F6C5  ; Emoji_Presentation   #  6.0 [70] (🚀..🛅)    rocket..left luggage
+1F6CC         ; Emoji_Presentation   #  7.0  [1] (🛌)       person in bed
+1F6D0         ; Emoji_Presentation   #  8.0  [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji_Presentation   #  9.0  [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji_Presentation   # 12.0  [1] (🛕)       hindu temple
+1F6EB..1F6EC  ; Emoji_Presentation   #  7.0  [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F4..1F6F6  ; Emoji_Presentation   #  9.0  [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji_Presentation   # 10.0  [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji_Presentation   # 11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji_Presentation   # 12.0  [1] (🛺)       auto rickshaw
+1F7E0..1F7EB  ; Emoji_Presentation   # 12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90D..1F90F  ; Emoji_Presentation   # 12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji_Presentation   #  8.0  [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji_Presentation   #  9.0  [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Presentation   # 10.0  [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji_Presentation   #  9.0  [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji_Presentation   # 10.0  [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji_Presentation   #  9.0  [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Presentation   # 10.0  [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji_Presentation   #  9.0  [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji_Presentation   #  9.0  [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji_Presentation   # 12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji_Presentation   #  9.0  [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji_Presentation   #  9.0  [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji_Presentation   # 10.0  [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji_Presentation   # 11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji_Presentation   #  9.0 [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji_Presentation   # 10.0 [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji_Presentation   # 11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji_Presentation   # 12.0  [1] (🥱)       yawning face
+1F973..1F976  ; Emoji_Presentation   # 11.0  [4] (🥳..🥶)    partying face..cold face
+1F97A         ; Emoji_Presentation   # 11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji_Presentation   # 12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji_Presentation   # 11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji_Presentation   #  8.0  [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji_Presentation   #  9.0 [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji_Presentation   # 10.0  [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji_Presentation   # 11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A5..1F9AA  ; Emoji_Presentation   # 12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AE..1F9AF  ; Emoji_Presentation   # 12.0  [2] (🦮..🦯)    guide dog..probing cane
+1F9B0..1F9B9  ; Emoji_Presentation   # 11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji_Presentation   # 12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji_Presentation   #  8.0  [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji_Presentation   # 11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji_Presentation   # 12.0  [8] (🧃..🧊)    beverage box..ice cube
+1F9CD..1F9CF  ; Emoji_Presentation   # 12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji_Presentation   # 10.0 [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji_Presentation   # 11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji_Presentation   # 12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA78..1FA7A  ; Emoji_Presentation   # 12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji_Presentation   # 12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA90..1FA95  ; Emoji_Presentation   # 12.0  [6] (🪐..🪕)    ringed planet..banjo
+
+# Total elements: 1093
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier=No 
+# @missing: 0000..10FFFF  ; Emoji_Modifier ; No
+
+1F3FB..1F3FF  ; Emoji_Modifier       #  8.0  [5] (🏻..🏿)    light skin tone..dark skin tone
+
+# Total elements: 5
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier_Base=No 
+# @missing: 0000..10FFFF  ; Emoji_Modifier_Base ; No
+
+261D          ; Emoji_Modifier_Base  #  1.1  [1] (☝️)       index pointing up
+26F9          ; Emoji_Modifier_Base  #  5.2  [1] (⛹️)       person bouncing ball
+270A..270B    ; Emoji_Modifier_Base  #  6.0  [2] (✊..✋)    raised fist..raised hand
+270C..270D    ; Emoji_Modifier_Base  #  1.1  [2] (✌️..✍️)    victory hand..writing hand
+1F385         ; Emoji_Modifier_Base  #  6.0  [1] (🎅)       Santa Claus
+1F3C2..1F3C4  ; Emoji_Modifier_Base  #  6.0  [3] (🏂..🏄)    snowboarder..person surfing
+1F3C7         ; Emoji_Modifier_Base  #  6.0  [1] (🏇)       horse racing
+1F3CA         ; Emoji_Modifier_Base  #  6.0  [1] (🏊)       person swimming
+1F3CB..1F3CC  ; Emoji_Modifier_Base  #  7.0  [2] (🏋️..🏌️)    person lifting weights..person golfing
+1F442..1F443  ; Emoji_Modifier_Base  #  6.0  [2] (👂..👃)    ear..nose
+1F446..1F450  ; Emoji_Modifier_Base  #  6.0 [11] (👆..👐)    backhand index pointing up..open hands
+1F466..1F478  ; Emoji_Modifier_Base  #  6.0 [19] (👦..👸)    boy..princess
+1F47C         ; Emoji_Modifier_Base  #  6.0  [1] (👼)       baby angel
+1F481..1F483  ; Emoji_Modifier_Base  #  6.0  [3] (💁..💃)    person tipping hand..woman dancing
+1F485..1F487  ; Emoji_Modifier_Base  #  6.0  [3] (💅..💇)    nail polish..person getting haircut
+1F48F         ; Emoji_Modifier_Base  #  6.0  [1] (💏)       kiss
+1F491         ; Emoji_Modifier_Base  #  6.0  [1] (💑)       couple with heart
+1F4AA         ; Emoji_Modifier_Base  #  6.0  [1] (💪)       flexed biceps
+1F574..1F575  ; Emoji_Modifier_Base  #  7.0  [2] (🕴️..🕵️)    man in suit levitating..detective
+1F57A         ; Emoji_Modifier_Base  #  9.0  [1] (🕺)       man dancing
+1F590         ; Emoji_Modifier_Base  #  7.0  [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji_Modifier_Base  #  7.0  [2] (🖕..🖖)    middle finger..vulcan salute
+1F645..1F647  ; Emoji_Modifier_Base  #  6.0  [3] (🙅..🙇)    person gesturing NO..person bowing
+1F64B..1F64F  ; Emoji_Modifier_Base  #  6.0  [5] (🙋..🙏)    person raising hand..folded hands
+1F6A3         ; Emoji_Modifier_Base  #  6.0  [1] (🚣)       person rowing boat
+1F6B4..1F6B6  ; Emoji_Modifier_Base  #  6.0  [3] (🚴..🚶)    person biking..person walking
+1F6C0         ; Emoji_Modifier_Base  #  6.0  [1] (🛀)       person taking bath
+1F6CC         ; Emoji_Modifier_Base  #  7.0  [1] (🛌)       person in bed
+1F90F         ; Emoji_Modifier_Base  # 12.0  [1] (🤏)       pinching hand
+1F918         ; Emoji_Modifier_Base  #  8.0  [1] (🤘)       sign of the horns
+1F919..1F91E  ; Emoji_Modifier_Base  #  9.0  [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Modifier_Base  # 10.0  [1] (🤟)       love-you gesture
+1F926         ; Emoji_Modifier_Base  #  9.0  [1] (🤦)       person facepalming
+1F930         ; Emoji_Modifier_Base  #  9.0  [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Modifier_Base  # 10.0  [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F939  ; Emoji_Modifier_Base  #  9.0  [7] (🤳..🤹)    selfie..person juggling
+1F93C..1F93E  ; Emoji_Modifier_Base  #  9.0  [3] (🤼..🤾)    people wrestling..person playing handball
+1F9B5..1F9B6  ; Emoji_Modifier_Base  # 11.0  [2] (🦵..🦶)    leg..foot
+1F9B8..1F9B9  ; Emoji_Modifier_Base  # 11.0  [2] (🦸..🦹)    superhero..supervillain
+1F9BB         ; Emoji_Modifier_Base  # 12.0  [1] (🦻)       ear with hearing aid
+1F9CD..1F9CF  ; Emoji_Modifier_Base  # 12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D1..1F9DD  ; Emoji_Modifier_Base  # 10.0 [13] (🧑..🧝)    person..elf
+
+# Total elements: 120
+
+# ================================================
+
+# All omitted code points have Emoji_Component=No 
+# @missing: 0000..10FFFF  ; Emoji_Component ; No
+
+0023          ; Emoji_Component      #  1.1  [1] (#️)       number sign
+002A          ; Emoji_Component      #  1.1  [1] (*️)       asterisk
+0030..0039    ; Emoji_Component      #  1.1 [10] (0️..9️)    digit zero..digit nine
+200D          ; Emoji_Component      #  1.1  [1] (‍)        zero width joiner
+20E3          ; Emoji_Component      #  3.0  [1] (⃣)       combining enclosing keycap
+FE0F          ; Emoji_Component      #  3.2  [1] ()        VARIATION SELECTOR-16
+1F1E6..1F1FF  ; Emoji_Component      #  6.0 [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F3FB..1F3FF  ; Emoji_Component      #  8.0  [5] (🏻..🏿)    light skin tone..dark skin tone
+1F9B0..1F9B3  ; Emoji_Component      # 11.0  [4] (🦰..🦳)    red hair..white hair
+E0020..E007F  ; Emoji_Component      #  3.1 [96] (󠀠..󠁿)      tag space..cancel tag
+
+# Total elements: 146
+
+# ================================================
+
+# All omitted code points have Extended_Pictographic=No 
+# @missing: 0000..10FFFF  ; Extended_Pictographic ; No
+
+00A9          ; Extended_Pictographic#  1.1  [1] (©️)       copyright
+00AE          ; Extended_Pictographic#  1.1  [1] (®️)       registered
+203C          ; Extended_Pictographic#  1.1  [1] (‼️)       double exclamation mark
+2049          ; Extended_Pictographic#  3.0  [1] (⁉️)       exclamation question mark
+2122          ; Extended_Pictographic#  1.1  [1] (™️)       trade mark
+2139          ; Extended_Pictographic#  3.0  [1] (ℹ️)       information
+2194..2199    ; Extended_Pictographic#  1.1  [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Extended_Pictographic#  1.1  [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Extended_Pictographic#  1.1  [2] (⌚..⌛)    watch..hourglass done
+2328          ; Extended_Pictographic#  1.1  [1] (⌨️)       keyboard
+2388          ; Extended_Pictographic#  3.0  [1] (⎈)       HELM SYMBOL
+23CF          ; Extended_Pictographic#  4.0  [1] (⏏️)       eject button
+23E9..23F3    ; Extended_Pictographic#  6.0 [11] (⏩..⏳)    fast-forward button..hourglass not done
+23F8..23FA    ; Extended_Pictographic#  7.0  [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Extended_Pictographic#  1.1  [1] (Ⓜ️)       circled M
+25AA..25AB    ; Extended_Pictographic#  1.1  [2] (▪️..▫️)    black small square..white small square
+25B6          ; Extended_Pictographic#  1.1  [1] (▶️)       play button
+25C0          ; Extended_Pictographic#  1.1  [1] (◀️)       reverse button
+25FB..25FE    ; Extended_Pictographic#  3.2  [4] (◻️..◾)    white medium square..black medium-small square
+2600..2605    ; Extended_Pictographic#  1.1  [6] (☀️..★)    sun..BLACK STAR
+2607..2612    ; Extended_Pictographic#  1.1 [12] (☇..☒)    LIGHTNING..BALLOT BOX WITH X
+2614..2615    ; Extended_Pictographic#  4.0  [2] (☔..☕)    umbrella with rain drops..hot beverage
+2616..2617    ; Extended_Pictographic#  3.2  [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE
+2618          ; Extended_Pictographic#  4.1  [1] (☘️)       shamrock
+2619          ; Extended_Pictographic#  3.0  [1] (☙)       REVERSED ROTATED FLORAL HEART BULLET
+261A..266F    ; Extended_Pictographic#  1.1 [86] (☚..♯)    BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN
+2670..2671    ; Extended_Pictographic#  3.0  [2] (♰..♱)    WEST SYRIAC CROSS..EAST SYRIAC CROSS
+2672..267D    ; Extended_Pictographic#  3.2 [12] (♲..♽)    UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
+267E..267F    ; Extended_Pictographic#  4.1  [2] (♾️..♿)    infinity..wheelchair symbol
+2680..2685    ; Extended_Pictographic#  3.2  [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6
+2690..2691    ; Extended_Pictographic#  4.0  [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG
+2692..269C    ; Extended_Pictographic#  4.1 [11] (⚒️..⚜️)    hammer and pick..fleur-de-lis
+269D          ; Extended_Pictographic#  5.1  [1] (⚝)       OUTLINED WHITE STAR
+269E..269F    ; Extended_Pictographic#  5.2  [2] (⚞..⚟)    THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
+26A0..26A1    ; Extended_Pictographic#  4.0  [2] (⚠️..⚡)    warning..high voltage
+26A2..26B1    ; Extended_Pictographic#  4.1 [16] (⚢..⚱️)    DOUBLED FEMALE SIGN..funeral urn
+26B2          ; Extended_Pictographic#  5.0  [1] (⚲)       NEUTER
+26B3..26BC    ; Extended_Pictographic#  5.1 [10] (⚳..⚼)    CERES..SESQUIQUADRATE
+26BD..26BF    ; Extended_Pictographic#  5.2  [3] (⚽..⚿)    soccer ball..SQUARED KEY
+26C0..26C3    ; Extended_Pictographic#  5.1  [4] (⛀..⛃)    WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
+26C4..26CD    ; Extended_Pictographic#  5.2 [10] (⛄..⛍)    snowman without snow..DISABLED CAR
+26CE          ; Extended_Pictographic#  6.0  [1] (⛎)       Ophiuchus
+26CF..26E1    ; Extended_Pictographic#  5.2 [19] (⛏️..⛡)    pick..RESTRICTED LEFT ENTRY-2
+26E2          ; Extended_Pictographic#  6.0  [1] (⛢)       ASTRONOMICAL SYMBOL FOR URANUS
+26E3          ; Extended_Pictographic#  5.2  [1] (⛣)       HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4..26E7    ; Extended_Pictographic#  6.0  [4] (⛤..⛧)    PENTAGRAM..INVERTED PENTAGRAM
+26E8..26FF    ; Extended_Pictographic#  5.2 [24] (⛨..⛿)    BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700          ; Extended_Pictographic#  7.0  [1] (✀)       BLACK SAFETY SCISSORS
+2701..2704    ; Extended_Pictographic#  1.1  [4] (✁..✄)    UPPER BLADE SCISSORS..WHITE SCISSORS
+2705          ; Extended_Pictographic#  6.0  [1] (✅)       check mark button
+2708..2709    ; Extended_Pictographic#  1.1  [2] (✈️..✉️)    airplane..envelope
+270A..270B    ; Extended_Pictographic#  6.0  [2] (✊..✋)    raised fist..raised hand
+270C..2712    ; Extended_Pictographic#  1.1  [7] (✌️..✒️)    victory hand..black nib
+2714          ; Extended_Pictographic#  1.1  [1] (✔️)       check mark
+2716          ; Extended_Pictographic#  1.1  [1] (✖️)       multiplication sign
+271D          ; Extended_Pictographic#  1.1  [1] (✝️)       latin cross
+2721          ; Extended_Pictographic#  1.1  [1] (✡️)       star of David
+2728          ; Extended_Pictographic#  6.0  [1] (✨)       sparkles
+2733..2734    ; Extended_Pictographic#  1.1  [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Extended_Pictographic#  1.1  [1] (❄️)       snowflake
+2747          ; Extended_Pictographic#  1.1  [1] (❇️)       sparkle
+274C          ; Extended_Pictographic#  6.0  [1] (❌)       cross mark
+274E          ; Extended_Pictographic#  6.0  [1] (❎)       cross mark button
+2753..2755    ; Extended_Pictographic#  6.0  [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Extended_Pictographic#  5.2  [1] (❗)       exclamation mark
+2763..2767    ; Extended_Pictographic#  1.1  [5] (❣️..❧)    heart exclamation..ROTATED FLORAL HEART BULLET
+2795..2797    ; Extended_Pictographic#  6.0  [3] (➕..➗)    plus sign..division sign
+27A1          ; Extended_Pictographic#  1.1  [1] (➡️)       right arrow
+27B0          ; Extended_Pictographic#  6.0  [1] (➰)       curly loop
+27BF          ; Extended_Pictographic#  6.0  [1] (➿)       double curly loop
+2934..2935    ; Extended_Pictographic#  3.2  [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Extended_Pictographic#  4.0  [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Extended_Pictographic#  5.1  [2] (⬛..⬜)    black large square..white large square
+2B50          ; Extended_Pictographic#  5.1  [1] (⭐)       star
+2B55          ; Extended_Pictographic#  5.2  [1] (⭕)       hollow red circle
+3030          ; Extended_Pictographic#  1.1  [1] (〰️)       wavy dash
+303D          ; Extended_Pictographic#  3.2  [1] (〽️)       part alternation mark
+3297          ; Extended_Pictographic#  1.1  [1] (㊗️)       Japanese “congratulations” button
+3299          ; Extended_Pictographic#  1.1  [1] (㊙️)       Japanese “secret” button
+1F000..1F02B  ; Extended_Pictographic#  5.1 [44] (🀀..🀫)    MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F02C..1F02F  ; Extended_Pictographic#   NA  [4] (🀬..🀯)    <reserved-1F02C>..<reserved-1F02F>
+1F030..1F093  ; Extended_Pictographic#  5.1[100] (🀰..🂓)    DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F094..1F09F  ; Extended_Pictographic#   NA [12] (🂔..🂟)    <reserved-1F094>..<reserved-1F09F>
+1F0A0..1F0AE  ; Extended_Pictographic#  6.0 [15] (🂠..🂮)    PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0AF..1F0B0  ; Extended_Pictographic#   NA  [2] (🂯..🂰)    <reserved-1F0AF>..<reserved-1F0B0>
+1F0B1..1F0BE  ; Extended_Pictographic#  6.0 [14] (🂱..🂾)    PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS
+1F0BF         ; Extended_Pictographic#  7.0  [1] (🂿)       PLAYING CARD RED JOKER
+1F0C0         ; Extended_Pictographic#   NA  [1] (🃀)       <reserved-1F0C0>
+1F0C1..1F0CF  ; Extended_Pictographic#  6.0 [15] (🃁..🃏)    PLAYING CARD ACE OF DIAMONDS..joker
+1F0D0         ; Extended_Pictographic#   NA  [1] (🃐)       <reserved-1F0D0>
+1F0D1..1F0DF  ; Extended_Pictographic#  6.0 [15] (🃑..🃟)    PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
+1F0E0..1F0F5  ; Extended_Pictographic#  7.0 [22] (🃠..🃵)    PLAYING CARD FOOL..PLAYING CARD TRUMP-21
+1F0F6..1F0FF  ; Extended_Pictographic#   NA [10] (🃶..🃿)    <reserved-1F0F6>..<reserved-1F0FF>
+1F10D..1F10F  ; Extended_Pictographic#   NA  [3] (🄍..🄏)    <reserved-1F10D>..<reserved-1F10F>
+1F12F         ; Extended_Pictographic# 11.0  [1] (🄯)       COPYLEFT SYMBOL
+1F16C         ; Extended_Pictographic# 12.0  [1] (🅬)       RAISED MR SIGN
+1F16D..1F16F  ; Extended_Pictographic#   NA  [3] (🅭..🅯)    <reserved-1F16D>..<reserved-1F16F>
+1F170..1F171  ; Extended_Pictographic#  6.0  [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E         ; Extended_Pictographic#  6.0  [1] (🅾️)       O button (blood type)
+1F17F         ; Extended_Pictographic#  5.2  [1] (🅿️)       P button
+1F18E         ; Extended_Pictographic#  6.0  [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Extended_Pictographic#  6.0 [10] (🆑..🆚)    CL button..VS button
+1F1AD..1F1E5  ; Extended_Pictographic#   NA [57] (🆭..🇥)    <reserved-1F1AD>..<reserved-1F1E5>
+1F201..1F202  ; Extended_Pictographic#  6.0  [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F203..1F20F  ; Extended_Pictographic#   NA [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>
+1F21A         ; Extended_Pictographic#  5.2  [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Extended_Pictographic#  5.2  [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Extended_Pictographic#  6.0  [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F23C..1F23F  ; Extended_Pictographic#   NA  [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>
+1F249..1F24F  ; Extended_Pictographic#   NA  [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>
+1F250..1F251  ; Extended_Pictographic#  6.0  [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F252..1F25F  ; Extended_Pictographic#   NA [14] (🉒..🉟)    <reserved-1F252>..<reserved-1F25F>
+1F260..1F265  ; Extended_Pictographic# 10.0  [6] (🉠..🉥)    ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F266..1F2FF  ; Extended_Pictographic#   NA[154] (🉦..🋿)    <reserved-1F266>..<reserved-1F2FF>
+1F300..1F320  ; Extended_Pictographic#  6.0 [33] (🌀..🌠)    cyclone..shooting star
+1F321..1F32C  ; Extended_Pictographic#  7.0 [12] (🌡️..🌬️)    thermometer..wind face
+1F32D..1F32F  ; Extended_Pictographic#  8.0  [3] (🌭..🌯)    hot dog..burrito
+1F330..1F335  ; Extended_Pictographic#  6.0  [6] (🌰..🌵)    chestnut..cactus
+1F336         ; Extended_Pictographic#  7.0  [1] (🌶️)       hot pepper
+1F337..1F37C  ; Extended_Pictographic#  6.0 [70] (🌷..🍼)    tulip..baby bottle
+1F37D         ; Extended_Pictographic#  7.0  [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Extended_Pictographic#  8.0  [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Extended_Pictographic#  6.0 [20] (🎀..🎓)    ribbon..graduation cap
+1F394..1F39F  ; Extended_Pictographic#  7.0 [12] (🎔..🎟️)    HEART WITH TIP ON THE LEFT..admission tickets
+1F3A0..1F3C4  ; Extended_Pictographic#  6.0 [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Extended_Pictographic#  7.0  [1] (🏅)       sports medal
+1F3C6..1F3CA  ; Extended_Pictographic#  6.0  [5] (🏆..🏊)    trophy..person swimming
+1F3CB..1F3CE  ; Extended_Pictographic#  7.0  [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Extended_Pictographic#  8.0  [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Extended_Pictographic#  7.0 [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3F0  ; Extended_Pictographic#  6.0 [17] (🏠..🏰)    house..castle
+1F3F1..1F3F7  ; Extended_Pictographic#  7.0  [7] (🏱..🏷️)    WHITE PENNANT..label
+1F3F8..1F3FA  ; Extended_Pictographic#  8.0  [3] (🏸..🏺)    badminton..amphora
+1F400..1F43E  ; Extended_Pictographic#  6.0 [63] (🐀..🐾)    rat..paw prints
+1F43F         ; Extended_Pictographic#  7.0  [1] (🐿️)       chipmunk
+1F440         ; Extended_Pictographic#  6.0  [1] (👀)       eyes
+1F441         ; Extended_Pictographic#  7.0  [1] (👁️)       eye
+1F442..1F4F7  ; Extended_Pictographic#  6.0[182] (👂..📷)    ear..camera
+1F4F8         ; Extended_Pictographic#  7.0  [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Extended_Pictographic#  6.0  [4] (📹..📼)    video camera..videocassette
+1F4FD..1F4FE  ; Extended_Pictographic#  7.0  [2] (📽️..📾)    film projector..PORTABLE STEREO
+1F4FF         ; Extended_Pictographic#  8.0  [1] (📿)       prayer beads
+1F500..1F53D  ; Extended_Pictographic#  6.0 [62] (🔀..🔽)    shuffle tracks button..downwards button
+1F546..1F54A  ; Extended_Pictographic#  7.0  [5] (🕆..🕊️)    WHITE LATIN CROSS..dove
+1F54B..1F54F  ; Extended_Pictographic#  8.0  [5] (🕋..🕏)    kaaba..BOWL OF HYGIEIA
+1F550..1F567  ; Extended_Pictographic#  6.0 [24] (🕐..🕧)    one o’clock..twelve-thirty
+1F568..1F579  ; Extended_Pictographic#  7.0 [18] (🕨..🕹️)    RIGHT SPEAKER..joystick
+1F57A         ; Extended_Pictographic#  9.0  [1] (🕺)       man dancing
+1F57B..1F5A3  ; Extended_Pictographic#  7.0 [41] (🕻..🖣)    LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4         ; Extended_Pictographic#  9.0  [1] (🖤)       black heart
+1F5A5..1F5FA  ; Extended_Pictographic#  7.0 [86] (🖥️..🗺️)    desktop computer..world map
+1F5FB..1F5FF  ; Extended_Pictographic#  6.0  [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Extended_Pictographic#  6.1  [1] (😀)       grinning face
+1F601..1F610  ; Extended_Pictographic#  6.0 [16] (😁..😐)    beaming face with smiling eyes..neutral face
+1F611         ; Extended_Pictographic#  6.1  [1] (😑)       expressionless face
+1F612..1F614  ; Extended_Pictographic#  6.0  [3] (😒..😔)    unamused face..pensive face
+1F615         ; Extended_Pictographic#  6.1  [1] (😕)       confused face
+1F616         ; Extended_Pictographic#  6.0  [1] (😖)       confounded face
+1F617         ; Extended_Pictographic#  6.1  [1] (😗)       kissing face
+1F618         ; Extended_Pictographic#  6.0  [1] (😘)       face blowing a kiss
+1F619         ; Extended_Pictographic#  6.1  [1] (😙)       kissing face with smiling eyes
+1F61A         ; Extended_Pictographic#  6.0  [1] (😚)       kissing face with closed eyes
+1F61B         ; Extended_Pictographic#  6.1  [1] (😛)       face with tongue
+1F61C..1F61E  ; Extended_Pictographic#  6.0  [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Extended_Pictographic#  6.1  [1] (😟)       worried face
+1F620..1F625  ; Extended_Pictographic#  6.0  [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Extended_Pictographic#  6.1  [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Extended_Pictographic#  6.0  [4] (😨..😫)    fearful face..tired face
+1F62C         ; Extended_Pictographic#  6.1  [1] (😬)       grimacing face
+1F62D         ; Extended_Pictographic#  6.0  [1] (😭)       loudly crying face
+1F62E..1F62F  ; Extended_Pictographic#  6.1  [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Extended_Pictographic#  6.0  [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Extended_Pictographic#  6.1  [1] (😴)       sleeping face
+1F635..1F640  ; Extended_Pictographic#  6.0 [12] (😵..🙀)    dizzy face..weary cat
+1F641..1F642  ; Extended_Pictographic#  7.0  [2] (🙁..🙂)    slightly frowning face..slightly smiling face
+1F643..1F644  ; Extended_Pictographic#  8.0  [2] (🙃..🙄)    upside-down face..face with rolling eyes
+1F645..1F64F  ; Extended_Pictographic#  6.0 [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680..1F6C5  ; Extended_Pictographic#  6.0 [70] (🚀..🛅)    rocket..left luggage
+1F6C6..1F6CF  ; Extended_Pictographic#  7.0 [10] (🛆..🛏️)    TRIANGLE WITH ROUNDED CORNERS..bed
+1F6D0         ; Extended_Pictographic#  8.0  [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Extended_Pictographic#  9.0  [2] (🛑..🛒)    stop sign..shopping cart
+1F6D3..1F6D4  ; Extended_Pictographic# 10.0  [2] (🛓..🛔)    STUPA..PAGODA
+1F6D5         ; Extended_Pictographic# 12.0  [1] (🛕)       hindu temple
+1F6D6..1F6DF  ; Extended_Pictographic#   NA [10] (🛖..🛟)    <reserved-1F6D6>..<reserved-1F6DF>
+1F6E0..1F6EC  ; Extended_Pictographic#  7.0 [13] (🛠️..🛬)    hammer and wrench..airplane arrival
+1F6ED..1F6EF  ; Extended_Pictographic#   NA  [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>
+1F6F0..1F6F3  ; Extended_Pictographic#  7.0  [4] (🛰️..🛳️)    satellite..passenger ship
+1F6F4..1F6F6  ; Extended_Pictographic#  9.0  [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Extended_Pictographic# 10.0  [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Extended_Pictographic# 11.0  [1] (🛹)       skateboard
+1F6FA         ; Extended_Pictographic# 12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FF  ; Extended_Pictographic#   NA  [5] (🛻..🛿)    <reserved-1F6FB>..<reserved-1F6FF>
+1F774..1F77F  ; Extended_Pictographic#   NA [12] (🝴..🝿)    <reserved-1F774>..<reserved-1F77F>
+1F7D5..1F7D8  ; Extended_Pictographic# 11.0  [4] (🟕..🟘)    CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7D9..1F7DF  ; Extended_Pictographic#   NA  [7] (🟙..🟟)    <reserved-1F7D9>..<reserved-1F7DF>
+1F7E0..1F7EB  ; Extended_Pictographic# 12.0 [12] (🟠..🟫)    orange circle..brown square
+1F7EC..1F7FF  ; Extended_Pictographic#   NA [20] (🟬..🟿)    <reserved-1F7EC>..<reserved-1F7FF>
+1F80C..1F80F  ; Extended_Pictographic#   NA  [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>
+1F848..1F84F  ; Extended_Pictographic#   NA  [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>
+1F85A..1F85F  ; Extended_Pictographic#   NA  [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>
+1F888..1F88F  ; Extended_Pictographic#   NA  [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>
+1F8AE..1F8FF  ; Extended_Pictographic#   NA [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>
+1F90C         ; Extended_Pictographic#   NA  [1] (🤌)       <reserved-1F90C>
+1F90D..1F90F  ; Extended_Pictographic# 12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Extended_Pictographic#  8.0  [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Extended_Pictographic#  9.0  [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Extended_Pictographic# 10.0  [1] (🤟)       love-you gesture
+1F920..1F927  ; Extended_Pictographic#  9.0  [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Extended_Pictographic# 10.0  [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Extended_Pictographic#  9.0  [1] (🤰)       pregnant woman
+1F931..1F932  ; Extended_Pictographic# 10.0  [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Extended_Pictographic#  9.0  [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Extended_Pictographic#  9.0  [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Extended_Pictographic# 12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Extended_Pictographic#  9.0  [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Extended_Pictographic#  9.0  [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Extended_Pictographic# 10.0  [1] (🥌)       curling stone
+1F94D..1F94F  ; Extended_Pictographic# 11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Extended_Pictographic#  9.0 [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Extended_Pictographic# 10.0 [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Extended_Pictographic# 11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Extended_Pictographic# 12.0  [1] (🥱)       yawning face
+1F972         ; Extended_Pictographic#   NA  [1] (🥲)       <reserved-1F972>
+1F973..1F976  ; Extended_Pictographic# 11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F979  ; Extended_Pictographic#   NA  [3] (🥷..🥹)    <reserved-1F977>..<reserved-1F979>
+1F97A         ; Extended_Pictographic# 11.0  [1] (🥺)       pleading face
+1F97B         ; Extended_Pictographic# 12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Extended_Pictographic# 11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Extended_Pictographic#  8.0  [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Extended_Pictographic#  9.0 [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Extended_Pictographic# 10.0  [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Extended_Pictographic# 11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Extended_Pictographic#   NA  [2] (🦣..🦤)    <reserved-1F9A3>..<reserved-1F9A4>
+1F9A5..1F9AA  ; Extended_Pictographic# 12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Extended_Pictographic#   NA  [3] (🦫..🦭)    <reserved-1F9AB>..<reserved-1F9AD>
+1F9AE..1F9AF  ; Extended_Pictographic# 12.0  [2] (🦮..🦯)    guide dog..probing cane
+1F9B0..1F9B9  ; Extended_Pictographic# 11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Extended_Pictographic# 12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Extended_Pictographic#  8.0  [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Extended_Pictographic# 11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Extended_Pictographic# 12.0  [8] (🧃..🧊)    beverage box..ice cube
+1F9CB..1F9CC  ; Extended_Pictographic#   NA  [2] (🧋..🧌)    <reserved-1F9CB>..<reserved-1F9CC>
+1F9CD..1F9CF  ; Extended_Pictographic# 12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Extended_Pictographic# 10.0 [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Extended_Pictographic# 11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA00..1FA53  ; Extended_Pictographic# 12.0 [84] (🨀..🩓)    NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+1FA54..1FA5F  ; Extended_Pictographic#   NA [12] (🩔..🩟)    <reserved-1FA54>..<reserved-1FA5F>
+1FA60..1FA6D  ; Extended_Pictographic# 11.0 [14] (🩠..🩭)    XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA6E..1FA6F  ; Extended_Pictographic#   NA  [2] (🩮..🩯)    <reserved-1FA6E>..<reserved-1FA6F>
+1FA70..1FA73  ; Extended_Pictographic# 12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74..1FA77  ; Extended_Pictographic#   NA  [4] (🩴..🩷)    <reserved-1FA74>..<reserved-1FA77>
+1FA78..1FA7A  ; Extended_Pictographic# 12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA7B..1FA7F  ; Extended_Pictographic#   NA  [5] (🩻..🩿)    <reserved-1FA7B>..<reserved-1FA7F>
+1FA80..1FA82  ; Extended_Pictographic# 12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA8F  ; Extended_Pictographic#   NA [13] (🪃..🪏)    <reserved-1FA83>..<reserved-1FA8F>
+1FA90..1FA95  ; Extended_Pictographic# 12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FFFD  ; Extended_Pictographic#   NA[1384] (🪖..🿽)   <reserved-1FA96>..<reserved-1FFFD>
+
+# Total elements: 3793
+
+#EOF
index 9e81153fd60259d4d59c484dae2f406e1e72bf11..1f0be939da7feca996075e3b78b792a9bc4324be 100644 (file)
@@ -3,7 +3,7 @@
 USING: accessors arrays assocs combinators fry interval-maps
 kernel literals locals math namespaces parser sequences
 simple-flat-file unicode.categories unicode.data
-unicode.normalize.private words words.constant ;
+unicode.normalize.private words words.constant math.order ;
 IN: unicode.breaks
 
 <PRIVATE
@@ -22,7 +22,34 @@ CONSTANT: CR 8
 CONSTANT: LF 9
 CONSTANT: SpacingMark 10
 CONSTANT: Prepend 11
-CONSTANT: graphemes 12
+CONSTANT: ZWJ 12
+CONSTANT: Extended_Pictographic 13
+CONSTANT: (Extended_Pictographic-Extend*-)ZWJ 14
+CONSTANT: Regional_Indicator(even) 15
+CONSTANT: Regional_Indicator(odd) 16
+CONSTANT: graphemes 17
+
+:: load-interval-file-for ( filename n key -- table )
+    filename load-data-file [ n swap nth key = ] filter
+    intern-values expand-ranges ;
+
+"emoji-modifier-table" create-word-in
+"resource:basis/unicode/UCD/auxiliary/emoji-data.txt"
+1 "Emoji_Modifier" load-interval-file-for
+define-constant
+
+"extended-pictographic-table" create-word-in
+"resource:basis/unicode/UCD/auxiliary/emoji-data.txt"
+1 "Extended_Pictographic" load-interval-file-for
+define-constant
+
+"spacing-mark-exceptions-table" create-word-in
+{
+    0x102B 0x102C 0x1038 { 0x1062 0x1064 } { 0x1067 0x106D }
+    0x1083 { 0x1087 0x108C } 0x108F { 0x109A 0x109C } 0x1A61
+    0x1A63 0x1A64 0xAA7B 0xAA7D 0x11720 0x11721
+}
+<interval-set> define-constant
 
 : jamo-class ( ch -- class )
     dup initial? [ drop L ]
@@ -31,36 +58,76 @@ CONSTANT: graphemes 12
 : hangul-class ( ch -- class )
     hangul-base - 0x1C mod zero? LV LVT ? ;
 
+CATEGORY: extend
+    Me Mn |
+    "Other_Grapheme_Extend" property? ;
+
 CATEGORY: grapheme-control Zl Zp Cc Cf ;
+
 : control-class ( ch -- class )
     {
-        { CHAR: \r [ CR ] }
-        { CHAR: \n [ LF ] }
-        { 0x200C [ Extend ] }
-        { 0x200D [ Extend ] }
+        { [ dup CHAR: \r = ]  [ drop CR ] }
+        { [ dup CHAR: \n = ] [ drop LF ] }
+        { [ dup 0x200C = ] [ drop Extend ] }
+        { [ dup 0x200D = ] [ drop ZWJ ] }
+        { [ dup "Other_Grapheme_Extend" property? ] [ drop Extend ] }
         [ drop Control ]
-    } case ;
-
-CATEGORY: extend
-    Me Mn |
-    "Other_Grapheme_Extend" property? ;
+    } cond ;
 
 : loe? ( ch -- ? )
     "Logical_Order_Exception" property? ;
 
 CATEGORY: spacing Mc ;
 
-: grapheme-class ( ch -- class )
+: regional? ( ch -- ? )
+    "Regional_Indicator" property? ; 
+>>
+
+: modifier? ( ch -- ? ) emoji-modifier-table interval-key? ; inline
+
+:: grapheme-class ( str -- class )
+    str last
     {
         { [ dup jamo? ] [ jamo-class ] }
         { [ dup hangul? ] [ hangul-class ] }
-        { [ dup grapheme-control? ] [ control-class ] }
+        { [ dup grapheme-control? ] [
+              control-class dup ZWJ = [
+                  drop
+                  str unclip-last-slice drop dup [
+                      [ extend? ]
+                      [ control-class Extend = ]
+                      [ modifier? ]
+                      tri or or not
+                  ] find-last drop [ swap ?nth ] [ last ] if*
+                  extended-pictographic-table interval-key? [                      
+                      (Extended_Pictographic-Extend*-)ZWJ
+                  ] [ ZWJ ] if
+              ] when               
+          ] }
         { [ dup extend? ] [ drop Extend ] }
-        { [ dup spacing? ] [ drop SpacingMark ] }
-        { [ loe? ] [ Prepend ] }
-        [ Any ]
+        { [ dup modifier? ] [ drop Extend ] }
+        { [ dup spacing? ] [ spacing-mark-exceptions-table
+                             interval-key? [ Any ] [ SpacingMark ] if ] }
+        { [ dup loe? ] [ drop Prepend ] }
+        { [ dup regional? ] [
+              drop  
+              f :> ri-even?!
+              str unclip-last-slice drop [
+                  regional? [ ri-even? not ri-even?! f ] [ t ] if
+              ] find-last 2drop
+              ri-even? [
+                  Regional_Indicator(even)
+              ] [
+                  Regional_Indicator(odd)
+              ] if
+          ] }
+        { [ dup extended-pictographic-table interval-key? ] [
+              drop Extended_Pictographic
+          ] }
+        [ drop Any ]
     } cond ;
 
+<<
 : init-table ( size -- table )
     dup [ f <array> ] curry replicate ;
 
@@ -83,15 +150,17 @@ SYMBOL: table
 : disconnect ( class1 class2 -- ) 0 set-table ;
 
 : make-grapheme-table ( -- )
-    { CR } { LF } connect
-    { Control CR LF } graphemes <iota> disconnect
-    graphemes <iota> { Control CR LF } disconnect
-    { L } { L V LV LVT } connect
-    { LV V } { V T } connect
-    { LVT T } { T } connect
-    graphemes <iota> { Extend } connect
-    graphemes <iota> { SpacingMark } connect
-    { Prepend } graphemes <iota> connect ;
+    { CR } { LF } connect                                                       ! GB3
+    { Control CR LF } graphemes <iota> disconnect                               ! GB4
+    graphemes <iota> { Control CR LF } disconnect                               ! GB5
+    { L } { L V LV LVT } connect                                                ! GB6
+    { LV V } { V T } connect                                                    ! GB7
+    { LVT T } { T } connect                                                     ! GB8
+    graphemes <iota> { Extend ZWJ (Extended_Pictographic-Extend*-)ZWJ } connect ! GB9
+    graphemes <iota> { SpacingMark } connect                                    ! GB9a
+    { Prepend } graphemes <iota> connect                                        ! GB9b
+    { (Extended_Pictographic-Extend*-)ZWJ } { Extended_Pictographic } connect   ! GB11
+    { Regional_Indicator(odd) } { Regional_Indicator(even) } connect ;          ! GB12,13
 
 "grapheme-table" create-word-in
 graphemes init-table table
@@ -109,23 +178,30 @@ CONSTANT: wCR 1
 CONSTANT: wLF 2
 CONSTANT: wNewline 3
 CONSTANT: wExtend 4
-CONSTANT: wFormat 5
-CONSTANT: wKatakana 6
-CONSTANT: wALetter 7
-CONSTANT: wMidLetter 8
-CONSTANT: wMidNum 9
-CONSTANT: wMidNumLet 10
-CONSTANT: wNumeric 11
-CONSTANT: wExtendNumLet 12
-CONSTANT: unicode-words 13
+CONSTANT: wZWJ 5
+CONSTANT: wRegional_Indicator 6
+CONSTANT: wFormat 7
+CONSTANT: wKatakana 8
+CONSTANT: wHebrew_Letter 9
+CONSTANT: wALetter 10
+CONSTANT: wSingle_Quote 11
+CONSTANT: wDouble_Quote 12
+CONSTANT: wMidNumLet 13
+CONSTANT: wMidLetter 14
+CONSTANT: wMidNum 15
+CONSTANT: wNumeric 16
+CONSTANT: wExtendNumLet 17
+CONSTANT: wWSegSpace 18
+CONSTANT: unicode-words 19
 
 ! Is there a way to avoid this?
 CONSTANT: word-break-classes H{
     { "Other" 0 } { "CR" 1 } { "LF" 2 } { "Newline" 3 }
-    { "Extend" 4 } { "Format" 5 } { "Katakana" 6 }
-    { "ALetter" 7 } { "MidLetter" 8 }
-    { "MidNum" 9 } { "MidNumLet" 10 } { "Numeric" 11 }
-    { "ExtendNumLet" 12 }
+    { "Extend" 4 } { "ZWJ" 5 } { "Regional_Indicator" 6 }
+    { "Format" 7 } { "Katakana" 8 } { "Hebrew_Letter" 9 }
+    { "ALetter" 10 } { "Single_Quote" 11 } { "Double_Quote" 12 }
+    { "MidNumLet" 13 } { "MidLetter" 14 } { "MidNum" 15 }
+    { "Numeric" 16 } { "ExtendNumLet" 17 } { "WSegSpace" 18 }
 }
 
 "word-break-table" create-word-in
@@ -139,23 +215,62 @@ define-constant
     word-break-table interval-at wOther or ;
 
 <<
-SYMBOL: check-letter-before
-SYMBOL: check-letter-after
+SYMBOL: check-AHletter-before
+SYMBOL: check-AHletter-after
+SYMBOL: check-Hebrew-letter-before
+SYMBOL: check-Hebrew-letter-after
 SYMBOL: check-number-before
 SYMBOL: check-number-after
+SYMBOL: check-Extended_Pictographic
+SYMBOL: check-RI-pair
 
 : make-word-table ( -- )
-    { wCR } { wLF } connect
-    { wNewline wCR wLF } unicode-words <iota> disconnect
-    unicode-words <iota> { wNewline wCR wLF } disconnect
-    { wALetter } { wMidLetter wMidNumLet } check-letter-after set-table
-    { wMidLetter wMidNumLet } { wALetter } check-letter-before set-table
-    { wNumeric wALetter } { wNumeric wALetter } connect
-    { wNumeric } { wMidNum wMidNumLet } check-number-after set-table
-    { wMidNum wMidNumLet } { wNumeric } check-number-before set-table
-    { wKatakana } { wKatakana } connect
-    { wALetter wNumeric wKatakana wExtendNumLet } { wExtendNumLet }
-    [ connect ] [ swap connect ] 2bi ;
+    { wCR } { wLF } connect                                                   ! WB3
+    { wNewline                                                                ! WB3a
+      wCR
+      wLF } unicode-words <iota> disconnect
+    unicode-words <iota> { wNewline                                           ! WB3b
+                           wCR
+                           wLF } disconnect
+    { wZWJ } unicode-words <iota> check-Extended_Pictographic set-table       ! WB3c
+    { wWSegSpace } { wWSegSpace } connect                                     ! WB3d
+    unicode-words <iota> { wZWJ } connect                                     ! WB4
+    { wALetter                                                                ! WB5
+      wHebrew_Letter } { wALetter
+                         wHebrew_Letter } connect
+    { wALetter                                                                ! WB6
+      wHebrew_Letter } { wMidLetter
+                         wMidNumLet
+                         wSingle_Quote } check-AHletter-after set-table
+    { wMidLetter                                                              ! WB7
+      wMidNumLet
+      wSingle_Quote } { wALetter
+                        wHebrew_Letter } check-AHletter-before set-table
+    { wHebrew_Letter } { wSingle_Quote } connect                              ! WB7a
+    { wHebrew_Letter } { wDouble_Quote } check-Hebrew-letter-after set-table  ! WB7b 
+    { wDouble_Quote } { wHebrew_Letter } check-Hebrew-letter-before set-table ! WB7c 
+    { wNumeric } { wNumeric } connect                                         ! WB8
+    { wALetter
+      wHebrew_Letter } { wNumeric } connect                                   ! WB9
+    { wNumeric } { wALetter                                                   ! WB10
+                   wHebrew_Letter } connect
+    { wMidNum                                                                 ! WB11
+      wMidNumLet
+      wSingle_Quote } { wNumeric } check-number-before set-table
+    { wNumeric } { wMidNum                                                    ! WB12
+                   wMidNumLet
+                   wSingle_Quote } check-number-after set-table
+    { wKatakana } { wKatakana } connect                                       ! WB13
+    { wALetter                                                                ! WB13a 
+      wHebrew_Letter
+      wNumeric
+      wKatakana
+      wExtendNumLet } { wExtendNumLet } connect
+    { wExtendNumLet } { wALetter                                              ! WB13b
+                        wHebrew_Letter
+                        wNumeric
+                        wKatakana } connect
+    { wRegional_Indicator } { wRegional_Indicator } check-RI-pair set-table ; ! WB15,16
 
 : finish-word-table ( -- table )
     table get [
@@ -178,35 +293,58 @@ define-constant
     ] [ t ] if ;
 
 : (format/extended?) ( class -- ? )
-    ${ wExtend wFormat } member? ; inline
+    ${ wExtend wFormat } member? ; inline                                     ! WB4
 
 : format/extended? ( ch -- ? )
     word-break-prop (format/extended?) ;
 
+: (format/extended/zwj?) ( class -- ? )
+    ${ wExtend wFormat wZWJ } member? ; inline                                ! WB4
+
+: format/extended/zwj? ( ch -- ? )
+    word-break-prop (format/extended/zwj?) ;
+
 : (walk-up) ( str i -- j )
-    swap [ format/extended? not ] find-from drop ;
+    swap [ format/extended/zwj? not ] find-from drop ;
 
 : walk-up ( str i -- j )
     dupd 1 + (walk-up) [ 1 + (walk-up) ] [ drop f ] if* ;
 
 : (walk-down) ( str i -- j )
-    swap [ format/extended? not ] find-last-from drop ;
+    swap [ format/extended/zwj? not ] find-last-from drop ;
 
 : walk-down ( str i -- j )
     dupd (walk-down) [ 1 - (walk-down) ] [ drop f ] if* ;
 
-: word-break? ( str i table-entry -- ? )
+:: word-break? ( str i table-entry -- ? )
+    str i table-entry
     {
         { t [ 2drop f ] }
         { f [ 2drop t ] }
-        { check-letter-after
-            [ dupd walk-up wALetter property-not= ] }
-        { check-letter-before
-            [ dupd walk-down wALetter property-not= ] }
+        { check-AHletter-after
+          [ dupd walk-up
+            [ wALetter property-not= ] [ wHebrew_Letter property-not= ] 2bi or ] }
+        { check-AHletter-before
+          [ dupd walk-down
+            [ wALetter property-not= ] [ wHebrew_Letter property-not= ] 2bi or ] }
+        { check-Hebrew-letter-after
+          [ dupd walk-up wHebrew_Letter property-not= ] }
+        { check-Hebrew-letter-before
+          [ dupd walk-down wHebrew_Letter property-not= ] }
         { check-number-after
-            [ dupd walk-up wNumeric property-not= ] }
+          [ dupd walk-up wNumeric property-not= ] }
         { check-number-before
-            [ dupd walk-down wNumeric property-not= ] }
+          [ dupd walk-down wNumeric property-not= ] }
+        { check-Extended_Pictographic
+          [ swap ?nth extended-pictographic-table interval-key? ] }
+        { check-RI-pair [
+              2drop 
+              f :> ri-even?!
+              i str [
+                  regional? [ ri-even? not ri-even?! f ] [ t ] if
+              ] find-last-from 2drop
+              ri-even? not
+          ] }
     } case ;
 
 :: word-break-next ( old-class new-char i str -- next-class ? )
index eea3b7aa48ae68f53af2e46291a512f747e2c217..abeacc52000dab391101fa66016231bbf52a0f76 100644 (file)
@@ -3,7 +3,7 @@ hints interval-maps kernel math math.order sequences sorting
 strings unicode.breaks.private unicode.case.private
 unicode.categories unicode.collation unicode.collation.private
 unicode.data unicode.data.private unicode.normalize.private
-unicode.script ;
+unicode.script locals math.ranges ;
 IN: unicode
 
 CATEGORY: blank Zs Zl Zp | "\r\n\t" member? ;
@@ -41,20 +41,33 @@ CATEGORY: math Sm | "Other_Math" property? ;
 
 : ch>title ( ch -- title ) simple-title ?at drop ; inline
 
-: first-grapheme ( str -- i )
-    unclip-slice grapheme-class over
-    [ grapheme-class [ nip ] [ grapheme-break? ] 2bi ] find drop
-    nip swap length or 1 + ;
-
-: first-grapheme-from ( start str -- i )
-    over tail-slice first-grapheme + ;
-
-: last-grapheme ( str -- i )
-    unclip-last-slice grapheme-class swap
-    [ grapheme-class dup rot grapheme-break? ] find-last drop ?1+ nip ;
+:: first-grapheme ( entire-str start -- i )
+    start :> pos!
+    entire-str length :> str-len
+    0 pos 1 + entire-str <slice> grapheme-class
+    pos 1 + str-len 1 - min pos!
+    pos str-len 1 - [a,b] [
+        1 + 0 swap entire-str <slice> grapheme-class
+        dup rot swap grapheme-break?
+    ] find drop nip
+    [ 1 + ] [ str-len start - ] if* ;
+
+:: first-grapheme-from ( start str -- i )
+    str start first-grapheme start + ;
+
+:: last-grapheme ( str -- i )
+    str length 1 - :> pos!
+    pos 0 = [ 0 ] [
+        str grapheme-class
+        pos 1 - 0 max pos!
+        0 pos [a,b] [
+            0 swap 1 + str <slice> grapheme-class
+            dup rot grapheme-break?
+        ] find-last drop ?1+ nip
+    ] if ;
 
 : last-grapheme-from ( end str -- i )
-    swap head-slice last-grapheme ;
+     swap head-slice last-grapheme ;
 
 <PRIVATE
 
@@ -63,8 +76,16 @@ CATEGORY: math Sm | "Other_Math" property? ;
 
 PRIVATE>
 
-: >graphemes ( str -- graphemes )
-    [ first-grapheme ] >pieces ;
+:: >graphemes ( str -- graphemes )
+    str length :> str-len
+    0 :> pos! 0 :> old-pos!
+    [ f ! dummy
+      pos old-pos! old-pos str-len < [
+          str pos first-grapheme pos + pos! pos str-len <=
+      ] [ f ] if ]
+    [ drop old-pos pos str <slice> ] produce nip ;
+
+: count-graphemes ( str -- n ) >graphemes length ; inline
 
 : string-reverse ( str -- rts )
     >graphemes reverse! concat ;