annotate variant_effect_predictor/Bio/Annotation/StructuredValue.pm @ 0:2bc9b66ada89 draft default tip

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