Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | package Pastel::String; |
2 | use Pastel::Mixin::Mixin; | |
3 | ||
4 | @ISA = qw( Pastel::Mixin::Mixin); | |
5 | ||
6 | use strict; | |
7 | ||
8 | sub new | |
9 | { | |
10 | my $arg = shift; | |
11 | my $class = ref($arg) || $arg; | |
12 | my $self = {}; | |
13 | ||
14 | bless $self, $class; | |
15 | $self->_init(@_); | |
16 | ||
17 | return $self; | |
18 | ||
19 | } | |
20 | ||
21 | sub _init { | |
22 | my ($self, @args) = @_; | |
23 | ||
24 | my $string = $args[0]; | |
25 | my $xml_string = $self->xml($string); | |
26 | $self->{xml_string} = $xml_string; | |
27 | return $self; | |
28 | } | |
29 | ||
30 | sub xml { | |
31 | my ($self, $arg) = @_; | |
32 | my $xml = ""; | |
33 | #Split the string data into characters | |
34 | my (@characters) = split( //, $arg); | |
35 | ||
36 | for( my $i = 0; $i < @characters; $i++){ | |
37 | ||
38 | if ( $characters[$i] eq '<' ){ | |
39 | $xml .= "<"; | |
40 | } | |
41 | ||
42 | elsif ( $characters[$i] eq '>' ){ | |
43 | $xml .= ">" ; | |
44 | } | |
45 | ||
46 | elsif ( $characters[$i] eq "'" ){ | |
47 | $xml .= "'" ; | |
48 | } | |
49 | elsif ( $characters[$i] eq '"' ){ | |
50 | $xml .= """ ; | |
51 | } | |
52 | elsif( $characters[$i] eq '&' ) { | |
53 | $xml .= "&" ; | |
54 | } | |
55 | elsif ( $self->get_code($characters[$i]) < 32 ) { | |
56 | $xml .= "&x"; | |
57 | $xml .=$self->get_hex( $self->get_code( $characters[$i])); | |
58 | $xml .= ';'; | |
59 | } | |
60 | elsif ( $self->get_code($characters[$i]) > 126 ){ | |
61 | $xml .= "&x"; | |
62 | $xml .= $self->get_hex( $self->get_code($characters[$i]) ); | |
63 | $xml .= ';' ; | |
64 | } | |
65 | ||
66 | else { | |
67 | $xml .= $characters[$i]; | |
68 | } | |
69 | ||
70 | } | |
71 | ||
72 | return $xml; | |
73 | } | |
74 | ||
75 | sub get_code { | |
76 | ||
77 | my ($self, $char) = @_; | |
78 | return ord($char); | |
79 | } | |
80 | ||
81 | sub get_hex { | |
82 | my ($self, $code ) = @_; | |
83 | return unpack("H2", pack("C", $code) ); | |
84 | } | |
85 | ||
86 | sub set_font { | |
87 | my ( $self, $font ) = @_; | |
88 | $self->{font} = $font; | |
89 | return $self; | |
90 | } | |
91 | ||
92 | sub get_font { | |
93 | my $self = shift; | |
94 | if ( defined( $self->{font} ) ) { | |
95 | return $self->{font}; | |
96 | } | |
97 | else { | |
98 | return undef; | |
99 | } | |
100 | } | |
101 | ||
102 | sub draw { | |
103 | my $self = shift; | |
104 | my $g = shift; | |
105 | my $svg = ""; | |
106 | ||
107 | $svg .= "<text x=\"".$self->get_x()."\" y=\"".$self->get_y()."\" "; | |
108 | $svg .= 'style="'; | |
109 | if ( my $font = $self->get_font() ){ | |
110 | $svg .= $font->get_svg_string(); | |
111 | } | |
112 | $svg .= " fill:".$g->get_paint->to_hex().';'; | |
113 | #$svg .= $g->get_paint()->to_svg(); | |
114 | $svg .= '" '; | |
115 | $svg .= ">"; | |
116 | $svg .= $self->get_xml_string(); | |
117 | $svg .= "</text>"; | |
118 | ||
119 | return $svg; | |
120 | } | |
121 | ||
122 | sub get_xml_string { | |
123 | my $self = shift; | |
124 | if ( defined ( $self->{xml_string} ) ){ | |
125 | return $self->{xml_string}; | |
126 | } else { | |
127 | return undef; | |
128 | } | |
129 | } | |
130 | ||
131 | sub set_x { | |
132 | #print STDERR "Set x called \n"; | |
133 | my ($self, $x) = @_; | |
134 | #print STDERR "$x\n"; | |
135 | if(defined($x)){ | |
136 | if(ref($x)){ | |
137 | $self->{x} = join " ", @{$x}; | |
138 | }else{ | |
139 | #print STDERR "set_x: $x\n"; | |
140 | $self->{x} = $x; | |
141 | } | |
142 | } | |
143 | } | |
144 | ||
145 | sub set_y { | |
146 | my ($self, $y) = @_; | |
147 | #print STDERR "Set y called:$y\n"; | |
148 | if ($y){ | |
149 | if( ref($y) ){ | |
150 | $self->{y} = join " ", @{$y}; | |
151 | }else { | |
152 | $self->{y} = $y; | |
153 | } | |
154 | } | |
155 | } | |
156 | ||
157 | sub get_x { | |
158 | my $self = shift; | |
159 | if(defined( $self->{x}) ){ | |
160 | return $self->{x}; | |
161 | } else { | |
162 | return ""; | |
163 | } | |
164 | } | |
165 | ||
166 | sub get_y { | |
167 | my $self = shift; | |
168 | if(defined( $self->{y}) ){ | |
169 | return $self->{y}; | |
170 | } else { | |
171 | return ""; | |
172 | } | |
173 | } | |
174 | ||
175 | 1; | |
176 |