ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/ActiveDoc.pm
Revision: 1.29
Committed: Mon Dec 3 19:02:04 2001 UTC (23 years, 5 months ago) by sashby
Content type: text/plain
Branch: MAIN
CVS Tags: V1_0_3-p4, V1_0_3-p3, V1_0_3-p2, before110xmlBRmerge, V1_0_4p1, V1_0_3-p1, V1_0_3, V1_0_2, V1_0_2_p1, v102p1, V1_0_1, V1_0_0, V1_pre0, SCRAM_V1, SCRAMV1_IMPORT, V0_19_7, V0_19_6, V0_19_6p1, V0_19_5, SFATEST, V0_19_4, V0_19_4_pre3, V0_19_4_pre2, V0_19_4_pre1, V0_19_3, V0_19_2, V0_19_1
Branch point for: v103_with_xml, v103_branch, V1_pre1, SCRAM_V1_BRANCH, V0_19_4_B
Changes since 1.28: +0 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 williamc 1.1 #
2 williamc 1.6 # ActiveDoc.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7 williamc 1.1 #
8     # Interface
9     # ---------
10 williamc 1.26 # new(ActiveStore) : A new ActiveDoc object
11 williamc 1.6 # url() : Return/set the docs url - essential
12     # file() : Return the local filename of document
13 williamc 1.21 # ProcessFile() : Return the filename of PreProcessed document
14 williamc 1.6 #
15 williamc 1.21 # parent() : return the object ref of the calling parent
16 williamc 1.6 # getfile(url) : get a processedfile object given a url
17 williamc 1.9 # activatedoc(url) : Return the object ref for a doc described by the given url
18 williamc 1.6 #
19     # -- error methods --
20     # error(string) : Report an general error to the user
21     # parseerror(string) : Report an error during parsing a file
22 williamc 1.26 # line([linenumber]) : Return the line number of the document
23     # and the ProcessedFileObj it is in corresponding to the
24     # supplied number of the expanded document
25 sashby 1.27 # If no number supplied - the currentparse number will be
26     # used
27 williamc 1.2
28     package ActiveDoc::ActiveDoc;
29 williamc 1.6 require 5.004;
30 williamc 1.26 use ActiveDoc::SimpleURLDoc;
31 williamc 1.6 use ActiveDoc::PreProcessedFile;
32 williamc 1.26 use Utilities::Verbose;
33 williamc 1.6
34 williamc 1.26 @ISA = qw(ActiveDoc::SimpleURLDoc Utilities::Verbose);
35 williamc 1.6
36     sub new {
37     my $class=shift;
38 williamc 1.26 my $self={};
39 williamc 1.6 bless $self, $class;
40 williamc 1.26 $self->{Ostore}=shift;
41     $self->cache($self->{Ostore}->cache());
42     $self->{dbstore}=$self->{Ostore};
43     $self->_initdoc("doc",@_);
44 williamc 1.6 return $self;
45 williamc 1.1 }
46    
47 williamc 1.6 sub url {
48 williamc 1.2 my $self=shift;
49 williamc 1.8 # get file & preprocess
50 williamc 1.21 if ( @_ ) {
51 williamc 1.26 $self->{origurl}=shift;
52     $self->{File}=$self->getfile($self->{origurl});
53     $self->filetoparse($self->{File}->ProcessedFile());
54     $self->verbose("url downloaded to ".$self->{File}->ProcessedFile());
55 williamc 1.21 }
56 williamc 1.25 if ( defined $self->{File} ) {
57     return $self->{File}->url();
58     }
59     else { return "undefined"; }
60 williamc 1.2 }
61    
62 williamc 1.22 sub getfile {
63 williamc 1.3 my $self=shift;
64 williamc 1.6 my $origurl=shift;
65    
66     my $fileref;
67 williamc 1.20 my ($url, $file);
68 williamc 1.26 if ( 0 ) {
69 williamc 1.21 $self->verbose("Forced download of $origurl");
70 williamc 1.26 ($url, $file)=$self->urldownload($origurl);
71 williamc 1.20 }
72     else {
73 williamc 1.21 $self->verbose("Attempting to get $origurl");
74 williamc 1.26 ($url, $file)=$self->urlget($origurl);
75 williamc 1.20 }
76 williamc 1.6 # do we already have an appropriate object?
77 williamc 1.26 ($fileref)=$self->{dbstore}->find($url);
78 williamc 1.6 if ( defined $fileref ) {
79 williamc 1.20 $self->verbose("Found $url in database");
80 williamc 1.6 $fileref->update();
81     }
82     else {
83     if ( $file eq "" ) {
84     $self->parseerror("Unable to get $origurl");
85     }
86 williamc 1.26 # -- set up a new preprocess file
87 williamc 1.21 $self->verbose("Making a new preprocessed file $url");
88 williamc 1.26 $fileref=ActiveDoc::PreProcessedFile->new($self->{Ostore});
89 williamc 1.6 $fileref->url($url);
90     $fileref->update();
91     }
92     return $fileref;
93 williamc 1.3 }
94    
95 williamc 1.9 sub activatedoc {
96     my $self=shift;
97     my $url=shift;
98    
99     # first get a preprocessed copy of the file
100 williamc 1.26 my $fileobj=$self->getfile($url);
101 williamc 1.9
102 williamc 1.26 # now parse it for the <Doc> tag
103     my $tempdoc=ActiveDoc::SimpleURLDoc->new($self->{cache});
104     $tempdoc->filetoparse($fileobj->ProcessFile());
105     my ($doctype,$docversion)=$tempdoc->doctype();
106     undef $tempdoc;
107    
108     if ( ! defined $doctype ) {
109     $self->parseerror("No <Doc type=> Specified in ".$url);
110 williamc 1.9 }
111 williamc 1.26 $self->verbose("doctype required is $doctype $docversion");
112    
113 williamc 1.9 # Set up a new object of the specified type
114 williamc 1.26 eval "require $doctype";
115 williamc 1.14 die $@ if $@;
116 williamc 1.26 my $newobj=$doctype->new($self->{Ostore}, $url);
117 williamc 1.10 $newobj->url($url);
118 williamc 1.9 return $newobj;
119     }
120    
121 williamc 1.21 sub parent {
122     my $self=shift;
123    
124     @_?$self->{parent}=shift
125     :$self->{parent};
126     }
127    
128 williamc 1.6 # -------- Error Handling and Error services --------------
129    
130     sub parseerror {
131     my $self=shift;
132     my $string=shift;
133    
134 williamc 1.20 if ( $self->currentparsename() eq "" ) {
135 williamc 1.18 $self->error($string);
136     }
137 williamc 1.26 elsif ( ! defined $self->{File} ) {
138     print "Parse Error in ".$self->filenameref()." line "
139     .$self->{currentparser}->line()."\n";
140     print $string."\n";
141     }
142 williamc 1.18 else {
143     ($line, $file)=$self->line();
144     print "Parse Error in ".$file->url().", line ".
145 williamc 1.6 $line."\n";
146 williamc 1.18 print $string."\n";
147     }
148 williamc 1.26 exit;
149 williamc 1.6 }
150 williamc 1.3
151 williamc 1.6 sub line {
152 williamc 1.7 my $self=shift;
153 williamc 1.26 my $parseline;
154    
155     if ( @_ ) {
156     $parseline=shift;
157     }
158     else {
159     $parseline=$self->{currentparser}->line();
160     }
161 williamc 1.9
162 williamc 1.6 my ($line, $fileobj)=
163 williamc 1.26 $self->{File}->realline($parseline);
164 williamc 1.6 return ($line, $fileobj);
165 williamc 1.7 }
166    
167     sub tagstartline {
168     my $self=shift;
169 williamc 1.8 my ($line, $fileobj)=$self->{File}->line(
170 williamc 1.7 $self->{currentparser}->tagstartline());
171     return ($line, $fileobj);
172 williamc 1.3 }
173 williamc 1.6
174     sub file {
175 williamc 1.2 my $self=shift;
176    
177 williamc 1.8 $self->{File}->file();
178 williamc 1.21 }
179    
180     sub ProcessFile {
181     my $self=shift;
182    
183     return $self->{File}->ProcessedFile();
184 williamc 1.2 }
185    
186 williamc 1.26 # ------------------- Tag Routines -----------------------------------
187 williamc 1.9 sub Doc_Start {
188     my $self=shift;
189     my $name=shift;
190     my $hashref=shift;
191    
192     $self->checktag($name, $hashref, "type");
193 williamc 1.10 $self->{doctypefound}++;
194     if ( $self->{doctypefound} == 1 ) { # only take first doctype
195     $self->{docobject}=$$hashref{'type'};
196     }
197 williamc 1.1 }