ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/Parse.pm
Revision: 1.9
Committed: Tue Feb 27 11:59:42 2007 UTC (18 years, 2 months ago) by sashby
Content type: text/plain
Branch: MAIN
Changes since 1.8: +33 -159 lines
Log Message:
Merged from XML branch to HEAD. Start release prep.

File Contents

# User Rev Content
1 williamc 1.1 #
2     # Parse.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     # -----------
8     # maintain parse configurations
9     #
10     # Interface
11     # ---------
12 sashby 1.6 # new() : A new Parse object
13 williamc 1.1 # addtag(name,start,text,end,$object) : Add a new tag
14 sashby 1.6 # addgrouptags() : add <Group> tag functionality
15     # addignoretags() : add <ignore> tag functionality
16 williamc 1.1 # 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 sashby 1.6 # line() : return the current linenumber in the file
21 williamc 1.1 # tagstartline() : return the linenumber of the last tag opening
22 sashby 1.6 # includeparse(Parse) : include the settings from another parse object
23 williamc 1.2 # tags() : return list of defined tags
24 williamc 1.3 # cleartags() : clear of all tags
25 sashby 1.6 # opencontext(name) : open a parse context
26 williamc 1.4 # closecontext(name) : close a parse context
27     # includecontext(name) : Process when in a given context
28     # excludecontext(name) : No Processing when given context
29     # contexttag(tagname) : Register the tagname as one able to change context
30     # if not registerd - the close tag will be ignored
31     # too if outside of the specified context!
32 williamc 1.1
33     package ActiveDoc::Parse;
34     require 5.004;
35 sashby 1.9 use XML::Parser;
36 williamc 1.1
37 sashby 1.9 sub new()
38 sashby 1.6 {
39     my $class=shift;
40     $self={};
41     bless $self, $class;
42 sashby 1.9 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 sashby 1.6 return $self;
50     }
51    
52 sashby 1.9 sub parsefilelist()
53 sashby 1.6 {
54     my $self=shift;
55 sashby 1.9 my ($files)=@_;
56     print __PACKAGE__."::parsefilelist(): Not used?\n";
57 sashby 1.6 }
58    
59 sashby 1.9 sub parse()
60 sashby 1.6 {
61     my $self=shift;
62 sashby 1.9 my ($file)=@_;
63     $self->{data} = $self->{xmlparser}->parse($self->getfilestring_($file));
64     return $self;
65 sashby 1.6 }
66    
67 sashby 1.9 sub getfilestring_()
68 sashby 1.7 {
69     my $self=shift;
70 sashby 1.9 my ($file)=@_;
71     open (IN, "< $file") or die __PACKAGE__.": Cannot read file $file: $!\n";
72     my $filestring = join("", <IN>);
73     close (IN) or die __PACKAGE__.": Cannot read file $file: $!\n";
74     # Strip spaces at the beginning and end of the line:
75     $filestring =~ s/^\s+//g;
76     $filestring =~ s/\s+$//g;
77     # Finally strip the newlines:
78     $filestring =~ s/\n//g;
79     # Strip out spaces in between tags:
80     $filestring =~ s/>\s+</></g;
81     $self->{filestring}=$filestring;
82     return $filestring;
83 sashby 1.7 }
84    
85 sashby 1.9 sub data()
86 sashby 1.6 {
87     my $self=shift;
88 sashby 1.9 return $self->{data}->[0];
89 sashby 1.6 }
90    
91     sub includeparse
92     {
93     my $self=shift;
94     my $obj=shift;
95     my $tag;
96    
97     # copy the tags from the remote parse object
98     foreach $tag ( $obj->tags() )
99     {
100     $self->addtag($tag,$obj->{tags}->tagsettings($tag));
101     }
102     }
103    
104     sub addtag
105     {
106     my $self=shift;
107     $self->{tags}->addtag(@_);
108     }
109    
110 sashby 1.9 1;