diff bug-list.xsl @ 0:8cae44c166d3

initial xslt and sample xml
author cin
date Thu, 20 Aug 2015 20:54:19 +0300
parents
children d1400de5832b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bug-list.xsl	Thu Aug 20 20:54:19 2015 +0300
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<xsl:output method="text" />
+	<xsl:key name="bugs-key" match="bug" use="bug_id" />
+	<xsl:variable name="roots" select="bugzilla/bug[not(blocked[key('bugs-key',.)])]"/>
+		
+	<xsl:template match="/">
+		<xsl:apply-templates select="$roots"/>
+	</xsl:template>
+
+	<xsl:template match="bug">
+		<xsl:call-template name="bug-template" />
+	</xsl:template>
+
+	<xsl:template match="text()" />
+
+	<xsl:template name="bug-template">
+		<xsl:param name="indent" select="0" />
+		<xsl:variable name="isOrganizing" select="component = 'product'"></xsl:variable>
+
+		<xsl:call-template name="start-task">
+			<xsl:with-param name="indent" select="$indent" />
+		</xsl:call-template>
+
+		<xsl:if test="$isOrganizing">
+
+		</xsl:if>
+
+		<xsl:choose>
+			<xsl:when test="$isOrganizing">
+				<xsl:for-each select="dependson">
+					<xsl:for-each select="key('bugs-key', .)">
+						<xsl:call-template name="bug-template">
+							<xsl:with-param name="indent" select="$indent + 1" />
+						</xsl:call-template>
+					</xsl:for-each>
+				</xsl:for-each>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:if test="number(estimated_time)">
+					<xsl:call-template name="begin-line">
+						<xsl:with-param name="indent" select="$indent + 1" />
+					</xsl:call-template>
+					<xsl:value-of select="concat('effort ', estimated_time, 'h')" />
+					<xsl:call-template name="end-line" />
+				</xsl:if>
+			</xsl:otherwise>
+		</xsl:choose>
+
+		<xsl:call-template name="end-task">
+			<xsl:with-param name="indent" select="$indent" />
+		</xsl:call-template>
+	</xsl:template>
+
+	<xsl:template name="make-bug-id">
+		<xsl:param name="id"></xsl:param>
+		<xsl:value-of select="concat('bug', $id)"></xsl:value-of>
+	</xsl:template>
+
+	<xsl:template name="start-task">
+		<xsl:param name="indent" />
+		<xsl:call-template name="begin-line">
+			<xsl:with-param name="indent" select="$indent" />
+		</xsl:call-template>
+		<xsl:text>task </xsl:text>
+		<xsl:call-template name="make-bug-id">
+			<xsl:with-param name="id" select="bug_id" />
+		</xsl:call-template>
+		<xsl:value-of select="concat(' &quot;',short_desc,'&quot; {')" />
+		<xsl:call-template name="end-line" />
+	</xsl:template>
+
+	<xsl:template name="end-task">
+		<xsl:param name="indent" />
+		<xsl:call-template name="begin-line">
+			<xsl:with-param name="indent" select="$indent" />
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:call-template name="end-line" />
+	</xsl:template>
+
+	<xsl:template name="begin-line">
+		<xsl:param name="indent" />
+		<xsl:if test="number($indent) > 0">
+			<xsl:text>    </xsl:text>
+			<xsl:call-template name="begin-line">
+				<xsl:with-param name="indent" select="$indent - 1" />
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+	<xsl:template name="end-line">
+		<xsl:text>&#xa;</xsl:text>
+	</xsl:template>
+</xsl:stylesheet>
\ No newline at end of file