Archive for the 'Font Book' Category

2017/11/02 インストールされているフォントをdisplay nameからキーワード検索 v3

macにインストールされているフォントのdisplay nameからキーワード検索するAppleScriptのShane Stanleyによる高速版です。

  「さすがにFontBook検索より遅いのはダメでしょ」

というツッコミがShane Stanleyからあり、このコードがメールで届いたのでありました。

 FontBook.app:0.6 sec.
 AppleScriptObjc:0.2 sec.

と、このぐらいだと納得できる感じでしょう。

私にはこの、

 NSFontManager’s sharedFontManager()’s availableFonts()

というメソッドを見つけ切れなかったので(一番上に書いてあるのに ーー;)ああいう書き方をしましたが、NSFontManagerからavailableFontFamilies()を経由しないでavailableFonts()で一気に個別のフォント名を取得できれば、条件抽出も割と高速にできるわけです。

AppleScript名:インストールされているフォントをdisplay nameからキーワード検索 v3
– Created 2017-11-01 by Takaaki Naganoya
– Modified 2017-11-02 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
–http://piyocast.com/as/archives/4948

property NSFontManager : a reference to current application’s NSFontManager
property NSFont : a reference to current application’s NSFont
property NSPredicate : a reference to current application’s NSPredicate

set fRes to getEveryFontContainsAQueryStr("Helvetica") of me
–>  {"Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Light", "Helvetica-LightOblique", "Helvetica-Oblique", "HelveticaNeue", "HelveticaNeue-Bold", "HelveticaNeue-BoldItalic", "HelveticaNeue-CondensedBlack", "HelveticaNeue-CondensedBold", "HelveticaNeue-Italic", "HelveticaNeue-Light", "HelveticaNeue-LightItalic", "HelveticaNeue-Medium", "HelveticaNeue-MediumItalic", "HelveticaNeue-Thin", "HelveticaNeue-ThinItalic", "HelveticaNeue-UltraLight", "HelveticaNeue-UltraLightItalic"}

set fRes to getEveryFontContainsAQueryStr("ことり") of me
–>  {"TheLittleBirdFONT", "kotorimojiFONT-TT"}

on getEveryFontContainsAQueryStr(queryName as string)
  set hitFontList to {}
  
set aFontList to NSFontManager’s sharedFontManager()’s availableFonts()
  
– filter out hidden fonts
  
set thePred to NSPredicate’s predicateWithFormat:"NOT SELF BEGINSWITH ’.’"
  
set aFontList to aFontList’s filteredArrayUsingPredicate:thePred
  
  
repeat with fontName in aFontList
    set aFont to (NSFont’s fontWithName:fontName |size|:16)
    
set aDispFontName to (aFont’s displayName()) as string
    
    
if aDispFontName contains queryName then
      set end of hitFontList to (fontName as text)
    end if
  end repeat
  
  
return hitFontList
end getEveryFontContainsAQueryStr

★Click Here to Open This Script 

2017/11/02 インストールされているフォントをdisplay nameからキーワード検索 v2

macにインストールされているフォントのdisplay nameからキーワード検索するAppleScriptの修正版です。

最初に作成したものを(2年後に)FontBook.appを呼び出すAppleScriptと処理結果を比較したところ、ASOC版の方が間違っていたので修正してみました(たまたま実戦で使っていなかったので、それほど真剣に検証していなかったもよう)。

修正した結果、

 FontBook.app:0.6 sec.
 AppleScriptObjc:0.9 sec.

FontBook版よりも処理時間がかかっています。起動時にこうした「処理に時間がかかる計算」を行っておき、結果をキャッシュしておくことで「見た目の処理時間」を減らすことも可能でしょう。

AppleScript名:インストールされているフォントをdisplay nameからキーワード検索 v2
– Created 2015-08-27 by Takaaki Naganoya
– Modified 2017-11-01 by Takaaki Naganoya
– 2017 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “AppKit”
–http://piyocast.com/as/archives/4947

property NSFontManager : a reference to current application’s NSFontManager
property NSFont : a reference to current application’s NSFont

set fRes to getEveryFontContainsAQueryStr(“Helvetica”) of me
–>  {”Helvetica”, “Helvetica-Oblique”, “Helvetica-Light”, “Helvetica-LightOblique”, “Helvetica-Bold”, “Helvetica-BoldOblique”, “HelveticaNeue”, “HelveticaNeue-Italic”, “HelveticaNeue-UltraLight”, “HelveticaNeue-UltraLightItalic”, “HelveticaNeue-Thin”, “HelveticaNeue-ThinItalic”, “HelveticaNeue-Light”, “HelveticaNeue-LightItalic”, “HelveticaNeue-Medium”, “HelveticaNeue-MediumItalic”, “HelveticaNeue-Bold”, “HelveticaNeue-BoldItalic”, “HelveticaNeue-CondensedBold”, “HelveticaNeue-CondensedBlack”}

set fRes to getEveryFontContainsAQueryStr(“ことり”) of me
–>  {”kotorimojiFONT-TT”, “TheLittleBirdFONT”}

on getEveryFontContainsAQueryStr(queryName as string)
  set aFontFamilyList to (NSFontManager’s sharedFontManager()’s availableFontFamilies()) as list
  
set hitFontList to {}
  
  
repeat with i in aFontFamilyList
    set aFontList to (current application’s NSFontManager’s sharedFontManager()’s availableMembersOfFontFamily:(i as string)) as list
    
set tmpList to {}
    
repeat with ii in aFontList
      copy ii to {tmpFontName, tmpFontStyle, tmpA, tmpB}
      
      
set aFont to (NSFont’s fontWithName:tmpFontName |size|:16)
      
set aDispFontName to (aFont’s displayName()) as string
      
      
if aDispFontName contains queryName then
        set hitFontList to hitFontList & tmpFontName
      end if
    end repeat
  end repeat
  
  
return hitFontList
end getEveryFontContainsAQueryStr

★Click Here to Open This Script 

2017/11/01 インストールされているフォントをdisplay nameからキーワード検索

macにインストールされているフォントのdisplay nameからキーワード検索するAppleScriptです。

FontBook.appで処理するのとくらべて、ほんの少し速いぐらいです(起動時間を考慮しなければ)。

 FontBook.app:0.6 sec.
 AppleScriptObjc:0.4 sec.

10回実行して平均処理時間が20%程度高速でした。

→ ASOC版はFontではなくFont Familyを検索していました。FontBookの処理の方が正しい内容です。修正版はこちら。

AppleScript名:インストールされているフォントをdisplay nameからキーワード検索
– Created 2015-08-27 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “AppKit”
–http://piyocast.com/as/archives/4946

property NSFontManager : a reference to current application’s NSFontManager
property NSFont : a reference to current application’s NSFont

set fRes to getEveryFontContainsAQueryStr(“Helvetica”) of me
–>  {{”Helvetica”, “Helvetica”, “Helvetica”}, {”Helvetica Neue”, “Helvetica Neue”, “HelveticaNeue”}}

set fRes to getEveryFontContainsAQueryStr(“ことり”) of me
–>  {{”kotorimojiFONT TT”, “ことり文字ふぉんと等幅”, “kotorimojiFONT-TT”}, {”TheLittleBirdFONT”, “ことり文字ふぉんと”, “TheLittleBirdFONT”}}

on getEveryFontContainsAQueryStr(queryName)
  set aFontList to (NSFontManager’s sharedFontManager()’s availableFontFamilies()) as list
  
  
set hitList to {}
  
  
repeat with i in aFontList
    set aFont to (NSFont’s fontWithName:(i as string) |size|:16)
    
set aDispFontName to (aFont’s displayName()) as string
    
set aFontName to (aFont’s fontName()) as string
    
    
if aDispFontName contains queryName then
      set the end of hitList to {i as string, aDispFontName, aFontName}
    end if
  end repeat
  
  
return hitList
end getEveryFontContainsAQueryStr

★Click Here to Open This Script 

AppleScript名:インストールされているフォントをdisplay nameからキーワード検索(FontBook)
tell application “Font Book”
  set ffList1 to (name of every typeface whose displayed name contains “Helvetica”)
  
–> {”Helvetica Light”, “Helvetica”, “Helvetica Oblique”, “Helvetica Light Oblique”, “Helvetica Bold”, “Helvetica Bold Oblique”, “Helvetica Neue UltraLight”, “Helvetica Neue Thin”, “Helvetica Neue Medium”, “Helvetica Neue Light”, “Helvetica Neue”, “Helvetica Neue Italic”, “Helvetica Neue UltraLight Italic”, “Helvetica Neue Thin Italic”, “Helvetica Neue Medium Italic”, “Helvetica Neue Light Italic”, “Helvetica Neue Bold”, “Helvetica Neue Bold Italic”, “Helvetica Neue Condensed Black”, “Helvetica Neue Condensed Bold”}
  
  
set ffList2 to (name of every typeface whose displayed name contains “ことり”)
  
–> {”kotorimojiFONT-TT”, “TheLittleBirdFONT”}
end tell

★Click Here to Open This Script 

2010/11/03 Font Bookで選択中のフォントを削除(Font Containerなしフォント、および複数選択対応)

Font Bookで選択中のフォントを削除するAppleScriptです。

数千のフォントを……OpenType、CID、OCF、Type1、TrueType、Biblosフォントなど何種類も、くる日もくる日も夜通しAppleScriptで処理したところ……Font ContainerのないフォントやFont Bookをクラッシュさせる毒フォントなど、予想だにせぬ事態の連続。

1つのファイルで複数のフォントを格納しているスーツケースなど「そういえば昔そんなものが!」という歴史的なトラップなど、数々の試練を超えて強化された、本AppleScript。

AppleScriptでFont Bookに登録するぐらいは雑作もないですが、一時的に登録したフォントを削除するのが大変でした。

例によってMac OS X 10.5用であり、Mac OS X 10.6上ではきちんと動作しません。10.6のFont Bookは(調べてみたら)異様に出来が悪いので、Appleにバグレポートしておくつもりです。10.6代で修正される可能性は低そうですが、せめて10.7に持ち越さないでほしいと願うばかりです。

スクリプト名:Font Bookで選択中のフォントを削除(Font Containerなしフォント、および複数選択対応)
tell application "Font Book"
  set aa to selection
end tell

repeat with i in aa
  
  
set errF to false
  
  
try
    tell application "Font Book"
      set anID to ID of i
    end tell
  end try
  
  
–Font IDを取得できたかどうか、エラーチェック
  
try
    copy anID to tmpID
  on error
    set errF to true
  end try
  
  
–Font IDを取得できた場合にのみフォント削除を実行
  
if errF = false then
    set delRes to deleteFontByFontID(anID) of me
  end if
end repeat

tell application "Finder"
  –Fontにロックがかかって削除しきれない場合もあるのでエラートラップで備える
  
try
    empty trash
  end try
end tell

–Font BookからIDで指定したフォントを削除
on deleteFontByFontID(aFontID)
  tell application "Font Book"
    –フォントをIDで指定
    
set aFontList to (every typeface whose ID = aFontID)
    
if aFontList = {} then return false
    
    
repeat with aFont in aFontList
      
      
try
        set fConL to font container of aFont
      on error
        set fConL to ""
      end try
      
      
      
repeat with i in fConL
        set fCon to contents of i
        
try
          remove fCon
        on error
          –return false
        end try
      end repeat
      
    end repeat
  end tell
  
  
return true
end deleteFontByFontID

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/10/25 指定のフォントをFont Bookから削除する v3

PostScript名称で指定したフォントをFont Bookから削除するAppleScriptです。

以前に、Font Bookからのフォント削除が行えていないと書いていましたが、その後の試行錯誤によって削除できるようになりました。ただし、Mac OS X 10.5以降で動作を確認しているものの、10.4上では削除が行えませんでした。

追記:Mac OS X 10.6上でも削除できませんでした。ほかにもバグがあって……10.6のFontBookの出来がひどすぎる……(ーー;;;

スクリプト名:指定のフォントをFont Bookから削除する v3
set delRes to deleteFontByPSName(“RyuminStd-Ultra-KS”) of me

–Font BookからPostScript nameで指定したフォントを削除
on deleteFontByPSName(aPSNameStr)
  tell application “Font Book”
    –フォントをIDで指定
    
set aFontList to (every typeface whose PostScript name = aPSNameStr)
    
if aFontList = {} then return false
    
    
set aFont to first item of aFontList
    
    
set fConL to font container of aFont
    
    
repeat with i in fConL
      set fCon to contents of i
      
try
        remove fCon
      on error
        return false
      end try
    end repeat
  end tell
  
  
return true
end deleteFontByPSName

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/10/21 指定のフォントファイルをFont Bookに追加して情報を取得する

指定のフォントファイルをFont Bookに追加して各種情報を取得するAppleScriptです。

フォントファイルをFinder上でinfo forなどで突っつく程度ではファイルの種別ぐらいの情報しか得られません。名称や各種情報については、やはりFont Book経由でオープン(インストール)する必要があります。

そこで、任意のフォントのファイルをFont Book経由でインストールするAppleScriptを作成してみました。

ところが……これが苦労の連続で……Font Bookにフォントを登録しても、そのオブジェクト(フォント)への参照が返ってきません。たった今追加したフォントへの参照が得られないわけで、登録したはいいが情報が得られない、という間抜けな状況になってしまいます。

本来ならここであきらめるところですが、登録までできているところが残念です。そこで、Font Bookに対して全フォントのIDを要求、任意のフォントを追加したあとでもう一度全フォントのIDを取得。

処理前の全IDのリストと処理後の全IDのリストで差分をとって、インストールしたフォントのIDだけを抽出します。

環境によっては1,000以上もフォントがインストールされていることもあるため、処理速度の高速化のためにいくつか手を打っておきました(といいつつ、a reference toで間接参照するぐらいしか高速化の手段がないわけですが)。

Font Bookは、かなり動きの怪しいアプリケーションで……勝手にクラッシュすることもたびたびです。Font Bookを相手に時間のかかるバッチ処理を行いたいような場合には、毎回毎回、Font Bookのプロセスがクラッシュしていないか確認を行い、クラッシュしていた場合には強制起動を行うなど、さまざまな配慮が必要です。

スクリプト名:指定のフォントファイルをFont Bookに追加して情報を取得する
global beforeID, afterID, beforeID_r, afterID_r

set aFontFile to choose file

–ファイル名を取得する
tell application "Finder"
  set aName to name of aFontFile
end tell

tell application "Font Book"
  –登録したフォントを特定するために、全フォントのIDを取得
  
set beforeID to ID of every typeface
  
  
–指定のフォントファイルをFontBookに登録する(「ユーザ」コレクションに追加)
  
add aFontFile to font library "User"
  
  
–登録したフォントを特定するために、全フォントのIDを取得
  
set afterID to ID of every typeface
end tell

set beforeID_r to a reference to beforeID
set afterID_r to a reference to afterID

–IDの差分を取って、追加されたIDを算出する
set aIsNotInB to {}
repeat with i in afterID_r
  set j to contents of i
  
if j is not in beforeID_r then
    set the end of aIsNotInB to j
  end if
end repeat

–異常発生時への対応
if length of aIsNotInB is not equal to 1 then
  display dialog "なんかおかしいよ〜"
  
return
end if

set newFontID to first item of aIsNotInB

tell application "Font Book"
  
  
–追加されたフォントの情報を取得する
  
set aProp to properties of every typeface whose ID = newFontID
  
set aaProp to first item of aProp
  
set dispFontName to PostScript name of aaProp
  
  
–指定フォントを削除する?
  
–set enabled of every typeface whose ID = newFontID to false –from font library "User"
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/10/21 Font Bookで指定文字列ではじまるfont collectionをすべて削除する

Font Book上にあるfont collectionのうち、指定文字列ではじまる名称のものをすべて削除するAppleScriptです。

スクリプト名:Font Bookで指定文字列ではじまるfont collectionをすべて削除する
tell application "Font Book"
  delete (every font collection whose displayed name starts with "font_collection_")
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/10/21 Font Bookでfont collectionを作成する

Font Bookで任意のfont collectionを作成するAppleScriptです。

Font Bookでは、一種のフォルダのような「font collection」を作成してフォントを管理できるようになっています。そのfont collectionを作成するAppleScriptです。

これがなかなかくせ者で……make new font collection with propertiesなどと書いて、プロパティ値を最初から指定してみても……うまくいきませんでした。

そこで、何も指定せずにfont collectionを作成し、作成時にfont collectionへのオブジェクト参照が返ってくるかを確認。無事、返ってきたので、そのfont collectionのnameとdisplayed nameを変更して任意の名称のfont collectionの作成が行えました。

ただ……一括で大量にfont collectionを作成すると、キャッシュされたデータが残るのか、残像のように「名称未設定」font collectionが出来てしまうことがあるので、一度Font Bookを終了して再立ち上げを行うようにしてみました。

本AppleScriptを試すときにはあらかじめFont Bookを起動しておいてください。

なぜこのようなAppleScriptを作ろうとしたかといえば、ファイルサーバー上で管理されているただ置いてあるだけの大量のフォントファイルを自動でFont Bookに登録して、情報を取得してデータベースに突っ込むようなものを作っているときに、一時的にFont Bookに登録したフォントを分類すべくFont Collectionの作成を行ってみた次第です。

ただ……だんだん、Font Collectionの作成に没頭して、世界中で誰もやっていなさそうなFont BookのScriptingに傾倒。

なかなか楽しませていただけましたが、Font Bookからのフォント削除はどーーやっても成功していません。フォントファイルのパスは分かるので、単なるファイルとして削除を行ってしまってもよさそうな感じもしますが、Font Book経由で削除してみたいところです。

スクリプト名:Font Bookでfont collectionを作成する
tell application “Font Book”
  repeat with i from 1 to 10
    –font collectionを作成する前に存在確認  
    
set aNewCollectionName to “font_collection_” & (i as string)
    
set aCollectExist to exists of font collection aNewCollectionName
    
    
–font collectionが存在しない場合にのみ作成を行う
    
if aCollectExist = false then
      set aCollect to make new font collection
      
set execF to false
      
      
repeat 10 times
        try
          tell aCollect
            –片方だけ指定するとおかしなことになる。nameとdisplayed nameの両方を指定しないとダメ
            
set name to aNewCollectionName
            
set displayed name to aNewCollectionName
          end tell
          
set execF to true
          
exit repeat
        on error
          –delay 1–for debug
        end try
      end repeat
      
      
–ループを10回繰り返して、それでも結局エラーだった場合
      
if execF = false then
        display dialog (i as string) & “個目のfont collectionを作成中でしたが、エラーにより中断しました。”
        
return
      end if
      
    end if
  end repeat
end tell

tell application “Font Book” to quit
delay 1
tell application “Font Book” to launch

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/28 Font Bookで指定typefaceの詳細な情報を取得する

目下、マイブームが起きているFont Book。AppleScriptから操作すると興味深い情報が山のように出てきます。本Scriptでは、PostScript nameで指定したフォントの詳細な情報を取得します。

フォント名称の取得は、通常のAppleScriptでもそうですが、AppleScript Studioのアプリケーションでフォント指定を行う場合に必要なテクノロジーです。

しかし、ここまで詳細に情報が取得できるというのは、Font Book担当者の「趣味」なのでしょうか。Apple純正アプリのAppleScript系機能が軒並み荒いことを考えると、本アプリのみ丁寧な作りになっているのは……Font Bookはサードパーティから買い取ったか、外注に作らせているアプリケーションなのかもしれません(有名なところでは「Interface Builder」を外注に作らせている、と噂で聞いたことがあります)。

スクリプト名:Font Bookで指定typefaceの詳細な情報を取得する
tell application Font Book
  set ffList to properties of first item of (every typeface whose PostScript name = HiraKakuPro-W3“)
end tell
> {{style name:”W3″, duplicated:false, typeface additional info:{|FBFaceFullName|:”ヒラギノ角ゴ Pro W3″, |FBFaceLocation|:”/Library/Fonts/ヒラギノ角ゴ Pro W3.otf”, |FBFaceManufacturerName|:”大日本スクリーン製造株式会社”, |FBFaceLanguages|:{”アイスランド語”, “アイルランド語”, “アルバニア語”, “イタリア語”, “インドネシア語”, “エストニア語”, “エスペラント語”, “オランダ語”, “オロモ語”, “ガリシア語”, “カタロニア語”, “コーンウォール語”, “スウェーデン語”, “スペイン語”, “スロバキア語”, “スロベニア語”, “スワヒリ語”, “ソマリ語”, “チェコ語”, “デンマーク語”, “ドイツ語”, “ノルウェー語 (ニーノシュク)”, “ノルウェー語 (ブークモール)”, “バスク語”, “ハワイ語”, “ハンガリー語”, “ブルガリア語”, “フィンランド語”, “フェロー語”, “フランス語”, “ポルトガル語”, “ポーランド語”, “マレー語”, “マン島語”, “ロシア語”, “日本語”, “英語”}, |FBFaceIsDuplicate|:false, |FBFaceFamilyName|:”ヒラギノ角ゴ Pro”, |FBFaceKind|:”OpenType PostScript”, |FBFaceCopyProtection|:false, |FBFaceEmbedding|:true, |FBFacePostScriptName|:”HiraKakuPro-W3″, |FBFaceUniqueName|:”大日本スクリーン製造株式会社 ヒラギノ角ゴ Pro W3″, |FBFaceDesignerName|:”有限会社 字游工房”, |FBFaceVersionName|:”7.11″, |FBFaceCopyrightName|:”ver7.11, Copyright © 1993-2002 大日本スクリーン製造株式会社. All Rights Reserved.”, |FBFaceIsEnabled|:true, |FBFaceTrademarkName|:”千都およびヒラギノは大日本スクリーン製造株式会社の登録商標です”, |FBFaceSubFamilyName|:”W3″}, displayed name:”ヒラギノ角ゴ Pro”, files:{file “Cherry:Library:Fonts:ヒラギノ角ゴ Pro W3.otf”}, font family:font family “Hiragino Kaku Gothic Pro” of application “Font Book”, font container:{font container “/Library/Fonts/ヒラギノ角ゴ Pro W3.otf” of application “Font Book”}, enabled:true, font type:”OpenType PostScript”, family name:”Hiragino Kaku Gothic Pro”, copyright:”ver7.11, Copyright © 1993-2002 大日本スクリーン製造株式会社. All Rights Reserved.”, name:”Hiragino Kaku Gothic Pro W3″, class:typeface, PostScript name:”HiraKakuPro-W3″, id:66146}}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/26 Font Bookですべてのfont collectionの名称を取得する

Font Bookで、フォントコレクションの名称を求めるAppleScriptです。

fontbook1.jpg

スクリプト名:Font Bookですべてのfont collectionの名称を取得する
tell application "Font Book"
  set ffList to name of every font collection
end tell
> {"Classic", "Handwriting", "PDF", "Web", "Web-safe Mac/Windows", "Windows Office Compatible", "エコフォント", "バーコード", "ファン", "モダン", "レタリング風フォント", "韓国語", "古代エジプト文字", "手書き風フォント", "中国語", "等幅", "日本語", "発音記号", "毛筆書体"}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/26 Font Bookで指定フォントのファイルがどこに置かれているかを検知する

Font Bookを用いて、指定フォントが存在するパスを求めるAppleScriptです。

スクリプト名:Font Bookで指定フォントのファイルがどこに置かれているかを検知する
tell application "Font Book"
  set fList to every typeface whose displayed name begins with "ヒラギノ"
  
set tfList to {}
  
repeat with i in fList
    set j to contents of i
    
try
      set the end of tfList to (files of j)
    end try
  end repeat
end tell

tfList

>{{file "Cherry:Library:Fonts:ヒラギノ角ゴ Pro W3.otf"}, {file "Cherry:Library:Fonts:ヒラギノ角ゴ Pro W6.otf"}, {file "Cherry:System:Library:Fonts:ヒラギノ角ゴ ProN W3.otf"}, {file "Cherry:System:Library:Fonts:ヒラギノ角ゴ ProN W6.otf"}, {file "Cherry:Library:Fonts:ヒラギノ角ゴ Std W8.otf"}, {file "Cherry:Library:Fonts:ヒラギノ角ゴ StdN W8.otf"}, {file "Cherry:Library:Fonts:ヒラギノ丸ゴ Pro W4.otf"}, {file "Cherry:Library:Fonts:ヒラギノ丸ゴ ProN W4.otf"}, {file "Cherry:Library:Fonts:ヒラギノ明朝 Pro W3.otf"}, {file "Cherry:Library:Fonts:ヒラギノ明朝 Pro W6.otf"}, {file "Cherry:System:Library:Fonts:ヒラギノ明朝 ProN W3.otf"}, {file "Cherry:System:Library:Fonts:ヒラギノ明朝 ProN W6.otf"}}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/26 Font Bookで指定displayed nameのフォントスタイルを取得する

Font Bookをコントロールして、フォントのdisplayed name(例:ヒラギノ明朝 Pro)を指定して、そのフォントのタイプフェイス(W3とかW6とか)を求めるAppleScriptです。

AppleScript Studioでフォントを指定する場合には、displayed nameではなくnameを指定する必要があるわけですが、普段ユーザーが接しているのはdisplayed nameなので、なかなか調べるのが大変です。

Font Bookを使用すると、こうしたMac OS Xで使われているさまざまなフォント名称を求められるので便利なのですが……Font Bookはアプリケーションなので、フォント名称の確認をおこなうたびにいちいち起動してしまうのはみっともない感じがします。

Font Sync ScriptingにFont Bookのフォント名称取得の機能を持たせたほうがいいような気がします。

スクリプト名:Font Bookで指定displayed nameのフォントスタイルを取得する
tell application "Font Book"
  set ffList to style name of every typeface whose displayed name = "ヒラギノ明朝 Pro"
end tell
> {"W3", "W6"}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/25 Font Bookでフォントのさまざまな名称を取得する

Mac OS X上では、フォントに3つの名前があります。「ヒラギノ明朝 Pro W3」を例にとると、

 ヒラギノ明朝 Pro W3(表示される名称)–displayed name
 Hiragino Mincho Pro W3(本当の名前)–name
 HiraMinPro-W3(PostScript名称)–postscript name

といった調子です。これをMac OS X標準装備のFont Bookを用いて求めるAppleScriptを書いてみました。

さまざまなアプリケーションの間で、フォント名の指定方法が異なることがありますが……これらの名称を自由に取得できれば、楽に作業ができることでしょう。

fontbook.jpg

スクリプト名:FontBookでフォントのさまざまな名称を取得する
tell application Font Book
  set aFont to displayed name of every typeface whose name contains Hiragino
  
> {”ヒラギノ角ゴ Pro”, “ヒラギノ角ゴ Pro”, “ヒラギノ角ゴ ProN”, “ヒラギノ角ゴ ProN”, “ヒラギノ角ゴ Std”, “ヒラギノ角ゴ StdN”, “ヒラギノ丸ゴ Pro”, “ヒラギノ丸ゴ ProN”, “ヒラギノ明朝 Pro”, “ヒラギノ明朝 Pro”, “ヒラギノ明朝 ProN”, “ヒラギノ明朝 ProN”}
  
  
set bFont to name of every typeface whose name contains Hiragino
  
> {”Hiragino Kaku Gothic Pro W3″, “Hiragino Kaku Gothic Pro W6″, “Hiragino Kaku Gothic ProN W3″, “Hiragino Kaku Gothic ProN W6″, “Hiragino Kaku Gothic Std W8″, “Hiragino Kaku Gothic StdN W8″, “Hiragino Maru Gothic Pro W4″, “Hiragino Maru Gothic ProN W4″, “Hiragino Mincho Pro W3″, “Hiragino Mincho Pro W6″, “Hiragino Mincho ProN W3″, “Hiragino Mincho ProN W6″}
  
  
set cFont to PostScript name of every typeface whose name contains Hiragino
  
> {”HiraKakuPro-W3″, “HiraKakuPro-W6″, “HiraKakuProN-W3″, “HiraKakuProN-W6″, “HiraKakuStd-W8″, “HiraKakuStdN-W8″, “HiraMaruPro-W4″, “HiraMaruProN-W4″, “HiraMinPro-W3″, “HiraMinPro-W6″, “HiraMinProN-W3″, “HiraMinProN-W6″}
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に