/[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.3 - (show annotations) (download)
Fri Jan 16 07:47:04 2004 UTC (22 years, 5 months ago) by wakaba
Branch: MAIN
Changes since 1.2: +121 -17 lines
Ported from SuikaWiki 2

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24