--- 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;