#!/usr/bin/perl -w
use strict;
use Getopt::Long;

((my $progname = $0) =~ s/^.*(\/|\\)//ig); # basename $0

# Parse options
my $no_verbose_progress = 0;
my $usage = 0;
GetOptions('quiet' => \$no_verbose_progress, # be quiet
           'help|?' => \$usage # help!
          );

# Print usage
if ($usage) {
	usage();
}

unless ($ARGV[0]) {
	print "Specify a CSV file name as the program's argument (e.g. qm.csv)\n";
	usage();
}

open (CSV, "< $ARGV[0]");

# Start writing table file, and write table header
open TABLE, "> qm.html" or die $!;
print TABLE << "END";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- *** This file is auto-generated by $progname - edit $ARGV[0] instead -->
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="../../css/main2.css" />
<title>1623:204 Question Mark List</title>
</head>

<body>

<h1>Steinbr&uuml;ckenh&ouml;hle Question Mark list</h1>
<div>
<a href="#qmextant">Extant QM's</a>
 -- <a href="#qmdone">Finished QM's</a>
 -- <a href="204.html">204 index</a>
</div>
<hr />
<h2>Conventions</h2>

<p>For question mark list conventions, see <a href="../../qm.html">here</a>.</p>

<h2>Area codes</h2>

<table>
<tr><td>Aris</td><td>Ariston Series </td></tr>
<tr><td>Insig</td><td>Insignificant Chamber and Bonsai Crawl</td></tr>
<tr><td>NE</td><td>Near End</td></tr>
<tr><td>NPNG</td><td>No Pain No Gain </td></tr>
<tr><td>Tree</td><td>Trunk route from The Colonnade via Treeumphant Passage to Cave Tree Chamber</td></tr>
<tr><td>WE</td><td>White Elephant Series</td></tr>
<tr><td>Wolp</td><td>Wolpertinger Way and 110 A Day level</td></tr>
<tr><td>PD</td><td>Pleasure Dome and pitches below</td></tr>
<tr><td>Sw</td><td>Swings and Roundabouts</td></tr>
</table>

<h2>Question Marks</h2>

END

<CSV>; # starting to read in csv file, eat header line

my ($number, $grade, $area, $desc, $ref, $station, $completion);
my $incomplete="";
my $complete="";
my $templine;
my $colon;
print "Progress: *";

# While loop which reads in each line of csv file
while (<CSV>) {
	chomp;
	# Split single line into all the fields
	($number, $grade, $area, $desc, $ref, $station, $completion) = &parse_csv($_);

	# Last field of CSV file can have weird form-feeds etc. Kill them
	$completion =~ s/\r//;

	# Construct XHTML line
	if ($ref) {
		$templine = "<dt><a href=\"$ref#q$number\" id=\"$number\">$number</a>";
	} else {
		$templine = "<dt><a id=\"$number\">$number</a>";
	}

	$templine = "$templine $grade</dt><dd>";
	
	$colon = "";
	if ($completion || $desc) {
		$colon = ": ";
	}
	
	if ($station) {
		if ($area) {
			$templine = "$templine$area, near $station$colon";
		} else {
			$templine = "${templine}Near $station$colon";
		}
	} elsif ($area) {
		$templine = "$templine$area$colon"
	}

	if ($completion) {
		$complete = "$complete$templine$completion</dd>\n";
	} else {
		$incomplete = "$incomplete$templine$desc</dd>\n";
	}

	print "*";
}

print TABLE << "END";
<h3><a id="qmextant">Extant QMs</a></h3>

<dl>
$incomplete
</dl>

<h3><a id="qmdone">Completed QMs</a></h3>

<dl>
$complete
</dl>

<hr />
<ul>
<li><a href="204.html">Back to 204 index page</a></li>
<li><a href="../../smkridge/index.htm#id204">Schwarzmooskogel ridge area index and description</a></li>
<li><a href="../../indxal.htm#id204">Full Index</a></li>
<li><a href="../../areas.htm">Other Areas</a></li>
<li><a href="../../index.htm">Back to Expedition Intro page</a></li>
</ul>
</body>
</html>
END

close TABLE;
print "\nInformation: Done\n";

# Parse the CSV file
sub parse_csv {
	my $line = $_[0];
	my @parsedline = ();
	my $field = '';

	while ($line =~ m{ \G(?:^|,)
			(?: "((?> [^"]*) (?> "" [^"]*)*)" | ([^",]*)) }gx) {
		if ($2) {
			$field = $2;
		} elsif ($1) {
			$field = $1;
			$field =~ s/""/"/g;
		} else {
			$field = '';
		}

		push(@parsedline, $field);
	}

	return(@parsedline);
}

# Usage
sub usage {
	print << "EOF";
USAGE: $progname [-options] <CSV file>
	-q, --quiet         Be quiet about progress
	-h, --help          Show this message
EOF
	exit(0);
}
