« [SourceHanSans]源ノ角ゴシック その3 | トップページ | Mac OS 9.2 »

[MDLS]mdlsでフォントファミリー名を取得する

こちらLINKの記事で
書いたスクリプトを
複数選択処理可能にした版

フォントを選択する

フォントファミリー名を取得する

フォントファミリー名でフォルダーを作成する

フォントをフォルダ内に移動する


エラーになる場合
PS1フォント等でフォントのファイル名とフォントファミリー名が同一の場合
基本的にはTTとOTのフォント専用

不具合
mdlsが正しいフォントファミリー名を取得出来ない事がある


(*
MakeFolderMoveFont.scpt 20141230

mdls スポットライトのメタデータ呼び出しコマンドから
フォントファミリーネームを取得して
フォントファミリー名のフォルダーを作成して
その中にフォント入れます

フォントファミリー名の不具合の説明はこちら
https://force4u.cocolog-nifty.com/skywalker/2014/12/sourcehansans-1.html
*)
(*
Uniform Type Identifiers Reference フォント関係
詳しくはこちら
http://goo.gl/C9EhVx
public.font
public.truetype-font
com.adobe.postscript-font
com.apple.truetype-​datafork-suitcase-font
public.opentype-font
public.truetype-ttf-font
public.truetype-collection-​font
com.apple.font-suitcase
com.adobe.postscript-lwfn​-font
com.adobe.postscript-pfb-​font
com.adobe.postscript.pfa-​font

*)
-----ファインダー呼び出し
tell application "Finder"
activate
---ファイルを選択 TTF TTC OTF PS1のみ選べます Font Suitcase等は選べません
set objResult to ¬
choose file default location (path to fonts folder from user domain) ¬
of type ¬
{"public.truetype-ttf-font", "public.truetype-collection-font", "public.opentype-font", "com.apple.truetype-datafork-suitcase-font", "com.adobe.postscript-lwfn​-font"} invisibles true ¬
with multiple selections allowed without showing package contents

end tell
----繰り返しのはじまり
repeat with objFiles in objResult
----ファインダー処理
tell application "Finder"
----取得したファイルのエリアスを取得
set theFileIAlias to objFiles as alias
----ファイル名を取得
set theFontName to (name of (info for objFiles) as list) as text
----フォントがあるディレクトリを取得
set theFileDir to (container of objFiles) as text
----UNIXパスにしておきます
set theUnixFilePath to (POSIX path of theFileIAlias) as text
end tell
-----mdlsのコマンドを実行して格納
set theMdlsResult to do shell script "/usr/bin/mdls -name com_apple_ats_name_family \"" & theUnixFilePath & "\""
-----区切り文字を改行に設定
set AppleScript's text item delimiters to {"\r"}
-----改行毎のリストとして格納
set theResultList to (every text item of theMdlsResult) as list
-----区切り文字を戻す
set AppleScript's text item delimiters to {""}
-----何行あるか?(データ件数)を数える
set numListLine to (count of theResultList) as number

-----データ件数3件の場合ローカライズ名が無いと判断
if numListLine is 3 then
set theLineData to (item 2 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, " ", "") as text

-----データ件数4件の場合ローカライズ名があると判断
else if numListLine is 4 then
set theLineData to (item 3 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, " ", "") as text

else

end if
---------- JavaScript escapes を変換するために大文字のUを小文字に その後で4桁コードをCharacterEntityに変換
set theResultText to my doReplace(theResultText, "\\U", "\\u") as text
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{4})/\", \"&#x$1;\", \"" & theResultText & "\");'" as text
set theResultText to (do shell script thePregReplace) as text
----------その後でシングルバイトの2桁コードをCharacterEntityに変換
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{2})/\", \"&#x$1;\", \"" & theResultText & "\");'" as text
set theResultText to (do shell script thePregReplace) as text
----------デコード本処理 CharacterEntity をテキストに変換する
set theMbConvertEncoding to "php -r 'echo mb_convert_encoding(\"" & theResultText & "\", \"UTF-8\", \" HTML-ENTITIES \");'" as text
set theResultText to (do shell script theMbConvertEncoding) as text
-----ファインダー呼び出し
tell application "Finder"
try
-----取得したフォントファミリー名でフォルダーを作る
make new folder at (theFileDir) with properties ¬
{name:theResultText ¬
, owner privileges:read write ¬
, group privileges:read write ¬
, everyones privileges:read write ¬
, comment:theFontName ¬
, description:theFontName ¬
}
end try
end tell
-----ファインダー呼び出し
tell application "Finder"
try
-----フォルダーの中にフォントファイルを入れる
move (objFiles) to alias (theFileDir & theResultText & ":")
end try
end tell
-----ファインダー呼び出し
tell application "Finder"
activate
-----出来上がりフォルダを開く
open theFileDir
end tell

end repeat

---------文字の置き換えサブルーチン
to doReplace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end doReplace

「MakeFolderMoveFont.scpt.zip」をダウンロード


「MakeFolderMoveFont.scpt.rtf」をダウンロード

|

« [SourceHanSans]源ノ角ゴシック その3 | トップページ | Mac OS 9.2 »

AppleScriptFolder」カテゴリの記事