|
|
|
@ -14,6 +14,10 @@ use Data::Dumper; |
|
|
|
|
use feature "signatures"; |
|
|
|
|
no warnings "experimental::signatures"; |
|
|
|
|
|
|
|
|
|
# The below regex is a whitespace forgiving version of /^(-?\d+),(-?\d+)/, an int pair |
|
|
|
|
my $coords_regex = qr/^\s*(-?\s*\d+)\s*,\s*(-?\s*\d+)\s*$/; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my $api_url = "https://wiki.tensor.green/w/api.php"; |
|
|
|
|
my $region_template_name = "MapRegion"; |
|
|
|
|
my $subregion_template_name = "MapSubregion"; |
|
|
|
@ -72,6 +76,8 @@ foreach my $page (values %{$region_query_results->{query}{pages}}) |
|
|
|
|
next if $page->{title} =~ /^Category:/; |
|
|
|
|
my $region = $grid->make_region($page->{title}); |
|
|
|
|
my $parsed_template = MWTemplate::Parse($page->{revisions}[0]{'*'}, $region_template_name); |
|
|
|
|
next unless $parsed_template; |
|
|
|
|
say STDERR "Processing region: $page->{title}"; |
|
|
|
|
$region->{defaults}{colour} = $parsed_template->{named_params}{colour}; |
|
|
|
|
if($regiondir) |
|
|
|
|
{ |
|
|
|
@ -110,6 +116,8 @@ foreach my $page (values %{$subregion_query_results->{query}{pages}}) |
|
|
|
|
{ |
|
|
|
|
next if $page->{title} =~ /^Category:/; |
|
|
|
|
my $parsed_template = MWTemplate::Parse($page->{revisions}[0]{'*'}, $subregion_template_name); |
|
|
|
|
next unless $parsed_template; |
|
|
|
|
say STDERR "Processing subregion: $page->{title}"; |
|
|
|
|
my $subregion = $grid->make_region($page->{title}); |
|
|
|
|
$subregion->{defaults}{colour} = $parsed_template->{named_params}{colour}; |
|
|
|
|
if($regiondir) |
|
|
|
@ -135,6 +143,7 @@ foreach my $page (values %{$background_query_results->{query}{pages}}) |
|
|
|
|
{ |
|
|
|
|
if($page->{imageinfo}) |
|
|
|
|
{ |
|
|
|
|
say STDERR "Processing image: $page->{title}"; |
|
|
|
|
foreach my $region (@{$background_pages{$page->{title}}}) |
|
|
|
|
{ |
|
|
|
|
$region->{defaults}{image} = $page->{imageinfo}[0]{url}; |
|
|
|
@ -157,12 +166,12 @@ foreach my $page (values %{$tile_query_results->{query}{pages}}) |
|
|
|
|
{ |
|
|
|
|
my $content = $page->{revisions}[0]{'*'}; |
|
|
|
|
my ($region_name) = $page->{title} =~ /(.*)\/Tiles/; |
|
|
|
|
say STDERR "Processing tiles for: $region_name"; |
|
|
|
|
my $region = $grid->{regions}{$region_name}; |
|
|
|
|
foreach my $coords (split /;/, $content) |
|
|
|
|
{ |
|
|
|
|
# The below regex is a whitespace forgiving version of /^(-?\d+),(-?\d+)/, an int pair |
|
|
|
|
do { carp "Skipping bad spec: $coords"; next; } |
|
|
|
|
unless $coords =~ /^\s*(-?\s*\d+)\s*,\s*(-?\s*\d+)\s*$/; |
|
|
|
|
unless $coords =~ $coords_regex; |
|
|
|
|
$region->make_tile_at($1,$2); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -185,7 +194,10 @@ foreach my $page (values %{$location_query_results->{query}{pages}}) |
|
|
|
|
{ |
|
|
|
|
next if $page->{title} =~ /^Category:/; |
|
|
|
|
my $parsed_template = MWTemplate::Parse($page->{revisions}[0]{'*'}, $location_template_name); |
|
|
|
|
next unless $parsed_template; |
|
|
|
|
say STDERR "Processing location: $page->{title}"; |
|
|
|
|
my $location = $grid->make_region($page->{title}); |
|
|
|
|
$location->{defaults}{colour} = $parsed_template->{named_params}{colour}; |
|
|
|
|
|
|
|
|
|
my $location_with_context; |
|
|
|
|
if($regiondir) |
|
|
|
@ -202,11 +214,10 @@ foreach my $page (values %{$location_query_results->{query}{pages}}) |
|
|
|
|
); |
|
|
|
|
$location_with_context = $region_grids{$location->{name}}->make_region($location->{name}); |
|
|
|
|
|
|
|
|
|
$location_with_context->{defaults}{colour} = $location->{defaults}{colour} = $parsed_template->{named_params}{colour}; |
|
|
|
|
$location_with_context->{defaults}{colour} = $location->{defaults}{colour}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# The below regex is a whitespace forgiving version of /^(-?\d+),(-?\d+)/, an int pair |
|
|
|
|
if($parsed_template->{positional_params}[0] =~ /^\s*(-?\s*\d+)\s*,\s*(-?\s*\d+)\s*$/) |
|
|
|
|
if($parsed_template->{positional_params}[0] =~ $coords_regex) |
|
|
|
|
{ |
|
|
|
|
$location->make_tile_at($1,$2); |
|
|
|
|
if($regiondir) |
|
|
|
@ -214,9 +225,8 @@ foreach my $page (values %{$location_query_results->{query}{pages}}) |
|
|
|
|
$location_with_context->make_tile_at($1,$2); |
|
|
|
|
foreach my $coords (split /;/, $parsed_template->{named_params}{context_tiles}) |
|
|
|
|
{ |
|
|
|
|
# The below regex is a whitespace forgiving version of /^(-?\d+),(-?\d+)/, an int pair |
|
|
|
|
do { carp "Skipping bad spec: $coords"; next; } |
|
|
|
|
unless $coords =~ /^\s*(-?\s*\d+)\s*,\s*(-?\s*\d+)\s*$/; |
|
|
|
|
unless $coords =~ $coords_regex; |
|
|
|
|
$location_with_context->add_tile($grid->get_tile_at($1, $2)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -254,6 +264,7 @@ foreach my $site_page_ref (values %{$site_query_results->{query}{pages}}) |
|
|
|
|
my $site_url = $site_page_ref->{canonicalurl}; |
|
|
|
|
my $site_content = $site_page_ref->{revisions}[0]{'*'}; |
|
|
|
|
my $parsed_template = MWTemplate::Parse($site_content, $site_template_name); |
|
|
|
|
next unless $parsed_template; |
|
|
|
|
my ($nw,$sw) = split /,/, $parsed_template->{named_params}{coords}; |
|
|
|
|
|
|
|
|
|
my $imageinfo_query_results = $mw->api({ action => 'query', |
|
|
|
@ -277,36 +288,19 @@ foreach my $site_page_ref (values %{$site_query_results->{query}{pages}}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if($html_document) |
|
|
|
|
{ |
|
|
|
|
open (my $fh, "> $outfile") or croak "Couldn't open $outfile for writing: $!"; |
|
|
|
|
say $fh wrap_in_html($grid); |
|
|
|
|
close $fh; |
|
|
|
|
if($regiondir) |
|
|
|
|
{ |
|
|
|
|
chdir $regiondir || croak "Couldn't chdir to $regiondir: $!"; |
|
|
|
|
while(my ($region, $region_grid) = each %region_grids) |
|
|
|
|
{ |
|
|
|
|
open (my $region_fh, "> $region.html") or croak "Couldn't open $region.html for writing: $!"; |
|
|
|
|
say $region_fh wrap_in_html($region_grid); |
|
|
|
|
close $region_fh; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
open (my $fh, "> $outfile") or croak "Couldn't open $outfile for writing: $!"; |
|
|
|
|
say $fh ($html_document ? wrap_in_html($grid) : $grid->render); |
|
|
|
|
close $fh; |
|
|
|
|
if($regiondir) |
|
|
|
|
{ |
|
|
|
|
open (my $fh, "> $outfile") or croak "Couldn't open $outfile for writing: $!"; |
|
|
|
|
say $fh $grid->render; |
|
|
|
|
close $fh; |
|
|
|
|
if($regiondir) |
|
|
|
|
chdir $regiondir || croak "Couldn't chdir to $regiondir: $!"; |
|
|
|
|
my $extension = $html_document ? 'html' : 'svg'; |
|
|
|
|
while(my ($region, $region_grid) = each %region_grids) |
|
|
|
|
{ |
|
|
|
|
chdir $regiondir || croak "Couldn't chdir to $regiondir: $!"; |
|
|
|
|
while(my ($region, $region_grid) = each %region_grids) |
|
|
|
|
{ |
|
|
|
|
open (my $region_fh, "> $region.svg") or croak "Couldn't open $region.svg for writing: $!"; |
|
|
|
|
say $region_fh $region_grid->render; |
|
|
|
|
close $region_fh; |
|
|
|
|
} |
|
|
|
|
open (my $region_fh, "> $region.$extension") |
|
|
|
|
or croak "Couldn't open $region.extension for writing: $!"; |
|
|
|
|
say $region_fh ($html_document ? wrap_in_html($region_grid) : $region_grid->render); |
|
|
|
|
close $region_fh; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -323,10 +317,6 @@ sub wrap_in_html($grid) |
|
|
|
|
</script> |
|
|
|
|
EOS |
|
|
|
|
$html_builder .= "\n" . $grid->render; |
|
|
|
|
# if ($regiondir) |
|
|
|
|
# { |
|
|
|
|
# $html_builder .= "\n" . $_->render for values %region_grids; |
|
|
|
|
# } |
|
|
|
|
$html_builder .= "\n</body>\n</html>"; |
|
|
|
|
return $html_builder; |
|
|
|
|
} |
|
|
|
|