Как сделать последовательный поиск по всему документу?

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

teatral

Участник
Топикстартер
Сообщения
350
Реакции
365
Я хочу сделать кнопку, которая бы искала подчеркнутый текст по всему документу. Чтобы после каждого ее нажатия она искала следующее вхождение. Набросал код, как найти элемент.

Но вот как искать не по всему документу, а от текущей позиции (а по достижению конца документа - сначала) не знаю.
Если бы был просто текст, без доп. элементов - можно было бы по index вычислять текущую позицию и сравнивать с массивом найденного, чтобы выбрать последующую.

Код:
function main()
{
app.findTextPreferences = null;
app.findTextPreferences.underline=true

var myResult=app.activeDocument.findText(true);
if (myResult.length==0)
    {alert("Выделенный текст не найден");return false}

app.findTextPreferences = null;
app.activeWindow.zoom (2053534832) //InDesign.idZoomOptions.idFitPage

OBJ=myResult[0].parentTextFrames[0].parent
        switch (OBJ.constructor.name)
            {case "Spread":  Mypage=OBJ.pages[0]; break;
            case "Page":  Mypage=OBJ; break;
            default:
                {alert ("Неверный тип родительского элемента: "+OBJ.constructor.name); }
            }
app.activeWindow.activePage = Mypage 

myResult[0].select()
}
 
а чем родной диалог Find не подходит?
 
а чем родной диалог Find не подходит?
Я упростил ситуацию. Документ около 350 страниц. В нем редактор ставит несколько типов пометок (неточность, ошибка и т.д.)
Соответсвенно в документе ставятся подчеркивания нескольких разных цветов и несколько кнопок поиска для каждого типа, чтобы менеджеры обрабатывали ситуацию по разным градациям.
(в данном случае будет толстое смещенное подчеркивание, которое выделит целое слово) :
Код:
  Sel=myDocument.selection[0];
    Sel.underline=true
    Sel.underlineWeight=Sel.pointSize +1
    Sel.underlineOffset=-(Sel.pointSize/6)*2.3
    Sel.underlineColor=myDocument.swatches.itemByName(ColName);
 
В общем проблему можно решить так:
Делаю несколько кнопок, каждая из которых настраивает поиск подчеркивания соответствующего цвета в myInDesign.findTextPreferences, а затем вызывает диалог Find командой app.menuActions.itemByID(18694).invoke()
И менеджеру остается только нажимать кнопку "Найти далее"
 
  • Спасибо
Реакции: Skvoznyak
А почему нельзя искать соответствующее подчеркивание штаными скриптовыми средствами, выделять найденный текст, и устанавливать просмотр на нужную страницу с нужным зумом? Без вызова совершенно излишнего окна поиска?
 
Тут же нужно искать с места, где стоит курсор в тексте
Если бы это был простой текст, видимо было бы очень несложно (далее синтаксис VBS)
Делаю FindText - получаю коллекцию результатов
Затем беру myDocument.Selection(1).Paragraphs(1).index и выбираю ближайший к нему из коллекции по object.Paragraphs(1).index

А теперь представим, что в тексте еще таблицы с кучей ячеек, прочие объекты вставлены
Не так просто в таком хитросплетении найти ближайший объект, следующий за позицией курсора
 
Не так просто в таком хитросплетении найти ближайший объект, следующий за позицией курсора
Штатный поиск не выдает ближайший текст, если в документе несколько story.
Найденный текст можно отсортировать по страницам и положению на странице.
 
Штатный поиск не выдает ближайший текст, если в документе несколько story.
Найденный текст можно отсортировать по страницам и положению на странице.
Вероятно так, но мне кажется тоже несколько муторным писать код под такую сортировку
Попробую обкатать на штатном поиске, если уж не будет устраивать, придется выдумывать супервелосипед! ;)
 
Вероятно так, но мне кажется тоже несколько муторным писать код под такую сортировку
По иронии товарища Судьбы сегодня написал фактически то же самое, а именно последовательный поиск текстов, маркированного определенным стилем знака. Тексты могут быть как в основной статье, так и в приякоренных текстовых фреймах. Получился скрипт на 80 строк. Вот такой вот велосипед!
 
Статус
Закрыто для дальнейших ответов.