Keynote書類で選択中のテキストアイテムのうち、各行の冒頭からマークの文字までの間を太文字にするAppleScriptです。
v1を改良し、さまざまな区切り記号に対応させるべく、改修を行なってみたものです。
当初は、各テキストアイテムの内部テキストを解析して、共通記号文字を計算して自動で認識処理を行なってみようかと考えていました。統計処理を行なって共通で登場する文字をピックアップさせることを検討していました。
ただ、これだと複数の選択アイテムで別々の区切り文字を採用している場合に対応できません。
統計処理を行わず、技術的にもっとレベルを下げ、「ゆらぎ」検出のためのオーソドックスな、ゆらぎ表記列挙リストを作って、ひたすらループで処理するように改変。
▲処理後 各テキストアイテムで、指定の記号より前の部分の文字を太くした
なお、本Scriptは書式変更ターゲット文字のピックアップ性能を向上させたものであり、欧文フォントの処理を考慮したものにはなっていません。フォントファミリー内のウェイトを上げたフォントを求めるという処理を行なっています。
fFamilyCount = 2
の場合には、「ヒラギノ角ゴProN W3」を「ヒラギノ角ゴProN W6」に変更する処理を行います。
fFamilyCount > 4
の場合には、「ヒラギノ角ゴシック Wn」のウェイトを上げています。
もしも、利用中のMacにウェイトが多数含まれているフォントをインストールして、Keynote書類上でそのフォントを指定している場合には、ウェイトを上げたフォントを求める処理で、文字を太くするよう処理されることでしょう。
AppleScript名:選択中のtext itemの冒頭のフォントを太くする(フォントのWeightを変更)v2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/11/01 — – 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 NSFontManager : a reference to current application’s NSFontManager –セパレータリスト、表記ゆらぎ対応(ゆらぎ表記個数は可変) property separatorList : {{":", ":"}, {"mm", "㎜"}, {"cm", "cm"}} tell application "Keynote" tell front document set aSel to selection –Keynote上の選択中のオブジェクトでループ repeat with i in aSel set j to contents of i set tmpClass to class of j –選択中のオブジェクトがテキストアイテムの場合に……. if tmpClass = text item then set objText to object text of j set fontName to font of object text of j set fontSize to size of object text of j –フォントを太らせる(ウェイトを上げる) set fFamilyCount to countFontsInItsFamily(fontName) of me if fFamilyCount = 2 then set newFont to incrementFontWeight(fontName, 1) of me else if fFamilyCount > 4 then set newFont to incrementFontWeight(fontName, 4) of me end if set aCount to 1 set tList to splitByLInes(objText) of me –行ごとにParseした行ごとのテキストでループ repeat with ii in tList set jj to contents of ii set anOffset to 0 –セパレータでループ repeat with iii in separatorList –セパレータの「ゆらぎ」表記を考慮してループ repeat with iiii in iii set jjjj to contents of iiii set anOffset to offset of jjjj in jj if anOffset is not equal to 0 then exit repeat end if end repeat if anOffset is not equal to 0 then exit repeat end repeat if anOffset is not equal to 0 then try set font of characters 1 thru (anOffset – 1) of paragraph aCount of object text of j to newFont end try end if set aCount to aCount + 1 end repeat end if end repeat end tell end tell –テキストを行ごとにParse on splitByLInes(someText) — free to a good home set theString to current application’s NSString’s stringWithString:someText set theList to theString’s componentsSeparatedByCharactersInSet:(current application’s NSCharacterSet’s newlineCharacterSet()) return theList as list end splitByLInes –フォントを太らせる。欧文フォントは考慮していない(別の方法で行う) on incrementFontWeight(psFontName, incNum) set aFont to current application’s NSFont’s fontWithName:psFontName |size|:9.0 –> (NSCTFont) "HiraginoSans-W0 9.00 pt. P [] (0x12870af00) fobj=0x11b1e90d0, spc=1.98" set fontM to current application’s NSFontManager’s sharedFontManager() repeat incNum times set aFont to fontM’s convertWeight:true ofFont:aFont end repeat return (aFont’s fontName()) as string end incrementFontWeight –指定フォントのファミリーに属するフォント数を取得 on countFontsInItsFamily(aPSName) set aFont to current application’s NSFont’s fontWithName:(aPSName) |size|:9.0 set aFamily to aFont’s familyName() set fMan to current application’s NSFontManager’s sharedFontManager() set fList to fMan’s availableMembersOfFontFamily:aFamily return length of (fList as list) end countFontsInItsFamily |