Catch unmatched "[" in selector parser with a helpful error
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / ZConfig.pm
CommitLineData
d80786d0 1package HTML::Zoom::ZConfig;
2
3use strict;
4use warnings FATAL => 'all';
5
6my %DEFAULTS = (
7 parser => 'HTML::Zoom::Parser::BuiltIn',
8 producer => 'HTML::Zoom::Producer::BuiltIn',
9 filter_builder => 'HTML::Zoom::FilterBuilder',
10 selector_parser => 'HTML::Zoom::SelectorParser',
11 stream_utils => 'HTML::Zoom::StreamUtils',
12);
13
14my $ALL_DEFAULT;
15
16sub new {
17 my ($class, $args) = @_;
18 return $ALL_DEFAULT if $ALL_DEFAULT && !keys %{$args||{}};
19 my $new = {};
20 foreach my $arg_name (keys %DEFAULTS) {
21 $new->{$arg_name} = $args->{$arg_name} || $DEFAULTS{$arg_name};
22 if (ref($new->{$arg_name})) {
23 $new->{$arg_name} = $new->{$arg_name}->with_zconfig($new);
24 } else {
25 require(do { (my $m = $new->{$arg_name}) =~ s/::/\//g; "${m}.pm" });
26 $new->{$arg_name} = $new->{$arg_name}->new({ zconfig => $new });
27 }
28 }
29 $ALL_DEFAULT = $new if !keys %{$args||{}};
30 bless($new, $class);
31}
32
33sub parser { shift->{parser} }
34sub producer { shift->{producer} }
35sub filter_builder { shift->{filter_builder} }
36sub selector_parser { shift->{selector_parser} }
37sub stream_utils { shift->{stream_utils} }
38
391;