<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:output omit-xml-declaration="yes" />
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
<xsl:output doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />

<xsl:template match="/project">

<html>

<head>

	<title>
		<xsl:value-of select="info/title" />
		<xsl:text> - </xsl:text>
		<xsl:value-of select="info/student/name/forename" />
		<xsl:text> </xsl:text>
		<xsl:value-of select="info/student/name/surname" />
		<xsl:text> (</xsl:text>
		<xsl:value-of select="info/student/id" />
		<xsl:text>)</xsl:text>
   </title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<style type="text/css">
		*{
			color:#006600;
		}
		body {
			background-color: #99ccff;
			margin: auto;
			width:600px;
			color: #006600;
		}
		
		h1 {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 30px;
			color: #993333;
			text-align:center;
		}
		
		h2 {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 22px;
			color: #993333;
			text-align:center;
		}
		
		h3 {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 20px;
			color: #006600;
			text-align:center;
		}
		
		h4 {
			font-family: Verdana, Arial, Helvetica, sans-serifl;
			font-size: 18px;
			color: #006600;
			text-align:center;
		}
		
		h5 {
			font-family: Verdana, Arial, Helvetica, sans-serifl;
			font-size: 16px;
			color: #006600;
			text-align:center;
		}
		
		h6 {
			font-family: Verdana, Arial, Helvetica, sans-serifl;
			font-size: 12px;
			color: #006600;
			margin-top: 0px;
		}

		p {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 14px;
			line-spacing: 1.5;
			color: #006600;
		}
		
		a {
			color: #006600;
		}
		
		pre {
			color: #006600;
			margin-left: 30px;
		}
	</style>
</head>
<body>
	<xsl:apply-templates select="info" />
	<xsl:apply-templates select="abstract" />
	<xsl:apply-templates select="acknowledgments" />
	<xsl:call-template name="contents" />
	<xsl:apply-templates select="chapter" />
	<xsl:apply-templates select="ref" />
	<xsl:apply-templates select="appendices" />
</body>
</html>
</xsl:template>

<xsl:template match="info">
	<h1>
		<xsl:value-of select="title" />
	</h1>
	<h2>
		<xsl:text>Student Name: </xsl:text>
		<xsl:value-of select="student/name" />
	</h2>
	<h2>
		<xsl:text>Student Number: </xsl:text>
		<xsl:value-of select="student/id" />
	</h2>
	<h2>
		<xsl:value-of select="course" />
	</h2>
	<h2>
		<xsl:text>Supervisor: </xsl:text>
		<xsl:value-of select="supervisor" />
	</h2>
	<h2>
		<xsl:value-of select="date" />
	</h2>
	<br />
</xsl:template>

<xsl:template match="abstract">
	<br />
	<h3>
		<xsl:text>Abstract</xsl:text>
	</h3>
	<xsl:apply-templates select="para" />
</xsl:template>

<xsl:template match ="acknowledgments">
	<br />
	<h3>
		<xsl:text>Acknowledgments</xsl:text>
	</h3>
	<xsl:apply-templates select="para" />
</xsl:template>

<xsl:template name="contents">
	<h3>
		<xsl:text>Contents</xsl:text>
	</h3>
	<xsl:for-each select="chapter">
		<xsl:element name="p">
		<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:value-of select="name()" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@num" />
			</xsl:attribute>
			<xsl:text>Chapter </xsl:text>
			<xsl:value-of select="@num" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
		</xsl:element>
	
	<xsl:for-each select="section">
		<xsl:element name="p">
			<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:value-of select="name()" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="../@num" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@num" />
			</xsl:attribute>
			<xsl:text>Section </xsl:text>
			<xsl:value-of select="../@num" />
			<xsl:text>.</xsl:text>
			<xsl:value-of select="@num" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
	</xsl:element>
	
	<xsl:for-each select="para/figure">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Figure </xsl:text>
				<xsl:value-of select="@num" />
				<xsl:text> - </xsl:text>
				<xsl:value-of select="title" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>

	<xsl:for-each select="para/table">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Table </xsl:text>
				<xsl:value-of select="@num" />
				<xsl:text> - </xsl:text>
				<xsl:value-of select="title" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>  

	<xsl:for-each select="para/code">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Code </xsl:text>
				<xsl:value-of select="@num" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>
	
	<xsl:for-each select="sub_section">
		<xsl:element name="p">
			<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:value-of select="name()" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="../../@num" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="../@num" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@num" />
			</xsl:attribute>
			<xsl:text>Sub Section </xsl:text>
			<xsl:value-of select="../../@num" />
			<xsl:text>.</xsl:text>
			<xsl:value-of select="../@num" />
			<xsl:text>.</xsl:text>
			<xsl:value-of select="@num" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
	</xsl:element>
	
	<xsl:for-each select="para/figure">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Figure </xsl:text>
				<xsl:value-of select="@num" />
				<xsl:text> - </xsl:text>
				<xsl:value-of select="title" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>

	<xsl:for-each select="para/table">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Table </xsl:text>
				<xsl:value-of select="@num" />
				<xsl:text> - </xsl:text>
				<xsl:value-of select="title" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>  

	<xsl:for-each select="para/code">
		<xsl:element name="p">
			<xsl:element name="a">
				<xsl:attribute name="href">
					<xsl:text>#</xsl:text>
					<xsl:value-of select="name()" />
					<xsl:text>_</xsl:text>
					<xsl:value-of select="@num" />
				</xsl:attribute>
				<xsl:text>Code </xsl:text>
				<xsl:value-of select="@num" />
			</xsl:element>
		</xsl:element>
	</xsl:for-each>

	</xsl:for-each>
	</xsl:for-each>
	</xsl:for-each>
	
	<xsl:element name="p">
		<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:text>References</xsl:text>
			</xsl:attribute>
			<xsl:text>References</xsl:text>
		</xsl:element>
	</xsl:element>
	
	<xsl:element name="p">
		<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:text>Appendices</xsl:text>
			</xsl:attribute>
			<xsl:text>Appendices</xsl:text>
		</xsl:element>
	</xsl:element>
	
	<xsl:for-each select="appendices/appendix">
		<xsl:element name="p">
		<xsl:element name="a">
			<xsl:attribute name="href">
				<xsl:text>#</xsl:text>
				<xsl:text>Appendix</xsl:text>
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@letter" />
			</xsl:attribute>
			<xsl:text>Appendix </xsl:text>
			<xsl:value-of select="@letter" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
		</xsl:element>
	</xsl:for-each>
		
</xsl:template>

<xsl:template match="chapter">
	<br />
	<h3>
		<xsl:element name="a">
			<xsl:attribute name="name">
				<xsl:value-of select="name()" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@num" />
			</xsl:attribute>
			<xsl:text>Chapter </xsl:text>
			<xsl:value-of select="@num" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
	</h3>
	<xsl:apply-templates select="para" />
	<xsl:apply-templates select="section" />
</xsl:template>

<xsl:template match="section">
	<h4>
		<xsl:element name="a">
			<xsl:attribute name="name">
				<xsl:value-of select="name()" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="../@num" />
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@num" />
			</xsl:attribute>                                                                                          
			<xsl:text>Section </xsl:text>
			<xsl:value-of select="../@num" />
			<xsl:text>.</xsl:text>
			<xsl:value-of select="@num" />
			<xsl:text> - </xsl:text>
			<xsl:value-of select="title" />
		</xsl:element>
	</h4>
	<xsl:apply-templates select="para" />
	<xsl:apply-templates select="sub_section" />
</xsl:template>			

<xsl:template match="sub_section">
	<h5>
		<xsl:element name="a">
		<xsl:attribute name="name">
			<xsl:value-of select="name()" />
			<xsl:text>_</xsl:text>
			<xsl:value-of select="../../@num" />
			<xsl:text>_</xsl:text>
			<xsl:value-of select="../@num"/>
			<xsl:text>_</xsl:text>
			<xsl:value-of select="@num"/>
		</xsl:attribute>
		<xsl:text>Sub-Section </xsl:text>
		<xsl:value-of select="../../@num" />
		<xsl:text>.</xsl:text>
		<xsl:value-of select="../@num" />
		<xsl:text>.</xsl:text>
		<xsl:value-of select="@num" />
		<xsl:text> - </xsl:text>
		<xsl:value-of select="title" />
		</xsl:element>
	</h5>
	<xsl:apply-templates select="para" />
</xsl:template>		

<xsl:template match="ref">
	<xsl:element name="a">
		<xsl:attribute name="name">
			<xsl:text>References</xsl:text>
		</xsl:attribute>
	</xsl:element>
	<h3>
		<xsl:text>References</xsl:text>
	</h3>
	<xsl:apply-templates select="book | article | web" />
</xsl:template>

<xsl:template match="book">
	<xsl:element name="p">
		<xsl:for-each select="author">
			<xsl:value-of select="surname" />
			<xsl:text>, </xsl:text>
			<xsl:value-of select="initials" />	
			<xsl:text>, </xsl:text>		
      </xsl:for-each>
		<xsl:value-of select="year" />
		<xsl:text>. </xsl:text>
		<xsl:value-of select="title" />
		<xsl:text>. </xsl:text>
		<xsl:value-of select="edition" />
		<xsl:text>. </xsl:text>	
		<xsl:value-of select="publisher/place" />
		<xsl:text>. </xsl:text>	
	</xsl:element>
</xsl:template>

<xsl:template match="article">
	<xsl:element name="p">
		<xsl:for-each select="author">
			<xsl:value-of select="surname" />
			<xsl:text>, </xsl:text>
			<xsl:value-of select="initials" />	
			<xsl:text>, </xsl:text>			
      </xsl:for-each>
		<xsl:value-of select="year" />
		<xsl:text>. </xsl:text>
		<xsl:value-of select="title" />
		<xsl:text>. </xsl:text>
		<xsl:value-of select="journal/title" />
		<xsl:text>, </xsl:text>
		<xsl:value-of select="journal/vol_num" />
		<xsl:text>(</xsl:text>
		<xsl:value-of select="journal/part_num" />
		<xsl:text>)</xsl:text>
		<xsl:text>, </xsl:text>
		<xsl:value-of select="journal/page_num" />
		<xsl:text>.</xsl:text>
	</xsl:element>
</xsl:template>

<xsl:template match="web">
	<xsl:element name="p">
		<xsl:for-each select="author">
			<xsl:value-of select="surname" />
			<xsl:text>, </xsl:text>
			<xsl:value-of select="initials" />			
   	    <xsl:text>, </xsl:text>
      </xsl:for-each>
			<xsl:value-of select="year" />
			<xsl:text>. </xsl:text>
		<xsl:value-of select="page_title" />
		<xsl:text>. </xsl:text>
		<xsl:value-of select="site_title" />
		<xsl:text>. </xsl:text>
		<xsl:text>Date of Last Visit: </xsl:text>
		<xsl:value-of select="visit_date" />
		<xsl:text>.</xsl:text> <br />
		<xsl:text>Available From: </xsl:text>	
		<xsl:element name="a">
	      <xsl:attribute name="href">
	        	<xsl:value-of select="url" />
	      </xsl:attribute>
			<xsl:value-of select="url" />
		</xsl:element>
	</xsl:element>
</xsl:template>

<xsl:template match="appendices">
	<br />
	<xsl:element name="a">
		<xsl:attribute name="name">
			<xsl:text>Appendices</xsl:text>
		</xsl:attribute>
	</xsl:element>
	<h3>
		<xsl:text>Appendices</xsl:text>
	</h3>
	<xsl:apply-templates select="appendix" />
</xsl:template>

<xsl:template match="appendix">
	<xsl:element name="a">
			<xsl:attribute name="name">
				<xsl:text>Appendix</xsl:text>
				<xsl:text>_</xsl:text>
				<xsl:value-of select="@letter" />
			</xsl:attribute>
		</xsl:element>
	<h4>
		<xsl:text>Appendix </xsl:text>
		<xsl:value-of select="@letter" />
		<xsl:text>: </xsl:text>
		<xsl:value-of select="title" />
	</h4>
    <xsl:apply-templates select="para" />
</xsl:template>

<xsl:template match="para">
	<xsl:element name="p">
		<xsl:apply-templates select="text() | style | figure | code | table" />
	</xsl:element>
</xsl:template>

<xsl:template match="text()">
	<xsl:value-of select="." />
</xsl:template>

<xsl:template match="style">
  <xsl:choose>
    <xsl:when test="@type='bold'">
      <strong><xsl:value-of select="."/></strong>
    </xsl:when>
    <xsl:when test="@type='underline'">
      <u><xsl:value-of select="."/></u>
    </xsl:when>
    <xsl:when test="@type='italic'">
      <em><xsl:value-of select="."/></em>
    </xsl:when>
  </xsl:choose>
</xsl:template>

<xsl:template match="figure">
	<xsl:element name="a">
		<xsl:attribute name="name">
      	<xsl:value-of select="name()" />
      	<xsl:text>_</xsl:text>
      	<xsl:value-of select="@num"/>
    	</xsl:attribute>
  	</xsl:element>	
	<xsl:element name="img">
		<xsl:attribute name="src">
      	<xsl:value-of select="url"/>
 		</xsl:attribute>
    	<xsl:attribute name="alt">
      	<xsl:value-of select="title"/>
    	</xsl:attribute>
    	<xsl:attribute name="align">
    		<xsl:text>center</xsl:text>
    	</xsl:attribute>
	</xsl:element>
	<br />
	<h6>
		<xsl:text>Figure </xsl:text>
		<xsl:value-of select="@num" />
		<xsl:text>: </xsl:text>   
  		<xsl:value-of select="title"/>
  		<xsl:text>, Source: </xsl:text>
		<xsl:value-of select="source"/>
  	</h6>
 
</xsl:template>

<xsl:template match="code">
	<xsl:element name="p">
	<xsl:element name="a">
		<xsl:attribute name="name">
      	<xsl:value-of select="name()" />
      	<xsl:text>_</xsl:text>
      	<xsl:value-of select="@num"/>
    	</xsl:attribute>
  	</xsl:element>	
	<pre><xsl:value-of select="."/></pre>
	</xsl:element>
	<h6>
		<xsl:text>Code Listing </xsl:text>
		<xsl:value-of select="@num" />
	</h6>
	<br />
</xsl:template>

<xsl:template match="table">
	<xsl:element name="a">
		<xsl:attribute name="name">
      	<xsl:value-of select="name()" />
      	<xsl:text>_</xsl:text>
      	<xsl:value-of select="@num"/>
    	</xsl:attribute>
  	</xsl:element>	
	<xsl:element name="table">
	<xsl:attribute name="border">
		<xsl:text>1</xsl:text>
	</xsl:attribute>
	<xsl:attribute name="cellpadding">
		<xsl:text>5</xsl:text>
	</xsl:attribute>
	<xsl:apply-templates select="row" />
	</xsl:element>
	<br />
	<h6>
		<xsl:text>Table </xsl:text>
		<xsl:value-of select="@num" />
		<xsl:text>: </xsl:text>   
  		<xsl:value-of select="title"/>
  	</h6>
  	<br />
</xsl:template>

<xsl:template match="row">
	<xsl:element name="tr">
		<xsl:apply-templates select="data" />
	</xsl:element>
</xsl:template>

<xsl:template match="data">
	<xsl:element name="td">
		<xsl:value-of select="."/>
	</xsl:element>
</xsl:template>

</xsl:stylesheet>