ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/Parse.pm
Revision: 1.11
Committed: Tue Nov 6 14:13:48 2007 UTC (17 years, 6 months ago) by muzaffar
Content type: text/plain
Branch: MAIN
CVS Tags: V1_1_7, V1_1_6, V1_1_5, V1_1_4, V1_1_3, V1_1_2, V1_1_0_reltag8, V1_1_0_reltag7, V1_1_0_reltag6, V1_1_1, V1_1_0_reltag5, V1_1_0_reltag4, V1_1_0_reltag3, V1_1_0_reltag2, V1_1_0_reltag1, V1_1_0_reltag, V1_1_0_cand3, V1_1_0_cand2, V1_1_0_cand1, HEAD_SM_071214, v103_xml_071106
Branch point for: forBinLess_SCRAM, HEAD_BRANCH_SM_071214
Changes since 1.10: +55 -6 lines
Log Message:
xml scram with changes to make it fast

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 muzaffar 1.11 print __PACKAGE__."::parsefilelist(): Not used?\n";
57     }
58    
59     sub filehead ()
60     {
61     my $self=shift;
62     my $data=@_;
63     if (@_)
64     {
65     $self->{filehead}=shift;
66     return;
67     }
68     return $self->{filehead} || "";
69     }
70    
71     sub filetail ()
72     {
73     my $self=shift;
74     if (@_)
75     {
76     $self->{filetail}=shift;
77     return;
78     }
79     return $self->{filetail} || "";
80 sashby 1.6 }
81    
82 sashby 1.9 sub parse()
83 sashby 1.6 {
84     my $self=shift;
85 sashby 1.9 my ($file)=@_;
86 muzaffar 1.11 eval
87     {
88     $self->{data} = $self->{xmlparser}->parse($self->getfilestring_($file));
89     };
90     if ($@)
91     {
92     print STDERR "**** ERROR: Failed parsing file: $file\n$@\n";
93     }
94 sashby 1.9 return $self;
95 sashby 1.6 }
96    
97 sashby 1.9 sub getfilestring_()
98 sashby 1.7 {
99     my $self=shift;
100 sashby 1.9 my ($file)=@_;
101 muzaffar 1.11 my $filestring="";
102     my $read=0;
103     if (($file!~/\.xml$/) && ($file!~/\/\.SCRAM\/InstalledTools\/[^\/]+$/))
104     {
105     eval("use SCRAM::Doc2XML");
106     if (!$@)
107     {
108     my $xmlconvertor = SCRAM::Doc2XML->new();
109     my $xml=$xmlconvertor->convert($file);
110     $filestring = join("",@$xml);
111     $xmlconvertor->clean();
112     $read=1;
113     }
114     }
115     if (!$read)
116     {
117     open (IN, "< $file") or die __PACKAGE__.": Cannot read file $file: $!\n";
118     $filestring = join("", <IN>);
119     close (IN) or die __PACKAGE__.": Cannot read file $file: $!\n";
120     }
121     $filestring = $self->filehead().$filestring.$self->filetail();
122 sashby 1.9 # Strip spaces at the beginning and end of the line:
123     $filestring =~ s/^\s+//g;
124     $filestring =~ s/\s+$//g;
125     # Finally strip the newlines:
126 muzaffar 1.11 #$filestring =~ s/\n//g;
127 sashby 1.9 # Strip out spaces in between tags:
128 muzaffar 1.11 #$filestring =~ s/>\s+</></g;
129 sashby 1.9 $self->{filestring}=$filestring;
130     return $filestring;
131 sashby 1.7 }
132    
133 sashby 1.9 sub data()
134 sashby 1.6 {
135     my $self=shift;
136 sashby 1.9 return $self->{data}->[0];
137 sashby 1.6 }
138    
139     sub includeparse
140     {
141     my $self=shift;
142     my $obj=shift;
143     my $tag;
144    
145     # copy the tags from the remote parse object
146     foreach $tag ( $obj->tags() )
147     {
148     $self->addtag($tag,$obj->{tags}->tagsettings($tag));
149     }
150     }
151    
152     sub addtag
153     {
154     my $self=shift;
155     $self->{tags}->addtag(@_);
156     }
157    
158 sashby 1.9 1;