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

月: 2018年2月

2Dリスト内の要素のうち最多のアイテム数を求める

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:2Dリスト内の要素のうち最多のアイテム数を求める
— Created 2017-10-01 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {{1, 2, 3, 4, 5, 6, 4}, {1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6, 0, 0}} –7,6, 8 items
set aRes to getMaxItemCountFrom2DArray(aList) of me
–>  8 –max items is 8

on getMaxItemCountFrom2DArray(aList)
  set anArray to current application’s NSArray’s arrayWithArray:aList
  
set eRes to (anArray’s valueForKeyPath:"@unionOfObjects.@count")’s valueForKeyPath:"@max.self"
  
return eRes as integer
end getMaxItemCountFrom2DArray

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2Dリストを左(counterclockwise)に90度回転

Posted on 2月 6, 2018 by Takaaki Naganoya

2D List(2次元配列)を左に90度回転させるAppleScriptです。

回転させるにあたって、各行のアイテム数のうち最大のものを求め、最大アイテム数に足りない行については詰め物をして、2次元配列をなるべく正方形ないし長方形に整った形にしてから回転させます。

AppleScript名:2Dリストを左(counterclockwise)に90度回転
— Created 2017-10-02 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSArray : a reference to current application’s NSArray

set origList to {{1, 2, 3, 4, 5, 6, 7}, {11, 12, 13, 14, 15, 16}, {21, 22, 23, 24, 25, 26, 27, 28}}

set wList to rotateListCounterClockwise90(origList, 0) of me

–>  {{0, 0, 28}, {7, 0, 27}, {6, 16, 26}, {5, 15, 25}, {4, 14, 24}, {3, 13, 23}, {2, 12, 22}, {1, 11, 21}}

set sList to rotateListCounterClockwise90(wList, 0) of me
–>  {​​​​​{​​​​​​​28, ​​​​​​​27, ​​​​​​​26, ​​​​​​​25, ​​​​​​​24, ​​​​​​​23, ​​​​​​​22, ​​​​​​​21​​​​​}, ​​​​​{​​​​​​​0, ​​​​​​​0, ​​​​​​​16, ​​​​​​​15, ​​​​​​​14, ​​​​​​​13, ​​​​​​​12, ​​​​​​​11​​​​​}, ​​​​​{​​​​​​​0, ​​​​​​​7, ​​​​​​​6, ​​​​​​​5, ​​​​​​​4, ​​​​​​​3, ​​​​​​​2, ​​​​​​​1​​​​​}​​​}

set eList to rotateListCounterClockwise90(sList, 0) of me
–>  {​​​​​{​​​​​​​21, ​​​​​​​11, ​​​​​​​1​​​​​}, ​​​​​{​​​​​​​22, ​​​​​​​12, ​​​​​​​2​​​​​}, ​​​​​{​​​​​​​23, ​​​​​​​13, ​​​​​​​3​​​​​}, ​​​​​{​​​​​​​24, ​​​​​​​14, ​​​​​​​4​​​​​}, ​​​​​{​​​​​​​25, ​​​​​​​15, ​​​​​​​5​​​​​}, ​​​​​{​​​​​​​26, ​​​​​​​16, ​​​​​​​6​​​​​}, ​​​​​{​​​​​​​27, ​​​​​​​0, ​​​​​​​7​​​​​}, ​​​​​{​​​​​​​28, ​​​​​​​0, ​​​​​​​0​​​​​}​​​}

set nList to rotateListCounterClockwise90(eList, 0) of me
–>  {​​​​​{​​​​​​​1, ​​​​​​​2, ​​​​​​​3, ​​​​​​​4, ​​​​​​​5, ​​​​​​​6, ​​​​​​​7, ​​​​​​​0​​​​​}, ​​​​​{​​​​​​​11, ​​​​​​​12, ​​​​​​​13, ​​​​​​​14, ​​​​​​​15, ​​​​​​​16, ​​​​​​​0, ​​​​​​​0​​​​​}, ​​​​​{​​​​​​​21, ​​​​​​​22, ​​​​​​​23, ​​​​​​​24, ​​​​​​​25, ​​​​​​​26, ​​​​​​​27, ​​​​​​​28​​​​​}​​​}

on rotateListCounterClockwise90(aList, blankItem)
  set curMax to 0
  
  
set curLen to length of aList
  
set curMax to getMaxItemCountFrom2DArray(aList) of me
  
  
set tmpList to {}
  
  
set twoDList to make2DBlankArray(curLen, curMax) of me
  
  
set curY to 1
  
repeat with x from curMax to 1 by -1
    
    
set curX to 1
    
repeat with y from 1 to curLen by 1
      set aCon to getItemByXY(x, y, aList, blankItem) of me
      
set twoDList to setItemByXY(curX, curY, twoDList, aCon) of me
      
set curX to curX + 1
    end repeat
    
    
set curY to curY + 1
  end repeat
  
  
return twoDList
end rotateListCounterClockwise90

on getMaxItemCountFrom2DArray(curList)
  set anArray to NSArray’s arrayWithArray:curList
  
set eRes to (anArray’s valueForKeyPath:"@unionOfObjects.@count")’s valueForKeyPath:"@max.self"
  
return eRes as integer
end getMaxItemCountFrom2DArray

–2D Listに配列の添字的なアクセスを行なってデータを取得
on getItemByXY(aX, aY, aList, aBlankItem) –1 based index
  try
    set aContents to contents of (item aX of item aY of aList)
  on error
    set aContents to aBlankItem
  end try
  
return aContents
end getItemByXY

–2D Listに配列の添字的なアクセスを行なってデータを設定
on setItemByXY(aX, aY, tmpList, aContents) –1 based index
  set (item aX of item aY of tmpList) to aContents
  
return tmpList
end setItemByXY

–空白の2D Array を出力する
on make2DBlankArray(curLen, curMax)
  set outArray to {}
  
repeat curMax times
    set tmpList to {}
    
repeat curLen times
      set the end of tmpList to ""
    end repeat
    
set the end of outArray to tmpList
  end repeat
  
return outArray
end make2DBlankArray

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2Dリストを右(clockwise)に90度回転

Posted on 2月 6, 2018 by Takaaki Naganoya

2D List(2次元配列)を右に90度回転させるAppleScriptです。

回転させるにあたって、各行のアイテム数のうち最大のものを求め、最大アイテム数に足りない行については詰め物をして、2次元配列をなるべく正方形ないし長方形に整った形にしてから回転させます。

AppleScript名:2Dリストを右(clockwise)に90度回転
— Created 2017-10-02 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSArray : a reference to current application’s NSArray

set origList to {{1, 2, 3, 4, 5, 6, 7}, {1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6, 7, 8}}

set eList to rotateListClockwise90(origList, 0) of me

–>  {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 0, 7}, {8, 0, 0}}

(*)
set sList to rotateListClockwise90(eList, 0) of me
–>   {{8, 7, 6, 5, 4, 3, 2, 1}, {0, 0, 6, 5, 4, 3, 2, 1}, {0, 7, 6, 5, 4, 3, 2, 1}}

set wList to rotateListClockwise90(sList, 0) of me
–>   {{0, 0, 8}, {7, 0, 7}, {6, 6, 6}, {5, 5, 5}, {4, 4, 4}, {3, 3, 3}, {2, 2, 2}, {1, 1, 1}}

set nList to rotateListClockwise90(wList, 0) of me
–>  {{1, 2, 3, 4, 5, 6, 7, 0}, {1, 2, 3, 4, 5, 6, 0, 0}, {1, 2, 3, 4, 5, 6, 7, 8}}
*)

on rotateListClockwise90(aList, blankItem)
  set curMax to 0
  
  
set curLen to length of aList
  
set curMax to getMaxItemCountFrom2DArray(aList) of me
  
  
set tmpList to {}
  
  
set twoDList to make2DBlankArray(curLen, curMax) of me
  
  
set curY to 1
  
repeat with x from 1 to curMax
    
    
set curX to 1
    
repeat with y from curLen to 1 by -1
      set aCon to getItemByXY(x, y, aList, blankItem) of me
      
set twoDList to setItemByXY(curX, curY, twoDList, aCon) of me
      
set curX to curX + 1
    end repeat
    
    
set curY to curY + 1
  end repeat
  
  
return twoDList
end rotateListClockwise90

on getMaxItemCountFrom2DArray(curList)
  set anArray to NSArray’s arrayWithArray:curList
  
set eRes to (anArray’s valueForKeyPath:"@unionOfObjects.@count")’s valueForKeyPath:"@max.self"
  
return eRes as integer
end getMaxItemCountFrom2DArray

–2D Listに配列の添字的なアクセスを行なってデータを取得
on getItemByXY(aX, aY, aList, aBlankItem) –1 based index
  try
    set aContents to contents of (item aX of item aY of aList)
  on error
    set aContents to aBlankItem
  end try
  
return aContents
end getItemByXY

–2D Listに配列の添字的なアクセスを行なってデータを設定
on setItemByXY(aX, aY, tmpList, aContents) –1 based index
  set (item aX of item aY of tmpList) to aContents
  
return tmpList
end setItemByXY

–空白の2D Array を出力する
on make2DBlankArray(curLen, curMax)
  set outArray to {}
  
repeat curMax times
    set tmpList to {}
    
repeat curLen times
      set the end of tmpList to ""
    end repeat
    
set the end of outArray to tmpList
  end repeat
  
return outArray
end make2DBlankArray

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | 1 Comment

縦書きリストの縦行がすべて空白であったら縦行を削除

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:縦書きリストの縦行がすべて空白であったら縦行を削除
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {{" ", "対", "i", "う", "テ"}, {" ", "応", "p", "A", "キ"}, {" ", "バ", "t", "p", "ス"}, {" ", "︱", "の", "p", "ト"}, {" ", "ジ", "﹁", "l", "縦"}, {" ", "ョ", "禁", "e", "書"}, {" ", "ン", "則", "S", "き"}, {" ", "で", "処", "c", "を"}, {" ", "す", "理", "r", "行"}, {" ", "︒", "﹂", " ", " "}}

set bList to checkBlankVerticalLine(aList, " ") of me

on checkBlankVerticalLine(aList, aBlankChar)
  set tLen to length of (item 1 of aList)
  
copy aList to bList
  
set hitList to makeRepeatinglList(length of bList, true) of me
  
  
set aCount to 1
  
repeat
    set workList to {}
    
repeat with ii in bList
      set jj to contents of ii
      
set the end of workList to (item aCount of jj = aBlankChar)
    end repeat
    
    
if workList = hitList then
      repeat with ii from 1 to length of bList
        set jj to contents of item ii of bList
        
set item ii of bList to removeItemInArray(jj, 1) of me
      end repeat
      
set tLen to tLen – 1
    end if
    
set aCount to aCount + 1
    
if aCount > tLen then
      exit repeat
    end if
  end repeat
  
  
return bList
end checkBlankVerticalLine

on removeItemInArray(aList as list, anItemNo as integer)
  set anArray to current application’s NSMutableArray’s arrayWithArray:aList
  
anArray’s removeObjectAtIndex:(anItemNo – 1)
  
return anArray as list
end removeItemInArray

on makeRepeatinglList(hitNum, hitItem)
  set outList to {}
  
repeat hitNum times
    set the end of outList to hitItem
  end repeat
  
return outList
end makeRepeatinglList

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

1D Listを文字列長でソート v3

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:1D Listを文字列長でソート v3
— Created 2014-11-25 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {"Apple", "Orange", "Banana", "Meron", "Strawberry", "Lemon", "Takaaki Naganoya", "Piyomaru Software"}
set bList to sort1DListByStringLength(aList as list, true) of me –昇順
–> {"Apple", "Lemon", "Meron", "Banana", "Orange", "Strawberry", "Takaaki Naganoya", "Piyomaru Software"}

set cList to sort1DListByStringLength(aList as list, false) of me –降順
–> {"Piyomaru Software", "Takaaki Naganoya", "Strawberry", "Banana", "Orange", "Apple", "Lemon", "Meron"}

–1D Listを文字列長でソート v2
on sort1DListByStringLength(aList as list, sortOrder as boolean)
  set aArray to current application’s NSArray’s arrayWithArray:aList
  
set desc1 to current application’s NSSortDescriptor’s sortDescriptorWithKey:"length" ascending:sortOrder
  
set desc2 to current application’s NSSortDescriptor’s sortDescriptorWithKey:"self" ascending:true selector:"localizedCaseInsensitiveCompare:"
  
set bArray to aArray’s sortedArrayUsingDescriptors:{desc1, desc2}
  
return bArray as list of string or string
end sort1DListByStringLength

★Click Here to Open This Script 

Posted in list Sort | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

配列をソートする(1D)

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:配列をソートする(1D)
— Created 2015-09-02 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3)
–>  (NSArray) {​​​​​1, ​​​​​2, ​​​​​3​​​}

–ソートする
set sortRes1 to anArray’s sortedArrayUsingSelector:"compare:" –逆順の場合には、sortDescriptorを指定する必要がある
–>  (NSArray) {​​​​​1, ​​​​​2, ​​​​​3​​​}

–compare:
–caseInsensitiveCompare:
–localizedCompare:
–localizedCaseInsensitiveCompare:
–localizedStandardCompare:

★Click Here to Open This Script 

Posted in list Sort | Tagged 10.11savvy 10.12savvy 10.13savvy Sorting | Leave a comment

1Dリスト中の最も近い値を返す

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:1Dリスト中の最も近い値を返す
— Created 2017-11-11 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.5"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4971
property NSArray : a reference to current application’s NSArray

set aList to {50, 30, 20, 15, 10, 5, 0}

set targNum to retNearestNumInList(7, aList) of me
–>  5

set targNum to retNearestNumInList(100, aList) of me
–> 50

on retNearestNumInList(aNum, aList as list)
  set anNSArray to NSArray’s arrayWithArray:aList
  
set bList to (anNSArray’s sortedArrayUsingSelector:"compare:") as list
  
set aPreNum to 0
  
  
repeat with i in bList
    set j to contents of i
    
if j ≥ aNum then
      exit repeat
    end if
    
set aPreNum to j
  end repeat
  
  
return aPreNum
end retNearestNumInList

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

範囲指定して配列を作成 v1.1a

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:範囲指定して配列を作成 v1.1a
— Created 2017-10-30 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use aBplus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html

load framework
set aindexSet to current application’s NSIndexSet’s indexSetWithIndexesInRange:(current application’s NSMakeRange(5, 100))
set aList to (current application’s SMSForder’s arrayWithIndexSet:aindexSet) as list
–> {5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

連番数値リスト中で欠落アイテム(Gap)を抽出 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:連番数値リスト中で欠落アイテム(Gap)を抽出 v2
— Created 2017-12-06 by Takaaki Naganoya
— 2017 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

property SMSForder : a reference to current application’s SMSForder
property NSIndexSet : a reference to current application’s NSIndexSet
property NSMutableSet : a reference to current application’s NSMutableSet
property NSMutableArray : a reference to current application’s NSMutableArray

load framework

set aList to {1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20}

set aRes to calcGaps(aList) of me
–>  {19, 13}

on calcGaps(aList as list)
  set nArray to (NSMutableArray’s arrayWithArray:aList)
  
set maxRes to (nArray’s valueForKeyPath:"@max.self")’s intValue()
  
set minRes to (nArray’s valueForKeyPath:"@min.self")’s intValue()
  
  
–最小値から最大値までの連番リスト作成
  
set theIndexSet to NSIndexSet’s indexSetWithIndexesInRange:{minRes, maxRes}
  
set theList to (SMSForder’s arrayWithIndexSet:theIndexSet) as list
  
  
–補集合
  
set aSet to NSMutableSet’s setWithArray:theList
  
set bSet to NSMutableSet’s setWithArray:nArray
  
aSet’s minusSet:bSet
  
  
return aSet’s allObjects() as list
end calcGaps

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

隣接Rangeの検出じっけん

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:隣接Rangeの検出じっけん
— Created 2017-12-12 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aRange to current application’s NSMakeRange(10, 80) –original range
set bRange to current application’s NSMakeRange(9, 81) –entended range (to detect neighbor)

set cRange to current application’s NSMakeRange(89, 30) –target range

set aRes to current application’s NSIntersectionRange(bRange, cRange)

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

NSRangeの基礎的な処理

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:NSRangeの基礎的な処理
— Created 2017-12-12 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aRange to current application’s NSMakeRange(0, 100)
–>  {​​​​​location:0, ​​​​​length:100​​​}

set maxRange to current application’s NSMaxRange(aRange) –最大値
–>  100

set rangeStr to (current application’s NSStringFromRange(aRange)) as string
–>  "{0, 100}"

set bRange to current application’s NSRangeFromString(rangeStr)
–>  {​​​​​location:0, ​​​​​length:100​​​}

set cRange to current application’s NSMakeRange(50, 80)
set cRes to current application’s NSEqualRanges(aRange, cRange)
–> false

set dRes to current application’s NSEqualRanges(aRange, bRange)
–> true

set eRes to current application’s NSIntersectionRange(aRange, cRange)
–>  {​​​​​location:50, ​​​​​length:50​​​}

set fRes to current application’s NSLocationInRange(50, aRange)
–> true

set gRes to current application’s NSLocationInRange(120, aRange)
–>  false

set hRes to current application’s NSUnionRange(aRange, cRange)
–>  {​​​​​location:0, ​​​​​length:130​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

NSRangeの拡張、隣接検出

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:NSRangeの拡張、隣接検出
— Created 2018-1-12 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/5118

set aRange to current application’s NSMakeRange(10, 80) –original range
–> {location:10, |length|:80}

set bRange to extendRange(aRange) of me –Extended range
–> {location:9, |length|:81}

set cRange to current application’s NSMakeRange(90, 30) –compare target range
–> {location:90, |length|:30}

set aRes to current application’s NSIntersectionRange(aRange, cRange)
–> {location:0, |length|:0}–Not adjacent

set bRes to current application’s NSIntersectionRange(bRange, cRange)
–> {location:90, |length|:1}–Adjacent

–NSRangeの開始点とサイズを拡張
on extendRange(aRange)
  set aLoc to location of aRange
  
set aLen to |length| of aRange
  
  
if aLoc > 0 then
    set aLoc to aLoc – 1
  end if
  
  
set aLen to aLen + 2
  
set bRange to current application’s NSMakeRange(aLoc, aLen)
  
return bRange
end extendRange

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

MaxRangeを取得する

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:MaxRangeを取得する
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aRange to current application’s NSMakeRange(10, 80) –original range
set aMaxX to current application’s NSMaxRange(aRange)
–> 90
–set aMinX to current application’s NSMinRange(aRange)–最小はない

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Markdown書類から見出し(Header)行を抽出_v2

Posted on 2月 6, 2018 by Takaaki Naganoya

Markdown書類を選択し、正規表現で見出し(Header)行を抽出するAppleScriptです。

# Header Level 1
## Header Level 2
### Header Level 3
#### Header Level 4

のようなデータを処理すると、

{{1, " Header Level 1"}, {2, " Header Level 2"}, {3, " Header Level 3"}, {4, " Header Level 4"}}

のように {{level number, “header text”}…} と結果を出力します。

AppleScript名:Markdown書類から見出し(Header)行を抽出_v2
— Created 2017-08-12 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4776

property NSRegularExpressionDotMatchesLineSeparators : a reference to current application’s NSRegularExpressionDotMatchesLineSeparators
property NSRegularExpressionAnchorsMatchLines : a reference to current application’s NSRegularExpressionAnchorsMatchLines
property NSRegularExpression : a reference to current application’s NSRegularExpression
property NSString : a reference to current application’s NSString

set aFile to choose file of type {"net.daringfireball.markdown"} –Markdown書類のUTI
set aStr to (read aFile as «class utf8»)
set aList to retHeaders(aStr) of me
–>  {​​​​​{​​​​​​​3, ​​​​​​​"choose file, choose folderで選んだ対象の名称変更"​​​​​}, ​​​​​{​​​​​​​3, ​​​​​​​"choose folderで選んだフォルダ内のファイルの名称変更"​​​​​}, ​​​​​{​​​​​​​3, ​​​​​​​"Finder上で選んだ(selection)ファイルの名称変更"​​​​​}, ​​​​​{​​​​​​​3, ​​​​​​​"POSIX pathのファイルの名称変更"​​​​​}, ​​​​​{​​​​​​​3, ​​​​​​​"ファイルを移動させたうえで名称変更"​​​​​}, ​​​​​{​​​​​​​3, ​​​​​​​"要注意事項(超重要、生死にかかわる)"​​​​​}​​​}

on retHeaders(aCon)
  set tList to {}
  
set regStr to "^#{1,6}[^#]*?$"
  
  
set headerList to my findPattern:regStr inString:aCon
  
repeat with i in headerList
    set j to contents of i
    
set regStr2 to "^#{1,6}[^#]*?"
    
set headerLevel to length of first item of (my findPattern:regStr2 inString:j)
    
set the end of tList to {headerLevel, text (headerLevel + 1) thru -1 in j}
  end repeat
  
  
return tList
end retHeaders

on findPattern:thePattern inString:theString
  set theOptions to ((NSRegularExpressionDotMatchesLineSeparators) as integer) + ((NSRegularExpressionAnchorsMatchLines) as integer)
  
set theRegEx to NSRegularExpression’s regularExpressionWithPattern:thePattern options:theOptions |error|:(missing value)
  
set theFinds to theRegEx’s matchesInString:theString options:0 range:{location:0, |length|:length of theString}
  
set theFinds to theFinds as list — so we can loop through
  
set theResult to {} — we will add to this
  
set theNSString to NSString’s stringWithString:theString
  
repeat with i from 1 to count of items of theFinds
    set theRange to (item i of theFinds)’s range()
    
set end of theResult to (theNSString’s substringWithRange:theRange) as string
  end repeat
  
return theResult
end findPattern:inString:

★Click Here to Open This Script 

Posted in Markdown Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

MacDownで編集中のMarkDown書類で見出しが見出し落ちしていないかチェック

Posted on 2月 6, 2018 by Takaaki Naganoya

MacDownで編集中のMarkdown書類をいったんデスクトップにPDF書き出しして、見出しがページ末尾に位置していないか(見出し落ち)をチェックするAppleScriptです。

MacDownのAppleScript対応機能が少ないので、ほとんどAppleScriptだけで処理しています。Cocoaの機能を呼べるようになったので、とくに問題ありません。

MacDownで編集中の最前面のMarkdown書類からパスを取得し、AppleScriptで直接ファイルから内容を読み込み、正規表現で見出し一覧を取得します。

MacDownからGUI Scripting経由でメニューをコントロールしてPDF書き出しを行い、ページ単位でPDFからテキストを抽出。不要な空白文字列などを削除。


▲いわゆる「見出し落ち」の状態。ページ末尾に見出し項目が存在している

各ページのテキストが見出しの内容で終了していれば、結果出力用の変数midashiOchiListに{ページ数, 見出し名称} を追加して出力します。

–> {{2, “対象となるFramework”}}

AppleScript名:MacDownで編集中のMarkDown書類で見出しが見出し落ちしていないかチェック
— Created 2017-08-12 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.5"
use scripting additions
use framework "Foundation"
use framework "Quartz"

property NSString : a reference to current application’s NSString
property NSCharacterSet : a reference to current application’s NSCharacterSet
property NSRegularExpression : a reference to current application’s NSRegularExpression
property NSRegularExpressionAnchorsMatchLines : a reference to current application’s NSRegularExpressionAnchorsMatchLines
property NSRegularExpressionDotMatchesLineSeparators : a reference to current application’s NSRegularExpressionDotMatchesLineSeparators

set docName to getFrontmostMarkdownDocName() of me
if docName = false then return

set newName to repFileNameExtension(docName, ".pdf") of me
set newPath to (POSIX path of (path to desktop)) & newName
set dRes to deleteItemAt(newPath) of me –前回実行時にデスクトップに残った同名のPDFを削除する

–Markdownのソースを元ファイルから直接読み出す
set docSourcePath to getFrontmostMarkdownFullPath() of me
set aStr to (read (docSourcePath as alias) as «class utf8»)

–getHeader List
set aList to retHeaders(aStr) of me

–Export Markdown to PDF (desktop folder)
macDownForceSave() of me

set tList to textInPDFinEachPage(newPath) of me

set pCount to 1
set midashOchiList to {}
repeat with i in tList
  set j to (contents of i) as string
  
  
repeat with ii in aList
    set jj to (contents of second item of ii) as string
    
–set jj2 to replaceText(jj, "(", "(") of me
    
–set jj3 to replaceText(jj2, ")", ")") of me
    
    
if (j ends with jj) then
      set the end of midashOchiList to {pCount, jj}
    end if
  end repeat
  
set pCount to pCount + 1
end repeat

return midashOchiList

on retHeaders(aCon)
  set tList to {}
  
set regStr to "^#{1,6}[^#]*?$"
  
  
set headerList to my findPattern:regStr inString:aCon
  
repeat with i in headerList
    set j to contents of i
    
set regStr2 to "^#{1,6}[^#]*?"
    
set headerLevel to length of first item of (my findPattern:regStr2 inString:j)
    
set tmpHeader1 to text (headerLevel + 1) thru -1 in j
    
–ヘッダーの前後から空白文字をトリミング
    
set tmpHeader2 to trimWhiteSpaceFromHeadAndTail(tmpHeader1) of me
    
    
–ヘッダー部でPDF書き出ししたときに全角文字が半角文字に置換されてしまうケースに対処
    
set tmpHeader3 to replaceText(tmpHeader2, "(", "(") of me
    
set tmpHeader4 to replaceText(tmpHeader3, ")", ")") of me
    
    
set the end of tList to {headerLevel, tmpHeader4}
  end repeat
  
  
return tList
end retHeaders

on findPattern:thePattern inString:theString
  set theOptions to ((NSRegularExpressionDotMatchesLineSeparators) as integer) + ((NSRegularExpressionAnchorsMatchLines) as integer)
  
set theRegEx to NSRegularExpression’s regularExpressionWithPattern:thePattern options:theOptions |error|:(missing value)
  
set theFinds to theRegEx’s matchesInString:theString options:0 range:{location:0, |length|:length of theString}
  
set theFinds to theFinds as list — so we can loop through
  
set theResult to {} — we will add to this
  
set theNSString to NSString’s stringWithString:theString
  
repeat with i from 1 to count of items of theFinds
    set theRange to (item i of theFinds)’s range()
    
set end of theResult to (theNSString’s substringWithRange:theRange) as string
  end repeat
  
return theResult
end findPattern:inString:

–指定文字列の前後から空白をトリミング
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

–ファイル名の拡張子を置換する
on repFileNameExtension(origName, newExt)
  set aName to current application’s NSString’s stringWithString:origName
  
set theExtension to aName’s pathExtension()
  
if (theExtension as string) is not equal to "" then
    set thePathNoExt to aName’s stringByDeletingPathExtension()
    
set newName to (thePathNoExt’s stringByAppendingString:newExt)
  else
    set newName to (aName’s stringByAppendingString:newExt)
  end if
  
  
return newName as string
end repFileNameExtension

on textInPDFinEachPage(thePath)
  set aList to {}
  
  
set anNSURL to (current application’s |NSURL|’s fileURLWithPath:thePath)
  
set theDoc to current application’s PDFDocument’s alloc()’s initWithURL:anNSURL
  
  
set theCount to theDoc’s pageCount() as integer
  
  
repeat with i from 1 to theCount
    set thePage to (theDoc’s pageAtIndex:(i – 1))
    
set curStr to (thePage’s |string|())
    
set curStr2 to curStr’s decomposedStringWithCanonicalMapping() –Normalize Text with NFC
    
set targString to string id 13 & string id 10 & string id 32 & string id 65532 –Object Replacement Character
    
set bStr to (curStr2’s stringByTrimmingCharactersInSet:(current application’s NSCharacterSet’s characterSetWithCharactersInString:targString))
    
set the end of aList to (bStr as string)
  end repeat
  
  
return aList
end textInPDFinEachPage

–注意!! ここでGUI Scriptingを使用。バージョンが変わったときにメニュー階層などの変更があったら書き換え
on macDownForceSave()
  activate application "MacDown"
  
tell application "System Events"
    tell process "MacDown"
      — File > Export > PDF
      
click menu item 2 of menu 1 of menu item 14 of menu 1 of menu bar item 3 of menu bar 1
      
      
–Go to Desktop Folder
      
keystroke "d" using {command down}
      
      
–Save Button on Sheet
      
click button 1 of sheet 1 of window 1
    end tell
  end tell
end macDownForceSave

on getFrontmostMarkdownDocName()
  tell application "MacDown"
    set dList to every document
    
set dCount to count every item of dList
    
if dCount is not equal to 1 then
      display notification "Markdown document is not only one."
      
return false
    end if
    
    
tell document 1
      set docName to name
    end tell
    
return docName
  end tell
end getFrontmostMarkdownDocName

on getFrontmostMarkdownFullPath()
  tell application "MacDown"
    tell document 1
      set aProp to properties
    end tell
  end tell
  
  
set aPath to (file of aProp)
end getFrontmostMarkdownFullPath

–任意のデータから特定の文字列を置換
on replaceText(origData, origText, repText)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to {origText}
  
set origData to text items of origData
  
set AppleScript’s text item delimiters to {repText}
  
set origData to origData as text
  
set AppleScript’s text item delimiters to curDelim
  
–set b to origData as text
  
return origData
end replaceText

–指定のPOSIX pathのファイルを強制削除(あってもなくてもいい)
on deleteItemAt(aPOSIXpath)
  set theNSFileManager to current application’s NSFileManager’s defaultManager()
  
set theResult to theNSFileManager’s removeItemAtPath:(aPOSIXpath) |error|:(missing value)
  
return (theResult as integer = 1) as boolean
end deleteItemAt

★Click Here to Open This Script 

Posted in GUI Scripting Markdown PDF Text | Tagged 10.11savvy 10.12savvy 10.13savvy MacDown | Leave a comment

指定のMarkdown書類を走査して指定文字列(Question)をカウント

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:指定のMarkdown書類を走査して指定文字列(Question)をカウント
— Created 2017-11-14 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set origPath to (choose file of type {"net.daringfireball.markdown"} with prompt "処理対象のMarkdown書類を選択")

set aText to (read origPath as «class utf8»)
set aFreq to retFrequency(aText, ">Q") of me

–指定文字列内の指定キーワードの出現回数を取得する
on retFrequency(origText, aKeyText)
  set aRes to parseByDelim(origText, aKeyText) of me
  
return ((count every item of aRes) – 1)
end retFrequency

on parseByDelim(aData, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set dList to text items of aData
  
set AppleScript’s text item delimiters to curDelim
  
return dList
end parseByDelim

★Click Here to Open This Script 

Posted in Markdown Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

listからHTML Tableの生成 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:listからHTML Tableの生成 v2
— Created 2017-02-24 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {{"1", "2", "3"}, {"3", "4", "5"}, {"5", "6", "7"}}
set aHeader to "<html><head><title>First</title><style>table , td, table , tr, th{border:1px solid #333333;padding:2px;}</style></head><body><table ><tr><th>Col1</th><th>Col2</th><th>Col3</th><th>Col4</th><th>Col5</th></tr>"
set aTable to "<tr><td>%@</td><td> </td><td>%@</td><td>%@</td><td>%@</td></tr>"
set aFooter to "</table></body></html>"

set aHTMLres to retTableHTML(aList, aHeader, aTable, aFooter) of me

on retTableHTML(aList, aHeaderHTML, aTableHTML, aFooterHTML)
  set allHTML to current application’s NSMutableString’s stringWithString:aHeaderHTML
  
  
set aCounter to 1
  
repeat with i in aList
    set j to contents of i
    
set tmpList to (current application’s NSArray’s arrayWithArray:j)
    
set aRowHTML to current application’s NSString’s stringWithFormat_(aTableHTML, (aCounter as string), tmpList’s objectAtIndex:0, tmpList’s objectAtIndex:1, tmpList’s objectAtIndex:2)
    (
allHTML’s appendString:aRowHTML)
    
set aCounter to aCounter + 1
  end repeat
  
  (
allHTML’s appendString:aFooterHTML)
  
  
allHTML
end retTableHTML

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

指定のテキストからHTMLタグを除去(NSScanner)

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:指定のテキストからHTMLタグを除去(NSScanner)
— Created 2016-12-12 by Shane Stanley
— Modified 2016-12-14 by edama2
— Modified 2017-11-28 by Takaaki Naganoya
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

–set aStr to read (choose file)
set aStr to "<a>repeat</a>~end repeat<BR>"
set aRes to (trimStrFromTo(aStr, "<", ">") of me)
–>  "repeat~end repeat"

on trimStrFromTo(aParamStr, fromStr, toStr)
  set theScanner to current application’s NSScanner’s scannerWithString:aParamStr
  
set anArray to current application’s NSMutableArray’s array()
  
  
repeat until (theScanner’s isAtEnd as boolean)
    set {theResult, theKey} to theScanner’s scanUpToString:fromStr intoString:(reference)
    
    
theScanner’s scanString:fromStr intoString:(missing value)
    
set {theResult, theValue} to theScanner’s scanUpToString:toStr intoString:(reference)
    
if theValue is missing value then set theValue to ""
    
    
theScanner’s scanString:toStr intoString:(missing value)
    
    
anArray’s addObject:theValue
  end repeat
  
  
if anArray’s |count|() = 0 then return aParamStr
  
  
copy aParamStr to curStr
  
repeat with i in (anArray as list)
    set curStr to repChar(curStr, fromStr & i & toStr, "") of me
  end repeat
  
  
return curStr
end trimStrFromTo

on repChar(aStr, targStr, repStr)
  set aString to current application’s NSString’s stringWithString:aStr
  
set bString to aString’s stringByReplacingOccurrencesOfString:targStr withString:repStr
  
set cString to bString as string
  
return cString
end repChar

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

ASOCでUUID文字列を取得する

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:ASOCでUUID文字列を取得する
— Created 2015-08-14 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aUUID to current application’s NSUUID’s UUID()
–>  (__NSConcreteUUID) <__NSConcreteUUID 0x7f87d814d000> 6737A4CD-D509-42F5-BD0C-DB894127424D

set aStr to aUUID’s UUIDString()
–>  (NSString) "6737A4CD-D509-42F5-BD0C-DB894127424D"

set bStr to aStr as text
–> "6737A4CD-D509-42F5-BD0C-DB894127424D"

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

伏字文字列を作成する v4

Posted on 2月 6, 2018 by Takaaki Naganoya
AppleScript名:伏字文字列を作成する v4
— Created 2015-09-09 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aStr to "これは秘密のInformationです。" –Alphabet & Numeric以外でも置換可能
set bStr to makeUnprintableChars(aStr)
–>  "xxxxxxXxxxxxxxxxxxx。"

on makeUnprintableChars(aStr)
  set anNSString to current application’s NSString’s stringWithString:aStr
  
set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[\\p{Lu}\\p{Lt}\\p{Nd}]" withString:"X" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()}
  
set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[\\p{Ll}\\p{Lm}\\p{Lo}]" withString:"x" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()}
  
return anNSString as text
end makeUnprintableChars

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Post navigation

  • Older posts
  • Newer posts

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

Google Search

Popular posts

  • macOS 13, Ventura(継続更新)
  • アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)v3
  • Xcode 14.2でAppleScript App Templateを復活させる
  • macOS 13 TTS Voice環境に変更
  • UI Browserがgithub上でソース公開され、オープンソースに
  • 2022年に書いた価値あるAppleScript
  • ChatGPTで文章のベクトル化(Embedding)
  • iWork 12.2がリリースされた
  • 新発売:CotEditor Scripting Book with AppleScript
  • macOS 13対応アップデート:AppleScript実践的テクニック集(1)GUI Scripting
  • ChatGPTでchatに対する応答文を取得
  • macOS 13でNSNotFoundバグふたたび
  • 新発売:iWork Scripting Book with AppleScript
  • Finderの隠し命令openVirtualLocationが発見される
  • macOS 13.1アップデートでスクリプトエディタの挙動がようやくまともに
  • あのコン過去ログビューワー(暫定版)
  • AppleScriptの数値変数で指数表示にならない最大値、最小値
  • バカスタム App選手権 入賞!
  • Dockアイコンにプログレスバーを追加 v3
  • macOS 14, Sonoma

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1390) 10.14savvy (586) 10.15savvy (434) 11.0savvy (277) 12.0savvy (187) 13.0savvy (61) CotEditor (60) Finder (47) iTunes (19) Keynote (99) NSAlert (60) NSArray (51) NSBezierPath (18) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (18) NSImage (41) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (117) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (57) Pages (38) Safari (41) Script Editor (20) WKUserContentController (21) WKUserScript (20) WKUserScriptInjectionTimeAtDocumentEnd (18) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • 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
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • 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)
  • 未分類

アーカイブ

  • 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