示例#1
0
    /// <summary>
    /// codePoint是否是表情字符
    /// 参考java的codePointAt
    /// </summary>
    public static bool isEmojiCharacter(int codePoint)
    {
        object obj = CustomerUtil.EmojiEventInvoke("isEmojiCharacter", codePoint);

        if (obj != null)
        {
            bool result = obj is bool && (bool)obj;
            if (result)
            {
                return(true);       //lua判断是表情字符,那么就是表情字符。否则继续下面的判断
            }
        }
        return((codePoint >= 0x2600 && codePoint <= 0x27BF) || // 杂项符号与符号字体
               codePoint == 0x303D ||
               codePoint == 0x2049 ||
               codePoint == 0x203C ||
               (codePoint >= 0x2000 && codePoint <= 0x200F) || //
               (codePoint >= 0x2028 && codePoint <= 0x202F) || //
               codePoint == 0x205F ||  //
               (codePoint >= 0x2065 && codePoint <= 0x206F)    //
                                                               /* 标点符号占用区域 */
               || (codePoint >= 0x2100 && codePoint <= 0x214F) ||// 字母符号
               (codePoint >= 0x2300 && codePoint <= 0x23FF) || // 各种技术符号
               (codePoint >= 0x2B00 && codePoint <= 0x2BFF) || // 箭头A
               (codePoint >= 0x2900 && codePoint <= 0x297F) || // 箭头B
               (codePoint >= 0x3200 && codePoint <= 0x32FF) || // 中文符号
               (codePoint >= 0xD800 && codePoint <= 0xDFFF) || // 高低位替代符保留区域
               (codePoint >= 0xE000 && codePoint <= 0xF8FF) || // 私有保留区域
               (codePoint >= 0xFE00 && codePoint <= 0xFE0F) || // 变异选择器
               codePoint >= 0x10000);    // Plane在第二平面以上的,char都不可以存,全部都转
    }
示例#2
0
 static int QPYX_EmojiEventInvoke_YXQP(IntPtr L_YXQP)
 {
     try
     {
         ToLua.CheckArgsCount(L_YXQP, 2);
         string QPYX_arg0_YXQP = ToLua.CheckString(L_YXQP, 1);
         object QPYX_arg1_YXQP = ToLua.ToVarObject(L_YXQP, 2);
         object QPYX_o_YXQP    = CustomerUtil.EmojiEventInvoke(QPYX_arg0_YXQP, QPYX_arg1_YXQP);
         ToLua.Push(L_YXQP, QPYX_o_YXQP);
         return(1);
     }
     catch (Exception e_YXQP)                {
         return(LuaDLL.toluaL_exception(L_YXQP, e_YXQP));
     }
 }
示例#3
0
    /// <summary>
    ///
    /// </summary>
    private static bool isGetEmoji(int codePoint, int nextCodePoint, int curEmojiCount)
    {
        object obj = CustomerUtil.EmojiEventInvoke("isGetEmoji", codePoint);

        if (obj != null)
        {
            bool result = obj is bool && (bool)obj;
            if (result)
            {
                return(true);       //lua判断是,那么就是。否则继续下面的判断
            }
        }
        if (curEmojiCount == 1)
        {
            if (isEndCodePoint(nextCodePoint))
            {
                return(false);//下一个表情是结尾的
            }
            if (nextCodePoint == 0x200d || nextCodePoint == 0x2764)
            {
                return(false);//下一个表情符必须要
            }
            if (isFlag(codePoint))
            {
                return(false);//国旗符一定是两个组成
            }
            return(true);
        }
        if (curEmojiCount == 2)
        {
            if (isFlag(codePoint))
            {
                return(true);
            }
            if (isEndCodePoint(codePoint))
            {
                return(true);
            }
            if (codePoint == 0x200d || codePoint == 0x2764)
            {
                return(false);
            }
        }
        //这里就一直往下加
        return(false);
    }
示例#4
0
    /// <summary>
    /// 是否是国旗表情,国旗占两位
    /// </summary>
    /// <returns></returns>
    private static bool isFlag(int codePoint)
    {
        object obj = CustomerUtil.EmojiEventInvoke("isFlag", codePoint);

        if (obj != null)
        {
            bool result = obj is bool && (bool)obj;
            if (result)
            {
                return(true);       //lua判断是,那么就是。否则继续下面的判断
            }
        }
        if (codePoint >= 0x1f1e0 && codePoint <= 0x1f1ff)
        {
            return(true);
        }
        return(false);
    }
示例#5
0
    /// <summary>
    /// 将表情字符串转成unicode(result eg1:1f60a(微笑) eg2:1f1e8_1f1f3(国旗表情))
    /// 结果与表情图片相对应
    /// </summary>
    public static string toUnicode(string s)
    {
        object obj = CustomerUtil.EmojiEventInvoke("toUnicode", s);

        if (obj != null && obj is string)
        {
            string result = (string)obj;
            if (!string.IsNullOrEmpty(result))
            {
                return(result);                              //lua层能返回结果,那么以lua为准
            }
        }
        else
        {
            Debug.LogWarning("toUnicode call failure");
        }
        var bytes         = Encoding.UTF32.GetBytes(s);
        var stringBuilder = new StringBuilder();
        List <List <byte> > resultList = new List <List <byte> >();
        List <byte>         tempList   = new List <byte>();

        for (int i = 0, length = bytes.Length; i < length; i++)
        {
            tempList.Add(bytes[i]);
            if (tempList.Count == 4)
            {
                tempList.Reverse();
                resultList.Add(tempList);
                tempList = new List <byte>();
            }
        }
        for (int i = 0, length = resultList.Count; i < length; i++)
        {
            List <byte> elist   = resultList[i];
            bool        isFirst = false;
            for (int j = 0; j < elist.Count; j++)
            {
                string b = elist[j].ToString("x2");
                if (b == "00" && j < 2)
                {
                    continue;
                }
                if (!isFirst)
                {
                    isFirst = true;
                    if (j < 2)
                    {
                        b = elist[j].ToString("x");
                    }
                    stringBuilder.Append(b);
                }
                else
                {
                    stringBuilder.Append(b);
                }
                //Debug.Log(b);
            }
            if (isFirst && i != length - 1)
            {
                stringBuilder.Append("_");
            }
        }
        return(stringBuilder.ToString().Replace("_0000", ""));
    }