View/Edit #52:token2tree token2tree_suspended

Switch to edit mode.

Name(s): token2tree token2tree_suspended
1:  "Converts a stream of tokens into a formatting tree."
2:  ":token2tree({'<OL>', '<LI>', 'Come ', '<B>', 'here', '</B>', '! ', '</OL>'}, 0)"
3:  " => {{{'<OL>', {'<LI>'}, 'Come ', {'<B>', 'here'}, '! '}}}"
4:  {tokens, endtag} = args
5:  susp = !!index(verb, "suspended")
6:  tree = {}
7:  while (tokens)
8:    susp && $cmd_utils:suspend_if_needed()
9:    token = tokens[1]
10:   if (token && token[1] == "<")
11:     "We have a tag"
12:     if (token[$] != ">")
13:       "Invalid tag, missing >.  Let's add it and continue."
14:       token = token + ">"
15:     endif
16:     name = token[2..(index(token, " ") || $) - 1]
17:     if (name in this.single_tags)
18:       "We have a tag that doesn't need to close (like <IMG>)"
19:       tokens = listdelete(tokens, 1)
20:       tree = {@tree, {token}}
21:     elseif (name == endtag)
22:       "We have our master end tag."
23:       return {tree, tokens[2..$]}
24:     elseif (name && name[1] == "/")
25:       "We have an unnecessary close tag (like </P>)"
26:       tokens = listdelete(tokens, 1)
27:     else
28:       "We have a tag that should have a close partner somewhere."
29:       "{branch, ?tokens = {}} = this:(verb)(tokens[2..$], \"/\" + name);"
30:       "<FOO BAR=BAZ>'s closing tag is </FOO> not </FOO BAR=BAZ> --Cecil"
31:       {branch, ?tokens = {}} = this:(verb)(tokens[2..$], "/" + name)
32:       tree = {@tree, {token, @branch}}
33:     endif
34:   else
35:     "We have text"
36:     tokens = listdelete(tokens, 1)
37:     tree = {@tree, token}
38:   endif
39: endwhile
40: return {tree}
41: "Last modified by manta (#7165) on Thu Oct 26 17:07:18 2000 MDT."

Verb arguments: this none this
Verb perms: Readable eXecutable NOT-Debug
Verb owned by: Dax (#789)

You are not logged in.

[home | help | who | search | setup | code]