Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

タグ: Pages

iWork Appsがバージョン14.4にアップデート

Posted on 4月 6 by Takaaki Naganoya

iWork Apps(Keynote、Pages、Numbers)がバージョン14.4にアップデートしました。各アプリのAppleScript用語辞書に変更はありません。

Pagesで継続して発生している、現在画面上で表示中のページ+2見開きのページ上のオブジェクト情報の取得/操作が行えない現象については、修正されていません。

Apple側はこれをバグとも思っていないようですし、修正するつもりもないのでしょう。この不具合に対処するために、情報取得する対象のページを強制的に表示するよう指示する必要があることでしょう(そんな機能はないので、GUI Scriptingで?)。

Pages書類の各ページ上の表の座標を求めると、正しい値が返らない

Posted in news | Tagged 14.0savvy 15.0savvy Pages | Leave a comment

Pagesで選択中のテキストボックスの一番近くにある白い文字のボックスのテキストを取得

Posted on 1月 16 by Takaaki Naganoya

Pagesで作成した書類で、プログラムリストの上に配置したタイトルのテキストを取得するAppleScriptです。

割といきあたりばったりで作ってしまったツールです。

Pagesで電子書籍を作成し、レイアウトしたAppleScriptのプログラムリストのファイル名を求めるために、プログラムリストの上に配置した白い文字で記述したテキストフレーム(Pages上ではShapeオブジェクト)を特定します。

フィルタ参照で相対座標値を表現できるといいのですが、そういうのはできないので、地道に距離計算しています。

「上」「下」という相対的な位置関係を表現するのに、結局数値比較しかできないので、どうしたものかと考えていたのですが、結局この「上」という表現は用いずじまいでした。「一番距離が近いテキストフレーム、文字色は白っぽい」だけで割と正確に特定できたので、いいだろうかというところです。相対位置関係を表記するライブラリなども作っておくといいかもしれません。

予想外の要素が、白いとだけ思っていた文字色が、RGB値では若干ゆらいでいたので、そのあたりの辻褄合わせを地味にやっています。カラードメイン(色名をラフに計算する)系のライブラリを使えば「white」などと雑な表現で指定できたかもしれません。

実際に使っているものは、本Scriptにくわえて選択中のテキストフレームの内容をAppleScriptとしてメモリ上で構文確認とコンパイルを行なって、ここで取得したファイル名でAppleScriptとして保存する処理を行なっています。

AppleScript名:Pagesで選択中のテキストボックスの一番近くにある白い文字のボックスの名前を取得.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/01/16
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

use AppleScript
use scripting additions
use framework "Foundation"
use framework "OSAKit"

property |NSURL| : a reference to current application’s |NSURL|
property OSANull : a reference to current application’s OSANull
property NSString : a reference to current application’s NSString
property OSAScript : a reference to current application’s OSAScript
property OSALanguage : a reference to current application’s OSALanguage
property NSFontAttributeName : a reference to current application’s NSFontAttributeName
property OSALanguageInstance : a reference to current application’s OSALanguageInstance
property NSURLTypeIdentifierKey : a reference to current application’s NSURLTypeIdentifierKey

tell application "Pages"
  tell front document
    set aSel to selection
    
if aSel = {} then return
    
set aaSel to first item of aSel
    
    
set targPos to position of aaSel
    
set targCon to object text of aaSel –選択中のtext frame(Pages上ではShape)の本文
    
    
tell current page
      –文字が入っているiWork objectのみが対象
      
set tList to every shape whose object text is not equal to targCon and object text of it is not equal to "" –オブジェクト
      
set pList to position of every shape whose object text is not equal to targCon and object text of it is not equal to "" –座標
      
set cList to color of object text of every shape whose object text is not equal to targCon and object text of it is not equal to "" –文字色
    end tell
    
    
–クレヨンピッカーから指定しても、白色に若干の「ゆらぎ」があるようなので、数値比較で抽出
    
set aRes to findItemNums({65500, 65500, 65500}, cList) of me
    
set aLen to length of aRes
    
if aLen = 0 then
      display dialog "No Hit(error)"
      
    else if aLen = 1 then
      set tmpTarg to first item of aRes
      
set tmpTargTextFrame to item tmpTarg of tList
      
set oRes to object text of tmpTargTextFrame
      
    else
      set p2List to {}
      
repeat with i in aRes
        set j to contents of i
        
set the end of p2List to contents of item j of pList
      end repeat
      
      
set L2ItemNums to retNearestItemByPosition({targPos}, p2List) of me
      
set oRes to object text of (item (first item of L2ItemNums) of tList)
      
    end if
  end tell
end tell

return oRes

–RGBの値がaNumにlistで入ってくる{r, g, b}
–リスト中に入っている指定要素をサーチして、各チャネルの値よりも大きい場合に合致したとみなし、出現アイテム番号を返す(複数対応)
on findItemNums(aNum, aList)
  if aList = {missing value} then return {}
  
if aNum = {missing value} then return {}
  
  
set iCount to 1
  
set hitF to false
  
set hitList to {}
  
copy aNum to {aNum1, aNum2, aNum3}
  
  
repeat with i in aList
    set j to contents of i
    
if j is not equal to missing value then
      copy j to {tmpR, tmpG, tmpB}
      
      
if (tmpR > aNum1) and (tmpG > aNum2) and (tmpB > aNum3) then
        set the end of hitList to iCount
      end if
    end if
    
set iCount to iCount + 1
  end repeat
  
  
return hitList
end findItemNums

on retNearestItemByPosition(L1Pos, L2Pos)
  
  
set resItemNum to {}
  
  
repeat with i in L1Pos
    set j to contents of i
    
set iCount to 1
    
set tDList to {}
    
    
repeat with ii in L2Pos
      set jj to contents of ii
      
      
copy jj to {tmpX1, tmpY1}
      
copy j to {tmpX2, tmpY2}
      
      
if tmpX1 ≥ tmpX2 then
        set xDist to tmpX1 – tmpX2
      else
        set xDist to tmpX2 – tmpX1
      end if
      
      
if tmpY1 ≥ tmpY2 then
        set yDist to tmpY1 – tmpY2
      else
        set yDist to tmpY2 – tmpY1
      end if
      
      
set tArea to xDist * yDist
      
set t2Area to absNum(tArea) of me
      
set the end of tDList to {area:t2Area, itemNum:iCount}
      
set iCount to iCount + 1
    end repeat
    
    
set resList to sortRecListByLabel(tDList, "area", true) of me
    
–> {{itemNum:2, area:100}, {itemNum:3, area:1739}, {itemNum:4, area:3780}, {itemNum:1, area:4554}}
    
    
set tItem to itemNum of first item of resList
    
set the end of resItemNum to tItem
    
  end repeat
  
  
return resItemNum
end retNearestItemByPosition

on arrangeTargItemByItemNumList(L2Pos, L2ItemNums)
  set L3Pos to {}
  
repeat with i in L2ItemNums
    set j to contents of i
    
set the end of L3Pos to item j of L2Pos
  end repeat
  
  
return L3Pos
end arrangeTargItemByItemNumList

on absNum(q)
  if q is less than 0 then set q to –q
  
return q
end absNum

–リストに入れたレコードを、指定の属性ラベルの値でソート
on sortRecListByLabel(aRecList as list, aLabelStr as string, ascendF as boolean)
  set aArray to current application’s NSArray’s arrayWithArray:aRecList
  
set sortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:aLabelStr ascending:ascendF
  
set sortedArray to aArray’s sortedArrayUsingDescriptors:{sortDesc}
  
set bList to (sortedArray) as anything
  
return bList
end sortRecListByLabel

★Click Here to Open This Script 

Posted in list Text | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

iWork apps 14.3にアップデート

Posted on 12月 22, 2024 by Takaaki Naganoya

Keynote、Pages、NumbersのiWork appsがバージョン14.3にアップデートしていました(気づかなかった)。

アップデート内容もたいしてありませんし、Apple Inteligenceを利用した機能なので、日本語環境では利用できません。

AppleScript用語辞書についても、とくに前バージョンから変更はありません。

Posted in news | Tagged 14.0savvy 15.0savvy Keynote Numbers Pages | Leave a comment

Pagesで選択中の表を書籍掲載用にセル内容の整理(重複セルをまとめる)

Posted on 12月 2, 2024 by Takaaki Naganoya

Pages書類上の表を、書籍掲載用に体裁をととのえるAppleScriptです。書籍掲載時には、同じ値が横方向に連続している箇所は1つにまとめたいところなので、その作業を自動で行います。


▲Pages書類上の表のいずれかのセルを選択しておいて、本Scriptを実行します


▲実行後

AppleScript名:Pagesで選択中の表を書籍掲載用にセル内容の整理(重複セルをまとめる).scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/12/02
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

tell application "Pages"
  tell front document
    try
      set theTable to first table whose class of selection range is range
    on error
      return "" –何も選択されてなかった場合
    end try
    
    
–セルを選択中の表を処理する
    
tell theTable
      set headR to header row count
      
set headC to header column count
      
set rowC to count every row
      
set colC to count every column
      
      
repeat with y from (headR + 1) to (rowC)
        –1行分(ヘッダーカラムをのぞく)のデータを1D Listで取得
        
set tmpRangeStr to numAdrToColumnEncode(headC + 1) of AddressEncoder & (y as string) & ":" & numAdrToColumnEncode(colC) of AddressEncoder & (y as string)
        
set tValList to value of cells of range tmpRangeStr
        
        
–1D Listから値が連続している区間を求める
        
set sameBlock to detectSameValueRepeatationBlockIn1DArray(tValList) of detectRepeatation
        
        
–連続区間でループ
        
repeat with i in sameBlock
          copy i to {startX, endX} –データ内の項目Indexであることに留意
          
          
–重複値のセルをクリアする(初出セルの値は残す)
          
repeat with ii from (startX + 1) to endX
            set value of cell (ii + headC) of row y to ""
          end repeat
          
          
–重複していたセルをマージする
          
set mRangeStr to numAdrToColumnEncode(headC + startX) of AddressEncoder & (y as string) & ":" & numAdrToColumnEncode(headC + endX) of AddressEncoder & (y as string)
          
set mRange to range mRangeStr
          
merge mRange
        end repeat
      end repeat
    end tell
  end tell
end tell

script detectRepeatation
  property parent : AppleScript
  
use scripting additions
  
use framework "Foundation"
  
  
–巨大なデータの処理に向いていないかも?
  
on detectSameValueRepeatationBlockIn1DArray(aList)
    set dList to returnDuplicatesOnly(aList) of me
    
–>  {​​​​​"年間仕様", ​​​​​"YP仕様", ​​​​​"月間仕様"​​​}
    
    
set anArray to current application’s NSMutableArray’s arrayWithArray:aList
    
anArray’s addObject:""
    
    
set resList to {}
    
repeat with i in dList
      set j to contents of i
      
set anIndex to (anArray’s indexOfObject:j)
      
repeat with ii from (anIndex + 1) to ((length of aList))
        set jj to (anArray’s objectAtIndex:ii) as string
        
if jj is not equal to j then
          set the end of resList to {anIndex + 1, ii}
          
exit repeat
        end if
      end repeat
    end repeat
    
    
resList
    
–>  {​​​​​{​​​​​​​4, ​​​​​​​6​​​​​}, ​​​​​{​​​​​​​7, ​​​​​​​9​​​​​}, ​​​​​{​​​​​​​10, ​​​​​​​17​​​​​}​​​}
  end detectSameValueRepeatationBlockIn1DArray
  
  
on returnDuplicatesOnly(aList)
    set countedSet to current application’s NSCountedSet’s alloc()’s initWithArray:aList
    
set simpleSet to current application’s NSSet’s setWithArray:aList
    
countedSet’s minusSet:simpleSet
    
return countedSet’s allObjects() as list
  end returnDuplicatesOnly
end script

script AddressEncoder
  property parent : AppleScript
  
  
–10進数数値をExcel 2004/2008的カラム表現にエンコードするサブルーチン(エンコード範囲:1~1351)
  
on numAdrToColumnEncode(origNum)
    if origNum > 1351 then
      error "エラー:Numbersのカラム表現(A1形式)への変換ルーチンにおいて、想定範囲外(1351以上)のパラメータが指定されました"
    end if
    
    
set upperDigitEncTable to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A"}
    
set lowerDigitEncTable to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A"}
    
    
set oNum to origNum
    
set nTh to 26
    
set stringLength to 4
    
    
–数字が1桁の場合の対応
    
if origNum < 27 then
      set aRes to (item origNum of upperDigitEncTable) as string
      
return aRes
    end if
    
    
if origNum > 702 then
      –3桁になる場合
      
set upupNum to oNum div 676 –整数除算–上の上の桁
      
set oNum to oNum – (upupNum * 676)
      
set upNum to oNum div 26 –整数除算–上の桁
      
set lowNum to oNum mod 26 – 1 –余剰計算–下の桁
      
      
–つじつま合わせ処理 【強引】
      
if lowNum = -1 then
        set upNum to upNum – 1
        
set lowNum to 25
      end if
      
      
set upupChar to (item upupNum of upperDigitEncTable) as string
      
set upChar to (item upNum of upperDigitEncTable) as string
      
set lowChar to (item (lowNum + 1) of lowerDigitEncTable) as string
      
set resText to upupChar & upChar & lowChar
      
    else
      –2桁の場合
      
set upNum to oNum div 26 –整数除算–上の桁
      
set lowNum to oNum mod 26 – 1 –余剰計算–下の桁
      
      
–つじつま合わせ処理 【強引】
      
if lowNum = -1 then
        set upNum to upNum – 1
        
set lowNum to 25
      end if
      
      
set upChar to (item upNum of upperDigitEncTable) as string
      
set lowChar to (item (lowNum + 1) of lowerDigitEncTable) as string
      
set resText to upChar & lowChar
      
    end if
    
    
return resText
  end numAdrToColumnEncode
  
  
–Numbersの横方向アドレス(A~Zの26進数)文字列を10進数に変換
  
on colAddrToNumDecode(origStr)
    return aNthToDecimal(origStr, {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}) of me
  end colAddrToNumDecode
  
  
  
–n進数文字列を10進数に変換する
  
on aNthToDecimal(origStr, nTh)
    set resNumber to 0
    
    
set sList to reverse of (characters of origStr)
    
set aLen to length of nTh
    
set digitCount to 0
    
    
repeat with i in sList
      set j to contents of i
      
set aRes to offsetInList(j, nTh) of me
      
      
set resNumber to resNumber + (aLen ^ digitCount) * aRes
      
      
set digitCount to digitCount + 1
    end repeat
    
    
return resNumber as integer
  end aNthToDecimal
  
  
  
on offsetInList(aChar, aList)
    set anArray to NSArray’s arrayWithArray:aList
    
set aInd to (anArray’s indexOfObject:aChar)
    
if aInd = current application’s NSNotFound or (aInd as number) > 9.99999999E+8 then
      error "Invalid Character Error"
    else
      return (aInd as integer) + 1 –0 to 1 based index conversion
    end if
  end offsetInList
  
end script

★Click Here to Open This Script 

Posted in list Object control | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

Pagesで選択中のテキストフレーム内のテキストを、指定記号の前まで太らせる

Posted on 11月 10, 2024 by Takaaki Naganoya

以前にKeynote用に作っておいたAppleScriptを、Pages用に書き直しました。

Pages書類、主に奥付けのテキストなどで、「項目名」「:」(セパレータ)「内容」みたいに列挙している箇所を行頭からセパレータの場所の前まで太字の書体に変更します。ヒラギノ角ゴシックでチェックしており、欧文フォントは考慮していません。

Pages v14.2+macOS 15.2Betaで実験しています。


▲実行前


▲実行後

AppleScript名:フォントを記号の前まで太らせる.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", "㎝"}}

tell application "Pages"
  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 = shape 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
          
          
–ヒラギノ角ゴProN W3 → ヒラギノ角ゴProN W6
          
set newFont to incrementFontWeight(fontName, 1) of me
          
        else if fFamilyCount > 4 then
          –ヒラギノ角ゴシック Wn のウェイトを上げ
          
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

★Click Here to Open This Script 

Posted in Font | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

Pages書類の内容を伏せ字に v2

Posted on 10月 5, 2024 by Takaaki Naganoya

現在オープン中の最前面の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:

★Click Here to Open This Script 

Posted in Object control | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

Pages書類の内容を伏せ字に

Posted on 10月 3, 2024 by Takaaki Naganoya

現在オープン中の最前面のPages書類の内容を伏せ字に置き換えるAppleScriptです。

新刊「Pages+AppleScriptで本をつくろう!」の作成のために書いたものです。Pages書類を付録として電子書籍に添付する場合に、あくまでデザインテンプレートとしての利用を見込んでいるため、本文がそのまま入っていると困るわけです、私が。

そんなわけで、せっかく作ったPages書類の内容を伏せ字にして、ダミー書類化するためのAppleScriptが必要になったわけです。

一応、テキストを伏せ字にするAppleScriptは作ってあったので、これをPages書類相手に処理するよう書き換えたものがこれです。


▲処理前


▲処理後

ただし、すべてのPages書類内のオブジェクトに対応していません。groupオブジェクトについては、メニュー操作を行えばグループ解除を行えなくもないですが、未着手です。

ちょっと気をつけて処理したのが「表」の内部セルに入っている値です。空欄だと値(value)がmissing valueになるので、そこは触らないほうがよかったかもしれません。

自分だけの事情になりますが、ページ左右端に「ツメ」と呼ばれるマークを「表」オブジェクトを用いて記入しているため、この「ツメ」に相当する「表」については無視するようにしています。

AppleScript名:全ページを伏せ字に.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

tell application "Pages"
  tell front document
    set pCount to count every page
    
repeat with p from 1 to pCount
      tell page p
        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 = group then
            
            
            
          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

–指定したルールのとおりの文字種の並びになっているか?
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:

★Click Here to Open This Script 

Posted in Object control Text | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

新刊電子書籍「Pages+AppleScriptで本をつくろう!」を刊行

Posted on 10月 3, 2024 by Takaaki Naganoya

電子書籍新刊「Pages+AppleScriptで本をつくろう!」を刊行しました。全370ページ、サンプルAppleScriptアーカイブつき。
→ 販売ページ

本書は、Appleのかんたんワープロ「Pages」の使い方を「本づくり」という観点からわかりやすくまとめたものです。

本という「お約束の塊」について、それぞれの部品をどのように作っているか、実例にもとづいてご紹介しています。本書を作ったときのPages書類を含め、用例をオマケとして添付しています。

Pagesはシンプルで強力な機能を備えていますが、シンプルであるがゆえに手間が増えてしまうケースがままあります。

これに対して、macOSのスクリプト言語である「AppleScript」を利用することで、手間のかかる作業を省ける構造になっています。

本書では、筆者がPagesを使って本を作るなかで、「どうしてもこれが必要」と感じた内容をまとめたAppleScriptを付録としてご提供しています。

本書をお買い求めいただくことで、どなたも同じ道具を使って手軽に電子書籍コンテンツを作る環境とノウハウを得られる、と自負するものです。

目次

準備編

1章

電子書籍の筆者になろう!

2章

本を作るために、Pagesになれよう!
Pagesで作る「本」とは?
Pagesのツールバー設定
Pagesの参考書
AppleScriptでパワーアップ

3章

Pagesの基本操作
テキスト
表
写真
図形
欄外の表記

実践編

4章

「本」を作る作業に慣れよう!
本を作る「作業」の流れ
Pages、4つのオキテ
PDF書き出し
Skim PDF Viewerの使い方

5章

本の部品を作る作業に慣れよう!
表紙
記事一覧でもある「目次」
読者へのあいさつ「まえがき」
仁義のための登録商標表記
記事本文ページ
記事を区切る「章トビラ」
本の名刺「奥付」
本の余韻を生む「裏表紙」
ページの左右を調整する「空白」

6章

Pagesのレイアウトに翻訳

7章

本は「顔」(表紙)が命
応用編

8章

頒布/配布方法を選ぼう

9章

作成した電子書籍を各種Book Storeへ
電子書籍をクリエーター天国のBOOTHで販売
電子書籍をAmazon Kindleで販売!
各電子書籍ストアの「検閲」

10章

Mac App Storeから取得
ユーザー辞書の作り方
表情豊かな、フォントをそろえよう!
フリーで利用できるイラスト/画像素材を活用しよう!
本の構造を知ろう!
プリンタで両面印刷してホチキス製本
コンビニのコピー機で出力してホチキス製本
付録AppleScriptについて
①PDF書き出し+結合
②ツメ操作
③パーソナル面付け
④PDFへのTOC追加
⑤テキストボックス操作
⑥表の列幅、行高さ調整
⑦フォント情報収集
⑧ファイル名(章)修正
⑨ファイル名(仮想ノンブル)修正
⑩PDF操作
筆者が刊行した電子書籍の仕様
Pagesのバージョン履歴

Posted in Books news | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

iWork Appsがv14.2にアップデート

Posted on 9月 20, 2024 by Takaaki Naganoya

iWork Apps(Keynote、Pages、Numbers)がバージョン14.2にアップデートしました。

すべてのアプリでAppleScript用語辞書への変更はありません。

Keynote 14.2では、macOS 15, Sequoia上でHDRコンテンツの表示をサポートしています。

バグの修正がうたわれていますが、Pagesのページ上のオブジェクトの情報を取得できる範囲が現在表示中の見開き+6ページに制限されるというアホな仕様は変わっていないことを確認しています。

Posted in news | Tagged Keynote Numbers Pages | Leave a comment

iWork Appsでオブジェクトの削除を安全に

Posted on 9月 14, 2024 by Takaaki Naganoya

iWork Apps(Keynote、Pages、Numbers)にはAppleScript系の機能でいろいろ勘弁してほしい仕様がありますが、その中でも最大のものが、書類内の各オブジェクトがIndexで管理されていることです。

Indexというのは、1からはじまる連番の数値です。

iWork Apps(Keynote、Pages、Numbers)のドキュメント上でオブジェクトの削除を行おうとすると、「地獄」を見ることになります。

iWork Appsの書類上でオブジェクトの削除を行うと、このIndex値が振り直されてしまうために、正しく「対象」を指し示すことが(途中から)できなくなってしまうのです。あるいは、まったく関係のない別のオブジェクトが削除されるとか。

これが、idで管理されていれば、何かのオブジェクトを削除されても影響はありません。何かUUID的な重複しないidが割り振られて、最初から最後まで(アプリケーションが起動してから終了するまで、あるいは書類がオープンされてからクローズされるまで)個別に識別されます。

対策

各オブジェクトを識別する場合に、それ専用の属性値を持たせることがあります。

Adobe InDesign:script label AppleScriptから設定・確認が可能なラベル(文字列)を設定できる

もともとある仕組みを本来の目的以外の用途に使うことができるケースもあります。

OmniGraffle:URL urlとかいいつつ、文字列だったらだいたいなんでも入った記憶が

そして、iWork Apps(Keynote、Pages、Numbers)。普段ほとんど使わなくて、AppleScriptから操作できて害のない属性値なんて便利なものがあるわけが……ありました。

Keynoteで使っている例は見かけましたが、他で使ったことのない「reflectin value」。つまり、「反射」属性。

PagesでもNumbersでも使ったことがありません。個人的には、Keynoteでも使ったことがないと思います。

選択状態にあるオブジェクトをもとに何らかの処理を行なって、選択していたオブジェクトを削除する場合に、普通に処理すると(オブジェクトがIndexで管理されているので)、地獄を見ます。

なので、削除対象のオブジェクトのreflection valueに100とか(1〜100のうち、0でないお好きな値を)を設定しておいて、ひととおり処理し終わったら、reflection valueが指定値になっているオブジェクトだけをフィルタ参照で削除する、といった対策が有効です。

実際のAppleScript

前処理Scriptで、最初にreflection valueが何か設定されているオブジェクトが存在しないことを確認したうえで、選択中のオブジェクトのreflection valueに100を設定し……

AppleScript名:削除_前処理.scptd
tell application "Pages"
  tell front document
    set reList to every iWork item whose reflection value is 100
    
if length of reList is not equal to 0 then return
    
    
set aSel to selection
    
repeat with i in aSel
      set j to contents of i
      
set reflection value of j to 100
    end repeat
  end tell
end tell

★Click Here to Open This Script 

処理を行なったあとで、reflection valueに100と設定されているオブジェクトを削除します。

AppleScript名:削除_後処理.scptd
tell application "Pages"
  tell front document
    tell current page
      set aSel to delete (every iWork item whose reflection value = 100)
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in Object control | Tagged 13.0savvy 14.0savvy 15.0savvy Keynote Numbers Pages | Leave a comment

新刊電子書籍「AppleScriptでたのしむ レトロ・グラフィック プログラム集」を刊行

Posted on 8月 31, 2024 by Takaaki Naganoya

電子書籍新刊「AppleScriptでたのしむ レトロ・グラフィック プログラム集」を刊行しました。全154ページ、サンプルAppleScriptアーカイブつき。
→ 販売ページ

1980年代や90年代の8/16ビットPCのBASICで描かせていた、三角関数による各種グラフィックスをAppleScriptで再現。ダイアログで表示するだけでなく、各種GUIアプリ(Keynote、Numbers、Pages、Excel、PowerPoint、Word、Pixelmator Pro)を操作して描画したり、画像書き出ししてAirDropでiOSデバイスに転送するようなサンプルを収録しています。

目次

1章 レトロ・グラフィックスの世界

懐かしのレトロCGの世界を再現
時代を経て感じる郷愁とも異なるテイスト
その昔、十数分かけて描いた三角関数グラフ
1秒以下で終了 vs 6分で終了
最新環境で動くAppleScriptにBASICのプログラムを移植
アップルスクリプトは、構文色分け必須の、色で要素を見分ける環境
最低限の知識でAppleScriptによるグラフィックを
AppleScript書類内に、実行に必要なライブラリを同梱
筆者の関数計算ライブラリ「calcLibAS」内蔵関数
コラム ポケコンエミュレータ“pockemul”

2章 早足で紹介するAppleScriptの世界

1994年から採用され続けている言語
GUIアプリを操作するために存在。搭載実行環境がとても多い
書き方は、アプリ内に存在する用語辞書を参照
本来の機能を利用するためにはシステム設定で許可する必要が
10.10以降でCocoaを直接呼べるようになったインタプリタ言語
GUI部品を直接操作してアプリを操作する強制操作機能が人気?
Web上のAPIを呼んでクラウド系の機能も利用
AS自体で予約語と機能を記述するライブラリ機能
コラム AppleScriptの世界の全体像 OS機能の最深部からGUIそのものの操作まで

3章 AppleScriptでグラフィックスを扱う

Cocoaの機能を呼び出してメモリ上で画像を作成
NSAlertの上にNSImageViewを作成しグラフィック表示
Cocoaのグラフィックス座標系”
主要なアプリケーションの座標系”
画像ファイルに書き出せば”
他のアプリにコピー&ペースト”
当時は存在していなかった透過画像”
パラメータを変えると動作が変わる”
コラム GUIアプリごとの応答速度の違い

4章 レトロ・グラフィックスプログラム集

スクリプトエディタでオープンして実行するだけ
必要なライブラリはバンドル内にすべて格納
掲載リストはグラフィックス描画にかかわる箇所のみ
How to use/ダイアログ表示AppleScript
How to use/ファイル出力AppleScript
How to use/ファイル出力+AirDrop AppleScript
How to use/クリップボード転送AppleScript
How to use/各種GUIアプリ操作AppleScript
OS標準搭載の13の実行環境およびサードパーティの数十の実行環境

線画テスト
円画テスト①
円画テスト②
サイクロイド曲線
バラ曲線
パスカルの蝸牛形
リサージュ曲線
ダイヤモンドパターン
アルキメデスの螺旋
メキシカンハット①
メキシカンハット②
メキシカンハット③
メキシカンハット④
コラム マシンごとの実行速度の違い

Posted in Books news | Tagged 13.0savvy 14.0savvy 15.0savvy Excel Keynote Numbers Pages Pixelmator Pro PowerPoint Word | Leave a comment

GUI Scriptingに邪魔な各種パレットをクローズ

Posted on 6月 26, 2024 by Takaaki Naganoya

「操作自動化」の観点からするとメイン機能、「業務自動化」の観点からすると必要悪、操作対象のアプリのGUI部品の状況を想定どおりに設定しておけないと、Script動作の再現がなかなか大変なので、極力使わないでおきたいGUI Scripting。

PagesのAppleScript対応機能は必要な機能が呼び出せないのと、現在表示中のページ+5ページまでしか各種オブジェクトの属性値にアクセスできないので、書類の表示倍率を強制的に変更する必要があります。PagesのAppleScript用語辞書にそのような機能は実装されていないので、仕方なくGUI Scriptingで組むことに。

そんな中、各種パレットが表示されていると、パレットがwindow 1として認識されるため、作業前にパレットを消去しておく必要を感じました。

そこで、指定アプリのパレット表示状態を検知してクローズするAppleScriptを書いてみました。実行すると、

表示されている各パレットを、

順次クローズしていきます。

当初、もっと簡単にできるものとばかり思って、window 1(実際にはパレット)にcloseコマンドを実行したものの、それでは実行できず……地道にクローズボタンを探してclickするという処理内容になりました。

もっとお手軽に書いてしまってもよかったものの、日本語環境でだけ動くScriptというのも、それはそれでいまひとつなので(別に自分は日本語環境でだけ動けばよいのですが)、言語環境に依存しないように書いておきました。

よく使いそうな部品なので、ライブラリ化して呼び出すとよいでしょう。

AppleScript名:指定アプリのパレットウィンドウを閉じる.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/06/26
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

set aRes to closeAllPallettes("Pages") of me

on closeAllPallettes(appName)
  activate application appName
  
delay 0.1 –this number depends of how fast the CPU (slower CPU require larger number. 0,1 for M1)
  
  
tell application "System Events"
    tell process appName
      if (count (every window)) = 0 then return
      
repeat
        tell window 1
          set aSubrole to subrole
          
if (aSubrole = "AXFloatingWindow") or (aSubrole = "AXSystemFloatingWindow") then
            try
              set bList to every button whose subrole = "AXCloseButton"
              
set aButton to first item of bList
              
tell aButton to click
            end try
          else
            exit repeat
          end if
        end tell
      end repeat
    end tell
  end tell
  
  
return true
end closeAllPallettes

★Click Here to Open This Script 

Posted in GUI Scripting | Tagged 13.0savvy 14.0savvy 15.0savvy Pages | Leave a comment

Pages本執筆中に、2つの書類モード切り替えに気がついた

Posted on 6月 18, 2024 by Takaaki Naganoya

目下、「Pages+AppleScriptで本をつくろう!」という電子書籍を執筆中です。

これまでの電子書籍作成のノウハウと、その中で必要に迫られて書いたAppleScriptのかずかずを盛り込んでいます。

AppleScriptについて詳しく説明を行わず、コンテンツの作成に比重を置いています(高機能なScriptは添付)。

そんな中、これまでに疑問に思っていたことについてPagesのヘルプでいろいろ調べてみたところ、いろいろ勘違いしていたことが分かりました。

Pagesは、ワープロ的に書類下地に本文を記入する「ワープロ的な世界観」と、ボックスを並べてテキスト流し込みを行う「DTP的な世界観」の2つの機能が混在していると思っていました。ただ、ワープロ的な世界観に無理やりにDTP的な世界観を統合したため、

・ページ単位の編集能力がない

と思っていました。しかし、これが自分の勘違いであることがわかりました。

数十ページも書き換える必要が出てきて頭を抱えているところです。

ものすごくわかりにくい場所に、モード切り替えスイッチが存在

これら2つの世界観に対して公式に名前が割り振られていることをヘルプで確認(ものすごくわかりにくい)。

ワープロ的世界観の書類のことを「文章作成書類」、DTP的な世界観の書類のことを「ページレイアウト書類」と呼んでいることを見つけました。画面上にそうした切り替え機能が(メニューなどに)、明確に用意されているものではありません。

Pagesで書類を新規作成したときに、作成されるのは「文章作成書類」(ワープロ的)です。

これまで、自分はこの「文章作成書類」の上にテキストボックスを並べて、DTPソフト的に使っていました。結果として、ページ単位の削除やならべかえが行いにくく、「ページ単位の編集ができないので、書類を小分けにして対処しよう」という作り方をしてきました。

ところが、このDTPソフト的な使い方に適した「ページレイアウト書類」モードに切り替えるスイッチが存在していたのです(こんなの気づかないぞ!)。

この、インスペクタを「書類」に設定し、「書類」タブを選択した中に存在している「書類本文」チェックボックス。デフォルトではこれが選択されています。

では、このチェックをはずすとどうなるか?

わざわざ「ページレイアウト書類に変換してもよろしいですか?」というダイアログを表示して警告します。

これが、「文章作成書類」モードと「ページレイアウト書類」モードの切り替えを行う操作です。最初から、ページレイアウト書類の「空白」テンプレートを用意しておいてほしいぐらいです(ユーザーによる追加は可能)。

Macのアプリでは「モーダルな処理をなるべく避けること」といったガイドラインが存在しているのですが、Pagesの場合はモーダルな機能を隠した結果、余計にわかりにくくなった印象です。

この2つの書類モードの切り替えは不可逆的なものではなく、随時切り替え操作が可能です。ただし、先のダイアログによる警告どおり、文章作成書類(ワープロモード)で本文テキストを入力していた場合には、それはすべて削除されます。

ページレイアウト書類に切り替えると機能も変わる

ページレイアウト書類モードに切り替えると、機能自体も変わります。

(1)ページ単位の編集が可能に

文章作成書類モードでは謎機能だった「セクション」が「ページ」と呼び替えられます。普通にページ挿入や、ページのサムネールを入れ替えるとページが入れ替えられたり、ページ単位の削除が行えます。

(2)オブジェクトの配置がなくなる

本文テキストとともにオブジェクトが移動したり、移動しなかったりという制御を行う「オブジェクトの配置」機能が、インスペクタ上から消えます。

「ページレイアウト書類」モードでは、本文というものがなくなるのに合わせて、インスペクタから消えます。

(3)ページ挿入ができるようになる

「セクションの挿入」が「ページの挿入」に切り替わります。

ページレイアウト書類モードに切り替えると、これまでPagesに感じてきた違和感がなくなります。

こんな重要な機能はもっとわかりやい場所に配置しておくべきです。

書類モードのAppleScriptからの検出

AppleScript名:書類モードの検出(文章作成書類、ページレイアウト書類).scpt
tell application "Pages"
  tell front document
    set dStat to document body
    
–> false –ページレイアウト書類
    
–> true –文章作成書類
  end tell
end tell

★Click Here to Open This Script 

AppleScriptからdocumentの属性値「document body」を取得するとtrueなら文章作成書類、falseならページレイアウト書類であることが分かります。

なお、この「document body」という属性値はr/o(Read Only)であるため、属性値の書き換えで切り替えることはできません。

Pagesの「文章作成書類」を前提とした末尾ページの削除や指定ページから末尾までの一括削除AppleScriptを作りためていましたが、これらは「ページレイアウト書類」モードでは機能しません。

ただ、ページレイアウト書類モードではページのサムネールを選択してページ削除が行えるので、これらのAppleScriptが機能しなくても問題はないでしょう。

Posted in Object control | Tagged 13.0savvy 14.0savvy Pages | Leave a comment

Keynote/Pagesで選択中の表カラムの幅を均等割

Posted on 5月 5, 2024 by Takaaki Naganoya

Keynote/Pagesの書類上の「表」のうち、選択中のカラムについて「幅」を均等割する(等しい幅に設定する)AppleScriptです。Keynote/Pages v14.0で動作確認していますが、とくにバージョン固有の機能などに依存する部分はありません。


▲Keynote書類上の表のカラムを選択しておいてAppleScript実行


▲Keynote書類上で選択しておいた表カラムが均等幅に設定される


▲Pages書類上の表のカラムを選択しておいてAppleScript実行


▲Pages書類上で選択しておいた表カラムが均等幅に設定される

AppleScript名:選択中の表カラムの幅を均等割.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/05/05
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

tell application "Keynote"
  tell front document
    set aSel to selection
    
set fObj to class of first item of aSel
    
if fObj is not equal to table then
      display notification "tableが選択されていません"
      
return
    end if
    
    
tell current slide
      try
        set theTable to first table whose class of selection range is range
      on error
        display notification "table中のセル(カラム)が選択されていません"
        
return –何も選択されてなかった場合
      end try
      
      
tell theTable
        
        
set vList to address of column of every cell of selection range
        
set vUList to uniquify1DList(vList) of uniquifyKit of me
        
        
–均等割したカラム幅を計算
        
set totalW to 0
        
repeat with i in vUList
          tell column i
            set tmpW to width
            
set totalW to totalW + tmpW
          end tell
        end repeat
        
        
–選択カラム幅に均等割した幅を設定
        
set aColW to totalW / (length of vUList)
        
repeat with i in vUList
          tell column i
            set width to aColW
          end tell
        end repeat
        
      end tell
    end tell
    
  end tell
end tell

script uniquifyKit
  use scripting additions
  
use framework "Foundation"
  
property parent : AppleScript
  
  
on uniquify1DList(theList as list)
    set theSet to current application’s NSOrderedSet’s orderedSetWithArray:theList
    
return (theSet’s array()) as list
  end uniquify1DList
end script

★Click Here to Open This Script 

AppleScript名:選択中のカラムの幅を均等割.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/05/05
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

tell application "Pages"
  tell front document
    set aSel to selection
    
set fObj to class of first item of aSel
    
if fObj is not equal to table then
      display notification "tableが選択されていません"
      
return
    end if
    
    
try
      set theTable to first table whose class of selection range is range
    on error
      display notification "table中のセル(カラム)が選択されていません"
      
return –何も選択されてなかった場合
    end try
    
    
tell theTable
      
      
set vList to address of column of every cell of selection range
      
set vUList to uniquify1DList(vList) of uniquifyKit of me
      
      
–均等割したカラム幅を計算
      
set totalW to 0
      
repeat with i in vUList
        tell column i
          set tmpW to width
          
set totalW to totalW + tmpW
        end tell
      end repeat
      
      
–選択カラム幅に均等割した幅を設定
      
set aColW to totalW / (length of vUList)
      
repeat with i in vUList
        tell column i
          set width to aColW
        end tell
      end repeat
      
    end tell
    
  end tell
end tell

script uniquifyKit
  use scripting additions
  
use framework "Foundation"
  
property parent : AppleScript
  
  
on uniquify1DList(theList as list)
    set theSet to current application’s NSOrderedSet’s orderedSetWithArray:theList
    
return (theSet’s array()) as list
  end uniquify1DList
end script

★Click Here to Open This Script 

Posted in Object control | Tagged 12.0savvy 13.0savvy 14.0savvy Keynote Pages | Leave a comment

Keynote、Pages、Numbers Ver.14.0が登場

Posted on 4月 3, 2024 by Takaaki Naganoya

Keynote、Pages、NumbersのiWorkアプリがバージョン14にアップデートされました。

本バージョンはmacOS 13以降に対応しています。

各アプリのAppleScript用語辞書に変更はありません。Pagesで見られている、ウィンドウで表示されていないページ上のオブジェクトからの情報取得ができない(正確にいえば、表示中の見開き+2見開き分まで取得可能)という挙動は変わっていません。どうも処理速度向上のための仕様のようなので、この部分はこのままだと思います。

Posted in news | Tagged 13.0savvy 14.0savvy Keynote Numbers Pages | Leave a comment

Pagesで、現在表示中のページから離れたページのオブジェクト情報を取得できない

Posted on 3月 10, 2024 by Takaaki Naganoya

Pagesのいつかのバージョンから現在表示中のページから離れたページのオブジェクト情報取得および操作ができなくなっていました。バージョン13.xではすでにそうなっていました。12.xからそうだったかもしれません。

2024/4/3追記:Pages v14.0で確認したところ、同じ挙動でした

1〜2ページを表示中に、3〜4ページのオブジェクト情報取得および操作は行えるものの、7〜8ページ以降のオブジェクト情報は取得できないという状況です。自分が確認したのはtableオブジェクトのposition情報。

25%の縮小表示を行った場合には、

問題なく、すべてのページのtable(ツメ)のpositionを取得できますが、

拡大表示すると……

7ページ以降のtableのpositionを取得できていません。

この現象は、全ページに対してツメ(Dictionary index)を付加して統一操作を行うAppleScriptにおいて問題になっていました。実際に、ファイル名に「章番号」を書いておくと、それをピックアップして、ツメの見た目を変更するというAppleScriptを作成して運用しています。このScriptは、ツメの塗りの状態を自動検知して当該章の塗り方を自動で反映するようになっています。

このような高機能Scriptを実用化したものの、最近になっておかしな挙動が確認されていました。

・現在表示中のページのオブジェクト操作は行える
・表示中から離れたページのオブジェクト操作/情報取得が行えない

なんじゃこら????

Pages書類のツメ操作で、いろいろ問題に。

そこで、実験のために表示ページを移動しながらオブジェクト情報を取得してみたら、問題なく情報取得できました。

Pagesには表示対象ページの変更機能はないので、GUI Scriptingで「次のページ」コマンドを強引に実行。あるいは、実行前にPagesの書類表示ズーム倍率を、25%に変更しておく……というほうが「楽」かもしれません。

これをバグとして報告すべきなのか、アプリケーションの挙動として「知っておくべき情報」なのかは判断できません。処理速度向上のための「改善」の結果としてこのような状況が生まれてしまったのかもしれないためです。

ただ、特定のページを表示状態にする機能がないのに、表示範囲外(現在の見開きから+2見開きを超える範囲)のオブジェクトの情報を取得できないのは、片手落ちの状態でしょう。

Posted in Object control | Tagged 13.0savvy 14.0savvy Pages | Leave a comment

最前面の書類中の選択中のテキストアイテムの文字サイズを、特定サイズのみ対象にして置換 v3

Posted on 2月 18, 2024 by Takaaki Naganoya

Pages書類で選択中のtext item(Pagesでこれを識別するクラスがないのでshape)内のテキストに複数の文字サイズが存在している場合に、特定の文字サイズ部分のみ異なるものに置き換えるAppleScriptです。

–> Play demo movie

ただし、本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

★Click Here to Open This Script 

Posted in Font Object control | Tagged 13.0savvy Pages | Leave a comment

Keynote/Pages/Numbers v13.2がリリースされる

Posted on 9月 22, 2023 by Takaaki Naganoya

iWork……という言葉は最近はあまり使われないようなので、Keynote、Pages、Numbersと呼びますが……これらのアップデート版v13.2が公開されました。AppleScript用語辞書の修正、追加はありません(作成できるグラフ形式が増えているのですが、ASから作成できるようにはなっていません)。

メジャーアップデートのv14.0などではないので、本バージョンは堅実で小刻みな機能アップデート版といえるでしょう。

3Dオブジェクトを格納するUSDZファイルをデータとして挿入できたりアニメーション表示(Keynote)できたり、新しいテーマが追加されたり、その他SVG画像を素材として利用できるようになったもようです。

USDZ形式のファイルを扱えるのは、いまのところ手元のアプリケーションではXcodeとPreview.appのみ。

SVGについては、いろいろ増えてきています。

こうした各種書類形式をキーにして、さまざまなアプリケーションを連携させられるという情報を提供する件をAppleのWWDRに提案したことがありましたが、どこのチームも興味を持たなかったとのこと。

USDZ形式データについては、数年前からこの形式データの利用を広めたいという「意図」が見えたので、いろいろ情報収集はすすめてきました。iWork Appsでサポートするということで、1段階利用が広がったというところですが、たとえばKeynoteで3Dを前提としたアニメーションやトランジッションが実装される、という機能が整備されるまでは単なる素材が1つ増えたぐらいでしょう。

Keynoteに3Dトランジッションや3Dアニメーションを追加するぐらいのことは、とっくの昔から検討されていたと思われますが、おそらく実装してみると「思ったよりも効果的ではない」という結論になったのでしょう。Vision ProのようなxRデバイスで閲覧するという「ブラウズ環境」を整備できたことにより、USDZ形式のデータを広くサポートする「価値」が生まれると踏んだのでしょう。

Vision Proが成功を収めるか、誰もが記憶から追い出したくなるような失敗として記録されるかは不明ですが、USDZ形式の利用が広くサポートされれば、それは多くの人々に役立つものとなることでしょう。

Posted in news | Tagged 12.0savvy 13.0savvy 14.0savvy Keynote Numbers Pages | Leave a comment

Keynote,Pages,Numbers v13.0がリリースされる

Posted on 4月 2, 2023 by Takaaki Naganoya

Keynote, Pages, Numbersのバージョン13.0がリリースされました。AppleScript用語辞書的な変更点はありません。

Keynote v11からずっと、新規書類を保存するとエラーになる。Full Disk Accessの権限をKeynoteに与えていてもエラーになる、という重大な問題が解消されないままである、という認識でおりました。状況はKeynote v13.0でも変わりません。

これは、Apple側が問題として認識していないのではないか? という仮説を立て、いろいろ試してみました。

まずは、v12から継続している状況についての説明。Keynoteで新規書類を保存する際に「as Keynote」という、明らかに「指定してくださいね」というオプションがAppleScript用語辞書の中にあるので、指定したくなるところですが

AppleScript名:Keynoteで書類を新規保存(A).scpt
set newFile to ((path to desktop) as string) & "newDoc1111.key"

tell application "Keynote"
  set newDoc to make new document
  
save document 1 in file newFile as Keynote
end tell

★Click Here to Open This Script 

これを指定するとエラーになります。これが、Keynote v12.0から続いており、1年以上継続している状況です。以前のバージョンで通っていた記述がエラーを出すようになった、というものです。

ふとここで、「as Keynote」というオプション指定をはずしてみると…….

AppleScript名:Keynoteで書類を新規保存(A).scpt
set newFile to ((path to desktop) as string) & "newDoc1111.key"

tell application "Keynote"
  set newDoc to make new document
  
save document 1 in file newFile
end tell

★Click Here to Open This Script 

エラーが出なくなりました!!!(^ー^;;;; ファイル保存もできました。

なんなんでしょう、これは、、、、

Posted in Bug news | Tagged 12.0savvy 13.0savvy Keynote Numbers Pages | 1 Comment

macOS 13の複合的な不具合。とくにPDF書き出しについて

Posted on 2月 24, 2023 by Takaaki Naganoya

いろいろ不具合が多すぎて、本当にこれがリリース版なのか理解に苦しむmacOS 13。リリース当初から、AppleScript経由でPagesの(大量の)書類に順次PDF書き出しを行わせると、PDF書き出しされない書類が発生することがわかっていました。

同じバージョンのPages 12.2.1でも、macOS 12.x上では問題が発生していなかったため、明確にmacOS 13.xが理由ではあるのですが、不具合の発生源がよくわかりません。

(1)Pages書類オープン後に時間待ちが必要?

macOS 13移行当初、Pages種類をオープンした後に一定の時間(1秒程度)待機を行って、内部の状態が安定するのを待ってPDF書き出しを行うようにしました。数十程度のPages書類であれば、これで問題は起こりませんでした。

(2)数百個のPages書類を順次オープン→PDF書き出しするとミスを行う

その後、百以上のPages書類を順次オープンして、時間待ちして、PDF書き出し処理を行ってみたところ、明確にPDF書き出しできない書類が複数出てきました。何回実行しても書き出されません。また、そのPages書類単独でPDF書き出しを行わせると問題なく書き出しが行えます。

このPDF書き出しミスを行う書類の動作を観察していると、指定した時間待ちが正しく行われません。delayコマンドに問題があるのかと考え、shellのsleepコマンドを試したりもしていますが、正しく時間待ちが行われません。

さらに、普通にPages書類からPDF書き出しできていたとしても、それを数回繰り返すとPDF書き出しされなくなる(何か、一定の回数書き出すと問題が発生するらしい)ため、macOS 13自体の再起動かログアウト→再ログインが必要でした。

そもそもmacOS 13の出来がよくない、いろいろ問題がありすぎるということ自体が問題なわけですが、、、「複数回実行しないと再現しない」「原因の所在がどこにあるのかよくわからない」といった状況で、レポート自体を行いにくいというのが現状です。

ほかにも、Finder上で選択したファイルをCommand-Oでオープンさせるとオープンできない場合があったりと(なんだこれ?)、何がやりたいのかよくわからないOSバージョンです。セキュリティ強化はもちろん重要ですが、まともに動かないOSをリリースされても、、、、さらに、Beta段階では許可されていた外付けSSDからの前バージョンのOSの起動がmacOS 13リリース以後は封じられており、そういうのは「まともなOS」をリリースできるようになってからやってほしい気持ちでいっぱいです。

もう、macOS 13自体、やり直してほしい気持ちでいっぱいです。macOS 10.13、macOS 10.15と同じかそれ以上にダメなバージョンにしか見えません。

Posted in Bug PDF | Tagged 13.0savvy Pages | Leave a comment

Post navigation

  • Older posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • AppleScriptによる並列処理
  • Cocoa Scripting Course 続刊計画
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • NaturalLanguage.frameworkでNLEmbeddingの処理が可能な言語をチェック
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • Keynote、Pages、Numbers Ver.14.0が登場
  • macOS 15 リモートApple Eventsにバグ?
  • デフォルトインストールされたフォント名を取得するAppleScript
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (129) CotEditor (66) Finder (51) iTunes (19) Keynote (116) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (55) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC