[ID CC-CC2021] Нарушение последовательности связанных текстовых фреймов

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Коллеги, а не знает ли кто-нибудь такой скриптик, который бы при выделении текстового фрейма анализировал всю цепочку связанных с ним текстовых фреймов и в случае, когда связь идёт не по возрастанию номера страницы, а в обратном направлении, выдавал бы номера этих полос с реверсом?

То есть цепочки типа:
1-2-3-4-5
1-2-4-5
1-4-5, -
считал бы нормальными и не ругался, а вот у таких:
6-7-9-8-10-11
12-13-16-17-14-15-18-19-20
выдавал бы вот эти подчёркнутые номера страниц с реверсом? (А совсем бы хорошо - ещё и указывал диапазон проанализированных страниц.)

Вот нормальная последовательность (третья полоса пропущена: условно там иллюстрация):
01.jpg

А вот эти с реверсом, который надо поймать (красная стрелка):
02.jpg

03.jpg

IDML с напримером прикрепляю.
 

Вложения

  • Безымянный-1.rar
    95.3 КБ · Просм.: 78

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Дополню: последовательность 1-2-2-2-4-7 (то есть когда на одной странице, в данном случае второй, несколько связанных фреймов, как бы они там ни были расположены) - тоже типа "нормальная".
Интересуют только места с уменьшением номера страницы при переходе от фрейма к фрейму.
 

densen

15 лет на форуме
Сообщения
753
Реакции
642
Интересуют только места с уменьшением номера страницы при переходе от фрейма к фрейму.
Ну, вот что-то такое жутко предварительное. Выдает окно с проверенным диапазоном страниц + окно с парами страниц, порядок следования которых нарушен, + красит эти страницы в оранжевый цвет для усиления эффекта.

Не по теме:
Во втором наборе непонятно почему дополнительно цепляет пару страниц 8 и 10, так как не должно.


JavaScript:
// Проверка на правильный порядок следования связанных текстовых фреймов

var myDoc = app.activeDocument;
var myTextFrame = myDoc.selection[0];
var textContainers = myTextFrame.parentStory.textContainers;
var n = textContainers.length - 1;
var textFramesNotInOrder = [];
for (var i = 0; i < n; i++)
    {
    var j = i + 1;
    if (textContainers[i].parentPage.name > textContainers[j].parentPage.name)
        {
        textContainers[i].parentPage.pageColor = UIColors.ORANGE;
        textContainers[j].parentPage.pageColor = UIColors.ORANGE;
        textFramesNotInOrder.push(textContainers[i].parentPage.name);
        textFramesNotInOrder.push(textContainers[j].parentPage.name);
        }
    }
alert ("Проверен диапазон страниц: " + textContainers[0].parentPage.name + "-" + textContainers[n].parentPage.name);
if (textFramesNotInOrder.length == 0)
    {
    alert ("Все текстовые фреймы на своих местах");
    } else
        {
        alert (textFramesNotInOrder);
        }
 
  • Спасибо
Реакции: mnemonix и LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
@densen , спасибо огромное! Лишнее - не проблема, главное - что отлавливает реальные нарушения!!!
Низкий поклон и пять тонн восхищения!!!
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Во втором наборе непонятно почему дополнительно цепляет пару страниц 8 и 10, так как не должно.
Прогон скрипта на разных макетах показал, что такой глюк вылезает там, где меняется значность номера полосы: то есть с 9-й на 10-ю (ну или с 8-й - если с неё идёт переход на 10-ю), с 99-й на 100-ю и т. п.
 
  • Спасибо
Реакции: densen

densen

15 лет на форуме
Сообщения
753
Реакции
642
Прогон скрипта на разных макетах показал, что такой глюк вылезает там, где меняется значность номера полосы: то есть с 9-й на 10-ю (ну или с 8-й - если с неё идёт переход на 10-ю), с 99-й на 100-ю и т. п.
Да как у тебя так всё легко и просто получается-то отыскивать??? '))'
И действительно, теперь всё сразу стало ясно и понятно. Мне ещё многому нужно учиться.
Вот так будет работать без ложных пар:
JavaScript:
// Проверка правильного порядка следования связанных текстовых фреймов
// v2

var textContainers = app.activeDocument.selection[0].parentStory.textContainers;
var n = textContainers.length - 1;
var textFramesNotInOrder = [];
for (var i = 0; i < n; i++)
    {
    var j = i + 1;
    if (Number (textContainers[i].parentPage.name) > Number (textContainers[j].parentPage.name))
        {
        textContainers[i].parentPage.pageColor = UIColors.ORANGE;
        textContainers[j].parentPage.pageColor = UIColors.ORANGE;
        textFramesNotInOrder.push(textContainers[i].parentPage.name);
        textFramesNotInOrder.push(textContainers[j].parentPage.name);
        }
    }
if (textFramesNotInOrder.length == 0)
    {
    alert ("Проверен диапазон страниц: " + textContainers[0].parentPage.name + "-"
    + textContainers[n].parentPage.name + ".\nВсе текстовые фреймы на своих местах.");
    } else
        {
        alert ("Проверен диапазон страниц: " + textContainers[0].parentPage.name + "-"
        + textContainers[n].parentPage.name + ".\nПары страниц, расположенных не по порядку: " + textFramesNotInOrder);
        }
 
  • Спасибо
Реакции: stacco, Elmore и LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Теперь совсем прекрасно! Спасибо!!!
 

densen

15 лет на форуме
Сообщения
753
Реакции
642
В содружестве с @LeonidB достигнута окончательная версия скрипта, максимально интерактивная и быстрая в работе.
1) При выборе текстового фрейма на любой странице проверяет цепочку текстовых фреймов и выводит сообщение:
a) Если в диапазоне страниц, на которых расположена эта цепочка, ошибок не выявлено, то сообщение извещает об этом и переносит фокус активного окна на следующую страницу после этой цепочки для выбора текстового фрейма следующей цепочки и повторного запуска скрипта.
б) Если найдены ошибки, то сообщение пишет о том, на каких страницах диапазона они найдены, и переносит фокус активного окна на вторую ошибочную страницу из первой пары, одновременно активизируя боковую панель "Pages" - "Страницы", на которой можно взять иконку страницы и переместить ее на нужное место в верстке. После этого следует снова выделить фрейм и запустить скрипт. В зависимости от того, если ли еще фреймы с измененным порядком следования в этой цепочке, последует вариант а) или снова б)
2) После проверки последней цепочки скрипт сообщит об успешной проверке всех страниц.
Запуск скрипта без выделенного текстового фрейма приведет к появлению окна с просьбой выделить фрейм.

Скрипт будет работать корректно при любой начальной нумерации страниц, в том числе с файлами из книги (indb).
На первый взгляд он достаточно бесполезен, но в определенных ситуациях пригождается.
 

Вложения

  • Text threads proper order check v3.zip
    962 байт · Просм.: 56
Последнее редактирование:
  • Спасибо
Реакции: Jeine, George и LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
На первый взгляд он достаточно бесполезен, но в определенных ситуациях пригождается.
Печальный опыт нашего издательства (когда одна верстальщица, уже уволенная, запорола несколько книг, переставляя полосные иллюстрации и цепляя при этом текстовые блоки на соседних полосах) заставил нас, к сожалению, проверять теперь все макеты перед сдачей этим чудо-скриптом — гораздо удобнее, чем вручную просматривать цепочки связанных текстовых фреймов на нескольких сотнях страниц...
 
  • Спасибо
Реакции: Jeine, George и densen