Add genre classification based on metadata keywords
Addresses #16, but some keywords/genres are still missing
diff --git a/xslt/epub2i5.xsl b/xslt/epub2i5.xsl
index 34ed090..277dfbf 100644
--- a/xslt/epub2i5.xsl
+++ b/xslt/epub2i5.xsl
@@ -83,6 +83,26 @@
<xsl:variable name="texttype" select="replace(($dnbBookdata//dc:subject[matches(., '^[A-Z] ')])[1], '^[A-Z] (.*)', '$1')"/>
+ <xsl:variable name="genretable">
+ <genres>
+ <genre keyRegex="krimi" genre="Roman: Kriminalroman"/>
+ <genre keyRegex="arztroman" genre="Roman: Arztroman"/>
+ <genre keyRegex="liebesroman" genre="Roman: Liebesroman"/>
+ <genre keyRegex="science.?fiction" genre="Roman: Science-Fiction-Roman"/>
+ <genre keyRegex="horror" genre="Roman: Horrorroman"/>
+ <genre keyRegex="western" genre="Roman: Westernroman"/>
+ <genre keyRegex="fantasy" genre="Roman: Fantasyroman"/>
+ <genre keyRegex="historischer roman" genre="Roman: Historischer Roman"/>
+ <genre keyRegex="erzählung" genre="Erzählung"/>
+ <genre keyRegex="novelle" genre="Novelle"/>
+ <genre keyRegex="anthologie" genre="Anthologie"/>
+ <genre keyRegex="kurzgeschichte" genre="Kurzgeschichte"/>
+ <genre keyRegex="roman" genre="Roman"/>
+ <genre keyRegex="." genre="Roman"/>
+ </genres>
+ </xsl:variable>
+
+ <xsl:variable name="textFullGenre" select="$genretable/genres/genre[matches($dnbBookdata, ./@keyRegex, 'i')][1]/@genre"/>
<xsl:variable name="verlag">
<xsl:choose>
<xsl:when test="contains(($dnbBookdata//dc:publisher)[1], ':')">
@@ -307,8 +327,8 @@
</creation>
<textClass/>
<textDesc>
- <textType><xsl:value-of select="$texttype"/></textType>
- <textTypeRef><xsl:value-of select="$texttype"/></textTypeRef>
+ <textType><xsl:value-of select="$textFullGenre"/></textType>
+ <textTypeRef><xsl:value-of select="replace($textFullGenre, '.*: *', '')"/></textTypeRef>
<textDomain/>
</textDesc>
</profileDesc>