Perl 小品集 ─ perl2html
#!/usr/bin/perl
#
# perl2html.pl
# perl script からキーワードなどをカラー表示した HTML ファイルをつくる。
# perl2html というプログラムはすでにあるが、日本語に対応していないため
# 日本語のコメント行が文字化けするので、新たに作った。
# キーワードのカラーコーディングは XZ のデフォルトカラーに準拠した。
# キーワードのリスト
# ハイライトしたいキーワードをここに追加できる
@keyword = qw (and chomp close die else elsif eq exit foreach if last local
my open or print qw return split s sub system unlink use while);
# カラーコードの定義
$color_comment = "#008183";
$color_keyword = "#008100";
$color_quote = "#830041";
$color_subroutine = "#830041";
# ファイル名が入力されたかどうか
$input = $ARGV[0];
if ($input eq ""){
print "Input PERL script name.\n";
exit(0);
}
# ファイルのオープン
open INP, "$input.pl";
open OUT, ">$input.html";
&html_head();
foreach $line (<INP>){
chomp $line;
# タグの変換
$line =~ s/&/&/g;
$line =~ s/"/"/g;
$line =~ s/</</g;
$line =~ s/>/>/g;
# コメント行
if ($line =~ /^[\s]*#/){
$line = "<font color=$color_comment>$line</font>";
}
# 引用
$line =~ s|("[ -~]*")|<font color=$color_quote>$1</font>|g;
# サブルーチン
$line =~ s|(&[\w]+)|<font color=$color_subroutine><b>$1</b></font>|g;
$line =~ s|^(sub [\w]+)|<font color=$color_subroutine><b>$1</b></font>|;
# キーワード
foreach $keyword (@keyword){
$line =~ s|\b$keyword\b|<font color=$color_keyword><b>$keyword</b></font>|g;
}
# タブをスペースに変換
$line =~ s/\t/ /g;
print OUT "$line\n";
}
&html_tail();
# 終了メッセージ
print "$input.html was created.\n";
exit (0);
sub html_head(){
local $buffer =<< "_END_";
<!DOCTYPE HTML PUBLIC "-|W3C|DTD HTML 4.0 Transitional|EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<TITLE>Penguin Club-Perl
</TITLE>
<LINK REL=StyleSheet HREF="style.css" TYPE="text/css">
</HEAD>
<BODY BACKGROUND="../images/crc-back.gif">
<UL><UL>
<CENTER><IMG SRC="../images/penguin_club.gif" HEIGHT=60 WIDTH=292>
<H2>Perl 小品集 ─ $input</H2></CENTER>
<pre>
_END_
print OUT $buffer;
}
sub html_tail(){
local $buffer =<< "_END_";
</pre>
<br><div align="center"><form><input type="button" value="目次にもどる" onclick="location='index.html'"><br><A HREF="index.html">[INDEX]</A></form></div>
</UL></UL>
<BODY>
</HTML>
_END_
print OUT $buffer;
}