Rebol Programming/collect-words

= USAGE: = COLLECT-WORDS block /deep /set /ignore words

= DESCRIPTION: = Collect unique words used in a block (used for context construction).

COLLECT-WORDS is a function value. = ARGUMENTS =
 * block -- (Type: block)

= REFINEMENTS =
 * /deep -- Include nested blocks
 * /set -- Only include set-words
 * /ignore -- Ignore prior words
 * words -- Words to ignore (Type: object port block)

= SOURCE CODE = collect-words: func [ {Collect unique words used in a block (used for context construction).} block [block!] /deep "Include nested blocks" /set "Only include set-words" /ignore "Ignore prior words" words [object! port! block!] "Words to ignore" /local rule word blk w ][ deep: either deep set-path! | lit-path! | into rule [any-block!] word: either set [set-word!] [any-word!] blk: [] parse block rule: [ set w word (insert tail blk to-word to-string w) | deep | skip ]    also either ignore [ unless block? words [words: words-of words] difference blk intersect blk words ] [       unique blk ] (clear blk set [block words] none) ]