ツリー状のデータ構造をNSBrowserで表示するためのデータ抽出を行うAppleScriptです。
NSBrowserでツリー構造のデータを抽出しつつ表示するインタフェースを作るために、その基盤部分となるツリー状のデータを絞り込むプログラムを書いてみました。
やりたいことをそのまま実装してみたもので、著しくどこかに同じ機能を持つものが存在していそうな気がします(NSTreeControllerとか)。
やりたいことは、現在のツリー構造上のアドレスをもとに、2次元配列で与えたツリー構造データ(データそのものがツリー構造なのではなくて、「アドレス情報」文字列がツリー構造になっている普通の2次元配列)から、
{{"1", "File"}, {"2", "Edit"}, {"3", "View"}, {"4", "Search"}, {"1.1", "New Script"}, {"1.2", "New Script From Template"}, {"1.3", "New Script Tab"}, {"1.4", "New Script Tab From Template"}, {"1.5", "Open..."}, {"1.6", "Open Quickly"}, {"1.6.1", "aaaaaaa"}, {"1.6.2", "bbbbbb"}, {"1.6.3", "ccccccc"}, {"1.6.4", "ddddddd"}, {"1.6.5", "eeeeeeeee"}}
該当するツリーアドレスの同一ブランチに存在するデータ一覧を取得するだけなので(日本語でも表現できているかどうか怪しい)、そこの部分だけ実装してテストしてみたものです。
Query List Item | Result |
---|---|
{} | –> {"File", "Edit", "View", "Search"} |
{1} | –> {"New Script", "New Script From Template", "New Script Tab", "New Script Tab From Template", "Open…", "Open Quickly"} |
{1,6} | –> {"aaaaaaa", "bbbbbb", "ccccccc", "ddddddd", "eeeeeeeee"} |
よその処理系で見かけた処理なので、広く普遍的に存在していそうな処理ではあるものの、探してみるとなかなかお手軽なものが見つからなかったので、自分で作った次第です。
AppleScript名:treeVar.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/11/24 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property NSArray : a reference to current application’s NSArray property NSPredicate : a reference to current application’s NSPredicate set treeKeyList to {{"1", "File"}, {"2", "Edit"}, {"3", "View"}, {"4", "Search"}, {"1.1", "New Script"}, {"1.2", "New Script From Template"}, {"1.3", "New Script Tab"}, {"1.4", "New Script Tab From Template"}, {"1.5", "Open…"}, {"1.6", "Open Quickly"}, {"1.6.1", "aaaaaaa"}, {"1.6.2", "bbbbbb"}, {"1.6.3", "ccccccc"}, {"1.6.4", "ddddddd"}, {"1.6.5", "eeeeeeeee"}} set keyList to {1} set tRes to filterTreeKeyArrayByAddr(treeKeyList, keyList) of me –> {"New Script", "New Script From Template", "New Script Tab", "New Script Tab From Template", "Open…", "Open Quickly"} set keyList to {1, 6} set tRes to filterTreeKeyArrayByAddr(treeKeyList, keyList) of me –> {"aaaaaaa", "bbbbbb", "ccccccc", "ddddddd", "eeeeeeeee"} on filterTreeKeyArrayByAddr(aList, keyList) set queryStr to "" repeat with i in keyList set queryStr to queryStr & (contents of i) & "." end repeat set queryStr to queryStr & "[0-99]" set predicatesStr to "SELF[0] MATCHES ’" & queryStr & "’" set anArray to NSArray’s arrayWithArray:aList set aPred to NSPredicate’s predicateWithFormat:predicatesStr –"SELF[0] MATCHES ’1.[0-99]’" set bRes to (anArray’s filteredArrayUsingPredicate:aPred) set bList to {} repeat with i in (bRes as list) set aTmp to last item of i set the end of bList to aTmp end repeat return bList end filterTreeKeyArrayByAddr |
More from my site
(Visited 196 times, 1 visits today)