[ID CC2019] Доработать маленький скриптик

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
Добрый день, уважаемые форумчане!
Есть скриптик который мне написал господин Feininger — чудесно работает для моей задачи по удалению «лишних» страниц из этой темы [ID CC2019] Скрипт для удаления страниц где имеется overset text:
Код:
for (var k = app.activeDocument.pages.length-1; k >= 0; k--)
{
    var page = app.activeDocument.pages[k];
    var overflowExist = false;
    for (var i = 0; i < page.textFrames.length; i++)
    {
         if (page.textFrames[i].overflows == true) overflowExist = true;
    }
    if (overflowExist == true) page.remove();
}
Хотелось бы его расширить его функциональность такой функцией — удалить потом и те страницы, где в стиле Paragraph Style 1 не встречается символ "\r" (конец параграфа).
Не смог бы кто-нибудь помочь с доработкой?
 

Oleg Butrin

15 лет на форуме
Сообщения
1 702
Оценка реакций
952
JavaScript:
for (var k = app.activeDocument.pages.length-1; k >= 0; k--)
{
    var page = app.activeDocument.pages[k];
    var overflowExist = false;
    var containsLineEnd = false;
    for (var i = 0; i < page.textFrames.length; i++)
    {
         if (page.textFrames[i].overflows == true) overflowExist = true;
         if (page.textFrames[i].contents.toString().indexOf('\r') != -1) containsLineEnd = true;
    }
    if (overflowExist || !containsLineEnd) page.remove();
}
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
Спасибо! Но вот нужно чтобы такого символа не было именно в стиле параграфа с названием «Paragraph Style 1» (иначе, логично, удаляются все страницы без исключения :) )
 

Oleg Butrin

15 лет на форуме
Сообщения
1 702
Оценка реакций
952
JavaScript:
for (var k = app.activeDocument.pages.length-1; k >= 0; k--)
{
    var page = app.activeDocument.pages[k];
    var overflowExist = false;
    var containsLineEnd = false;
    for (var i = 0; i < page.textFrames.length; i++)
    {
        var tf = page.textFrames[i];
        if (tf.overflows == true) overflowExist = true;
        for (var p = 0; p < tf.paragraphs.length; p++) {
            var para = tf.paragraphs[p];
            if (para.appliedParagraphStyle.name == 'Paragraph Style 1' &&
                para.parentTextFrames[para.parentTextFrames.length - 1] == tf) {
                containsLineEnd = true;
            }
        }
    }
    if (overflowExist || !containsLineEnd) page.remove();
}
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
Почти! Почти! Что-то с логикой условия у меня не совсем так. Можно ли поменять его на такое: «УДАЛЯТЬ страницы с именем стиля 'Paragraph Style 1' НЕ СОДЕРЖАЩИЕ в тексте стиля 'Paragraph Style 1' запятую (',')»

Не по теме:
Прошу прощения, видимо ввёл в заблуждение с условием
 
Последнее редактирование:

Oleg Butrin

15 лет на форуме
Сообщения
1 702
Оценка реакций
952
JavaScript:
for (var k = app.activeDocument.pages.length-1; k >= 0; k--)
{
    var page = app.activeDocument.pages[k];
    var overflowExist = false;
    var containsComma = false;
    for (var i = 0; i < page.textFrames.length; i++)
    {
        var tf = page.textFrames[i];
        if (tf.overflows == true) overflowExist = true;
        var str = tf.contents;
        for (var m = 0; m < str.length; m++) {
            if (str[m] == ',' && tf.characters[m].appliedParagraphStyle.name == 'Paragraph Style 1') {
                var containsComma = true;
            }
        }
    }
    if (overflowExist || !containsComma) page.remove();
}
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
СПАСИБО! Но при таком условии после работы скрипта удаляются ещё и страницы с текстом оформленным стилем параграфа 'Paragraph Style 2'(именно такое название) :( А из хотелось бы их как раз оставить :(
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
27 048
Оценка реакций
8 998
А если так
JavaScript:
for (var k = app.activeDocument.pages.length-1; k >= 0; k--)
{
    var page = app.activeDocument.pages[k];
    var overflowExist = false;
    var containsComma = false;
    var containsP1 = false;
    for (var i = 0; i < page.textFrames.length; i++)
    {
        var tf = page.textFrames[i];
        if (tf.overflows == true) overflowExist = true;
        var str = tf.contents;
        for (var m = 0; m < str.length; m++) {
            if (tf.characters[m].appliedParagraphStyle.name == 'Paragraph Style 1') containsP1 = true;
            if (str[m] == ',' && tf.characters[m].appliedParagraphStyle.name == 'Paragraph Style 1') {
               containsComma = true;
            }
        }
    }
    if (overflowExist || (containsP1 && (!containsComma)) page.remove();
}
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
'dans))'В точку! Работает!
Ещё бы вот такой GREP прикрутить в конце:
grep {findWhat:"(\w+\s(\w+\s\w+)"} {appliedParagrphStyle:"Paragraph Style 2"} {changeTo:"$1\n$2"} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}
Будет закончено решение для задачи

Не по теме:
Если интересно, могу всю задачу с решением опубликовать в ветке про DataMerge, вдруг кто-то подобное что-то будет делать
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
_MBK_ В скрипите в последней строчке только скобочки одной не хватает :)
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
27 048
Оценка реакций
8 998
Да. Пишу с блокнота '))'
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
Если вот такой кусок кода добавить в скрипт — не «прокатывает»:
JavaScript:
var myDoc = app.activeDocument;
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//Set the find options.
app.findChangeGrepOptions.includeFootnotes = false;
app.findChangeGrepOptions.includeHiddenLayers = false;
app.findChangeGrepOptions.includeLockedLayersForFind = false;
app.findChangeGrepOptions.includeLockedStoriesForFind = false;
app.findChangeGrepOptions.includeMasterPages = false;

app.findGrepPreferences.findWhat = "(\w+\s)(\w+\s\w+)";
app.findGrepPreferences.appliedParagraphStyle = myDoc.paragraphStyles.item("Paragraph Style 2");
app.changeGrepPreferences.changeTo = "$1\n$2";
myDoc.changeGrep();
'otbline'

ЧЯДНТ?
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
27 048
Оценка реакций
8 998
Я в грепе не сильный помощник, но, как минимум, у вас обратные слэши \ не экранированы \\ 'hmmm'
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
'alil' ТОЧНО! ВСЁ РАБОТАЕТ!
 

dooser

Топикстартер
15 лет на форуме
Сообщения
365
Оценка реакций
88
Можно закрыть тему! Всем огромное спасибо!