Name:
Image
FullName:
SuikaWikiImage
URI:
IW:SuikaWiki:WikiAdmin
{
Name:
wikiformat/SuikaWikiImage/0.9-to-HTML
FullName:
SuikaWikiImage/0.9 document format -> HTML
URI:
IW:SuikaWiki:SuikaWiki
Format:
my $c = $o->{content};
$c =~ s(\x0D?\x0A__IMAGE__\x0D?\x0A.+$){}s;
my $embed = '[[#embed:IMG:'.$o->{page}.']]';
unless (index ($c, $embed) > -1) {
$c = $embed . "\n" . $c;
}
if ($c !~ /\[\[\#comment/ && $o->{p}->{comment} && $o->{magic} !~ /obsoleted="yes"/ && !$main::database->meta (IsFrozen => $o->{page})) {
$c .= qq(\n[[#comment]]);
}
$r = &main::text_to_html ($c, %$o);
}
{
Name:
wikiformat/SuikaWikiImage/0.9-to-image-png
FullName:
SuikaWikiImage/0.9 document format -> PNG image
URI:
IW:SuikaWiki:SuikaWiki
Format:
if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
require MIME::Base64;
$r = MIME::Base64::decode ($1);
if ($o->{magic} =~ m#image-type="(image/[0-9a-z_.+-]+)"#) {
my $type = $1;
$r = convert_image_type ($o, $r, $Type{$type} => $Type{'image/png'})
if $type ne 'image/png' && ref $Type{$type};
}
}
}
{
Name:
wikiformat/SuikaWikiImage/0.9-to-image-jpeg
FullName:
SuikaWikiImage/0.9 document format -> JPEG image
URI:
IW:SuikaWiki:SuikaWiki
Format:
if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
require MIME::Base64;
$r = MIME::Base64::decode ($1);
if ($o->{magic} =~ m#image-type="(image/[0-9a-z_.+-]+)"#) {
my $type = $1;
$r = convert_image_type ($o, $r, $Type{$type} => $Type{'image/jpeg'})
if $type ne 'image/jpeg' && ref $Type{$type};
}
}
}
{
Name:
wikiformat/SuikaWikiImage/0.9-to-image-x-icon
FullName:
SuikaWikiImage/0.9 document format -> Windows icon
URI:
IW:SuikaWiki:"Wiki//Icon"
Format:
if ($o->{magic} =~ m#image-type="image/x-icon"#) {
if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
require MIME::Base64;
$r = MIME::Base64::decode ($1);
}
}
}
{
Name:
wikiformat/SuikaWikiImage/0.9-to-HTML-fragment
FullName:
SuikaWikiImage/0.9 document format -> HTML fragment
URI:
IW:SuikaWiki:SuikaWiki
Format:
if ($o->{magic} =~ m#image-type="([^"]+)"#) {
my $type = $1; $type =~ tr/\x00-\x20\x7F//d;
$type =~ s/[^0-9A-Za-z_]/_/g;
my $uri = $o->uri('wiki'); my $epage = $o->encode($o->{page});
my $alt = ''; $alt = $1 if $o->{magic} =~ /image-alt="([^"]+)"/;
$r = qq(
);
} else {
$r = qq().$o->resource('Embed:ImageNotFound',escape=>1).q();
}
}
{
Name:
wikiview/link-favicon
FullName:
Returns LINK element for favicon
Format:
my $page = $p->{page} || 'Wiki//Icon';
$page = get_icon_page_name ($o, $page) if $p->{use_page_icon};
if ($o->_database_exist ($page)) {
my ($magic, $content) = $o->magic_and_content ($main::database{$page});
if ($magic =~ m!^\#\?SuikaWikiImage/0\.9! && $magic =~ m#image-type="([^"]+)"#) {
my ($type0,$type) = ($1,$1); $type =~ tr/\x00-\x20\x7F//d;
$type =~ s/[^0-9A-Za-z_]/_/g;
my $alt = ''; $alt = $1 if $magic =~ /image-alt="([^"]+)"/;
$r = qq();
}
} else {
$r = qq();
}
}
{
Name:
wikiview/img-favicon
FullName:
Returns IMG element for favicon
Format:
my $page = $p->{page} || 'Wiki//Icon';
$page = get_icon_page_name ($o, $page) if $p->{use_page_icon};
if ($o->_database_exist ($page)) {
my ($magic, $content) = $o->magic_and_content ($main::database{$page});
if ($magic =~ m!^\#\?SuikaWikiImage/0\.9! && $magic =~ m#image-type="([^"]+)"#) {
my ($type0,$type) = ($1,$1); $type =~ tr/\x00-\x20\x7F//d;
$type =~ s/[^0-9A-Za-z_]/_/g;
$r = qq(
);
}
}
}
Initialize:
our %Type;
MODULE:
$Type{'image/png'} = {
type => 'image/png',
suffix => 'png',
};
$Type{'image/jpeg'} = {
type => 'image/jpeg',
suffix => 'jpeg',
};
$Type{'image/j2k'} = {
type => 'image/j2k',
suffix => 'j2k',
};
$Type{'image/jng'} = {
type => 'image/jng',
suffix => 'jng',
};
$Type{'image/svg+xml'} = {
type => 'image/svg+xml',
suffix => 'svg',
};
$Type{'image/x-icon'} = {
type => 'image/x-icon',
suffix => 'ico',
};
sub get_icon_page_name ($$) {
my ($o, $page) = @_;
my @name = SuikaWiki::Name::Space::split_name ($o->{page});
for (my $i = $#name; $i >= 0; $i--) {
my $p_name = &SuikaWiki::Name::Space::join_names ([@name[0..$i]]);
my ($pmagic) = $o->magic_and_content ($main::database{$p_name});
if ($pmagic =~ m!\#\?SuikaWiki! && $pmagic =~ m#page-icon="([^"]+)"#) {
$page = $1;
last;
} else {
$p_name = &SuikaWiki::Name::Space::join_names ([@name[0..$i], 'Icon']);
if ($o->_database_exist ($p_name)) {
$page = $p_name; last;
}
}
}
$page;
}
sub convert_image_type ($$$$) {
my ($o, $r, $from => $to) = @_;
$from ||= {}; $to ||= {};
if ($from->{type} && $to->{type}) {
my $fname = $o->_path_to ('TempPrefix').time.'.tmp.';
open PNG, '>', $fname . $from->{suffix};
binmode PNG;
print PNG $r;
close PNG;
system ('convert', $fname . $from->{suffix} => $fname . $to->{suffix});
if ($fname . $to->{suffix}) {
open ICO, $fname . $to->{suffix}; {
binmode ICO;
local $/ = undef;
$r = ;
} close ICO;
} else {
$r = '';
}
unlink $fname . $from->{suffix};
unlink $fname . $to->{suffix};
} else {
$r = '';
}
$r;
}
SuikaWiki::View->template ('links')->add_line (q(%link-favicon(use-page-icon);));
## TODO: Provide better check function
SuikaWiki::View->definition (image_jpeg => {
media => {type => 'image/jpeg', expires => 240*3600},
check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_jpeg'))
&& $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
template => '%read(to=>image_jpeg);'});
SuikaWiki::View->definition (image_png => {
media => {type => 'image/png', expires => 240*3600},
check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_png'))
&& $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
template => '%read(to=>image_png);'});
SuikaWiki::View->definition (image_x_icon => {
media => {type => 'image/x-icon', expires => 240*3600},
check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_x_icon'))
&& $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
template => '%read(to=>image_x_icon);'});
POD:LICENSE:
Copyright 2003 Wakaba
%%GNUGPL2%%