<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:wp="http://wordpress.org/export/1.2/"
    xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    >
<!-- atom: http://www.ietf.org/rfc/rfc4287 -->
<!-- 
        WordPress Backup File XML to HTML via XSLT.
        (c) December 2013
        by Wyrd Smythe <TheWyrdSmythe@gmail.com>
        Granted to the public domain for non-commercial use.
        This work is release "as is" for your own use.
 -->
<xsl:output method="html" encoding="UTF-8"/>
<xsl:param name="post-id" select="'1'" />

<!-- MAIN TEMPLATE -->
<xsl:template match="/rss">
<xsl:message>Smythe's XSLT Program: wp-extract-post</xsl:message>

<xsl:element name="html"><!-- html -->
    <xsl:element name="head"><!-- head -->

        <xsl:comment>
            <xsl:text>This file is automatically generated. Do not edit!</xsl:text>
        </xsl:comment>

        <xsl:element name="meta">
            <xsl:attribute name="name">XSLT-Script</xsl:attribute>
            <xsl:attribute name="value">wp-extract-post</xsl:attribute>
        </xsl:element>

        <xsl:element name="title">
            <xsl:text>Post-</xsl:text><xsl:value-of select="$post-id"/>
        </xsl:element>

        <xsl:element name="link">
            <xsl:attribute name="rel">stylesheet</xsl:attribute>
            <xsl:attribute name="type">text/css</xsl:attribute>
            <xsl:attribute name="href">/cjs/blog/xslt.css</xsl:attribute>
        </xsl:element>

    </xsl:element><!-- /head -->
    <xsl:element name="body"><!-- body -->

        <!-- HEADER -->
        <xsl:element name="div">
            <xsl:attribute name="class">PageHead</xsl:attribute>

            <xsl:element name="h1">
                <xsl:value-of select="channel/wp:author/wp:author_display_name"/>
                <xsl:text> </xsl:text>
                <xsl:element name="a">
                    <xsl:attribute name="target">_blank</xsl:attribute>
                    <xsl:attribute name="href">
                        <xsl:value-of select="channel/link"/>
                    </xsl:attribute>
                    <xsl:text>@</xsl:text>
                </xsl:element>
                <xsl:text> </xsl:text>
                <xsl:value-of select="channel/title"/>
            </xsl:element>
            <xsl:element name="h2"><xsl:value-of select="channel/description"/></xsl:element>
        </xsl:element>

        <!-- PAGE -->
        <xsl:element name="div">
            <xsl:attribute name="class">PageBody</xsl:attribute>

            <!-- POST -->
            <xsl:apply-templates select="channel/item[wp:post_id=$post-id]"></xsl:apply-templates>
        </xsl:element>

        <!-- TRAILER -->
        <xsl:element name="div">
            <xsl:attribute name="class">PageFoot</xsl:attribute>
            <!-- left trailer text -->
            <xsl:element name="span">
                <xsl:attribute name="class">LT</xsl:attribute>
                <xsl:text disable-output-escaping="yes">&amp;copy; 2016 Wyrd Smythe</xsl:text>
                <xsl:element name="br" />
                <xsl:text>Granted to the public domain.</xsl:text>
                <xsl:element name="br" />
            </xsl:element>
            <!-- right trailer text -->
            <xsl:element name="span">
                <xsl:attribute name="class">RT</xsl:attribute>
                <xsl:text>Questions</xsl:text>
                <xsl:element name="br" />
                <xsl:text>&lt;TheWyrdSmythe@gmail.com&gt;</xsl:text>
                <xsl:element name="br" />
            </xsl:element>
            <!-- center trailer text -->
                <xsl:element name="br" />
                <xsl:text disable-output-escaping="yes">&amp;#x221E;</xsl:text>
                <xsl:element name="br" />
        </xsl:element>

    </xsl:element><!-- /body -->
</xsl:element><!-- /html -->
</xsl:template>


<!-- PAGES TEMPLATE -->
<xsl:template match="item">
    <!-- Info Table -->
    <xsl:element name="table">
        <xsl:attribute name="class">InfoTable</xsl:attribute>
        <!-- Post Date -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostDate</xsl:attribute>
                <xsl:value-of select="wp:post_date"/>
            </xsl:element>
        </xsl:element>
        <!-- Post Category -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostCategory</xsl:attribute>
                <xsl:apply-templates select="category[@domain='category']">
                    <xsl:sort select="@nicename" data-type="text" order="ascending" />
                </xsl:apply-templates>
            </xsl:element>
        </xsl:element>
        <!-- Post Tags -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostTags</xsl:attribute>
                <xsl:apply-templates select="category[@domain='post_tag']">
                    <xsl:sort select="@nicename" data-type="text" order="ascending" />
                </xsl:apply-templates>
            </xsl:element>
        </xsl:element>
        <!-- Comments Status -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostInfo</xsl:attribute>
                <xsl:element name="span">
                    <xsl:attribute name="style">font-weight:bold;</xsl:attribute>
                    <xsl:value-of select="count(wp:comment)"/>
                </xsl:element>
                <xsl:text> comments </xsl:text>
                <xsl:element name="span">
                    <xsl:attribute name="style">font-style:italic;</xsl:attribute>
                    <xsl:text>(</xsl:text>
                    <xsl:value-of select="wp:comment_status"/>
                    <xsl:text>)</xsl:text>
                </xsl:element>
            </xsl:element>
        </xsl:element>
        <!-- Post ID -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostInfo</xsl:attribute>
                <xsl:text>id=</xsl:text>
                <xsl:element name="span">
                    <xsl:attribute name="style">font-weight:bold;</xsl:attribute>
                    <xsl:value-of select="wp:post_id"/>
                </xsl:element>
            </xsl:element>
        </xsl:element>
        <!-- Post Link -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostLink</xsl:attribute>
                <xsl:attribute name="style">font-weight:bold;</xsl:attribute>
                <xsl:element name="a">
                    <xsl:attribute name="target">BlogWindow</xsl:attribute>
                    <xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
                    <xsl:text>[WordPress Post Link]</xsl:text>
                </xsl:element>
            </xsl:element>
        </xsl:element>
        <!-- Post Link -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostLink</xsl:attribute>
                <xsl:attribute name="style">font-style:italic;</xsl:attribute>
                <xsl:element name="a">
                    <xsl:attribute name="target">PreviewWindow</xsl:attribute>
                    <xsl:attribute name="href"><xsl:value-of select="guid"/></xsl:attribute>
                    <xsl:text>[WP Page Link]</xsl:text>
                </xsl:element>
            </xsl:element>
        </xsl:element>
    </xsl:element>

    <!-- Title -->
    <xsl:element name="h3">
        <xsl:value-of select="title"/>
    </xsl:element>

    <!-- Post -->
    <xsl:element name="table">
        <xsl:attribute name="class">PostTable</xsl:attribute>
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">PostText</xsl:attribute>
                <!-- Recursively break text into paragraphs! -->
                <xsl:call-template name="textproc">
                    <xsl:with-param name="the-text" select="content:encoded" />
                </xsl:call-template>
                <!-- original method:
                <xsl:value-of select="translate(content:encoded,'&#13;','|')" disable-output-escaping="yes" />
                 -->
            </xsl:element>
        </xsl:element>

        <!-- Comments -->
        <xsl:element name="tr">
            <xsl:element name="td">
                <xsl:attribute name="class">Banner</xsl:attribute>
                <xsl:text>Comments</xsl:text>
            </xsl:element>
        </xsl:element>
        <xsl:apply-templates select="wp:comment">
            <xsl:sort select="wp:comment_date" data-type="text" order="ascending" />
        </xsl:apply-templates>

    </xsl:element> <!-- /table -->
</xsl:template>

<!-- COMMENTS TEMPLATE -->
<xsl:template match="wp:comment">
    <xsl:element name="tr">
        <xsl:element name="td">
            <xsl:attribute name="class">PostComment</xsl:attribute>
            <xsl:element name="div">
                <xsl:attribute name="class">CommentDate</xsl:attribute>
                <xsl:value-of select="wp:comment_date" disable-output-escaping="yes" />
            </xsl:element>
            <xsl:element name="div">
                <xsl:attribute name="class">CommentAuthor</xsl:attribute>
                <xsl:value-of select="wp:comment_author" disable-output-escaping="yes" />
            </xsl:element>
            <xsl:element name="div">
                <xsl:attribute name="class">CommentText</xsl:attribute>
                <!-- Recursively break text into paragraphs! -->
                <xsl:call-template name="textproc">
                    <xsl:with-param name="the-text" select="wp:comment_content" />
                </xsl:call-template>
            </xsl:element>
        </xsl:element>
    </xsl:element>
</xsl:template>


<!-- PAGES TEMPLATE -->
<xsl:template name="textproc" match="*">
    <xsl:param name="the-text"/>
    <xsl:choose>
        <!-- 
         -->
        <xsl:when test="starts-with($the-text,'&#13;')">
            <xsl:variable name="text-tail" select="substring-after($the-text,'&#13;')" />
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle <!~~comments~~> thing -->
        <xsl:when test="starts-with($the-text,'&lt;!--')">
            <xsl:variable name="text-tail" select="substring-after($the-text,'--&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:element name="hr">
                <xsl:attribute name="style">color:#bfbfbf;height:1px;</xsl:attribute>
            </xsl:element>
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <PRE> -->
        <xsl:when test="starts-with($the-text,'&lt;pre')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/pre&gt;'),'/pre&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/pre&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:value-of select="$text-head" disable-output-escaping="yes" />
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <DIV> -->
        <xsl:when test="starts-with($the-text,'&lt;div')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/div&gt;'),'/div&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/div&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:call-template name="textblock">
                <xsl:with-param name="the-text" select="$text-head" />
            </xsl:call-template>
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <BLOCKQUOTE> -->
        <xsl:when test="starts-with($the-text,'&lt;blockquote')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/blockquote&gt;'),'/blockquote&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/blockquote&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:call-template name="textblock">
                <xsl:with-param name="the-text" select="$text-head" />
            </xsl:call-template>
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <TABLE> -->
        <xsl:when test="starts-with($the-text,'&lt;table')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/table&gt;'),'/table&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/table&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:value-of select="$text-head" disable-output-escaping="yes" />
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <UL> -->
        <xsl:when test="starts-with($the-text,'&lt;ul')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/ul&gt;'),'/ul&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/ul&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:value-of select="$text-head" disable-output-escaping="yes" />
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <OL> -->
        <xsl:when test="starts-with($the-text,'&lt;ol')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/ol&gt;'),'/ol&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/ol&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:value-of select="$text-head" disable-output-escaping="yes" />
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Handle a <DL> -->
        <xsl:when test="starts-with($the-text,'&lt;dl')">
            <xsl:variable name="text-head" select="concat(substring-before($the-text,'/dl&gt;'),'/dl&gt;')" />
            <xsl:variable name="text-tail" select="substring-after($the-text,'/dl&gt;')" />
            <!-- Emit a paragraph -->
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <xsl:value-of select="$text-head" disable-output-escaping="yes" />
            <xsl:text disable-output-escaping="yes">&#13;</xsl:text>
            <!-- Recurse for the text tail... -->
            <xsl:call-template name="textproc">
                <xsl:with-param name="the-text" select="$text-tail" />
            </xsl:call-template>
        </xsl:when>

        <!-- Regular text -->
        <xsl:otherwise>
            <!-- Handle single-paragraph text -->
            <xsl:if test="not(contains($the-text,'&#13;'))">
                <!-- Emit the paragraph -->
                <xsl:element name="p">
                    <xsl:attribute name="class">Single</xsl:attribute>
                    <xsl:value-of select="$the-text" disable-output-escaping="yes" />
                </xsl:element>
            </xsl:if>
            <!-- Handle multi-paragraph text -->
            <xsl:if test="contains($the-text,'&#13;')">
                <xsl:variable name="text-head" select="substring-before($the-text,'&#13;')" />
                <xsl:variable name="text-tail" select="substring-after($the-text,'&#13;')" />
                <!-- Emit a paragraph -->
                <xsl:element name="p">
                    <xsl:attribute name="class">Multiple</xsl:attribute>
                    <xsl:value-of select="$text-head" disable-output-escaping="yes" />
                </xsl:element>
                <!-- Recurse for the text tail... -->
                <xsl:call-template name="textproc">
                    <xsl:with-param name="the-text" select="$text-tail" />
                </xsl:call-template>
            </xsl:if>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

<!-- DIV and BLOCKQUOTE handler -->
<!-- Adds <BR> elements for newlines. -->
<xsl:template name="textblock" match="*">
    <xsl:param name="the-text"/>
    <!-- Handle single-paragraph text -->
    <xsl:if test="not(contains($the-text,'&#13;'))">
        <!-- Emit the paragraph -->
        <xsl:value-of select="$the-text" disable-output-escaping="yes" />
    </xsl:if>
    <!-- Handle multi-paragraph text -->
    <xsl:if test="contains($the-text,'&#13;')">
        <xsl:variable name="text-head" select="substring-before($the-text,'&#13;')" />
        <xsl:variable name="text-tail" select="substring-after($the-text,'&#13;')" />
        <!-- Emit a paragraph -->
        <xsl:value-of select="$text-head" disable-output-escaping="yes" />
        <xsl:element name="br" />
        <!-- Recurse for the text tail... -->
        <xsl:call-template name="textblock">
            <xsl:with-param name="the-text" select="$text-tail" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>


<!-- CATEGORIES and TAGS TEMPLATE -->
<xsl:template match="category">
<xsl:if test='position() != 1'>
    <xsl:text>, </xsl:text>
</xsl:if>
<xsl:value-of select="text()"/>
</xsl:template>



</xsl:stylesheet>

<!-- eof -->
