#!/usr/bin/perl
+# Updater for island topology
+
+# This is part of ypp-sc-tools, a set of third-party tools for assisting
+# players of Yohoho Puzzle Pirates.
+#
+# Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+# are used without permission. This program is not endorsed or
+# sponsored by Three Rings.
+
+# usage: ./yppedia-chart-parser OCEAN
+
use strict (qw(vars));
use warnings;
use Commods;
use CommodsDatabase;
-my $ocean= 'Midnight';
-
-
my $widists= Graph::Undirected->new();
my $wiarchs= Graph::Undirected->new();
my $wispr;
}
select(STDOUT); $|=1;
+@ARGV==1 or die;
+$ARGV[0] =~ m/^\-/ and die;
+my $ocean= shift @ARGV;
+
+
my $parity;
sub nn_xy ($$) {
my ($x,$y) = @_;
sub yppedia_chart_parse () {
# We don't even bother with tag soup; instead we do line-oriented parsing.
- while (<>) {
+ while (<OCEAN>) {
s/\<--.*--\>//g;
s/^\s*//; chomp; s/\s+$//; s/\s+/ /g;
s/\<\/?(?:b|em)\>//g;
$wispr= shortest_path_reduction('wi',$base);
}
-sub yppedia_ocean_fetch () {
- open OCEAN, '-|', "./yppedia-ocean-scraper", $ocean or die $!;
+sub yppedia_ocean_fetch_start ($) {
+ my ($chart) = @_;
+ my @args= ();
+ push @args, '--chart' if $chart;
+ push @args, $ocean;
+ open OCEAN, '-|', "./yppedia-ocean-scraper", @args or die $!;
+}
+sub yppedia_ocean_fetch_done () {
+ $?=0; $!=0; close OCEAN; $? and die $?; $! and die $!;
+}
+
+sub yppedia_ocean_fetch_chart () {
+ yppedia_ocean_fetch_start(1);
+ yppedia_chart_parse();
+ yppedia_ocean_fetch_done();
+}
+
+sub yppedia_ocean_fetch_text () {
+ yppedia_ocean_fetch_start(0);
my $arch;
while (<OCEAN>) {
chomp;
die;
}
}
- $?=0; $!=0; close OCEAN; $? and die $?; $! and die $!;
+ yppedia_ocean_fetch_done();
}
sub compare_distances () {
progress("computing database spr"); database_graph_spr();
-progress("reading yppedia chart"); yppedia_chart_parse();
+progress("fetching yppedia chart"); yppedia_ocean_fetch_chart();
progress("adding shortcuts"); yppedia_graphs_add_shortcuts();
progress("pruning boring vertices"); yppedia_graphs_prune_boring();
progress("checking yppedia graphs"); yppedia_graphs_check();
progress("setting archs from nearby"); yppedia_archs_fillbynearest();
progress("computing yppedia spr"); yppedia_graph_spr();
-progress("fetching yppedia ocean text"); yppedia_ocean_fetch();
+progress("fetching yppedia ocean text"); yppedia_ocean_fetch_text();
progress("comparing islands"); compare_island_lists();
progress("comparing distances"); compare_distances();