/[pub]/suikawiki/script/misc/plugins/Image.wps
Suika

Contents of /suikawiki/script/misc/plugins/Image.wps

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sat May 10 04:28:24 2003 UTC (22 years, 8 months ago) by wakaba
Branch: MAIN
New

1 wakaba 1.1 Name:
2     Image
3     FullName:
4     SuikaWikiImage
5     URI:
6     IW:SuikaWiki:WikiAdmin
7    
8     # Require SuikaWiki::Plugin::SuikaWiki09
9    
10     {
11     Name:
12     wikiformat/SuikaWikiImage/0.9-to-HTML
13     FullName:
14     SuikaWikiImage/0.9 document format -> HTML
15     URI:
16     IW:SuikaWiki:SuikaWiki
17     Format:
18     my $c = $o->{content};
19     $c =~ s(\x0D?\x0A__IMAGE__\x0D?\x0A.+$){}s;
20     my $embed = '[[#embed:IMG:'.$o->{page}.']]';
21     unless (index ($c, $embed) > -1) {
22     $c = $embed . "\n" . $c;
23     }
24     if ($c !~ /\[\[\#comment/ && $o->{p}->{comment} && $o->{magic} !~ /obsoleted="yes"/ && !$main::database->meta (IsFrozen => $o->{page})) {
25     $c .= qq(\n[[#comment]]);
26     }
27     $r = SuikaWiki::Plugin::SuikaWiki09::text_to_html ($c, %$o);
28     }
29     {
30     Name:
31     wikiformat/SuikaWikiImage/0.9-to-image-png
32     FullName:
33     SuikaWikiImage/0.9 document format -> PNG image
34     URI:
35     IW:SuikaWiki:SuikaWiki
36     Format:
37     if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
38     require MIME::Base64;
39     $r = MIME::Base64::decode ($1);
40     if ($o->{magic} =~ m#image-type="(image/[0-9a-z_.+-]+)"#) {
41     my $type = $1;
42     $r = convert_image_type ($o, $r, $Type{$type} => $Type{'image/png'})
43     if $type ne 'image/png' && ref $Type{$type};
44     }
45     }
46     }
47     {
48     Name:
49     wikiformat/SuikaWikiImage/0.9-to-image-jpeg
50     FullName:
51     SuikaWikiImage/0.9 document format -> JPEG image
52     URI:
53     IW:SuikaWiki:SuikaWiki
54     Format:
55     if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
56     require MIME::Base64;
57     $r = MIME::Base64::decode ($1);
58     if ($o->{magic} =~ m#image-type="(image/[0-9a-z_.+-]+)"#) {
59     my $type = $1;
60     $r = convert_image_type ($o, $r, $Type{$type} => $Type{'image/jpeg'})
61     if $type ne 'image/jpeg' && ref $Type{$type};
62     }
63     }
64     }
65    
66     {
67     Name:
68     wikiformat/SuikaWikiImage/0.9-to-image-x-icon
69     FullName:
70     SuikaWikiImage/0.9 document format -> Windows icon
71     URI:
72     IW:SuikaWiki:"Wiki//Icon"
73     Format:
74     if ($o->{magic} =~ m#image-type="image/x-icon"#) {
75     if ($o->{content} =~ /\x0D?\x0A__IMAGE__\x0D?\x0A(.+)$/s) {
76     require MIME::Base64;
77     $r = MIME::Base64::decode ($1);
78     }
79     }
80     }
81     {
82     Name:
83     wikiformat/SuikaWikiImage/0.9-to-HTML-fragment
84     FullName:
85     SuikaWikiImage/0.9 document format -> HTML fragment
86     URI:
87     IW:SuikaWiki:SuikaWiki
88     Format:
89     if ($o->{magic} =~ m#image-type="([^"]+)"#) {
90     my $type = $1; $type =~ tr/\x00-\x20\x7F//d;
91     $type =~ s/[^0-9A-Za-z_]/_/g;
92     my $uri = $o->uri('wiki'); my $epage = $o->encode($o->{page});
93     my $alt = ''; $alt = $1 if $o->{magic} =~ /image-alt="([^"]+)"/;
94     $r = qq(<img src="$uri?mypage=$epage;mycmd=$type" alt="$alt" title="@{[$o->escape($o->{page})]}" longdesc="$uri?$epage" class="embed" />);
95     } else {
96     $r = qq(<span class="error-embed-image">).$o->resource('Embed:ImageNotFound',escape=>1).q(</span>);
97     }
98     }
99     {
100     Name:
101     wikiview/link-favicon
102     FullName:
103     Returns LINK element for favicon
104     Format:
105     my $page = $p->{page} || 'Wiki//Icon';
106     $page = get_icon_page_name ($o, $page) if $p->{use_page_icon};
107     if ($o->_database_exist ($page)) {
108     my ($magic, $content) = $o->magic_and_content ($main::database{$page});
109     if ($magic =~ m!^\#\?SuikaWikiImage/0\.9! && $magic =~ m#image-type="([^"]+)"#) {
110     my ($type0,$type) = ($1,$1); $type =~ tr/\x00-\x20\x7F//d;
111     $type =~ s/[^0-9A-Za-z_]/_/g;
112     my $alt = ''; $alt = $1 if $magic =~ /image-alt="([^"]+)"/;
113     $r = qq(<link rel="icon" type="@{[$o->escape($type0)]}" href="@{[$o->uri('wiki')]}?mypage=@{[$o->encode($page)]};mycmd=$type" title="$alt" class="favicon" />);
114     }
115     } else {
116     $r = qq(<!-- icon (@{[$o->escape($page)]}) not exist -->);
117     }
118     }
119     {
120     Name:
121     wikiview/img-favicon
122     FullName:
123     Returns IMG element for favicon
124     Format:
125     my $page = $p->{page} || 'Wiki//Icon';
126     $page = get_icon_page_name ($o, $page) if $p->{use_page_icon};
127     if ($o->_database_exist ($page)) {
128     my ($magic, $content) = $o->magic_and_content ($main::database{$page});
129     if ($magic =~ m!^\#\?SuikaWikiImage/0\.9! && $magic =~ m#image-type="([^"]+)"#) {
130     my ($type0,$type) = ($1,$1); $type =~ tr/\x00-\x20\x7F//d;
131     $type =~ s/[^0-9A-Za-z_]/_/g;
132     $r = qq(<img type="@{[$o->escape($type0)]}" src="@{[$o->uri('wiki')]}?mypage=@{[$o->encode($page)]};mycmd=$type" class="favicon" alt=" " />);
133     }
134     }
135     }
136    
137     Initialize:
138     our %Type;
139    
140     MODULE:
141     $Type{'image/png'} = {
142     type => 'image/png',
143     suffix => 'png',
144     };
145     $Type{'image/jpeg'} = {
146     type => 'image/jpeg',
147     suffix => 'jpeg',
148     };
149     $Type{'image/j2k'} = {
150     type => 'image/j2k',
151     suffix => 'j2k',
152     };
153     $Type{'image/jng'} = {
154     type => 'image/jng',
155     suffix => 'jng',
156     };
157     $Type{'image/svg+xml'} = {
158     type => 'image/svg+xml',
159     suffix => 'svg',
160     };
161     $Type{'image/x-icon'} = {
162     type => 'image/x-icon',
163     suffix => 'ico',
164     };
165     sub get_icon_page_name ($$) {
166     my ($o, $page) = @_;
167     my @name = SuikaWiki::Name::Space::split_name ($o->{page});
168     for (my $i = $#name; $i >= 0; $i--) {
169     my $p_name = &SuikaWiki::Name::Space::join_names ([@name[0..$i]]);
170     my ($pmagic) = $o->magic_and_content ($main::database{$p_name});
171     if ($pmagic =~ m!\#\?SuikaWiki! && $pmagic =~ m#page-icon="([^"]+)"#) {
172     $page = $1;
173     last;
174     } else {
175     $p_name = &SuikaWiki::Name::Space::join_names ([@name[0..$i], 'Icon']);
176     if ($o->_database_exist ($p_name)) {
177     $page = $p_name; last;
178     }
179     }
180     }
181     $page;
182     }
183     sub convert_image_type ($$$$) {
184     my ($o, $r, $from => $to) = @_;
185     $from ||= {}; $to ||= {};
186     if ($from->{type} && $to->{type}) {
187     my $fname = $o->_path_to ('TempPrefix').time.'.tmp.';
188     open PNG, '>', $fname . $from->{suffix};
189     binmode PNG;
190     print PNG $r;
191     close PNG;
192     system ('convert', $fname . $from->{suffix} => $fname . $to->{suffix});
193     if ($fname . $to->{suffix}) {
194     open ICO, $fname . $to->{suffix}; {
195     binmode ICO;
196     local $/ = undef;
197     $r = <ICO>;
198     } close ICO;
199     } else {
200     $r = '';
201     }
202     unlink $fname . $from->{suffix};
203     unlink $fname . $to->{suffix};
204     } else {
205     $r = '';
206     }
207     $r;
208     }
209     SuikaWiki::View->template ('links')->add_line (q(%link-favicon(use-page-icon);));
210     ## TODO: Provide better check function
211     SuikaWiki::View->definition (image_jpeg => {
212     media => {type => 'image/jpeg', expires => 240*3600},
213     check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_jpeg'))
214     && $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
215     template => '%read(to=>image_jpeg);'});
216     SuikaWiki::View->definition (image_png => {
217     media => {type => 'image/png', expires => 240*3600},
218     check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_png'))
219     && $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
220     template => '%read(to=>image_png);'});
221     SuikaWiki::View->definition (image_x_icon => {
222     media => {type => 'image/x-icon', expires => 240*3600},
223     check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_x_icon'))
224     && $_[0]->{magic} =~ m#image-type="image/# ? 1 : 0 },
225     template => '%read(to=>image_x_icon);'});
226    
227     POD:LICENSE:
228     Copyright 2003 Wakaba <w@suika.fam.cx>
229    
230     %%GNUGPL2%%

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24