59 |
$code =~ s/\$$_\b/$Info->{const}->{$_}/ge; |
$code =~ s/\$$_\b/$Info->{const}->{$_}/ge; |
60 |
} |
} |
61 |
$code =~ s/__FUNCPACK__/$Info->{module_name}/g; |
$code =~ s/__FUNCPACK__/$Info->{module_name}/g; |
62 |
$code =~ s/<Q:([^:]+):([^>]+)>/literal $Info->{Namespace}->{$1}.$2/ge; |
$code =~ s/__FUNCPACK{([^{}]+)}__/(\$SuikaWiki::Plugin::Registry::Info{@{[literal $1]}}->{module_name} || SuikaWiki::Plugin->module_package (@{[literal $1]}))/g; |
63 |
|
$code =~ s{<Q:([^:]+):([^>]+)>}{ |
64 |
|
if ($Info->{Namespace}->{$1}) { |
65 |
|
literal $Info->{Namespace}->{$1}.$2; |
66 |
|
} else { |
67 |
|
warn qq(Namespace prefix "$1" not defined); |
68 |
|
literal $2; |
69 |
|
} |
70 |
|
}ge; |
71 |
|
|
72 |
$Info->{-message_error_used} = 1 if $code =~ /\buse\s+Message::Util::Error\b/; |
$Info->{-message_error_used} = 1 if $code =~ /\buse\s+Message::Util::Error\b/; |
73 |
if (not $Info->{-message_error_used} and |
if (not $Info->{-message_error_used} and |
117 |
substr ($s, 0, 1) ne '{' ? literal ($s) |
substr ($s, 0, 1) ne '{' ? literal ($s) |
118 |
: code ($Info, substr ($s, 1, length ($s) - 2)); |
: code ($Info, substr ($s, 1, length ($s) - 2)); |
119 |
} |
} |
120 |
|
sub expanded_uri ($$$) { |
121 |
|
my ($Info, $prefix, $lname) = @_; |
122 |
|
warn "$0: $prefix: Namespace prefix not declared" |
123 |
|
unless $Info->{Namespace}->{$prefix}; |
124 |
|
$Info->{Namespace}->{$prefix} . $lname; |
125 |
|
} |
126 |
|
|
127 |
my $parser = Message::Markup::SuikaWikiConfig20::Parser->new; |
my $parser = Message::Markup::SuikaWikiConfig20::Parser->new; |
128 |
my $plugins = $parser->parse_text ($src); |
my $plugins = $parser->parse_text ($src); |
289 |
$r .= code $Info, $_->get_attribute_value ('Main'); |
$r .= code $Info, $_->get_attribute_value ('Main'); |
290 |
$r .= line $Info, reset => 1; |
$r .= line $Info, reset => 1; |
291 |
$r .= qq(}\n); |
$r .= qq(}\n); |
292 |
|
} elsif ({qw/content_written 1 content_removed 1 content_type_changed_from 1 |
293 |
|
content_prop_modified 1/} |
294 |
|
->{my $node_name = $_->local_name}) { |
295 |
|
$r .= q(sub ).$node_name |
296 |
|
. q( {)."\n".q(my ($self, %opt) = @_;) |
297 |
|
. line $Info, node_path => qq(Format[module-name()=$module_name]/$node_name]); |
298 |
|
$r .= code $Info, $_->get_attribute_value ('Main'); |
299 |
|
$r .= line $Info, reset => 1; |
300 |
|
$r .= qq(}\n); |
301 |
} elsif ($_->local_name eq 'Use') { |
} elsif ($_->local_name eq 'Use') { |
302 |
$r .= line $Info, node_path => qq(Format[module-name()=$module_name]/Use); |
$r .= line $Info, node_path => qq(Format[module-name()=$module_name]/Use); |
303 |
$r .= code $Info, $_->inner_text; |
$r .= code $Info, $_->inner_text; |
304 |
|
} elsif ($_->local_name eq 'Prop') { |
305 |
|
$r .= q<sub prop ($$;%) { my ($self, $name, %opt) = @_;>; |
306 |
|
my $f = 0; |
307 |
|
for my $prop (@{$_->child_nodes}) { |
308 |
|
if ($prop->local_name =~ /^([^:]+):([^:]+)$/) { |
309 |
|
$r .= qq{if (\$name eq @{[literal expanded_uri $Info, $1, $2]}) { return @{[literal $prop->value]} } els}; |
310 |
|
$f = 1; |
311 |
|
} |
312 |
|
} |
313 |
|
$r .= q<e {> if $f; |
314 |
|
$r .= q{$self->SUPER::prop ($name, %opt);}; |
315 |
|
$r .= q<}> if $f; |
316 |
|
$r .= qq<\n}\n>; |
317 |
} |
} |
318 |
} |
} |
319 |
$r; |
$r; |
530 |
|
|
531 |
sub make_view_template_method ($$) { |
sub make_view_template_method ($$) { |
532 |
my ($src, $Info, $ViewProp) = @_; |
my ($src, $Info, $ViewProp) = @_; |
533 |
|
my $media_type = $src->get_attribute_value |
534 |
|
('media-type', |
535 |
|
default => q<application/octet-stream>); |
536 |
my $r = <<EOH; |
my $r = <<EOH; |
537 |
|
|
538 |
sub main (\$\$\$) { |
sub main (\$\$\$) { |
557 |
$x?q{$opt2->{output}->{status_code} = }.(0 + $x).q{;}:q{}}]} |
$x?q{$opt2->{output}->{status_code} = }.(0 + $x).q{;}:q{}}]} |
558 |
@{[do{my $x=$src->get_attribute('http-status-phrase',make_new_node=>1)->inner_text; |
@{[do{my $x=$src->get_attribute('http-status-phrase',make_new_node=>1)->inner_text; |
559 |
$x?q{$opt2->{output}->{status_phrase} = }.literal($x).q{;}:q{}}]} |
$x?q{$opt2->{output}->{status_phrase} = }.literal($x).q{;}:q{}}]} |
560 |
\$opt2->{output}->{entity}->{media_type} = @{[literal |
\$opt2->{output}->{entity}->{media_type} = @{[literal $media_type]}; |
561 |
$src->get_attribute ('media-type',make_new_node=>1) |
|
|
->inner_text || 'application/octet-stream']}; |
|
562 |
@{[($src->get_attribute ('use-media-type-charset',make_new_node=>1) |
@{[($src->get_attribute ('use-media-type-charset',make_new_node=>1) |
563 |
->inner_text || 0) ? |
->inner_text || 0) ? |
564 |
q{$opt2->{output}->{entity}->{charset} = $self->{view}->{wiki}->{config}->{charset}->{output};}: |
q{$opt2->{output}->{entity}->{charset} = $self->{view}->{wiki}->{config}->{charset}->{output};}: |
578 |
\$self->{view}->{wiki}->init_db; |
\$self->{view}->{wiki}->init_db; |
579 |
\$self->main_pre (\$opt, \$opt2); |
\$self->main_pre (\$opt, \$opt2); |
580 |
|
|
581 |
|
@{[$media_type eq 'text/html' ? q{require Message::Markup::XML::Serialize::HTML;} : '']} |
582 |
use Message::Util::Error; |
use Message::Util::Error; |
583 |
try { |
try { |
584 |
\$opt2->{output}->{entity}->{body} |
\$opt2->{output}->{entity}->{body} |
585 |
= SuikaWiki::Plugin->formatter ('view') |
= @{[$media_type eq 'text/html' ? q{Message::Markup::XML::Serialize::HTML::html_simple} : '']} |
586 |
->replace (\$opt2->{template}, param => \$opt2->{o}); |
(SuikaWiki::Plugin->formatter ('view') |
587 |
|
->replace (\$opt2->{template}, param => \$opt2->{o})); |
588 |
} \$self->{view}->{wiki}->{config}->{catch}->{ @{[ |
} \$self->{view}->{wiki}->{config}->{catch}->{ @{[ |
589 |
$ViewProp->{Name} eq '-error' ? 'formatter_view_error' |
$ViewProp->{Name} eq '-error' ? 'formatter_view_error' |
590 |
: 'formatter_view' ]} }; |
: 'formatter_view' ]} }; |