[ID CC-CC2021] Показать использование текстовых переменных в тексте

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Увидел вот такой полезный скрипт, но он доступен только премиум-пользователям.

TextVarUse.jpg

Кто-нибудь знает что-то подобное?
Да чтобы ещё работало не только в старых Индизайнах...
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Вот такой скрипт есть у них на форуме, он работает, конечно, но не очень удобен тем, что имя переменной каждый раз надо вводить (ну или копипастить) вручную, а не выбирать из выпадающего списка, как в недоступной премиум-версии:

Код:
// VerwendungEinerTextvariableErmitteln.jsx
// https://www.hilfdirselbst.ch/foren/Textvariablen_suchen_in_CS4_P490201.html#490201
 
var var_name = prompt('Найти текстовую переменную', 'Переменная 1');
var t_var = app.documents.firstItem().textVariables.itemByName(var_name);
 
if (t_var.isValid)
{
    if (t_var.associatedInstances.length == 0)
        alert('Внимание!\nТекстовая переменная с именем «' + var_name + '» не используется в активном документе.');
    else
    {
        for (var i = 0; i < t_var.associatedInstances.length; i++)
        {
            show_it(t_var.associatedInstances[i], i+1, t_var.associatedInstances.length, var_name);
        }     
    }
}
else
    alert('Внимание!!\nТекстовая переменная с именем «' + var_name + '» не существует.');
 
function show_it( theObj, i, n, var_name )   
{ 
    app.select(theObj.storyOffset,SelectionOptions.replaceWith, var_name); 
    app.activeWindow.zoomPercentage = 800; 
    var msg = 'Variable ' + var_name + '\n(' + theObj.resultText + ')\n\n'  + 'Результат ' +  i + '/' + n + '\n\nДальше?';
    var _choice = confirm ( msg ); 
    if (_choice == false)   
        exit();   
    return app.selection[0];
}

Вот бы доработать его... ;]]
 

Masia

15 лет на форуме
Сообщения
127
Реакции
47
Вот такое начало нужно, вместо первых трех значимых строк:

JavaScript:
var myDoc = app.activeDocument;
var myTextVarList = new Array(myDoc.textVariables.length);

for(i = 0; i < myDoc.textVariables.length; i++){
        myTextVar = myDoc.textVariables.item(i);
        myTextVarList[i] = myTextVar.name;
    }

// Диалоговое окно ввода
    var myDlg = new Window ("dialog", "Найти переменную");

    var myList = myDlg.add ("group");
    myList.add ("statictext", undefined, "Выбрать переменную:");
    var choseTextVar = myList.add ("dropdownlist", undefined, myTextVarList);

    // группа кнопок
    var myButtonGroup = myDlg.add ("group");
    myButtonGroup.alignment = "right"; 
    myButtonGroup.add ("button", undefined, "OK");
    myButtonGroup.add ("button", undefined, "Cancel");

    // проверка нажатия кнопок
    if (myDlg.show () == 1) {
        var var_name = choseTextVar.selection.text;

        } else {exit ();}
 // end Диалоговое окно

// отсюда вышеупомянутый код со строки 
// var t_var = app.documents.firstItem().textVariables.itemByName(var_name);
Если что более опытные коллеги поправят, ибо я только учусь ;]=
Исходный код не трогала. В скрепке архив со всеми строками.
 

Вложения

  • findTextVar_list.zip
    1.1 КБ · Просм.: 100
  • Спасибо
Реакции: LeonidB и densen

densen

15 лет на форуме
Сообщения
753
Реакции
642
Вот такое начало нужно, вместо первых трех значимых строк:
Вот спасибо тебе! Оказалось, что у меня в документ проникла фантомная переменная, которая не значилась в общем списке переменных. Смог удалить только строкой app.activeDocument.textVariables[0].remove();
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528

Masia

15 лет на форуме
Сообщения
127
Реакции
47
в документ проникла фантомная переменная, которая не значилась в общем списке переменных.
Не знаю тот же ли это фантом, но в списке переменных даже пустого вновь созданного документа обнаружила аж двух нежданчиков. Поискала и оказалось, что: "Also, ‘document’ variable has two additional items that are built in document: XRefChapterNumber and XRefPageNumber and you can’t change them."
Т.е. они встроены по умолчанию в документ, но их в списке переменных их не видно. Предположу, исходя из их названий, что они для внутреннего пользования самим документом - какие-то ссылки. 'hz'
 
  • Спасибо
Реакции: LeonidB, densen и iv-mi

Masia

15 лет на форуме
Сообщения
127
Реакции
47

Не по теме:
Да, была переменная XRefPageNumber. Пойду, верну предыдущую версию. '))'
Поправила построение списка, дабы эти две переменные в него не включались и не смущали :)

Поизучала оригинальный немецкий пост и форум с исходным кодом. Похоже в расширенной версии кроме выпадающего списка есть еще интересные плюшки. Вроде как показывает номер страницы (возможно и переходит на нее), где "начинается" переменная. В кусочке выложенном на том форуме ищется только первое вхождение. Интересно бы и это порешать, но моих знаний пока не хватило. Подумаю об этом завтра ))))
 

Вложения

  • findTextVar_list.v.0.2.zip
    1.2 КБ · Просм.: 92
  • Спасибо
Реакции: LeonidB и densen

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528
А ещё, наверно, было бы интересно исключить из списка те переменные, которые в документе не используются, дабы не тыкать их понапрасну :) Но это так, второстепенно. Если при создании текстовых переменных называть их "говорящими" именами, а не оставлять стандартные названия, то их и так будет в списке видно.
 
Последнее редактирование:

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Вот что получилось. Просматриваются все страницы для выяснения, какие переменные используются, и запоминается номер страницы и текст каждой из них. Потом выводится список используемых переменных. После выбора любой отображается информация о её использовании: номер страницы и содержимое текстового фрейма этой переменной. Опцию перехода на конкретную страницу делать не стал, т.к. это диалоговое окно не модальное, можно отодвинуть его и с помощью стандартной команды Ctrl+J перейти на нужную страницу.
 

Вложения

  • TextVariablesShow.zip
    3.1 КБ · Просм.: 102
  • Спасибо
Реакции: densen, LeonidB и Masia

Masia

15 лет на форуме
Сообщения
127
Реакции
47
Попробую и свой самоварчик пристроить ;]=
Канва не менялась, но лишние переменные в список не тащит, по страничкам бегает, номер странички показывает.
Даже пытается показать в окошке содержимое. Правда, если текстовой фрейм привязан к мастеру, то содержимое не отображается .
textVar-textFrame.JPGtextVar-TFmaster.JPG
 

Вложения

  • goToTextVariables.zip
    1.3 КБ · Просм.: 102
  • Спасибо
Реакции: densen и LeonidB

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Попробую и свой самоварчик пристроить ;]=
Канва не менялась, но лишние переменные в список не тащит, по страничкам бегает, номер странички показывает.
Даже пытается показать в окошке содержимое. Правда, если текстовой фрейм привязан к мастеру, то содержимое не отображается .
Посмотреть вложение 157243Посмотреть вложение 157244Эт
Я пропускаю случаи отвязанного от мастера фрейма с текстовой переменной. Обрабатываются только привязанные фреймы - извлекается текст из них, и запоминается, на какой это странице. Может быть, имеет смысл учесть и отвязанные фреймы. Это несложно, вопрос - нужно ли.
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Вот что получилось. Просматриваются все страницы для выяснения, какие переменные используются, и запоминается номер страницы и текст каждой из них. Потом выводится список используемых переменных. После выбора любой отображается информация о её использовании: номер страницы и содержимое текстового фрейма этой переменной. Опцию перехода на конкретную страницу делать не стал, т.к. это диалоговое окно не модальное, можно отодвинуть его и с помощью стандартной команды Ctrl+J перейти на нужную страницу.
Михаил, почему-то у меня в приложенном файле скрипт не показывает информацию о переменных:
TextVariablesShow_1.jpg
 

Вложения

  • Безымянный-1.rar
    62 КБ · Просм.: 86
  • Спасибо
Реакции: densen

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Потому что они отвязаны от мастер-страницы. Вот вторая версия, если текстовый фрейм отвязан от мастера, как в вашем случае, то перед текстом будет [*]
 

Вложения

  • TextVariablesShow.v.2.zip
    3.4 КБ · Просм.: 90
  • Спасибо
Реакции: LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Потому что они отвязаны от мастер-страницы. Вот вторая версия, если текстовый фрейм отвязан от мастера, как в вашем случае, то перед текстом будет [*]
Спасибо, этот показывает!

А в моём файле-примере есть фреймы с переменными как отвязанные от мастер-страницы, так и привязанные к ней.
 

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Спасибо, этот показывает!

А в моём файле-примере есть фреймы с переменными как отвязанные от мастер-страницы, так и привязанные к ней.
В том примере, что прислан -- Переменная 1, Переменная 2, Переменная 1 -- все отвязаны.
 

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Хорошо, что вы сообщили, что там разные варианты есть. Версия 2 находила не все. Вот третья, похоже, эта находит все переменные.
 

Вложения

  • TextVariablesShow.v.3.zip
    3.4 КБ · Просм.: 109
  • Спасибо
Реакции: Masia, mnemonix и LeonidB