View/Edit #52:lmth

Switch to edit mode.

Name(s): lmth
1:  "Inputs a string and parses it for any unclosed HTML tags."
2:  "Eg.  <A href=index.html>link  =>  </A>"
3:  victim = tostr(@args[1])
4:  a = ""
5:  "Strip out all comments"
6:  while (start = index(victim, "<!--"))
7:    close = index(victim[start + 4..$], "-->")
8:    if (!close)
9:      "Unclosed comment."
10:     a = "-->"
11:     victim[start..$] = ""
12:   else
13:     victim[start..close + start + 5] = ""
14:   endif
15: endwhile
16: opens = {}
17: while ((c = index(victim, "<")) && c != length(victim))
18:   nc = victim[c + 1]
19:   st = victim[c + 1..$]
20:   et = c + 1 + index(victim[c + 2..$], ">")
21:   if (nc == " " || nc == "<")
22:     "Ignore a lone '<'"
23:     victim = st
24:   elseif (!index(st, ">"))
25:     "Tag doesn't end"
26:     a = a + ">"
27:     tag = $string_utils:explode(victim[c + 1..$])[1]
28:     if (!(tag in this.single_tags))
29:       opens = {@opens, tag}
30:     endif
31:     victim = ""
32:   elseif (nc == "/")
33:     "Close tag detected"
34:     tag = $string_utils:explode(victim[c + 2..et - 1])[1]
35:     opens = setremove(opens, tag)
36:     victim = victim[et + 1..$]
37:   else
38:     "Open tag detected"
39:     tag = $string_utils:explode(victim[c + 1..et - 1])[1]
40:     if (!(tag in this.single_tags))
41:       opens = {@opens, tag}
42:     endif
43:     victim = victim[et + 1..$]
44:   endif
45: endwhile
46: b = ""
47: for x in (opens)
48:   b = "</" + x + ">" + b
49: endfor
50: return a + b
51: "Last modified by Dax (#789) on Mon Aug 28 15:18:43 2000 MDT."

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

You are not logged in.

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