Good - I'm glad that meets the need.
Tidied up a little here for legibility, in case you need to adjust it.
(Forum settings no longer permit updating earlier posts)
Code:
property pTitle : "Remaining task counts for contexts"
property pVer : "0.04"
property pPrefix : "@"
property pDelim : " "
property pIndent : tab
property pblnToClipboard : true
property pblnSubTreeCounts : true
on run
tell application id "OFOC" to set {str, lngTotal} to my ListContexts(contexts of default document, "")
set str to str & linefeed & "TOTAL: " & lngTotal as string
if pblnToClipboard then set the clipboard to str
display dialog str buttons {"OK"} default button "OK" with title pTitle & " ver. " & pVer
end run
on ListContexts(lstContexts, strIndent)
set {str, lngCount, lngTotal} to {"", 0, 0}
tell application id "OFOC"
repeat with oContext in lstContexts
tell oContext
-- COUNT AND REPORT FOR SUB-TREE
set {strSub, lngSub} to my ListContexts(contexts, strIndent & pIndent)
-- COUNT ASSIGNMENTS TO THIS LEVEL (SUBTRACTING SUBTREE ASSIGNMENTS)
set lngCount to remaining task count
set lngThisLevel to lngCount - lngSub
-- REPORT ON THIS LEVEL, APPENDING SUB-TREE REPORT
set strSubTotal to ""
if (pblnSubTreeCounts and (lngSub > 0)) then set strSubTotal to " (+" & (lngSub as string) & " in sub contexts)"
set str to (str & strIndent & pPrefix & its name & pDelim & lngThisLevel as string) & strSubTotal & linefeed & strSub
end tell
-- AND KEEP A RUNNING TALLY FOR REPORTING TO THE LEVEL ABOVE
set lngTotal to lngTotal + lngCount
end repeat
return {str, lngTotal}
end tell
end ListContexts