unicode-emoji 2.9.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +1 -1
- data/Rakefile +5 -0
- data/data/generate_constants.rb +234 -0
- data/lib/unicode/emoji/constants.rb +20 -3
- data/lib/unicode/emoji/generated/regex.rb +6 -0
- data/lib/unicode/emoji/generated/regex_any.rb +6 -0
- data/lib/unicode/emoji/generated/regex_basic.rb +6 -0
- data/lib/unicode/emoji/generated/regex_include_text.rb +6 -0
- data/lib/unicode/emoji/generated/regex_picto.rb +6 -0
- data/lib/unicode/emoji/generated/regex_picto_no_emoji.rb +6 -0
- data/lib/unicode/emoji/generated/regex_text.rb +6 -0
- data/lib/unicode/emoji/generated/regex_valid.rb +6 -0
- data/lib/unicode/emoji/generated/regex_valid_include_text.rb +6 -0
- data/lib/unicode/emoji/generated/regex_well_formed.rb +6 -0
- data/lib/unicode/emoji/generated/regex_well_formed_include_text.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_any.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_basic.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_include_text.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_picto.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_picto_no_emoji.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_text.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_valid.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_valid_include_text.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_well_formed.rb +6 -0
- data/lib/unicode/emoji/generated_native/regex_well_formed_include_text.rb +6 -0
- data/lib/unicode/emoji/lazy_constants.rb +25 -0
- data/lib/unicode/emoji.rb +17 -199
- data/spec/unicode_emoji_spec.rb +1 -1
- metadata +27 -3
@@ -0,0 +1,6 @@
|
|
1
|
+
# This file was generated. Please, do not edit this file by hand.
|
2
|
+
module Unicode
|
3
|
+
module Emoji
|
4
|
+
REGEX_VALID = /(?:(?:(?:(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))+(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))|(?:🏴(?:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||))|(?:[\#\*0-9]️⃣|\p{Emoji Modifier Base}\p{Emoji Modifier}|(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|(?:🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼)))/
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# This file was generated. Please, do not edit this file by hand.
|
2
|
+
module Unicode
|
3
|
+
module Emoji
|
4
|
+
REGEX_VALID_INCLUDE_TEXT = /(?-mix:(?:(?:(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))+(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))|(?:🏴(?:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||))|(?:[\#\*0-9]️⃣|\p{Emoji Modifier Base}\p{Emoji Modifier}|(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|(?:🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼)))|(?-mix:(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳](?!(?:\p{Emoji Modifier}|️))︎?|\p{Emoji Presentation}︎))/
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# This file was generated. Please, do not edit this file by hand.
|
2
|
+
module Unicode
|
3
|
+
module Emoji
|
4
|
+
REGEX_WELL_FORMED = /(?:(?:(?:(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))+(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))|(?:(?:(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji Modifier Base}\p{Emoji Modifier})[-]+)|(?:[\#\*0-9]️⃣|\p{Emoji Modifier Base}\p{Emoji Modifier}|(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|(?:[🇦-🇿][🇦-🇿])))/
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# This file was generated. Please, do not edit this file by hand.
|
2
|
+
module Unicode
|
3
|
+
module Emoji
|
4
|
+
REGEX_WELL_FORMED_INCLUDE_TEXT = /(?-mix:(?:(?:(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))+(?:\p{Emoji Modifier Base}\p{Emoji Modifier}|(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji}))|(?:(?:(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|\p{Emoji Modifier Base}\p{Emoji Modifier})[-]+)|(?:[\#\*0-9]️⃣|\p{Emoji Modifier Base}\p{Emoji Modifier}|(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]️|\p{Emoji Presentation}(?!︎)️?)|(?:[🇦-🇿][🇦-🇿])))|(?-mix:(?!\p{Emoji Component})(?:[\#\*0-9©®‼⁉™ℹ↔-↙↩↪⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻◼☀-☄☎☑☘☝☠☢☣☦☪☮☯☸-☺♀♂♟♠♣♥♦♨♻♾⚒⚔-⚗⚙⚛⚜⚠⚧⚰⚱⛈⛏⛑⛓⛩⛰⛱⛴⛷-⛹✂✈✉✌✍✏✒✔✖✝✡✳✴❄❇❣❤➡⤴⤵⬅-⬇〰〽㊗㊙🅰🅱🅾🅿🈂🈷🌡🌤-🌬🌶🍽🎖🎗🎙-🎛🎞🎟🏋-🏎🏔-🏟🏳🏵🏷🐿👁📽🕉🕊🕯🕰🕳-🕹🖇🖊-🖍🖐🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳](?!(?:\p{Emoji Modifier}|️))︎?|\p{Emoji Presentation}︎))/
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unicode
|
4
|
+
module Emoji
|
5
|
+
EMOJI_CHAR = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) }.keys.freeze
|
6
|
+
EMOJI_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:P) }.keys.freeze
|
7
|
+
TEXT_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) && !props.include?(:P) }.keys.freeze
|
8
|
+
EMOJI_COMPONENT = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:C) }.keys.freeze
|
9
|
+
EMOJI_MODIFIER_BASES = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:B) }.keys.freeze
|
10
|
+
EMOJI_MODIFIERS = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:M) }.keys.freeze
|
11
|
+
|
12
|
+
EXTENDED_PICTOGRAPHIC = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) }.keys.freeze
|
13
|
+
EXTENDED_PICTOGRAPHIC_NO_EMOJI= INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) && !props.include?(:E) }.keys.freeze
|
14
|
+
EMOJI_KEYCAPS = INDEX[:KEYCAPS].freeze
|
15
|
+
VALID_REGION_FLAGS = INDEX[:FLAGS].freeze
|
16
|
+
VALID_SUBDIVISIONS = INDEX[:SD].freeze
|
17
|
+
RECOMMENDED_SUBDIVISION_FLAGS = INDEX[:TAGS].freeze
|
18
|
+
RECOMMENDED_ZWJ_SEQUENCES = INDEX[:ZWJ].freeze
|
19
|
+
|
20
|
+
LIST = INDEX[:LIST].freeze.each_value(&:freeze)
|
21
|
+
LIST_REMOVED_KEYS = [
|
22
|
+
"Smileys & People",
|
23
|
+
].freeze
|
24
|
+
end
|
25
|
+
end
|
data/lib/unicode/emoji.rb
CHANGED
@@ -3,212 +3,30 @@
|
|
3
3
|
require "unicode/version"
|
4
4
|
|
5
5
|
require_relative "emoji/constants"
|
6
|
-
require_relative "emoji/index"
|
7
6
|
|
8
7
|
module Unicode
|
9
8
|
module Emoji
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
EMOJI_VARIATION_SELECTOR = 0xFE0F
|
20
|
-
TEXT_VARIATION_SELECTOR = 0xFE0E
|
21
|
-
EMOJI_TAG_BASE_FLAG = 0x1F3F4
|
22
|
-
CANCEL_TAG = 0xE007F
|
23
|
-
TAGS = [*0xE0020..0xE007E]
|
24
|
-
EMOJI_KEYCAP_SUFFIX = 0x20E3
|
25
|
-
ZWJ = 0x200D
|
26
|
-
REGIONAL_INDICATORS = [*0x1F1E6..0x1F1FF]
|
27
|
-
|
28
|
-
EMOJI_CHAR = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) }.keys.freeze
|
29
|
-
EMOJI_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:P) }.keys.freeze
|
30
|
-
TEXT_PRESENTATION = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:E) && !props.include?(:P) }.keys.freeze
|
31
|
-
EMOJI_COMPONENT = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:C) }.keys.freeze
|
32
|
-
EMOJI_MODIFIER_BASES = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:B) }.keys.freeze
|
33
|
-
EMOJI_MODIFIERS = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:M) }.keys.freeze
|
34
|
-
|
35
|
-
EXTENDED_PICTOGRAPHIC = INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) }.keys.freeze
|
36
|
-
EXTENDED_PICTOGRAPHIC_NO_EMOJI= INDEX[:PROPERTIES].select{ |ord, props| props.include?(:X) && !props.include?(:E) }.keys.freeze
|
37
|
-
EMOJI_KEYCAPS = INDEX[:KEYCAPS].freeze
|
38
|
-
VALID_REGION_FLAGS = INDEX[:FLAGS].freeze
|
39
|
-
VALID_SUBDIVISIONS = INDEX[:SD].freeze
|
40
|
-
RECOMMENDED_SUBDIVISION_FLAGS = INDEX[:TAGS].freeze
|
41
|
-
RECOMMENDED_ZWJ_SEQUENCES = INDEX[:ZWJ].freeze
|
42
|
-
|
43
|
-
LIST = INDEX[:LIST].freeze.each_value(&:freeze)
|
44
|
-
LIST_REMOVED_KEYS = [
|
45
|
-
"Smileys & People",
|
46
|
-
]
|
47
|
-
|
48
|
-
pack = ->(ord){ Regexp.escape(Array(ord).pack("U*")) }
|
49
|
-
join = -> (*strings){ "(?:" + strings.join("|") + ")" }
|
50
|
-
pack_and_join = ->(ords){ join[*ords.map{ |ord| pack[ord] }] }
|
51
|
-
|
52
|
-
if EMOJI_VERSION == Unicode::Version.emoji_version
|
53
|
-
emoji_character = "\\p{Emoji}"
|
54
|
-
emoji_modifier = "\\p{Emoji Modifier}"
|
55
|
-
emoji_modifier_base = "\\p{Emoji Modifier Base}"
|
56
|
-
emoji_component = "\\p{Emoji Component}"
|
57
|
-
emoji_presentation = "\\p{Emoji Presentation}"
|
58
|
-
picto = "\\p{Extended Pictographic}"
|
59
|
-
picto_no_emoji = "\\p{Extended Pictographic}(?<!\\p{Emoji})"
|
60
|
-
else
|
61
|
-
emoji_character = pack_and_join[EMOJI_CHAR]
|
62
|
-
emoji_modifier = pack_and_join[EMOJI_MODIFIERS]
|
63
|
-
emoji_modifier_base = pack_and_join[EMOJI_MODIFIER_BASES]
|
64
|
-
emoji_component = pack_and_join[EMOJI_COMPONENT]
|
65
|
-
emoji_presentation = pack_and_join[EMOJI_PRESENTATION]
|
66
|
-
picto = pack_and_join[EXTENDED_PICTOGRAPHIC]
|
67
|
-
picto_no_emoji = pack_and_join[EXTENDED_PICTOGRAPHIC_NO_EMOJI]
|
9
|
+
autoload :INDEX, File.expand_path('emoji/index', __dir__)
|
10
|
+
|
11
|
+
%w[
|
12
|
+
EMOJI_CHAR EMOJI_CHAR EMOJI_PRESENTATION TEXT_PRESENTATION EMOJI_COMPONENT EMOJI_MODIFIER_BASES
|
13
|
+
EMOJI_MODIFIERS EXTENDED_PICTOGRAPHIC EXTENDED_PICTOGRAPHIC_NO_EMOJI EMOJI_KEYCAPS VALID_REGION_FLAGS
|
14
|
+
VALID_SUBDIVISIONS RECOMMENDED_SUBDIVISION_FLAGS RECOMMENDED_ZWJ_SEQUENCES LIST LIST_REMOVED_KEYS
|
15
|
+
].each do |const_name|
|
16
|
+
autoload const_name, File.expand_path('emoji/lazy_constants', __dir__)
|
68
17
|
end
|
69
18
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
emoji_presentation + "(?!" + pack[TEXT_VARIATION_SELECTOR] + ")" + pack[EMOJI_VARIATION_SELECTOR] + "?",
|
74
|
-
]
|
75
|
-
|
76
|
-
non_component_emoji_presentation_sequence = \
|
77
|
-
"(?!" + emoji_component + ")" + emoji_presentation_sequence
|
78
|
-
|
79
|
-
text_presentation_sequence = \
|
80
|
-
join[
|
81
|
-
pack_and_join[TEXT_PRESENTATION]+ "(?!" + join[emoji_modifier, pack[EMOJI_VARIATION_SELECTOR]] + ")" + pack[TEXT_VARIATION_SELECTOR] + "?",
|
82
|
-
emoji_presentation + pack[TEXT_VARIATION_SELECTOR]
|
83
|
-
]
|
84
|
-
|
85
|
-
emoji_modifier_sequence = \
|
86
|
-
emoji_modifier_base + emoji_modifier
|
87
|
-
|
88
|
-
emoji_keycap_sequence = \
|
89
|
-
pack_and_join[EMOJI_KEYCAPS] + pack[[EMOJI_VARIATION_SELECTOR, EMOJI_KEYCAP_SUFFIX]]
|
90
|
-
|
91
|
-
emoji_valid_flag_sequence = \
|
92
|
-
pack_and_join[VALID_REGION_FLAGS]
|
93
|
-
|
94
|
-
emoji_well_formed_flag_sequence = \
|
95
|
-
"(?:" +
|
96
|
-
pack_and_join[REGIONAL_INDICATORS] +
|
97
|
-
pack_and_join[REGIONAL_INDICATORS] +
|
98
|
-
")"
|
99
|
-
|
100
|
-
emoji_valid_core_sequence = \
|
101
|
-
join[
|
102
|
-
# emoji_character,
|
103
|
-
emoji_keycap_sequence,
|
104
|
-
emoji_modifier_sequence,
|
105
|
-
non_component_emoji_presentation_sequence,
|
106
|
-
emoji_valid_flag_sequence,
|
107
|
-
]
|
108
|
-
|
109
|
-
emoji_well_formed_core_sequence = \
|
110
|
-
join[
|
111
|
-
# emoji_character,
|
112
|
-
emoji_keycap_sequence,
|
113
|
-
emoji_modifier_sequence,
|
114
|
-
non_component_emoji_presentation_sequence,
|
115
|
-
emoji_well_formed_flag_sequence,
|
116
|
-
]
|
117
|
-
|
118
|
-
emoji_rgi_tag_sequence = \
|
119
|
-
pack_and_join[RECOMMENDED_SUBDIVISION_FLAGS]
|
120
|
-
|
121
|
-
emoji_valid_tag_sequence = \
|
122
|
-
"(?:" +
|
123
|
-
pack[EMOJI_TAG_BASE_FLAG] +
|
124
|
-
"(?:" + VALID_SUBDIVISIONS.map{ |sd| Regexp.escape(sd.tr("\u{20}-\u{7E}", "\u{E0020}-\u{E007E}"))}.join("|") + ")" +
|
125
|
-
pack[CANCEL_TAG] +
|
126
|
-
")"
|
127
|
-
|
128
|
-
emoji_well_formed_tag_sequence = \
|
129
|
-
"(?:" +
|
130
|
-
join[
|
131
|
-
non_component_emoji_presentation_sequence,
|
132
|
-
emoji_modifier_sequence,
|
133
|
-
] +
|
134
|
-
pack_and_join[TAGS] + "+" +
|
135
|
-
pack[CANCEL_TAG] +
|
136
|
-
")"
|
137
|
-
|
138
|
-
emoji_rgi_zwj_sequence = \
|
139
|
-
pack_and_join[RECOMMENDED_ZWJ_SEQUENCES]
|
140
|
-
|
141
|
-
emoji_valid_zwj_element = \
|
142
|
-
join[
|
143
|
-
emoji_modifier_sequence,
|
144
|
-
emoji_presentation_sequence,
|
145
|
-
emoji_character,
|
146
|
-
]
|
147
|
-
|
148
|
-
emoji_valid_zwj_sequence = \
|
149
|
-
"(?:" +
|
150
|
-
"(?:" + emoji_valid_zwj_element + pack[ZWJ] + ")+" + emoji_valid_zwj_element +
|
151
|
-
")"
|
152
|
-
|
153
|
-
emoji_rgi_sequence = \
|
154
|
-
join[
|
155
|
-
emoji_rgi_zwj_sequence,
|
156
|
-
emoji_rgi_tag_sequence,
|
157
|
-
emoji_valid_core_sequence,
|
158
|
-
]
|
159
|
-
|
160
|
-
emoji_valid_sequence = \
|
161
|
-
join[
|
162
|
-
emoji_valid_zwj_sequence,
|
163
|
-
emoji_valid_tag_sequence,
|
164
|
-
emoji_valid_core_sequence,
|
165
|
-
]
|
166
|
-
|
167
|
-
emoji_well_formed_sequence = \
|
168
|
-
join[
|
169
|
-
emoji_valid_zwj_sequence,
|
170
|
-
emoji_well_formed_tag_sequence,
|
171
|
-
emoji_well_formed_core_sequence,
|
172
|
-
]
|
173
|
-
|
174
|
-
# Matches basic singleton emoji and all kind of sequences, but restrict zwj and tag sequences to known sequences (rgi)
|
175
|
-
REGEX = Regexp.compile(emoji_rgi_sequence)
|
176
|
-
|
177
|
-
# Matches basic singleton emoji and all kind of valid sequences
|
178
|
-
REGEX_VALID = Regexp.compile(emoji_valid_sequence)
|
179
|
-
|
180
|
-
# Matches basic singleton emoji and all kind of sequences
|
181
|
-
REGEX_WELL_FORMED = Regexp.compile(emoji_well_formed_sequence)
|
182
|
-
|
183
|
-
# Matches only basic single, non-textual emoji
|
184
|
-
# Ignores "components" like modifiers or simple digits
|
185
|
-
REGEX_BASIC = Regexp.compile(
|
186
|
-
"(?!" + emoji_component + ")" + emoji_presentation_sequence
|
19
|
+
generated_constants_dirpath = File.expand_path(
|
20
|
+
EMOJI_VERSION == Unicode::Version.emoji_version ? "emoji/generated_native/" : "emoji/generated/",
|
21
|
+
__dir__
|
187
22
|
)
|
188
23
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
# Matches any emoji-related codepoint - Use with caution (returns partil matches)
|
196
|
-
REGEX_ANY = Regexp.compile(
|
197
|
-
emoji_character
|
198
|
-
)
|
199
|
-
|
200
|
-
# Combined REGEXes which also match for TEXTUAL emoji
|
201
|
-
REGEX_INCLUDE_TEXT = Regexp.union(REGEX, REGEX_TEXT)
|
202
|
-
REGEX_VALID_INCLUDE_TEXT = Regexp.union(REGEX_VALID, REGEX_TEXT)
|
203
|
-
REGEX_WELL_FORMED_INCLUDE_TEXT = Regexp.union(REGEX_WELL_FORMED, REGEX_TEXT)
|
204
|
-
|
205
|
-
REGEX_PICTO = Regexp.compile(
|
206
|
-
picto
|
207
|
-
)
|
208
|
-
|
209
|
-
REGEX_PICTO_NO_EMOJI = Regexp.compile(
|
210
|
-
picto_no_emoji
|
211
|
-
)
|
24
|
+
%w[
|
25
|
+
REGEX REGEX_VALID REGEX_WELL_FORMED REGEX_BASIC REGEX_TEXT REGEX_ANY REGEX_INCLUDE_TEXT
|
26
|
+
REGEX_VALID_INCLUDE_TEXT REGEX_WELL_FORMED_INCLUDE_TEXT REGEX_PICTO REGEX_PICTO_NO_EMOJI
|
27
|
+
].each do |const_name|
|
28
|
+
autoload const_name, File.join(generated_constants_dirpath, const_name.downcase)
|
29
|
+
end
|
212
30
|
|
213
31
|
def self.properties(char)
|
214
32
|
ord = get_codepoint_value(char)
|
data/spec/unicode_emoji_spec.rb
CHANGED
@@ -407,7 +407,7 @@ describe Unicode::Emoji do
|
|
407
407
|
end
|
408
408
|
end
|
409
409
|
|
410
|
-
describe "
|
410
|
+
describe "REGEX_PICTO_NO_EMOJI" do
|
411
411
|
it "matches codepoints with Extended_Pictograph property, but no Emoji property" do
|
412
412
|
matches = "U+1F32D 🌭 HOT DOG, U+203C ‼ DOUBLE EXCLAMATION MARK, U+26E8 ⛨ BLACK CROSS ON SHIELD".scan(Unicode::Emoji::REGEX_PICTO_NO_EMOJI)
|
413
413
|
assert_equal ["⛨"], matches
|