--- deliantra/server/lib/cf/pod.pm 2007/04/18 15:28:18 1.4
+++ deliantra/server/lib/cf/pod.pm 2007/07/03 01:10:38 1.8
@@ -22,6 +22,17 @@
$_
}
+sub flatten($) {
+ local $_ = $_[0];
+
+ s/<[^>]+>//g;
+ s/^\s+//;
+ s/\s+$//;
+ s/\s+/ /g;
+
+ $_
+}
+
*view_seq_file =
*view_seq_code =
*view_seq_bold = sub { "$_[1]" };
@@ -33,7 +44,7 @@
sub view_seq_text {
my $text = $_[1];
$text =~ s/\s+/ /g;
- ::asxml $text
+ asxml $text
}
sub view_seq_link {
@@ -42,7 +53,7 @@
my $text = $link =~ s/^(.*)\|// ? $1 : $link;
if ($link =~ /http:/) {
- "" . (::asxml $link) . ""
+ "" . (asxml $link) . ""
} else {
()
}
@@ -50,12 +61,13 @@
sub view_item {
push @result, {
+ type => "item",
indent => $indent * 8,
level => $level,
};
my $title = $_[1]->title->present ($_[0]);
- $result[-1]{markup} = "$title\n" if length $title;
- $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
+ $result[-1]{markup} = $title if length $title;
+ $title = flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
local $level = $level + 1;
$_[1]->content->present ($_[0]);
()
@@ -63,9 +75,10 @@
sub view_verbatim {
push @result, {
+ type => "verbatim",
indent => $indent * 16,
level => $level,
- markup => "" . (::asxml $_[1]) . "\n",
+ markup => asxml $_[1],
};
()
}
@@ -74,19 +87,20 @@
push @result, {
indent => $indent * 16,
level => $level,
- markup => "$_[1]\n",
+ markup => flatten $_[1],
};
()
}
sub view_head1 {
push @result, {
+ type => "head1",
indent => $indent * 16,
level => $level,
};
my $title = $_[1]->title->present ($_[0]);
- $result[-1]{markup} = "\n\n
$title
\n" if length $title;
- $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
+ $result[-1]{markup} = $title if length $title;
+ $title = flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
local $level = $level + 1;
$_[1]->content->present ($_[0]);
()
@@ -94,12 +108,13 @@
sub view_head2 {
push @result, {
+ type => "head2",
indent => $indent * 16,
level => $level,
};
my $title = $_[1]->title->present ($_[0]);
- $result[-1]{markup} = "\n\n$title
\n" if length $title;
- $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
+ $result[-1]{markup} = $title if length $title;
+ $title = flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
local $level = $level + 1;
$_[1]->content->present ($_[0]);
()
@@ -107,12 +122,13 @@
sub view_head3 {
push @result, {
+ type => "head3",
indent => $indent * 16,
level => $level,
};
my $title = $_[1]->title->present ($_[0]);
- $result[-1]{markup} = "\n\n$title
\n" if length $title;
- $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
+ $result[-1]{markup} = $title if length $title;
+ $title = flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
local $level = $level + 1;
$_[1]->content->present ($_[0]);
()
@@ -171,13 +187,34 @@
Coro::Storable::thaw cf::cache "cf::pod::as_paragraphs/$path" => [$path],
1 => sub {
my ($src) = @_;
- fork_exec {
+ cf::fork_call {
my $pod = $src->[0];
utf8::decode $pod;
- Coro::Storable::freeze pom_as_paragraphs Pod::POM->new->parse_text ($pod)
+ Coro::Storable::freeze pom_as_paragraphs +(Pod::POM->new->parse_text ($pod))
}
};
}
+# format as cfpod-style text
+sub as_text($) {
+ my ($pars) = @_;
+
+ my $res;
+
+ for my $par (@$pars) {
+ if ($par->{type} =~ /^head\d+$/) {
+ $res .= "B<$par->{markup}>\n\n";
+ } elsif ($par->{type} eq "verbatim") {
+ $res .= "\n$par->{markup}\n\n";
+ } elsif ($par->{type} eq "item") {
+ $res .= "\n* I<$par->{markup}>\n\n";
+ } else {
+ $res .= "$par->{markup}\n\n";
+ }
+ }
+
+ $res
+}
+
1;