View Single Post
Just had to make a rough of count some words in a hurry this morning.

For what its worth, I am now using a simpler applescript to do this, which may run a little faster.

It gives 3 word counts:
  1. Whole document
  2. Visible rows
  3. Selected rows

Code:
-- Ver 0.6
-- If value of following property is edited to true,
-- then total word count will be placed in clipboard
property pToClipboard : true
property pDelim : space
property pEOL : return & return


tell application id "com.omnigroup.OmniOutlinerPro3"
	try
		activate
		set oDoc to front document
	on error
		return
	end try
	
	-- Ensure that text item delimiter is SPACE
	-- and prepare to restore any other value at the end of the script
	set strDelim to my text item delimiters
	set my text item delimiters to pDelim
	
	tell front document
		
		set lstAllTopics to topic of rows
		set lstVisblTopics to topic of rows where visible is true
		set lstSeldTopics to topic of selected rows
		
		-- Count total, visible, and selected rows
		set intAllRows to count of lstAllTopics
		set intVisblRows to count of lstVisblTopics
		set intSeldRows to count of lstSeldTopics
		
		-- Count words in all, visible, and selected rows
		set intAllWords to count of words of (lstAllTopics as text)
		if intVisblRows is not equal to intAllRows then
			set blnAllVisible to false
			set intVisblWords to count of words of (lstVisblTopics as text)
		else
			set blnAllVisible to true
			set intVisblWords to intAllWords
		end if
		if intSeldRows is not equal to intAllRows then
			set blnAllSeld to false
			set intSeldRowWords to count of words of (lstSeldTopics as text)
		else
			set blnAllSeld to true
			set intSeldRowWords to intAllWords
		end if
	end tell
end tell

-- Prepare report to user
set strMsg to (intAllWords as text) & pl(intAllWords, "word") & " in total   (" & (intAllRows as text) & pl(intAllRows, "row") & ")" & pEOL
if not blnAllVisible then set strMsg to strMsg & ¬
	(intVisblWords as text) & pl(intVisblWords, "word") & " in " & (intVisblRows as text) & " visible" & pl(intVisblRows, "row") & ")" & pEOL
if not blnAllSeld then
	set strMsg to strMsg & ¬
		(intSeldRowWords as text) & pl(intSeldRowWords, "word") & " in " & (intSeldRows as text) & " selected" & pl(intSeldRows, "row")
end if
try
	display dialog strMsg with icon 1 with title ("WORD COUNT")
end try

set my text item delimiters to strDelim
if pToClipboard then ¬
	tell application id "com.apple.finder" to set the clipboard to (intAllWords as text)

-- Pluralize word unless lngQuant is 1
on pl(lngQuant, strWord)
	if lngQuant is 1 then return " " & strWord
	" " & strWord & "s"
end pl

--

Last edited by RobTrew; 2010-06-25 at 05:32 AM.. Reason: ver 0.6 Minor edits and improvements in reporting