Date: 2020/06/17 21:38:04 UTC-07:00
Type: Denizen Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
TabComplete:
type: procedure
debug: false
definitions: command|data|raw_args
script:
- define raw_args <[raw_args]||<empty>>
- define path <[command]>
- define script <script[<[data]>]>
- define 'args:|:<[raw_args].split[ ]>'
- if <[args].get[1]> == <empty>:
- define args:!|:<[args].remove[1]>
- define argsSize <[args].size>
- define newArg <[raw_args].ends_with[<&sp>].or[<[raw_args].is[==].to[<empty>]>]>
- if <[newArg]>:
- define argsSize:+:1
- repeat <[argsSize].sub[1]> as:index:
- define value <[args].get[<[index]>]>
- define keys:!|:<[script].list_keys[<[path]>]>
- define permLockedKeys:!|:<[keys].filter[starts_with[?]]>
- define keys:<-:<[permLockedKeys]>
- if <[value]> == <empty>:
- foreach next
- if <[keys].contains[<[value]>]>:
- define path <[path]>.<[value]>
- else:
- if <[permLockedKeys].size> > 0:
- define permMap '<[permLockedKeys].parse[after[ ]].map_with[<[permLockedKeys].parse[before[ ]]>]>'
- define perm <[permMap].get[<[value]>]||null>
- if <[perm]> != null && <player.has_permission[<[perm].after[?]>]>:
- define path '<[path]>.<[perm]> <[value]>'
- repeat next
- define default <[keys].filter[starts_with[_]].get[1]||null>
- if <[default]> == null:
- determine <list[]>
- define path <[path]>.<[default]>
- if <[script].data_key[<[path]>]> == end:
- determine <list[]>
- foreach <[script].list_keys[<[path]>]>:
- if <[value].starts_with[_]>:
- define value <[value].after[_]>
- if <[value].starts_with[*]>:
- define ret:|:<proc[<[data]>_<[value].after[*]>].context[<[args]>]>
- else if <[value].starts_with[?]>:
- define perm '<[value].before[ ].after[?]>'
- if <player.has_permission[<[perm]>]>:
- define 'ret:|:<[value].after[ ]>'
- else:
- define ret:->:<[value]>
- if !<definition[ret].exists>:
- determine <list[]>
- if <[newArg]>:
- determine <[ret]>
- determine <[ret].filter[starts_with[<[args].last>]]>