--- cfmaps/cfmap2html 2005/11/22 17:54:41 1.19
+++ cfmaps/cfmap2html 2007/10/14 01:24:15 1.31
@@ -1,7 +1,7 @@
#!/opt/bin/perl
# cfmap2html - convert crossfire maps to html
-# Copyright (C) 2005 Marc Lehmann
+# Copyright (C) 2005,2007 Marc Lehmann
#
# CFMAP2HTML is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -14,174 +14,196 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with gvpe; if not, write to the Free Software
+# along with cfmaps; if not, write to the Free Software
# Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-our $VERSION = '1.2';
+our $VERSION = '2.1';
-use Storable;
+use strict;
-my $LIBDIR = $ENV{CROSSFIRE_LIBDIR}
- or die "\$CROSSFIRE_LIBDIR must be set\n";
+use List::Util qw(min max);
+use Crossfire 1.0;
my $T = 32;
-my $arch;
-
sub escape_html($) {
local $_ = shift;
s/([<>&])/sprintf "%d;", ord $1/ge;
$_
}
+my @cfmap2png;
+
for my $path (@ARGV) {
+ (my $base = $path) =~ s/\.map//;
# print STDERR "$path\n";
- if (!-e "$path.png"
- || !-e "$path.pst"
- || -M "$path.pst" > -M $path
- || -M "$path.png" > -M $path) {
+ if (!-e "$base.png"
+ || -M "$base.png" > -M "$base.map") {
# regenerate png and metainfo
+ push @cfmap2png, $path;
+ }
+}
- system "cfmap2png", $path;
- };
-
- $arch ||= Storable::retrieve "$LIBDIR/archetypes.pst";
- my $meta = Storable::retrieve "$path.pst";
-
- open my $fh, ">:utf8", "$path.xhtml"
- or die "$path.xhtml: $!";
+system "cfmap2png", @cfmap2png
+ if @cfmap2png;
- select $fh;
-
- my $W = $meta->{width} * $T;
- my $H = $meta->{height} * $T;
-
- my $W2 = $W + 600;
-
- my (@path) = split /\//, $path;
-
- print "",
- '',
- "",
- "",
- "Crossfire Map \"$path\"",
- "\n",
- "\n",
- "\n",
- "",
- "",
- "";
-
- print "
",
- "
",
- "Crossfire Map ",
- "";
- print "/ ";
- for (0 .. $#path - 1) {
- print "$path[$_] / ";
- }
+for my $path (@ARGV) {
+ (my $base = $path) =~ s/\.map//;
+ if (!-e "$base.xhtml"
+ || -M "$base.xhtml" > -M "$base.map") {
+
+ Crossfire::load_archetypes
+ unless %ARCH;
+
+ my $meta = read_arch "$base.map";
+ my $arch = $meta->{arch};
+
+ open my $fh, ">:utf8", "$base.xhtml"
+ or die "$base.xhtml: $!";
+
+ select $fh;
+
+ my $W = (1 + max map $_->{x}, @$arch);
+ my $H = (1 + max map $_->{y}, @$arch);
+
+ my $info = shift @$arch;
+ my @map;
+
+ push @{ $map[$_->{x}][$_->{y}] }, $_
+ for @$arch;
+
+ my $W2 = $W * $T + 600;
+
+ my (@path) = split /\//, $base;
+
+ print "",
+ '',
+ "",
+ "",
+ "Deliantra Map \"$path\"",
+ "\n",
+ "\n",
+ "\n",
+ "",
+ "",
+ "";
+
+ print "
",
+ "
",
+ "Deliantra Map ",
+ "";
+ print "/ ";
+ for (0 .. $#path - 1) {
+ print "$path[$_] / ";
+ }
- my @dir = qw(none up right down left);
- my @tile = map {
- $meta->{info}{"tile_path_$_"}
- ? ""
- : ""
- } 1..4;
- #"}"# vim misparses without this comment
-
- print "$path[-1]",
- "",
- "