View/Edit #7171:@sub* @subst*

Switch to edit mode.

Name(s): @sub* @subst*
1:  $perm_utils:is_called_from(player, "my_huh") || raise(E_PERM)
2:  if (!player.programmer)
3:    return player:tell("Sorry, this is a programming verb. You need to be a programmer to use it.")
4:  endif
5:  if (verb in {"@sub", "@subst"})
6:    substr = argstr
7:  else
8:    substr = tostr(verb[(`verb[1] == "@" ? verb[5..6] | verb[4..5] ! E_RANGE => ""' == "st" ? index(verb, "t") | index(verb, "b")) + 1..$], " ", argstr)
9:  endif
10: if (rindex(substr, substr[1]) < 3)
11:   return player:tell("Malformed substitution. Suggested syntax: @subst/&lt;find&gt;/&lt;replace&gt;/&lt;options&gt;")
12: elseif (length(subs = $string_utils:explode(substr, substr[1])) < 3)
13:   return player:tell("You must specify a line number or a range of lines. (eg: 2, 4-7, 1-$)")
14: endif
15: if (!(open = index(subs[3], "[")) || !(close = index(subs[3], "]")) || open > close)
16:   return player:tell("Malformed options. Use: lines[obj:verb]gc")
17: elseif (!(vloc = $code_utils:parse_verbref(subs[3][open + 1..close - 1])))
18:   return player:tell("Malformed verbname.")
19: elseif (!valid(m = player:my_match_object(vloc[1])) || m:has_verb(vloc[2]) != {m})
20:   return player:tell("That object does not have that verb.")
21: elseif (!caller_perms().wizard && !player.wizard && !(player == (own = verb_info(m, vloc[2])[1])))
22:   return player:tell("You don't have permission to edit that verb.")
23: endif
24: global = index(`subs[3][close + 1] ! E_RANGE => ""', "g")
25: case = index(`subs[3][close + 1] ! E_RANGE => ""', "c")
26: subs[3] = subs[3][1..open - 1]
27: range = (i = index(subs[3], "-")) ? {subs[3][1..i - 1], subs[3][i + 1..$]} | {subs[3], subs[3]}
28: range = {range[1] == "$" ? tostr(length(verb_code(m, vloc[2]))) | range[1], range[2] == "$" ? tostr(length(verb_code(m, vloc[2]))) | range[2]}
29: if (tostr(toint(range[1])) != range[1] || tostr(toint(range[2])) != range[2])
30:   return player:tell("From line ", range[1], " to line ", range[2], "???")
31: endif
32: "well, that's enough parsing for me. on to the actual substitution."
33: vcode = newcode = verb_code(m, vloc[2])
34: suspend(0)
35: range = {toint(range[1]), toint(range[2])}
36: didsubs = 0
37: for x in [range[1]..range[2]]
38:   newcode[x] = strsub(vcode[x], subs[1], subs[2])
39:   if (vcode[x] != newcode[x])
40:     player:tell(x, " : ", newcode[x])
41:     suspend(0)
42:     didsubs = 1
43:   endif
44: endfor
45: didsubs || player:tell("Search string not found!")
46: set_task_perms(player)
47: if (ERR = set_verb_code(m, vloc[2], newcode))
48:   player:tell({"The substitutions caused the following errors:", @ERR})
49: else
50:   player:tell("Verbcode compiled and written to ", m, ":", vloc[2])
51: endif
52: "Last modified by Dax (#789) on Tue May  3 14:13:13 2005 MDT."

Verb arguments: any any any
Verb perms: Readable NOT-Debug
Verb owned by: Cecil (#7407)

You are not logged in.

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