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.13 by williamc, Fri Jan 14 18:49:57 2000 UTC vs.
Revision 1.15 by williamc, Thu Jan 20 18:18:45 2000 UTC

# Line 7 | Line 7
7   #
8   # Interface
9   # ---------
10 < # new()         : A new ActiveDoc object
10 > # new(ActiveConfig[,options])           : A new ActiveDoc object
11   # url()         : Return/set the docs url - essential
12   # file()        : Return the local filename of document
13   #
# Line 23 | Line 23
23   # newdoc(file)  : Return an new object of the appropriate type
24   # getfile(url)  : get a processedfile object given a url
25   # activatedoc(url) : Return the object ref for a doc described by the given url
26 + #                    -- any parse called "init" will also be run
27   # config([ActiveConfig]) : Set up/return Configuration for the document
28   # basequery([ActiveConfig]) : Set up/return UserQuery for the doc
29   # copydocconfig(ActiveDoc) : Copy the basic configuration from the ActiveDoc
30   # copydocquery(ActiveDoc) : Copy the basicquery from the ActiveDoc
31   # userinterface()       : Return the defaullt userinterface
32 < # options(var)          : return the value of the option var
32 > # option(var)           : return the value of the option var
33 > # requestoption("message") : Ask the user to supply a value for an option
34 > #                            if it dosnt already exist
35   #
36   # -- error methods --
37   # error(string)       : Report an general error to the user
# Line 51 | Line 54 | sub new {
54          $self={};
55          bless $self, $class;
56          $self->config(shift);
57 <        
57 >
58 >        # have some override options been passed
59 >        if ( @_ ) {
60 >           $self->basequery(shift);
61 >        }
62 >        else {
63 >           # --- is there a starter document?
64 >           my $basedoc=$self->config()->basedoc();
65 >           if ( defined $basedoc ) {
66 >             $self->copydocquery($basedoc);
67 >           }
68 >           else {
69 >             $self->error("Error : No base doc found");
70 >           }
71 >        }
72 >        $self->_init2();
73 > }
74 >
75 > sub _init2 {
76 >
77 >        my $self=shift;
78          # A URL handler per document
79          $self->{urlhandler}=URL::URLhandler->new($self->config()->cache());
80  
# Line 59 | Line 82 | sub new {
82          $self->{userinterface}=ActiveDoc::SimpleUserInterface->new();
83          $self->init(@_);
84          return $self;
85 +
86   }
87  
88   # ----- parse related routines --------------
# Line 68 | Line 92 | sub parse {
92  
93          my $file=$self->file();
94          if ( $file ) {
95 <          $self->{currentparsename}=$parselabel;
96 <          $self->{currentparser}=$self->{parsers}{$parselabel};
97 <          $self->{parsers}{$parselabel}->parse($file,@_);
98 <          delete $self->{currentparser};
99 <          $self->{currentparsename}="";
95 >          if ( exists $self->{parsers}{$parselabel} ) {
96 >            $self->{currentparsename}=$parselabel;
97 >            $self->{currentparser}=$self->{parsers}{$parselabel};
98 >            $self->{parsers}{$parselabel}->parse($file,@_);
99 >            delete $self->{currentparser};
100 >            $self->{currentparsename}="";
101 >          }
102          }
103          else {
104            print "Cannot parse - file not known\n";
# Line 159 | Line 185 | sub copydocquery {
185          my $self=shift;
186          my $ActiveDoc=shift;
187  
188 <         $self->basequery($ActiveDoc->basequery());
188 >        $self->basequery($ActiveDoc->basequery());
189   }
190  
191   sub config {
# Line 174 | Line 200 | sub basequery {
200             : $self->{Query};
201   }
202  
203 < sub options {
203 > sub option {
204          my $self=shift;
205          my $param=shift;
206 <        $self->basequery()->getparam('option_'.$param);
206 >        if ( defined $self->basequery()) {
207 >                return $self->basequery()->getparam($param);
208 >        }
209 >        else {
210 >                return $undef;
211 >        }
212 > }
213 >
214 > sub requestoption {
215 >        my $self=shift;
216 >        my $param=shift;
217 >        my $string=shift;
218 >
219 >        my $par=undef;
220 >        if ( defined $self->basequery()) {
221 >        $par=$self->basequery()->getparam($param);
222 >        while ( ! defined $par ) {
223 >          $self->basequery()->querytype( $param, "basic");
224 >          $self->basequery()->querymessage( $param, $string);
225 >          $self->userinterface()->askuser($self->basequery());
226 >          $par=$self->basequery()->getparam($param);
227 >        }
228 >        }
229 >        return $par;
230   }
231  
232   sub getfile() {
# Line 211 | Line 260 | sub activatedoc {
260          my $url=shift;
261  
262          # first get a preprocessed copy of the file
263 <        my $fileob=$self->getfile($url);
263 > #       my $fileob=$self->getfile($url);
264  
265          # now parse it for the <DocType> tag
266 <        $self->{doctypefound}=0;
267 <        $self->newparse("doctype");
268 <        $self->addtag("doctype","Doc", \&Doc_Start, $self,
269 <                                          "", $self, "", $self);
270 <        $self->parse("doctype");
266 >        my $tempdoc=ActiveDoc::ActiveDoc->new($self->config());
267 >        $tempdoc->url($url);
268 >        $tempdoc->{doctypefound}=0;
269 >        $tempdoc->newparse("doctype");
270 >        $tempdoc->addtag("doctype","Doc", \&Doc_Start, $tempdoc,
271 >                                          "", $tempdoc, "", $tempdoc);
272 >        $tempdoc->parse("doctype");
273  
274 <        if ( ! defined $self->{docobject} ) {
275 <          print "No <Doc type=> Specified in ".$fileob->url()."\n";
274 >        if ( ! defined $tempdoc->{docobject} ) {
275 >          print "No <Doc type=> Specified in ".$url."\n";
276            exit 1;
277          }
278          # Set up a new object of the specified type
279 <        my $newobj=$self->{docobject}->new($self->config());
279 >        eval "require $tempdoc->{docobject}";
280 >        die $@ if $@;
281 >        my $newobj=$tempdoc->{docobject}->new($self->config());
282 >        undef $tempdoc;
283          $newobj->url($url);
284 +        $newobj->_initparse();
285          return $newobj;
286   }
287  
288 + sub _initparse {
289 +        my $self=shift;
290 +
291 +        $self->parse("init");
292 + }
293   # -------- Error Handling and Error services --------------
294  
295   sub error {
# Line 303 | Line 363 | sub Base_start {
363          # Keep track of base tags
364          push @{$self->{basestack}}, $$hashref{"type"};
365          # Set the base
366 +        print "BASE SET for ".$$hashref{"type"}."\n";
367          $self->{urlhandler}->setbase($$hashref{"type"},$hashref);
368 +        print "BASE SET for ".$$hashref{"type"}."\n";
369  
370   }
371  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines