Н-да, пока я был на AURU2015, тут, оказывается, такие интересные штуки творились
Несколько вопросов по коду:
1. А если пользователь в ответ на запрос нажмет правую кнопку или Esc?
2. Почему создается текст, а удаляется примитив, который был перед ним? Там же может быть все что угодно...
3. Не учитывается вариант многострочного атрибута
4. Не учитывается вариант установленного выравнивания атрибута
5. Не учитываются варианты заблокированных / замороженных слоев
Я бы код писал по другим принципам:
- отдельная универсальная функция вставки блока. Используется при вставке block_name
- получение указателя на нужный атрибут
- создание анонимного блока, внутри которого только однострочный / многострочный текст
- используя ту самую универсальную функцию, вставляем анонимный блок по запросу пользователя. Если блок был вставлен, то получаем у него точку вставки
- полученному атрибуту устанавливаем точку вставки и / или выравнивания атрибута
- удаление вставки анонимного блока.