AppleScript名:指定文字列前後から空白や改行を削除 |
— Created 2018-01-29 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to " aaaaaa " set aString to current application’s NSString’s stringWithString:aStrset bStr to (aString’s stringByTrimmingCharactersInSet:(current application’s NSCharacterSet’s whitespaceAndNewlineCharacterSet())) return bStr as string –> "aaaaaa" |
カテゴリー: Text
自然言語による相対日付指定v15
AppleScript名:自然言語による相対日付指定v15 |
use AppleScript version "2.5" use scripting additions use framework "Foundation" –v15 ASOCの部品に入れ替え、macOS 10.11以降用にハンドラの型強制オプションをつけた –v14 10.8の上で動作するように書き換えた –The Calendar Scripting Module global d3List –3か月カレンダーの格納変数 global d4List –3か月カレンダーBの格納変数(当月の情報しか日付は入っていないカレンダー) global weekCounter — 今日が3か月カレンダーの何週目にあたるか set aDate to calcDate("今日", "") of me log {"今日:" & aDate as text} set aDate to calcDate("先々週", "水曜日") of me log {"先々週の水曜日:" & aDate as text} set aDate to calcDate("来週", "金曜") of me log {"来週の金曜日:" & aDate as text} on calcDate(param1 as string, param2 as string) –相対日付指定パラメータテーブル –data sample: {{"今日", "きょう"}, 0, "date"} –data format:{{"keyword_1", "keyword_2"…."keyword_n"}, vector, "class_of_this_keyword"} –Vector量をその場で(ユーザー環境に応じて)算出もしくは取得する必要がある場合には「999」を設定しておく set dDat to {{{"来年"}, 1, "year"}, {{"今年"}, 0, "year"}, {{"去年"}, -1, "year"}, {{"再来年"}, 2, "year"}, {{"今週"}, 0, "week"}, {{"先週"}, -1, "week"}, {{"先々週"}, -2, "week"}, {{"来週"}, 1, "week"}, {{"再来週"}, 2, "week"}, {{"今日", "きょう"}, 0, "date"}, {{"明日", "あした"}, 1, "date"}, {{"明後日", "あさって"}, 2, "date"}, {{"明々後日", "しあさって"}, 3, "date"}, {{"昨日", "きのう"}, -1, "date"}, {{"一昨日", "おととい"}, -2, "date"}, {{"一昨々日", "さきおととい"}, -3, "date"}, {{"次", "今度", "こんど", "つぎ"}, 1, "variable"}, {{"前"}, -1, "variable"}} –曜日指定パラメータ set wDat to {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "にちようび", "げつようび", "かようび", "すいようび", "もくようび", "きんようび", "どようび", "にちよう", "げつよう", "かよう", "すいよう", "もくよう", "きんよう", "どよう"} –3か月カレンダーを作成 makeCalendar() of me –今日の日付を保持 set todayDate to current date –指定週の計算用ワーク変数 set targetWeek to 0 –指定月の計算用ワーク変数 set targetMonth to (month of todayDate) as number set targetYear to year of todayDate set targetDate to day of todayDate set aItem to "" repeat with i in dDat if param1 is in item 1 of i then copy i to aItem exit repeat end if end repeat if (item 3 of aItem) is "date" then log "Hit date class parameter" –dateレベルのパラメータの場合 set retDate to todayDate + (item 2 of aItem) * days set time of retDate to 0 return retDate –「時刻を問わない」ことを示す表現として、00時を指定してdate型を返す else if item 3 of aItem is "week" then log "hit week class parameter" –weekレベルのパラメータの場合 set targetWeek to weekCounter + (item 2 of aItem) if param2 is in wDat then –パラメータが「何曜日か?」を得る set tmpD to 1 repeat with j in wDat if param2 is contents of j then exit repeat set tmpD to tmpD + 1 end repeat if tmpD > 7 then set tmpD to tmpD mod 7 end if –今月か? if item tmpD of item targetWeek of d4List is 0 then –今月ではない場合 set tmp2 to item tmpD of item targetWeek of d3List if ((item 2 of aItem) < 0) then –今月ではなく、パラメータがマイナスの週計算を行う場合 –先月に入ったので月を減らす set targetMonth to targetMonth – 1 set tmp4 to (targetYear & "/" & targetMonth & "/" & tmp2) as string set ret2Date to date (tmp4 & " 0:00:00") return ret2Date else –来月として処理 set targetMonth to targetMonth + 1 set tmp4 to (targetYear & "/" & targetMonth & "/" & tmp2) as string set ret2Date to date (tmp4 & " 0:00:00") return ret2Date end if else –今月の場合の処理 set tmp2 to item tmpD of item targetWeek of d3List set tmp3 to day of todayDate set tmp4 to (targetYear & "/" & targetMonth & "/" & tmp2) as string set ret2Date to date (tmp4 & " 0:00:00") return ret2Date end if else –ここはエラーを返すべし("来週","")といったパターンになるので —-あるいは、「○○日」といったダイレクトパラメータの処理を行う –日付ダイレクトパラメータの処理 error "日付を特定するためのパラメータがありません" (* ただし、このように決め打ちでエラーメッセージを返すような実装は暫定仕様。 何が欠けているかをGUIフィードバックするのが最終的な実装 *) end if else if item 3 of aItem is "month" then –monthレベルのパラメータの場合 log "Hit month class parameter" else if item 3 of aItem is "year" then –yearレベルのパラメータの場合 log "Hit year class parameter" end if return "no hit" end calcDate –相対日付計算用の3か月カレンダーを作成する on makeCalendar() set aToday to current date –とりあえず、当月の情報を収集する set y1 to getYear(aToday) of me set m1 to getMonth(aToday) of me set d1 to getDate(aToday) of me set dy1 to getDay(aToday) of me set mlen1 to getMlen(y1, m1) of me set mXDay to getDay(aToday) of me –今日の曜日 –前月の情報を組み立てる if m1 is not equal to 1 then –2〜12月の場合 set y0 to y1 set m0 to m1 – 1 else –1月の場合 set y0 to y1 – 1 set m0 to 12 end if –前月の月の長さ set mLen0 to getMlen(y0, m0) of me –前月のみ開始日の曜日を求めておく必要がある(3か月カレンダーを作るため) set m0Date to (y0 & "/" & m0 & "/1 0:00:00") as text set m0Date to date m0Date set m0Day to getDay(m0Date) of me –1日の曜日 –翌月の情報を組み立てる if m1 is not equal to 12 then –1〜11月の場合 set y2 to y1 set m2 to m1 + 1 else –12月の場合 set y2 to y1 + 1 set m2 to 1 end if –翌月の月の長さ set mLen2 to getMlen(y2, m2) of me –3か月カレンダーの格納変数 set d3List to {} –3か月カレンダーBの格納変数(当月の情報しか日付は入っていないカレンダー) set d4List to {} set gapList to {0, 0, 0, 0, 0, 0, 0} set w1temp to items 1 thru (m0Day) of gapList set w2temp to items 1 thru (m0Day) of gapList set dayCounter to 1 –最初の1週目の要素を組み立てる repeat with i from m0Day to 7 set the end of w1temp to dayCounter set the end of w2temp to 0 set dayCounter to dayCounter + 1 end repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} –前月の通常処理 repeat repeat with i from 1 to 7 set the end of w1temp to dayCounter set the end of w2temp to 0 set dayCounter to dayCounter + 1 if dayCounter > mLen0 then exit repeat end repeat if dayCounter > mLen0 then exit repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} end repeat –ここから当月処理 –1週目 if i = 7 then set ii to 1 set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} else set ii to i + 1 end if set dayCounter to 1 –日付カウンタの初期化 repeat with j from ii to 7 set the end of w1temp to dayCounter set the end of w2temp to dayCounter set dayCounter to dayCounter + 1 end repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} –当月の2週目以降 repeat repeat with j from 1 to 7 set the end of w1temp to dayCounter set the end of w2temp to dayCounter set dayCounter to dayCounter + 1 if dayCounter > mlen1 then exit repeat end repeat if dayCounter > mlen1 then exit repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} end repeat –ここから翌月処理 –1週目 if j = 7 then set iii to 1 set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} else set iii to j + 1 end if set dayCounter to 1 –日付カウンタの初期化 repeat with j from iii to 7 set the end of w1temp to dayCounter set the end of w2temp to 0 set dayCounter to dayCounter + 1 end repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} –翌月の2週目以降 repeat repeat with k from 1 to 7 set the end of w1temp to dayCounter set the end of w2temp to 0 set dayCounter to dayCounter + 1 if dayCounter > mlen1 then exit repeat end repeat if dayCounter > mlen1 then exit repeat set the end of d3List to w1temp set the end of d4List to w2temp set w1temp to {} set w2temp to {} end repeat if length of w1temp is not equal to 0 then set the end of d3List to w1temp set the end of d4List to w2temp end if –ここまで3か月カレンダーの生成 –3か月カレンダーにおいて今日が何週目かを算出 set weekCounter to 1 repeat with aWeek in d4List –裏リストで操作を行う –ただし、該当曜日しかチェックしないので全チェックに比べて速度7倍 set aDay to (item mXDay of aWeek) as number if aDay = (d1 as number) then exit repeat end if set weekCounter to weekCounter + 1 end repeat end makeCalendar –現在日時から曜日を取得を返す on getDay(aDate as date) return (weekday of aDate) as number end getDay –指定日の月のみ返す on getMonth(aDat as date) return (month of aDat) as number end getMonth –指定日の日付のみ返す on getDate(aDat as date) return (day of aDat) as number end getDate –指定日の年のみ返す on getYear(aDat as date) return (year of aDat) as number end getYear –現在のカレンダーで指定年月の日数を返す(国際化対応版) on getMlen(aYear as integer, aMonth as integer) set theNSCalendar to current application’s NSCalendar’s currentCalendar() set theDate to theNSCalendar’s dateWithEra:1 |year|:aYear |month|:aMonth |day|:1 hour:0 minute:0 |second|:0 nanosecond:0 set theResult to theNSCalendar’s rangeOfUnit:(current application’s NSDayCalendarUnit) inUnit:(current application’s NSMonthCalendarUnit) forDate:theDate return |length| of theResult end getMlen |
クリップボードに入ったproperty宣言部分を見た目の描画サイズ(幅)と文字コードでソート
クリップボードに入れたproperty宣言文を見た目の描画サイズ(幅)で行単位の並べ替えを行うAppleScriptです。
property文でCocoaのClass名を定義しており、これを整形するために文字数で短いものから長いものへ並べてみたところ、プロポーショナルフォントで表示されるために「美しく」はなりませんでした。実際に仮装画面上でスタイル付きテキストの描画を行って、描画サイズ(幅)を取得して並べ替えを行ってみたものです。
OLD Style AppleScriptの機能の範囲では逆立ちしても実現できない処理内容です。
AppleScript名:クリップボードに入ったproperty宣言部分を見た目の描画サイズ(幅)と文字コードでソート |
— Created 2017-12-08 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" use framework "AppKit" property NSFont : a reference to current application’s NSFont property NSData : a reference to current application’s NSData property NSColor : a reference to current application’s NSColor property NSArray : a reference to current application’s NSArray property NSString : a reference to current application’s NSString property NSDictionary : a reference to current application’s NSDictionary property NSPasteboard : a reference to current application’s NSPasteboard property NSCountedSet : a reference to current application’s NSCountedSet property NSMutableArray : a reference to current application’s NSMutableArray property NSSortDescriptor : a reference to current application’s NSSortDescriptor property NSAttributedString : a reference to current application’s NSAttributedString property NSMutableDictionary : a reference to current application’s NSMutableDictionary property NSFontAttributeName : a reference to current application’s NSFontAttributeName property NSKernAttributeName : a reference to current application’s NSKernAttributeName property NSMutableParagraphStyle : a reference to current application’s NSMutableParagraphStyle property NSLigatureAttributeName : a reference to current application’s NSLigatureAttributeName property NSMutableAttributedString : a reference to current application’s NSMutableAttributedString property NSUnderlineStyleAttributeName : a reference to current application’s NSUnderlineStyleAttributeName property NSParagraphStyleAttributeName : a reference to current application’s NSParagraphStyleAttributeName property NSForegroundColorAttributeName : a reference to current application’s NSForegroundColorAttributeName –クリップボードの内容を文字列として取得 set aStr to (the clipboard) as string if aStr = "" then display dialog "No Data in Clipboard" buttons {"OK"} default button 1 return end if –クリップボードの内容をStyled Stringで取得して最頻出フォントを取得 set clipboardAttrStr to getClipboardASStyledText() of me if clipboardAttrStr = missing value then display dialog "Can not get clipboard as Styled String" buttons {"OK"} default button 1 return end if set attrList to getAttributeRunsFromAttrString(clipboardAttrStr) of me set anArray to (NSArray’s arrayWithArray:attrList)’s valueForKeyPath:"fontName" set aFontList to (countItemsByItsAppearance(anArray) of me) set aFontName to theName of first item of aFontList –クリップボードから取得した文字データについて処理 set aList to paragraphs of aStr –行ごとにparseしてlist化 set bList to {} repeat with i in aList set j to contents of i if j ≠ {} then set jList to words of j if jList ≠ {} then if contents of first item of jList = "property" then set curLabel to contents of second item of jList –行をAttributed Stringとして組み立てて、画面描画時の仕上がりサイズを取得 set anAssrStr to makeRTFfromParameters(j, aFontName, 16, -2, 16) of me set aSize to anAssrStr’s |size|() –画面描画時のサイズを取得 if class of aSize = record then set attrStrWidth to width of aSize set attrStrHeight to height of aSize else if class of aSize = list then –macOS 10.13.xのバグ回避 copy aSize to {attrStrWidth, attrStrHeight} end if set the end of bList to {aLabel:curLabel, aCon:j, aWidth:attrStrWidth} end if end if end if end repeat if bList = {} then display dialog "Error" buttons {"OK"} default button 1 return end if –複数キーでソート(書式つきテキストの仕上がりサイズ幅、文字コード順でソート) set aArray to NSArray’s arrayWithArray:bList set desc1 to NSSortDescriptor’s sortDescriptorWithKey:"aWidth" ascending:true set desc2 to NSSortDescriptor’s sortDescriptorWithKey:"aLabel" ascending:true selector:"localizedCaseInsensitiveCompare:" set bArray to aArray’s sortedArrayUsingDescriptors:{desc1, desc2} –ソートしたlist of recordからaCon(元のproperty宣言行そのもの)を一括で取り出す set dArray to (NSMutableArray’s arrayWithArray:bArray)’s valueForKeyPath:"aCon" –listをデリミタつきのテキストに set dStr to retStrFromArrayWithDelimiter(dArray, return) of me set the clipboard to (dStr & return) –1D Listを文字列長でソート v2 on sort1DListByIndicatedStringLength(aList as list, aSortKey as string, sortOrder as boolean) set aArray to NSArray’s arrayWithArray:aList set descLabel1 to NSString’s stringWithString:(aSortKey & ".length") set descLabel2 to NSString’s stringWithString:aSortKey set desc1 to NSSortDescriptor’s sortDescriptorWithKey:descLabel1 ascending:sortOrder set desc2 to NSSortDescriptor’s sortDescriptorWithKey:descLabel2 ascending:true selector:"localizedCaseInsensitiveCompare:" set bArray to aArray’s sortedArrayUsingDescriptors:{desc1, desc2} return bArray as list end sort1DListByIndicatedStringLength –リストを指定デリミタをはさんでテキスト化 on retStrFromArrayWithDelimiter(aList as list, aDelim as string) set anArray to NSArray’s arrayWithArray:aList set aRes to anArray’s componentsJoinedByString:aDelim return aRes as text end retStrFromArrayWithDelimiter –書式つきテキストを組み立てる on makeRTFfromParameters(aStr as string, fontName as string, aFontSize as real, aKerning as real, aLineSpacing as real) set aVal1 to NSFont’s fontWithName:fontName |size|:aFontSize set aKey1 to (NSFontAttributeName) set aVal2 to NSColor’s blackColor() set aKey2 to (NSForegroundColorAttributeName) set aVal3 to aKerning set akey3 to (NSKernAttributeName) set aVal4 to 0 set akey4 to (NSUnderlineStyleAttributeName) set aVal5 to 2 –all ligature ON set akey5 to (NSLigatureAttributeName) set aParagraphStyle to NSMutableParagraphStyle’s alloc()’s init() aParagraphStyle’s setMinimumLineHeight:(aLineSpacing) aParagraphStyle’s setMaximumLineHeight:(aLineSpacing) set akey7 to (NSParagraphStyleAttributeName) set keyList to {aKey1, aKey2, akey3, akey4, akey5, akey7} set valList to {aVal1, aVal2, aVal3, aVal4, aVal5, aParagraphStyle} set attrsDictionary to NSMutableDictionary’s dictionaryWithObjects:valList forKeys:keyList set attrStr to NSMutableAttributedString’s alloc()’s initWithString:aStr attributes:attrsDictionary return attrStr end makeRTFfromParameters — クリップボードの内容をNSAttributedStringとして取り出して返す on getClipboardASStyledText() set theNSPasteboard to NSPasteboard’s generalPasteboard() set theAttributedStringNSArray to theNSPasteboard’s readObjectsForClasses:({NSAttributedString}) options:(missing value) set theNSAttributedString to theAttributedStringNSArray’s objectAtIndex:0 return theNSAttributedString end getClipboardASStyledText –指定のNSAttributedStringから書式情報をlist of recordで取得 on getAttributeRunsFromAttrString(theStyledText) script aSpd property styleList : {} end script set (styleList of aSpd) to {} —for output set thePureString to theStyledText’s |string|() –pure string from theStyledText set theLength to theStyledText’s |length|() set startIndex to 0 repeat until (startIndex = theLength) set {theAtts, theRange} to theStyledText’s attributesAtIndex:startIndex longestEffectiveRange:(reference) inRange:{startIndex, theLength – startIndex} set aText to (thePureString’s substringWithRange:theRange) as string set aColor to (theAtts’s valueForKeyPath:"NSColor") if aColor is not equal to missing value then set aSpace to aColor’s colorSpace() set aRed to (aColor’s redComponent()) * 255 set aGreen to (aColor’s greenComponent()) * 255 set aBlue to (aColor’s blueComponent()) * 255 set colList to {aRed as integer, aGreen as integer, aBlue as integer} set colStrForFind to (aRed as integer as string) & " " & (aGreen as integer as string) & " " & (aBlue as integer as string) else set colList to {0, 0, 0} set colStrForFind to "0 0 0" end if set aFont to (theAtts’s valueForKeyPath:"NSFont") if aFont is not equal to missing value then set aDFontName to aFont’s displayName() set aDFontSize to aFont’s pointSize() end if set the end of (styleList of aSpd) to {stringVal:aText, colorStr:colStrForFind, colorVal:colList, fontName:aDFontName as string, fontSize:aDFontSize} set startIndex to current application’s NSMaxRange(theRange) end repeat return (styleList of aSpd) end getAttributeRunsFromAttrString –1D Listをアイテムの出現頻度順でソートして返す on countItemsByItsAppearance(aList as list) set aSet to NSCountedSet’s alloc()’s initWithArray:aList set bArray to NSMutableArray’s array() set theEnumerator to aSet’s objectEnumerator() repeat set aValue to theEnumerator’s nextObject() if aValue is missing value then exit repeat bArray’s addObject:(NSDictionary’s dictionaryWithObjects:{aValue, (aSet’s countForObject:aValue)} forKeys:{"theName", "numberOfTimes"}) end repeat set theDesc to NSSortDescriptor’s sortDescriptorWithKey:"numberOfTimes" ascending:false bArray’s sortUsingDescriptors:{theDesc} return bArray as list end countItemsByItsAppearance |
16進数文字列とNumberの相互変換 v2.2
AppleScript名:16進数文字列とNumberの相互変換 v2.2 |
— Created 2018-01-20 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" repeat with i from 0 to 65535 set aRes to numToHexl(i) of hexKit set bRes to hextoNum(aRes) of hexKit if i ≠ bRes then display dialog "Not equal to " & (i as string) & " —> " & aRes & " —> " & bRes end repeat script hexKit property hexList : {missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, 10, 11, 12, 13, 14, 15} property stringSetList : {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"} –16進数文字列からNumberに変換 on hextoNum(hexText as string) set hList to characters of hexText set rhList to reverse of hList set digitNum to 0 set sumNum to 0 repeat with i in rhList set j to id of contents of i if j > 102 then return false set ofN to contents of item j of hexList of me if ofN = missing value then return false set sumNum to sumNum + (16 ^ digitNum) * (ofN) set digitNum to digitNum + 1 end repeat return sumNum as integer end hextoNum –数値を16進数文字列に変換 on numToHexl(origNum) if origNum = 0 then return "0" set resString to {} repeat if origNum ≤ 0 then exit repeat set resNum to (origNum mod 16) set resText to contents of item (resNum + 1) of stringSetList set resString to resText & resString set origNum to origNum div 16 end repeat return (resString as string) end numToHexl end script |
Googleで検索して結果を返す v2
Webブラウザを併用せず、Googleの検索エンジンに直接問い合わせを行い、結果をCocoaの機能を用いて検索結果URLの一覧を取得するAppleScriptです。
オリジナル v1はShane Stanleyが作成、あまりに洗練された処理内容に絶句しました。さらに、処理内容が内容だけに、Shaneから見せられて「掲載はちょっと検討させて」と返事をしてしまったほど。
他のプログラミング言語でも同様の実装例が見られたので、問題視されないレベルと判断して掲載しました。
ただ、その一方でオリジナル版からの改良も行い、オリジナルでは20件ぐらいだった検索件数の拡張を行なって100件までの検索が行えるようにしたものがこのv2です。
長期間かつ大量の検索をGoogleの検索エンジンに対して行う場合には、REST API経由で行なってください。
追記(2019/08/20)
しばらく動いていましたが、Google側のWeb表示の仕様が変わって検索できなくなりました。ただし、検索結果のNSXMLDocumentからのURL抽出処理を変更することで、対応は可能と思われます(やっていませんが)。REST APIのドキュメント化された仕様は変わらないため、検索を行うにはREST API経由のほうが安心です。
追記(2020)
CotEditorのPowerPackにこれの改訂版を入れてあり、CotEditorで選択中の語句でGoogle検索できるようにしてあります。これの動作状況で様子を見ているところです。
AppleScript名:Googleで検索して結果を返す v4 |
— Created 2017-03-31 by Shane Stanley — Modified 2019-09-18 by Takaaki Naganoya use AppleScript version "2.4" use framework "Foundation" use scripting additions property theResult : {} set theQuery to "戦場の絆" set paramObj to {myQuery:theQuery, myMax:10} my performSelectorOnMainThread:"searchByGoogle:" withObject:(paramObj) waitUntilDone:true return my theResult –> {"http://web.gundam-kizuna.jp/sp/",…….} on searchByGoogle:paramObj set theQuery to myQuery of paramObj set maxNum to myMax of paramObj — build and escape query string set theQuery to current application’s NSString’s stringWithString:theQuery set theQuery to theQuery’s stringByReplacingOccurrencesOfString:space withString:"+" set escQuery to theQuery’s stringByAddingPercentEncodingWithAllowedCharacters:(current application’s NSCharacterSet’s URLQueryAllowedCharacterSet()) — do search set searchURLString to current application’s NSString’s stringWithFormat_("https://www.google.com/search?client=safari&rls=en&ie=UTF-8&oe=UTF-8&q=%@&complete=0&num=%@&as_qdr=all", escQuery, (maxNum as string)) set theURL to current application’s |NSURL|’s URLWithString:searchURLString set {theData, theError} to current application’s NSData’s dataWithContentsOfURL:theURL options:0 |error|:(reference) if theData = missing value then error (theError’s localizedDescription() as text) — convert to XML set {theXMLDoc, theError} to current application’s NSXMLDocument’s alloc()’s initWithData:theData options:(current application’s NSXMLDocumentTidyHTML) |error|:(reference) if theXMLDoc = missing value then error (theError’s localizedDescription() as text) –検索結果として返してくるclass要素名を固定で書かない方法を模索するべき? — filter via XPath and predicate set xpathStr to "//*[@class=\"kCrYT\"]/a/@href" –ここが問題 set {theNodes, theError} to theXMLDoc’s nodesForXPath:xpathStr |error|:(reference) if theNodes = missing value then error (theError’s localizedDescription() as text) set nodeStrings to (theNodes’s valueForKey:"stringValue") set thePred to current application’s NSPredicate’s predicateWithFormat:"self BEGINSWITH ’/url?q=’" set nodeStrings to nodeStrings’s filteredArrayUsingPredicate:thePred — trim URL strings set theURLStrings to {} repeat with aString in nodeStrings set theOffset to (aString’s rangeOfString:"&") set end of theURLStrings to (aString’s substringWithRange:{7, (theOffset’s location) – 7}) as text end repeat set my theResult to theURLStrings end searchByGoogle: |
TextEditで色置換 v2
AppleScript名:TextEditで色置換 v2 |
— Created 2018-01-09 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use bPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html load framework (* set targColor to {65535, 10023, 4626} set newColor to {19018, 0, 59109} repTextEditColor(targColor, newColor) of me *) set targColor to {19018, 0, 59109} set newColor to {65535, 10023, 4626} repTextEditColor(targColor, newColor) of me on repTextEditColor(targColor, newColor) set hitIndex to {} tell application "TextEdit" tell text of front document set colList to color of every attribute run end tell end tell set hitIndex to (current application’s SMSForder’s indexesOfItem:targColor inArray:(colList) inverting:false) as list tell application "TextEdit" tell text of front document repeat with i in hitIndex ignoring application responses set color of attribute run (i + 1) to newColor –0 based index to 1 based index conversion end ignoring end repeat end tell end tell end repTextEditColor |
CotEditorの最前面で表示中のDocumentを縦書き表示に
CotEditorで表示中のテキストファイルを、GUI Scripting経由で縦書き表示するAppleScriptです。
CotEditorの途中のバージョンでメニュー構成が変更になったため、本Scriptは動かなくなりました。
とりあえず、メニュー変更に追従して書き換えを行なって使っていましたが、根本的な解決策を1024jpさんに教えてもらえたので(Xattributeの書き換え)、そちらをおすすめします。
AppleScript名:CotEditorの最前面で表示中のDocumentを縦書き表示に |
makeWinVertical() of me
on makeWinVertical() activate application "CotEditor" tell application "System Events" tell process "CotEditor" try click menu item "縦書きで表示" of menu 1 of menu bar item "フォーマット" of menu bar 1 end try end tell end tell end makeWinVertical |
CotEditorの最前面のドキュメントの内容から前後にある空白文字列をトリミングして文字リスト化
AppleScript名:CotEditorの最前面のドキュメントの内容から前後にある空白文字列をトリミングして文字リスト化 |
use AppleScript version "2.5" use scripting additions use framework "Foundation" property NSString : a reference to current application’s NSString property NSCharacterSet : a reference to current application’s NSCharacterSet tell application "CotEditor" tell front document set aCon to contents end tell end tell set aList to paragraphs of aCon set outList to {} repeat with i in aList set j to trimWhiteSpaceFromHeadAndTail(i) of me set the end of outList to j end repeat outList –指定文字列の前後から空白をトリミング on trimWhiteSpaceFromHeadAndTail(aStr as string) set aString to NSString’s stringWithString:aStr set bString to aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet()) return bString as list of string or string –as anything end trimWhiteSpaceFromHeadAndTail |