source: osm/applications/editors/josm/i18n/convpreset.pl@ 30775

Last change on this file since 30775 was 30159, checked in by simon04, 11 years ago

JOSM/i18n: add support for new preset XML elements

File size: 5.3 KB
Line 
1#! /usr/bin/perl -w
2
3# Written by Dirk Stöcker <openstreetmap@dstoecker.de>
4# Public domain, no rights reserved.
5
6use strict;
7
8my $item = "";
9my $group;
10my $combo_n;
11my $combo_type;
12my $result = 0;
13my $comment = 0;
14my $vctx;
15
16# This is a simple conversion and in no way a complete XML parser
17# but it works with a default Perl installation
18
19# Print a header to write valid Java code. No line break,
20# so that the input and output line numbers will match.
21print "class trans_preset { void tr(String s){} void f() {";
22
23sub fix($)
24{
25 my ($val) = @_;
26 $val =~ s/'/''/g;
27 return $val;
28}
29
30my $linenr = 0;
31while(my $line = <>)
32{
33 ++$linenr;
34 chomp($line);
35 print "tr(\"\"); ";
36 if($line =~ /<item\s+name=(".*?")/)
37 {
38 my $val = fix($1);
39 $item = $group ? "$group$val" : $val;
40 $item =~ s/""/\//;
41 if($line =~ /name_context=(".*?")/)
42 {
43 print "/* item $item */ trc($1, $val);\n";
44 }
45 else
46 {
47 print "/* item $item */ tr($val);\n";
48 }
49 }
50 elsif($line =~ /<group.*\s+name=(".*?")/)
51 {
52 my $gr = fix($1);
53 $group = $group ? "$group$gr" : $gr;
54 $group =~ s/\"\"/\//;
55 if($line =~ /name_context=(".*?")/)
56 {
57 print "/* group $group */ trc($1,$gr);\n";
58 }
59 else
60 {
61 print "/* group $group */ tr($gr);\n";
62 }
63 }
64 elsif($line =~ /<label.*\s+text=" "/)
65 {
66 print "/* item $item empty label */\n";
67 }
68 elsif($line =~ /<label.*\s+text=(".*?")/)
69 {
70 my $text = fix($1);
71 if($line =~ /text_context=(".*?")/)
72 {
73 print "/* item $item label $text */ trc($1,$text);\n";
74 }
75 else
76 {
77 print "/* item $item label $text */ tr($text);\n";
78 }
79 }
80 elsif($line =~ /<text.*\s+text=(".*?")/)
81 {
82 my $n = fix($1);
83 if($line =~ /text_context=(".*?")/)
84 {
85 print "/* item $item text $n */ trc($1,$n);\n";
86 }
87 else
88 {
89 print "/* item $item text $n */ tr($n);\n";
90 }
91 }
92 elsif($line =~ /<check.*\s+text=(".*?")/)
93 {
94 my $n = fix($1);
95 if($line =~ /text_context=(".*?")/)
96 {
97 print "/* item $item check $n */ trc($1,$n);\n";
98 }
99 else
100 {
101 print "/* item $item check $n */ tr($n);\n";
102 }
103 }
104 elsif($line =~ /<role.*\s+text=(".*?")/)
105 {
106 my $n = fix($1);
107 if($line =~ /text_context=(".*?")/)
108 {
109 print "/* item $item role $n */ trc($1,$n);\n";
110 }
111 else
112 {
113 print "/* item $item role $n */ tr($n);\n";
114 }
115 }
116 elsif($line =~ /<optional.*\s+text=(".*?")/)
117 {
118 my $n = fix($1);
119 if($line =~ /text_context=(".*?")/)
120 {
121 print "/* item $item optional $n */ trc($1,$n);\n";
122 }
123 else
124 {
125 print "/* item $item optional $n */ tr($n);\n";
126 }
127 }
128 elsif($line =~ /<(combo|multiselect).*\s+text=(".*?")/)
129 {
130 my ($type,$n) = ($1,fix($2));
131 $combo_n = $n;
132 $combo_type = $type;
133 $vctx = ($line =~ /values_context=(".*?")/) ? $1 : undef;
134 # text
135 my $tctx = ($line =~ /text_context=(".*?")/) ? $1 : undef;
136 print "/* item $item $type $n */" . ($tctx ? " trc($tctx, $n);" : " tr($n);");
137 # display_values / values
138 my $sp = ($line =~ /delimiter="(.*?)"/) ? $1 : ($type eq "combo" ? ",":";");
139 my $vals = ($line =~ /display_values="(.*?)"/) ? $1 : ($line =~ /values="(.*?)"/) ? $1 : undef;
140 if($vals)
141 {
142 my @combo_values = split "\Q$sp\E" ,$vals;
143 foreach my $val (@combo_values)
144 {
145 next if $val =~ /^[0-9-]+$/; # search for non-numbers
146 $val = fix($val);
147 print "/* item $item $type $n display value */" . ($vctx ? " trc($vctx, \"$val\");" : " tr(\"$val\");");
148 }
149 }
150 print "\n";
151 }
152 elsif(!$comment && $line =~ /<list_entry/)
153 {
154 my $vctxi = ($line =~ /value_context=(".*?")/) ? $1 : $vctx;
155 my $value = ($line =~ /value=(".*?")/) ? $1 : undef;
156 if($line =~ /display_value=(".*?")/)
157 {
158 my $val = fix($1);
159 print "/* item $item $combo_type $combo_n entry $value display value */" . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
160 }
161 else
162 {
163 my $val = fix($value);
164 print "/* item $item $combo_type $combo_n entry $value display value */" . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
165 }
166 if($line =~ /short_description=(".*?")/)
167 {
168 my $val = fix($1);
169 print "/* item $item $combo_type $combo_n entry $value short description */ tr($val);";
170 }
171 print "\n";
172 }
173 elsif($line =~ /<\/group>/)
174 {
175 $group = 0 if !($group =~ s/(.*\/).*?$//);
176 print "\n";
177 }
178 elsif($line =~ /<\/item>/)
179 {
180 $item = "";
181 print "\n";
182 }
183 elsif($line =~ /<\/combo/)
184 {
185 $combo_n = "";
186 print "\n";
187 }
188 elsif(!$line)
189 {
190 print "\n";
191 }
192 elsif($line =~ /^\s*$/
193 || $line =~ /<separator *\/>/
194 || $line =~ /<space *\/>/
195 || $line =~ /<\/?optional>/
196 || $line =~ /<key/
197 || $line =~ /<presets/
198 || $line =~ /<checkgroup/
199 || $line =~ /<\/checkgroup/
200 || $line =~ /<\/presets/
201 || $line =~ /roles/
202 || $line =~ /href=/
203 || $line =~ /<!--/
204 || $line =~ /<\?xml/
205 || $line =~ /-->/
206 || $line =~ /<\/?chunk/
207 || $line =~ /<reference/
208 || $line =~ /<preset_link/
209 || $comment)
210 {
211 print "// $line\n";
212 }
213 else
214 {
215 print "/* unparsed line $line */\n";
216 print STDERR "/* unparsed line $linenr $line */\n";
217 $result = 20
218 }
219
220 # note, these two must be in this order ore oneliners aren't handled
221 $comment = 1 if($line =~ /<!--/);
222 $comment = 0 if($line =~ /-->/);
223}
224
225print "}}\n";
226exit($result) if $result;
Note: See TracBrowser for help on using the repository browser.