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

1 wakaba 1.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 wakaba 1.3 @Date.RCS: $Date: 2003/12/01 07:31:52 $
16     @RequiredPlugin[list]:
17     SuikaWikiConst09
18 wakaba 1.2 @Use:
19     use Message::Util::Error;
20 wakaba 1.1
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 wakaba 1.3 link-to-resource
31 wakaba 1.1 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 wakaba 1.3 __FUNCPACK__->get (name => $p->{name},
47     wiki => $o->{wiki},
48     formatter_context => 'view_resource',
49     formatter_option => {param => $o,
50     -parent => $p->{-parent}});
51 wakaba 1.1
52 wakaba 1.2 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 wakaba 1.3
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