#!D:/Perl/bin/perl.exe # *** HTML表示ファイルの行頭や行末スペースを削除するPerlスクリプト *** Rev.1.000 # ファイル名:HTMLspaceCut.cgi # 作成:鷹の巣 URL:http://sakaguch.com/ 電子メール:http://sakaguch.com/cgi/postmail/ より送信して下さい。 # $content = 'Front Page等で作成されたHTMLファイルの行頭や行末スペースの削除を行います。'; # Perlの練習用として作成しましたので、簡単な判断しかしていません。(安全第一です。) # 元のhtmlファイル名には、.bakを付加して、バックアップを行っています。 # .bakを付加したファイルが存在する場合は、このバックアップファイルの更新を行いません。 # # 2001.09.28 Rev.0.000 初版 # 2002.08.12 Rev.0.001 コマンドラインからの起動をCGIに変更。 # 2002.10.11 Rev.0.002 HTML 4.01 strictに対応。 # 2002.11.23 Rev.1.000 公開(ブラウザIE6とNN7.0の文字化け対策の為、コメントを変更。) # # 起動方法:コマンドラインより、perl HTMLspaceCut.cgiと入力するか #      http://example.com/cgi-bin/HTMLspaceCut.cgi等とWebサーバーから実行します。 # # 注)成形済みテキスト
?
タグの間の行頭の空白は、削除しない様にしています。 #   ただし、タブキーの削除は、指定があれば削除します。 #------------# # 基本設定 # #------------# # 実行時のみ、コメント行にします。通常は、起動しない(されない)様にすること。!!! #exit; # タブキーの削除設定(0:削除しない、1:削除する)###「削除しない」を推奨します。### #$FlagTabDel = 0; # 不要改行の削除設定(0:削除しない、1:削除する)###「削除しない」を推奨します。### #$FlagLfDel = 0; # 対象ファイルの設定 ###絶対パスかhttpドキュメントルートからのファイル名を指定します。### @SourceFile = ( # 書式→ '$FlagTabDel<>$FlagLfDel<>$SourceFile<>', '0<>0<>D:/WWW/public_html/index.html<>', '0<>0<>D:/WWW/public_html/xxxxx.html<>', '', ); #------------# # HTML設定 # #------------# $title = 'HTMLファイルのスペース削除'; $content = 'Front Page等で作成されたHTMLファイルの行頭や行末スペースの削除を行います。'; $keyword = 'HTMLファイル,スペース削除'; # 管理者名とメールアドレス $webmaster = '管理者名'; $mailaddress = 'webmaster@example.com'; $prev = '/index.html'; $next = ''; # 上部に挿入するリンク $UpperBanner = <<'_MSG_';

目次更新履歴掲示板リンク集

_MSG_ $DateSakusei = ''; #------------# # 設定完了 # #------------# &main; exit; #----------# # 主回路 # #----------# sub main { &header ($title, $content, $keyword, $mailaddress, $prev, $next, $UpperBanner, $DateSakusei); print '以下のファイルの行頭や行末スペースの削除処理が完了しました。元のソースファイル名には、末尾に.bakを追加しています。
'."\n"; print '不具合が発生した場合は、ソースファイル(末尾に.bakを追加)を元ファイル名に戻すと復旧します。
'."\n"; foreach (@SourceFile) { if ($_ ne '') { ($FlagTabDel, $FlagLfDel, $SourceFileName) = split(/<>/, $_); print "タブキーの削除:"; if ($FlagTabDel) { print "有"; } else { print "無"; } print "、不要改行の削除:"; if ($FlagLfDel) { print "有"; } else { print "無"; } print "、ファイル名:$SourceFileName"; $SourceFile = "$SourceFileName\.bak"; $DistFile = $SourceFileName; $FlagRep = &CommentCut ($SourceFile, $DistFile, $FlagTabDel, $FlagLfDel); if ($FlagRep) { print " 変更あり。
\n"; } else { print "
\n"; } } } &footer; } #----------------------# # コメント行削除処理 # #----------------------# sub CommentCut { my ($fileIN, $fileOUT, $FlagTabDel, $FlagLfDel) = @_; my ($LineCount, @new, $SourceList, @SourceList); open(IN,"$fileOUT") || &error("Can't openIN $fileIN"); @SourceList = ; close(IN); $LineCount = 0; @new = (); $FlagPre = 0; $FlagRep = 0; foreach $SourceList (@SourceList) { chomp ($SourceList); if ($SourceList =~ /
/) { $FlagPre = 1; }

		# 行頭空白削除
		if (!$FlagPre) {
			if ($SourceList =~ /^\s+/) { $SourceList =~ s/^\s+//; $FlagRep = 1; }
		}
		# 行末空白削除
		if ($SourceList =~ /\s+$/) { $SourceList =~ s/\s+$//; $FlagRep = 1; }
		# タブキーの削除
		if ($FlagTabDel) {
			if ($SourceList =~ /\t/) { $SourceList =~ s/\t//; $FlagRep = 1; }
		}
		# 不要改行の削除
		if ($FlagLfDel && ($SourceList eq "\n")) { $FlagRep = 1; next; }

		if ($SourceList =~ /<\/pre>/) { $FlagPre = 0; }

		push (@new , "$SourceList\n");
	}
	if ($FlagRep) {
		if (!(-e "$fileIN")) {	# $fileINファイルが存在しなければ、
			rename($fileOUT, "$fileIN");
		}
		open(OUT,">$fileOUT") || &error("Can't openOUT $fileOUT");
			print OUT @new;
		close(OUT);
	}
	return $FlagRep;
}

#--------------#
# エラー表示 #
#--------------#
sub error {
	print "ERROR - $_[0]\n";
}

#------------------#
#  HTMLのヘッダー  #
#------------------#
sub header {
	my ($title, $content, $keyword, $mailaddress, $prev, $next, $UpperBanner, $DateSakusei) = @_;
	$head_flag = 1;
	if (!$DateSakusei) {
		($sec, $min, $hour, $day, $mon, $year, $wday) = localtime(time());
		$DateSakusei = "作成日:" . sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$day);
	}

	print "Content-type: text/html\n\n";
	print <<"_MSG_";

















$title


$UpperBanner
$DateSakusei 作成:$webmaster
$content

$title

_MSG_ } #------------------# # HTMLのフッター # #------------------# sub footer { print <<"_MSG_";
目次▲頁先頭

_MSG_ }