Показать сообщение отдельно
Старый 08.02.2018, 20:39
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question Сбиваются индексы из-за иконок Emoji

Всем привет!

Вывожу текст в TextField с хэштегами и иконками. Иконки emoji конечно же не выводятся - они мне не нужны.
Задача: все хэштеги в тексте подсветить определенным цветом.

Код AS3:
var txt:TextField = new TextField();
txt.autoSize = TextFieldAutoSize.LEFT;
txt.text = "Любой текст с #хэштегами для #теста. Any text with #hashtags for the #test";
addChild(txt);
 
var fmt:TextFormat = new TextFormat();
fmt.color = 0x0033CC;
 
var arr:Array = getPosHashtags(txt.text);
for (var i in arr)
	txt.setTextFormat(fmt, arr[i][0], arr[i][1]);
 
function getPosHashtags(str:String):Array
{
	var arr:Array = [];
	var pattern:RegExp = /#[\S]*/g;
	var result:Object = pattern.exec(str);
 
	while (result != null)
	{
		arr.push([result.index, result.index + result[0].length]);
		result = pattern.exec(str);
	}
 
	return arr;
}
Проблема: если в тексте есть иконки emoji, то подсветка хэштегов съезжает...

Код AS3:
txt.text = "Любой текст с #хэштегами и котиками 🐈🐈 для #теста. Any text with #hashtags 😟 for the #test";
Как я догадываюсь, setTextFormat не учитывает скрытые символы в текстовом поле - из-за этого и происходит такой сдвиг...

В общем, решил я перед всем этим делом очищать текст от всех иконок...
Вот, например, хочу удалить из текста иконки с котом, которому соответствует unicode код u+1F408, но что-то никак не выходит...

Код AS3:
var str:String = "Тут иконки с котиками 🐈🐈 Попробуй-ка их удалить...";
trace("\t", s1); // с котами
 
var re:RegExp = new RegExp("([" + gen(0x1F408) + "])", "gi");
str = str.replace(re, "");
trace("\t", str); // ожидаю текст без котов, но увы..
 
function gen (obj:Object):String
{
	return String.fromCharCode(obj);
}
Плз, помогите советом
__________________
кто не отвечает, того garbage collector забирает