現在オープン中の最前面のPages書類の内容を伏せ字に置き換えるAppleScriptの改良版です。電子書籍「Pages+AppleScriptで本をつくろう!」のために作成したScriptの改良版です。
–> Download Script Bundle With library
実行にはライブラリ「dynamicClicker」が必要なため、上記リンクからAppleScriptバンドル書類をダウンロードして実行してください。
Pagesの書類上のオブジェクトは、
のようになっており(iWork Scripting Book with AppleScriptより引用)、shapeとtext itemの区別ができないという「頭のおかしな仕様」になっていますが、オブジェクトのclassを求めれば、だいたいは区別できる状況です。
group itemについてはメニューを強制操作して(なくなるまで永久ループで)グループ解除を行い、そののちにshapeとtableについては伏せ字処理を行います。
image、chart、movieなどのオブジェクトについては伏せ字処理を行いませんが、そのあたりは処理したいユーザーの趣味次第でしょう。
AppleScript名:全ページを伏せ字に v2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/10/02 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions use dLib : script "dynamicClicker" tell application "Pages" tell front document set pCount to count every page repeat with p from 1 to pCount tell page p –ひたすらグループ化されたアイテムを解除する。多重にグループ化が可能なので、ひたすら繰り返す repeat set gList to every group if gList = {} then exit repeat set gRes to ungroupPagesItems(gList) of me end repeat –通常処理 set aList to every iWork item repeat with i in aList set j to contents of i set tmpClass to class of j if tmpClass = shape then set aText to object text of j set mText to maskStrings(aText) of me set object text of j to mText else if tmpClass = table then tell j set tmpW to width set tmpH to height set tumeF to false set cColumn to count every column if tmpW = 0 or tmpH = 0 then — else set aRatio to tmpW / tmpH if aRatio < 0.125 then set tumeF to true if cColumn = 1 then set tumeF to true end if end tell –表がツメでない場合にのみ処理 if tumeF = false then tell j set aTitle to "" try set aTitle to name of it set mText to maskStrings(aTitle) of me set name of it to mText end try set cellList to every cell repeat with ii in cellList set jj to contents of ii set aValue to (value of jj) as string set mText to maskStrings(aValue) of me set value of jj to mText end repeat end tell end if end if end repeat end tell end repeat end tell end tell –Pagesで選択中のアイテムをグループ解除する on ungroupPagesItems(gList as list) set appName to "Pages" –Application Name set aList to {"配置", "グループ解除"} –Localized Menu Titles (menu title structure to "Ungroup") tell application "Pages" tell front document set selection to gList end tell end tell set aRes to clickSpecifiedMenuElement(appName, aList) of dLib return aRes end ungroupPagesItems –指定したルールのとおりの文字種の並びになっているか? on maskStrings(aStr) set aList to characters of aStr set chkList to {} repeat with i from 1 to (length of aList) set j1 to contents of item i of aList set tmpStr to j1 set j2 to (my chkNumeric:j1) set j3 to (my chkAlphabetCapt:j1) set j4 to (my chkAlphabetSmall:j1) if j2 = true then set tmpStr to "9" else if j3 = true then set tmpStr to "Z" else if j4 = true then set tmpStr to "z" else set tmpStr to "あ" end if set the end of chkList to tmpStr end repeat return chkList as string end maskStrings — アルファベット大文字か on chkAlphabetCapt:checkString set aStr to current application’s NSString’s stringWithString:checkString set allCharSet to current application’s NSMutableCharacterSet’s alloc()’s init() allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "A", 26)) set aBool to my chkCompareString:aStr baseString:allCharSet return aBool as boolean end chkAlphabetCapt: — アルファベット小文字か on chkAlphabetSmall:checkString set aStr to current application’s NSString’s stringWithString:checkString set allCharSet to current application’s NSMutableCharacterSet’s alloc()’s init() allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "a", 26)) set aBool to my chkCompareString:aStr baseString:allCharSet return aBool as boolean end chkAlphabetSmall: –数字のみか on chkNumeric:checkString set digitCharSet to current application’s NSCharacterSet’s characterSetWithCharactersInString:"0123456789" set ret to my chkCompareString:checkString baseString:digitCharSet return ret as boolean end chkNumeric: –アルファベットと数字のみか on chkAlphaNumeric:checkString set alnumCharSet to current application’s NSCharacterSet’s alphanumericCharacterSet() set ret to my chkCompareString:checkString baseString:alnumCharSet return ret as boolean end chkAlphaNumeric: –アルファベットと数字と記号のみか on chkAlphaNumericSymbol:checkString set muCharSet to current application’s NSCharacterSet’s alphanumericCharacterSet()’s mutableCopy() muCharSet’s addCharactersInString:"$\"!~&=#[]._-+`|{}?%^*/’@-/:;()," set ret to my chkCompareString:checkString baseString:muCharSet return ret as boolean end chkAlphaNumericSymbol: –記号のみか on chkSymbol:checkString set muCharSet to current application’s NSCharacterSet’s alloc()’s init() muCharSet’s addCharactersInString:"$\"!~&=#[]._-+`|{}?%^*/’@-/:;()," set ret to my chkCompareString:checkString baseString:muCharSet return ret as boolean end chkSymbol: –全角文字が存在するか on chkMultiByteChar:checkString set aStr to current application’s NSString’s stringWithString:checkString set aRes to aStr’s canBeConvertedToEncoding:(current application’s NSASCIIStringEncoding) return (aRes as boolean) end chkMultiByteChar: on chkCompareString:checkString baseString:baseString set aScanner to current application’s NSScanner’s localizedScannerWithString:checkString aScanner’s setCharactersToBeSkipped:(missing value) aScanner’s scanCharactersFromSet:baseString intoString:(missing value) return (aScanner’s isAtEnd()) as boolean end chkCompareString:baseString: on chkCompareString:checkString characterSet:baseSet set anNSString to current application’s NSString’s stringWithString:checkString set theRange to anNSString’s rangeOfCharacterFromSet:baseSet return (|length| of theRange = 0) as boolean end chkCompareString:characterSet: |
More from my site
(Visited 1 times, 1 visits today)