欧文フォントを太らせる処理を行う下調べとして、指定PostScriptフォント名のフォントファミリーに、指定のバリエーションが存在するかどうかを調べるAppleScriptを書いてみました。
Classic MacOS時代はフォントを変形させてボールド表現を行ったり、イタリック表現を行うなどの機能が実装されていました。
一方、OPENSTEPを源流に持つmacOSは、さまざまなバリエーションのフォントをあらかじめ用意しておくことが必要です。このあたりの仕様は、なんとなく技術的な後退を感じますが、まあいいでしょう。
そして、NSFontManagerの機能を用いて、指定のフォントバリエーション(ボールド)が存在するかを確認するはずだったのが本AppleScriptです。
ただ、実際に試してみたところ、どのフォントを指定してもダメでした。「ボールド書体はない」と言われます。あれ????
そこで、macOSに入っているすべてのフォントのPostScript名を取得して、すべてのフォントのTraitsをチェック。
結果、けっこうな数のフォントがboldのTraitsを持っている、と返ってきました。名前に「Bold」と入っているフォントばかりが。
つまり、NSFontManagerのfontNamed:① hasTraits:② は、指定のフォント自体にTraitsがあるのか調べるAPIであったということです。自分が誤解していたようでした。
AppleScript名:指定フォントの指定Traitsが存在するかをチェック.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/11/02 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript use framework "Foundation" use framework "AppKit" use scripting additions –set aName to "HelveticaNeue" –set aName to "Verdana" –set aName to "TimesNewRomanPSMT" set aName to "SFProText-Regular" –指定のフォントがBoldのtraitを持っているかをチェック set fontM to current application’s NSFontManager’s sharedFontManager() set fRes to fontM’s fontNamed:aName hasTraits:(current application’s NSBoldFontMask) –> false(みんなfalse) |
AppleScript名:全フォントからtraitsを調べる.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/11/03 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "AppKit" use scripting additions property NSFont : a reference to current application’s NSFont property NSPredicate : a reference to current application’s NSPredicate property NSFontManager : a reference to current application’s NSFontManager set okList to {} set fList to getEveryFontPSName() of me set fontM to NSFontManager’s sharedFontManager() repeat with i in fList set j to contents of i set fRes to (fontM’s fontNamed:(j) hasTraits:(current application’s NSBoldFontMask)) if fRes as boolean = true then set the end of okList to j end repeat return okList on getEveryFontPSName() set aFontList to NSFontManager’s sharedFontManager()’s availableFonts() set thePred to NSPredicate’s predicateWithFormat:"NOT SELF BEGINSWITH ’.’" set aFontList to (aFontList’s filteredArrayUsingPredicate:thePred) as list set aList to {} repeat with i in aFontList set aName to contents of i set the end of aList to aName end repeat return aList end getEveryFontPSName |
More from my site
(Visited 1 times, 1 visits today)