Pages書類で選択中のtext item(Pagesでこれを識別するクラスがないのでshape)内のテキストに複数の文字サイズが存在している場合に、特定の文字サイズ部分のみ異なるものに置き換えるAppleScriptです。
ただし、本Scriptで使用している自作のdisplay text fieldsライブラリを、本ScriptをmacOS標準搭載の「スクリプトメニュー」に入れた状態で呼び出すと、ダイアログ中への文字入力ができませんでした(macOS 13.6.5)。Pagesの書類の方に文字入力フォーカスが残ってしまっています。文字サイズをポップアップメニューからの選択方式にするなど、テキスト入力「以外」の方法に差し替えることで対処できることは判明しています。
このあたりのmacOS側の挙動に対して、「ナニコレ?」と違和感をおぼえつつも……スクリプトメニューに入れて呼び出す場合には対処するしかないのでしょう。細かい機能がAppleScriptランタイム環境ごとに「使える」「使えない」といった違いを生んでいるうえに、こうしたGUIの挙動についてもAppleScriptランタイム環境ごとに違っている点について、より細かい点をチェックする必要がありそうです(メーカー側がどんどん基礎的な部品の挙動を変更しては発表もしない状況)。
▲架空の本のPages書類のうち、処理対象のtext itemを選択状態にして実行
▲どのフォントサイズを置き換えるかをダイアログ選択。リサイズ後の数値を入力するとリサイズ。空欄のままにすると、リサイズしない
AppleScript名:最前面の書類中の選択中のテキストアイテムの文字サイズを、特定サイズのみ対象にして置換 v3.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/02/16 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" — macOS 10.13 or later use framework "Foundation" use scripting additions use tfLib : script "display text fields" tell application "Pages" tell front document set tmpList to selection repeat with i in tmpList set j to contents of i set tmpC to class of j –選択中のアイテムがshape(text itemを指定したいが、PagesではこのClassは存在しない)の場合のみ処理 if tmpC is equal to shape then –最大サイズの文字のみ抽出 set cRes to (size of every character of object text of j) set uRes to removeDuplicates(cRes) of me set selection to {j} –ダイアログ表示 set strList to stringfyListItems(uRes) of me set blankList to makeBlankListByIndicatedItem(strList, "") of me set dRes to confirm text fields main message "テキストアイテムの文字サイズ置換" sub message "置換しない場合には空欄のまま。サイズはポイント数で指定" key list strList value list blankList if dRes = false then exit repeat –文字サイズ置換 repeat with ii from 1 to (length of strList) set targSize to (contents of item ii of strList) as real —From Size set repSize to contents of item ii of dRes –To Size if repSize is not equal to "" then set repSizeNum to repSize as real set size of (every character of object text of j whose size is targSize) to repSizeNum end if end repeat end if end repeat end tell end tell –指定リストの項目数によって、空白アイテムが入ったリストを返す on makeBlankListByIndicatedItem(aList, blankItem) set newList to {} set aLen to length of aList repeat aLen times set the end of newList to blankItem end repeat return newList end makeBlankListByIndicatedItem –リストの全項目をテキスト化 on removeDuplicates(aList) set newList to {} repeat with i from 1 to (length of aList) set anItem to item 1 of aList set aList to rest of aList if {anItem} is not in aList then set end of newList to anItem end repeat return newList end removeDuplicates –リスト内の要素をすべてテキストに変換する on stringfyListItems(a as list) set newL to {} repeat with i in a set j to contents of i set j to j as string set the end of newL to j end repeat return newL end stringfyListItems |
More from my site
(Visited 12 times, 1 visits today)