… | |
… | |
23 | sub is_prefix_of($@) { |
23 | sub is_prefix_of($@) { |
24 | my ($node, @path) = @_; |
24 | my ($node, @path) = @_; |
25 | |
25 | |
26 | return 1 unless @path; |
26 | return 1 unless @path; |
27 | |
27 | |
28 | my $kw = pop @path; |
28 | my $kw = lc pop @path; |
29 | |
29 | |
30 | $node = $node->{parent} |
30 | $node = $node->{parent} |
31 | or return 0; |
31 | or return 0; |
32 | |
32 | |
33 | return ! ! grep $_ eq $kw, @{ $node->{kw} }; |
33 | return ! ! grep $_ eq $kw, @{ $node->{kw} }; |
… | |
… | |
36 | sub find(@) { |
36 | sub find(@) { |
37 | my (@path) = @_; |
37 | my (@path) = @_; |
38 | |
38 | |
39 | return unless @path; |
39 | return unless @path; |
40 | |
40 | |
41 | my $kw = pop @path; |
41 | my $kw = lc pop @path; |
42 | |
42 | |
43 | # TODO: make sure results are unique |
43 | # TODO: make sure results are unique |
44 | |
44 | |
45 | grep { is_prefix_of $_, @path } |
45 | grep { is_prefix_of $_, @path } |
46 | map @$_, |
46 | map @$_, |
… | |
… | |
145 | link => sub { |
145 | link => sub { |
146 | my ($par, $text, $link) = @_; |
146 | my ($par, $text, $link) = @_; |
147 | |
147 | |
148 | push @{ $par->{widget} }, new CFPlus::UI::Label |
148 | push @{ $par->{widget} }, new CFPlus::UI::Label |
149 | markup => "<span foreground='#ffff00'>↺</span><span foreground='#c0c0ff' underline='single'>" . (CFPlus::asxml $text) . "</span>", |
149 | markup => "<span foreground='#ffff00'>↺</span><span foreground='#c0c0ff' underline='single'>" . (CFPlus::asxml $text) . "</span>", |
150 | size => 0.8, |
150 | fontsize => 0.8, |
151 | can_hover => 1, |
151 | can_hover => 1, |
152 | can_events => 1, |
152 | can_events => 1, |
153 | padding_x => 0, |
153 | padding_x => 0, |
154 | padding_y => 0, |
154 | padding_y => 0, |
155 | tooltip => "Go to <i>" . (CFPlus::asxml $link) . "</i>", |
155 | tooltip => "Go to <i>" . (CFPlus::asxml $link) . "</i>", |