@verb #280:"token2tree token2tree_suspended" this none this rxdo #789 @program #280:"token2tree token2tree_suspended" this none this "Copied from Base Rendering Object (#280):token2tree by Dax (#789)Mar 14 16:20:06 2000" "Copied from HTML utilities (#52):token2tree by Dax (#789)Jan 4 12:11:19 2000" "Converts a stream of tokens into a formatting tree." ":token2tree({'
    ', '
  1. ', 'Come ', '', 'here', '', '! ', '
'}, 0)" " => {{{'
    ', {'
  1. '}, 'Come ', {'', 'here'}, '! '}}}" {tokens, endtag} = args tree = {} while (tokens) token = tokens[1] if (token && token[1] == "<") " if (!(token[2..(token[$] == \">\") ? (index(token, \" \") || $) - 1 | $] in this.valid_tags))" " \"Not a tag\";" " tokens = listdelete(tokens, 1);" " tree = {@tree, strsub(strsub(token, \"<\", \"<\"), \">\", \">\")};" " else" "We have a tag" if (token[$] != ">") "Invalid tag, missing >. Let's add it and continue." token = token + ">" endif name = token[2..index(token, " ") || $ - 1] if (name in $html_utils.single_tags) "We have a tag that doesn't need to close (like )" tokens = listdelete(tokens, 1) tree = {@tree, {token}} elseif (name == endtag) "We have our master end tag." return {tree, tokens[2..$]} elseif (name && name[1] == "/") "We have an unnecessary close tag (like

    )" tokens = listdelete(tokens, 1) else "We have a tag that should have a close partner somewhere." "{branch, ?tokens = {}} = $html_utils:(verb)(tokens[2..$], \"/\" + name);" "'s closing tag is not --Cecil" {branch, ?tokens = {}} = $html_utils:(verb)(tokens[2..$], "/" + `name[1..(index(name, " ") || $ + 1) - 1] ! E_RANGE => name') tree = {@tree, {token, @branch}} endif " endif" else "We have text" tokens = listdelete(tokens, 1) tree = {@tree, token} endif $command_utils:suspend_if_needed(0) "I know Dax doesn't want suspends, but.. this shouldn't ALWAYS suspend, should it? --Cecil" endwhile return {tree} "Last modified by Cecil (#7407) on Sun Sep 9 16:01:23 2001 MDT." .