Mercurial > hg > soundsoftware-site
comparison .svn/pristine/66/66ab50d76f6f50210c09955e4a16c4d364df47ff.svn-base @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 module CodeRay | |
2 module Encoders | |
3 | |
4 load :filter | |
5 | |
6 # A Filter that selects tokens based on their token kind. | |
7 # | |
8 # == Options | |
9 # | |
10 # === :exclude | |
11 # | |
12 # One or many symbols (in an Array) which shall be excluded. | |
13 # | |
14 # Default: [] | |
15 # | |
16 # === :include | |
17 # | |
18 # One or many symbols (in an array) which shall be included. | |
19 # | |
20 # Default: :all, which means all tokens are included. | |
21 # | |
22 # Exclusion wins over inclusion. | |
23 # | |
24 # See also: CommentFilter | |
25 class TokenKindFilter < Filter | |
26 | |
27 register_for :token_kind_filter | |
28 | |
29 DEFAULT_OPTIONS = { | |
30 :exclude => [], | |
31 :include => :all | |
32 } | |
33 | |
34 protected | |
35 def setup options | |
36 super | |
37 | |
38 @group_excluded = false | |
39 @exclude = options[:exclude] | |
40 @exclude = Array(@exclude) unless @exclude == :all | |
41 @include = options[:include] | |
42 @include = Array(@include) unless @include == :all | |
43 end | |
44 | |
45 def include_text_token? text, kind | |
46 include_group? kind | |
47 end | |
48 | |
49 def include_group? kind | |
50 (@include == :all || @include.include?(kind)) && | |
51 !(@exclude == :all || @exclude.include?(kind)) | |
52 end | |
53 | |
54 public | |
55 | |
56 # Add the token to the output stream if +kind+ matches the conditions. | |
57 def text_token text, kind | |
58 super if !@group_excluded && include_text_token?(text, kind) | |
59 end | |
60 | |
61 # Add the token group to the output stream if +kind+ matches the | |
62 # conditions. | |
63 # | |
64 # If it does not, all tokens inside the group are excluded from the | |
65 # stream, even if their kinds match. | |
66 def begin_group kind | |
67 if @group_excluded | |
68 @group_excluded += 1 | |
69 elsif include_group? kind | |
70 super | |
71 else | |
72 @group_excluded = 1 | |
73 end | |
74 end | |
75 | |
76 # See +begin_group+. | |
77 def begin_line kind | |
78 if @group_excluded | |
79 @group_excluded += 1 | |
80 elsif include_group? kind | |
81 super | |
82 else | |
83 @group_excluded = 1 | |
84 end | |
85 end | |
86 | |
87 # Take care of re-enabling the delegation of tokens to the output stream | |
88 # if an exluded group has ended. | |
89 def end_group kind | |
90 if @group_excluded | |
91 @group_excluded -= 1 | |
92 @group_excluded = false if @group_excluded.zero? | |
93 else | |
94 super | |
95 end | |
96 end | |
97 | |
98 # See +end_group+. | |
99 def end_line kind | |
100 if @group_excluded | |
101 @group_excluded -= 1 | |
102 @group_excluded = false if @group_excluded.zero? | |
103 else | |
104 super | |
105 end | |
106 end | |
107 | |
108 end | |
109 | |
110 end | |
111 end |