[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
| 固定リンク
「AppleScriptFolder」カテゴリの記事
- [MDLS]mdlsでフォントファミリー名を取得する(2014.12.31)
- [AppleScript]フォルダを連番で複数作る(2012.12.09)
- [Move]フォルダの移動(2010.09.15)
- [AppleScript]フォルダのアクセス権を変更する(2010.08.10)
- [AppleScript]ファイル名のフォルダを作ってその中に入れる(2010.08.05)