#! /usr/bin/perl

use LWP::Simple;

($tg, $tocurl) = ($ARGV[0], $ARGV[1]);
if (! $tg) {
	print "Usage: gethfes [tg] url\n";
	exit;
}
if (! $tocurl) {
	$tocurl = $tg;
	$tg = "";
} else {
	&init();
	$tg =~ tr/a-z/A-Z/; # map to upper case
	$tg = $tgs{$tg} ?  $tgs{$tg} : $tg;
}

# print "$tocurl\n";

$toc = get($tocurl);
# print "$toc";

for $line (split (/\n/, $toc)) {
	$line =~ s/^\s*//;   # remove leading space
	$line =~ s/\s*$//;   # remove trailing space
	if ($line) {
		if ($line =~ m|<p class="heading">([^<]*)</p>|) {
			$section = &cleanup($1);
			# print "*************** $tg: $section\n";
		} elsif ($line =~ m|<input type="checkbox" name="art\d+" value="infobike://(hfes/hfproc/(\d\d\d\d)/000000(\d\d)/000000(\d\d)/art000(\d\d))" />|) {
			$recurl = $1;
			# print "=============== $recurl\n";
			$recurl = "http://www.ingentaconnect.com/content/" . $recurl;
			&getrecord($recurl, $tg, $section);
		}
		# print "	$line\n";
	}
}

sub cleanup {
	local ($text) = (@_);
	$text =~ s/&ndash;/-/g;
	$text =~ s/&quest;/?/g;
	$text =~ s/&sol;/\//g;
	$text =~ s/&ldquo;/"/g;
	$text =~ s/&rdquo;/"/g;
	$text =~ s/&excl;/!/g;
	$text =~ s/&ndash;/-/g;
	$text =~ s/&#33;/!/g;
	$text =~ s/&#36;/\$/g;
	$text =~ s/&#37;/%/g;
	$text =~ s/&#38;/&amp;/g;
	$text =~ s/&#39;/'/g;
	$text =~ s/&#47;/\//g;
	$text =~ s/&#43;/+/g;
	$text =~ s/&#60;/&lt;/g;
	$text =~ s/&#61;/=/g;
	$text =~ s/&#62;/&gt;/g;
	$text =~ s/&#63;/?/g;
	$text =~ s/&#91;/[/g;
	$text =~ s/&#93;/]/g;
	$text =~ s/&#124;/|/g;    # pipe / or
	$text =~ s/&#174;//g;          # tm or reg
	$text =~ s/&#176;/&deg;/g;     # degree
	$text =~ s/&#177;/&plusmn;/g;  
	$text =~ s/&#215;/x/g;    # times
	$text =~ s/&#233;/&eacute;/g;    # 
	$text =~ s/&#235;/&euml;/g;    # 
	$text =~ s/&#239;/&iuml;/g;    # 
	$text =~ s/&#246;/&ouml;/g;    # 
	$text =~ s/&#916;/&Delta;/g;   # 
	$text =~ s/&#8212;/--/g;
	$text =~ s/&#8221;/"/g;
	$text =~ s/&#8220;/"/g;
	$text =~ s/&#8482;//g;         # TM
	$text =~ s/&#8764;/~/g;        # about
	$text =~ s/&#8722;/-/g;        # negative
	$text =~ s/&#8805;/&ge;/g;        # >=
	$text =~ s/&#8804;/&le;/g;        # <=
	$text =~ s|<i>||gi; $text =~ s|</i>||gi;
	$text =~ s|<u>||gi; $text =~ s|</u>||gi;
	$text =~ s|<b>||gi; $text =~ s|</b>||gi;
	$text =~ s|<sub>|{sub:|gi; $text =~ s|</sub>|}|gi;
	$text =~ s|<sup>|{sup:|gi; $text =~ s|</sup>|}|gi;
	$text =~ s|<p></p>|\n   |gi; # paragraph break
	return $text;
}

sub getrecord { # url
	local ($recurl, $tg, $section) = @_;
	$recurl .= "?format=bib"; # will get info in bibtex format
	local ($rec) = get $recurl;
	local (@lines) = split (/\n/, $rec);
	for $line (@lines) {
		# print "$line\n";
		$line =~ s/"$//;
		$line =~ s/",$//;
		if ($line =~ m|\@article|) {
			if ($tg) {
				print "%S $tg: $section\n";
			} else {
				print "%S $section\n";
			}
		} elsif ($line =~ m|^\s*}\s*$|) { # end of record
			print "\n"; # end of record
		} elsif ($line =~ m|author\s*=\s*"([^]*)|) {
			print "%A $1\n";
		} elsif ($line =~ m|title\s*=\s*"([^]*)|) {
			$title = &cleanup($1);
			print "%T $title\n";
		} elsif ($line =~ m|volume\s*=\s*"([^]*)|) {
			print "%V $1\n";
		} elsif ($line =~ m|year\s*=\s*"(\d\d(\d\d))"|) { # date, add in bibadd, not here
		} elsif ($line =~ m|pages?\s*=\s*"([^]*)|) {
			$pages = $1;
			$pages =~ s/\(.*$//; # remove number of pages
			print "%P $pages\n";
		} elsif ($line =~ m|url\s*=\s*"([^]*)|) {
			print "%W $1\n";
		} elsif ($line =~ m|abstract\s*=\s*"([^]*)|) {
			$abstract = &cleanup($1);
			print "%X $abstract\n";
		}
	}
}

sub init {
	local (@tgs) = (
		"A=AGING",                                           # ? useful for HCIBIB?
		"AC=AUGMENTED COGNITION",                            # ?
		"AS=AEROSPACE SYSTEMS",
		"C=COMMUNICATIONS",                                  # ?
		"CE=COGNITIVE ENGINEERING AND DECISION MAKING",      # ?
		"CP=CONSUMER PRODUCTS",
		"CS=COMPUTER SYSTEMS",                               # !!!
		"DEM=DEMONSTRATIONS",
		"ED=ENVIRONMENTAL DESIGN",
		"E=EDUCATION",
		"EP=EDUCATOR'S PROFESSIONAL",
		"FP=FORENSICS PROFESSIONAL",
		"GS=GENERAL SESSION",
		"HC=HEALTH CARE",
		"HP=HUMAN PERFORMANCE",
		"HPM=HUMAN PERFORMANCE MODELING",
		"ID=INDIVIDUAL DIFFERENCES",
		"IDP=INDIVIDUAL DIFFERENCES IN PERFORMANCE",
		"IE=INDUSTRIAL ERGONOMICS",
		"I=INTERNET",                                        # !!!
		"ME=MACROERGONOMICS",
		"M=MACROERGONOMICS",
		"MSR=MEDICAL SYSTEMS AND REHABILITATION",
		"OPS=OPEN PLENARY SESSION",
		"PD=PRODUCT DESIGN",
		"PM=HUMAN PERFORMANCE MODELING",
		"POS=POSTERS",                                       # ?
		"PP=PERCEPTION AND PERFORMANCE",                     # ?
		"PRO=PROFESSIONAL DEVELOPMENT",
		"SD=SYSTEM DEVELOPMENT",                             # ?
		"SF=STUDENT FORUM",                                  # ?
		"S=SAFETY",
		"SS=SPECIAL SESSION",
		"ST=SURFACE TRANSPORTATION",
		"TE=TEST AND EVALUATION",                            # ?
		"T=TRAINING",
		"VE=VIRTUAL ENVIRONMENTS",                           # ?
		"VP=VISUAL PERFORMANCE",

        "6MSS=6: MULTIPLE-SESSION SYMPOSIA",
        "6TE=6: TEST AND EVALUATION",
        "6DS=6: SYSTEM DEVELOPMENT",
        "6STD=6: STANDARDS",
        "6SS=6: SPECIAL SESSIONS",
        "6GS=6: GENERAL SESSIONS",
        "6CP=6: CONSUMER PRODUCTS",
        "5MSS=5: MULTIPLE-SESSION SYMPOSIA",
        "5MSD=5: MUSCULOSKELETAL DISORDERS",
        "5IE=5: INDUSTRIAL ERGONOMICS",
        "4MSS=4: MULTIPLE-SESSION SYMPOSIA",
        "4S=4: SAFETY",
        "4MSR=4: MEDICAL SYSTEMS AND REHABILITATION",
        "4F=4: FORENSICS",
        "4A=4: AGING",
        "4PS=4: PLENARY SPEECHES",
        "3MSS=3: MULTIPLE-SESSION SYMPOSIA",
        "3VP=3: VISUAL PERFORMANCE",
        "3T=3: TRANSPORTATION",
        "3PE=3: PSYCHOPHYSIOLOGY IN ERGONOMICS",
        "3PS=3: POWER SYSTEMS",
        "3ID=3: INDIVIDUAL DIFFERENCES",
        "3HR=3: HUMAN RELIABILITY",
        "3CR=3: CONTROL ROOMS",
        "3A=3: AGRICULTURE",
        "3AS=3: AEROSPACE SYSTEMS",
        "2MSS=2: MULTIPLE-SESSION SYMPOSIA",
        "2T=2: TRAINING",
        "2ME=2: MACROERGONOMICS",
        "2E=2: EDUCATION",
        "2ED=2: ENVIRONMENTAL DESIGN",
        "2CEE=2: COST-EFFECTIVE ERGONOMICS",
        "1MSS=1: MULTIPLE-SESSION SYMPOSIA",
        "1VE=1: VIRTUAL ENVIRONMENTS",
        "1I=1: INTERNET",
        "1C=1: COMMUNICATIONS",
        "1CS=1: COMPUTER SYSTEMS",
        "1CE=1: COGNITIVE ERGONOMICS",

	);
	local ($line, $code, $name);
	for $line (@tgs) {
		($code, $name) = split (/=/, $line);
		# print "$code $name\n";
		$tgs{$code} = $name;
	}
}

