/[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 - (show annotations) (download)
Sat May 10 04:28:24 2003 UTC (22 years, 8 months ago) by wakaba
Branch: MAIN
New

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