InDesign、Illustrator、PhotoshopでのJavaScriptの相違点

Adobe ExtendScript Toolkitを使用して
JavaScriptでInDesign、Illustrator、Photoshopから、
・文字
・フォント名
・スタイル名
・サイズ
・カラー値
を取得するJavaScriptを書いてみました。
![04.JPG](https://qiita-image-store.s3.amazonaws.com/0/122812/fec275ca-6c74-f867-4a8c-34ffb4174f59.jpeg)

```javascript:InDesign
var myDocument = app.activeDocument;
var mySelection = myDocument.selection;
for (var i = 0, mySelectionLength = mySelection.length; i < mySelectionLength; i++) { //InDesignではfor文が必要!?
    var myContents = mySelection[i].contents; //選択している文字
    var myFontName = mySelection[i].appliedFont.postscriptName; //フォント名
    var myFontStyle = mySelection[i].appliedFont.fontStyleName; //スタイル名
    var myFontSize = mySelection[i].pointSize + 'pt'; //サイズ（四捨五入処理の必要があるが割愛）
    var myColorArray = mySelection[i].fillColor.colorValue; //文字色（配列）
    var myColor = "R：" + myColorArray[0] + "　G：" + myColorArray[1] + "　B：" + myColorArray[2];
}
alert(myContents + "\r\n" + myFontName + "\r\n" + myFontStyle + "\r\n" + myFontSize + "\r\n" + myColor);
```

色々と検証してみましたが、for文を用いないと取得できないようです。
フォント名は「appliedFont.postscriptName」（和名取得は「appliedFont.name）
スタイル名は「appliedFont.fontStyleName」
サイズは「pointSize」
色は「fillColor.colorValue」で取得できますが配列になるので番地を指定して各色に振り分けます。
※ptなど、単位は環境設定で選ばれているものを表示することが可能。

```javascript:Illustrator
var myDocument = app.activeDocument;
var mySelection = myDocument.selection;

var myContents = mySelection.contents; //選択している文字
var myFontName = mySelection.textFont.name; //フォント名
var myFontStyle = mySelection.textFont.style; //スタイル名
var myFontSize = mySelection.size + 'pt'; //サイズ

var myFontRedColor = mySelection.fillColor.red; //red値
var myFontGreenColor = mySelection.fillColor.green; //green値
var myFontBlueColor = mySelection.fillColor.blue; //blue値
var myColor = "R：" + myFontRedColor + "　G：" + myFontGreenColor + "　B：" + myFontBlueColor;

alert(myContents + "\r\n" + myFontName + "\r\n" + myFontStyle + "\r\n" + myFontSize + "\r\n" + myColor);
```

InDesignとは異なり、for文を使用しないで取得できます。
フォント名は「textFont.name」（「textFont.family」とするとフォントファミリー取得（和名））
スタイル名は「textFont.style」
サイズは「size」
色は「fillColor.red」「fillColor.green」「fillColor.blue」のように単色で取得できます。


```javascript:Photoshop
var myDocument = app.activeDocument;
var mySelection = myDocument.selection;

var myActiveLayer = activeDocument.activeLayer;//Photoshopは文字をレイヤーとして持つ

var myContents = myActiveLayer.textItem.contents;//選択している文字
var myFontName=myActiveLayer.textItem.font;//フォント名
var myFontSize=myActiveLayer.textItem.size;//サイズ

var myFontRedColor=myActiveLayer.textItem.color.rgb.red ; //red値
var myFontGreenColor=myActiveLayer.textItem.color.rgb.green ; //green値
var myFontBlueColor=myActiveLayer.textItem.color.rgb.blue ; //blue値
var myColor="R："+myFontRedColor+"　G："+myFontGreenColor+"　B："+myFontBlueColor;

alert(myContents+"\r\n"+myFontName+"\r\n"+myFontSize+"\r\n"+myColor);
```

InDesignやIllustratorとは異なり、文字ツールで文字を選択しての取得はできないようです。
なので移動ツールで選択した状態で実行します。
Photoshopは文字をレイヤーで保持するので、レイヤーにアクセスする必要があります。
Illustratorと同様にfor文を使用しないで取得できます。
フォント名は「textItem.font」
スタイル名は色々と調べたのですが分かりませんでした。
フォント（ファミリー）名の後ろにハイフン繋がりで表示されるのでそれから取得するしかないかと思われます。
サイズは「textItem.size」
色は「textItem.color.rgb.red」「textItem.color.rgb.green」「textItem.color.rgb.blue」のように単色で取得できます。
rgb.redのようにカラーモードを指定して各色を取得するのが特徴です。
例えばcmykのマゼンタを取得する場合は「color.cmyk.magenta」とします。