CGI-Kwiki
view release on metacpan or search on metacpan
lib/CGI/Kwiki/Formatter.pm view on Meta::CPAN
sub combine_chunks {
my ($self, $chunk_array) = @_;
my $formatted_text = '';
for my $chunk (@$chunk_array) {
$formatted_text .=
(ref $chunk eq 'ARRAY') ? $self->combine_chunks($chunk) :
(ref $chunk) ? $$chunk :
$chunk
}
return $formatted_text;
}
sub split_method {
my ($self, $text, $regexp, $method) = @_;
my $i = 0;
map {$i++ % 2 ? \ $self->$method($_) : $_} split $regexp, $text;
}
sub user_functions {
qw(
SLIDESHOW_SELECTOR
total_bullets
);
}
sub isa_function {
my ($self, $function) = @_;
defined { map { ($_, 1) } $self->user_functions }->{$function} and
$self->can($function)
}
sub function {
my ($self, $text) = @_;
$self->split_method($text,
qr{\[\&(\w+\b.*?)\]},
'function_format',
);
}
sub function_format {
my ($self, $text) = @_;
my ($method, @args) = split;
$self->isa_function($method)
? $self->$method(@args)
: "<!-- Function not supported here: $text -->\n";
}
sub total_bullets {
my ($self) = @_;
scalar(() = $self->database->load($self->cgi->page_id) =~ /^\* /gm);
}
sub SLIDESHOW_SELECTOR {
my ($self) = @_;
$slide_num = 1;
my $page_id = $self->cgi->page_id;
my $start = $self->loc('start');
my $html = <<END;
<script src="javascript/SlideStart.js"></script>
<form>
${ \ CGI::popup_menu(
-name => 'size',
-values => [qw(640x480 800x600 1024x768 1280x1024 1600x1200), $self->loc('fullscreen')]
)
}
<input type="button" name="button" value="$start" onclick="startSlides()">
<input type="hidden" name="action" value="START">
<input type="hidden" name="page_id" value="$page_id">
</form>
END
$html;
}
sub TRANSCLUDE_HTTP_BODY {
my ($self, $url) = @_;
require LWP::Simple;
my $html = LWP::Simple::get($url)
or return '';
$html =~ s#.*<body>(.*)</body>.*#$1#is;
\ $html;
}
sub table {
my ($self, $text) = @_;
my @array;
while ($text =~ /(.*?)(^\|[^\n]*\|\n.*)/ms) {
push @array, $1;
my $table;
($table, $text) = $self->parse_table($2);
push @array, $table;
}
push @array, $text if length $text;
return @array;
}
sub parse_table {
my ($self, $text) = @_;
my $error = '';
my $rows;
while ($text =~ s/^(\|(.*)\|\n)//) {
$error .= $1;
my $data = $2;
my $row = [];
for my $datum (split /\|/, $data) {
$datum =~ s/^\s*(.*?)\s*$/$1/;
if ($datum =~ s/^<<(\S+)$//) {
my $marker = $1;
while ($text =~ s/^(.*\n)//) {
my $line = $1;
$error .= $line;
if ($line eq "$marker\n") {
$marker = '';
last;
}
$datum .= $line;
}
if (length $marker) {
return ($error, $text);
}
}
push @$row, $datum;
( run in 1.006 second using v1.01-cache-2.11-cpan-364913b4093 )