CSS-Prepare
view release on metacpan or search on metacpan
lib/CSS/Prepare.pm view on Meta::CPAN
return $self->{'base_url'};
}
sub get_http_timeout {
my $self = shift;
return $self->{'http_timeout'};
}
sub set_http_timeout {
my $self = shift;
$self->{'http_timeout'} = shift;
}
sub has_http {
my $self = shift;
return defined $self->{'http_provider'};
}
sub get_http_provider {
my $self = shift;
return $self->{'http_provider'};
}
sub has_plugins {
my $self = shift;
return $self->{'has_plugins'};
}
my $elements_first = sub {
my $a_element = ( $a =~ m{^[a-z]}i );
my $b_element = ( $b =~ m{^[a-z]}i );
my $element_count = $a_element + $b_element;
return ( $a_element ? -1 : 1 )
if 1 == $element_count;
return $a cmp $b;
};
sub parse_file {
my $self = shift;
my $file = shift;
my $location = shift;
my $string = $self->read_file( $file );
return $self->parse( $string, $file, $location )
if defined $string;
return;
}
sub parse_file_structure {
my $self = shift;
my $file = shift;
my $base = $self->get_base_directory();
return undef
unless defined $base && -d $base;
my $stylesheet = basename( $file );
my $directory = dirname( $file );
my @blocks;
my $path;
foreach my $section ( split m{/}, $directory ) {
$path .= "${section}/";
my $target = "${base}${path}${stylesheet}";
my @file_blocks = $self->parse_file( $target );
push @blocks, @file_blocks
if @file_blocks; # non-existent file is not an error
}
return @blocks;
}
sub parse_url {
my $self = shift;
my $url = shift;
my $location = shift;
my $string = $self->read_url( $url );
return $self->parse( $string, $url, $location )
if defined $string;
return;
}
sub parse_url_structure {
my $self = shift;
my $file = shift;
my $base = $self->get_base_url();
return undef
unless defined $base && $base =~ m{https?://};
my $stylesheet = basename( $file );
my $directory = dirname( $file );
my @blocks;
my $path;
foreach my $section ( split m{/}, $directory ) {
$path .= "${section}/";
my $target = "${base}${path}${stylesheet}";
my @file_blocks = $self->parse_url( $target );
push @blocks, @file_blocks
if @file_blocks; # non-existent url is not an error
}
return @blocks;
}
sub parse_string {
my $self = shift;
my $string = shift;
my $location = shift;
return $self->parse( $string )
}
sub parse_stylesheet {
my $self = shift;
my $stylesheet = shift;
my $location = shift;
my $target = $self->canonicalise_location( $stylesheet, $location );
return $self->parse_url( $target, $location )
if $target =~ RE_IS_URL;
return $self->parse_file( $target, $location );
}
sub canonicalise_location {
my $self = shift;
my $file = shift;
my $location = shift;
my $target;
# don't interfere with an absolute URL
if ( $file =~ RE_IS_URL ) {
$target = $file;
}
else {
if ( $file =~ m{^/} ) {
my $base = $self->get_base_directory();
if ( defined $base ) {
$target = "$base/$file";
}
else {
$target = $file;
}
if ( defined $location ) {
if ( $location =~ RE_MATCH_HOSTNAME ) {
$target = "${1}${file}";
}
}
}
else {
if ( defined $location ) {
$location =~ RE_MATCH_DIRECTORY;
$target = "${1}/${file}";
( run in 0.311 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )