[AI CC-CC2021] Присвоение атрибута п/ж определённым участкам выделенного текстового фрейма

ъьы

Участник
Топикстартер
Сообщения
34
Реакции
2
Помогите пожалуйста разобраться.

Есть вот такой скрипт:
Код:
myLine = app.activeDocument.selection[0];

for (i = 0; i <= myLine.textRange.lines.length-1; i++){
    if (myLine.textRange.lines[i].words.length > 0) // если в строке есть хотя бы одно слово
        {myLine.textRange.lines[i].words[0].textFont = app.textFonts.getByName("PFDinTextPro-Medium"); // назначаем этому первому слову п/ж шрифт
        }
}

По моей идее, скрипт должен присваивать полужирный шрифт каждому первому слову каждой строки (если оно существует). На деле получается вот что:

1.png
2.png

3.png
4.png


Отсюда вопрос #1: Почему так получается и какую роль здесь играют двоеточия?
и вопрос #2: Как проще сделать так, чтобы скрипт полужирным делал всю часть каждой строки, которая продолжается до двоеточия?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Я не пойму, вам надо каждое первое слово (часть текста от начала строки до пробела) или часть текста от начала строки до двоеточия? 'hmmm'
Сходу совет - я бы на иллюстраторовские words особо не рассчитывал, а делал бы собственный TextRange от начала строки до нужного символа и его жирнил.
 

ъьы

Участник
Топикстартер
Сообщения
34
Реакции
2
Я не пойму, вам надо каждое первое слово (часть текста от начала строки до пробела) или часть текста от начала строки до двоеточия? 'hmmm'
Вообще в идеале надо всю часть текста до двоеточия, но я не смог так сделать и пошёл по лёгкому, как мне казалось пути с words, хотелось разобраться почему сейчас так получается.
Сходу совет - я бы на иллюстраторовские words особо не рассчитывал, а делал бы собственный TextRange от начала строки до нужного символа и его жирнил.
Спасибо. Как я понимаю надо для начала получить один общий string, потом разбить его на подстроки, которые должны быть светлые и которые должны быть п/ж (п/ж от начала текста до ":" и от каждого "\n" до ":"). А потом из этого всего формировать новый текстовый фрейм. Или нет?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
и пошёл по лёгкому, как мне казалось пути
Как вы уже убедились, легкие пути практически всегда ведут не туда. Даже в иллюстраторовском скриптинге. В особенности в иллюстраторовском скриптинге. ;)
(п/ж от начала текста до ":" и от каждого "\n" до ":").
Я не уверен, что перевод строки можно в contents отследить. С другой стороны, у меня нет полной уверенности, что и разбиение на lines тоже верное. В общем, тут пробовать надо экспериментальным путем. 'hmmm'
 
  • Спасибо
Реакции: ъьы

Flame

Unregistered user
20 лет на форуме
Сообщения
1 323
Реакции
58
Сорян, я не программист, но можно делать так

Код:
myLine = app.activeDocument.selection[0];

for (var i = 0; i <= myLine.textRange.lines.length-1; i++){
    if (myLine.textRange.lines[i].words.length > 0)  // если в строке есть хотя бы одно слово
    for (var  j=0; j<myLine.textRange.lines[i].length; j++){
        if (myLine.textRange.lines[i].characters[j].contents ==":"){
            var myRng=myLine.textRange.lines[i].characters[0];
            myRng.length=j+1;
            myRng.textFont = app.textFonts.getByName("PFDinTextPro-Medium");
            break;
            }
        }
        
 }
 
  • Спасибо
Реакции: VVVSLAVA, ъьы и _MBK_

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

ъьы

Участник
Топикстартер
Сообщения
34
Реакции
2
Сорян, я не программист, но можно делать так

Код:
myLine = app.activeDocument.selection[0];

for (var i = 0; i <= myLine.textRange.lines.length-1; i++){
    if (myLine.textRange.lines[i].words.length > 0)  // если в строке есть хотя бы одно слово
    for (var  j=0; j<myLine.textRange.lines[i].length; j++){
        if (myLine.textRange.lines[i].characters[j].contents ==":"){
            var myRng=myLine.textRange.lines[i].characters[0];
            myRng.length=j+1;
            myRng.textFont = app.textFonts.getByName("PFDinTextPro-Medium");
            break;
            }
        }
       
 }
Интересная идея, не буду ломать голову и буду пользоваться вашим вариантом. Спасибо.