… | |
… | |
21 | |
21 | |
22 | use Deliantra; |
22 | use Deliantra; |
23 | use Deliantra::Map; |
23 | use Deliantra::Map; |
24 | |
24 | |
25 | use Fcntl; |
25 | use Fcntl; |
26 | use SDBM_File; |
26 | use GDBM_File; |
27 | |
27 | |
28 | sub escape_html($) { |
28 | sub escape_html($) { |
29 | local $_ = shift; |
29 | local $_ = shift; |
30 | s/([<>&])/sprintf "&#%d;", ord $1/ge; |
30 | s/([<>&])/sprintf "&#%d;", ord $1/ge; |
31 | $_ |
31 | $_ |
32 | } |
32 | } |
33 | |
33 | |
34 | sub search { |
34 | sub search { |
35 | my (@kw) = @_; |
35 | my (@kw) = @_; |
36 | |
36 | |
37 | tie %idx, SDBM_File, ".index.dat", O_RDONLY, 0 |
37 | tie %idx, GDBM_File, ".index.dat", O_RDONLY, 0 |
38 | or die ".index.dat: $!"; |
38 | or die ".index.dat: $!"; |
39 | |
39 | |
40 | my $cnt; |
40 | my $cnt; |
41 | my %res; |
41 | my %res; |
42 | my @found; |
42 | my @found; |
… | |
… | |
85 | } |
85 | } |
86 | |
86 | |
87 | if ($ARGV[0] eq "-a") { |
87 | if ($ARGV[0] eq "-a") { |
88 | shift; |
88 | shift; |
89 | |
89 | |
90 | tie %idx, SDBM_File, ".index.dat~", O_RDWR|O_CREAT, 0644 |
90 | tie %idx, GDBM_File, ".index.dat~", O_RDWR|O_CREAT, 0644 |
91 | or die ".index.dat~: $!"; |
91 | or die ".index.dat~: $!"; |
92 | |
92 | |
93 | my %idx2; |
93 | my %idx2; |
94 | |
94 | |
95 | for my $path (@ARGV) { |
95 | for my $path (@ARGV) { |
96 | (my $base = $path) =~ s/\.map$//; |
96 | (my $base = $path) =~ s/\.map$//; |
97 | my $docnum = pack "n", ++$idx{Vdocnum}; |
97 | my $docnum = pack "n", ++$idx{Vdocnum}; |
98 | $idx{"D$docnum"} = $base; |
98 | $idx{"D$docnum"} = $base; |
99 | my $meta = Deliantra::Map->new_from_file ("$base.map"); |
99 | my $meta = eval { Deliantra::Map->new_from_file ("$base.map") } |
|
|
100 | or next; |
100 | |
101 | |
101 | for my $x (0 .. $meta->{width} - 1) { |
102 | for my $x (0 .. $meta->{width} - 1) { |
102 | for my $y (0 .. $meta->{height} - 1) { |
103 | for my $y (0 .. $meta->{height} - 1) { |
103 | for my $a (@{ $meta->{map}[$x][$y] }) { |
104 | for my $a (@{ $meta->{map}[$x][$y] }) { |
|
|
105 | delete $a->{elevation}; |
104 | for my $v (values %$a) { |
106 | for my $v (values %$a) { |
105 | $v = lc $v; |
107 | $v = lc $v; |
106 | $v =~ y/a-zA-Z0-9_\-.\// /c; |
108 | $v =~ y/a-zA-Z0-9_\-.\// /c; |
107 | for (split /\s+/, $v) { |
109 | for (split /\s+/, $v) { |
108 | $idx2{$_} .= $docnum; |
110 | $idx2{$_} .= $docnum; |