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.14 by williamc, Tue Jan 18 18:30:10 2000 UTC

# 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 >        # --- is there a starter document?
59 >        my $basedoc=$self->config()->basedoc();
60 >        if ( defined $basedoc ) {
61 >          $self->copydocquery($basedoc);
62 >        }
63 >        else {
64 >          $self->error("Error : No base doc found");
65 >        }
66 >        $self->_init2();
67 > }
68 >
69 > sub _init2 {
70 >
71 >        my $self=shift;
72          # A URL handler per document
73          $self->{urlhandler}=URL::URLhandler->new($self->config()->cache());
74  
# Line 59 | Line 76 | sub new {
76          $self->{userinterface}=ActiveDoc::SimpleUserInterface->new();
77          $self->init(@_);
78          return $self;
79 +
80   }
81  
82   # ----- parse related routines --------------
# Line 68 | Line 86 | sub parse {
86  
87          my $file=$self->file();
88          if ( $file ) {
89 <          $self->{currentparsename}=$parselabel;
90 <          $self->{currentparser}=$self->{parsers}{$parselabel};
91 <          $self->{parsers}{$parselabel}->parse($file,@_);
92 <          delete $self->{currentparser};
93 <          $self->{currentparsename}="";
89 >          if ( exists $self->{parsers}{$parselabel} ) {
90 >            $self->{currentparsename}=$parselabel;
91 >            $self->{currentparser}=$self->{parsers}{$parselabel};
92 >            $self->{parsers}{$parselabel}->parse($file,@_);
93 >            delete $self->{currentparser};
94 >            $self->{currentparsename}="";
95 >          }
96          }
97          else {
98            print "Cannot parse - file not known\n";
# Line 159 | Line 179 | sub copydocquery {
179          my $self=shift;
180          my $ActiveDoc=shift;
181  
182 <         $self->basequery($ActiveDoc->basequery());
182 >        $self->basequery($ActiveDoc->basequery());
183   }
184  
185   sub config {
# Line 174 | Line 194 | sub basequery {
194             : $self->{Query};
195   }
196  
197 < sub options {
197 > sub option {
198          my $self=shift;
199          my $param=shift;
200 <        $self->basequery()->getparam('option_'.$param);
200 >        $self->basequery()->getparam($param);
201 > }
202 >
203 > sub requestoption {
204 >        my $self=shift;
205 >        my $param=shift;
206 >        my $string=shift;
207 >
208 >        my $par=$self->basequery()->getparam($param);
209 >        while ( ! defined $par ) {
210 >          $self->basequery()->querytype( $param, "basic");
211 >          $self->basequery()->querymessage( $param, $string);
212 >          $self->userinterface()->askuser($self->basequery());
213 >          $par=$self->basequery()->getparam('ActiveConfigdir');
214 >        }
215 >        return $par;
216   }
217  
218   sub getfile() {
# Line 211 | Line 246 | sub activatedoc {
246          my $url=shift;
247  
248          # first get a preprocessed copy of the file
249 <        my $fileob=$self->getfile($url);
249 > #       my $fileob=$self->getfile($url);
250  
251          # now parse it for the <DocType> tag
252 <        $self->{doctypefound}=0;
253 <        $self->newparse("doctype");
254 <        $self->addtag("doctype","Doc", \&Doc_Start, $self,
255 <                                          "", $self, "", $self);
256 <        $self->parse("doctype");
252 >        my $tempdoc=ActiveDoc::ActiveDoc->new($self->config());
253 >        $tempdoc->url($url);
254 >        $tempdoc->{doctypefound}=0;
255 >        $tempdoc->newparse("doctype");
256 >        $tempdoc->addtag("doctype","Doc", \&Doc_Start, $tempdoc,
257 >                                          "", $tempdoc, "", $tempdoc);
258 >        $tempdoc->parse("doctype");
259  
260 <        if ( ! defined $self->{docobject} ) {
261 <          print "No <Doc type=> Specified in ".$fileob->url()."\n";
260 >        if ( ! defined $tempdoc->{docobject} ) {
261 >          print "No <Doc type=> Specified in ".$url."\n";
262            exit 1;
263          }
264          # Set up a new object of the specified type
265 <        my $newobj=$self->{docobject}->new($self->config());
265 >        eval "require $tempdoc->{docobject}";
266 >        die $@ if $@;
267 >        my $newobj=$tempdoc->{docobject}->new($self->config());
268 >        undef $tempdoc;
269          $newobj->url($url);
270 +        $newobj->_initparse();
271          return $newobj;
272   }
273  
274 + sub _initparse {
275 +        my $self=shift;
276 +
277 +        $self->parse("init");
278 + }
279   # -------- Error Handling and Error services --------------
280  
281   sub error {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines