File Coverage

blib/lib/WDDX/String.pm
Criterion Covered Total %
statement 6 59 10.1
branch 0 14 0.0
condition n/a
subroutine 2 17 11.7
pod n/a
total 8 90 8.8


line stmt bran cond sub pod time code
1             #!/usr/bin/perl -w
2             #
3             # $Id: String.pm,v 1.1.1.1 2003/10/28 16:04:38 andy Exp $
4             #
5             # This code is copyright 1999-2000 by Scott Guelich
6             # and is distributed according to the same conditions as Perl itself
7             # Please visit http://www.scripted.com/wddx/ for more information
8             #
9              
10             package WDDX::String;
11              
12             # Auto-inserted by build scripts
13             $VERSION = "1.01";
14              
15 1     1   1865 use strict;
  1         3  
  1         36  
16 1     1   5 use Carp;
  1         2  
  1         1032  
17              
18             require WDDX;
19              
20             { my $i_hate_the_w_flag_sometimes = [
21             $WDDX::PACKET_HEADER,
22             $WDDX::PACKET_FOOTER,
23             $WDDX::String::VERSION
24             ] }
25              
26             1;
27              
28              
29             #/-----------------------------------------------------------------------
30             # Public Methods
31             #
32              
33             sub new {
34 0     0     my( $class, $value ) = @_;
35            
36 0 0         croak "You must supply a value when creating a new $class object\n"
37             unless defined $value;
38            
39 0 0         croak "WDDX strings may not contain null characters (\\0)\n"
40             if $value =~ /\0/;
41            
42 0           my $self = {
43             value => $value,
44             };
45            
46 0           bless $self, $class;
47 0           return $self;
48             }
49              
50              
51             sub type {
52 0     0     return "string";
53             }
54              
55              
56             sub as_packet {
57 0     0     my( $self ) = @_;
58 0           my $output = $WDDX::PACKET_HEADER .
59             $self->_serialize .
60             $WDDX::PACKET_FOOTER;
61             }
62              
63              
64             sub as_scalar {
65 0     0     my( $self ) = @_;
66 0           return $self->_deserialize;
67             }
68              
69              
70             sub as_javascript {
71 0     0     my( $self, $js_var ) = @_;
72 0           local $_ = $self->{value};
73            
74             # Escape for JavaScript... forget anything?
75 0           s/\\/\\\\/g;
76 0           s/\n/\\n/g;
77 0           s/\r/\\r/g;
78 0           s/\t/\\t/g;
79 0           s/"/\\"/g;
80            
81 0           return "$js_var=\"$_\";";
82             }
83              
84              
85             #/-----------------------------------------------------------------------
86             # Private Methods
87             #
88              
89             sub is_parser {
90 0     0     return 0;
91             }
92              
93              
94             sub _serialize {
95 0     0     my( $self ) = @_;
96 0           my $val = $self->xml_encode;
97 0           my $output = "$val";
98            
99 0           return $output;
100             }
101              
102              
103             sub _deserialize {
104 0     0     my( $self ) = @_;
105 0           return $self->{value};
106             }
107              
108              
109             sub xml_encode {
110 0     0     my $self = shift;
111 0           local $_ = $self->{value};
112            
113 0           s/&/&/g;
114 0           s/
115 0           s/>/>/g;
116 0           s/'/'/g;
117 0           s/"/"/g;
118 0           s|([\000-\037])||g;
  0            
119 0           return $_;
120             }
121              
122             #/-----------------------------------------------------------------------
123             # Parsing Code
124             #
125              
126             package WDDX::String::Parser;
127              
128              
129             sub new {
130 0     0     return bless { value => "" }, shift;
131             }
132              
133              
134             sub start_tag {
135 0     0     my( $self, $element, $attribs ) = @_;
136            
137 0 0         if ( $element eq "char" ) {
    0          
138 0           $self->append_data( $self->char_decode( $attribs->{code} ) );
139             }
140             elsif ( $element ne "string" ) {
141 0           die "<$element> not allowed within element\n";
142             }
143            
144 0           return $self;
145             }
146              
147              
148             sub end_tag {
149 0     0     my( $self, $element ) = @_;
150            
151 0 0         if ( $element eq "string" ) {
    0          
152 0           $self = new WDDX::String( $self->{value} );
153             }
154             elsif ( $element ne "char" ) {
155 0           die " not allowed within element\n";
156             }
157 0           return $self;
158             }
159              
160              
161             sub append_data {
162 0     0     my( $self, $data ) = @_;
163 0           $self->{value} .= $data;
164             }
165              
166              
167             sub char_decode {
168 0     0     my( $self, $code ) = @_;
169            
170 0 0         die "Invalid character code\n" unless $code =~ /^[01][0-9a-f]$/i;
171 0           return chr hex $code;
172             }
173              
174              
175             sub is_parser {
176 0     0     return 1;
177             }
178