diff options
Diffstat (limited to 'source/02_meta')
-rw-r--r-- | source/02_meta/articles.xsl | 41 | ||||
-rw-r--r-- | source/02_meta/categories.xsl | 45 | ||||
-rw-r--r-- | source/02_meta/meta.xsl | 29 | ||||
-rw-r--r-- | source/02_meta/paginated_articles.xsl | 26 | ||||
-rw-r--r-- | source/02_meta/tags.xsl | 42 |
5 files changed, 183 insertions, 0 deletions
diff --git a/source/02_meta/articles.xsl b/source/02_meta/articles.xsl new file mode 100644 index 0000000..1a8b8fa --- /dev/null +++ b/source/02_meta/articles.xsl @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + +<xsl:include href="[utility/datasource.xsl]"/> + +<xsl:variable name="meta"> + <datasource type="main" mode="full" source="01_data/articles.xml" target="articles"/> + <target mode="plain" value="articles.xml"/> +</xsl:variable> + +<xsl:key name="years" match="datasource/articles/entry/date/year/text()" use="." /> + +<xsl:template match="articles"> + <xsl:for-each select="entry/date/year/text()[generate-id() = generate-id(key('years',.)[1])]"> + <entry handle="{.}"> + <xsl:call-template name="get_articles"> + <xsl:with-param name="year" select="."/> + </xsl:call-template> + </entry> + </xsl:for-each> +</xsl:template> + +<xsl:template name="get_articles"> + <xsl:param name="year"/> + + <xsl:for-each select="/datasource/articles/entry[date/year = $year]"> + <article handle="{@handle}"> + <title> + <xsl:value-of select="title"/> + </title> + <date> + <xsl:value-of select="date/full"/> + </date> + </article> + </xsl:for-each> +</xsl:template> + +</xsl:stylesheet> diff --git a/source/02_meta/categories.xsl b/source/02_meta/categories.xsl new file mode 100644 index 0000000..9bb1287 --- /dev/null +++ b/source/02_meta/categories.xsl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:InputXSLT="function.inputxslt.application" + exclude-result-prefixes="xalan InputXSLT" +> + +<xsl:include href="[utility/datasource.xsl]"/> + +<xsl:variable name="meta"> + <datasource type="main" mode="expression" source="$source_tree/directory[@name = '00_content']/directory" target="files"/> + <datasource type="support" mode="full" source="01_data/pages.xml" target="pages"/> + <target mode="plain" value="categories.xml"/> +</xsl:variable> + +<xsl:template name="get_page_data"> + <xsl:param name="handle"/> + + <xsl:variable name="page" select="$root/pages/entry[@handle = $handle]"/> + + <page handle="{$handle}"> + <title> + <xsl:value-of select="$page/title"/> + </title> + <digest size="{string-length($page/content/p[1])}"> + <xsl:copy-of select="$page/content/p[1]/node()"/> + </digest> + </page> +</xsl:template> + +<xsl:template match="files/directory[@name = 'pages']/directory"> + <entry handle="{@name}"> + <xsl:apply-templates /> + </entry> +</xsl:template> + +<xsl:template match="files/directory[@name = 'pages']/*/file[@extension = '.md']"> + <xsl:call-template name="get_page_data"> + <xsl:with-param name="handle" select="@name"/> + </xsl:call-template> +</xsl:template> + +</xsl:stylesheet> diff --git a/source/02_meta/meta.xsl b/source/02_meta/meta.xsl new file mode 100644 index 0000000..f0c48d7 --- /dev/null +++ b/source/02_meta/meta.xsl @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + +<xsl:include href="[utility/datasource.xsl]"/> + +<xsl:variable name="meta"> + <datasource type="main" mode="full" source="00_content/meta.xml" target="meta"/> + <datasource type="support" mode="full" source="01_data/tags.xml" target="tags"/> + <target mode="plain" value="meta.xml"/> +</xsl:variable> + +<xsl:template match="meta"> + <xsl:copy-of select="./*"/> +</xsl:template> + +<xsl:template match="tags"> + <tags> + <xsl:apply-templates /> + </tags> +</xsl:template> + +<xsl:template match="tags/entry"> + <entry handle="{@handle}"/> +</xsl:template> + +</xsl:stylesheet> diff --git a/source/02_meta/paginated_articles.xsl b/source/02_meta/paginated_articles.xsl new file mode 100644 index 0000000..9fb38a9 --- /dev/null +++ b/source/02_meta/paginated_articles.xsl @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + +<xsl:include href="[utility/datasource.xsl]"/> + +<xsl:variable name="meta"> + <datasource type="main" mode="full" source="01_data/articles.xml" target="articles"/> + <target mode="plain" value="paginated_articles.xml"/> +</xsl:variable> + +<xsl:variable name="total" select="floor(count(datasource/articles/entry) div 2)"/> + +<xsl:template match="articles/entry[position() mod 2 = 1]"> + <entry index="{floor(position() div 2)}" total="{$total}"> + <xsl:apply-templates mode="group" select=". | following-sibling::entry[not(position() > 1)]"/> + </entry> +</xsl:template> + +<xsl:template match="articles/entry" mode="group"> + <article handle="{@handle}"/> +</xsl:template> + +</xsl:stylesheet> diff --git a/source/02_meta/tags.xsl b/source/02_meta/tags.xsl new file mode 100644 index 0000000..20b1f10 --- /dev/null +++ b/source/02_meta/tags.xsl @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + +<xsl:include href="[utility/datasource.xsl]"/> + +<xsl:variable name="meta"> + <datasource type="main" mode="full" source="01_data/tags.xml" target="tags"/> + <datasource type="support" mode="full" source="01_data/articles.xml" target="articles"/> + <target mode="plain" value="tags.xml"/> +</xsl:variable> + +<xsl:template name="get_article_data"> + <xsl:param name="handle"/> + + <xsl:variable name="article" select="$root/articles/entry[@handle = $handle]/*[self::title | self::date]"/> + + <title> + <xsl:value-of select="$article/self::title"/> + </title> + <date> + <xsl:value-of select="$article/self::date/full"/> + </date> +</xsl:template> + +<xsl:template match="tags/entry"> + <entry handle="{@handle}"> + <xsl:apply-templates /> + </entry> +</xsl:template> + +<xsl:template match="tags/*/article"> + <article handle="{@handle}"> + <xsl:call-template name="get_article_data"> + <xsl:with-param name="handle" select="@handle"/> + </xsl:call-template> + </article> +</xsl:template> + +</xsl:stylesheet> |