Сбиваются индексы из-за иконок Emoji
Всем привет!
Вывожу текст в TextField с хэштегами и иконками. Иконки emoji конечно же не выводятся - они мне не нужны. Задача: все хэштеги в тексте подсветить определенным цветом. Код AS3:
Код AS3:
В общем, решил я перед всем этим делом очищать текст от всех иконок... Вот, например, хочу удалить из текста иконки с котом, которому соответствует unicode код u+1F408, но что-то никак не выходит... Код AS3:
|
djken - понимаю не лучший вариант, но я бы сплитом удалил нафиг, хз как это скажется на оптимихации, но думаю не сильно убьет ваш чат.
Код AS3:
|
Вложений: 1
На PHP, например, для нахождения иконкок emoji справляется регулярка:
PHP код:
Добавлено через 24 минуты Интересно, почему, во Flash IDE в swf файле выводятся emoji ? Код AS3:
А во FlashBuilder только текст... |
Вложений: 1
Ура! Проблему решил!
Причина была вот в чем: многие иконки emoji состоят из суррогатных пар - например, \ud83d\ude0d. Это 2 символа. Но регулярка почему-то засчитывает эту комбинацию как один символ. В итоге все найденные индексы сдвинуты. Но если воспользоваться методом length у класса String, то длина текста выводится верно. Код AS3:
В итоге все хэштеги нахожу через RegExp и запоминаю в массив, а потом прохожусь по этому массиву и ищу эти найденные хэштеги в тексте с помощью indexOf, записывая индексы начала и конца хэштега. Код AS3:
Вложение 33203 |
Прикольно, не знал, что штатный текстфилд без танцев с бубном умеет смайлы рисовать. А откуда растр берется? Ось предоставляет? Так только с системными шрифтами можно?
|
undefined, если ты про растр, который на фоне - тоже в скрипте прописан, просто не вывел в примере.
А смайлы и не надеялся выводить, т.к. знал что это трудоемко - но случайно заметил что программным текстфилдом отрисовались. При чем нормально позиционируются, выделяются вместе с текстом. Шрифт не системный - PartnerCondensed. С другими шрифтами тоже работает. |
Вложений: 1
ссори.. проверил сейчас - с заранее созданными текстовыми полями на сцене тоже все работает )
Вложение 33204 Теперь понял почему до этого не выводились смайлы. Смайл можно записать в виде суррогатной пары \uxxxx\uxxxx , либо в общем виде \uxxxxx. Например, иконку "fire / огонь" можно записать так \u1F525 либо суррогатами \udd25\ud83d. Вторым способом выведет, первым - нет. В этом не особо разбираюсь, но думаю связано с размером кодировки - не умеет работать с этим диапазоном наверно.. Кому интересно, тут находил формулы преобразования в суррогатные пары: http://as3coder.blogspot.ru/2014/08/emoji.html |
Цитата:
|
Текст в обычном текстфилде, шрифт не внедренный, значит используется системный рендер. Видимо, ОС и подставляет. Не факт, что будет работать на других осях.
|
Да, проверил на другой машине с Виндой - там вместо смайлов пустые квадраты
|
Часовой пояс GMT +4, время: 18:58. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.