您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
99 行
3.2 KiB
99 行
3.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.UIWidgets.ui {
|
|
public class EmojiUtils {
|
|
static Image _image;
|
|
|
|
public static Image image {
|
|
get {
|
|
if (_image == null || _image.texture == null) {
|
|
try {
|
|
_image = new Image(
|
|
Resources.Load<Texture2D>("Emoji")
|
|
);
|
|
}
|
|
catch (Exception) {
|
|
_image = null;
|
|
}
|
|
}
|
|
|
|
return _image;
|
|
}
|
|
}
|
|
|
|
public static readonly Dictionary<int, int> emojiLookupTable = new Dictionary<int, int> {
|
|
{0x1F60A, 0},
|
|
{0x1F60B, 1},
|
|
{0x1F60D, 2},
|
|
{0x1F60E, 3},
|
|
{0x1F600, 4},
|
|
{0x1F601, 5},
|
|
{0x1F602, 6},
|
|
{0x1F603, 7},
|
|
{0x1F604, 8},
|
|
{0x1F605, 9},
|
|
{0x1F606, 10},
|
|
{0x1F61C, 11},
|
|
{0x1F618, 12},
|
|
{0x1F62D, 13},
|
|
{0x1F60C, 14},
|
|
{0x1F61E, 15},
|
|
};
|
|
|
|
public const int rowCount = 4;
|
|
public const int colCount = 4;
|
|
|
|
public static Rect getMinMaxRect(float fontSize, float ascent, float descent) {
|
|
return Rect.fromLTWH(fontSize * 0.05f, descent - fontSize, fontSize * 0.9f, fontSize * 0.9f);
|
|
}
|
|
|
|
public static Rect getUVRect(int code) {
|
|
bool exist = emojiLookupTable.TryGetValue(code, out int index);
|
|
if (exist) {
|
|
return Rect.fromLTWH(
|
|
(index % colCount) * (1.0f / colCount),
|
|
(rowCount - 1 - (index / colCount)) * (1.0f / rowCount),
|
|
1.0f / colCount, 1.0f / rowCount);
|
|
}
|
|
|
|
Debug.LogWarning($"Unrecognized unicode for emoji {code:x}");
|
|
return Rect.fromLTWH(0, 0, 0, 0);
|
|
}
|
|
|
|
public static List<string> splitBySurrogatePair(string text) {
|
|
int start = 0;
|
|
bool? currentSurrogate = null;
|
|
List<string> list = new List<string>();
|
|
|
|
for (int i = 0; i < text.Length; i++) {
|
|
if (i < text.Length - 1 && char.IsHighSurrogate(text[i]) && char.IsLowSurrogate(text[i + 1])) {
|
|
if (currentSurrogate != true) {
|
|
if (i > start) {
|
|
list.Add(text.Substring(start, i - start));
|
|
start = i;
|
|
}
|
|
}
|
|
i++;
|
|
currentSurrogate = true;
|
|
}
|
|
else {
|
|
if (currentSurrogate != false) {
|
|
if (i > start) {
|
|
list.Add(text.Substring(start, i - start));
|
|
start = i;
|
|
}
|
|
}
|
|
currentSurrogate = false;
|
|
}
|
|
}
|
|
|
|
if (start < text.Length) {
|
|
list.Add(text.Substring(start));
|
|
}
|
|
|
|
return list;
|
|
}
|
|
}
|
|
}
|