#
#	Eclipse(Bugzilla)の不具合情報抽出プログラム
#
#		author	kashiwa
#
#		◇入力
#			バグ情報のHTML(https://bugs.eclipse.org/bugs/show_bug.cgi?id=xxxxx)
#	
#
#		◇出力
#			アカウント名とアドレス
#
#		◇使用法
#			コマンドラインで、以下のコマンドをたたく(要 Perl 5 以上)
#			> perl [プログラム名].pl [バグ情報のHTML] [活動履歴のHTML]
#

use strict;
use warnings;
use Date::Simple;

##############
#  変数宣言  #
##############
###表示させる変数#################
my $Account= '';
my $host= '';
my $domain= '';
my $address= '';
###########
# File
my $BugFileName = '';
my $ActFileName = '';
###########
my @tmp;
my $trash; 

	
#########################################
&main();
exit;
##########################################

############################################
sub main {

	$BugFileName = $ARGV[0];  # バグ情報のHTML
	my $Line = '';
	open(BugFILE,"<$BugFileName") or die "cannot open readfile1.\n";
	open(BUGFILE, ">>AccountAndEmail.txt") or die "cannot open savefile.\n";
	
	

##################################################################################################
#1    <b>Reported</b>:
#2    </td>
#3    <td>2003-07-14 01:11 EDT by <span class="vcard"><a class="email" href="mailto:avijayr&#64;gmail.com" title="Vijay Aravamudhan &lt;avijayr&#64;gmail.com&gt;"> <span class="fn">Vijay Aravamudhan</span></a>
#4    </span>

	while(<BugFILE>) {
		
		#Reporter(報告者)の抽出
		if($_ =~ /<b>Reported<\/b>:/) {#上記１行目に相当
			$Line=<BugFILE>;#２行目を読み込む（読み込んでいるが，不必要な行をスルーするため）
			$Line=<BugFILE>;#３行目を読み込む（ここから本題）

			@tmp= split(/mailto:/, $Line);#3行目のmailto:の前後を分ける（前半は不必要）
			@tmp= split(/" title=\"/, $tmp[1]);#3行目のtitle="の前後を分ける（両方必要）
			$address=$tmp[0];#アドレス部分
			@tmp= split(/">/, $tmp[1]);#3行目の">の前後を分ける（後半不要：アカウントがメールアドレスの人対策）
			@tmp= split(/\s&lt\;/, $tmp[0]);#3行目の &ltの前後を分ける（後半は不必要）
			$Account=$tmp[0];
			$address=~s/&#64\;/@/;
			$Account=~s/&#64\;/@/;
			$address=trim($address);
			print BUGFILE join ('',"$Account	$address	\n");
		}
	
#####################################################################################################		
		#Descriptionの抽出
		if($_ =~ /<span class="bz_comment_user">/) {#以下上記と同様のため省略
			@tmp= split(/mailto:/, $_);
			@tmp= split(/" title=\"/, $tmp[1]);
			$address=$tmp[0];
			@tmp= split(/">/, $tmp[1]);
			@tmp= split(/\s&lt\;/, $tmp[0]);
			$Account=$tmp[0];
			$address=~s/&#64\;/@/;
			$Account=~s/&#64\;/@/;
			$address=trim($address);
		print BUGFILE join ('',"$Account	$address	\n");
		}
	}
	close(BUGFILE);
	close(BugFILE);
}

#復帰(\r)，改行(\n)，空白(半角，全角，タブ)を削除する関数
sub trim {
	my $result = $_[0];
	
	if(defined $result) {
		$result =~ s/\r//;    # 復帰
		$result =~ s/\n//;    # 改行
		$result =~ s/^\s*//;  # 先頭の空白
		$result =~ s/\s*$//;  # 末尾の空白
	} else {
		$result = '';
	}
	
	if($result eq '') {
		$result = 'null';
	}
	return $result;
}
		