--- deliantra/Deliantra-Client/DC/Pod.pm 2008/03/25 01:46:36 1.18
+++ deliantra/Deliantra-Client/DC/Pod.pm 2010/04/03 02:58:25 1.24
@@ -1,7 +1,6 @@
package DC::Pod;
-use strict;
-use utf8;
+use common::sense;
use Storable;
@@ -27,7 +26,11 @@
sub P_MARKUP (){ 2 }
sub P_INDEX (){ 3 }
-*wiki = Storable::retrieve DC::find_rcfile "docwiki.pst";
+our %wiki;
+
+sub load_docwiki {
+ *wiki = Storable::retrieve $_[0];
+}
sub goto_document($) {
$goto_document->(split /\//, $_[0]);
@@ -38,12 +41,12 @@
return 1 unless @path;
- my $kw = lc pop @path;
+ my $kw = pop @path;
- $node = $node->{parent}
+ $node = $node->[N_PARENT]
or return 0;
- return scalar grep $_ eq $kw, @{ $node->{kw} };
+ return scalar grep $_ eq $kw, @{ $node->[N_KW] };
}
sub find(@) {
@@ -51,14 +54,15 @@
return unless @path;
- my $kw = lc pop @path;
+ my $kw = pop @path;
- # TODO: make sure results are unique
+ my %res = map +($_, $_),
+ grep { is_prefix_of $_, @path }
+ map @$_,
+ $kw eq "*" ? values %wiki
+ : $wiki{$kw} || ();
- grep { is_prefix_of $_, @path }
- map @$_,
- $kw eq "*" ? @wiki{sort keys %wiki}
- : $wiki{$kw} || ()
+ values %res
}
sub full_path_of($) {
@@ -66,25 +70,24 @@
my @path;
- # skip toplevel hierarchy pod/, because its not a document
- while ($node->{parent}) {
+ while ($node) {
unshift @path, $node;
- $node = $node->{parent};
+ $node = $node->[N_PARENT];
}
@path
}
sub full_path($) {
- join "/", map $_->{kw}[0], &full_path_of
+ join "/", map $_->[N_KW][0], &full_path_of
}
sub section_of($) {
my ($node) = @_;
- my $doc = $node->{doc};
- my $par = $node->{par};
- my $lvl = $node->{level};
+ my $doc = $node->[N_DOC];
+ my $par = $node->[N_PAR];
+ my $lvl = $node->[N_LEVEL];
my @res;
@@ -120,7 +123,20 @@
}
}
+my %as_common = (
+ h1 => sub {
+ "\n\n$_[1]\n"
+ },
+ h2 => sub {
+ "\n\n$_[1]\n"
+ },
+ h3 => sub {
+ "\n\n$_[1]\n"
+ },
+);
+
my %as_label = (
+ %as_common,
image => sub {
my ($par, $path) = @_;
@@ -148,6 +164,7 @@
}
my %as_paragraphs = (
+ %as_common,
image => sub {
my ($par, $path, $flags) = @_;