#############################################################################################
# 指定されたファイルのコメントと空行を取り去る
#--------------------------------------------------------------------------------------------
sub strip_comment {
my $in_file = shift;
my $out_file = shift;
open IN, $in_file or die("Canot open file");
open OUT, ">$out_file";
while (
chop;
my $in_comment = 0;
my $content = $_;
#
# 最初に /* ... */ , // .... が合成記述のチェックを行う
#
if ( $content =~ m/^(.*)\/\*(.*)\*\/(.*)$/) { # /* */を1行中に発見
if ($content =~ m/^\/\/.*$/) { # 先頭に//がある?
next; # 全部コメント行なので次の行へ(ループ)
}
elsif ($content =~ m/^(.*)\*\/\/\*(.*)$/ ) { # /* ... *//* .....のパターンは通常処理
;
}
elsif ($content =~ s/^(.*?)\/\/*\/\*(.*)$//) { # ... //* ... */...のパターン発見
$_ = $1; # ...// の前部分を通常処理の対象とする
$content = $1;
}
}
# 再度、通常の処理を実行する。
if ( s/^(.*)\/\*(.*)\*\/(.*)$/$1 $3/ ) { # /* */を同じ行に発見
while ( s/^(.*)\/\*(.*)\*\/(.*)$/$1 $3/ ) { # さらに/* */を同じ行でさがす
;
}
$content = $_;
}
if (m/^(.*)\/\*(.*)/) {
if (s/^(.*?)\/\/(.*)$/$1/) { $content =$1; $_ = $1}
}
if ( s/^(.*)\/\*(.*)$/$1/ ) { # 次に /* をさがす
$content = $_;
if ( ! /^[ \t]*$/ ) {
print OUT "$content\n";
}
while (
chop;
$content = $_;
if ( s/^(.*)\*\/(.*)$/$2/ ) { # */を発見?
$content = $_;
last;
}
}
}
elsif ( s/^(.*?)\/\/.*$/$1/ ) { # V1.10 //を検索し最初の//以降すべて削除
$content = $1;
}
$_ = $content;
if ( /^[ \t]*\r$/ ) { # V1.6 spacespacespace LF
}
elsif ( /^[ \t]*$/ ) { # spacespacespace
}
else {
print OUT "$content\n";
}
}
close IN;
close OUT;
}
没有评论:
发表评论