annotate variant_effect_predictor/Bio/Annotation/StructuredValue.pm @ 3:d30fa12e4cc5 default tip

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