diff options
Diffstat (limited to 'xslt/delicious2tellico.xsl')
-rw-r--r-- | xslt/delicious2tellico.xsl | 283 |
1 files changed, 277 insertions, 6 deletions
diff --git a/xslt/delicious2tellico.xsl b/xslt/delicious2tellico.xsl index e185d58..a272439 100644 --- a/xslt/delicious2tellico.xsl +++ b/xslt/delicious2tellico.xsl @@ -21,17 +21,41 @@ doctype-public="-//Robby Stephenson/DTD Tellico V10.0//EN" doctype-system="http://periapsis.org/tellico/dtd/v10/tellico.dtd"/> +<xsl:param name="item-type"/> + <xsl:template match="/"> <tc:tellico syntaxVersion="10"> - <tc:collection title="Delicious Library Import" type="2"> + <!-- DL libraries can contain mixed types and right now, there's no way to do that in Tellico --> + <!-- so we're going to limit the export to whatever the type of the first item is --> + <xsl:variable name="item"> + <xsl:choose> + <xsl:when test="string-length($item-type) > 0"> + <xsl:value-of select="$item-type"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="local-name(library/items/child::*[1])"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:comment><xsl:text>Choosing all items of type </xsl:text><xsl:value-of select="$item"/></xsl:comment> + + <xsl:variable name="type"> + <xsl:choose> + <xsl:when test="$item='book'">2</xsl:when> + <xsl:when test="$item='movie'">3</xsl:when> + <xsl:when test="$item='game'">11</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <tc:collection title="Delicious Library Import"> + <xsl:attribute name="type"><xsl:value-of select="$type"/></xsl:attribute> <tc:fields> <tc:field name="_default"/> <tc:field flags="0" title="Amazon Link" category="General" format="4" type="7" name="amazon" i18n="true"/> <tc:field flags="0" title="UUID" category="General" format="0" type="1" name="uuid"/> </tc:fields> - <xsl:for-each select="library/items/book"> - <xsl:apply-templates select="."/> - </xsl:for-each> + <xsl:apply-templates select="library/items/child::*[local-name()=$item]"/> </tc:collection> </tc:tellico> </xsl:template> @@ -56,7 +80,7 @@ <xsl:otherwise> <xsl:value-of select="@title"/> </xsl:otherwise> - </xsl:choose> + </xsl:choose> </tc:title> <tc:subtitle> @@ -116,7 +140,7 @@ <tc:rating> <!-- tellico automatically rounds down --> - <xsl:value-of select="netrating"/> + <xsl:value-of select="@netrating"/> </tc:rating> <xsl:call-template name="split"> @@ -132,6 +156,219 @@ </tc:entry> </xsl:template> +<xsl:template match="movie"> + <tc:entry> + <tc:uuid> + <xsl:value-of select="@uuid"/> + </tc:uuid> + + <tc:amazon> + <xsl:if test="@asin"> + <xsl:value-of select="concat('http://www.amazon.com/dp/',@asin,'/?tag=tellico-20')"/> + </xsl:if> + </tc:amazon> + + <tc:title> + <xsl:call-template name="strip-title"> + <xsl:with-param name="title" select="@title"/> + </xsl:call-template> + </tc:title> + + <tc:medium> + <xsl:value-of select="@aspect"/> + </tc:medium> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:director'"/> + <xsl:with-param name="value" select="@director"/> + </xsl:call-template> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:cast'"/> + <xsl:with-param name="value" select="@stars"/> + </xsl:call-template> + + <xsl:if test="contains(@features, 'Widescreen')"> + <tc:widescreen>true</tc:widescreen> + </xsl:if> + + <xsl:if test="contains(@features, 'NTSC')"> + <tc:format i18n="true">NTSC</tc:format> + </xsl:if> + + <xsl:if test="contains(@features, 'PAL')"> + <tc:format i18n="true">PAL</tc:format> + </xsl:if> + + <xsl:if test="contains(@features, 'SECAM')"> + <tc:format i18n="true">SECAM</tc:format> + </xsl:if> + + <xsl:if test="contains(@features, 'Color')"> + <tc:color i18n="true">Color</tc:color> + </xsl:if> + + <xsl:if test="contains(@features, 'Black & White')"> + <tc:color i18n="true">Black & White</tc:color> + </xsl:if> + + <xsl:if test="contains(@features, '1.33:1')"> + <tc:aspect-ratios> + <tc:aspect-ratio>1.33:1</tc:aspect-ratio> + </tc:aspect-ratios> + </xsl:if> + + <xsl:if test="contains(@features, '1.85:1')"> + <tc:aspect-ratios> + <tc:aspect-ratio>1.85:1</tc:aspect-ratio> + </tc:aspect-ratios> + </xsl:if> + + <tc:audio-tracks> + <xsl:if test="contains(@features, 'Dolby')"> + <tc:audio-track i18n="true">Dolby</tc:audio-track> + </xsl:if> + <xsl:if test="contains(@features, 'DTS')"> + <tc:audio-track i18n="true">DTS</tc:audio-track> + </xsl:if> + </tc:audio-tracks> + + <xsl:choose> + <xsl:when test="contains(@genre, 'Region 1')"> + <tc:region i18n="true">Region 1</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 2')"> + <tc:region i18n="true">Region 2</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 3')"> + <tc:region i18n="true">Region 3</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 4')"> + <tc:region i18n="true">Region 4</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 5')"> + <tc:region i18n="true">Region 5</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 6')"> + <tc:region i18n="true">Region 6</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 7')"> + <tc:region i18n="true">Region 7</tc:region> + </xsl:when> + <xsl:when test="contains(@genre, 'Region 8')"> + <tc:region i18n="true">Region 8</tc:region> + </xsl:when> + </xsl:choose> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:genre'"/> + <xsl:with-param name="value" select="@genre"/> + <xsl:with-param name="i18n" select="true()"/> + </xsl:call-template> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:studio'"/> + <xsl:with-param name="value" select="@publisher"/> + </xsl:call-template> + + <tc:running-time> + <xsl:value-of select="@minutes"/> + </tc:running-time> + + <tc:certification> + <xsl:value-of select="concat(@mpaarating, ' (US)')"/> + </tc:certification> + + <tc:year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="@theatricalDate"/> + </xsl:call-template> + </tc:year> + + <tc:pur_price> + <xsl:value-of select="@price"/> + </tc:pur_price> + + <tc:pur_date> + <xsl:value-of select="@purchaseDate"/> + </tc:pur_date> + + <tc:rating> + <!-- tellico automatically rounds down --> + <xsl:value-of select="@netrating"/> + </tc:rating> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:nationality'"/> + <xsl:with-param name="value" select="@country"/> + </xsl:call-template> + + <tc:plot> + <xsl:value-of select="description"/> + </tc:plot> + </tc:entry> +</xsl:template> + +<xsl:template match="game"> + <tc:entry> + <tc:uuid> + <xsl:value-of select="@uuid"/> + </tc:uuid> + + <tc:amazon> + <xsl:if test="@asin"> + <xsl:value-of select="concat('http://www.amazon.com/dp/',@asin,'/?tag=tellico-20')"/> + </xsl:if> + </tc:amazon> + + <tc:title> + <xsl:value-of select="@title"/> + </tc:title> + + <tc:platform> + <xsl:value-of select="@platform"/> + </tc:platform> + + <tc:certification> + <xsl:value-of select="@esrbrating"/> + </tc:certification> + + <xsl:call-template name="split"> + <xsl:with-param name="name" select="'tc:genre'"/> + <xsl:with-param name="value" select="@genre"/> + <xsl:with-param name="i18n" select="true()"/> + </xsl:call-template> + + <tc:pur_price> + <xsl:value-of select="@price"/> + </tc:pur_price> + + <tc:pur_date> + <xsl:value-of select="@purchaseDate"/> + </tc:pur_date> + + <tc:year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="@published"/> + </xsl:call-template> + </tc:year> + + <tc:rating> + <!-- tellico automatically rounds down --> + <xsl:value-of select="@netrating"/> + </tc:rating> + + <tc:publisher> + <xsl:value-of select="@publisher"/> + </tc:publisher> + + <tc:description> + <xsl:value-of select="description"/> + </tc:description> + + </tc:entry> +</xsl:template> + <xsl:template name="split"> <xsl:param name="name"/> <xsl:param name="value"/> @@ -161,4 +398,38 @@ <xsl:value-of select="substring($numbers, string-length($numbers)-3, 4)"/> </xsl:template> +<xsl:template name="strip-title"> + <xsl:param name="title"/> + <xsl:param name="chars" select="'[('"/> + <xsl:choose> + <xsl:when test="string-length($chars) = 0"> + <xsl:value-of select="normalize-space($title)"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="strip-title"> + <xsl:with-param name="title"> + <xsl:call-template name="str-before"> + <xsl:with-param name="value1" select="$title"/> + <xsl:with-param name="value2" select="substring($chars,1,1)"/> + </xsl:call-template> + </xsl:with-param> + <xsl:with-param name="chars" select="substring($chars,2)"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="str-before"> + <xsl:param name="value1"/> + <xsl:param name="value2"/> + <xsl:choose> + <xsl:when test="string-length($value2) > 0 and contains($value1, $value2)"> + <xsl:value-of select="substring-before($value1, $value2)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$value1"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + </xsl:stylesheet> |