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