書いたコード
#targetengine "addNestedGrepStyles"
var doc = app.activeDocument;
var pStyles = doc.allParagraphStyles
pStyles.splice(0, 2);
var pStylesNames = [];
var pStylesLen = pStyles.length;
var cStyles = doc.characterStyles;
var cStylesNames = [];
var cStylesLen = cStyles.length;
if (pStylesLen <= 0) {
alert("段落スタイルがありません")
} else if (cStylesLen <= 0) {
alert("文字スタイルがありません")
} else {
for (var i = 0; i < pStylesLen; i++) {
pStylesNames.push(pStyles[i].name)
}
for (var i = 0; i < cStylesLen; i++) {
cStylesNames.push(cStyles[i].name)
}
var wnd = new Window("window", "正規表現スタイル一括設定");
wnd.alignChildren = "top";
wnd.orientation = "row";
var leftCol = wnd.add("panel", undefined, "対象段落スタイル")
leftCol.preferredSize = [120, 100]
leftCol.alignChildren = "left";
var tgtPstyles = []
for (var i = 0; i < pStylesLen; i++) {
tgtPstyles.push(leftCol.add("checkbox", undefined, pStylesNames[i]))
}
var rightCol = wnd.add("group {alignChildren: 'fill', orientation: 'column' }");
rightCol.preferredSize = [120, 100]
rightCol.add("statictext", undefined, "スタイルを適用:");
var appliedCStyleList = rightCol.add("dropdownlist", undefined, cStylesNames)
rightCol.add("statictext", undefined, "テキスト:");
var pttrn = rightCol.add("edittext", undefined);
var start = wnd.add("button", undefined, "実行");
wnd.show();
start.onClick = function () {
if (pttrn.text === "") {
alert("正規表現を入力してください")
} else if (!appliedCStyleList.selection) {
alert("文字スタイルを選択してください")
} else {
for (var j = 0; j < pStylesLen; j++) {
if (tgtPstyles[j].value) {
var appliedCStyle = cStyles.itemByName(appliedCStyleList.selection.text);
var tgtPstyle = pStyles[j];
tgtPstyle.nestedGrepStyles.add({
appliedCharacterStyle: appliedCStyle,
grepExpression: pttrn.text
});
}
}
}
}
}
メモ
知ったこと
- ParagraphStyleのプロパティNestedGrepStylesはコレクションオブジェクト
疑問点
- panel
- var leftCol = wnd.add("panel{alignChildren: 'left'}", undefined, "対象段落スタイル") とするとパネルのタイトルが表示されない。
- パネルのタイトルとチェックボックスの間隔をあけたかったのだけどやり方が分からなかった。
積み残し
- 既に同じ正規表現スタイルが設定されていたら飛ばす処理を追加
- コードの整形&テスト不十分
参考