#!/usr/bin/perl
#
# $Id$
# 
# Basic script for generating XML markup for the major sections of the Oracle Documentation, and XSLT templates (and meta-templates, for both output formats) for transforming it.
# 
# To do:
#  * respond to different command line parameters: produce either markup, XSLT for HTML, XSLT for LaTeX, or XSLT for both; produce only for the specified section (identified by its Code).
 

# Here's the raw data (this used to be in an Excel spreadsheet, which now obviously shouldn't be used any more - might remove from CVS some time).
# Each entry has a name (marked up as XML), a unique, short, space-less code, and the actual URL.
@references =
(
	# Name(0)	Code(1)	URL(2)
	"Database Administrator<apostrophe/>s Guide					Admin		http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96521/toc.htm",
	"Application Developer<apostrophe/>s Guide<emdash/>Object-Relational Features	AppDevOR	http://info-nts-05.otago.ac.nz/docs/oracle9i/appdev.920/a96594/toc.htm",
	"Database Concepts								Concepts	http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96524/toc.htm",
	"Data Warehousing								DataWarehousing	http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96520/toc.htm",
	"Database Error Messages							Errors		http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96525/toc.htm",
	"SQL Reference									SQL		http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96540/toc.htm",
	"Java Developer<apostrophe/>s Guide						Java		http://info-nts-05.otago.ac.nz/docs/oracle9i/java.920/a96656/toc.htm",
	"JDBC Developer<apostrophe/>s Guide and Reference				JDBC		http://info-nts-05.otago.ac.nz/docs/oracle9i/java.920/a96654/toc.htm",
	"Database Master Glossary							Glossary	http://info-nts-05.otago.ac.nz/docs/oracle9i/mix.920/a97290/toc.htm",
	"Database Performance Tuning Guide and Reference				Tuning		http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96533/toc.htm",
	"PL/SQL User<apostrophe/>s Guide and Reference					PLSQL		http://info-nts-05.otago.ac.nz/docs/oracle9i/appdev.920/a96624/toc.htm",
	"Database Master Index								Index		http://info-nts-05.otago.ac.nz/docs/oracle9i/mix.920/a96625/toc.htm",
	"Database Reference								Reference	http://info-nts-05.otago.ac.nz/docs/oracle9i/server.920/a96536/toc.htm"
);

# Prefix to use in the generated template names:
$oracle_prefix = "Ora";

if ($#ARGV != 1)
{
	warn "usage: oracle-docs <section-code-regexp> (link | xslt | xslt_html | xslt_latex | all)\n";
	exit;
}

$section_code = $ARGV[0];
$output_type = $ARGV[1];

foreach $current_record (@references) {
	@fields = split(/[	]+/, $current_record);
	# Only print the entries for the matching section:
	if (@fields[1] =~ /$section_code/) {
		# Print the requested stuff:
		if ($output_type eq "link") {
			print generate_doc_netlink(@fields[0], @fields[2]) . "\n";
		} elsif ($output_type eq "xslt") {
			print generate_xsl_metatemplate(@fields[0], @fields[1], @fields[2]) . "\n";
		} elsif ($output_type eq "xslt_html") {
			print generate_xsl_template_for_html(@fields[0], @fields[1], @fields[2]) . "\n";
		} elsif ($output_type eq "xslt_latex") {
			print generate_xsl_template_for_latex(@fields[0], @fields[1], @fields[2]) . "\n";
		} elsif ($output_type eq "all") {
			print generate_doc_netlink(@fields[0], @fields[2]) . "\n";
			print generate_xsl_metatemplate(@fields[0], @fields[1], @fields[2]) . "\n";
			print generate_xsl_template_for_html(@fields[0], @fields[1], @fields[2]) . "\n";
			print generate_xsl_template_for_latex(@fields[0], @fields[1], @fields[2]) . "\n";
		} else {
			warn "Sorry - I don't know anything about a \"$output_type\" format.\n";
			exit;
		}
	}
}



# Produce XML markup for a link to a section of the documentation.
sub generate_doc_netlink {
	return "<netlink><label>" . $_[0] . "</label><target>" . $_[1] . "</target></netlink>";
}


# Generate an XSLT meta-template for generating either an HTML or a LaTeX producing template.
sub generate_xsl_metatemplate {
	return "<xsl:template name=\"" . $oracle_prefix . $_[1] . "\" match=\"" . $oracle_prefix . $_[1] . "\">" . 
		"<latex>" . "\\href{" . $_[2] . "}" . "{" . "<xsl:call-template name=\"OracleServer\"/>" . " " . $_[0] . "}" . "</latex>" . 
		"<html>" . "<a href=\"" . $_[2]. "\">" . "<xsl:call-template name=\"OracleServer\"/>" . " " . $_[0] . "</a>" . "</html>" . 
		"</xsl:template>";
}


# Generate an XSLT template for HTML output (deprecated):
sub generate_xsl_template_for_html {
		return "<xsl:template match=\"" . $_[0] . "\"><A><xsl:attribute name=\"HREF\">" . $_[1] . "</xsl:attribute>" . "<xsl:call-template name=\"OracleServer\"/> " . $_[2] . "</A></xsl:template>";
}

# Generate an XSLT template for LaTeX output (deprecated):
sub generate_xsl_template_for_latex {
	return "<xsl:template match=\"" . $_[0] . "\">\\href{" . $_[1] . "}{<xsl:call-template name=\"OracleServer\"/> " . $_[2] . "}</xsl:template>";
}

