annotate variant_effect_predictor/Bio/Annotation/StructuredValue.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: StructuredValue.pm,v 1.2 2002/10/22 07:38:26 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::Annotation::StructuredValue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Hilmar Lapp <hlapp at gmx.net>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # (c) Hilmar Lapp, hlapp at gmx.net, 2002.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 # You may distribute this module under the same terms as perl itself.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 # Refer to the Perl Artistic License (see the license accompanying this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 # software package, or see http://www.perl.com/language/misc/Artistic.html)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 # for the terms under which you may use, modify, and redistribute this module.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 Bio::Annotation::StructuredValue - A scalar with embedded structured
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 use Bio::Annotation::StructuredValue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 use Bio::Annotation::Collection;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 my $col = new Bio::Annotation::Collection;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 my $sv = new Bio::Annotation::StructuredValue(-value => 'someval');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 $col->add_Annotation('tagname', $sv);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 Scalar value annotation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 bioperl-bugs@bioperl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 =head1 AUTHOR - bioperl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 Email bioperl-l@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 Describe contact details here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 package Bio::Annotation::StructuredValue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 # Object preamble - inherits from Bio::Root::Root
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 use Bio::AnnotationI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 use Bio::Annotation::SimpleValue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 @ISA = qw(Bio::Annotation::SimpleValue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 Title : new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 Usage : my $sv = new Bio::Annotation::StructuredValue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 Function: Instantiate a new StructuredValue object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 Returns : Bio::Annotation::StructuredValue object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 Args : -value => $value to initialize the object data field [optional]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 -tagname => $tag to initialize the tagname [optional]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 sub new{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 my ($class,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 my $self = $class->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 my ($value,$tag) = $self->_rearrange([qw(VALUE TAGNAME)], @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 $self->{'values'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 defined $value && $self->value($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 defined $tag && $self->tagname($tag);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 =head1 AnnotationI implementing functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 =head2 as_text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Title : as_text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Usage : my $text = $obj->as_text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 Function: return the string "Value: $v" where $v is the value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Returns : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 sub as_text{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 return "Value: ".$self->value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 =head2 hash_tree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 Title : hash_tree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 Usage : my $hashtree = $value->hash_tree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Function: For supporting the AnnotationI interface just returns the value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 as a hashref with the key 'value' pointing to the value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 Returns : hashrf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 sub hash_tree{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 my $h = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 $h->{'value'} = $self->value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 =head2 tagname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 Title : tagname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Usage : $obj->tagname($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Function: Get/set the tagname for this annotation value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Setting this is optional. If set, it obviates the need to provide
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 a tag to AnnotationCollection when adding this object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Returns : value of tagname (a scalar)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Args : new value (a scalar, optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 sub tagname{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 $self->{'tagname'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 return $self->{'tagname'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 =head1 Specific accessors for StructuredValue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 =head2 value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Title : value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Usage : $obj->value($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Function: Get/set the value for this annotation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Set mode is here only to retain compatibility with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 SimpleValue. It is equivalent to calling
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 add_value([0], $newval).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 In get mode, this implementation allows to pass additional
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 parameters that control how the structured annotation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 components will be joined together to form a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 string. Recognized are presently
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 -joins a reference to an array of join strings, the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 elements at index i applying to joining
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 annotations at dimension i. The last element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 will be re-used for dimensions higher than i.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Defaults to ['; '].
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 -brackets a reference to an array of two strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 denoting the opening and closing brackets for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 the elements of one dimension, if there is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 more than one element in the dimension.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Defaults to ['(',')'].
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Returns : value of value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 sub value{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 my ($self,$value,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 # set mode?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 return $self->add_value([0], $value) if defined($value) && (@args == 0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 # no, get mode
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 # determine joins and brackets
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 unshift(@args, $value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 my ($joins, $brackets) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 $self->_rearrange([qw(JOINS BRACKETS)], @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $joins = ['; '] unless $joins;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 $brackets = ['(', ')'] unless $brackets;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 my $txt = &_to_text($self->{'values'}, $joins, $brackets);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 # if there's only brackets at the start and end, remove them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 if((@{$self->{'values'}} == 1) &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 (length($brackets->[0]) == 1) && (length($brackets->[1]) == 1)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 my $re = '\\'.$brackets->[0].
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 '([^\\'.$brackets->[1].']*)\\'.$brackets->[1];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 $txt =~ s/^$re$/$1/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 return $txt;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 sub _to_text{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 my ($arr, $joins, $brackets, $rec_n) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 $rec_n = 0 unless defined($rec_n);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 my $i = $rec_n >= @$joins ? @$joins-1 : $rec_n;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 my $txt = join($joins->[$i],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 map {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 ref($_) ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 (ref($_) eq "ARRAY" ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 &_to_text($_, $joins, $brackets, $rec_n+1) :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 $_->value()) :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 $_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 } @$arr);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 if($rec_n && (@$arr > 1)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 $txt = $brackets->[0] . $txt . $brackets->[1];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 return $txt;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 =head2 get_values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Title : get_values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Function: Get the top-level array of values. Each of the elements will
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 recursively be a reference to an array or a scalar, depending
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 on the depth of this structured value annotation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 Returns : an array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 sub get_values{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 return @{$self->{'values'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 =head2 get_all_values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 Title : get_all_values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 Function: Flattens all values in this structured annotation and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 returns them as an array.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Returns : the (flat) array of values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 sub get_all_values{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 # we code lazy here and just take advantage of value()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 my $txt = $self->value(-joins => ['@!@'], -brackets => ['','']);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 return split(/\@!\@/, $txt);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 =head2 add_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 Title : add_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 Function: Adds the given value to the structured annotation at the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 given index.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 The index is multi-dimensional, with the first dimension
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 applying to the first level, and so forth. If a particular
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 dimension or a particular index does not exist yet, it will
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 be created. If it does exist and adding the value would
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 mean replacing a scalar with an array reference, we throw
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 an exception to prevent unintended damage. An index of -1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 at any dimension means append.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 If an array of values is to be added, it will create an
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 additional dimension at the index specified, unless the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 last index value is -1, in which case they will all be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 appended to the last dimension.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 Returns : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Args : the index at which to add (a reference to an array)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 the value(s) to add
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 sub add_value{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 my ($self,$index,@values) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 my $tree = $self->{'values'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 my $lastidx = pop(@$index);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 foreach my $i (@$index) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 if($i < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $subtree = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 push(@$tree, $subtree);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 $tree = $subtree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 } elsif((! $tree->[$i]) || (ref($tree->[$i]) eq "ARRAY")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 $tree->[$i] = [] unless ref($tree->[$i]) eq "ARRAY";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 $tree = $tree->[$i];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 $self->throw("element $i is a scalar but not in last dimension");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 if($lastidx < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 push(@$tree, @values);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 } elsif(@values < 2) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 $tree->[$lastidx] = shift(@values);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 $tree->[$lastidx] = [@values];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 1;