#!/usr/local/bin/perl
# 
# memo2tips: memo 形式から tips 形式への変換 (後段の tips2html 用)
# 
#     [1996/10/26] OSHIRO Naoki.
#     [1996/12/07] OSHIRO Naoki. ヘッダ出力時の </PRE> が余分になるのを修正
#     [1997/06/25] OSHIRO Naoki. メモの内容に手を加えないモード (Leave mode)
#                                を追加
#     [1997/09/14] OSHIRO Naoki. メモ本体を逆順で出力するオプション (-r) を追加
#     [1997/10/13] OSHIRO Naoki. 各メモ１行目の $maxwidth 以降が続くメモ部と
#                                分離してしまうのを修正．
#     [1997/10/17] OSHIRO Naoki. 
#     ・ヘッダ処理の失敗のため <PRE> 出力に失敗していたのを修正．
#     ・メモ本体がない場合には <PRE> を出力しないよう設定．
#     [1997/10/25] OSHIRO Naoki.
#     ・URL が示されている場合にリンクするようにした．
#     ・img: という独自の URL を設定し jpg と gif の場合はインライン，
#       それ以外は A タグでリンクを張るようにした．
#     [1997/11/28] OSHIRO Naoki.
#     ・URL リンク処理で後部の空白・改行処理を修正
#     [1999/04/19] NISHIMOTO Takashi.
#     ・特殊文字 ('&lt;' など) 関連のバグを修正
# 
#     $Log:$
#

require "getopts.pl";
&Getopts("lrf"); # l: Leave mode (don't <PRE> quote), r: reverse

$opt_l=($opt_l)?1:0;
#$maxwidth=24*2;
$maxwidth=50*2;
$user=$ENV{USER};
$homedir=$ENV{HOME};
$pageicon="/~$user/gif/neco-logo.gif";

#########################################
#
# メモヘッダ処理
#
$head="";
$title="";
while (<>) {
    last if (/^---+\s*$/);
    $head.=$_;
    $forhtml_head=$_ if (/^\s*#\s*FORHTML:/);
    $title=$1 if ($title eq "" && !/^#\s*\$/ && /^#\s*[^:]*:\s*(.+)$/);
      # ignore comment and RCS tag line.
}

$memo_num=0;
#$memo_head.="#FORHTML: $ARGV, $title\n";
if ($forhtml_head) {
    &print_memo($forhtml_head);
} else {
    &print_memo("#FORHTML: $title, $title");
    &print_memo(", \@$pageicon") if $pageicon;
    &print_memo("\n");
}

if (!$opt_l && $head ne "") {
    &print_memo("\n");
    &print_memo("\@head");
    &print_memo("\n<PRE>\n");
    &print_memo("$head");
    &print_memo("</PRE>\n");
}

#########################################
#
# メモ本体の処理
#
for (;!eof; $_=<>) {
    unless ($opt_l) {
	s/^@/ @/g;
	s/</\0lt\;/g;
#        s/>/&gt\;/g;
	s/&/&amp\;/g;
        s/\0/&/g;
    }
    unless (/^---+\s*$/) {
	$tmp_memo.=$_;
	next;
    }
    last if (eof(ARGV));

    if ($opt_l) {
	$head="\n";
    } else {
	#$head="[____/__/__]\n";
	$head="";
    }
    $art=<>;
    if ($art=~m#^\[..../../..(\s+..:..)?\]#) {
	$head=$art;
	$art=<>;
    }
    $head=~s/\s*$/ /;
    $art=~s/\s*$//;
    @tmp=split('', $art);
    $art=""; $cnt=0;
    while ($cnt<$maxwidth) {
	$t=shift(@tmp);
	$art.=$t;
	if ($t=~/[A-z ]/) {
	    $cnt++;
	} else {
	    $cnt+=2;
	}
    }
    $tmp=join('', @tmp);
    $art="." if ($art=~/^[\s\n]*$/);
    if ($tmp_memo) {
	unless ($opt_l) {
	    &print_memo("<PRE>\n");
	    $tmp_memo=~s#(file:.+)\s#<A HREF="$1">$1</A>#g;
	    $tmp_memo=~s/((https?|ftp|telnet):[^\s>]+)([\s>]+)/<A HREF="$1">$1<\/A>$3/g;
	}
	$tmp_memo=~s#img:(.+\.(jpg|gif))\s#<IMG SRC="$1" BORDER="0" ALT="$1">#g;
	$tmp_memo=~s#img:(.+\.(p[pgb]m))\s#<A HREF="$1">img:$1</A>#g;
	unless ($opt_l) {
	    $tmp_memo=~s#(SRC=")/~$user#$1$homedir#g;
	    $tmp_memo=~s#((HREF|SRC)=")(/[^/])#$1file:$3#g;
	    $tmp_memo=~s#((HREF|SRC)=")(//)#$1http:$3#g;
	    $tmp_memo=~s#(HREF="file:)/~$user#$1$homedir#g;
	}
	&print_memo("$tmp_memo");
	&print_memo("</PRE>\n") unless $opt_l;
        $tmp_memo="";
    }
    &print_memo("\n");
    $memo_num++;
    &print_memo("\@" . "$head$art\n");
    $tmp_memo="$tmp\n" if $tmp;
}
if ($tmp_memo) {
  &print_memo("<PRE>\n") unless $opt_l;
  &print_memo("$tmp_memo");
  &print_memo("</PRE>\n") unless $opt_l;
  $tmp_memo="";
}
&print_memo("\n");
$memo_head=shift(@memo);
@memo=(reverse @memo) if $opt_r;
print "$memo_head" . join('', @memo);

sub print_memo {
    local($_)=@_;
    $memo[$memo_num].=$_;
}

# major-mode: perl
