Illustratorの「Diacritics Position」について

昨日目の前をdiacVPosっていうのがとおりすぎていったんですが、こいつって発音記号の縦位置関連のプロパティーだったよなぁ…と思っているうちに見失いました。
後で思い出そうと頑張ってみましたがはっきりとしたことはわからなかったのですが、通勤電車の中でちょっと思い出しました。こいつってあらびっくやへぶらいな方々の為に用意された機能なのです。で、先程大急ぎで調べました。

characterAttributeschilddiacVPosdiacXOffsetdiacYOffsetの3つのプロパティが存在します。では試してみましょう。

diac1
グレイで表示されているのがDiacVPosType.DEFAULT_POSITIONです。ピンクがDiacVPosType.LOOSE_POSITION、ブルーがDiacVPosType.TIGHT_POSITIONです。enumeratorにはあとひとつOPENTYPEがあるのですが、現在はOpenTypeフォントを利用しますのでおおよそのケースではDEFAULTと同じになります。

更に数値でダイレクトにdiacritical markを動かしてみます。

app.selection.characterAttributes.diacXOffset = 500;

結果は…

diac2黄色いほうが500移動したものです。

同様に縦方向は

app.selection.characterAttributes.diacYOffset = 500;

として、結果は以下のようになります。

diac3

※スクリプト実行時はテキストツールで全体を選択した状態でtextRangeに対して処理を行います。

 

パスオブジェクトを水平にしよう

みなさまにおかれましてはご清祥のこととお慶び申し上げます。

ということで、すでに本年も10%程経過してしましました。なにそれ、こわい! で、結構多忙で何もかも進まない状態のどん詰まりなのですが、ここんとこ結構冷え込んでオフトゥンから脱出するのが一苦労な状況です。みなさまにおかれましてはぱげでそれどころではないものと存じます。ということで、こっそりスクリプトを置いておきます。

続きを読む

InDesignで圧縮ファイルを操作しよう(^-^)/

 

みなさまお久しぶりでございます。皆様におかれましてはご健勝のことと存じますが、無事年の瀬を乗り切れそうな方もそうでない方もそれなりに過ごしていただければと思う次第です。
わたしどもに関しては自動化フォーラムを消されたり(信じられない!)Communityが散々な出来(なんなんだろうねホントウニ!!!)だったりで、さんざん暴れまわって(だいたい裏で…)いるような次第でございますが、裏でちょろちょろっと(本当にチョットダケヨ)動いていたら暗躍とか言われて心外なのです。
まあ、こみゅにてぃに関しましては(問題はアレだけじゃないけどw)多くの皆様にご意見(罵声)・ご支持(本当か?)を頂き(実際はどうなんだろう?)良い方向に向かっている(多分ダメ)のかどうなのかはわかりません(本当ドウスンダコレ?)が、言う必要のあること(コレオオスギ)は言わせていただく(だいたいは裏で)と言ったスタンス(メンドウですぅ)でこれからも挑もう(多分)とは思うのです(ガンバルルルル)。
と長々と並べ立てているのですが、本題です。ばたばたしている間にAdvent Calendarの季節がやって来てしまったわけでして、この記事は「https://adventar.org/calendars/3958」の1番めのTipsにあたるものという事になります。一番最初ですからゆる〜く行きますねw

続きを読む

VS CodeをExtendScript用にセットアップする。(Mac版)

年末進行の慌ただしい中、ESTKが停止して世界が阿鼻叫喚に見舞われたことは記憶にあたらしいのですが、そんな中でさらっとESTKは32bitだからもう捨てるね(^-^)/なんて話も飛び出してwwwまあ、大変だったのですが、VisualStudio Codeのプラグインがリリースする事が発表されたのは朗報と言うべきでしょう。以前からVS Code慣れとけって言ってたのはこれに対応する為だったのですが、どれだけの人が真に受けたのでしょうかw
しかしながら、コードヘルパーの実装は見送られるようです。これはいけない、なんとかしなければって思ったのですが、世界は広いものでVS CodeでES編集する手法がありました。
こちらなのですが、TypeScript型定義ファイルを用意してTypeScript上でExtendScriptを編集してしまおうという乱暴な方たちです。

続きを読む

ExtendScript用エディタ・エクステンション

あけおめどぞよろという事で平成最後となりましたが、この30年ちょいという期間はほとんどをAdobe社と歩んで来たという印象です。良いんだか悪いんだか自分でもよく分かりませんw
後半の方はひたすら自分が面白いと思う方向へ全力で傾倒して行ったような気がします。そしてしびれを切らした某社が反応せずにはいられなくなったという事なんだと思います。
2019年はいろんな意味で節目を迎える年であり、これより変革へと突き進む激動の時期へと移行します。
まず大きな変化はExtendScriptを取り巻く環境の変化から始まります。昨年末のESTKのトラブルからデベロッパー・エコシステムチームの公式の声明よりESTKの開発停止の報が流れました。それに伴い新しい編集・デバッグ環境についても情報が流れました。
そんなこんなで第1四半期は情報待ちです。みなさまにおかれましてもまずはVS Codeに慣れるように今から準備していただきたいと思います。

codeeditorv102

さて、そうこう言いましても現状ではESTK等を利用する他ありません。しかし、そこら辺を放置したままというのも片手落ちですから重い腰を上げてエクステンションを用意しました。と言いつつも以前適当に作ったやつの更新なのですがw
以下のリンクよりzxpファイルをダウンロードしてください。

https://drive.google.com/file/d/0B8WPQj-WNG_TbV9zblJGVUpPWDA/view?usp=sharing

インストールにはあなすたしーずえくすてんしょんまねーじゃーが便利かと思います。しかしながら、7z形式の圧縮ファイルですから解凍した上でExtensionsフォルダーに投入してもOKです。
キーマップはvimです。ご注意を(^o^)/

オブジェクトモデルについて

今回の投稿もAdobe Max Japan2018にて私が担当したワークショップ「使わないと損をする! Illustrator & InDesignのScript活用講座 〜あれもこれも便利になります〜」のフォーローアップエントリーとなります。
Workshopではオブジェクトモデルについて概要的な解説を行いました。今回はこのオブジェクトモデルについて少し掘り下げたいと思います。

続きを読む

[AI]スクリプトからのエフェクト操作

今回の投稿はクリスマスシーズンに入りましたので、DTPアドベントカレンダーへの投稿として簡単にまとめてみました。
これから年末にかけて多忙な日が続くとは思いますが、皆様が健康にクリスマス〜新年を迎えられますように(^-^)/
さて、IllustratorのスクリプトではapplyEffectというメソッドが存在します。これはIllustratorの効果メニューの各項目をスクリプトから適用するためのメソッドです。これに関しては
で言及してあります。しかし、この記事にも限界があります。FXG形式の書き出しはCS6以降では廃止された為、それ以降に実装された効果に関しては引数であるXMLを組み立てるためのパラメータがわからないのです。
ということで様々な方たちが色々なところを掘り返してパラメータを調べ始めました。以降でまとめられる手法は上海のスクリプターmoluappleがまとめたものを解説したものです。

コンテンツリカバリーモードを設定する

以下のスクリプトをIllustratorで1回実行し、コンテンツリカバリーモードを設定する。(on/offトグル動作なのでもう一度実行するとリカバリモードを抜ける)
app.preferences.setBooleanPreference("aiFileFormat/enableContentRecovery", 
!app.preferences.getBooleanPreference("aiFileFormat/enableContentRecovery"));

Illustrator書類をテキストエディタで開けるようにする

効果をかけたオブジェクトを含むファイルを予め作成しておき、そのファイルをコンテンツリカバリモードで保存します。
  1. Illustrator上でファイルを開くダイアログを表示。(まだファイルを開いてはいけません)
  2. 対象ファイルを選択した状態で「Command + Option + Shift(Mac)」「Ctrl + Alt + Shift (Windows)」をプレスしたまま開くボタンをクリックする。
  3. 空のドキュメントが開いた状態で対象ファイルが開かれるのでそのまま閉じる。
以上の手順で対象ファイルと同一のフォルダに頭に「_」が付いたファイルが保存されています。
このファイルをテキストエディタで開いて以下の正規表現で検索します。
「BasicFilter\s:\n\((.+?)\)\s1\s0\s\/Filter」
以下は「角を丸くする…」の記述部分がヒットしたものです。
/BasicFilter :
(Adobe Round Corners) 1 0 /Filter ,
1 /Visible ,
(Adobe Illustrator.app) /PluginFileName ,
(\212p\202\360\212\333\202\255\202\267\202\351) /Title ,
/Dictionary : /NotRecorded ,
2 /Real (radius) ,←逆ポーランド記法で値とDict名称が書かれている。
; /Dict ;
 /Part ,
このままではapplyEffectメソッドの引数のXML構造にはなりませんので整形が必要となります。
テンプレート
'<LiveEffect name="">'
+'<Dict data="'
+' '
+' I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
上記のテンプレートのDict dataの値として検索でヒットした/Dictのパラメータを成形加工します。
角を丸くする…コマンドの/Dictは以下に抜き出した1行のみです。
2 /Real (radius) 
  ↓
R radius 2(データ型を表すアルファベット1文字、データ名称、数値の3点をスペース区切りで記述する)
上記のパターンで/Dictにエントリされている全てのパラメータを整形します。
データ型は、Real→R、Integer→I、Boolean→Bの3点が存在します。
この例ではDictエントリが1点だけなので最終的なXMLは以下の様になります。
'<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2 '
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
これを用いてスクリプトを書くと「角を丸くする…」は以下のようなスクリプトになります。
var xmlstring = '<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2 '
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>';
 app.selection[0].applyEffect(xmlstring);
エフェクトを検索する作業も楽しいので是非お試し下さい。