DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

箇条書き記号を定義した設定に従って入れ替えるInDesignスクリプト

はじめに

前回の記事に続き、また新しいInDesign用のスクリプトです。
段落の箇条書き機能を割と頻繁に使うのですが、特に源ノ角ゴシックなどで設定しようとすると文字が小さすぎて選ぶのに難儀します。

f:id:uske_S:20200510232922p:plain
この中から選ぶの…? 正気か…?
そもそも、源ノ角ゴシックは字形がめちゃくちゃ多いので選ぶのも大変なんですよね。とはいえよく使う箇条書き記号ってだいたい決まってます。なのでよく使うやつを効率よく設定できるようなスクリプトを作ってみました。

SwitchBullets.jsx

動作はこんな感じです。

f:id:uske_S:20200510233324g:plain
SwitchBullets.jsx

設定ファイル

スクリプトと同階層に、SwitchBulletConfig.txt というテキストファイルを置きます。このファイルに記述してある設定に従って、スクリプトで箇条書き記号をトグルさせます。

// サンプルです
// 行頭に半角スラッシュを入れるとその行は読み込まれません
// フォントファミリー  スタイル(ウェイト)  GID値  後続テキスト
// という形でタブ区切りテキストを用意してください
// 最後の後続テキストは省略可能です
源ノ角ゴシック JP    Bold    1242    ^>
源ノ角ゴシック JP    Bold    1244    ^>
源ノ角ゴシック JP    Bold    1246    ^>
源ノ角ゴシック JP    Bold    1248    ^>
源ノ角ゴシック JP    Bold    1258    ^>
// A-OTF UD新ゴ Pr6N  M   12224

こんな形でタブ区切りテキストとして記述してください。同時に後続テキストの設定ができるようにしてあります*1

コード

コードはGistにあります。

技術的な話

大したことではないんですがメモとして残しておきます。

エラー処理

以前InDesign 2020(15.0.2)で実装されたコミュニティスクリプトの内容を少し詳しく読み込みました。

uske-s.hatenablog.com

その中でエラー処理を一箇所にまとめているスクリプトがあって、これは賢いな〜と思って今回それを真似てみたのが、スクリプト最後のmyError関数です*2
この使い方気に入ったのでしばらく使いそう。特に規模の大きなスクリプトや複数人でメンテしているものには非常に良さそう。

型変換

1箇所、+演算子を使って文字列型を数値型に変換しているところがあります。はじめはparseInt()メソッドで実装していたのですが、メソッドの仕様上、これだと数値型に変換できるところまで先頭から数値型に変換してくれてしまいます。

どういうことかというと、例えば誤って123あと入力されていたとします。このとき、parseInt()メソッドでは頭から数値型に変換できるだけしてしまうので、parseInt("123あ", 10)の値は123になります。

parseInt("123あ", 10); // 123 <-数値型に変換できない文字列があったらNaNにしたい

これは下手にきちんとした数値型の値が返ってきてしまうので都合が悪い。なのでその部分は+演算子による型変換を利用しています。そうすれば、間に余計な文字列が紛れていたら意図通りNaNを返してくれるからです。

Bullet.characterValueは数値型

このプロパティは文字列型を渡してもダメで、数値型で渡さないと何もしません*3。もともと数値型なので挙動としては分かるんだけども。JSの暗黙の型変換に慣れすぎているとこういうときにつまづいてしまう…。

おわりに

というわけで面倒くさい箇条書き設定を少しだけ楽にするスクリプトでした。

*1:箇条書き記号へ文字スタイルを設定できるようにするかも考えたのですが、フォントのチェックやグループ化された文字スタイルへの対応、文字スタイルが利用できるかどうかなど、確認する手間と実装する手間が多くてやめました。あしからずです…

*2:元の記事はこれ
InDesign 15.0.2 コミュニティスクリプトを紐解く 3 - DTPab
記事のスクリプトではSwitch文で処理していましたが、記事に書いたとおり僕は連想配列で実装してみました

*3:エラーすら吐かない