FairyGUI.TextField.HandleEmojies C# (CSharp) Method

HandleEmojies() private method

private HandleEmojies ( ) : void
return void
        void HandleEmojies()
        {
            int count = _elements.Count;
            Emoji gchar;
            int i = 0;
            int offset;
            int textLength;
            uint key;
            int rm;

            while (i < count)
            {
                HtmlElement element = _elements[i];
                if (element.type == HtmlElementType.Text)
                {
                    textLength = element.text.Length;
                    offset = 0;
                    while (offset < textLength)
                    {
                        char ch = element.text[offset];
                        if (char.IsHighSurrogate(ch) && offset < textLength - 1)
                        {
                            rm = 2;
                            key = ((uint)element.text[offset + 1] & 0x03FF) + ((((uint)ch & 0x03FF) + 0x40) << 10);
                        }
                        else
                        {
                            rm = 1;
                            key = (uint)ch;
                        }
                        if (_richTextField.emojies.TryGetValue(key, out gchar))
                        {
                            HtmlElement imageElement = HtmlElement.GetElement(HtmlElementType.Image);
                            imageElement.Set("src", gchar.url);
                            if (gchar.width != 0)
                                imageElement.Set("width", gchar.width);
                            if (gchar.height != 0)
                                imageElement.Set("height", gchar.height);

                            if (textLength <= 1)
                            {
                                _elements.RemoveAt(i);
                                HtmlElement.ReturnElement(element);
                                _elements.Insert(i, imageElement);
                                break;
                            }
                            else if (offset == 0)
                            {
                                element.text = element.text.Substring(rm);
                                _elements.Insert(i, imageElement);

                                count++;
                                textLength -= rm;
                                offset = 0;
                                i++;
                            }
                            else if (offset == textLength - rm)
                            {
                                element.text = element.text.Substring(0, offset);
                                _elements.Insert(i + 1, imageElement);

                                count++;
                                i++;
                                break;
                            }
                            else
                            {
                                HtmlElement element2 = HtmlElement.GetElement(HtmlElementType.Text);
                                element2.text = element.text.Substring(offset + rm);
                                element2.format.CopyFrom(element.format);
                                _elements.Insert(i + 1, element2);

                                element.text = element.text.Substring(0, offset);
                                _elements.Insert(i + 1, imageElement);

                                count += 2;
                                textLength = textLength - offset - rm;
                                offset = 0;
                                i += 2;
                                element = element2;
                            }
                        }
                        else
                            offset++;
                    }
                }
                i++;
            }
        }