нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

  • Автор темы Автор темы hailfor
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

hailfor

Участник
Топикстартер
Сообщения
24
Реакции
11
Доброго времени всем!

В очередной раз нужна помощь со скриптом (спасибо ещё раз этому форуму).

Верстаю газету, часто возникает необходимость в вертикальной линии для параграфа-лида. Пример в аттаче. Предварительно облазил интернет, нашел неплохой вариант скрипта vertical rules.jsx. Я сколько смог (со своими скудными навыками в скриптинге) поправил его под себя. А именно смог добиться, чтобы добавлялся в палитру цвет (DeepBlue в скрипте) и настроил толщину линии (стилем lead_Rule_x в скрипте) под себя.

Осталось сделать следующее: применить к фрейму стиль с left intend (пока что, приходится после скрипта руками применять параграф стиль).

Собственно сам код скрипта ниже:

Код:
//DESCRIPTION: Add vertical paragraph rules to selected paragraphs
// Peter Kahrel -- www.kahrel.plus.com


try {if (app.selection.length > 0)
    vertical_rules ()}
catch (e) {alert (e.message + "\r(line " + e.line + ")")};




function vertical_rules ()
    {
    var color = document.colors.itemByName("DeepBlue");
if(color==null){
    color = document.colors.add();
    color.name = "DeepBlue";
    color.colorValue = [100,80,0,10];
}
    var vr, rule_length;
    var sel = app.selection[0];
    var p_first = sel.paragraphs[0];
    var p_last = sel.paragraphs[-1];
    var ascender = p_first.characters[0].ascent;
    var descender = p_first.characters[0].descent;
    var os = vrule_style ("lead_Rule_X");
    // delete any vertical rules
    delete_rule (p_first, os);
    // add a rule at the first selected paragraph. We'll set its length later
    vr = p_first.insertionPoints[0].graphicLines.add ({appliedObjectStyle: os});
    // Two possibilities
    // 1. Everything on the same page: set the par. rule of just the first paragraph 
    // from its first line to the last paragraph's last line
    if (p_first.lines[0].parentTextFrames[0] == p_last.lines[-1].parentTextFrames[0])
        {
        rule_length = p_last.lines[-1].baseline - p_first.lines[0].baseline + descender + ascender;
        vr.geometricBounds = [0, 0, rule_length, 0];
        }
    else
        // 2. The last paragraph ends on another page: insert a rule in the first line of last selected paragraph's frame
        // and extend it to the last line of the selected paragraph.
        {
        // First set the rule at the first selected paragraph to extend to the bottom of its frame
        rule_length = p_first.parentTextFrames[0].lines[-1].baseline - p_first.lines[0].baseline + ascender + descender;
        vr.geometricBounds = [0, 0, rule_length, 0];
        // Then try to delete any v. rules in the first paragraph of the second frame
        var first_line = p_last.lines[-1].parentTextFrames[0].lines[0];
        delete_rule (first_line.paragraphs[0], os);
        // Now add a rule at the first line of the next frame and extend it to the last line of the last selected paragraph
        rule_length = p_last.lines[-1].baseline - first_line.baseline + ascender + descender;
        vr = first_line.words[4].insertionPoints[-1].graphicLines.add ();
        vr.appliedObjectStyle = os;
        vr.geometricBounds = [0, 0, rule_length, 0];
        }
    }




function vrule_style (s)
    {
    if (app.documents[0].objectStyles.item (s) == null)
        {
        var os = app.documents[0].objectStyles.add ({name: s});
        os.basedOn = app.documents[0].objectStyles[0];
        os.strokeColor = "DeepBlue";
        os.strokeWeight = "3 pt";
        os.enableAnchoredObjectOptions = true;
        with (os.anchoredObjectSettings)
            {
            spineRelative = false;
            anchoredPosition = AnchorPosition.anchored;
            anchorPoint = AnchorPoint.topRightAnchor;
            horizontalReferencePoint = AnchoredRelativeTo.columnEdge;
            anchorXoffset = "-3 pt";
            horizontalAlignment = HorizontalAlignment.leftAlign;
            verticalReferencePoint = VerticallyRelativeTo.lineAscent;
            pinPosition = false;
            }
        }
    return app.documents[0].objectStyles.item ("lead_Rule_X")
    }




function delete_rule (p, os)
    {
    var g = p.graphicLines;
    for (var i = g.length-1; i > -1; i--)
        if (g[i].appliedObjectStyle == os)
            g[i].remove ();
    }




function errorM (m)
	{
	alert (m, "Error", true)
	exit ()
	}
 

Вложения

  • bumagnik.jpg
    bumagnik.jpg
    95.3 КБ · Просм.: 949
Ответ: нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

После строки:
Код:
var sel = app.selection[0];
надо добавить строку:
Код:
sel.appliedParagraphStyle = "left intend";
где left intend — имя стиля.
Если стиль находится в группе:
Код:
sel.appliedParagraphStyle = app.activeDocument.paragraphStyleGroups.item("ИмяГруппы").paragraphStyles.item("left intend");
 
Ответ: нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

Спасибо за ответ, вот что мне выдает скрипт после этой строчки:

Script alert: Object doesn't support the property or method 'appliedParagraphStyle' line 19
 
Ответ: нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

А, там же текстовый фрейм выделяется, а у него, действительно, такого свойства нет. Вот так должно сработать:
Код:
sel.texts[0].appliedParagraphStyle = "left intend";
 
Ответ: нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

Ура-ура! Всё работает как по-волшебству!))

p.s. если будет возможность, то хотелось бы узнать команду-пример, как можно в этот скрипт добавить параграф стиль (на примере left intend) средствами java (для общего развития, в будущем пригодится). ещё раз спасибо, Eugenyus!
 
Ответ: нужна помощь в редактировании скрипта (вертикальная линия для параграфа)

Его скрипт я и использую. Просто дорабатываю под себя. :)
 
Статус
Закрыто для дальнейших ответов.