ITextCommandPreProcess && ITextCommandPostProcess

  • Автор темы Автор темы ssyabr
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

ssyabr

Участник
Топикстартер
Сообщения
48
Реакции
0
Всем привет,

кто-то упражнялся уже с указанными интерфейсами? Как обычно самое вкусное в SDK Samples не входит...
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Естественно в первую очередь все пересмотрел. Но нигде нет законченного примера!
Ладно будем пробовать...
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Бери любой плаг, где используется ServiceProvider и ServiceResponder и вперед и с песней.
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Да с провайдерами все понятно :-) , интересует реализация самих интерфейсов. А именно их взаимодействие. Ставить опыты, как ты сам знаешь нет времени.
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Блин пока удалось выяснить следующее:

Из реализации ITextCommandPreProcess:
- не стоит изменять текстовую модель.
- не стоит изменять переданный начальный текстовый индекс
- можно изменять text span

Из реализации ITextCommandPostProcess:
- можно ставить комманды изменяющие текстовую модель в очередь(scheduled commands)

Исследования продолжаются.

ЗЫ Чего то не видно активности, со стороны других участников форума.
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

ssyabr сказал(а):
Из реализации ITextCommandPreProcess:
- не стоит изменять текстовую модель.
Или ты что-то не то делаешь, или одно из двух.

Покажи лучше как ты меняешь текстовую модель тут ITextCommandPreProcess::InsertPreProcess
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Strizh сказал(а):
Или ты что-то не то делаешь, или одно из двух.

Тебя как обычно, необходимо убеждать... Ладно поехали :-)))
Вот читай, что Dirk Becker пишет(последний пост):
http://www.adobeforums.com/cgi-bin/webx?13@907.M11fgKAAhiB.10@.3bb727eb/0
Тоесть я не первый, кто на эти грабли наступает. Непонятно только, почему это не задукоментированно адобом. Кстати вот кусок из личной переписки с Ferdinand Schwörer:
Ändern Sie nicht das TextModel während dem pre-/post-processing! Das gilt insbesondere für Änderungen, die Auswirkungen auf Strands haben, wie Zeichen einfügen und löschen. Meine Untersuchungen haben ergeben, dass Änderungen (in begrenztem Umfang) der Textattribute funktionieren. Adobe hat aber darauf hingewiesen, dass es sich hierbei eher um „Glück“ handele. Alle Manipulationen sollten durch „scheduled commands“ erledigt werden – das ist aber leider nicht immer möglich.
В общем ему в Adobe дали понять, что НЕЛЬЗЯ делать изменения, которые могут повлиять на Strands. Вставка, удаление текста а также применение стилей, как раз и влияют на Strands. В общем полная Ж.

Strizh сказал(а):
Покажи лучше как ты меняешь текстовую модель тут ITextCommandPreProcess::InsertPreProcess

Командами вестимо, как еще :-) А именно используются : вставка-удаление символов, Apply/Clear для аттрибутов.
Возьми не поленись сделай следующее: Копируй текст в буфер, потом выдели другой кусок текста и сделай Paste ну и траccировку (Pre/Post)Process. Потом поговорим более конкретнее, если будет желание.
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Ладно, приду домой сегодня, и реализую еще PostProcess, и посмотрим чего и куда.
Но вариант с возвратом пустой WideString из метода InsertPreProcess прокатывал, и ничего не вводилось в текущую модель.
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Да, возврат пустой WideString из метода InsertPreProcess работает, но я говорю о изменении текстовой модели в коде метода. Тоесть например при удалении пользователем текста [0, 100] я хочу обрабатывать эту операцию, и не позволить удалить символы в позиции например 20, 70. Тоесть заменить пользовательскую операцию удаления DeleteCmd(0, 100) на последовательность комманд:
DeleteCmd(0, 19);
DeleteCmd(21, 69);
DeleteCmd(71, 100);
Сечешь?
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Попробуй из DeletePreProcess вернуть kFalse/kTrue, а из DeletePostProcess выполнять отложенные команды, должно по идее помочь!
 
Ответ: ITextCommandPreProcess && ITextCommandPostProcess

Мысль интерестная, но... отложенные команды из PostProcess увы не спасут, из-за того, что:
- например при Copy&&Paste, InDessign вызывает неявно Delete, тоесть при отмене(Undo), вначале отменится Paste, а только потом Delete. Мне надо все в одном флаконе... (Что-ли кэшировать Paste, а потом к нему джоиниться?)
- если я в PreProcess измею входящие параметры, то в PostProcess приходят они же, тоесть уже модифицированные, и незнаю какие были оригинальные... видимо прийдется кэшировать старые параметры, что тоже по идее не всегда правильно.

ЗЫ в общем идей как много, осталось только отсечь неправильные...
 
Статус
Закрыто для дальнейших ответов.