1 | #! /usr/bin/perl -w
|
---|
2 |
|
---|
3 | # Written by Dirk Stöcker <openstreetmap@dstoecker.de>
|
---|
4 | # Public domain, no rights reserved.
|
---|
5 |
|
---|
6 | use strict;
|
---|
7 |
|
---|
8 | my $rule_cond; # cumulated conditions from current rule
|
---|
9 |
|
---|
10 | # This is a simple conversion and in no way a complete XML parser
|
---|
11 | # but it works with a default Perl installation
|
---|
12 |
|
---|
13 | # Print a header to write valid Java code. No line break,
|
---|
14 | # so that the input and output line numbers will match.
|
---|
15 | print "class trans_style { void tr(String s){} void f() {";
|
---|
16 |
|
---|
17 | while(my $line = <>)
|
---|
18 | {
|
---|
19 | chomp($line);
|
---|
20 | print "tr(\"\"); ";
|
---|
21 | if($line =~ /<rules\s+name=(".*?")/)
|
---|
22 | {
|
---|
23 | print "/* mappaint style named $1 */ tr($1);\n";
|
---|
24 | }
|
---|
25 | elsif($line =~ /<rule\s*>/)
|
---|
26 | {
|
---|
27 | $rule_cond = "";
|
---|
28 | print "/* $line */\n";
|
---|
29 | }
|
---|
30 | elsif($line =~ /<condition.*\s+k="([^"]*)"/)
|
---|
31 | {
|
---|
32 | my $cond_k = $1; # according to schema, k is always present
|
---|
33 | my $cond_v = ($line =~ /\s+v="([^"]*)"/) ? $1 : "";
|
---|
34 | my $cond_b = ($line =~ /\s+b="([^"]*)"/) ? $1 : "";
|
---|
35 | print STDERR "$0: Found both v=\"$cond_v\" and b=\"$cond_b\" for k=\"$cond_k\" at line $.\n" if ($cond_v && $cond_b);
|
---|
36 | my $cond = ($cond_v || $cond_b) ? "$cond_k=$cond_v$cond_b" : "$cond_k"; # v and b shouldn't appear both
|
---|
37 | if ($rule_cond)
|
---|
38 | {
|
---|
39 | $rule_cond .= ", " . $cond;
|
---|
40 | }
|
---|
41 | else
|
---|
42 | {
|
---|
43 | $rule_cond = $cond;
|
---|
44 | }
|
---|
45 | print "/* $line */\n";
|
---|
46 | }
|
---|
47 | elsif($line =~ /colour="([^"]+)#/)
|
---|
48 | {
|
---|
49 | if ($line =~ /\s+colour="([^"]+)#/)
|
---|
50 | {
|
---|
51 | my $c = $1;
|
---|
52 | my $co = $1;
|
---|
53 | $c =~ s/[^a-z0-9]+/./g;
|
---|
54 | print "/* color $co (applied for \"$rule_cond\") */ tr(\"$c\");";
|
---|
55 | }
|
---|
56 | if ($line =~ /\s+dashedcolour="([^"]+)#/)
|
---|
57 | {
|
---|
58 | my $c = $1;
|
---|
59 | my $co = $1;
|
---|
60 | $c =~ s/[^a-z0-9]+/./g;
|
---|
61 | print "/* color $co (applied for \"$rule_cond\") */ tr(\"$c\");";
|
---|
62 | }
|
---|
63 | print "\n";
|
---|
64 | }
|
---|
65 | else
|
---|
66 | {
|
---|
67 | print "/* $line */\n";
|
---|
68 | }
|
---|
69 | }
|
---|
70 |
|
---|
71 | print "}}\n";
|
---|