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

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
 
  • Спасибо
Реакции: Darvinnn

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
И осталась последняя нерешенная подзадача. Добавить перед каждой картинкой канала два перевода строки.
Есть два решения:
1. Перед вставкой изображения добавить эти переводы строк
2. Заменить найденное НАЗВАНИЕ_КАНАЛА на НАЗВАНИЕ_КАНАЛА + ^p+^p
Что-то типа app.changeGrepPreferences = txt[w]+"\\r"+"\\r"+"\\r"+"\\r"+"\\r";
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Так, как написал я, означает: найти текст, перед которым стоит конец абзаца и после него тоже конец абзаца (не включая оба символа). Ваш вариант заменит не только текст, но и знаки абзацев.
@_MBK_, кстати, вполне резонно намекал, что строка ^Первый$ будет в этом случае оптимальной.
И как бы переводы строк добавить?
Отдельным запуском story.changeGrep() до замены текста на файл. С правильными настройками поиска/замены.
Вы GREP в ID знаете?
 

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
«Отступ до/после» в параметрах абзацного стиля сделайте.
Вот так бы хорошо сделать, но это ж еще глубже вникнуть надо. Я так понимаю достаточно просто картинкам присвоить стиль, и описать его
 

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
Так, как написал я, означает: найти текст, перед которым стоит конец абзаца и после него тоже конец абзаца (не включая оба символа). Ваш вариант заменит не только текст, но и знаки абзацев.
@_MBK_, кстати, вполне резонно намекал, что строка ^Первый$ будет в этом случае оптимальной.

Отдельным запуском story.changeGrep() до замены текста на файл. С правильными настройками поиска/замены.
Вы GREP в ID знаете?
Не могли бы вы объяснить поподробнее как именно это сделать? GREP знаю, но только как это работает через диалоговое окно.
UPD: вроде доперло как ) Вроде работает:
Код:
    app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
    app.changeGrepPreferences.changeTo = "\\r"+"\\r"+txt[w]+;
    story.changeGrep();
 
Последнее редактирование:

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
Возникла проблема. Те названия каналов, в которых есть скобки, не заменяются. Попробовал добавить перед ними обратный слэш, толку ноль. Получилось строка поиска такая: "РЕН ТВ \(Регионы\)"
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Слеши всегда должны удваиваться.
 
  • Спасибо
Реакции: Darvinnn

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 198
Реакции
10 848
Не могли бы вы объяснить поподробнее как именно это сделать? GREP знаю, но только как это работает через диалоговое окно.
UPD: вроде доперло как ) Вроде работает:
Код:
    app.findGrepPreferences.findWhat = '(?<=\\r)' + txt[w] + '(?=\\r)';
    app.changeGrepPreferences.changeTo = "\\r"+"\\r"+txt[w]+;
    story.changeGrep();
А плюс то куда в воздухе повис?
 

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
А как вот все двойные переводы строк убрать? Попробовал
Код:
app.findGrepPreferences.findWhat = '"\\r"+"\\r"';
app.changeGrepPreferences.changeTo = "\\r";
story.changeGrep();
Не работает чего-то, хотя должно по идее...
 

Darvinnn

Топикстартер
12 лет на форуме
Сообщения
46
Реакции
0
Все вроде получилось! Спасибо большое всем, кто помог разобраться. Особенно Бутрину Олегу!
Остался единственный нерешенный вопрос. Как добавить перевод строки перед вставленной картинкой или как ей задать стиль, в котором прописан предабзацный отступ 200%?
 

Leha_Ygli

Участник
Сообщения
21
Реакции
25
Предлагаю свой дежурный скрипт для замены ключевых слов на содержимое буфера обмена:
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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 198
Реакции
10 848
  • Спасибо
Реакции: Leha_Ygli

Leha_Ygli

Участник
Сообщения
21
Реакции
25
Вот так немного лучше:
Код:
/*
Скрипт может помочь везде, где нужно заменить ключевые слова на содержимое буфера обмена.
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