/[pub]/suikawiki/script/lib/SuikaWiki/Plugin/WikiResource.wp2
Suika

Contents of /suikawiki/script/lib/SuikaWiki/Plugin/WikiResource.wp2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations) (download)
Sun Feb 1 12:19:16 2004 UTC (22 years, 5 months ago) by wakaba
Branch: MAIN
Changes since 1.3: +35 -4 lines
Use try..catch for WikiDB

1 #?SuikaWikiConfig/2.0
2
3 Plugin:
4 @Name: WikiResource
5 @Description:
6 @@@: Wiki resource text support
7 @@lang:en
8 @License: %%GPL%%
9 @Author:
10 @@Name:
11 @@@@: Wakaba
12 @@@lang:ja
13 @@@script:Latn
14 @@Mail[list]: w@suika.fam.cx
15 @Date.RCS: $Date: 2004/01/16 07:47:04 $
16 @RequiredPlugin[list]:
17 SuikaWikiConst09
18 @Use:
19 use Message::Util::Error;
20 my $RESOURCE_CACHE;
21
22 PluginConst:
23 @NS_XHTML1:
24 http://www.w3.org/1999/xhtml
25
26 FormattingRule:
27 @Category[list]:
28 view
29 view-resource
30 page-link
31 link-to-resource
32 form-input
33 form-template
34 @Name: res
35 @Description:
36 @@@: Resource
37 @@lang: en
38 @Parameter:
39 @@Name: name
40 @@Type: CDATA
41 @@Default: #REQUIRED
42 @@Description:
43 @@@@: Resource name
44 @@@lang:en
45 @Formatting:
46 __ATTRTEXT:%name__;
47 __FUNCPACK__->get (name => $p->{name},
48 wiki => $o->{wiki},
49 formatter_context => 'view_resource',
50 formatter_option => {param => $o,
51 -parent => $p->{-parent}});
52
53 FormattingRule:
54 @Category[list]:
55 view
56 view-resource
57 page-link
58 link-to-resource
59 form-input
60 form-template
61 @Name: resource-as-plain-text
62 @Description:
63 @@@: Resource
64 @@lang: en
65 @Parameter:
66 @@Name: name
67 @@Type: CDATA
68 @@Default: #REQUIRED
69 @@Description:
70 @@@@: Resource name
71 @@@lang:en
72 @Formatting:
73 __ATTRTEXT:%name__;
74 __FUNCPACK__->get (name => $p->{name},
75 wiki => $o->{wiki});
76
77 Function:
78 @Name: logging_template_error
79 @Description:
80 @@@:
81 Logging formatting-template-text error
82 @@lang:en
83 @Main:
84 my (undef, $err, $wiki, %opt) = @_;
85 my $error = {};
86 my $dl = $error->{description}
87 = new Message::Markup::XML::Node
88 (type => '#element',
89 namespace_uri => $NS_XHTML1,
90 local_name => 'dl');
91 ## TODO: Use resource
92 $dl->append_new_node (type => '#element',
93 namespace_uri => $NS_XHTML1,
94 local_name => 'dt')
95 ->append_text ('Resource name');
96 $dl->append_new_node (type => '#element',
97 namespace_uri => $NS_XHTML1,
98 local_name => 'dd')
99 ->append_text ($opt{resource_name});
100 $dl->append_new_node (type => '#element',
101 namespace_uri => $NS_XHTML1,
102 local_name => 'dt')
103 ->append_text ('Error condition');
104 $dl->append_new_node (type => '#element',
105 namespace_uri => $NS_XHTML1,
106 local_name => 'dd')
107 ->append_text ($err->text);
108 $dl->append_new_node (type => '#element',
109 namespace_uri => $NS_XHTML1,
110 local_name => 'dt')
111 ->append_text ('Formatting context');
112 $dl->append_new_node (type => '#element',
113 namespace_uri => $NS_XHTML1,
114 local_name => 'dd')
115 ->append_text (qq($err->{-formatter}->{-category_name}));
116
117 push @{$wiki->{var}->{error}||=[]}, $error;
118
119 Function:
120 @Name: get_text
121 @Main:
122 my (undef, %opt) = @_;
123 __FUNCPACK__->get (%opt);
124 ## TODO: Implements formatter.
125
126 Function:
127 @Name: append_node
128 @Main:
129 my (undef, %opt) = @_;
130 __FUNCPACK__->get (%opt, formatter_context => 'view_resource',
131 formatter_option => {param => $opt{param},
132 -parent => $opt{parent}});
133
134 Function:
135 @Name: get
136 @Main:
137 my (undef, %opt) = @_;
138
139
140
141 my $text = __FUNCPACK__->temp_get_resource_text
142 (resource_ns => [qw/Wiki Resource/],
143 name => $opt{name},
144 wiki => $opt{wiki});
145 if (defined $text) {
146 #
147 } elsif (defined $opt{defailt}) {
148 $text = $opt{default};
149 } else {
150 $text = $opt{name};
151 }
152
153 return $text unless $opt{formatter_context};
154 try {
155 $text = SuikaWiki::Plugin->formatter ($opt{formatter_context})
156 ->replace ($text, %{$opt{formatter_option}});
157 } catch Message::Util::Formatter::error with {
158 my $err = shift;
159 if ($err->{-formatter}->{-category_name} eq $opt{formatter_context}) {
160 __FUNCPACK__->logging_template_error ($err,
161 $err->{-option}->{param}->{wiki},
162 resource_name => $opt{name});
163 undef;
164 } else {
165 $err->throw;
166 }
167 };
168 return $text;
169
170 Function:
171 @Name: temp_get_resource_text
172 @Main:
173 my (undef, %opt) = @_;
174 CORE::die "Buggy implementation: \$opt{wiki} required ".Carp::longmess()
175 unless ref $opt{wiki};
176 $opt{accept_language} ||= __FUNCPACK__->temp_get_accept_language (%opt);
177 $opt{resource} ||= $RESOURCE_CACHE ||= {};
178 my $v;
179 for my $lang (sort {$opt{accept_language}->{$b} <=>
180 $opt{accept_language}->{$a}}
181 grep {$opt{accept_language}->{$_} != 0}
182 keys %{$opt{accept_language}}) {
183 while (length $lang) {
184 unless ($opt{accept_language}->{defined $opt{accept_language}->{$lang}
185 ? $lang : '*'} == 0) {
186 ## WikiPage defined resource text (SuikaWikiConst/0.9)
187 if (not $opt{resource}->{$lang} and ref $opt{wiki}->{db}) {
188 try {
189 $v = $opt{wiki}->{db}->get (content => [@{$opt{resource_ns}}, $lang]);
190 } catch SuikaWiki::DB::Util::Error with {
191 $v = undef;
192 };
193 $opt{resource}->{$lang} = {};
194 SuikaWiki::Plugin->module_package ('SuikaWikiConst09')
195 ->text_to_hash (text => \$v,
196 hash => $opt{resource}->{$lang});
197 }
198 $v = $opt{resource}->{$lang}->{$opt{name}};
199 last if defined $v;
200 ## WikiPlugin defined resource text (SuikaWiki 3 WikiPlugin)
201 if (defined $SuikaWiki::Plugin::Resource::BaseResource->{$lang}->{''}->{$opt{name}}) {
202 $v = $SuikaWiki::Plugin::Resource::BaseResource->{$lang}->{''}->{$opt{name}};
203 last;
204 }
205 }
206 $lang =~ s/[^+-]*$//; $lang =~ s/[+-]$//;
207 }
208 last if defined $v;
209 } # Accepted languages
210 if (defined $v) {
211 return $v;
212 } else {
213 ## Plugin defined resource text or undef
214 return $SuikaWiki::Plugin::Resource::BaseResource->{und}->{''}->{$opt{name}};
215 }
216
217 Function:
218 @Name: temp_get_accept_language
219 @Main:
220 my (undef, %opt) = @_;
221 my %alang = (ja => 0.0002, en => 0.0001);
222 if ($opt{wiki}->{var}->{client}->{user_agent_name} =~ m#^Mozilla/0\.#) {
223 $alang{ja} = 0.00001;
224 }
225 my $i = 0.1;
226 for (split /\s*,\s*/, $opt{wiki}->{input}->meta_variable ('HTTP_ACCEPT_LANGUAGE')) {
227 tr/\x09\x0A\x0D\x20//d;
228 if (/((?:(?!;q=).)+)(?:;q="?([0-9.]+)"?)?/) {
229 my $l = lc $1; $l =~ tr/\x22\x5C//d;
230 $alang{$l} = (defined $2 ? $2 : 1.000)*1000;
231 $alang{$l} += $i unless $alang{$l} == 0;
232 $i -= 0.001;
233 }
234 }
235 return \%alang;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24