#!/usr/bin/perl
#
# dcppt.pl - PowerPoint 用 HTML作成スクリプト
#
# Morikawa Yasuhiro <morikawa@ep.sci.hokudai.ac.jp> 2002/12/03
#
# ・ 概要
#
#    PowerPoint から作成した PNG(などの)ファイル群を見やすい HTML を
#    作成するスクリプト
#
# ・ 使用法 
#
#    以下のような書式の, 画像ファイルとその題目を記述したファイルが必要
#    (ファイル名は menu.html とする)
#
#    ---------------------------------------------------
#        001:はじめに
#        002:目次
#        003:背景
#             :
#    ---------------------------------------------------
#
#

########################################################
##  デフォルト設定値
########################################################

# 情報ファイル
$infofile = "./menu.txt";

# タイトルファイル
$titlefile = "./title.txt";

# インデックスファイル
$indexfile = "index.html";

# メニューファイル
$menufile = "menu.html";
########################################################


#
# タイトルファイルからタイトルを取り出す.
#
open(TITLEFILE, "$titlefile") || die "$titlefile が見つかりませんでした. \n";
while (<TITLEFILE>) {
    chomp;
    push(@title_lists, $_);
}
$title = $title_lists[0];
close(TITLEFILE);

#print STDOUT "$title";


#
# pic ディレクトリ内から 画像ファイルのタイプを取り出す
#
opendir(PICDIR, "./pic")
    || die "pic ディレクトリが存在しません. \n";
@picfiles = grep(!/^\.\.?$/, readdir(PICDIR));
closedir(PICDIR);
# pic ディレクトリ内に画像があるかチェック
unless ($picfiles[0]) {
    die "pic ディレクトリ内にファイルが存在しません. \n";
}
# 一つ目のファイルだけを見る. (面倒いから)
$samplepic = $picfiles[0];
@picname_parts = split(/\./, $samplepic);
$imgtype = $picname_parts[$#picname_parts];

#print STDOUT "@picfiles\n";
#print STDOUT "$imgtype \n";


#
# 情報ファイルから, ナンバーとサブジェクトを取り出す.
#
open(INFOFILE, "$infofile") || die "$infofile が見つかりませんでした. \n";
while (<INFOFILE>) {
    chomp;
    push(@info, $_);
}
close(INFOFILE);

#print STDOUT "@info \n";


#
# ナンバーとサブジェクトを分離しておく.
# (配列の要素の位置は同じであるため, 両者を整合することは可能)
#
foreach $key (@info){
    @info_parts = split(/:/, $key, 2);
    $info_hash{"$info_parts[0]"} = "$info_parts[1]";
    push(@number, $info_parts[0]);
    push(@subject, $info_parts[1]);
}

#print STDOUT "@number \n";
#print STDOUT "@subject \n";
#print "$info_hash{$number[1]}\n";

#
# インデックスの作成
#

&MakeIndex();


#
# メニューの作成
#

&MakeMenu();

#
# 各 HTML の作成
#

&MakeHtml();

##############################################################
##  以下サブルーチン
##############################################################

#
# 各インデックスファイル作成サブルーチン
#
sub MakeIndex {
    open(INDEXFILE, "> $indexfile")
	|| die "$indexfile に書き込むことが出来ませんでした. /n";
    #
    # ヘッダの書き出し
    #
    print INDEXFILE <<EOF;
<html>
<head>
  <title>$title</title>
</head>

<frameset cols="20%,80%">
<frame src="./menu.html" name="menu" scrolling="yes">
<frame src="./html/001.html" name="display" scrolling="yes">
</frameset>

</html>
EOF
    close(INDEXFILE);
}


#
# メニューファイルの作成サブルーチン
#
sub MakeMenu {
    open(MENUFILE, "> $menufile")
	|| die "$menufile に書き込むことが出来ませんでした. /n";
    #
    # ヘッダの書き出し
    #
    print MENUFILE <<EOF;
<html>
<head>
  <title> $title Menu</title>
</head>
<body>

<ol><small>
EOF
    foreach $num (@number){
	print MENUFILE <<EOF;
<li><a href="./html/${num}.html" target="display">$info_hash{$num}</a><br>

EOF
    }
    #
    # フッタの書き出し
    #
    print MENUFILE <<EOF;
</small></ol>

</body>
</html>
EOF
    close(MENUFILE);
}


#
# 各 HTML ファイル作成サブルーチン
#
sub MakeHtml {
    #
    # ディレクトリの削除と作成
    #
    system("/bin/rm -rf ./html/") if -d "./html";
    mkdir("html", 0755);

    # ディレクトリの移動
    chdir("./html");

    # @number を @img_number に取り出す
    # @img_number = @number;

    # 要素番号として $element_num を用意
    $element_num = 0;


    while ($number[$element_num]) {
	$allpage_num = $#number + 1;
	$previous_num = $element_num - 1;
	$next_num = $element_num + 1;
	$htmlnumber = $number[$element_num];
	$htmlfile = "${htmlnumber}.html";
	#
	# ヘッダの作成
	#
	open(HTMLFILE, "> $htmlfile")
	    || die "$htmlfile に書き込むことが出来ませんでした. /n";
	print HTMLFILE <<EOF;
<html>
<head>
  <title>$title [$info_hash{$htmlnumber}]</title>
</head>
<body>
EOF
	#
	# 前後のページへのリンク, 現ページ/ページ総数, 小題の書き出し
	#
	print HTMLFILE <<EOF;

<hr noshade size="1">
<table width="90%">
  <tr>
    <td width="30%">
EOF
	# 最初のページと最後ページの場合はリンクを貼れないので
	# 条件分岐する.

	# 最初のページは [前頁] にリンクを貼らない
	if ($previous_num < 0) {
	    print HTMLFILE <<EOF;
      [前頁]
      <A HREF="./$number["$next_num"].html">[後頁]</A>
EOF
	}
	# 最後のページは [後頁] にリンクを貼らない
	elsif ($next_num > $#number) {
	    print HTMLFILE <<EOF;
      <A HREF="./$number["$previous_num"].html">[前頁]</A>
      [後頁]
EOF
	}
	# その他の頁は両方にリンク
	else {
	    print HTMLFILE <<EOF;
      <A HREF="./$number["$previous_num"].html">[前頁]</A>
      <A HREF="./$number["$next_num"].html">[後頁]</A>
EOF
	}


	print HTMLFILE <<EOF;
    </td>
    <td width="30%" align="center">
    $next_num / $allpage_num
    </td>
    <td align="right">
      $info_hash{$htmlnumber}
    </td>
  </tr>
</table>
<hr noshade size="1">

EOF
	#
	# 画像貼りつけ部分, フッタの作成
	#
	print HTMLFILE <<EOF;
<img src="../pic/${htmlnumber}.${imgtype}" alt="$info_hash{$htmlnumber}">

</body>
</html>
EOF
	close(HTMLFILE);
	$element_num++;
    }
}
