« Morisawa Desktop ManagerフォントをFontBookに直接追加 | トップページ | [DMG]ディスクイメージを作る 1 Folder2DMG »

FontExporter モリサワ1.5対応


【スクリプトエディタで開く】|

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
######## 単体動作しません
#こちらを実行してから使ってください
# https://quicktimer.cocolog-nifty.com/icefloe/2023/08/post-475065.html
#com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions

property refMe : a reference to current application
set appFileManager to refMe's NSFileManager's defaultManager()

###enumeratorAtURL用のBoolean用
set ocidFalse to (refMe's NSNumber's numberWithBool:false)
set ocidTrue to (refMe's NSNumber's numberWithBool:true)

####################################
######パス関連
####################################
set strFontsDirPath to "~/Library/Application Support/Morisawa/Morisawa Desktop Manager/.Cachef"
set ocidFontsDirPathStr to refMe's NSString's stringWithString:(strFontsDirPath)
set ocidFontsDirPath to ocidFontsDirPathStr's stringByStandardizingPath()
set ocidLivetypeDirURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFontsDirPath) isDirectory:false)

####################################
######コンテンツ(URLパスの取得)収集
####################################
##プロパティ
set ocidProperties to {refMe's NSURLPathKey, refMe's NSURLIsRegularFileKey, refMe's NSURLIsDirectoryKey, refMe's NSURLContentTypeKey}
##オプション
set ocidOption to refMe's NSDirectoryEnumerationSkipsPackageDescendants
####ディレクトリのコンテツを収集(最下層まで)
set ocidEmuDict to (appFileManager's enumeratorAtURL:(ocidLivetypeDirURL) includingPropertiesForKeys:(ocidProperties) options:(ocidOption) errorHandler:(reference))
###戻り値をリストに格納
set ocidFilePathURLArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:0)
set ocidEmuFileURLArray to ocidEmuDict's allObjects()
(ocidFilePathURLArray's setArray:ocidEmuFileURLArray)

####################################
###NSURLリストから特定のファイルのみの取得
####################################
###ここにFontファイルのURLだけ格納します
set ocidFontFilePathURLArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:0)

repeat with itemFilePathURLArray in ocidFilePathURLArray
  ###ファイル判定(ディレクトリを含まない)
  set listResult to (itemFilePathURLArray's getResourceValue:(reference) forKey:(refMe's NSURLIsRegularFileKey) |error|:(reference))
  ###リストからNSURLIsRegularFileKeyのBOOLを取り出し
  set boolIsRegularFileKey to item 2 of listResult
  ####ファイルのみを(ディレクトリやリンボリックリンクは含まない)
  if boolIsRegularFileKey is ocidTrue then
    ###コンテンツタイプを読み出し
    set listResult to (itemFilePathURLArray's getResourceValue:(reference) forKey:(refMe's NSURLContentTypeKey) |error|:(reference))
    ###UTIを取得する
    set strUTItype to (item 2 of listResult)'s identifier as text
    ###UTI名にfontが含まれていればフォントファイル
    if strUTItype contains "font" then
      ###リストに追加
(ocidFontFilePathURLArray's addObject:itemFilePathURLArray)
    end if
  end if
end repeat

####################################
###デスクトップに移動先フォルダを作る
####################################
set ocidDesktopDirPathURLArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidDesktopDirPathURL to ocidDesktopDirPathURLArray's firstObject()
set ocidSaveDirPathURL to ocidDesktopDirPathURL's URLByAppendingPathComponent:"MorisawaFontFile"
set listDone to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(missing value) |error|:(reference)
####################################
###ExifTool
####################################
set strBinPath to ("~/bin/exiftool/exiftool") as text
set ocidBinPathStr to refMe's NSString's stringWithString:(strBinPath)
set ocidBinPath to ocidBinPathStr's stringByStandardizingPath()
set strBinPath to (ocidBinPath) as text

####################################
###本処理
####################################

repeat with itemFontFilePathURLArray in ocidFontFilePathURLArray
  set strExtensionName to (itemFontFilePathURLArray's pathExtension) as text
  set strFontFilePath to itemFontFilePathURLArray's |path| as text
  #######################
  ####コマンド実行
  #######################
  set strCommandText to ("\"" & strBinPath & "\" -json -charset UTF8 -lang Ja \"" & strFontFilePath & "\"") as text
  set jsonFontsExif to (do shell script strCommandText) as text
  #######################
  ####JSONをDATAに
  #######################
  set coidJsonString to (refMe's NSString's stringWithString:(jsonFontsExif))
  set ocidJsonData to (coidJsonString's dataUsingEncoding:(refMe's NSUTF8StringEncoding))
  set listJsonData to (refMe's NSJSONSerialization's JSONObjectWithData:(ocidJsonData) options:(refMe's NSJSONReadingMutableContainers) |error|:(reference))
  set ocidJsonData to ((item 1 of listJsonData)'s objectAtIndex:0)
  #######################
  ####JSONをNSDictionary
  #######################
  set ocidJsonDict to (refMe's NSDictionary's alloc()'s initWithDictionary:(ocidJsonData))
  ###値を取得する
  #####Font名
  set strFontName to (ocidJsonDict's valueForKey:"FontName-ja") as text
  if strFontName is "missing value" then
    set strFontName to (ocidJsonDict's valueForKey:"FontName-en-US") as text
  end if
  if strFontName is "missing value" then
    set strFontName to (ocidJsonDict's valueForKey:"FontName") as text
  end if
  #####文字化けで ?が入る場合はPostScriptFontNameにする
  if strFontName contains "?" then
    set strFontName to (ocidJsonDict's valueForKey:"PostScriptFontName") as text
  end if
  if strFontName is "missing value" then
    set strFontName to (ocidJsonDict's valueForKey:"PostScriptFontName-en-US") as text
  end if
  ###ファイル名決めて
  set strFontFileName to (strFontName & "." & strExtensionName) as text
  ###コピー先のURLにしておく
  set ocidSaveFilePathURL to (ocidSaveDirPathURL's URLByAppendingPathComponent:strFontFileName)
  ###ファイルをコピー
  set boolDone to (appFileManager's copyItemAtURL:(itemFontFilePathURLArray) toURL:(ocidSaveFilePathURL) |error|:(reference))
  ###ラベルセット
  set listDone to (ocidSaveFilePathURL's setResourceValue:{"AdobeFonts"} forKey:(refMe's NSURLTagNamesKey) |error|:(reference))
  
  set aliasSaveFilePath to ocidSaveFilePathURL as alias
  
  tell application "Finder"
    tell file aliasSaveFilePath
      set comment to "Morisawaフォントからのコピーです\r契約の無い方の利用はできません\r"
      set label index to 0
    end tell
  end tell
  
end repeat

tell application "Finder"
  activate
  open (ocidSaveDirPathURL as alias)
end tell

return "処理終了"

|

« Morisawa Desktop ManagerフォントをFontBookに直接追加 | トップページ | [DMG]ディスクイメージを作る 1 Folder2DMG »

AppleScript Fonts」カテゴリの記事