Возникли проблемы с интерпретацией цветовых кодов ansi

Я провел выходные, работая над личным проектом, и застрял здесь. В общем, мне нужно повернуть

[0;37m[33m o0==============================~o[0]o~==============================0o

в

о0==============================~о[0]о~============ ==================0o (только этот текст теперь будет желтым)

Используя функцию регулярных выражений какао, я смог найти и зафиксировать «[0;», «37m» и «[33m» по отдельности. "0;" указывает на желание сервера, чтобы все предыдущие стили текста были удалены и возвращены к значениям по умолчанию, то есть к черному фону и белому тексту. «37m» означает, что сервер хотел бы, чтобы текст был окрашен в белый цвет (не уверен, почему это здесь, но это то, что сервер отправляет). Последнее «33m» указывает, что сервер хочет, чтобы текст был окрашен в желтый цвет. Мой код правильно находит, удаляет и идентифицирует запрошенные изменения цвета в строке, но у меня возникают проблемы с применением этих цветов к создаваемой NSAttributedString. Диапазоны, предоставленные при поиске регулярных выражений, перестают быть действительными, как только я удаляю последовательности цветов в окончательной строке, каков эффективный способ выяснить, где изменения цвета должны быть применены к лишенной строке? В этом примере все цветовые коды указаны в начале, но в других случаях цветовые коды могут быть в середине, чтобы строка менял цвет посередине строки. NSAttributedString может справиться с этим, если бы я мог определить правильные диапазоны для назначения запрошенных цветов.


person Samuel Goodwin    schedule 29.05.2011    source источник
comment
Вы не можете просто обрабатывать каждую последовательность CSI по очереди?   -  person Ignacio Vazquez-Abrams    schedule 30.05.2011
comment
Я ответил на свой вопрос. Не знаю, как закрыть этот вопрос, но он больше не актуален. Я опубликую окончательный результат, как только все заработает.   -  person Samuel Goodwin    schedule 31.05.2011
comment
@Samuel: Опубликуйте ответ ниже и примите его. это должно сделать это.   -  person James Wiseman    schedule 15.07.2011
comment
Оказывается, мое решение включает код NDA, поэтому я не могу публиковать его публично, пока не выйдет Lion =/   -  person Samuel Goodwin    schedule 18.07.2011


Ответы (1)


Теперь, когда Лев отсутствует, я могу опубликовать ответ. По сути, вы можете использовать причудливые возможности регулярных выражений в Lion, чтобы выяснить, что происходит. Код для этого (который нуждается в рефакторинге, но, по крайней мере, он работает) можно найти здесь:

https://github.com/sgoodwin/Turbo-Mud/blob/experiment/Turbo%20Mud/Turbo_MudAppDelegate.m

person Samuel Goodwin    schedule 11.08.2011