Skip to content

Commit

Permalink
Support emoji in range 0x231A..0x23FF
Browse files Browse the repository at this point in the history
  • Loading branch information
YvesCheung committed Sep 20, 2022
1 parent fe97700 commit 9dc32c2
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ object EmojiReader {
*/
private fun isEmojiCodePoint(codePoint: Int) =
(codePoint in 0x1F200..0x1FFFF) ||
(codePoint in 0x231A..0x23FF) ||
(codePoint in 0x2460..0x24FF) || //带圈或括号的字母数字
(codePoint in 0x2500..0x2FFF) || //制表符/方块元素/几何图形/杂项/印刷/追加箭头/表意文字
(codePoint in 0x3200..0x32FF) || //带圈中日韩字母月份
Expand Down
35 changes: 32 additions & 3 deletions lib/src/commonTest/kotlin/com/yy/mobile/emoji/AssertEmojiTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import kotlin.test.assertTrue
/**
* @author YvesCheung
* 2019/7/23
*
* https://emojipedia.org/emoji/
*/
class AssertEmojiTest {

Expand Down Expand Up @@ -45,7 +43,7 @@ class AssertEmojiTest {
"孔雀东南飞,五里一徘徊。“十三能织素,十四学裁衣,十五弹箜篌,十六诵诗书。十七为君妇,心中常苦悲。" +
"君既为府吏,守节情不移,贱妾留空房,相见常日稀。鸡鸣入机织,夜夜不得息。三日断五匹,大人故嫌迟。" +
"非为织作迟,君家妇难为!妾不堪驱使,徒留无所施,便可白公姥,及时相遣归。”"
for (idx in 0 until str.length) {
for (idx in str.indices) {
Assert.assertFalse(
"index of $idx is ${str[idx]}",
EmojiReader.isEmojiOfCharIndex(str, idx)
Expand Down Expand Up @@ -349,6 +347,37 @@ class AssertEmojiTest {
println()
}

/**
* 23xx段的Emoji
* https://emojipedia.org/emoji/
*/
@Test
fun startsWith23xxEmoji() {
val cases = listOf(
intArrayOf(0x231B), //Hourglass Done
intArrayOf(0x23F3), //Hourglass Not Done
intArrayOf(0x231A), //Watch
intArrayOf(0x23F0), //Alarm Clock
intArrayOf(0x23F1, 0xFE0F), //Stopwatch
intArrayOf(0x23F2, 0xFE0F), //Timer Clock
intArrayOf(0x2328, 0xFE0F), //Keyboard
intArrayOf(0x23EF, 0xFE0F), //Play or Pause Button
intArrayOf(0x23E9), //Fast-Forward Button
intArrayOf(0x23FA, 0xFE0F) //Record Button
)
cases.forEach { codePoint ->
val emoji = codePoint.encodeString()
print(emoji)
for (idx in emoji.indices) {
Assert.assertTrue(
"index of $idx is ${emoji[idx]}",
EmojiReader.isEmojiOfCharIndex(emoji, idx)
)
}
}
println()
}

private fun assertEmoji(vararg codePoint: Int) {
val emoji = codePoint.encodeString()
assertTrue(EmojiReader.isEmojiOfCharIndex(emoji, 0))
Expand Down
12 changes: 5 additions & 7 deletions lib/src/commonTest/kotlin/com/yy/mobile/emoji/LengthEmojiTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ class LengthEmojiTest {
intArrayOf(0x1F575, 0xFE0F, 0x200D, 0x2640, 0xFE0F),
intArrayOf(0x26F9, 0xFE0F, 0x200D, 0x2642, 0xFE0F),
intArrayOf(0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468),
intArrayOf(0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466)
intArrayOf(0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466),
intArrayOf(0x1F636, 0x200D, 0x1F32B, 0xFE0F) //face in clouds
)

private val flagEmojiSample = listOf(
Expand All @@ -37,25 +38,22 @@ class LengthEmojiTest {

@Test
fun singleEmojiTest() {

val str = singleEmojiSample.encodeString()

println(str)
Assert.assertEquals(EmojiReader.getTextLength(str), singleEmojiSample.size)
}

@Test
fun flagEmojiTest() {

val str = flagEmojiSample.encodeString()

println(str)
Assert.assertEquals(EmojiReader.getTextLength(str), flagEmojiSample.size)
}

@Test
fun composeEmojiTest() {

val str = composeEmojiSample.encodeString()

println(str)
Assert.assertEquals(EmojiReader.getTextLength(str), composeEmojiSample.size)
}

Expand Down

1 comment on commit 9dc32c2

@vercel
Copy link

@vercel vercel bot commented on 9dc32c2 Sep 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

emoji-reader – ./

emoji-reader-yvescheung.vercel.app
emoji-reader-git-master-yvescheung.vercel.app
emoji-reader.vercel.app

Please sign in to comment.