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

  • Автор темы Автор темы dooser
  • Дата начала Дата начала

dooser

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

Не по теме:
Прошу прощения, видимо ввёл в заблуждение с условием
 
Последнее редактирование:
  • Спасибо
Реакции: catpaw
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
СПАСИБО! Но при таком условии после работы скрипта удаляются ещё и страницы с текстом оформленным стилем параграфа 'Paragraph Style 2'(именно такое название) :( А из хотелось бы их как раз оставить :(
 
А если так
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
'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, вдруг кто-то подобное что-то будет делать
 
_MBK_ В скрипите в последней строчке только скобочки одной не хватает :)
 
Да. Пишу с блокнота '))'
 
Если вот такой кусок кода добавить в скрипт — не «прокатывает»:
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'

ЧЯДНТ?
 
Последнее редактирование:
Я в грепе не сильный помощник, но, как минимум, у вас обратные слэши \ не экранированы \\ 'hmmm'
 
  • Спасибо
Реакции: dooser
'alil' ТОЧНО! ВСЁ РАБОТАЕТ!
 
Можно закрыть тему! Всем огромное спасибо!