コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

050.【Id】前段落境界線と点対称になるように後段落境界線を設定

書いたコード

var mu = app.scriptPreferences.measurementUnit;
app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
var doc = app.activeDocument;
var slct = doc.selection[0];
try {
    var pStyle = slct.appliedParagraphStyle;
} catch (e) {
    alert("文字を選択するかキャレットを立ててください");
    exit();
}

if (!pStyle.ruleAbove) {
    alert("前境界線が設定されていません");
    exit();
}


pStyle.ruleBelow = true;
pStyle.ruleBelowColor = pStyle.ruleAboveColor;
pStyle.ruleBelowGapColor = pStyle.ruleAboveGapColor;
pStyle.ruleBelowGapOverprint = pStyle.ruleAboveGapOverprint;
pStyle.ruleBelowGapTint = pStyle.ruleAboveGapTint;
pStyle.ruleBelowLineWeight = pStyle.ruleAboveLineWeight;
pStyle.ruleBelowOverprint = pStyle.ruleAboveOverprint;
pStyle.ruleBelowTint = pStyle.ruleAboveTint;
pStyle.ruleBelowType = pStyle.ruleAboveType;
pStyle.ruleBelowWidth = pStyle.ruleAboveWidth;

pStyle.ruleBelowLeftIndent = pStyle.ruleAboveRightIndent;
pStyle.ruleBelowRightIndent = pStyle.ruleAboveLeftIndent;
pStyle.ruleBelowOffset = pStyle.ruleAboveOffset - pStyle.pointSize;

app.scriptPreferences.measurementUnit = mu;

メモ

わかったこと

  • app.scriptPreferences
    主なプロパティは以下の通り。
    enableRedraw:再描画を有効にするか否か
    measurementUnit:スクリプトで長さ値を取得する際に用いる単位。最初に設定しておけばすべて一律の単位で取得されるので変換の必要がない!最後にリセットすること。
    scriptsFolder:スクリプトパネルに表示されている📁ユーザーのパス
    scriptsList:スクリプトパネルに表示されている📁アプリケーション・📁ユーザー両方のスクリプトファイルのパス一覧(配列)
    version:スクリプト実行環境のバージョン

  • テキストの選択範囲とconstructor.nameの対応
    キャレットを立てただけ:"InsertionPoint"
    1文字:"Character"
    複数文字(改行文字を含み、かつスタイルが同一):"TextStyleRange"
    1段落:"Paragraph"
    それ以外:"Text"

おまけ

前段落境界線と後段落境界線の設定を入れ替えるスクリプト
プレビューを見ないままがっつり前境界線を作りこんだ後、実は後境界線の方の画面に入力していたことに気づいたとき用。

var doc = app.activeDocument;
var slct = doc.selection[0];
try {
var pStyle = slct.appliedParagraphStyle;
} catch (e) {
  alert ("文字を選択するかキャレットを立ててください");
  exit();
  }

if (!pStyle.ruleAbove && !pStyle.ruleBelow){
  alert("段落境界線が設定されていません");
  exit();
  }

var a = []
for (var prop in pStyle){
  if (/ruleAbove.*$/.test(prop)){
    a.push([prop, pStyle[prop]]);
    a.sort();
    }
  }
var b = []
for (var prop in pStyle){
  if (/ruleBelow.*$/.test(prop)){
    b.push([prop, pStyle[prop]])
    b.sort();
    }
  }
for (var i =0;i<a.length;i++){
  pStyle[a[i][0]]=b[i][1];
  pStyle[b[i][0]]=a[i][1];
  }

参考