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

Comparing COMP/SCRAM/src/ActiveDoc/ActiveDoc.pm (file contents):
Revision 1.21 by williamc, Mon Feb 21 14:30:16 2000 UTC vs.
Revision 1.25.2.1 by williamc, Wed May 17 13:59:42 2000 UTC

# Line 7 | Line 7
7   #
8   # Interface
9   # ---------
10 < # new(ActiveConfig[,options])           : A new ActiveDoc object
10 > # new()         : A new ActiveDoc object
11 > # config([ActiveConfig]) :    Set up/return Configuration for the document
12   # url()         : Return/set the docs url - essential
13   # file()        : Return the local filename of document
14   # ProcessFile() : Return the filename of PreProcessed document
15   #
15 # parse(parselabel): Parse the document file for the given parse level
16   # parent()         : return the object ref of the calling parent
17 # newparse(parselabel) : Create a new parse type
18 # addtag(parselabel,tagname,start,obj,text,obj,end,obj)
19 #                               : Add tags to the parse given by label
20 # checktag(tagname, hashref, param) : check for existence of param in
21 #                                       hashref from a tag call
22 # includeparse(local_parsename, objparsename, activedoc) : copy the parse from
23 #                                                       one object to another
24 # currentparsename([name]) : get/set current parse name
17   # getfile(url)  : get a processedfile object given a url
18   # activatedoc(url) : Return the object ref for a doc described by the given url
19   #                    -- any parse called "init" will also be run
28 # config([ActiveConfig]) : Set up/return Configuration for the document
29 # basequery([ActiveConfig]) : Set up/return UserQuery for the doc
30 # copydocconfig(ActiveDoc) : Copy the basic configuration from the ActiveDoc
31 # copydocquery(ActiveDoc) : Copy the basicquery from the ActiveDoc
20   # userinterface()       : Return the defaullt userinterface
21   # option(var)           : return the value of the option var ( or undef )
34 # requestoption("message") : Ask the user to supply a value for an option
35 #                            if it dosnt already exist
36 # askuser(Query)        : send a query object to the userinterface
37 # verbose(string)       : Print string in verbosity mode
22   #
23 + # addurltags(parse) : add the <base> tags to manage urls to parse
24   # -- error methods --
25   # error(string)       : Report an general error to the user
26   # parseerror(string)  : Report an error during parsing a file
27   # line()              : Return the current line number of the document
28   #                       and the ProcessedFileObj it is in
29 + #
30  
31   package ActiveDoc::ActiveDoc;
32   require 5.004;
33 < use ActiveDoc::Parse;
48 < use ActiveDoc::ActiveConfig;
49 < use ActiveDoc::PreProcessedFile;
50 < use ObjectUtilities::StorableObject;
33 > use ActiveDoc::SimpleDoc;
34   use URL::URLhandler;
35  
36 < @ISA = qw(ObjectUtilities::StorableObject);
54 <
55 < sub new {
56 <        my $class=shift;
57 <        $self={};
58 <        bless $self, $class;
59 <        $self->config(shift);
60 <
61 <        # have some override options been passed
62 <        if ( @_ ) {
63 <           $self->basequery(shift);
64 <        }
65 <        else {
66 <           # --- is there a starter document?
67 <           my $basedoc=$self->config()->basedoc();
68 <           if ( defined $basedoc ) {
69 <             $self->copydocquery($basedoc);
70 <             $self->verbose("Initialising from $basedoc");
71 <           }
72 <           else {
73 <             $self->error("ActiveDoc Error : No base doc found");
74 <           }
75 <        }
76 <        $self->verbose("New ActiveDoc (".ref($self).") Created");
77 <        $self->_init2();
78 < }
79 <
80 < sub _init2 {
81 <
82 <        my $self=shift;
83 <        # A URL handler per document
84 <        $self->{urlhandler}=URL::URLhandler->new($self->config()->cache());
85 <
86 <        # A default UserInterface
87 <        $self->{userinterface}=ActiveDoc::SimpleUserInterface->new();
88 <        $self->init(@_);
89 <        return $self;
90 <
91 < }
92 <
93 < sub verbose {
94 <        my $self=shift;
95 <        my $string=shift;
96 <
97 <        if ( $self->option('verbose_all') ||
98 <                        $self->option('verbose_'.ref($self)) ) {
99 <          print ">".ref($self)."($self) : \n->".$string."\n";
100 <        }
101 < }
102 <
103 < # ----- parse related routines --------------
104 < sub parse {
105 <        my $self=shift;
106 <        $parselabel=shift;
107 <
108 <        my $file=$self->ProcessFile();
109 <        if ( $file ) {
110 <          if ( exists $self->{parsers}{$parselabel} ) {
111 <            $self->verbose("Parsing $parselabel in file $file");
112 <            $self->{currentparsename}=$parselabel;
113 <            $self->{currentparser}=$self->{parsers}{$parselabel};
114 <            $self->{parsers}{$parselabel}->parse($file,@_);
115 <            delete $self->{currentparser};
116 <            $self->{currentparsename}="";
117 <            $self->verbose("Parse $parselabel Complete");
118 <          }
119 <        }
120 <        else {
121 <          print "Cannot parse - file not known\n";
122 <        }
123 < }
124 <
125 < sub currentparsename {
126 <        my $self=shift;
127 <        @_?$self->{currentparsename}=shift
128 <          :$self->{currentparsename};
129 < }
130 <
131 < sub newparse {
132 <        my $self=shift;
133 <        my $parselabel=shift;
134 <
135 <        $self->{parsers}{$parselabel}=ActiveDoc::Parse->new();
136 <        $self->{parsers}{$parselabel}->addignoretags();
137 <        $self->{parsers}{$parselabel}->addgrouptags();
138 < }
139 <
140 < sub cleartags {
141 <        my $self=shift;
142 <        my $parselabel=shift;
143 <
144 <        $self->{parsers}{$parselabel}->cleartags();
145 < }
146 <
147 <
148 < sub includeparse {
149 <        my $self=shift;
150 <        my $parselabel=shift;
151 <        my $remoteparselabel=shift;
152 <        my $activedoc=shift;
153 <
154 <        # Some error trapping
155 <        if ( ! exists $self->{parsers}{$parselabel} ) {
156 <          $self->error("Unknown local parse name specified");
157 <        }
158 <        if ( ! exists $activedoc->{parsers}{$remoteparselabel} ) {
159 <          $self->error("Unknown parse name specified in remote obj $activedoc");
160 <        }
161 <
162 <        #
163 <        my $rp=$activedoc->{parsers}{$remoteparselabel};
164 <        $self->{parsers}{$parselabel}->includeparse($rp);
165 < }
166 <
167 < sub addtag {
168 <        my $self=shift;
169 <        my $parselabel=shift;
170 <        if ( $#_ != 6 ) {
171 <                $self->error("Incorrect addtags specification\n".
172 <                                "called with :\n@_ \n");
173 <        }
174 <        $self->{parsers}{$parselabel}->addtag(@_);
175 < }
36 > @ISA = qw(ActiveDoc::SimpleDoc);
37  
38   sub addurltags {
39          my $self=shift;
# Line 190 | Line 51 | sub url {
51                  $self->{File}=$self->getfile(shift);
52                  $self->verbose("url downloaded to $self->{File}");
53          }
54 <        $self->{File}->url();
55 < }
195 <
196 < sub copydocconfig {
197 <        my $self=shift;
198 <        my $ActiveDoc=shift;
199 <        
200 <        $self->config($ActiveDoc->config());
201 <
202 < }
203 <
204 < sub copydocquery {
205 <        my $self=shift;
206 <        my $ActiveDoc=shift;
207 <
208 <        if ( defined $ActiveDoc->basequery() ) {
209 <          $self->basequery($ActiveDoc->basequery());
210 <        }
211 <        else {
212 <          $self->error("Cannot copy basequery - undefined");
54 >        if ( defined $self->{File} ) {
55 >          return $self->{File}->url();
56          }
57 +        else { return "undefined"; }
58   }
59  
60   sub config {
# Line 219 | Line 63 | sub config {
63             : $self->{ActiveConfig};
64   }
65  
66 < sub basequery {
223 <        my $self=shift;
224 <        @_?$self->{Query}=shift
225 <           :$self->{Query};
226 < }
227 <
228 < sub option {
229 <        my $self=shift;
230 <        my $param=shift;
231 <        if ( defined $self->basequery()) {
232 <                return $self->basequery()->getparam($param);
233 <        }
234 <        else {
235 <                return $undef;
236 <        }
237 < }
238 <
239 < sub requestoption {
240 <        my $self=shift;
241 <        my $param=shift;
242 <        my $string=shift;
243 <
244 <        my $par=undef;
245 <        if ( defined $self->basequery()) {
246 <        $par=$self->basequery()->getparam($param);
247 <        while ( ! defined $par ) {
248 <          $self->basequery()->querytype( $param, "basic");
249 <          $self->basequery()->querymessage( $param, $string);
250 <          $self->userinterface()->askuser($self->basequery());
251 <          $par=$self->basequery()->getparam($param);
252 <        }
253 <        }
254 <        return $par;
255 < }
256 <
257 < sub askuser {
258 <        my $self=shift;
259 <        return $self->userinterface()->askuser(@_);
260 < }
261 <
262 < sub getfile() {
66 > sub getfile {
67          my $self=shift;
68          my $origurl=shift;
69  
# Line 323 | Line 127 | sub activatedoc {
127          undef $tempdoc;
128          $newobj->url($url);
129          $newobj->parent($self);
326        $newobj->_initparse();
130          return $newobj;
131   }
132  
# Line 334 | Line 137 | sub parent {
137            :$self->{parent};
138   }
139  
337 sub _initparse {
338        my $self=shift;
339
340        $self->parse("init");
341 }
140   # -------- Error Handling and Error services --------------
141  
142   sub error {
# Line 364 | Line 162 | sub parseerror {
162          }
163   }
164  
367 sub checktag {
368        my $self=shift;
369        my $tagname=shift;
370        my $hashref=shift;
371        my $param=shift;
372
373        if ( ! exists $$hashref{$param} ) {
374          $self->parseerror("Incomplete Tag <$tagname> : $param required");
375        }
376 }
377
165   sub line {
166          my $self=shift;
167  
# Line 451 | Line 238 | sub Doc_Start {
238             $self->{docobject}=$$hashref{'type'};
239          }
240   }
454
455 sub userinterface {
456        my $self=shift;
457        @_?$self->{userinterface}=shift
458          :$self->{userinterface}
459 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines