--- deliantra/Deliantra-Client/DC/Pod.pm 2006/08/13 02:43:22 1.4 +++ deliantra/Deliantra-Client/DC/Pod.pm 2006/08/13 19:47:05 1.8 @@ -1,15 +1,19 @@ package CFPlus::Pod; use strict; +use utf8; use Storable; -use CFPlus::UI; - our $VERSION = 1; +our $on_link = sub { }; our %wiki; +my $MA_BEG = "\x{fcd0}"; +my $MA_SEP = "\x{fcd1}"; +my $MA_END = "\x{fcd2}"; + *wiki = Storable::retrieve CFPlus::find_rcfile "docwiki.pst"; sub is_prefix_of($@) { @@ -60,17 +64,12 @@ do { my $p = $doc->[$par]; - my %para = ( - markup => $p->{markup}, - indent => $p->{indent}, - ); - - for (@{ $p->{widget} || [] }) { - my ($class, @args) = @$_; - push @{ $para{widget} }, $class->new (@args); + if (length $p->{markup}) { + push @res, { + markup => $p->{markup}, + indent => $p->{indent}, + }; } - - push @res, \%para; } while $doc->[++$par]{level} > $lvl; @res @@ -80,10 +79,85 @@ map section_of $_, &find } +sub thaw_section(\@\%) { + for (@{$_[0]}) { + $_->{markup} =~ s{ + $MA_BEG + ([^$MA_END]+) + $MA_END + }{ + my ($type, @arg) = split /$MA_SEP/o, $1; + + $_[1]{$type}($_, @arg) + }ogex; + } +} + +my %as_label = ( + image => sub { + my ($par, $path) = @_; + + "img" + }, + link => sub { + my ($par, $text, $link) = @_; + + "" . (CFPlus::asxml $text) . "" + }, +); + sub as_label(@) { - join "\n", - map +("\xa0" x ($_->{indent} / 4)) . $_->{markup}, - @_ + thaw_section @_, %as_label; + + my $text = + join "\n", + map +("\xa0" x ($_->{indent} / 4)) . $_->{markup}, + @_; + + $text =~ s/^\s+//; + $text =~ s/\s+$//; + + $text +} + +my %as_paragraphs = ( + image => sub { + my ($par, $path) = @_; + + push @{ $par->{widget} }, new CFPlus::UI::Image path => $path; + + "\x{fffc}" + }, + link => sub { + my ($par, $text, $link) = @_; + + push @{ $par->{widget} }, new CFPlus::UI::Label + markup => "" . (CFPlus::asxml $text) . "", + size => 0.8, + can_hover => 1, + can_events => 1, + padding_x => 0, + padding_y => 0, + on_button_up => sub { + $on_link->(split /\//, $link); + }; + + "\x{fffc}" + }, +); + +sub as_paragraphs(@) { + thaw_section @_, %as_paragraphs; + + @_ +} + +sub section_paragraphs(@) { + as_paragraphs §ion +} + +sub section_label(@) { + as_label §ion } 1