[ID CS4-CS6] Еще один скрипт поиска-замены по списку

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

densen

Топикстартер
20 лет на форуме
Сообщения
811
Реакции
726

Не по теме:
эх, всё самому, всё самому... :o|

Скрипт глубокоуважаемого LeshikSan трогать не стал, сделал своё.
Положу сюда, вдруг кому-то.

JavaScript:
// Поиск-замена текста и GREP-выражений как функции. // densen 11.03.2023

// Значения в скобках: (Строка для поиска, Символьный стиль поиска, Абзацный стиль поиска, Строка для замены, Символьный стиль замены, Абзацный стиль замены),
// Если символьные и абзацные стили находятся вне групп, то можно подставлять имена в кавычках: "bold", "italic", "Main Text", "+8 points" и т.д.
// Если абзацные стили в группах, а пуще того в группах, расположенных в группах, то лучше вводить переменные для стиля и подставлять в скобки означенную переменную), например:
// var CPL_MT = app.activeDocument.paragraphStyleGroups.item("Article").paragraphStyles.item("Main Text"); // это переменная стиля, находящаяся в группе "Article"
// var CPL_DOI = app.activeDocument.paragraphStyleGroups.item("Article").paragraphStyleGroups.item("Head").paragraphStyles.item("DOI"); // Это переменная стиля, находящегося в группе "Head", которая в свою очередь расположена в группе "Article"
// Если нет какого-либо значения, то обязательно должно быть "null"
// Проверки на наличие в документе символьных или абзацных стилей отсутствуют. Если чего-то не будет, то выскочит ошибка. И это будет правильно.

// Символьный стиль "[None]" записывается как app.activeDocument.characterStyles[0] либо напрямую, либо через переменную

var myNoneChar = app.activeDocument.characterStyles[0]; // Символьный стиль "[None]"

// Следующие две строчки равнозначны

findchangeText("шило", "bold", null, "мыло", myNoneChar, null);
findchangeText("шило", "bold", null, "мыло", app.activeDocument.characterStyles[0], null);

// В строках GREP-поиска одинарная "\" во всех кодах символов обязательно должна быть сдублирована, чтобы вместо, например, привычного GREP-обозначения цифры \d это выглядело как \\d.

findchangeGREP("шило (\\d штук)", null, null, "мыло $1", null, null);

// Если в GREP-поиске нужно оставить найденное выражение без изменения, то в качестве строки для замены нужно поставить "$0"




//##############################################################

// Исходные строки текстового и GREP-поиска:

findchangeText(null, null, null, null, null, null);
findchangeGREP(null, null, null, null, null, null);

//##############################################################


// FUNCTIONS

function findchangeGREP (myFindString, myFindChar, myFindPara, myChangeString, myChangeChar, myChangePara)
    {
    app.findGrepPreferences = app.changeGrepPreferences = null;
    app.findGrepPreferences.findWhat = myFindString;
    app.findGrepPreferences.appliedCharacterStyle = myFindChar;
    app.findGrepPreferences.appliedParagraphStyle = myFindPara;
    app.changeGrepPreferences.changeTo = myChangeString;
    app.changeGrepPreferences.appliedCharacterStyle = myChangeChar;
    app.changeGrepPreferences.appliedParagraphStyle = myChangePara;
    app.changeGrep();
    }

function findchangeText (myFindString, myFindChar, myFindPara, myChangeString, myChangeChar, myChangePara)
    {
    app.findTextPreferences = app.changeTextPreferences = null;
    app.findTextPreferences.findWhat = myFindString;
    app.findTextPreferences.appliedCharacterStyle = myFindChar;
    app.findTextPreferences.appliedParagraphStyle = myFindPara;
    app.changeTextPreferences.changeTo = myChangeString;
    app.changeTextPreferences.appliedCharacterStyle = myChangeChar;
    app.changeTextPreferences.appliedParagraphStyle = myChangePara;
    app.changeText();
    }

В архиве он же, чтобы не копировать.
 

Вложения

Осторожнее с app.changeGrep() - поиск и замена будут идти во всех открытых документах, что может оказаться нежелательным. Я бы заменил app. на app.activeDocument.
 
  • Спасибо
Реакции: densen