You probably want to first collect all the texts to highlight and then
highlight all at once:
-- Prompt the user to select a text file
set filePath to choose file with prompt "Please select a text file:" of type
{"txt"}
-- Read the content of the selected text file
set inputText to read file filePath as «class utf8»
-- Function to extract the first 7 words from each text block using a regular
expression
on extractFirst7WordsFromBlocks(inputText)
set wordsLists to {}
-- Set text item delimiters to find the text blocks
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to "***"
-- Split the text into items, each item corresponds to a text block
set textItems to text items of inputText
-- Regular expression to match 7 consecutive words
set regex to "(?i)\\b\\w+\\b(\\W+\\w+){0,6}"
-- Iterate through each text block and extract the first 7 words using
a regular expression
repeat with i from 2 to count of textItems by 2
set textBlock to item i of textItems
set wordsList to extractWordsWithRegex(textBlock, regex)
-- Search for the text in the open PDF file in Skim
if wordsList is not equal to "" then
set wordsLists to wordsLists & {wordsList}
end if
end repeat
set AppleScript's text item delimiters to oldDelimiters
return wordsLists
end extractFirst7WordsFromBlocks
-- Helper function to extract words using a regular expression
on extractWordsWithRegex(textBlock, regex)
try
set wordMatches to do shell script "echo " & quoted form of
textBlock & " | grep -oE " & quoted form of regex
set wordsList to paragraphs of wordMatches
set resultText to item 1 of wordsList
on error
set resultText to ""
end try
return resultText
end extractWordsWithRegex
-- Helper function to set the search term in Skim and highlight the found text
on setSearchAndHighlightInSkim(searchTexts)
tell application "Skim"
activate
if (count of documents) is 0 then
beep
display dialog "No documents found." buttons {"•"}
default button 1 giving up after 3
return
end if
set noteType to my chooseNoteType({"Highlight"})
if noteType is 0 then return
set numberOfMatches to 0
tell document 1
repeat with searchText in searchTexts
set theSel to find text searchText
repeat while theSel is not {}
set numberOfMatches to numberOfMatches
+ 1
set theNote to make note with data
theSel with properties {type:noteType}
set text of theNote to searchText
set theSel to find text searchText from
theSel
end repeat
end repeat
end tell
beep
display dialog "Done selecting " & numberOfMatches & "
occurrences of \"" & searchText & "\"." buttons {"•"} default button 1 giving
up after 3
end tell
end setSearchAndHighlightInSkim
-- Helper function to choose the note type in Skim
on chooseNoteType(typeList)
tell application "Skim"
set noteTypeString to "Highlight"
return highlight note
end tell
end chooseNoteType
-- Call the function
set searchTexts to extractFirst7WordsFromBlocks(inputText)
if (count of searchTexts) is not 0 then
setSearchAndHighlightInSkim(searchTexts)
end if
Christiaan
_______________________________________________
Skim-app-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-users