ExtendSxriptのバグ

utsutsunogare.hatenablog.com

↑このスクリプト作成中、ExtendScriptのバグらしきものに遭遇したので、そのメモ。

ExtendScriptAdobe製品に搭載されているECMAScript準拠のスクリプト言語(要はJavaScript)。
なので基本的な文法はJavaScriptと同じです。

const a = true, b = true;

const c = a && b || !a && !b

上記のようなコードがあったとき、通常のJavaScriptでは ctrue です。
でもExtendScriptでは false になります。

&&|| の優先順位がおかしい。

演算子の優先順位 - JavaScript | MDN

この二つの演算子の優先順位は && > || です。
例ではまず a && b!a && !b が評価され、それから || の評価という順番です(実際は短絡評価されるのでこの通りではない)。

でもExtendScriptでは a && b の次は || !a が評価されてしまいます。
どうやら優先順位が同列になっているようで、1 + 2 × 3 = 9 と計算しているようなものです。

なので、ExtendScript&&|| を同時に使う場合は、余計なバグを起こさないよう括弧でくくって優先度を明示した方がいい。

……のですが、上述のPhotoshopスクリプトはES6で書いたものをBabelに通して作ったので、余計な括弧が削除されてしまい思わぬバグが引き起こされてしまいました。
結局、冗長ですが判定を二段階に分けて対処することに。

めんどくさい。


ちなみにサンプルで上げたコードは「否定排他的論理和(XNOR)」です。 JavaScriptにはXOR演算子が(ビット演算子しか)ないので愚直に書くとああなりますが、実用上は

const c = a == b

で十分だったりします。
(型によらず判定するなら !!a === !!b

同人誌制作をサポートするPhotoshopスクリプト

同人誌を作るときに便利なPhotshop用のスクリプトを公開しました。
もともと自分用に作ったものを、使いやすいように改良したものです。

github.com

BOOTHからもDLできます。

utsutsunogare.booth.pm

「断ち切りガイド」「断ち切り削除」「自動ノンブル」「隠しノンブル」「すべてのドキュメントを連番で保存」の5種類のスクリプトを同梱しています。

基本的な使い方はREADMEに書いてありますし、たぶんちょっと触ればすぐに分かると思います。
ここではややわかりにくいかもしれない仕様などを書いておきます。

共通の仕様

「自動ノンブル」「隠しノンブル」「連番で保存」には以下の共通した仕様があります。

  • 現在開いているすべてのドキュメント(ファイル)が対象。
  • 処理の順番は「ドキュメントが開かれた順番」と同じ。これはタブの順番を入れ替えても変わらない。
  • 保存先フォルダに同名ファイルがある場合は強制的に上書き保存する(開いているファイルと同一のフォルダに保存しようとした場合、警告は出るが、上書きの確認まではしない)。

保存処理に関しては取り返しのつかないことになりかねないので、なるべく新規フォルダなどを作って保存することをおすすめします。

断ち切りガイド

断ち切り線の位置にガイドを追加するスクリプト。表紙用に背幅ガイドを追加する機能もあります。

「断ち切り追加」について

たとえばドキュメントのサイズが182mm ✕ 257mmで、断ち切り3mmとした場合。
「断ち切り追加」にチェックを入れると、ドキュメントのサイズが188mm ✕ 263mmになった上でガイドが追加されます。

断ち切り削除

断ち切り幅分ドキュメントサイズを削るスクリプト

「断ち切り」について

マイナスの数を入れると逆にドキュメントサイズが大きくなります。つまり上記「断ち切り追加」と同じ機能です。

自動ノンブル

ノンブル(ページ番号)を全自動で振っていくスクリプト

「カラー」について

デフォルトの初期値はRGBモードの場合 R=0, G=0, B=0 です。それ以外では C=0, M=0, Y=0, K=100 になります。

「垂直位置・水平位置」について

「天・地」「ノド・小口」の選択によって距離の基準位置が変わります。

右綴じで天5mm、小口5mm、断ち切り3mmに設定したときの奇数ページ

右綴じで地5mm、小口5mm、断ち切り3mmに設定したときの奇数ページ

垂直位置を「天」にした場合、天からノンブルの上端までの距離、「地」にした場合は地からノンブルの下端までの距離となります。

同様に「ノド」「小口」はノンブルの左右どちらかの端までの距離となり、例えば「右綴じ・ノド・偶数ページ」であれば左端、「左綴じ・小口・奇数ページ」であれば右端までの距離となります。

いずれも「中央」の場合は、ノンブルの中心点が垂直・水平の中央に来ます。

「除外ページ」について

例えばファイルを5つ開いた状態で、初期値5にして除外ページに「6,7」と入れた場合、ノンブルは

5, 8, 9, 10, 11

となります。

間のファイル自体がスキップされるわけではなく、あくまでその数値が飛ばされるだけです。
これは以下の「隠しノンブル」「連番で保存」も同様です。

隠しノンブル

隠しノンブル(製本時に見えなくなるページ番号)を全自動で振っていくスクリプト

位置の指定などがないだけで基本的には「自動ノンブル」と同じ仕様です。
ただし、2桁以上のノンブルは1桁ずつ改行されます。

すべてのドキュメントを連番で保存

連番の名前(001.psd, 002.psd ... など)を付けてファイルを保存するスクリプト

「除外ページ」について

やはりファイル自体がスキップされるわけではないので、例えばファイルを5つ開いて初期値6、除外ページ「8,9,11」とした場合、保存されるファイルは

06.psd 07.psd 10.psd 12.psd 13.psd

となります。


バグなど見つけたらお知らせいただけると嬉しいです。

それではよき同人ライフを👋