#!/usr/local/bin/jperl5 -Lsjis
#
#	野毛の飲食店街データベース → HTML 自動生成ツール
#
#				Programmed by Masayuki Koba, 1999.
#

$list_file = "/home/www/contents/shop/database/shop_database.txt";
$output_dir = "/home/www/contents/shop";

@reserved = ("店名", "よみがな", "店コード", "分類", "分類コード", "郵便番号", "住所（県〜区）", "住所（町〜）", "地図", "電話", "FAX", "E-mail", "営業時間", "ラストオーダー", "定休日", "コメント", "おすすめ", "価格帯", "備考", "グルメ批評", "グルメ批評URL", "関連リンク", "写真");

($program = $0) =~ s%.*/%%;

while ($#ARGV >= 0) {
    if ("$ARGV[0]" eq "-f") {
	shift;
	if ($#ARGV < 0) {
	    usage();
	}
	$list_file = "$ARGV[0]";
	shift;
    } elsif ("$ARGV[0]" eq "-o") {
	shift;
	if ($#ARGV < 0) {
	    usage();
	}
	$output_dir = "$ARGV[0]";
	shift;
    } else {
	usage();
    }
}

#open(DATABASE, "nkf -s $list_file |") || die "can't open \"$list_file\"";
open(DATABASE, "$list_file") || die "can't open \"$list_file\"";

$is_cache = 0;

while (<DATABASE>) {
    chop;
    if (/^$/) {
	if ($is_cache) {
	    flush();
	    %database = ();
	    $is_cache = 0;
	}
    } elsif (!/^#/) {
	($keyword, $description) = (/^(.*)：(.*)$/);
	$database{$keyword} = "$description";
	$is_cache = 1;
    }
}

if ($is_cache) {
    flush();
}

#-------

sub usage {
    printf("Usage: $program [-f <database file>] [-o <output dir>]\n");
    exit(1);
}

sub flush {
    $keyword = "店コード";
    if ("$database{$keyword}" ne "") {
	$filename = "$database{$keyword}.html";
    } else {
	$filename = "unknown.html";
    }

    $linkdir = "All";
    output($linkdir, $filename);
    $keyword = "分類コード";
    if ("$database{$keyword}" ne "") {
	@dirs = split(/ /, $database{$keyword});
	foreach $i (0 .. $#dirs) {
	    link_shop($linkdir, $dirs[$i], $filename);
	}
    } else {
	link_shop($linkdir, "misc", $filename);
    }
}

sub output {
    create_dir($_[0]);

#   open(HTML, "| nkf -s > $output_dir/$_[0]/$_[1]") || die "can't open \"$output_dir/$_[0]/$_[1]\": $!";
    open(HTML, ">$output_dir/$_[0]/$_[1]") || die "can't open \"$output_dir/$_[0]/$_[1]\": $!";

    make_html();

    close(HTML);
}

sub link_shop {
    create_dir($_[1]);

    unlink("$output_dir/$_[1]/$_[2]");
    link("$output_dir/$_[0]/$_[2]", "$output_dir/$_[1]/$_[2]") || die "can't link \"$output_dir/$_[0]/$_[2]\" and \"$output_dir/$_[1]/$_[2]\"";
}

sub create_dir {
    if (!opendir(OUTDIR, "$output_dir/$_[0]")) {
	mkdir("$output_dir/$_[0]", 0777) || die "can't mkdir \"$output_dir/$_[0]\": $!";
    } else {
	closedir(OUTDIR);
    }
}

sub make_html {
    printf(HTML "<HTML>\n");
    printf(HTML "\n");
    make_head();
    printf(HTML "\n");
    make_body();
    printf(HTML "\n");
    make_footer();
    printf(HTML "</HTML>\n");
}

sub make_head {
    printf(HTML "<HEAD>\n");
    printf(HTML "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=Shift_JIS\">\n");
    printf(HTML "<LINK REV=\"made\" HREF=\"mailto:webmaster\@noge.com\">\n");

    $keyword = "店名";
    if ("$database{$keyword}" ne "") {
	$shopname = "$database{$keyword}";
    } else {
	$shopname = "（不明）";
    }
    printf(HTML "<TITLE>%s</TITLE>\n", $shopname);
    printf(HTML "</HEAD>\n");
}

sub make_body {
    printf(HTML "<BODY BGCOLOR=#FFFFFF>\n");
    printf(HTML "\n");
    printf(HTML "<HR>\n");
    printf(HTML "\n");
    printf(HTML "<P>\n");
    printf(HTML "\n");
    make_table();
    printf(HTML "\n");
    printf(HTML "</P>\n");
    printf(HTML "\n");
    make_notice();
    printf(HTML "<HR>\n");
    printf(HTML "\n");
    printf(HTML "</BODY>\n");
}

sub make_table {
    printf(HTML "<TABLE BORDER=0>\n");

    # 最初の方に表示する予約語の項目の内容を表にする
    $keyword = "店名";
    if ("$database{$keyword}" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=middle NOWRAP>【%s】</TH>\n", $keyword);
	printf(HTML "    <TD><FONT SIZE=+2 COLOR=#006F00>%s</FONT></TD>\n", $database{$keyword});
	printf(HTML "  </TR>\n");
    }
    if (is_yomigana_output()) {
	make_nomal_table_record("よみがな");
    }
    make_nomal_table_record("分類");
    make_address();
    make_nomal_table_record("電話");
    make_nomal_table_record("FAX");
    make_nomal_table_record("E-mail");
    make_nomal_table_record("営業時間");
    make_nomal_table_record("ラストオーダー");
    make_nomal_table_record("定休日");
    make_nomal_table_record("コメント");
    make_nomal_table_record("おすすめ");
    make_nomal_table_record("価格帯");
    $keyword = "地図";
    if ("$database{$keyword}" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【%s】</TH>\n", $keyword);
	$map_link = sprintf("http://www.noge.com/map/%s.html", $database{$keyword});
	printf(HTML "    <TD><A HREF=\"%s\">野毛マップ %s</A></TD>\n", $map_link, $database{$keyword});
	printf(HTML "  </TR>\n");
    }
    # グルメ批評

    # 予約語以外の項目を表にする
    foreach $keyword (sort keys %database) {
	if (!is_reserved_keyword($keyword) && ("$database{$keyword}" ne "")) {
	    printf(HTML "  <TR>\n");
	    printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【%s】</TH>\n", $keyword);
	    printf(HTML "    <TD>%s</TD>\n", $database{$keyword});
	    printf(HTML "  </TR>\n");
	}
    }

    # 最後の方に表示する予約語の項目の内容を表にする
    make_nomal_table_record("備考");
    $keyword = "関連リンク";
    if ("$database{$keyword}" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【%s】</TH>\n", $keyword);
	printf(HTML "    <TD><A HREF=\"%s\" TARGET=\"_blank\">%s</A></TD>\n", $database{$keyword}, $database{$keyword});
	printf(HTML "  </TR>\n");
    }
    $keyword = "写真";
    if ("$database{$keyword}" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【%s】</TH>\n", $keyword);
	printf(HTML "      <TD VALIGN=middle>\n");
	@images = split(/ /, $database{$keyword});
	foreach $i (0 .. $#images) {
	    printf(HTML "        <A HREF=\"/shop/images/large/%s\"><IMG SRC=\"/shop/images/%s\", ALT=\"%s\", HSPACE=3></A>\n", $images[$i], $images[$i], $shopname);
	}
	printf(HTML "      </TD>\n");
	printf(HTML "  </TR>\n");
    }

    printf(HTML "</TABLE>\n");
}

sub make_nomal_table_record {
    $keyword = $_[0];
    if ("$database{$keyword}" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【%s】</TH>\n", $keyword);
	printf(HTML "    <TD>%s</TD>\n", $database{$keyword});
	printf(HTML "  </TR>\n");
    }
}

sub make_address {
    $address = "";

    $keyword = "郵便番号";
    if ("$database{$keyword}" ne "") {
	$address = sprintf("〒%s", $database{$keyword});
    }

    $keyword = "住所（県〜区）";
    if ("$database{$keyword}" ne "") {
	if ("$address" ne "") {
	    $new_address = sprintf("%s %s", $address, $database{$keyword});
	    $address = $new_address;
	} else {
	    $address = $database{$keyword};
	}
    }

    $keyword = "住所（町〜）";
    if ("$database{$keyword}" ne "") {
	$new_address = sprintf("%s%s", $address, $database{$keyword});
	$address = $new_address;
    }

    if ("$address" ne "") {
	printf(HTML "  <TR>\n");
	printf(HTML "    <TH ALIGN=left VALIGN=top NOWRAP>【住所】</TH>\n");
	printf(HTML "    <TD>%s</TD>\n", $address);
	printf(HTML "  </TR>\n");
    }
}

sub is_reserved_keyword {
    foreach $i (0 .. $#reserved) {
	if ("$_[0]" eq "$reserved[$i]") {
	    return 1;
	}
    }

    return 0;
}

sub is_yomigana_output {
    $keyword = "よみがな";
    if ("$database{$keyword}" ne "") {
	if (!($database{$keyword} =~ /＊$/)) {
	    return 1;
	}
    }

    return 0;
}

sub make_notice {
    printf(HTML "<FONT SIZE=\"2\">\n");
    printf(HTML "※ ここに記載されている内容についてご意見、ご要望等がございましたら、\n");
    printf(HTML "<A HREF=\"mailto:webmaster\@noge.com\">webmaster\@noge.com</A> までご連絡ください。\n");
    printf(HTML "</FONT>\n");
}

sub make_footer {
    printf(HTML "Copyright &#169; 2000 野毛地区データベース作成チーム. All rights reserved.<BR>\n");
    printf(HTML "E-mail: <A HREF=\"mailto:webmaster\@noge.com\">webmaster\@noge.com</A><BR>\n");
}
