1 | #! /usr/bin/perl -w |
---|
2 | # short tool to update language links in presets file |
---|
3 | |
---|
4 | use XML::Parser; |
---|
5 | use Data::Dumper; |
---|
6 | use URI::Escape; |
---|
7 | |
---|
8 | my $skip = 0; |
---|
9 | my $xml = new XML::Parser(Handlers => {Start => \&handle_start}); |
---|
10 | undef $/; |
---|
11 | open FILE,"<","data/defaultpresets.xml" or die; |
---|
12 | my $file = <FILE>; |
---|
13 | close FILE; |
---|
14 | $xml->parsefile('data/defaultpresets.xml'); |
---|
15 | |
---|
16 | sub handle_start |
---|
17 | { |
---|
18 | my ($expat, $element, %data) = @_; |
---|
19 | |
---|
20 | if($element eq "link" && $skip < 50000) |
---|
21 | { |
---|
22 | my %datan; |
---|
23 | foreach my $k (sort {$az=$a;$bz=$b;$az=~s/.?href//;;$bz=~s/.?href//;$az cmp $bz} keys %data) |
---|
24 | { |
---|
25 | my $z = $k; |
---|
26 | $z =~ s/.?href//; |
---|
27 | #printf("%-5s %s\n", $z,$data{$k}); |
---|
28 | } |
---|
29 | |
---|
30 | if(!$data{href}) |
---|
31 | { |
---|
32 | print "Missing href: %s\n", join(" ", %data); |
---|
33 | } |
---|
34 | else |
---|
35 | { |
---|
36 | my $main = `wget "$data{href}" -O - -q`; |
---|
37 | my $h = uri_unescape($data{href}); |
---|
38 | my $v = "href=\"$h\""; |
---|
39 | if($h eq "http://wiki.openstreetmap.org/wiki/Proposed_features/House_numbers/Karlsruhe_Schema") |
---|
40 | { |
---|
41 | $datan{"de"} = "/wiki/Proposed_features/De:Hausnummern"; |
---|
42 | } |
---|
43 | while($main =~ /<bdi lang="([a-z_A-Z-]+)"(?: style="unicode-bidi:embed;unicode-bidi:-webkit-isolate;unicode-bidi:isolate")?><a href="(\/wiki\/.*?)"/g) |
---|
44 | { |
---|
45 | my $lang = lc($1); |
---|
46 | my $val = uri_unescape($2); |
---|
47 | $lang = "$1_".uc($2) if($lang =~ /^(..)[_-](..)$/); |
---|
48 | $lang = "zh_CN" if $lang eq "zh-hans"; |
---|
49 | $lang = "zh_TW" if $lang eq "zh-hant"; |
---|
50 | $datan{$lang} = $val; |
---|
51 | } |
---|
52 | while($main =~ /<a href="(\/wiki\/([a-zA-Z-_]):.*?)".*? • /g) |
---|
53 | { |
---|
54 | my $lang = lc($1); |
---|
55 | my $val = uri_unescape($2); |
---|
56 | $lang = "$1_".uc($2) if($lang =~ /^(..)[_-](..)$/); |
---|
57 | $datan{$lang} = $val; |
---|
58 | } |
---|
59 | foreach my $l (sort keys %datan) |
---|
60 | { |
---|
61 | $v .= "\n" . (" " x 18) . "$l.href=\"http://wiki.openstreetmap.org$datan{$l}\""; |
---|
62 | } |
---|
63 | print "$v\n"; |
---|
64 | print "Replace failed for $data{href}.\n" if !($file =~ s/(<link )href="\Q$data{href}\E.*?( ?\/>)/$1$v$2/s); |
---|
65 | |
---|
66 | $skip++; |
---|
67 | } |
---|
68 | } |
---|
69 | } |
---|
70 | open FILE,">","data/defaultpresets.xml" or die; |
---|
71 | print FILE $file; |
---|
72 | close FILE; |
---|