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

Comparing COMP/SCRAM/src/ActiveDoc/SimpleURLDoc.pm (file contents):
Revision 1.1 by williamc, Wed Aug 9 12:38:22 2000 UTC vs.
Revision 1.1.2.5 by williamc, Fri Aug 11 10:26:41 2000 UTC

# Line 0 | Line 1
1 + #
2 + # SimpleURLDoc.pm. - Extends SimpleDoc with URL download functionality
3 + #
4 + # Originally Written by Christopher Williams
5 + #
6 + # Description
7 + # -----------
8 + #
9 + # Interface
10 + # ---------
11 + # new(URLcache[,DocVersionTag]  : A new SimpleURLDoc object. You can also
12 + #                                 specify an alternative doc version tag
13 + # addbasetags(parse)    : Add Base Tags to the given parse
14 + # urlget(urlstring[,location]) : get the given url - using the cache.
15 + #                                Returns (url, filename)
16 + # urldownload(urlstring[,location]) : get the given url ignoring any cached
17 + #                                       version. Returns (url, filename)
18 + # expandurl(urlstring)  : return a URLclass object of the given url expanded
19 + #                         according to the base settings
20 + # cache([cache])        : get/set the current URL cache
21 + # doctype()             : return the (type,version) of the document
22 + #                         as specified by the DocVersionTag
23 +
24 + package ActiveDoc::SimpleURLDoc;
25 + use ActiveDoc::SimpleDoc;
26 + use URL::URLhandler;
27 + require 5.001;
28 +
29 + sub new {
30 +        my $class=shift;
31 +        my $self={};
32 +        bless $self, $class;
33 +        $self->cache(shift);
34 +        $self->{switch}=ActiveDoc::SimpleDoc->new(@_);
35 +        return $self;
36 + }
37 +
38 + sub addbasetags {
39 +        my $self=shift;
40 +        my $parse=shift;
41 +
42 +        $self->{switch}->addtag($parse,"base", \&Base_start, $self,
43 +                                     "", $self,
44 +                                     \&Base_end,$self);
45 + }
46 +
47 + sub cache {
48 +        my $self=shift;
49 +        if ( @_ ) {
50 +          $self->{cache}=shift;
51 +          $self->{urlhandler}=URL::URLhandler->new($self->{cache});
52 +        }
53 +        return $self->{cache};
54 + }
55 +
56 + sub expandurl {
57 +        my $self=shift;
58 +        my $urlstring=shift;
59 +
60 +        return $self->{urlhandler}->expandurl($urlstring);
61 + }
62 +
63 + sub urldownload {
64 +        my $self=shift;
65 +        my $urlstring=shift;
66 +
67 +        ($fullurl,$filename)=$self->{urlhandler}->download($urlstring, @_);
68 +        if ( ( ! defined $filename ) || ( $filename eq "" ) ) {
69 +          $self->{switch}->parseerror("Failed to get $fullurl");
70 +        }
71 +        return ($fullurl,$filename);
72 + }
73 +
74 + sub urlget {
75 +        my $self=shift;
76 +        my $urlstring=shift;
77 +
78 +        ($fullurl,$filename)=$self->{urlhandler}->get($urlstring, @_);
79 +        if ( ( ! defined $filename ) || ( $filename eq "" ) ) {
80 +          $self->{switch}->parseerror("Failed to get $fullurl");
81 +        }
82 +        return ($fullurl,$filename);
83 + }
84 +
85 + sub AUTOLOAD {
86 +        my $self=shift;
87 +
88 +        # dont propogate destroy methods
89 +        return if $AUTOLOAD=~/::DESTROY/;
90 +
91 +        # remove this package name
92 +        ($name=$AUTOLOAD)=~s/ActiveDoc::SimpleURLDoc:://;
93 +
94 +        # pass the message to SimpleDoc
95 +        $self->{switch}->$name(@_);
96 + }
97 +
98 + # ------------------------ Support Routines ---------------------------
99 +
100 + # ------------------------ Tag Routines -------------------------------
101 +
102 + sub Base_start {
103 +        my $self=shift;
104 +        my $name=shift;
105 +        my $hashref=shift;
106 +
107 +        $self->{switch}->checktag($name, $hashref, "url");
108 +        my $url=$self->{urlhandler}->setbase($$hashref{'url'});
109 +        push @{$self->{basestack}}, $url->type();
110 + }
111 +
112 + sub Base_end {
113 +        my $self=shift;
114 +        if ( $#{$self->{basestack}} >= 0 ) {
115 +          my $type=pop @{$self->{basestack}};
116 +          $self->{urlhandler}->unsetbase($type);
117 +        }
118 +        else {
119 +          $self->{switch}->parseerror("Unmatched <$name>");
120 +        }
121 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines