]>
Commit | Line | Data |
---|---|---|
321ecaca BB |
1 | let s:segment_mods = [] |
2 | ||
3 | function! Pl#Mod#AddSegmentMod(action, properties) " {{{ | |
4 | call add(s:segment_mods, [a:action, a:properties]) | |
5 | endfunction " }}} | |
6 | function! Pl#Mod#ApplySegmentMods(theme) " {{{ | |
7 | let theme = deepcopy(a:theme) | |
8 | ||
9 | for mod in s:segment_mods | |
10 | let [action, properties] = mod | |
11 | ||
12 | " We have to loop through the segments instead of using index() because some | |
13 | " segments are lists! | |
14 | let target_seg_idx = -1 | |
15 | ||
16 | for i in range(0, len(theme) - 1) | |
17 | unlet! segment | |
18 | let segment = theme[i] | |
19 | ||
20 | if type(segment) == type(properties.target_segment) && segment == properties.target_segment | |
21 | let target_seg_idx = i | |
22 | break | |
23 | endif | |
24 | endfor | |
25 | ||
26 | if action == 'insert_segment' | |
27 | " Insert segment | |
28 | if target_seg_idx != -1 | |
29 | call insert(theme, properties.new_segment, (properties.where == 'before' ? target_seg_idx : target_seg_idx + 1)) | |
30 | endif | |
31 | elseif action == 'remove_segment' | |
32 | " Remove segment | |
33 | if target_seg_idx != -1 | |
34 | call remove(theme, target_seg_idx) | |
35 | endif | |
36 | endif | |
37 | endfor | |
38 | ||
39 | return theme | |
40 | endfunction " }}} |