Compare commits

...

5 Commits

  1. 3
      HexGrid.pm
  2. 1
      HexGrid/Region.pm
  3. 5
      MWTemplate.pm
  4. 68
      wiki-tile.pl

@ -38,7 +38,6 @@ sub make_region($this, $name, %defaults)
sub get_tile_at($this, $nw, $sw)
{
# return $this->{tiles}{$nw}{$sw} if exists $this->{tiles}{$nw}{$sw};
foreach my $region (keys $this->{regions}->%*)
{
return $this->{regions}{$region}{tiles}{$nw}{$sw} if exists $this->{regions}{$region}{tiles}{$nw}{$sw};
@ -78,8 +77,6 @@ sub render($this)
$svg->{-docref}{-document}{id}='grid-root';
$svg->{-docref}{-document}{version}='1.2';
# $svg->tag('textArea', width => "300", height => "300")->cdata("this is sum text like a bunch.");
# $svg->foreignObject(width => "300", height => "300")->tag('div', xmlns => "http://www.w3.org/1999/xhtml")->cdata('foo');
return $svg->xmlify;
}

@ -21,7 +21,6 @@ sub add_tile($this, $tile) { $this->{tiles}{$tile->{nw}}{$tile->{sw}} = $tile; }
sub make_tile_at($this, $nw, $sw, %tile_settings)
{
my %settings = %{merge(\%tile_settings, $this->{defaults})};
# say STDERR Dumper(\%settings);
$settings{css_class} = HexGrid::to_id($this->{name});
$this->add_tile(HexGrid::Tile::at($nw, $sw, %settings));
}

@ -5,9 +5,14 @@ use v5.30;
use feature "signatures";
no warnings "experimental::signatures";
my $DEBUG = 1;
sub Parse($input, $template_name)
{
# say STDERR "Looking for $template_name in:";
# say STDERR $input;
my ($contents) = $input =~ /\{\{ \s* $template_name \s* \| (.*) \}\}/sx;
return 0 unless $contents;
my @params = split /\|/, $contents;
my @positional_params;
my %named_params;

@ -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;
}

Loading…
Cancel
Save