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($alt); } 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%%