[ID CS4-CS6] Скрипт для замены текста картинкой

  • Автор темы Автор темы Darvinnn
  • Дата начала Дата начала
app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
 
  • Спасибо
Реакции: Darvinnn
И осталась последняя нерешенная подзадача. Добавить перед каждой картинкой канала два перевода строки.
Есть два решения:
1. Перед вставкой изображения добавить эти переводы строк
2. Заменить найденное НАЗВАНИЕ_КАНАЛА на НАЗВАНИЕ_КАНАЛА + ^p+^p
Что-то типа app.changeGrepPreferences = txt[w]+"\\r"+"\\r"+"\\r"+"\\r"+"\\r";
 
Так, как написал я, означает: найти текст, перед которым стоит конец абзаца и после него тоже конец абзаца (не включая оба символа). Ваш вариант заменит не только текст, но и знаки абзацев.
@_MBK_, кстати, вполне резонно намекал, что строка ^Первый$ будет в этом случае оптимальной.
И как бы переводы строк добавить?
Отдельным запуском story.changeGrep() до замены текста на файл. С правильными настройками поиска/замены.
Вы GREP в ID знаете?
 
«Отступ до/после» в параметрах абзацного стиля сделайте.
Вот так бы хорошо сделать, но это ж еще глубже вникнуть надо. Я так понимаю достаточно просто картинкам присвоить стиль, и описать его
 
Так, как написал я, означает: найти текст, перед которым стоит конец абзаца и после него тоже конец абзаца (не включая оба символа). Ваш вариант заменит не только текст, но и знаки абзацев.
@_MBK_, кстати, вполне резонно намекал, что строка ^Первый$ будет в этом случае оптимальной.

Отдельным запуском story.changeGrep() до замены текста на файл. С правильными настройками поиска/замены.
Вы GREP в ID знаете?
Не могли бы вы объяснить поподробнее как именно это сделать? GREP знаю, но только как это работает через диалоговое окно.
UPD: вроде доперло как ) Вроде работает:
Код:
    app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
    app.changeGrepPreferences.changeTo = "\\r"+"\\r"+txt[w]+;
    story.changeGrep();
 
Последнее редактирование:
Возникла проблема. Те названия каналов, в которых есть скобки, не заменяются. Попробовал добавить перед ними обратный слэш, толку ноль. Получилось строка поиска такая: "РЕН ТВ \(Регионы\)"
 
Не могли бы вы объяснить поподробнее как именно это сделать? GREP знаю, но только как это работает через диалоговое окно.
UPD: вроде доперло как ) Вроде работает:
Код:
    app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
    app.changeGrepPreferences.changeTo = "\\r"+"\\r"+txt[w]+;
    story.changeGrep();
А плюс то куда в воздухе повис?
 
А как вот все двойные переводы строк убрать? Попробовал
Код:
app.findGrepPreferences.findWhat = '"\\r"+"\\r"';
app.changeGrepPreferences.changeTo = "\\r";
story.changeGrep();
Не работает чего-то, хотя должно по идее...
 
Все вроде получилось! Спасибо большое всем, кто помог разобраться. Особенно Бутрину Олегу!
Остался единственный нерешенный вопрос. Как добавить перевод строки перед вставленной картинкой или как ей задать стиль, в котором прописан предабзацный отступ 200%?
 
Предлагаю свой дежурный скрипт для замены ключевых слов на содержимое буфера обмена:
JavaScript:
/*
Скрипт может помочь везде, где нужно заменить ключевые слова на содержимое буфера обмена.
1. Создайте фрейм со списком автозамен (используйте GREP!):
   а. В виде таблицы: | Выражение GREP  | Объект, вставленный в текст |
   б. В виде списка с разделителем-табом: Выражение GREP[tab]Объект, вставленный в текст
2. Выделите фрейм со списком автозамен, затем, зажав shift, выделите фрейм, в котором вы хотите произвести замены, и запустите скрипт.
   Если будет выбран только один фрейм, скрипт сработает для всего документа.
 
   By Alexey Stukun, st_verstka@mail.ru.
*/

if (app.documents.length == 0) {
    myExit("Нет открытого документа для работы.");
  }
if (!app.activeDocument.saved) {
    myExit("Сохраните документ где-нибудь и попробуйте ещё раз.");
}
if (app.selection.length == 0) {
  myExit("READ ME\nВыделите фрейм со списком автозамен, затем, зажав shift, выделите фрейм, в котором вы хотите произвести замены, и запустите скрипт. Если будет выбран только один фрейм, скрипт сработает для всего документа.");
  }

var myDoc = app.activeDocument;
var dataFrame = app.selection[0];
var dataStory = dataFrame.parentStory;

if (app.selection.length > 1) {
    var workArea = app.selection[1].parentStory;
    } else {
        var workArea = myDoc;
        }
// Превращаем ваш список в таблицу:
if (dataFrame.tables.length == 0) {
    dataStory.texts[0].convertToTable();
}
var dataTable = dataFrame.tables[0];

// Перебираем строки таблицы:
for (i = 0, iLen = dataTable.rows.length; i < iLen; i++) {
   
    var myRow = dataTable.rows[i];
    var myFindWhat = myRow.cells[0].contents;
   
    try {
        myRow.cells[1].characters.everyItem().select();
        app.copy();
        } catch(error) {
            continue;
    }

    // Настройки поиска:
    app.findGrepPreferences = app.changeGrepPreferences = null;
    app.findGrepPreferences.findWhat = myFindWhat;
    try {
        var myFounds = workArea.findGrep();
        } catch (error) {
            continue;
    }
    app.findGrepPreferences = app.changeGrepPreferences = null;
   
    if (myFounds.length == 0) {
        continue;
    }

    for (t = 0, tLen = myFounds.length; t < tLen; t++) {
        if (myFounds[t].parent.parent.parent == dataFrame) {
            alert("ww");
            continue;
        }
        if (myFounds[t].parent.parent == dataFrame) {
                        alert("wwwwww");

            continue;
        }
        myFounds[t].select();
        app.paste();
    }
}

function myExit(message) {
      alert(message);
      exit();
}
Видеодемку работы скрипта можно посмотреть вот тут, на youtube.
 
  • Спасибо
Реакции: catpaw
Вот так немного лучше:
Код:
/*
Скрипт может помочь везде, где нужно заменить ключевые слова на содержимое буфера обмена.
1. Создайте фрейм со списком автозамен (используйте GREP!):
   а. В виде таблицы: | Выражение GREP  | Объект, вставленный в текст |
   б. В виде списка с разделителем-табом: Выражение GREP[tab]Объект, вставленный в текст
2. Выделите фрейм со списком автозамен, затем, зажав shift, выделите фрейм, в котором вы хотите произвести замены, и запустите скрипт.
   Если будет выбран только один фрейм, скрипт сработает для всего документа.
  
   by Alexey Stukun st_verstka@mail.ru
*/

if (app.documents.length == 0) {
    myExit("Нет открытого документа для работы.");
  }
if (!app.activeDocument.saved) {
    myExit("Сохраните документ где-нибудь и попробуйте ещё раз.");
}
if (app.selection.length == 0) {
  myExit("READ ME\nВыделите фрейм со списком автозамен, затем, зажав shift, выделите фрейм, в котором вы хотите произвести замены, и запустите скрипт. Если будет выбран только один фрейм, скрипт сработает для всего документа.");
  }

var myDoc = app.activeDocument;
var dataFrame = app.selection[0];
var dataStory = dataFrame.parentStory;

if (app.selection.length > 1) {
    var workArea = app.selection[1].parentStory;
    } else {
        var workArea = myDoc;
        }
// Превращаем ваш список в таблицу:
if (dataFrame.tables.length == 0) {
    dataStory.texts[0].convertToTable();
}
var dataTable = dataFrame.tables[0];

// Перебираем строки таблицы:
for (i = 0, iLen = dataTable.rows.length; i < iLen; i++) {
    
    var myRow = dataTable.rows[i];
    var myFindWhat = myRow.cells[0].contents;
    
    try {
        myRow.cells[1].characters.everyItem().select();
        app.copy();
        } catch(error) {
            continue;
    }

    // Настройки поиска:
    app.findGrepPreferences = app.changeGrepPreferences = null;
    app.findGrepPreferences.findWhat = myFindWhat;
    try {
        var myFounds = workArea.findGrep();
        } catch (error) {
            continue;
    }
    app.findGrepPreferences = app.changeGrepPreferences = null;
    
    if (myFounds.length == 0) {
        continue;
    }

    for (t = 0, tLen = myFounds.length; t < tLen; t++) {
        if (myFounds[t].parent.parent.parent == dataFrame) {
            continue;
        }
        myFounds[t].select();
        app.paste();
    }
}

function myExit(message) {
      alert(message);
      exit();
}
 
  • Спасибо
Реакции: catpaw и afalbert