Archive for 11月, 2010

2010/11/28 数字桁漢字まじり日本語的数値表現テキストをparseする

「3億4000万」とか「5那由他20京1兆301」のような桁表現に日本語固有の日本語的数値表現を行うテキストで、数字部分と漢字部分を分離してリストで返すAppleScriptです。

日本語的数値表現エンコーダー/デコーダーをAppleScriptで作っておいたのですが、桁が大きくなったときにバグが発生することが判明。そのデバッグの際に作り足したものです。

別に、日本語的数値表現を分離するだけではなく、数字とそれ以外から構成される文字列を文字種別で区切ってリストで返すといった一般的な用途にも使えます。

スクリプト名:数字桁漢字まじり日本語的数値表現テキストをparseする
set aStr to "9無量大数9997極9297載6866正6832砂1967溝1163壌4317丈7692垓2493京8466兆7286億6441万8111"
set aRes to parseNumKanji(aStr) of me
–> {"9", "無量大数", "9997", "極", "9297", "載", "6866", "正", "6832", "砂", "1967", "溝", "1163", "壌", "4317", "丈", "7692", "垓", "2493", "京", "8466", "兆", "7286", "億", "6441", "万", "8111"}

on parseNumKanji(aStr)
  set nFlag to false
  
set aList to characters of aStr
  
set nList to {}
  
  
set aFirst to contents of first item of aList
  
set aList to rest of aList
  
set nFlag to detectOutNumChar(aFirst) of me
  
  
set aStack to aFirst
  
  
repeat with i in aList
    set j to contents of i
    
set aRes to detectOutNumChar(j) of me
    
    
if not aRes = nFlag then
      set the end of nList to aStack
      
set aStack to j
      
set nFlag to not nFlag
    else
      set aStack to aStack & j
    end if
  end repeat
  
  
if aStack is not equal to "" then
    set the end of nList to aStack
  end if
  
  
return nList
end parseNumKanji

–数字範囲外の文字があるかどうかをテストする
–数字の文字以外のものが入っていたらfalse
on detectOutNumChar(testText)
  –ANK文字列(大文字小文字は問わない)
  
set ankChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."}
  
  
set _testChar to testText as Unicode text
  
  
ignoring case
    repeat with i in _testChar
      set j to contents of i
      
if j is not in ankChar then
        return false
      end if
    end repeat
  end ignoring
  
  
return true
end detectOutNumChar

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

2010/11/26 テキストエディットの文章のうち赤くマークされた行をカウントする

テキストエディットの文章のうち、赤く(R=65535)マークされた行をカウントするAppleScriptです。

ted01.jpg

AppleScriptObjC(ASOC)のサンプルプログラムを作成し、そのうちASOC由来のコードと通常のAppleScriptのコードを個別にカウントするため、ASOCのコードに赤く色を塗っておいてカウントさせてみました。

スクリプト名:TextEditの文章のうち赤くマークされた行をカウントする

set rNum to 0

tell application “TextEdit”
  tell text of document 1
    set pCount to (count paragraphs)
    
    
repeat with i from 1 to pCount
      set aCol to color of paragraph i
      
if aCol = {65535, 0, 0} then –{r, g, b}
        set rNum to rNum + 1
      end if
    end repeat
    
  end tell
end tell

return {pCount, rNum}

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

2010/11/24 AppleScriptObjCでプログラムを実際に組んでみると、通常のAppleScriptのコードが大部分

ここのところ、AppleScriptObjCでいろいろプログラムを組んだり、プログラムを構成するための小さなテストプログラムを試したりしています。

AppleScriptでGUIプログラムを組むAppleScript Studioの環境とAppleScriptObjCの環境は全然違うものですが、どちらでも言えるのは、「通常のAppleScriptのコード部分のほうが、GUIや環境設定をいじくるコード部分よりもはるかに多い」ということです。

実際に、AppleScriptObjCの942行のプログラムを組んでみました。これには、TableViewやDrawer、複数のWindowなどが含まれ、環境設定内容を保存したり、CSVファイルの読み書き、ネイティブ形式ファイルの読み書き、LAN上の他のマシンのアプリケーションをコントロールするといった機能などを実装してみました。時間の制約はあったものの、ひととおりの機能を備えているものです。

そのソースコードを評価して、AppleScriptObjCのコードと、通常のAppleScriptのコードの分量を比較してみました。

asoc_graph.jpg

だいたい、AppleScriptObjCのコードは1割程度。内容やアプローチにもよると思うのですが、AppleScript Studioライクな書き方をするかぎりでは、こんな感じです。

ASOCのサンプルプロジェクトとして公開されているものの中には、まだ書き慣れていないためか冗長すぎるコードが多かったり、必要以上にASOCのコードばかり(Objective-Cから書き換えた?)入っているものも見られます。

ただ、stringを扱うのに毎回NSStringを使ったり、list型変数でなくわざわざNSArrayを使う必要というのは少ないわけで……私が組んでみたプロジェクトでもASOCのコードは1割程度。このぐらいなら、ありもののサンプルからコピー&ペーストで持ってこられる程度の分量です。

2010/11/23 AppleScriptObjCでNSTextFieldの表示/非表示きりかえ

AppleScript Studioで、各GUI部品を表示したり隠したりするのは、実に「よくある処理」でした。ただ、それをAppleScriptObjCで再現しようとすると、簡単そうな割に再現しづらい状況。

先日も、AppleScriptObjCでプログラムを組んでいたところ、Text Fieldの表示/非表示をいじくりたくなったのですが……いくつか並べられたText Fieldをまとめて隠そうとする方法が見つからず、面倒くさかったのでtab viewにまとめて突っ込んで、tabレスのtabにして(tabが表示されない)、表示tab view itemを切り替えることでまとめて表示/非表示を制御してしまいました。

時間のあるときに、「実際のところはどうやるんだろう?」と思い出し、検索エンジンで調べてみました。Scripter連中がObjective-C系のMLやフォーラムで質問を投稿している様子を見つけましたが、対する回答は……

 「Window上から削除しちゃえばいいじゃん」

のような「それだと明らかに再表示は無理ですよね〜」という返事だったりして、納得しづらいものがありました。

しばらくMLの過去ログを中心に調べていたものの、どうもやり方が見当たらなかったので、根本的にやり方を変更してみたらあっさり実現。

hidetf.jpg

TextFieldのvisibilityをshared user defaultsにbindして、その環境設定値を書き換える(falseで表示、trueで非表示)ようにしてみました。

hidetf2.jpg

ASOCはサンプルや文献が少ないので、本当にこれでいいのか分かりませんが、動いているのでいいんじゃないでしょうか。

ちなみに、shared user defaultsの環境設定値の書き換えはedama2さんからコメントで教えていただいたあと、実際にプロジェクトを送っていただいたものからピックアップしました(直裁的な表現でいえばコピペですね)。

Xcodeのエディタの背景色を白から薄緑に変更してみたら、AppleScriptObjCの「変数ばっかり」なプログラムに対する抵抗感が薄れました(Allan CraigのBlogで発見)。本当は背景色を黒にするともっとよいのですが、背景色が白から変更できないAppleScriptエディタ上でも見えるためにはこのぐらいの色がよいではないかと思っています。

→ プロジェクトのダウンロード

2010/11/21 MacJournal 5.2.6でBlogへの投稿系AppleScriptコマンドを強化

macjournal_icon.jpgDan Schimpf氏が開発している職人気質のメモ集積ソフトウェア「MacJournal」。

このMacJournalバージョン5.2.6のβ版を調べたところ、AppleScript用語辞書が変更され、コマンドが増えていることを確認しました。

macjournal1.jpg

exportコマンドのオプションが増加

macjournal2.jpg

新設の「send text to blog」コマンド

あいにく、Blogは直接Webブラウザ上から更新しているため、MacJournalから更新をかけることはないのですが、こうしたコマンドはたしかに存在していることが期待されるものですね。

2010/11/18 AppleScriptObjCでリモート制御

AppleScriptObjCで、LAN上の他のマシン上でコマンドを実行するサンプルです。Xcode 3.2.4+Mac OS X 10.6.5で作成しました。

AppleScriptObjCのプログラム内にeppc://プロトコルで他のマシンを指定しても、「マシンが見つからない」というエラーになってしまいます。

そこで考えられる対処は2つ。1つは、eppcで他のマシンと通信するAppleScriptアプレットをAppleScriptObjCプログラムのバンドル内に格納しておいて起動し、起動して迂回通信する方法。

もう1つが、リモート制御を行うAppleScriptをテキストに書き出し、osascriptコマンドでそのテキストを実行するという方法(もちろん、実行後にファイルは削除)。

前者は、処理の自由度がいまひとつであるため、後者を選択してみました。

remoteasoc.jpg

→ remoteasoc.zip

まずは、準備を。

リモートマシン(動かされるマシン)側では、システム環境設定の「共有」で「リモートアップルイベント」にチェックを入れておきます。次に、このプログラムをコントロールする側のMacで起動。「Select」ボタンを押してリモートマシンを選択し、そのマシンに登録してあるユーザー名とパスワードを入力し、「Remote Execution」ボタンを押します。

ボタンを押すと、リモートマシンでbeep音が鳴ります。本サンプルはそれだけの内容ですが、より高度な処理を行うための基礎になるものです。

ちなみに、すべてのNSTextFieldのcontentsをShared User Defaultsにバインドしてあり、一度入力すると次回起動時にもそのまま維持されるはずですが、eppc://と書いたURLは保存されません。どういう仕様なんだか、、、、セキュリティ確保のためなんでしょうか。

2010/11/18 AppleScriptObjCでハマったこと

Appleからはほとんどドキュメントもサンプルも出てきていないので、実際にどう書いたらよいのかさっぱり分らなかったAppleScriptObjCですが、海外で電子媒体(PDF)の参考書が出てきたため、ようやく書き方や使い方が分ってきた今日このごろ。

book2.jpg
・Hamish Sanderson「Learn AppleScript」/Chapter 30「Creating Cocoa Applications with AppleScriptObjC」(50ページ、25ユーロ(だったか))
サンプルを多数掲載するのではなく、動作原理についてやさしく詳しく解説している入門書的な内容。図版がグレースケールで掲載されていることぐらいしか本書の入門書としての欠点が見つからない。かなり分りやすい。

book1.jpg
・Shane Stanley「AppleScriptObjC Explored」(132ページ、$US29.95)
サンプルプロジェクトが豊富なので、さわって動かして学習できる。ただし、細かい動作原理についてはあまり詳しく解説していないので、プログラムを組めるようにはなるものの疑問は残る。

……これらを参考に、AppleScriptObjCのプログラムを組めるようになってきたものの、やはり実戦で使ってみると分らないこともたくさんあります(MacScripterのフォーラムが情報源)。

これまでにハマったポイントをいくつかご紹介しましょう。AppleScript Studioのつもりで扱うと、いろいろとハマるポイントが……

■ウィンドウをクローズして再オープンしようとしたら固まる

アプリケーションのメインウィンドウ上のボタンをクリックして環境設定用のサブウインドウを表示。
環境設定ウィンドウを一度クローズして、再度オープンすると…………クローズボタンが押されたままの状態で固まっており、それ以降の操作を受け付けない。終了させるしかない。
いろいろ検索しまくってみたら、Interface Builder上で「Release When Closed」のチェックを「外す」とうまく動くことが分った。これは、一体どういうことなんだろう?

■eppcでLAN上のマシンをコントロールしようとしたらエラー

LAN上の他のMacをeppc://で指定してメッセージを送ってコントロールしようとしたら、アドレスが分らないと言われた。
AppleScriptエディタ上で実行する分には問題ない。

エラー回避のため、リモートマシンに命令する部分のAppleScriptだけテキストファイルに書き出して、osascriptコマンドでシェル経由で間接実行するようにしてみた。

この回避策はうまく行ったが、これがAppleScriptObjCの処理系のバグなのか、それともプロジェクト中のInfo.plistでeppcのURLプロトコルを宣言してあげないと通信がブロックされるのか、実際に試してみないとなんともいえない。ためしに、Info.plistにeppcのURLプロトコルを書いてみたが、状況に変化はなかった。

■「eppc://」のURLをshared user defautsに保存しようとして拒否された

LAN上のMacをコントロールするアプリケーションを作っていて、LAN上からマシンを選択するようにしてみた。

 choose URL showing {Remote applications}

でLAN上のプログラムリンクがオンになっているマシンを検索して、それをNSTextFieldにstringに変換しつつストア。
NSTextFieldの内容をShared User Defaultsにバインドして、そのまま初期設定ファイルに保存させようとしたら……ダメ。

  eppc://192.168.0.80:3031

のような(ただの)URLの文字列なのに、どうやっても保存できない。

さんざん試してみたところ、プロトコルを示す「eppc://」と、ポート番号を示す「:3031」を削除しないと保存できなかった。
AppleScript Studioではやりたい放題だったが、AppleScriptObjCではMac OS Xの機能の新たな一面を知ることになった。
っていうか、なんか微妙にめんどくさい。

ただ、出来上がったアプリケーションは「これ、本当にAppleScriptで作ってあるの?」という凝った動きができるし、GUIを操作する部分がやけに高速。そのうち、Mac OS X上でAppleScript Studioのアプリケーションが動かなくなるであろうことを考えると(Snow Leopard上では動く)、AppleScriptObjCへの乗り換えを次期OS「Lion」までに行っておくのがよいのではないでしょうか。

2010/11/14 iLife 11のAppleScript用語辞書の変更点

iLife 11が発売されてしばらくたちますが、この手のアプリケーションはリリース直後に飛びつかないのがセオリー。どうせ、Apple側ではユーザーがため込んだ「本気」の写真ライブラリなどでテストしているはずがないので、ライブラリの移行ミスが発生するのがいつものこと(とくにiPhoto)……アップデータが出て問題が解消されるのを待っていました。

iLifeアプリケーションスイートでは、iMovie以外はすべてAppleScriptに対応しています。ただし、対応度はアプリケーションによってまちまちです。

■GarageBand 6.0
AppleScript用語辞書変更なし。対応度は低く、GarageBandをAppleScriptからコントロールしてもできることがほとんどない(Podcastの作成関連でいろいろできると自動処理させる意義が出てくるのですが)。

■iDVD 7.1
機能据置きのはずのiDVDですが、バージョン番号が微妙に(7.0.3→7.1)あがっており、AppleScript用語辞書の内容も変更になっています。ほとんどが誤差程度のものですが、1つだけ「movie」オブジェクトのプロパティに「marimbaSlideshowFilePath」というものが増えています。

marimbaSlideshowFilePath Unicode text — the marimbaSlideshowFilePath of this movie

とあるので、パスをUnicode Textで指定するもののようですが、テストは行っていません。iDVDには使えそうな用語が多数用意されているのですが、具体的にそれらを使って自動処理させるような「用途」が逆に見あたりません。目視で確認しないとまずそうな機能ばかりなので、自動で本当に処理してよいのか、少々疑問です。

■iPhoto 9.1
iLife 11の中では随一のAppleScript対応度のiPhoto。アップデートして、ライブラリが移行できないというバグが解消され、カレンダーの注文ができるようになったiPhoto 9.1を調べてみました。

iPhotoもAppleScript用語辞書の内容変更はとくにありませんでした。用語辞書の記述ミスが直ったり、誤差程度の記述が変更された程度です。

総評としては……Apertureで導入されたAppleScript用語辞書内のサンプルAppleScriptが、このiLife 11でも導入されるのではないかと期待していたのですが、それは実現していませんでした。少々期待はずれです。

AppleScriptの用例が最初から辞書の中に入っていることの意義は大きいと思うものですが、Appleのエンジニア(とくに、AppleScriptエンジニアリングチーム)が書くAppleScriptは原理主義的すぎて自然言語っぽい記述になる傾向があり(itとかthatとか使いまくるし、theを入れて読みやすくしたがるものの、そんなもん入れられても困ります)……冗長すぎて、ユーザーの理解をさまたげる傾向があります。

Appleの連中も、もっと「プログラムっぽい」簡潔な記法で書くようにしてほしいものです。

2010/11/13 文字入力ダイアログ(伏せ字表示)

display dialogで文字入力を求めるさい、パスワードなどの「そのまま表示されては困る」ようなものを入力させる際に、入力内容をすべて「・」に置き換えて伏せ字表示する記述例です。

dialog_secur.jpg

「with hidden answer」はずいぶん昔に追加されたオプションですが、どうもご存じでない方が多いようなので。

この伏せ字表示の入力ダイアログからは、コピー&ペーストでその内容を取り出すことはできませんし、GUI Scripting経由で入力内容を取り出すこともできません。Mac OS Xの仕様上そうなっているわけですが、そんなことができたらセキュリティホールになってしまうため、これらの操作が「できない」のが正しい挙動です。

スクリプト名:文字入力ダイアログ(伏せ字表示)
display dialog “パスワードを入力してね” default answer “” buttons {“OK”} default button 1 with hidden answer

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

2010/11/13 iTunes 10.1アップデート、AppleScript用語辞書に変更なし

ソフトウェア・アップデート経由でiTunes 10.1アップデートがリリースされました。早速、AppleScript用語辞書をHTMLに書き出して前バージョンとのdiffを取ってみたところ、とくに変更はありませんでした。

最近では、iTunes 7.6.2と9.1で変更(追加)があったぐらいで、用語辞書にはほとんど変更はありません。

2010/11/12 ひらがなカタカナ変換

与えられた文字列のうち、ひらがなのものをカタカナに変換するAppleScriptです。

苦難のすえ、AppleScriptObjCでようやくいろいろプログラムが組めるようになってきた今日このごろ、日本語のカタカナひらがな変換APIらしきものは見つけたものの、使い方がめんどうくさそうだったので、自前で書いてしまったものです。

大量のデータ処理を行わなければ、この程度で十分でしょう。

code1.jpg

スクリプト名:ひらがなカタカナ変換
set aHiraganaStr to “漢字とひらがなでござる”

set aRes to convHiraganaToKatakana(aHiraganaStr) of me
–> “漢字トヒラガナデゴザル”

on convHiraganaToKatakana(anUnicodeText)
  set hList to characters of anUnicodeText
  
  
set newText to “”
  
repeat with i in hList
    set anID to id of i
    
if checkHiragana(anID) of me then
      set b to string id (anID + 96)
    else
      set b to i as Unicode text
    end if
    
set newText to newText & b
  end repeat
end convHiraganaToKatakana

–string idを渡すとひらがなチェックを行う
on checkHiragana(anID)
  return (anID > 12352 and anID < 12448)
end checkHiragana

–string idを渡すとカタカナチェックを行う
on checkKatakana(anID)
  return (anID > 12448 and anID < 12544)
end checkKatakana

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

2010/11/10 選択中のtrackのうち再生済みのものを削除する

iTunesで選択中のtrackのうち、再生済みのものを削除するAppleScriptです。

Podcastで、ダウンロード先が変更になって……それを知らずにすべてのエピソードをダウンロードしてしまった場合、すべてのエピソードが2つ存在してしまいます。

itunes.jpg

こういうケースでは、旧ダウンロード先から落としてきたエピソード(再生ずみ)を削除し、新ダウンロード先のtrackを残しておくことになるわけで……そのために、再生ずみのtrackのみ削除するAppleScriptを作成したものです。

iTunesといえば、Amazonダウンローダー内でAppleScriptによりtrackの追加を行っているものの、ライブラリ名を英語で書いてしまったため日本語環境でうまく動いていないという悲劇がそこかしこで報告されています。日本語環境できちんと動作検証しないでリリースしてしまったAmazonに合掌(iTunes上でのオブジェクト名を日本語環境に合わせて書き直さないといけない、という間抜けな仕様を作ったAppleにも合掌)。

amazon_bug.jpg

スクリプト名:選択中のtrackのうち再生済みのものを削除する
tell application “iTunes”
  set aList to selection
  
  
repeat with i in aList
    set aP to unplayed of i
    
if aP = false then
      ignoring application responses
        delete i
      end ignoring
    end if
  end repeat
  
end tell

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

2010/11/05 フォント情報をSystem Profiler経由で取得する

動作が不安定なうえにバグの多いFont Bookを使わず、/usr/sbin/System_Profilerを呼び出して、フォント関連の情報のみをXML形式で書き出し、System Events経由で書き出したXML(plist)ファイルをparseしてレコード×フォント分のリストを取得するAppleScriptです。

OS側が認識しているフォントの情報については、このSystem_Profilerで安全に取得することができます。ただし、あくまで情報の取得だけです。

処理速度については、インストールされているフォントの数に比例するため、遅いとも速いともいいがたいところですが、安全かつ確実に情報が取れるところがメリットです。

なお、本AppleScriptの末尾でリストを表示させるようにしていますが、このようにして処理結果を確認しようとすると、実際の処理時間にくわえてAppleScriptエディタで結果を表示するために前処理する時間が余計にかかるため、とりあえず適当なファイルに書き出しておいて、あとで内容を確認するのがよいでしょう。

スクリプト名:フォント情報をSystem Profiler経由で取得する
global pItems, pItems_r, fStore, fStore_r

–フォント情報をSystem_Profiler経由でXML形式(plist)で取得する
set aPLIST to do shell script “System_Profiler SPFontsDataType -xml”

–plistをファイルに書き出す
set aTmp to (path to temporary items from system domain) as string
set aFileName to do shell script “uuidgen”
set aTmpPath to aTmp & aFileName & “.plist”
write_to_file_UTF8(aPLIST, aTmpPath, false) of me

–書き出したplistファイルを読み込む
tell application “System Events”
  set plif to property list file aTmpPath
end tell

tell application “System Events”
  
  
set pList to every property list item of plif
  
set ppList to every property list item of contents of first item of pList
  
  
set pItems to value of every property list item of first item of ppList
  
set pItems_r to a reference to pItems
  
  
set fStore to {}
  
set fStore_r to a reference to fStore
  
  
repeat with i in pItems
    
    
set aPitem to contents of i
    
set the end of fStore_r to aPitem
    
  end repeat
end tell

fStore

–UTF8形式でファイル書き込み
on write_to_file_UTF8(this_data, target_file, append_data)
  try
    set the target_file to the target_file as text
    
set the open_target_file to
      open for access file target_file with write permission
    if append_data is false then
      set eof of the open_target_file to 0
    write this_data to the open_target_file as «class utf8» starting at eof
    
close access the open_target_file
    
return true
  on error
    try
      close access file target_file
    end try
    
return false
  end try
end write_to_file_UTF8

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

2010/11/03 Font Bookで選択中のフォントを削除(Font Containerなしフォント、および複数選択対応)

Font Bookで選択中のフォントを削除するAppleScriptです。

数千のフォントを……OpenType、CID、OCF、Type1、TrueType、Biblosフォントなど何種類も、くる日もくる日も夜通しAppleScriptで処理したところ……Font ContainerのないフォントやFont Bookをクラッシュさせる毒フォントなど、予想だにせぬ事態の連続。

1つのファイルで複数のフォントを格納しているスーツケースなど「そういえば昔そんなものが!」という歴史的なトラップなど、数々の試練を超えて強化された、本AppleScript。

AppleScriptでFont Bookに登録するぐらいは雑作もないですが、一時的に登録したフォントを削除するのが大変でした。

例によってMac OS X 10.5用であり、Mac OS X 10.6上ではきちんと動作しません。10.6のFont Bookは(調べてみたら)異様に出来が悪いので、Appleにバグレポートしておくつもりです。10.6代で修正される可能性は低そうですが、せめて10.7に持ち越さないでほしいと願うばかりです。

スクリプト名:Font Bookで選択中のフォントを削除(Font Containerなしフォント、および複数選択対応)
tell application "Font Book"
  set aa to selection
end tell

repeat with i in aa
  
  
set errF to false
  
  
try
    tell application "Font Book"
      set anID to ID of i
    end tell
  end try
  
  
–Font IDを取得できたかどうか、エラーチェック
  
try
    copy anID to tmpID
  on error
    set errF to true
  end try
  
  
–Font IDを取得できた場合にのみフォント削除を実行
  
if errF = false then
    set delRes to deleteFontByFontID(anID) of me
  end if
end repeat

tell application "Finder"
  –Fontにロックがかかって削除しきれない場合もあるのでエラートラップで備える
  
try
    empty trash
  end try
end tell

–Font BookからIDで指定したフォントを削除
on deleteFontByFontID(aFontID)
  tell application "Font Book"
    –フォントをIDで指定
    
set aFontList to (every typeface whose ID = aFontID)
    
if aFontList = {} then return false
    
    
repeat with aFont in aFontList
      
      
try
        set fConL to font container of aFont
      on error
        set fConL to ""
      end try
      
      
      
repeat with i in fConL
        set fCon to contents of i
        
try
          remove fCon
        on error
          –return false
        end try
      end repeat
      
    end repeat
  end tell
  
  
return true
end deleteFontByFontID

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