--- deliantra/server/lib/cf/pod.pm 2008/09/11 22:18:09 1.17 +++ deliantra/server/lib/cf/pod.pm 2012/11/13 01:12:23 1.28 @@ -1,5 +1,29 @@ +# +# This file is part of Deliantra, the Roguelike Realtime MMORPG. +# +# Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team +# +# Deliantra is free software: you can redistribute it and/or modify it under +# the terms of the Affero GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the Affero GNU General Public License +# and the GNU General Public License along with this program. If not, see +# . +# +# The authors can be reached via e-mail to +# + package cf::pod; +use common::sense; + use Pod::POM; our $indent; @@ -8,7 +32,7 @@ package cf::pod::AsParagraphs; -use strict; +use common::sense; use base "Pod::POM::View"; @@ -39,6 +63,8 @@ *view_seq_code = sub { "C<$_[1]>" }; *view_seq_bold = sub { "B<$_[1]>" }; *view_seq_italic = sub { "I<$_[1]>" }; +*view_seq_T = sub { "T<$_[1]>" }; +*view_seq_G = sub { "G<$_[1]>" }; *view_seq_zero = sub { "Z<>" }; *view_seq_space = sub { my $text = $_[1]; $text =~ s/ /\xa0/g; $text }; *view_seq_index = sub { push @{ $result[-1]{index} }, $_[1]; "" }; @@ -168,12 +194,9 @@ package cf::pod; -sub pom_as_paragraphs($) { +sub pom_as_paragraphs_ng($) { my ($pom) = @_; - # we suckers use global variables, unfortunately. - my $guard = cf::lock_acquire "cf::pod::as_paragraphs"; - local $indent = 0; local $level = 1; local @result = ( { } ); @@ -183,17 +206,26 @@ [grep $_->{index} || exists $_->{markup}, @result] } +sub pom_as_paragraphs($) { + my ($pom) = @_; + + # we suckers use global variables, unfortunately. + my $guard = cf::lock_acquire "cf::pod::as_paragraphs"; + + $pom->pom_as_paragraphs_ng +} + sub load_pod($) { my ($path) = @_; Coro::Storable::thaw cf::cache "cf::pod::as_paragraphs/$path" => [$path], - 6 => sub { + 8 => sub { my ($src) = @_; cf::fork_call { - my $pod = $src->[0]; - utf8::decode $pod; - Coro::Storable::blocking_nfreeze pom_as_paragraphs +(Pod::POM->new->parse_text ($pod)) + Coro::Storable::blocking_nfreeze + pom_as_paragraphs_ng + +(Pod::POM->new->parse_text ($src->[0])) } }; }