Keynoteで現在オープン中の書類の現在表示中のスライド(ページ)中にあるtext itemのうち、開始文字、終了文字ではさまれているテキストを指定色に塗り替えるAppleScriptです。
用途はご覧の通り、現在作成中のCocoa Scripting本の資料の装飾のためであり、「|」と「|」で囲まれている箇所の色を変えたら見やすいのでは? と、考えて作成・実行したものです。
NSScannerを使えば楽に書けるかも? などと思っておりましたが、検出位置(文字数)を返す機能がないので、位置だけを返してほしいという用途に向いていないもよう。仕方なく、普通にAppleScriptで1文字ごとチェック&開始文字/終了文字のチェックをフラグ管理……という、高級言語らしからぬ泥臭いコードを書く羽目に(でも、こういうの書くケースが多いですよね)。
AppleScript名:指定した文字で囲まれたキーワードの色を置換する |
— – Created by: Takaaki Naganoya – Created on: 2021/02/24 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" use scripting additions use framework "Foundation" set targCol to choose color –塗る文字色を選択 set headPickUpChar to "|" set tailPickUpChar to "|" –処理対象データの取得 tell application "Keynote" –最前面の書類 tell front document –現在表示中のスライド tell current slide –text itemをすべて取得 set tList to every text item if tList = {} then return –何もtext itemが存在しなかったら処理終了 –text itemの中に入っている文字列を取得 set objTList to object text of every text item end tell end tell end tell –出現判定しつつ色を塗る tell application "Keynote" tell front document tell current slide set posList to {} set aCount to 1 –text itemでループ repeat with i in objTList set j to contents of i –ターゲット文字で囲まれている箇所を検出。複数箇所検出対応 set bCon to pickUpPositionPairsFromTo(j, headPickUpChar, tailPickUpChar) of me if bCon is not equal to {} then set aTarg to item aCount of tList –出現位置でループ(複数検出対応) repeat with ii in bCon copy ii to {aStart, anEnd} –高速処理のために非同期実行 ignoring application responses tell aTarg set color of characters aStart thru anEnd of object text to targCol end tell end ignoring end repeat end if set aCount to aCount + 1 end repeat end tell end tell end tell –開始文字と終了文字に囲われた文字列のすべての位置情報を返す on pickUpPositionPairsFromTo(aParamStr, fromStr, toStr) script hsAry property anArray : {} property aList : {} end script set (anArray of hsAry) to {} set (aList of hsAry) to characters of aParamStr set tmpPair to {} set searchMode to 0 — 0:fromStr, 1:toStr set aCount to 1 repeat with i in (aList of hsAry) set j to contents of i if searchMode = 0 then if j = fromStr then set the end of tmpPair to aCount set searchMode to 1 end if else if searchMode = 1 then if j = toStr then set the end of tmpPair to aCount set searchMode to 0 set the end of (anArray of hsAry) to tmpPair set tmpPair to {} end if end if set aCount to aCount + 1 end repeat return (anArray of hsAry) end pickUpPositionPairsFromTo |
More from my site
(Visited 86 times, 1 visits today)
2021年に書いた価値あるAppleScript – AppleScriptの穴 says:
[…] 2/21 部首で漢字検索 2/24 指定した文字で囲まれたキーワードの色を置換する […]