From 365471d0477b36ebd31678bbeb8684635ecbadc1 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 31 Aug 2009 17:34:01 +0100 Subject: [PATCH 1/1] yppedia chart parser gets chart from yppedia --- yarrg/yppedia-chart-parser | 63 ++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/yarrg/yppedia-chart-parser b/yarrg/yppedia-chart-parser index 3f773a3..df350a7 100755 --- a/yarrg/yppedia-chart-parser +++ b/yarrg/yppedia-chart-parser @@ -1,5 +1,31 @@ #!/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 +# +# 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 . +# +# 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; @@ -7,9 +33,6 @@ use Graph::Undirected; use Commods; use CommodsDatabase; -my $ocean= 'Midnight'; - - my $widists= Graph::Undirected->new(); my $wiarchs= Graph::Undirected->new(); my $wispr; @@ -48,6 +71,11 @@ if (@ARGV && $ARGV[0] eq '--debug') { } select(STDOUT); $|=1; +@ARGV==1 or die; +$ARGV[0] =~ m/^\-/ and die; +my $ocean= shift @ARGV; + + my $parity; sub nn_xy ($$) { my ($x,$y) = @_; @@ -62,7 +90,7 @@ sub nn_xy ($$) { sub yppedia_chart_parse () { # We don't even bother with tag soup; instead we do line-oriented parsing. - while (<>) { + while () { s/\<--.*--\>//g; s/^\s*//; chomp; s/\s+$//; s/\s+/ /g; s/\<\/?(?:b|em)\>//g; @@ -516,8 +544,25 @@ sub yppedia_graph_spr () { $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 () { chomp; @@ -532,7 +577,7 @@ sub yppedia_ocean_fetch () { die; } } - $?=0; $!=0; close OCEAN; $? and die $?; $! and die $!; + yppedia_ocean_fetch_done(); } sub compare_distances () { @@ -569,7 +614,7 @@ database_fetch_ocean(); 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(); @@ -579,7 +624,7 @@ progress("setting archs from labels"); yppedia_archs_chart_labels(); 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(); -- 2.30.2