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++;
}
}