2
|
1 #!/usr/bin/env perl
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
|
5 my $progname = shift;
|
|
6 $progname =~ s/\.acd$//g;
|
|
7 my $progfile = "/usr/local/share/EMBOSS/acd/$progname.acd";
|
|
8 open my $acdfh, "<", $progfile;
|
|
9 open my $xmlfh, ">", "$progname.xml";
|
|
10
|
|
11 my $tool;
|
|
12 my $description;
|
|
13 my $command;
|
|
14 my @params;
|
|
15 my @args;
|
|
16 my $help;
|
|
17 my $plot = 0+`grep -c 'toggle: plot' $progfile`;
|
|
18 my $pngout = 0+`grep -c 'string: format' $progfile`;
|
|
19
|
|
20 while(<$acdfh>) {
|
|
21 chomp;
|
|
22 if(/\s*application\s*:\s*\w+\s*\[\s*$/../^\s*\]\s*$/) {
|
|
23 if(/\s*application\s*:\s*(\w+)\s*\[\s*$/) {
|
|
24 $tool = qq(<tool id="EMBOSS: $1" name="$1" version="1.0.2">);
|
|
25 }
|
|
26
|
|
27 if(/\s*documentation:\s*"([^"]+)"?\s*/) {
|
|
28 my $tmp = $1;
|
|
29 if(/\s*documentation:\s*".+"\s*/) {
|
|
30 $description = qq( <description>$tmp</description>);
|
|
31 } else {
|
|
32 while(<$acdfh>) {
|
|
33 if(/\s*(.*)"/) {
|
|
34 $tmp.= " $1";
|
|
35 last;
|
|
36 } elsif(/\s*(.*)\s*/) {
|
|
37 $tmp .= " $1";
|
|
38 }
|
|
39 }
|
|
40 $description = qq( <description>$tmp</description>);
|
|
41 }
|
|
42 }
|
|
43 }
|
|
44
|
|
45 if(/\s*section\s*:\s*advanced\s*\[/../\s*endsection:\s*advanced/) {
|
|
46 if(/\s*section\s*:\s*advanced\s*\[/../\]/ or /\s*endsction:\s*advanced/) {
|
|
47 next;
|
|
48 }
|
|
49
|
|
50 if(/\s*\w+\s*:\s*\w+\s*\[/../\s*\]/) {
|
|
51 if(/\s*(\w+)\s*:\s*(\w+)\s*\[/) {
|
|
52 my ($type, $name) = ($1, $2);
|
|
53 my $information;
|
|
54 my $default;
|
|
55 my @values;
|
|
56
|
|
57 next if $name eq "accid";
|
|
58 next if $name eq "plot";
|
|
59
|
|
60 push @args, $name;
|
|
61
|
|
62 while(<$acdfh>) {
|
|
63 chomp;
|
|
64 if(/\]/) {
|
|
65 last;
|
|
66 }
|
|
67 if(/\s*information:\s*"([^"]+)"?\s*/) {
|
|
68 my $tmp = $1;
|
|
69 if(/\s*information:\s*".+"\s*/) {
|
|
70 $information = $tmp;
|
|
71 } else {
|
|
72 while(<$acdfh>) {
|
|
73 if(/\s*(.*)"/) {
|
|
74 $tmp.= " $1";
|
|
75 last;
|
|
76 } elsif(/\s*(.*)\s*/) {
|
|
77 $tmp .= " $1";
|
|
78 }
|
|
79 }
|
|
80 $information = $tmp;
|
|
81 }
|
|
82 }
|
|
83
|
|
84 if(/\s*default:\s*"(.+)"\s*/) {
|
|
85 $default = $1;
|
|
86 }
|
|
87
|
|
88 if(/\s*values:\s*"(.+)"\s*/) {
|
|
89 @values = split ";", $1;
|
|
90 }
|
|
91 }
|
|
92 #print "$type\t$name\t$information";
|
|
93 #print "\t$default" if defined $default;
|
|
94 #print "\n";
|
|
95 my $param;
|
|
96
|
|
97 if($default) {
|
|
98 $default = "yes" if $default eq "Y";
|
|
99 $default = "no" if $default eq "N";
|
|
100 $default = "[^ACDEFGHIKLMNPQRSTVWYacgtU]" if $name eq "delkey";
|
|
101 } else {
|
|
102 $default = "";
|
|
103 }
|
|
104
|
|
105 if($type eq "boolean") {
|
|
106 $param = <<EOS;
|
|
107 <param name="$name" type="select" value="$default">
|
|
108 <label>$information</label>
|
|
109 <option value="no">No</option>
|
|
110 <option value="yes">Yes</option>
|
|
111 </param>
|
|
112 EOS
|
|
113 }
|
|
114
|
|
115 if($type =~ /(integer)|(float)|(string)/) {
|
|
116 $type =~ s/string/text/g;
|
|
117 $param = <<EOS;
|
|
118 <param name="$name" size="4" type="$type" value="$default">
|
|
119 <label>$information</label>
|
|
120 </param>
|
|
121 EOS
|
|
122 }
|
|
123
|
|
124 if($type =~ /selection/) {
|
|
125 my $vals = join "\n", map{
|
|
126 " <option value=\"$_\">". ucfirst($_) ."</option>"
|
|
127 }@values;
|
|
128 $param = <<EOS
|
|
129 <param name="$name" type="select" value="$default">
|
|
130 <label>$information</label>
|
|
131 $vals
|
|
132 </param>
|
|
133 EOS
|
|
134 }
|
|
135
|
|
136 print "$type: $name\n";
|
|
137 if($param && length $param) {
|
|
138 chomp($param);
|
|
139 push @params, $param;
|
|
140 }
|
|
141 }
|
|
142 }
|
|
143 }
|
|
144 }
|
|
145 close $acdfh;
|
|
146
|
|
147 my $args = join(" ", map{"-$_ \$$_"}@args);
|
|
148
|
|
149 my $paramstr = "";
|
|
150 foreach my $param (@params) {
|
|
151 $paramstr .= "$param\n";
|
|
152 }
|
|
153
|
|
154 my $outputs;
|
|
155
|
|
156 if($plot) {
|
|
157 $command = "<command interpreter=\"perl\">gembassy_calcandplot_wrapper.pl $progname -sequence \$input1 $args -auto \$out_file1 \$out_file2</command>";
|
|
158 $outputs = <<EOS;
|
|
159 <data format="csv" name="out_file1" label="\${tool.name} data for \${input1.name}" />
|
|
160 <data format="png" name="out_file2" label="\${tool.name} plot for \${input1.name}" />
|
|
161 EOS
|
|
162 } elsif($pngout) {
|
|
163 $command = "<command interpreter=\"perl\">emboss_single_outputfile_wrapper.pl $progname -sequence \$input1 -format png -goutfile \$out_file1 -auto $args</command>";
|
|
164 $outputs = <<EOS;
|
|
165 <data format="png" name="out_file1" label="\${tool.name} for \${input1.name}" />
|
|
166 EOS
|
|
167 } else {
|
|
168 $command = "<command>$progname -sequence \$input1 $args -auto -outfile \$out_file1</command>";
|
|
169 printf(STDERR "Enter output data format of $progname (1: txt 2: csv): ");
|
|
170 chomp(my $format = <>);
|
|
171 $format = $format == 1 ? "txt" : "csv";
|
|
172 $outputs = <<EOS;
|
|
173 <data format="$format" name="out_file1" label="\${tool.name} for \${input1.name}" />
|
|
174 EOS
|
|
175 }
|
|
176 chomp $outputs;
|
|
177
|
|
178 print $xmlfh <<EOS;
|
|
179 $tool
|
|
180 $description
|
|
181 $command
|
|
182 <inputs>
|
|
183 <param format="data" name="input1" type="data">
|
|
184 <label>Sequence</label>
|
|
185 </param>
|
|
186 $paramstr
|
|
187 </inputs>
|
|
188 <outputs>
|
|
189 $outputs
|
|
190 </outputs>
|
|
191 </tool>
|
|
192 EOS
|
|
193
|
|
194 close $xmlfh;
|