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

dooser

Топикстартер
15 лет на форуме
Сообщения
443
Реакции
102
Добрый день, уважаемые форумчане!
Есть скриптик который мне написал господин 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

20 лет на форуме
Сообщения
1 989
Реакции
1 213
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();
}
 
  • Спасибо
Реакции: catpaw и dooser

dooser

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

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
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();
}
 
  • Спасибо
Реакции: catpaw и dooser

dooser

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

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

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
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();
}
 
  • Спасибо
Реакции: catpaw и dooser

dooser

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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А если так
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();
}
 
  • Спасибо
Реакции: Haka3aTe/|b и dooser

dooser

Топикстартер
15 лет на форуме
Сообщения
443
Реакции
102
'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 лет на форуме
Сообщения
443
Реакции
102
_MBK_ В скрипите в последней строчке только скобочки одной не хватает :)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Да. Пишу с блокнота '))'
 

dooser

Топикстартер
15 лет на форуме
Сообщения
443
Реакции
102
Если вот такой кусок кода добавить в скрипт — не «прокатывает»:
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_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Я в грепе не сильный помощник, но, как минимум, у вас обратные слэши \ не экранированы \\ 'hmmm'
 
  • Спасибо
Реакции: dooser

dooser

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

dooser

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