ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/Parse.pm
(Generate patch)

Comparing COMP/SCRAM/src/ActiveDoc/Parse.pm (file contents):
Revision 1.7 by sashby, Fri Dec 10 13:41:36 2004 UTC vs.
Revision 1.10 by sashby, Tue Feb 27 13:33:04 2007 UTC

# Line 30 | Line 30
30   #                         if not registerd - the close tag will be ignored
31   #                         too if outside of the specified context!
32  
33
33   package ActiveDoc::Parse;
34   require 5.004;
35 < use ActiveDoc::Switcher;
37 < use ActiveDoc::TagContainer;
38 < use ActiveDoc::GroupChecker;
39 < use Utilities::Verbose;
40 <
41 < @ISA=qw(Utilities::Verbose);
35 > use XML::Parser;
36  
37 < sub new
37 > sub new()
38     {
39     my $class=shift;
40     $self={};
41     bless $self, $class;
42 <   $self->init();
42 >   my ($dataclass, $parse_style)=@_;
43 >
44 >   $self->{xmlparser} = new XML::Parser (
45 >                                         Style => $parse_style,
46 >                                         ParseParamEnt => 1,
47 >                                         ErrorContext => 3,
48 >                                         Pkg   => $dataclass);  
49     return $self;
50     }
51  
52 < sub init
52 > sub parsefilelist()
53     {
54     my $self=shift;
55 <   $self->{gc}=GroupChecker->new();
56 <   $self->{gc}->include("all");
57 <   $self->{tags}=ActiveDoc::TagContainer->new();
55 >   my ($files)=@_;
56     }
57  
58 < sub parse
58 > sub parse()
59     {
60     my $self=shift;
61 <   my $file=shift;
62 <  
63 <   # 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};
61 >   my ($file)=@_;
62 >   $self->{data} = $self->{xmlparser}->parse($self->getfilestring_($file));
63 >   return $self;
64     }
65  
66 < sub parsefilelist()
66 > sub getfilestring_()
67     {
68     my $self=shift;
69 <   my ($files)=@_;
70 <   # basic setup of switcher
71 <   $self->{switch}=ActiveDoc::Switcher->new($files);  
72 <   $self->{switch}->usegroupchecker($self->{gc});
73 <   $self->{switch}->usetags($self->{tags});
74 <
75 <   # -- parse
76 <   $self->{switch}->parsefilelist();
77 <   undef $self->{switch};
69 >   my ($file)=@_;
70 >   open (IN, "< $file") or die __PACKAGE__.": Cannot read file $file: $!\n";
71 >   my $filestring = join("", <IN>);
72 >   close (IN) or die __PACKAGE__.": Cannot read file $file: $!\n";
73 >   # Strip spaces at the beginning and end of the line:
74 >   $filestring =~ s/^\s+//g;
75 >   $filestring =~ s/\s+$//g;
76 >   # Finally strip the newlines:
77 >   $filestring =~ s/\n//g;
78 >   # Strip out spaces in between tags:
79 >   $filestring =~ s/>\s+</></g;
80 >   $self->{filestring}=$filestring;
81 >   return $filestring;
82     }
83  
84 < sub line
84 > sub data()
85     {
86     my $self=shift;
87 <  
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;
87 >   return $self->{data}->[0];
88     }
89  
90   sub includeparse
# Line 130 | Line 98 | sub includeparse
98        {
99        $self->addtag($tag,$obj->{tags}->tagsettings($tag));
100        }
133   # now the group settings
101     }
102  
103   sub addtag
104     {
105     my $self=shift;
139
106     $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   {
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");
107     }
108  
109 + 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines