unicode-emoji 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +11 -1
- data/README.md +98 -55
- data/Rakefile +6 -2
- data/data/emoji.marshal.gz +0 -0
- data/data/generate_constants.rb +97 -40
- data/lib/unicode/emoji/constants.rb +17 -1
- data/lib/unicode/emoji/generated/regex.rb +1 -1
- data/lib/unicode/emoji/generated/regex_include_mqe.rb +8 -0
- data/lib/unicode/emoji/generated/regex_include_mqe_uqe.rb +8 -0
- data/lib/unicode/emoji/generated/regex_include_text.rb +1 -1
- data/lib/unicode/emoji/generated/regex_text.rb +1 -1
- data/lib/unicode/emoji/generated/regex_valid.rb +1 -1
- data/lib/unicode/emoji/generated/regex_valid_include_text.rb +1 -1
- data/lib/unicode/emoji/generated/regex_well_formed.rb +1 -1
- data/lib/unicode/emoji/generated/regex_well_formed_include_text.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_basic.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_include_mqe.rb +8 -0
- data/lib/unicode/emoji/generated_native/regex_include_mqe_uqe.rb +8 -0
- data/lib/unicode/emoji/generated_native/regex_include_text.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_text.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_valid.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_valid_include_text.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_well_formed.rb +1 -1
- data/lib/unicode/emoji/generated_native/regex_well_formed_include_text.rb +1 -1
- data/lib/unicode/emoji/lazy_constants.rb +36 -0
- data/lib/unicode/emoji/list.rb +3 -0
- data/lib/unicode/emoji.rb +33 -6
- data/spec/data/.keep +0 -0
- data/spec/data/emoji-test.txt +5331 -0
- data/spec/emoji_test_txt_spec.rb +181 -0
- data/spec/unicode_emoji_spec.rb +36 -4
- metadata +12 -2
@@ -3,6 +3,6 @@
|
|
3
3
|
|
4
4
|
module Unicode
|
5
5
|
module Emoji
|
6
|
-
REGEX_VALID_INCLUDE_TEXT = /(?-mix:(?:(?:(?:\p{EBase}\p{EMod}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{EPres}(?!︎)️?)|\p{Emoji}))+(?:\p{EBase}\p{EMod}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{EPres}(?!︎)️?)|\p{Emoji}))|(?:🏴(?:[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||))|(?:[\#\*0-9]️⃣|\p{EBase}\p{EMod}|(?!\p{EComp})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{EPres}(?!︎)️?)|(?:🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼)))|(?-mix:(?!\p{EComp})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳](?!(?:\p{EMod}|️))︎?|\p{EPres}︎)|(?:\#⃣|\*⃣|0⃣|1⃣|2⃣|3⃣|4⃣|5⃣|6⃣|7⃣|8⃣|9⃣))/
|
6
|
+
REGEX_VALID_INCLUDE_TEXT = /(?:(?:(?:(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))+(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))|(?:🏴(?:[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|[-]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||))|(?:🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼)|(?:[\#\*0-9]️⃣|\p{EBase}\p{EMod}|(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?))|(?:(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})(?!(?:\p{EMod}|️))︎?|\p{EPres}︎)|[\#\*0-9]⃣))/
|
7
7
|
end
|
8
8
|
end
|
@@ -3,6 +3,6 @@
|
|
3
3
|
|
4
4
|
module Unicode
|
5
5
|
module Emoji
|
6
|
-
REGEX_WELL_FORMED = /(?:(?:(?:(?:\p{EBase}\p{EMod}|(
|
6
|
+
REGEX_WELL_FORMED = /(?:(?:(?:(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))+(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))|(?:(?:(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{EBase}\p{EMod})[--]{1,30})|\p{RI}{2}|(?:[\#\*0-9]️⃣|\p{EBase}\p{EMod}|(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)))/
|
7
7
|
end
|
8
8
|
end
|
@@ -3,6 +3,6 @@
|
|
3
3
|
|
4
4
|
module Unicode
|
5
5
|
module Emoji
|
6
|
-
REGEX_WELL_FORMED_INCLUDE_TEXT = /(
|
6
|
+
REGEX_WELL_FORMED_INCLUDE_TEXT = /(?:(?:(?:(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))+(?:\p{EBase}\p{EMod}|(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{Emoji}))|(?:(?:(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?)|\p{EBase}\p{EMod})[--]{1,30})|\p{RI}{2}|(?:[\#\*0-9]️⃣|\p{EBase}\p{EMod}|(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})️|\p{EPres}(?!︎)️?))|(?:(?!\p{EComp})(?:\p{Emoji}(?<!\p{EPres})(?!(?:\p{EMod}|️))︎?|\p{EPres}︎)|[\#\*0-9]⃣))/
|
7
7
|
end
|
8
8
|
end
|
@@ -2,19 +2,55 @@
|
|
2
2
|
|
3
3
|
module Unicode
|
4
4
|
module Emoji
|
5
|
+
# The current list of codepoints with the "Emoji" property
|
6
|
+
# Same characters as \p{Emoji}
|
7
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
5
8
|
EMOJI_CHAR = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) }.keys.freeze
|
9
|
+
|
10
|
+
# The current list of codepoints with the "Emoji_Presentation" property
|
11
|
+
# Same characters as \p{Emoji Presentation} or \p{EPres}
|
12
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
6
13
|
EMOJI_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:P) }.keys.freeze
|
14
|
+
|
15
|
+
# The current list of codepoints with the "Emoji" property that lack the "Emoji Presentation" property
|
7
16
|
TEXT_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) && !props.include?(:P) }.keys.freeze
|
17
|
+
|
18
|
+
# The current list of codepoints with the "Emoji_Component" property
|
19
|
+
# Same characters as \p{Emoji Component} or \p{EComp}
|
20
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
8
21
|
EMOJI_COMPONENT = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:C) }.keys.freeze
|
22
|
+
|
23
|
+
# The current list of codepoints with the "Emoji_Modifier_Base" property
|
24
|
+
# Same characters as \p{Emoji Modifier Base} or \p{EBase}
|
25
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
9
26
|
EMOJI_MODIFIER_BASES = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:B) }.keys.freeze
|
27
|
+
|
28
|
+
# The current list of codepoints with the "Emoji_Modifier" property
|
29
|
+
# Same characters as \p{Emoji Modifier} or \p{EMod}
|
30
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
10
31
|
EMOJI_MODIFIERS = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:M) }.keys.freeze
|
11
32
|
|
33
|
+
# The current list of codepoints with the "Extended_Pictographic" property
|
34
|
+
# Same characters as \p{Extended Pictographic} or \p{ExtPict}
|
35
|
+
# (Emoji version of this gem might be more recent than Ruby's Emoji version)
|
12
36
|
EXTENDED_PICTOGRAPHIC = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) }.keys.freeze
|
37
|
+
|
38
|
+
# The current list of codepoints with the "Extended_Pictographic" property that don't have the "Emoji" property
|
13
39
|
EXTENDED_PICTOGRAPHIC_NO_EMOJI= INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) && !props.include?(:E) }.keys.freeze
|
40
|
+
|
41
|
+
# The list of characters that can be used as base for keycap sequences
|
14
42
|
EMOJI_KEYCAPS = INDEX[:KEYCAPS].freeze
|
43
|
+
|
44
|
+
# The list of valid regions
|
15
45
|
VALID_REGION_FLAGS = INDEX[:FLAGS].freeze
|
46
|
+
|
47
|
+
# The list of valid subdivisions in regex character class syntax
|
16
48
|
VALID_SUBDIVISIONS = INDEX[:SD].map{_1.sub(/(.)~(.)/, '[\1-\2]') }
|
49
|
+
|
50
|
+
# The list RGI tag sequence flags
|
17
51
|
RECOMMENDED_SUBDIVISION_FLAGS = INDEX[:TAGS].freeze
|
52
|
+
|
53
|
+
# The list of fully-qualified RGI Emoji ZWJ sequences
|
18
54
|
RECOMMENDED_ZWJ_SEQUENCES = INDEX[:ZWJ].freeze
|
19
55
|
end
|
20
56
|
end
|
data/lib/unicode/emoji/list.rb
CHANGED
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
module Unicode
|
4
4
|
module Emoji
|
5
|
+
# Contains an ordered and group list of all currently recommended Emoji (RGI/FQE)
|
5
6
|
LIST = INDEX[:LIST].freeze.each_value(&:freeze)
|
7
|
+
|
8
|
+
# Sometimes, categories change, we issue a warning in these cases
|
6
9
|
LIST_REMOVED_KEYS = [
|
7
10
|
"Smileys & People",
|
8
11
|
].freeze
|
data/lib/unicode/emoji.rb
CHANGED
@@ -9,15 +9,25 @@ module Unicode
|
|
9
9
|
autoload :INDEX, File.expand_path('emoji/index', __dir__)
|
10
10
|
|
11
11
|
%w[
|
12
|
-
EMOJI_CHAR
|
13
|
-
|
14
|
-
|
12
|
+
EMOJI_CHAR
|
13
|
+
EMOJI_PRESENTATION
|
14
|
+
TEXT_PRESENTATION
|
15
|
+
EMOJI_COMPONENT
|
16
|
+
EMOJI_MODIFIER_BASES
|
17
|
+
EMOJI_MODIFIERS
|
18
|
+
EXTENDED_PICTOGRAPHIC
|
19
|
+
EXTENDED_PICTOGRAPHIC_NO_EMOJI
|
20
|
+
EMOJI_KEYCAPS VALID_REGION_FLAGS
|
21
|
+
VALID_SUBDIVISIONS
|
22
|
+
RECOMMENDED_SUBDIVISION_FLAGS
|
23
|
+
RECOMMENDED_ZWJ_SEQUENCES
|
15
24
|
].each do |const_name|
|
16
25
|
autoload const_name, File.expand_path('emoji/lazy_constants', __dir__)
|
17
26
|
end
|
18
27
|
|
19
28
|
%w[
|
20
|
-
LIST
|
29
|
+
LIST
|
30
|
+
LIST_REMOVED_KEYS
|
21
31
|
].each do |const_name|
|
22
32
|
autoload const_name, File.expand_path('emoji/list', __dir__)
|
23
33
|
end
|
@@ -28,12 +38,28 @@ module Unicode
|
|
28
38
|
)
|
29
39
|
|
30
40
|
%w[
|
31
|
-
REGEX
|
32
|
-
|
41
|
+
REGEX
|
42
|
+
REGEX_INCLUDE_TEXT
|
43
|
+
REGEX_INCLUDE_MQE
|
44
|
+
REGEX_INCLUDE_MQE_UQE
|
45
|
+
REGEX_VALID
|
46
|
+
REGEX_VALID_INCLUDE_TEXT
|
47
|
+
REGEX_WELL_FORMED
|
48
|
+
REGEX_WELL_FORMED_INCLUDE_TEXT
|
49
|
+
REGEX_POSSIBLE
|
50
|
+
REGEX_BASIC
|
51
|
+
REGEX_TEXT
|
52
|
+
REGEX_PICTO
|
53
|
+
REGEX_PICTO_NO_EMOJI
|
54
|
+
REGEX_ANY
|
33
55
|
].each do |const_name|
|
34
56
|
autoload const_name, File.join(generated_constants_dirpath, const_name.downcase)
|
35
57
|
end
|
36
58
|
|
59
|
+
# Return Emoji properties of character as an Array or nil
|
60
|
+
# See PROPERTY_NAMES constant for possible properties
|
61
|
+
#
|
62
|
+
# Source: see https://www.unicode.org/Public/16.0.0/ucd/emoji/emoji-data.txt
|
37
63
|
def self.properties(char)
|
38
64
|
ord = get_codepoint_value(char)
|
39
65
|
props = INDEX[:PROPERTIES][ord]
|
@@ -45,6 +71,7 @@ module Unicode
|
|
45
71
|
end
|
46
72
|
end
|
47
73
|
|
74
|
+
# Returns ordered list of Emoji, categorized in a three-level deep Hash structure
|
48
75
|
def self.list(key = nil, sub_key = nil)
|
49
76
|
return LIST unless key || sub_key
|
50
77
|
if LIST_REMOVED_KEYS.include?(key)
|
data/spec/data/.keep
ADDED
File without changes
|