15 Sep 2013 18:46:26

Perl Script

Данный скрипт удаляет мусор из css файла по указанным селекторам.




Bash part:
#!/bin/bash
if [ -f $1 ]
  then
    selectors=$(cat `pwd`'/selectors')
    content=`cat $1`
    IFS=$(echo -en "\n\b")

    for i in $selectors
      do
        content="$(echo "$content" | perl `pwd`/regexp.pl "$i" | more)"
      done
     #content="$(echo "$content" | perl `pwd`/formater.pl | more)"
     echo "$content" > $1
  else
    echo "error, there isn't exist $1 file"
fi

Perl part:

#!/usr/bin/perl
# Created by Pavel Ruban.
# Contacts: http://pavelruban.org

BEGIN { $selector = $ARGV[0] }
$content = <STDIN>;

# Declare the subroutines
sub trim($);

## Function block.

# Delete css block with single matched selector or delete selector's part mattched.
sub complex_selector_exclude {
  my (@selectors) = @_;
  foreach my $selector (@selectors) {
  $selector =~ s/(\\ |\\s)/\\s+/g;

    BEGIN {undef $/;}
    $content =~ s/^\s*($selector)\s*{[^{]*?}//gsm;
    $content =~ s/^([^{]*),\s*(?:$selector)\s*([^{]*{)/$1 $2/gsm;
    $content =~ s/^([^{]*)\s*(?:$selector)\s*,([^{]*{)/$1 $2/gsm;
  }
  return $content;
}

# Delete css block with single matched selector or delete selector's part mattched.
sub simple_selector_exclude {
  my ($selector) = @_;
  $selector =~ s/(\\ |\\s)/\\s+/g;

  BEGIN {undef $/;}
  $content =~ s/^\s*($selector)\s*{[^{]*?}//gsm;
  $content =~ s/^([^{]*),\s*(?:$selector)\s*([^{]*{)/$1 $2/gsm;
  $content =~ s/^([^{]*)\s*(?:$selector)\s*,([^{]*{)/$1 $2/gsm;

  return $content;
}

## Main logic block.

if ($selector =~ /,/) {
  @selectors = split(/,/, $selector);
  foreach my $selector (@selectors) {
    $trimmedSelector = trim($selector);
    if ($trimmedSelector) {
      $trimmedSelector = quotemeta($trimmedSelector);
      push(@checked_selectors, $trimmedSelector);
    }
  }
  if (!@checked_selectors) {
    # Output script result.
    print $content;
    exit;
  }
}
else {
  $checked_selector = trim($selector);
  if (!$checked_selector) {
    # Output script result.
    print $content;
    exit;
  }
  $checked_selector = quotemeta($checked_selector);
}

if (@checked_selectors) {
  $content = complex_selector_exclude(@checked_selectors);
}
else {
  $content = simple_selector_exclude($checked_selector);
}

# Output script result.
print $content;

# Perl trim function to remove whitespace from the start and end of the string
sub trim($) {
    my $string = shift;
    $string =~ s/^\s+//;
    $string =~ s/\s+$//;
    return $string;
}

Comments:

add comment