Archive for 1月, 2009

2009/01/31 Z字形に流し込むデータをN字形に変形する

InDesign CS3の表(table)にデータを流し込む場合には、リストでそのまま代入するだけですが、その際には左→右 上→下という順番にデータが流し込まれて行きます。業界的には、「Z型の流し込み」などと呼んでいるものですが、これを唐突に「悪いけどN型で流し込んで〜」などと言われた場合に備えて作っておいたのがこのサブルーチンです。

(more…)

2009/01/28 入れ子のリストをフラット化v03

入れ子のリストをフラット化するシリーズの3作目。これには少々驚かされました。再帰処理も行っていないので、リストの要素数が増えても高速に処理できるものとなっています。
(more…)

2009/01/28 入れ子のリストをフラット化v02

入れ子のリストをフラット化するシリーズの第二弾です。本シリーズの3作の中では一番のハイテクを使用しているのですが、結局さらなる高速化を行うためにはリスト変数への間接参照(a reference to)が必要になり、間接参照のためにはリストと参照用のリストを両方ともグローバル変数として宣言しておかなくてはならないため……本ルーチンのようにグローバル変数の使用を控えたとしても、結局のところそれほど全体のパフォーマンス向上には寄与しないのではないか、と見ています。
(more…)

2009/01/28 入れ子のリストをフラット化v01

入れ子のリストをフラット化するという処理は、割とよくあるものです。このv01は、非常にオーソドックスな処理内容です。
(more…)

2009/01/25 Xcodeでオープン中のプロジェクトで、ビルドターゲット「deployment」を使用してクリーニング実行後、ビルドを行う

Xcode 3.1.2で、ビルドターゲット「Deployment」でクリーニングを行い、ビルドを実行。ビルド実行後に実行バイナリを起動します。

(more…)

2009/01/25 Xcodeでオープン中のプロジェクトで、ビルドターゲット「deployment」を使用してクリーニングを行う

Xcode 3.1.2で、ビルドターゲット「deployment」に対するクリーニングを行います。
(more…)

2009/01/25 Xcodeでオープン中のプロジェクトの各種ビルド設定の詳細情報を仔細にわたって取得する

Xcode 3.1.2で、オープン中のプロジェクトの各種ビルド設定の詳細情報を取得します。
(more…)

2009/01/25 Xcodeでオープン中のプロジェクトをビルドする

Xcode 3.1.2で、オープン中のプロジェクトをビルドします。
(more…)

2009/01/25 Xcodeでオープン中のプロジェクトのビルド設定の名称一覧を取得する

Xcode 3.1.2で、オープン中のプロジェクトのビルド設定の名称一覧を取得します。
(more…)

2009/01/25 Xcodeでオープン中のプロジェクトを数える

ながらく、XcodeはApple純正の開発環境でありながら、AppleScriptからまともにコントロールできないアプリケーションでした。機能を呼び出せない、状況も把握できない……本来、もっとも自動処理の恩恵を受けるべき道具にまともなAppleScript対応機能が備わっていなかったのは「情けないこと」と言って差し支えないでしょう。

しかし、状況は変わりつつあります。AppleScript Studioのエディタで日本語をまともに表示できないXcode 3.1のリリースから1年。ようやく登場したXcode 3.1.2で、多くの(すべて、ではない)バグが改修されました。

Xcode自体も、3.1でその多くの機能をAppleScriptから呼び出すことができるようになり、シェルスクリプトではなくAppleScriptで各種作業の自動化が可能になりました。

本スクリプトでは、オープン中のプロジェクトの数をかぞえます。
(more…)

2009/01/22 QuickTime Playerがバージョン7.6にアップデート

ソフトウェアアップデートで、QuickTimeがバージョン7.6にアップデートされました。合わせて、QuickTime Playerもバージョン7.6にアップデート。AppleScript用語辞書の内容は、前バージョンから変更されていません。

バージョン7.x系列のQuickTime Playerは、7.2.0と7.3.0で変更が加わりましたが、その後はとくにAppleScript用語辞書に変更は加えられていません。

GUIからはできるのにASからできない「複数ムービーの並行書き出し」などの機能を利用できるようにして、DualコアCPUが当たり前になった昨今、複数のCPUコアを有効に活用できるようにしてほしいものです。

2009/01/21 KEditで選択中のテキストを取得する

シンプルなテキストエディタ「KEdit」もAppleScriptに対応しています。選択範囲の取得はselected textです。
(more…)

2009/01/21 TextWranglerで選択中のテキストを取得

BARE BONES Softwareといえば、Mac系プログラマ御用達のテキストエディタ「BBEdit」で有名ですが、その無料版がTextWrangler
(more…)

2009/01/21 miで選択中のテキストを取得する

Mac OS X用テキストエディタ「mi」のAppleScript命令体系、オブジェクト体系は、非常に手堅くオーソドックスなものです。派手な命令はありませんが、安心できる内容です。
(more…)

2009/01/21 Jedit Xで選択中のテキストを取得する

Mac用テキストエディタの定番、Jedit。昔からさまざまな野心的なAppleScriptの命令が実装されてきたアプリケーションですが、Jedit Xになってから「辞書に載っているのに実装されていない」とかいう命令が増えて、それ以来使わなくなってしまいました(普段はmiとかTextWranglerを使用しています)。

jeditx1.jpg

JDiff X(AppleのFileMergeを参考にした文書比較プラグイン)にひかれて久しぶりにJedit Xの新版をダウンロード、とりあえずselection(選択範囲内のテキスト)を取得して何かやってみようかと思ったら……selectionが取得できないではありませんか!

「そんなバカな」と思いつつ、いろいろ試してみたら「selected text」というプロパティを発見。ここから選択中のテキストを取得できました。
(more…)

2009/01/19 変数やサブルーチン名称に日本語を使用する

変数とサブルーチン名称、およびレコードの属性名については、前後をパーティカルバー(パイプ)記号で囲むことで、日本語の文字列が使えます。
(more…)

2009/01/17 CaminoでBookmarkを操作するテスト(駄目)

ニュースでCaminoのAppleScriptサポートが強化されたとか、ブックマークを編集できるとかいった記事を読んだ記憶があるのですが、とても強化されたとは思えない内容です。

一応、AppleScript用語辞書にいくつかの用語が載っているのですが、そのままではオブジェクト構造をたどることができません。アプリケーションのプロパティから、用語辞書に載っていないオブジェクトを多数発見し、格闘のすえに各要素のツリーをたどってはみたものの……新たに要素を追加することはついにできませんでした。
(more…)

2009/01/17 Caminoで新規ウインドウで指定URLをオープン

間違ってもAppleScriptからコントロールしたいと思わないCamino。指定URLをオープンできますが、Open Locationとかいう「めちゃくちゃ間違った」命令でURLを指定します(普通は、open urlだと思うのですが)。
(more…)

2009/01/17 CaminoでWindow 1の情報を取得する

オープンソース系のアプリケーションでAppleScript対応のものは珍しいのですが、さすがCamino、Mac向けのカスタマイズの一環としてAppleScript対応機能が実装されています。
(more…)

2009/01/14 Excelで、現在のワークシートに貼り込まれている画像をデスクトップにPNG形式のファイルとして書き出す

Excel 2008で、現在のワークシートに貼り込んだ画像をデスクトップにPNG画像としてすべて書き出すAppleScriptです。Excel自体はAppleScriptの「save as picture」コマンドの書き出しフォーマットオプションとしてPNG、BMP、GIF、JPEG、PDFを指定できるようになっています。このため、PNG以外のお好きな形式で、(デスクトップ以外の)お好きな場所に書き出すように指定するとよいでしょう。
(more…)

2009/01/11 pdfinfoの結果からポイント表記の数値をmmに書き換える

xpdf-toolsに含まれるpdfinfoを使ってPDFの情報を取得したあとに、サイズがポイント表記になっているものをmmに書き換えるサブルーチンです。汎用性も見るべきポイントもありませんが、まーこんなもんでしょう。
(more…)

2009/01/10 Numbersで指定の表で降順ソート

Numbersの指定の表で降順ソートを行います。
(more…)

2009/01/10 Numbersで指定の表で昇順ソート

Numbersの指定の表で昇順ソートを行うAppleScriptです。操作してみて分るのは、1行目だけは対象外だということで……そういう仕様のアプリケーションのようです。
(more…)

2009/01/10 Finderの最前面のパスをTerminalで開く(強化ver5, Leopard対応)

Mac OS X 10.4の時代に作ったScriptが、10.5になって動かなくなっていたのに気付き、修正を行いました(以前のバージョンは、10.4であれば問題なく動きます)。
(more…)

2009/01/10 R.appのヘルプに入っていたサンプルに、ちょっとだけ手を加えた(日本語メッセージのテスト)

統計解析向けプログラミング言語「R言語」の実行環境、「R.app」がAppleScriptからのコントロールに対応しています。日本語のメッセージが表示できることを確認するために、ヘルプに入っていたサンプルにちょっとだけ手を加えてみました。
(more…)

2009/01/10 Excelに画像を配置

「画像を送ってください」とお願いをしたら、返信メールにExcelの書類が添付されてきて……開けてみたら画像が1枚、Excelの書類に貼り付けてあってアゴが外れそうになるほど驚いたことが………何度かあります。

なぜ、わざわざExcelの書類に貼り付けて送って来るのか……画像をそのまま送ればいいんじゃないのか? なぜ、ひと手間かけてExcelに画像を貼り付けて送るのか……何かのおまじないなのか? 画像が添付されているとスパムメールだと判断されるのか? 

とりあえず、そのような不思議な相手とメールのやりとりを行わなくてはならなくなった場合に備えて、指定フォルダに入っている画像をExcelのワークシートに貼り付けるAppleScriptを作ってみました。1つのシートに画像を1枚貼り付け、画像の枚数分だけそれを繰り返します。
(more…)

2009/01/08 Numbersで統合された選択セルを元にもどす

Numbersで、選択範囲内にある統合セルを元に戻します。選択範囲は、統合セルときっちり同じでなくても大丈夫です。
(more…)

2009/01/08 Numbersで選択範囲のセルを統合する

Numbersで、選択中の範囲のセルを1つのセルに統合するAppleScriptです。「selection range」からデータを取得できないかと試していたものの、さっぱりダメで……結局、こういうセル結合のために作られたオブジェクトではないかと納得しているものです。
(more…)

2009/01/08 pdfinfoを使ってPDFのページ数をかぞえる

PDFのページ数をかぞえるという基本的かつ重要な機能がAppleScriptから利用できないため、Preview.appの表示をGUI Scripting経由で取得するとかいったアクロバティックなScriptを書いたこともありましたが、そんな不確かなものを利用しなくてもすみそうです。

フリーで配布されている「xpdf-tools」をインストールすると利用できるようになる「pdfinfo」というツールを呼び出し、指定のPDFのページ数を取得するAppleScriptです。リンク先のxpdf-tools(Universal Binary)はMac OS X標準のインストーラーが提供されているため、インストールもきわめて容易に行えます。

本来、ページ数にとどまらず各種の有益な情報が取得できるため、それらすべてについてshellの実行結果からParseして、レコードにでもして返すようにするとさらに有益なサブルーチンになることでしょう。

Update 2017/02/01

macOS 10.10以降では普通の(スクリプトエディタで記述する)AppleScriptで直接Cocoaの機能が呼び出せるようになったため、サードパーティのツールを利用しなくても、PDFのページ数カウントやページごとの分解、パスワードの設定や解除などが可能になっています。

2016/09/20 連番JPEGファイルを読み込んで連結したPDFを作成(新規作成)
2016/07/27 PDFをページごとに分解してJPEGで保存する v2
2016/07/20 PDFを回転させて新規保存 v2
2016/07/17 PDFの最終ページのみ切り出して空白かどうかチェック
2016/04/19 Multi Page Tiffを読み込んで、PDFに変換する
2015/10/20 PDFの各種情報を取得する
2014/12/27 PDFをページごとに分解する

とくに、

2016/07/18 PDFの指定ページを削除

の中には指定のPDFのページ数をかぞえるサブルーチンを用意しており、macOS 10.10以降であれば手軽に処理できるようになっています。

スクリプト名:pdfinfoを使ってPDFのページ数をかぞえる
set aPDFfile to choose file of type com.adobe.pdf PDFのみ選択
set pRes to countPDFpageNum(aPDFfile) of me

pdfinfoを使ってPDFのページ数をかぞえる(Thanks! Philip Aker)
入手先:  http://users.phg-online.de/tk/MOSXS/xpdf-tools-3.dmg
on countPDFpageNum(aPDFfile)
  set aPDFposix to quoted form of POSIX path of aPDFfile
  
set aRes to do shell script (”/usr/local/bin/pdfinfo & aPDFposix)
  
  
本来取得できているPDFの全情報(例)  
  
  
(*
Title: T:\Inprocess\Elsevier\Dominus\FM.dvi
Subject: TeX output 2005.07.19:1926
Author: Ganesh Rao (Cepha Imaging INDIA) 4866 2001 Oct 23 13:15:14
Creator: DVIPSONE 2.2.6 http://www.YandY.com
Producer: Acrobat Distiller 5.0 (Windows)
CreationDate: Tue Jul 19 19:26:33 2005
ModDate: Tue Jul 19 19:26:33 2005
Tagged: no
Pages: 592
Encrypted: no
Page size: 708 x 1003 pts
File size: 2035407 bytes
Optimized: yes
PDF version: 1.3
*)
  
  
set aList to paragraphs of aRes
  
  
set bRes to “”
  
repeat with i in aList
    set j to contents of i
    
if j begins with Pages: then
      set bRes to repChar(j, Pages:“, “”) of me
    end if
  end repeat
  
try
    set cRes to bRes as number
  on error
    set cRes to 0
  end try
  
return cRes
  
end countPDFpageNum

Written By Philip Aker
文字置換ルーチン
on repChar(origText, targStr, repStr)
  set {txdl, AppleScript’s text item delimiters} to {AppleScript’s text item delimiters, targStr}
  
set temp to text items of origText
  
set AppleScript’s text item delimiters to repStr
  
set res to temp as text
  
set AppleScript’s text item delimiters to txdl
  
return res
end repChar

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/01/08 スクリプトエディタがオープンしているウィンドウのうち、指定名称のものを最前面に出す

スクリプトエディタでオープンしているAppleScriptのうち、指定名称のものを最前面に出します。ただ、このAppleScriptをスクリプトエディタ上で実行すると、スクリプトエディタの制御がうまく行きません。

実際には、Script Menuに入れて実行するか……Script Debugger上から実行することになります。GUI Scriptingを使用しているため、システム環境設定のユニバーサルアクセスで「補助装置にアクセスできるようにする」チェックボックスをオンにしておく必要があります。

スクリプトの内容を書式つきのリッチテキストで取得したかったので、特定のScriptのウィンドウを最前面に出す必要があったのでした。本来の目的(Mindjet MindManagerのノート欄に書式つきでAppleScriptのリストを入れたかった)は果たせませんでしたが……残骸のサブルーチンはきっとどこかで何か別の用途で役立つことでしょう。

(more…)