for (i=2; i< myParagraphStyles.length; i++){

ix = styleApplied.search(myParagraphStyles[i].name); Если стиль не найден (т. е. позиция, найденная методом search, равна -1), то удаляем его и учитываем это в счетчике:

if (ix = -1) {

myParagraphStyles[i].remove(); i-}

}

Последнее обстоятельство необходимо для корректной работы скрипта. По окончании цикла счетчик (i) увеличится на 1, и мы перейдем от первого стиля ко второму. Представьте себе, что первый же существующий в публикации стиль был удален: тогда следующий за ним стиль (второй по счету) займет его место в списке и станет первым, третий - вторым и т. д. по всей цепочке (рис. 6.2). Таким образом, произойдет смещение стилей, и вместо второго перейдем сразу же к третьему стилю (он занял место второго). Чтобы избежать этого, нужно либо компенсировать приращение счетчика, что мы и сделали - либо (кому-то оно покажется даже проще) - начинать проверку с последнего стиля в публикации (for (i=allStyles.length-1; i>=2; i-))

Поскольку нумерация идет с начала, удаление объектов с конца к нарушению нумерации не приведет.

Различия ме>кду двумя вариантами просмотра массива

Рис. 6.2. Различия ме>кду двумя вариантами просмотра массива Перечеркнутые элементы- удаляемые, а серыми стрелками показаны смещающиеся элементы массива (у них происходит смена индексов). Предположим, что удаляется первый элемент массива. Видно, что в случае традиционного подхода (проход начинается с начала массива, верхний рисунок) это приводит к изменению индексов у всех остальных элементов массива; если же используется противоположное направление просмотра (нижний рисунок), то никакого смещения не происходит.

Следующим, допустим, удаляется третий элемент. Как видно изу рисунков, картина повторяется: на верхнем четвертый элемент снова меняет свой индекс, на нижнем же для уже пройденных элементов тоже изменится индекс, но для нас это уже не играет никакого значения, поскольку они уже пройдены и больше обрабатываться не будут (обозначены штриховкой), а вот следующий, важный для нас (с индексом 0), свой индекс снова не меняет- это нам и нужно (текущий элемент обозначен черным треугольником).

6.5. Супермегаметла для публикации

На данный момент мы уже обладаем достаточными знаниями для того, чтобы написать скрипт, удаляющий все лишние объекты, в один универсальный суперскрипт.

Лишними будем считать:

пустые фреймы;

пустые абзацы (в которых нет ни одного символа, а также имеющие только пробелы или табуляторы);

неиспользуемые стили;

неиспользуемые образцы цвета (swatches);

объекты, расположенные полностью на монтажном столе.

Таким образом, по своей функциональности скрипт будет являться, по современному, этакой супермегаметлой (листинг 6.9).

| Листинг 6.9. Удаление лишних объектов

myDocument = арр.activeDocument;

myAllItems = арр.activeDocument.allPageltems;

myParagraphStyles =app.activeDocument.paragraphStyles ;

// Параметры поиска:

// для пустых фреймов searchString_l = "/[a-Za-Я]/"


⇐ вернуться назад | | далее ⇒