#!jperl
# 百科事典形式から HTML形式へのコンバート
#
# 96/11/20 0.20
#　とりあえずまじめに書きなおしはじめる。
#　拡張子を自動で付け替えるようにした。
#　……とりあえず百科事典のコンバータは作成しました。ちゃんと16進に変換す
#るのでOKだと思います。副産物として、辞典の各項目のインデックスの生成が可
#能になり、今まで使用されていなかった→による関連語リンクが生きるようにな
#りました。いやー、本気で便利です。
#　今後は百科事典から抽出した用語解説を、setextの変換時に自動的にリンクと
#して取り込めるようにしたいですね。初出語には開設リンクが張れるようにする、
#というわけです。
#
# 96/11/22 0.21
#・項目名と項目内容のあいだに空白が入るのを処置した。
#・&や<や>のhtml中では生で書いてはいけない文字に対する変換処理を追加。
#・<DL></DL>と中身が空のリストを除去する

$infile = $ARGV[0];
$name = "";
$first_indent_flag="NO";

open(IN, "<$infile");

while (<IN>) {
	chop;
	s/&/\&amp\;/g;
	s/\</\&lt;/g;
	s/\>/\&gt;/g;

	if (/^□(.*)/) {# タイトル認識
		$name=$1;
	}elsif (/^☆([^ ]*)/) {
		$anchor = unpack("H*",$1);
		#$anchor = $1;
		# $val=~ s/%(..)/pack("c", hex($1))/ge;
		#$bits = unpack("c*", $vector);
		#$anchor =~ s/./pack("c", hex($1))/ge;
		if ($1 eq "あ"){
			$list.="<H2><a href=\"#TOP\" NAME=\"$anchor\">$1</A></H2>\n<DL>\n";
		}else {
			$list.="</DL>\n<H2><a href=\"#TOP\" NAME=\"$anchor\">$1</A></H2>\n<DL>\n";
		}
	}elsif (/^([^ ]+)【([^】]+)】《([^》]+)》$/) {
		$anchor = unpack("H*",$2);
		$anchor1 = unpack("H*",$1);
		$index .= "<li><a href=\"#$anchor\">$2</A>\n";
		$list.="<DT><A NAME=\"$anchor1\">$1</A>\n";
		$list.="<DT><A NAME=\"$anchor\"><STRONG>$2</STRONG>《$3》</A>\n<DD>";
		$first_indent_flag="YES";
	}elsif (/^([^ ]+)《([^》]+)》$/){
		$anchor = unpack("H*",$2);
		$index .= "<li><a href=\"#$anchor\">$2</A>\n";
		$list.="<DT><A NAME=\"$anchor\"><STRONG>$1</STRONG>《$2》</A>\n<DD>";
		$first_indent_flag="YES";
	}elsif (/^\t→(.+)/ || /^　　　　→(.+)/ || /^        →(.+)/){
		$anchor = unpack("H*",$1);
		if ($first_indent_flag eq "YES"){
			$list.="<a href=\"#$anchor\">$1</A>\n";
			$first_indent_flag="NO";
		}else{
			$list.="<BR><a href=\"#$anchor\">$1</A>\n";
		}
	}elsif (/^\t　(.*)/ || /^　　　　　(.*)/ || /^        　([^　→]+)/){
		if ($first_indent_flag eq "YES"){
			$list.="$1";
			$first_indent_flag="NO";
		}else{
			$list.="<BR>$1\n";
		}
	}elsif (/^[\t 　]+【(.*)】(.*)$/){
		# 内部に説明項目を入れる場合
#		if ($first_indent_flag eq "YES"){
			$list.="<br><STRONG>【$1】</STRONG>$2";
#			$first_indent_flag="NO";
#		}else{
#			$list.="<BR>$1\n";
#		}
	}elsif (/^\t([^　→]+)/ || /^　　　　([^　→]+)/ || /^        ([^　→]+)/){
		$list.="$1\n";
	}
}
close(IN);

$list .="<\/DL>";
$list =~ s/<DL>\n<\/DL>//g;#空の除去
$list =~ s/<DL><\/DL>//g;#空の除去

($filename,$ext)=split(/\./,$infile,2);
$outfile = $filename . ".HTM";
open(OUT,">$outfile");

print OUT<<EOF;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang="ja">
<HEAD>
<TITLE>$filename Page</TITLE>
<LINK REV=MADE HREF="mailto:sf\@kataribe.com">
<LINK REL=STYLESHEET TYPE="text/css" HREF="/text.css" TITLE="Text_sf">
</HEAD>
<BODY BGCOLOR="#FFFFF0" TEXT="Black" LINK="Blue" VLINK="Purple" ALINK="red">
<H1>$name</H1>
<HR>
<H2><A NAME="TOP">目次</A></H2>
<ul>
<li><a href="#INDEX">索引</A>
<li><a href="#82a0">あ</A> / <a href="#82a2">い</A> / <a href="#82a4">う</A> / <a href="#82a6">え</A> / <a href="#82a8">お</A>
<li><a href="#82a9">か</A> / <a href="#82ab">き</A> / <a href="#82ad">く</A> / <a href="#82af">け</A> / <a href="#82b1">こ</A>
<li><a href="#82b3">さ</A> / <a href="#82b5">し</A> / <a href="#82b7">す</A> / <a href="#82b9">せ</A> / <a href="#82bb">そ</A>
<li><a href="#82bd">た</A> / <a href="#82bf">ち</A> / <a href="#82c2">つ</A> / <a href="#82c4">て</A> / <a href="#82c6">と</A>
<li><a href="#82c8">な</A> / <a href="#82c9">に</A> / <a href="#82ca">ぬ</A> / <a href="#82cb">ね</A> / <a href="#82cc">の</A>
<li><a href="#82cd">は</A> / <a href="#82d0">ひ</A> / <a href="#82d3">ふ</A> / <a href="#82d6">へ</A> / <a href="#82d9">ほ</A>
<li><a href="#82dc">ま</A> / <a href="#82dd">み</A> / <a href="#82de">む</A> / <a href="#82df">め</A> / <a href="#82e0">も</A>
<li><a href="#82e2">や</A> / 　 / <a href="#82e4">ゆ</A> / 　 / <a href="#82e6">よ</A>
<li><a href="#82e7">ら</A> / <a href="#82e8">り</A> / <a href="#82e9">る</A> / <a href="#82ea">れ</A> / <a href="#82eb">ろ</A>
<li><a href="#82ed">わ</A>
<li><a href="#82f1">ん</A>
</ul>
<HR>

$list
<HR>
<H2><A NAME="INDEX">索引</A></H2>
<UL>
$index
</UL>

<HR>
<ADDRESS>
<P ALIGN="CENTER">
<a href="mailto:sf\@kataribe.com">連絡先</A> / <a href="./">ディレクトリルートに戻る</A> / <a href="/">語り部総本部</A>
</P>
</ADDRESS>
</BODY>
</HTML>
EOF

__END__
