9 |
|
# |
10 |
|
# Interface |
11 |
|
# --------- |
12 |
< |
# new() : A new Parse object |
12 |
> |
# new() : A new Parse object |
13 |
|
# addtag(name,start,text,end,$object) : Add a new tag |
14 |
< |
# addgrouptags() : add <Group> tag functionality |
15 |
< |
# addignoretags() : add <ignore> tag functionality |
14 |
> |
# addgrouptags() : add <Group> tag functionality |
15 |
> |
# addignoretags() : add <ignore> tag functionality |
16 |
|
# parse(filename,[streamhandle], [streamexcludetag]) : |
17 |
|
# parse the given file - turn on the stream |
18 |
|
# function of the switcher if a filehandle |
19 |
|
# supplied as a second argument |
20 |
< |
# line() : return the current linenumber in the file |
20 |
> |
# line() : return the current linenumber in the file |
21 |
|
# tagstartline() : return the linenumber of the last tag opening |
22 |
< |
# includeparse(Parse) : include the settings from another parse object |
22 |
> |
# includeparse(Parse) : include the settings from another parse object |
23 |
|
# tags() : return list of defined tags |
24 |
|
# cleartags() : clear of all tags |
25 |
< |
# opencontext(name) : open a parse context |
25 |
> |
# opencontext(name) : open a parse context |
26 |
|
# closecontext(name) : close a parse context |
27 |
|
# includecontext(name) : Process when in a given context |
28 |
|
# excludecontext(name) : No Processing when given context |
36 |
|
use ActiveDoc::Switcher; |
37 |
|
use ActiveDoc::TagContainer; |
38 |
|
use ActiveDoc::GroupChecker; |
39 |
+ |
use Utilities::Verbose; |
40 |
|
|
41 |
< |
sub new { |
41 |
< |
my $class=shift; |
42 |
< |
$self={}; |
43 |
< |
bless $self, $class; |
44 |
< |
$self->init(); |
45 |
< |
return $self; |
46 |
< |
} |
47 |
< |
|
48 |
< |
sub init { |
49 |
< |
my $self=shift; |
50 |
< |
$self->{gc}=GroupChecker->new(); |
51 |
< |
$self->{gc}->include("all"); |
52 |
< |
$self->{tags}=ActiveDoc::TagContainer->new(); |
53 |
< |
} |
54 |
< |
|
55 |
< |
sub parse { |
56 |
< |
my $self=shift; |
57 |
< |
my $file=shift; |
58 |
< |
|
59 |
< |
# basic setup of switcher |
60 |
< |
$self->{switch}=ActiveDoc::Switcher->new($file); |
61 |
< |
$self->{switch}->usegroupchecker($self->{gc}); |
62 |
< |
$self->{switch}->usetags($self->{tags}); |
63 |
< |
|
64 |
< |
# do we need to switch on the streamer? |
65 |
< |
if ( @_ ) { |
66 |
< |
$fh=shift; |
67 |
< |
$self->{switch}->stream($fh); |
68 |
< |
foreach $tag ( @_ ) { |
69 |
< |
$self->{switch}->streamexclude($tag); |
70 |
< |
} |
71 |
< |
} |
72 |
< |
|
73 |
< |
# parse |
74 |
< |
$self->{switch}->parse(); |
75 |
< |
undef $self->{switch}; |
76 |
< |
} |
77 |
< |
|
78 |
< |
sub line { |
79 |
< |
my $self=shift; |
80 |
< |
if ( defined $self->{switch} ) { |
81 |
< |
return $self->{switch}->line(); |
82 |
< |
} |
83 |
< |
return undef; |
84 |
< |
} |
85 |
< |
|
86 |
< |
sub tagstartline { |
87 |
< |
my $self=shift; |
88 |
< |
if ( defined $self->{switch} ) { |
89 |
< |
return $self->{switch}->tagstartline(); |
90 |
< |
} |
91 |
< |
return undef; |
92 |
< |
} |
93 |
< |
|
94 |
< |
sub includeparse { |
95 |
< |
my $self=shift; |
96 |
< |
my $obj=shift; |
97 |
< |
|
98 |
< |
my $tag; |
99 |
< |
# copy the tags from the remote parse object |
100 |
< |
foreach $tag ( $obj->tags() ) { |
101 |
< |
$self->addtag($tag,$obj->{tags}->tagsettings($tag)); |
102 |
< |
} |
103 |
< |
# now the group settings |
104 |
< |
} |
105 |
< |
|
106 |
< |
sub addtag { |
107 |
< |
my $self=shift; |
108 |
< |
$self->{tags}->addtag(@_); |
109 |
< |
} |
110 |
< |
|
111 |
< |
sub addgrouptags { |
112 |
< |
my $self=shift; |
113 |
< |
$self->{tags}->addtag("Group", \&Group_Start,$self, |
114 |
< |
"", $self, \&Group_End, $self); |
115 |
< |
$self->{tags}->setgrouptag("Group"); |
116 |
< |
} |
41 |
> |
@ISA=qw(Utilities::Verbose); |
42 |
|
|
43 |
< |
sub addignoretags { |
44 |
< |
my $self=shift; |
45 |
< |
$self->{gc}->exclude("ignore"); |
46 |
< |
$self->{tags}->addtag("Ignore", \&Ignore_Start, $self, |
47 |
< |
"",$self, \&Ignore_End,$self); |
48 |
< |
$self->{tags}->setgrouptag("Ignore"); |
49 |
< |
} |
50 |
< |
|
51 |
< |
sub contexttag { |
52 |
< |
my $self=shift; |
53 |
< |
$self->{tags}->setgrouptag(shift); |
54 |
< |
} |
55 |
< |
|
56 |
< |
sub opencontext { |
57 |
< |
my $self=shift; |
58 |
< |
$self->{gc}->opencontext(shift); |
59 |
< |
} |
60 |
< |
|
61 |
< |
sub closecontext { |
62 |
< |
my $self=shift; |
63 |
< |
$self->{gc}->closecontext(shift); |
64 |
< |
} |
65 |
< |
|
66 |
< |
sub includecontext { |
67 |
< |
my $self=shift; |
68 |
< |
my $name=shift; |
69 |
< |
|
70 |
< |
$self->{gc}->unexclude($name); |
71 |
< |
$self->{gc}->include($name); |
72 |
< |
} |
73 |
< |
|
74 |
< |
sub excludecontext { |
75 |
< |
my $self=shift; |
76 |
< |
my $name=shift; |
77 |
< |
$self->{gc}->exclude($name); |
78 |
< |
$self->{gc}->uninclude($name); |
79 |
< |
} |
80 |
< |
|
81 |
< |
sub cleartags { |
82 |
< |
my $self=shift; |
83 |
< |
$self->{tags}->cleartags(); |
84 |
< |
} |
43 |
> |
sub new |
44 |
> |
{ |
45 |
> |
my $class=shift; |
46 |
> |
$self={}; |
47 |
> |
bless $self, $class; |
48 |
> |
$self->init(); |
49 |
> |
return $self; |
50 |
> |
} |
51 |
> |
|
52 |
> |
sub init |
53 |
> |
{ |
54 |
> |
my $self=shift; |
55 |
> |
$self->{gc}=GroupChecker->new(); |
56 |
> |
$self->{gc}->include("all"); |
57 |
> |
$self->{tags}=ActiveDoc::TagContainer->new(); |
58 |
> |
} |
59 |
> |
|
60 |
> |
sub parse |
61 |
> |
{ |
62 |
> |
my $self=shift; |
63 |
> |
my $file=shift; |
64 |
> |
|
65 |
> |
# basic setup of switcher |
66 |
> |
$self->{switch}=ActiveDoc::Switcher->new($file); |
67 |
> |
$self->{switch}->usegroupchecker($self->{gc}); |
68 |
> |
$self->{switch}->usetags($self->{tags}); |
69 |
> |
|
70 |
> |
# do we need to switch on the streamer? |
71 |
> |
if ( @_ ) |
72 |
> |
{ |
73 |
> |
$fh=shift; |
74 |
> |
$self->{switch}->stream($fh); |
75 |
> |
foreach $tag ( @_ ) |
76 |
> |
{ |
77 |
> |
$self->{switch}->streamexclude($tag); |
78 |
> |
} |
79 |
> |
} |
80 |
> |
|
81 |
> |
# -- parse |
82 |
> |
$self->{switch}->parse(); |
83 |
> |
undef $self->{switch}; |
84 |
> |
} |
85 |
> |
|
86 |
> |
sub parsefilelist() |
87 |
> |
{ |
88 |
> |
my $self=shift; |
89 |
> |
my ($files)=@_; |
90 |
> |
# basic setup of switcher |
91 |
> |
$self->{switch}=ActiveDoc::Switcher->new($files); |
92 |
> |
$self->{switch}->usegroupchecker($self->{gc}); |
93 |
> |
$self->{switch}->usetags($self->{tags}); |
94 |
> |
|
95 |
> |
# -- parse |
96 |
> |
$self->{switch}->parsefilelist(); |
97 |
> |
undef $self->{switch}; |
98 |
> |
} |
99 |
> |
|
100 |
> |
sub line |
101 |
> |
{ |
102 |
> |
my $self=shift; |
103 |
> |
|
104 |
> |
if ( defined $self->{switch} ) |
105 |
> |
{ |
106 |
> |
return $self->{switch}->line(); |
107 |
> |
} |
108 |
> |
return undef; |
109 |
> |
} |
110 |
> |
|
111 |
> |
sub tagstartline |
112 |
> |
{ |
113 |
> |
my $self=shift; |
114 |
> |
|
115 |
> |
if ( defined $self->{switch} ) |
116 |
> |
{ |
117 |
> |
return $self->{switch}->tagstartline(); |
118 |
> |
} |
119 |
> |
return undef; |
120 |
> |
} |
121 |
> |
|
122 |
> |
sub includeparse |
123 |
> |
{ |
124 |
> |
my $self=shift; |
125 |
> |
my $obj=shift; |
126 |
> |
my $tag; |
127 |
> |
|
128 |
> |
# copy the tags from the remote parse object |
129 |
> |
foreach $tag ( $obj->tags() ) |
130 |
> |
{ |
131 |
> |
$self->addtag($tag,$obj->{tags}->tagsettings($tag)); |
132 |
> |
} |
133 |
> |
# now the group settings |
134 |
> |
} |
135 |
> |
|
136 |
> |
sub addtag |
137 |
> |
{ |
138 |
> |
my $self=shift; |
139 |
> |
|
140 |
> |
$self->{tags}->addtag(@_); |
141 |
> |
$self->verbose(">> Adding tag ".@_." "); |
142 |
> |
} |
143 |
> |
|
144 |
> |
sub addgrouptags |
145 |
> |
{ |
146 |
> |
my $self=shift; |
147 |
> |
|
148 |
> |
$self->verbose(">> Adding a group tag"); |
149 |
> |
$self->{tags}->addtag("Group", \&Group_Start,$self, |
150 |
> |
"", $self, \&Group_End, $self); |
151 |
> |
$self->{tags}->setgrouptag("Group"); |
152 |
> |
} |
153 |
> |
|
154 |
> |
sub addignoretags |
155 |
> |
{ |
156 |
> |
my $self=shift; |
157 |
> |
|
158 |
> |
$self->verbose(">> Adding an IGNORE tag"); |
159 |
> |
$self->{gc}->exclude("ignore"); |
160 |
> |
$self->{tags}->addtag("Ignore", \&Ignore_Start, $self, |
161 |
> |
"",$self, \&Ignore_End,$self); |
162 |
> |
$self->{tags}->setgrouptag("Ignore"); |
163 |
> |
} |
164 |
> |
|
165 |
> |
sub contexttag |
166 |
> |
{ |
167 |
> |
my $self=shift; |
168 |
> |
my $name=shift; |
169 |
> |
|
170 |
> |
$self->verbose("-- contexttag: ".$name." "); |
171 |
> |
$self->{tags}->setgrouptag($name); |
172 |
> |
} |
173 |
> |
|
174 |
> |
sub opencontext |
175 |
> |
{ |
176 |
> |
my $self=shift; |
177 |
> |
my $name=shift; |
178 |
> |
|
179 |
> |
$self->verbose("-- opencontext: ".$name." "); |
180 |
> |
$self->{gc}->opencontext($name); |
181 |
> |
} |
182 |
> |
|
183 |
> |
sub closecontext |
184 |
> |
{ |
185 |
> |
my $self=shift; |
186 |
> |
my $name=shift; |
187 |
> |
|
188 |
> |
$self->verbose("-- closecontext: ".$name." "); |
189 |
> |
$self->{gc}->closecontext($name); |
190 |
> |
} |
191 |
> |
|
192 |
> |
sub includecontext |
193 |
> |
{ |
194 |
> |
my $self=shift; |
195 |
> |
my $name=shift; |
196 |
> |
|
197 |
> |
$self->verbose("-- includecontext : ".$name." "); |
198 |
> |
$self->{gc}->unexclude($name); |
199 |
> |
$self->{gc}->include($name); |
200 |
> |
} |
201 |
> |
|
202 |
> |
sub excludecontext |
203 |
> |
{ |
204 |
> |
my $self=shift; |
205 |
> |
my $name=shift; |
206 |
> |
$self->verbose("-- excludecontext: ".$name." "); |
207 |
> |
$self->{gc}->exclude($name); |
208 |
> |
$self->{gc}->uninclude($name); |
209 |
> |
} |
210 |
> |
|
211 |
> |
sub cleartags |
212 |
> |
{ |
213 |
> |
my $self=shift; |
214 |
> |
$self->verbose(">> Clearing TAGS"); |
215 |
> |
$self->{tags}->cleartags(); |
216 |
> |
} |
217 |
|
|
218 |
|
sub tags { |
219 |
|
my $self=shift; |
220 |
+ |
$self->verbose("-- tags"); |
221 |
|
return $self->{tags}->tags(); |
222 |
|
} |
223 |
|
|
224 |
|
# --------- Basic Group Related Tags --------------------------------- |
225 |
|
|
226 |
< |
sub Group_Start { |
227 |
< |
my $self=shift; |
228 |
< |
my $name=shift; |
229 |
< |
my $vars=shift; |
230 |
< |
my $lastgp; |
231 |
< |
|
232 |
< |
$lastgp="group::".$$vars{name}; |
233 |
< |
$self->{switch}->checkparam($name, 'name'); |
234 |
< |
$self->{gc}->opencontext("group::".$$vars{name}); |
235 |
< |
|
236 |
< |
} |
237 |
< |
|
238 |
< |
sub Group_End { |
239 |
< |
my $self=shift; |
240 |
< |
my $name=shift; |
241 |
< |
my $lastgp; |
242 |
< |
|
243 |
< |
$self->{gc}->closelastcontext("group"); |
244 |
< |
} |
245 |
< |
|
246 |
< |
sub Ignore_Start { |
247 |
< |
my $self=shift; |
248 |
< |
my $name=shift; |
249 |
< |
|
250 |
< |
$self->{gc}->opencontext("ignore"); |
251 |
< |
} |
252 |
< |
|
253 |
< |
sub Ignore_End { |
254 |
< |
my $self=shift; |
255 |
< |
$self->{gc}->closecontext("ignore"); |
256 |
< |
} |
226 |
> |
sub Group_Start |
227 |
> |
{ |
228 |
> |
my $self=shift; |
229 |
> |
my $name=shift; |
230 |
> |
my $vars=shift; |
231 |
> |
my $lastgp; |
232 |
> |
|
233 |
> |
$self->verbose(">> Group_Start: ".$name." "); |
234 |
> |
$lastgp="group::".$$vars{name}; |
235 |
> |
$self->{switch}->checkparam($name, 'name'); |
236 |
> |
$self->{gc}->opencontext("group::".$$vars{name}); |
237 |
> |
|
238 |
> |
} |
239 |
> |
|
240 |
> |
sub Group_End |
241 |
> |
{ |
242 |
> |
my $self=shift; |
243 |
> |
my $name=shift; |
244 |
> |
my $lastgp; |
245 |
> |
|
246 |
> |
$self->verbose(">> Group_End: ".$name." "); |
247 |
> |
$self->{gc}->closelastcontext("group"); |
248 |
> |
} |
249 |
> |
|
250 |
> |
sub Ignore_Start |
251 |
> |
{ |
252 |
> |
my $self=shift; |
253 |
> |
my $name=shift; |
254 |
> |
|
255 |
> |
$self->verbose(">> Ignore_Start: ".$name." "); |
256 |
> |
$self->{gc}->opencontext("ignore"); |
257 |
> |
} |
258 |
> |
|
259 |
> |
sub Ignore_End |
260 |
> |
{ |
261 |
> |
my $self=shift; |
262 |
> |
|
263 |
> |
$self->verbose(">> Ignore_End: ".$name." "); |
264 |
> |
$self->{gc}->closecontext("ignore"); |
265 |
> |
} |
266 |
|
|