Created
September 29, 2021 12:39
-
-
Save spiralx/dcb7e5fa4e5dedd800e292848ed22aa9 to your computer and use it in GitHub Desktop.
XSLT stylesheet to transform HTML into its own formatted and highlighted source code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<?xml-stylesheet type="text/xsl" href="html.xsl"?> | |
<!DOCTYPE stylesheet [ | |
<!ENTITY nbsp " "> | |
<!ENTITY QUOTE "<xsl:text>"</xsl:text>"> | |
]><xsl:stylesheet | |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
xmlns:xs="http://www.w3.org/2001/XMLSchema" | |
xmlns:xdoc="http://spiralx.org/2010/XMLDoc" | |
xmlns="http://www.w3.org/1999/xhtml" | |
version="2.0"> | |
<!-- | |
Stylesheet for generating an HTML 5 page with a pretty-printed version of | |
the source document's XML. | |
--> | |
<xsl:output method="html" encoding="UTF-8" indent="yes" /> | |
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |
<xsl:preserve-space elements="style script textarea" /> | |
<!-- | |
Title of document, looks for an element in the source annotated with | |
xdoc:title="true" first, otherwise uses the name of the root element. | |
--> | |
<xsl:variable name="title"> | |
<xsl:choose> | |
<xsl:when test="//*[@xdoc:title = 'true']"> | |
<xsl:value-of select="normalize-space(//*[@xdoc:title = 'true'])" /> | |
</xsl:when> | |
<xsl:otherwise> | |
<xsl:value-of select="name(/*)" /> | |
</xsl:otherwise> | |
</xsl:choose> | |
</xsl:variable> | |
<xsl:variable name="xdoc-test" xdoc:title="false">Testing xdoc:title attribute!</xsl:variable> | |
<!-- Root template, generates HTML output skeleton --> | |
<xsl:template match="/"> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8" /> | |
<title><xsl:value-of select="$title" /></title> | |
<link rel="stylesheet/less" href="xml-html.less" /> | |
<script src="https://unpkg.com/less" defer="true"></script> | |
</head> | |
<body> | |
<xsl:apply-templates /> | |
<!--<xsl:call-template name="write-debug-messages" />--> | |
</body> | |
</html> | |
</xsl:template> | |
<!-- Match source root element, write title and global div --> | |
<xsl:template match="/*"> | |
<h1><xsl:value-of select="$title" /></h1> | |
<div id="content" class="xml-tree"> | |
<xsl:apply-templates select="." mode="generate" /> | |
</div> | |
</xsl:template> | |
<!-- Element node, call generate template and wrap in an <li> tag --> | |
<xsl:template match="*|comment()"> | |
<li> | |
<xsl:apply-templates select="." mode="generate" /> | |
</li> | |
</xsl:template> | |
<!-- Turn an element in the source into formatted HTML --> | |
<xsl:template match="*" mode="generate"> | |
<div class="element"> | |
<xsl:attribute name="child-count"> | |
<xsl:value-of select="count(child::*)" /> | |
</xsl:attribute> | |
<xsl:attribute name="text-count"> | |
<xsl:value-of select="count(child::text())" /> | |
</xsl:attribute> | |
<xsl:choose> | |
<!-- Empty element --> | |
<xsl:when test="count(child::node()) = 0"> | |
<xsl:apply-templates select="." mode="tag.closed" /> | |
</xsl:when> | |
<!-- No attributes or child elements, just text --> | |
<xsl:when test="count(child::*) = 0 and count(child::text())"> | |
<xsl:apply-templates select="." mode="tag.start" /> | |
<span class="text"> | |
<xsl:copy-of select="text()" /> | |
</span> | |
<xsl:apply-templates select="." mode="tag.end" /> | |
</xsl:when> | |
<!-- Has a combination of child elements, text and attributes --> | |
<xsl:otherwise> | |
<xsl:apply-templates select="." mode="tag.start" /> | |
<ul> | |
<xsl:apply-templates mode="generate" /> | |
</ul> | |
<xsl:apply-templates select="." mode="tag.end" /> | |
</xsl:otherwise> | |
</xsl:choose> | |
</div> | |
</xsl:template> | |
<!-- Write start tag with any attributes --> | |
<xsl:template match="*" mode="tag.start"> | |
<div class="tag start-tag"> | |
<span class="punc"><</span> | |
<span class="name"> | |
<xsl:value-of select="name()" /> | |
</span> | |
<xsl:apply-templates select="." mode="tag.attrs" /> | |
<span class="punc">></span> | |
</div> | |
</xsl:template> | |
<!-- Self-closed tag --> | |
<xsl:template match="*" mode="tag.closed"> | |
<div class="tag closed-tag start-tag"> | |
<span class="punc"><</span> | |
<span class="name"> | |
<xsl:value-of select="name()" /> | |
</span> | |
<xsl:apply-templates select="." mode="tag.attrs" /> | |
<xsl:text> </xsl:text> | |
<span class="punc">/></span> | |
</div> | |
</xsl:template> | |
<!-- Write end tag --> | |
<xsl:template match="*" mode="tag.end"> | |
<div class="tag end-tag"> | |
<span class="punc"></</span> | |
<span class="name"> | |
<xsl:value-of select="name()" /> | |
</span> | |
<span class="punc">></span> | |
</div> | |
</xsl:template> | |
<!-- Writes list of attributes --> | |
<xsl:template match="*" mode="tag.attrs"> | |
<xsl:for-each select="@*"> | |
<xsl:text> </xsl:text> | |
<xsl:apply-templates select="." mode="generate" /> | |
</xsl:for-each> | |
</xsl:template> | |
<!-- Format attribute node as name="value" --> | |
<xsl:template match="@*" mode="generate"> | |
<span class="attribute"> | |
<!--<span class="punc at">@</span>--> | |
<span class="name"> | |
<xsl:value-of select="name()" /> | |
</span> | |
<span class="punc eq">="</span> | |
<span class="value"> | |
<xsl:value-of select="string()" /> | |
</span> | |
<span class="punc">"</span> | |
</span> | |
</xsl:template> | |
<!-- Format comment --> | |
<xsl:template match="comment()" mode="generate"> | |
<div class="comment"> | |
<xsl:text><--</xsl:text> | |
<xsl:value-of select="string(.)" /> | |
<xsl:text>--></xsl:text> | |
</div> | |
</xsl:template> | |
<!-- Format text --> | |
<xsl:template match="text()" mode="generate"> | |
<xsl:if test="normalize-space(.)"> | |
<div class="text"> | |
<xsl:copy /> | |
<!--<xsl:value-of select="replace(., '&lt;', '&amp;lt;')" />--> | |
</div> | |
</xsl:if> | |
</xsl:template> | |
<!-- Debugging output --> | |
<xsl:template name="write-debug-messages"> | |
<dl id="debug-messages"> | |
<xsl:apply-templates select="node()|@*" mode="debug" /> | |
</dl> | |
</xsl:template> | |
<xsl:template match="@*" mode="debug"> | |
<dt>attribute</dt> | |
<dd> | |
<xsl:text>@</xsl:text> | |
<xsl:value-of select="name(.)" /> | |
<xsl:text>=</xsl:text> | |
<xsl:value-of select="normalize-space()" /> | |
</dd> | |
</xsl:template> | |
<xsl:template match="*" mode="debug"> | |
<dt>element</dt> | |
<dd> | |
<xsl:text><</xsl:text> | |
<xsl:value-of select="name(.)" /> | |
<xsl:text>></xsl:text> | |
</dd> | |
<xsl:apply-templates select="node()|@*" mode="debug" /> | |
</xsl:template> | |
<xsl:template match="comment()" mode="debug"> | |
<dt>comment</dt> | |
<dd><xsl:value-of select="normalize-space(.)" /></dd> | |
</xsl:template> | |
<xsl:template match="text()" mode="debug"> | |
<xsl:if test="normalize-space(.)"> | |
<dt>text</dt> | |
<dd><xsl:value-of select="normalize-space(.)" /></dd> | |
</xsl:if> | |
</xsl:template> | |
<xsl:template match="processing-instruction()" mode="debug"> | |
<dt>processing-instruction</dt> | |
<dd><xsl:value-of select="name(.)" />, <xsl:value-of select="string(.)" /></dd> | |
</xsl:template> | |
</xsl:stylesheet> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdoc="http://spiralx.org/2010/XMLDoc" lang="en"> | |
<head> | |
<meta charset="UTF-8"></meta> | |
<title>xsl:stylesheet</title> | |
<link rel="stylesheet/less" href="xml-html.less"></link><script src="https://unpkg.com/less" defer="true"></script></head> | |
<body> | |
<h1>xsl:stylesheet</h1> | |
<div id="content" class="xml-tree"> | |
<div class="element" child-count="22" text-count="37"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:stylesheet</span> <span class="attribute"><span class="punc at">@</span><span class="name">version</span><span class="punc eq">="</span><span class="value">2.0</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="comment"><-- | |
Stylesheet for generating an HTML 5 page with a pretty-printed version of | |
the source document's XML. | |
--> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:output</span> <span class="attribute"><span class="punc at">@</span><span class="name">method</span><span class="punc eq">="</span><span class="value">html</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">encoding</span><span class="punc eq">="</span><span class="value">UTF-8</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">indent</span><span class="punc eq">="</span><span class="value">yes</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:decimal-format</span> <span class="attribute"><span class="punc at">@</span><span class="name">decimal-separator</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">grouping-separator</span><span class="punc eq">="</span><span class="value">,</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:preserve-space</span> <span class="attribute"><span class="punc at">@</span><span class="name">elements</span><span class="punc eq">="</span><span class="value">style script textarea</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="comment"><-- | |
Title of document, looks for an element in the source annotated with | |
xdoc:title="true" first, otherwise uses the name of the root element. | |
--> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:variable</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">title</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:choose</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:when</span> <span class="attribute"><span class="punc at">@</span><span class="name">test</span><span class="punc eq">="</span><span class="value">//*[@xdoc:title = 'true']</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">normalize-space(//*[@xdoc:title = 'true'])</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:when</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:otherwise</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name(/*)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:otherwise</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:choose</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:variable</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:variable</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">xdoc-test</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">xdoc:title</span><span class="punc eq">="</span><span class="value">false</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">Testing xdoc:title attribute!</span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:variable</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Root template, generates HTML output skeleton --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">/</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">html</span> <span class="attribute"><span class="punc at">@</span><span class="name">lang</span><span class="punc eq">="</span><span class="value">en</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="4" text-count="5"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">head</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">meta</span> <span class="attribute"><span class="punc at">@</span><span class="name">charset</span><span class="punc eq">="</span><span class="value">UTF-8</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="0"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">title</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">$title</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">title</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">link</span> <span class="attribute"><span class="punc at">@</span><span class="name">rel</span><span class="punc eq">="</span><span class="value">stylesheet/less</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">href</span><span class="punc eq">="</span><span class="value">xml-html.less</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">script</span> <span class="attribute"><span class="punc at">@</span><span class="name">src</span><span class="punc eq">="</span><span class="value">../libs/less.min.js</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">defer</span><span class="punc eq">="</span><span class="value">true</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">head</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">body</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:call-template</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">write-debug-messages</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">body</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">html</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Match source root element, write title and global div --></div> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">/*</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="0"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">h1</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">$title</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">h1</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">id</span><span class="punc eq">="</span><span class="value">content</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">xml-tree</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Element node, call generate template and wrap in an <li> tag --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*|comment()</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">li</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">li</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Turn an element in the source into formatted HTML --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">element</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:attribute</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">child-count</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">count(child::*)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:attribute</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:attribute</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">text-count</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">count(child::text())</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:attribute</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="3" text-count="7"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:choose</span><span class="punc">></span></div> | |
<ul> | |
<div class="comment"><-- Empty element --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:when</span> <span class="attribute"><span class="punc at">@</span><span class="name">test</span><span class="punc eq">="</span><span class="value">count(child::node()) = 0</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.closed</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:when</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- No attributes or child elements, just text --></div> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:when</span> <span class="attribute"><span class="punc at">@</span><span class="name">test</span><span class="punc eq">="</span><span class="value">count(child::*) = 0 and count(child::text())</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.start</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">text</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:copy-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">text()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.end</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:when</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Has a combination of child elements, text and attributes --></div> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:otherwise</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.start</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">ul</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">ul</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.end</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:otherwise</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:choose</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Write start tag with any attributes --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.start</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="4" text-count="5"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">tag start-tag</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text"><</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">name</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.attrs</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">></span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Self-closed tag --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.closed</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="5" text-count="6"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">tag closed-tag start-tag</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text"><</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">name</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.attrs</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text"> </span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">/></span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Write end tag --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.end</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">tag end-tag</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text"></</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">name</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">></span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Writes list of attributes --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">tag.attrs</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:for-each</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">@*</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text"> </span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">.</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:for-each</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Format attribute node as name="value" --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">@*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="5" text-count="6"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">attribute</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc at</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">@</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">name</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc eq</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">="</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">value</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">string()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">span</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">punc</span><span class="punc">"</span></span><span class="punc">></span></div><span class="text">"</span><div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">span</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Format comment --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">comment()</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">comment</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text"><--</span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">string(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text">--></span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Format text --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">text()</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">generate</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:if</span> <span class="attribute"><span class="punc at">@</span><span class="name">test</span><span class="punc eq">="</span><span class="value">normalize-space(.)</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">div</span> <span class="attribute"><span class="punc at">@</span><span class="name">class</span><span class="punc eq">="</span><span class="value">text</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:copy</span> <span class="punc">/></span></div> | |
</div> | |
<div class="comment"><--<xsl:value-of select="replace(., '&amp;lt;', '&amp;amp;lt;')" />--></div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">div</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:if</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="comment"><-- Debugging output --></div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">name</span><span class="punc eq">="</span><span class="value">write-debug-messages</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dl</span> <span class="attribute"><span class="punc at">@</span><span class="name">id</span><span class="punc eq">="</span><span class="value">debug-messages</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">node()|@*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dl</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">@*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dt</span><span class="punc">></span></div><span class="text">attribute</span><div class="tag end-tag"><span class="punc"></</span><span class="name">dt</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="4" text-count="5"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dd</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text">@</span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text">=</span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">normalize-space()</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dd</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dt</span><span class="punc">></span></div><span class="text">element</span><div class="tag end-tag"><span class="punc"></</span><span class="name">dt</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="3" text-count="4"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dd</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text"><</span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:text</span><span class="punc">></span></div><span class="text">></span><div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:text</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dd</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:apply-templates</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">node()|@*</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">comment()</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dt</span><span class="punc">></span></div><span class="text">comment</span><div class="tag end-tag"><span class="punc"></</span><span class="name">dt</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="0"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dd</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">normalize-space(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dd</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="2"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">text()</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:if</span> <span class="attribute"><span class="punc at">@</span><span class="name">test</span><span class="punc eq">="</span><span class="value">normalize-space(.)</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dt</span><span class="punc">></span></div><span class="text">text</span><div class="tag end-tag"><span class="punc"></</span><span class="name">dt</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="1" text-count="0"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dd</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">normalize-space(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dd</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:if</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="2" text-count="3"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">xsl:template</span> <span class="attribute"><span class="punc at">@</span><span class="name">match</span><span class="punc eq">="</span><span class="value">processing-instruction()</span><span class="punc">"</span></span> <span class="attribute"><span class="punc at">@</span><span class="name">mode</span><span class="punc eq">="</span><span class="value">debug</span><span class="punc">"</span></span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dt</span><span class="punc">></span></div><span class="text">processing-instruction</span><div class="tag end-tag"><span class="punc"></</span><span class="name">dt</span><span class="punc">></span></div> | |
</div> | |
<div class="element" child-count="2" text-count="1"> | |
<div class="tag start-tag"><span class="punc"><</span><span class="name">dd</span><span class="punc">></span></div> | |
<ul> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">name(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
<div class="text">, </div> | |
<div class="element" child-count="0" text-count="0"> | |
<div class="tag closed-tag start-tag"><span class="punc"><</span><span class="name">xsl:value-of</span> <span class="attribute"><span class="punc at">@</span><span class="name">select</span><span class="punc eq">="</span><span class="value">string(.)</span><span class="punc">"</span></span> <span class="punc">/></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">dd</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:template</span><span class="punc">></span></div> | |
</div> | |
</ul> | |
<div class="tag end-tag"><span class="punc"></</span><span class="name">xsl:stylesheet</span><span class="punc">></span></div> | |
</div> | |
</div> | |
<dl id="debug-messages"> | |
<dt>processing-instruction</dt> | |
<dd>xml-stylesheet, type="text/xsl" href="html.xsl"</dd> | |
<dt>element</dt> | |
<dd><xsl:stylesheet></dd> | |
<dt>attribute</dt> | |
<dd>@version=2.0</dd> | |
<dt>comment</dt> | |
<dd>Stylesheet for generating an HTML 5 page with a pretty-printed version of the source document's XML. Remote version is at: | |
http://dl.dropbox.com/u/222841/xsl/html.xsl | |
</dd> | |
<dt>element</dt> | |
<dd><xsl:output></dd> | |
<dt>attribute</dt> | |
<dd>@method=html</dd> | |
<dt>attribute</dt> | |
<dd>@encoding=UTF-8</dd> | |
<dt>attribute</dt> | |
<dd>@indent=yes</dd> | |
<dt>element</dt> | |
<dd><xsl:decimal-format></dd> | |
<dt>attribute</dt> | |
<dd>@decimal-separator=.</dd> | |
<dt>attribute</dt> | |
<dd>@grouping-separator=,</dd> | |
<dt>element</dt> | |
<dd><xsl:preserve-space></dd> | |
<dt>attribute</dt> | |
<dd>@elements=style script textarea</dd> | |
<dt>comment</dt> | |
<dd>Title of document, looks for an element in the source annotated with xdoc:title="true" first, otherwise uses the name of the | |
root element. | |
</dd> | |
<dt>element</dt> | |
<dd><xsl:variable></dd> | |
<dt>attribute</dt> | |
<dd>@name=title</dd> | |
<dt>element</dt> | |
<dd><xsl:choose></dd> | |
<dt>element</dt> | |
<dd><xsl:when></dd> | |
<dt>attribute</dt> | |
<dd>@test=//*[@xdoc:title = 'true']</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=normalize-space(//*[@xdoc:title = 'true'])</dd> | |
<dt>element</dt> | |
<dd><xsl:otherwise></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name(/*)</dd> | |
<dt>element</dt> | |
<dd><xsl:variable></dd> | |
<dt>attribute</dt> | |
<dd>@name=xdoc-test</dd> | |
<dt>attribute</dt> | |
<dd>@xdoc:title=false</dd> | |
<dt>text</dt> | |
<dd>Testing xdoc:title attribute!</dd> | |
<dt>comment</dt> | |
<dd>Root template, generates HTML output skeleton</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=/</dd> | |
<dt>element</dt> | |
<dd><html></dd> | |
<dt>attribute</dt> | |
<dd>@lang=en</dd> | |
<dt>element</dt> | |
<dd><head></dd> | |
<dt>element</dt> | |
<dd><meta></dd> | |
<dt>attribute</dt> | |
<dd>@charset=UTF-8</dd> | |
<dt>element</dt> | |
<dd><title></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=$title</dd> | |
<dt>element</dt> | |
<dd><link></dd> | |
<dt>attribute</dt> | |
<dd>@rel=stylesheet/less</dd> | |
<dt>attribute</dt> | |
<dd>@href=xml-html.less</dd> | |
<dt>element</dt> | |
<dd><script></dd> | |
<dt>attribute</dt> | |
<dd>@src=../libs/less.min.js</dd> | |
<dt>attribute</dt> | |
<dd>@defer=true</dd> | |
<dt>element</dt> | |
<dd><body></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>element</dt> | |
<dd><xsl:call-template></dd> | |
<dt>attribute</dt> | |
<dd>@name=write-debug-messages</dd> | |
<dt>comment</dt> | |
<dd>Match source root element, write title and global div</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=/*</dd> | |
<dt>element</dt> | |
<dd><h1></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=$title</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@id=content</dd> | |
<dt>attribute</dt> | |
<dd>@class=xml-tree</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>comment</dt> | |
<dd>Element node, call generate template and wrap in an <li> tag</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*|comment()</dd> | |
<dt>element</dt> | |
<dd><li></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>comment</dt> | |
<dd>Turn an element in the source into formatted HTML</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=element</dd> | |
<dt>element</dt> | |
<dd><xsl:attribute></dd> | |
<dt>attribute</dt> | |
<dd>@name=child-count</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=count(child::*)</dd> | |
<dt>element</dt> | |
<dd><xsl:attribute></dd> | |
<dt>attribute</dt> | |
<dd>@name=text-count</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=count(child::text())</dd> | |
<dt>element</dt> | |
<dd><xsl:choose></dd> | |
<dt>comment</dt> | |
<dd>Empty element</dd> | |
<dt>element</dt> | |
<dd><xsl:when></dd> | |
<dt>attribute</dt> | |
<dd>@test=count(child::node()) = 0</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.closed</dd> | |
<dt>comment</dt> | |
<dd>No attributes or child elements, just text</dd> | |
<dt>element</dt> | |
<dd><xsl:when></dd> | |
<dt>attribute</dt> | |
<dd>@test=count(child::*) = 0 and count(child::text())</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.start</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=text</dd> | |
<dt>element</dt> | |
<dd><xsl:copy-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=text()</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.end</dd> | |
<dt>comment</dt> | |
<dd>Has a combination of child elements, text and attributes</dd> | |
<dt>element</dt> | |
<dd><xsl:otherwise></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.start</dd> | |
<dt>element</dt> | |
<dd><ul></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.end</dd> | |
<dt>comment</dt> | |
<dd>Write start tag with any attributes</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.start</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=tag start-tag</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd><</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=name</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name()</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.attrs</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd>></dd> | |
<dt>comment</dt> | |
<dd>Self-closed tag</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.closed</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=tag closed-tag start-tag</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd><</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=name</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name()</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.attrs</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd> </dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd>/></dd> | |
<dt>comment</dt> | |
<dd>Write end tag</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.end</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=tag end-tag</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd></</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=name</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name()</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd>></dd> | |
<dt>comment</dt> | |
<dd>Writes list of attributes</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=tag.attrs</dd> | |
<dt>element</dt> | |
<dd><xsl:for-each></dd> | |
<dt>attribute</dt> | |
<dd>@select=@*</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=.</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>comment</dt> | |
<dd>Format attribute node as name="value"</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=@*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=attribute</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc at</dd> | |
<dt>text</dt> | |
<dd>@</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=name</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name()</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc eq</dd> | |
<dt>text</dt> | |
<dd>="</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=value</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=string()</dd> | |
<dt>element</dt> | |
<dd><span></dd> | |
<dt>attribute</dt> | |
<dd>@class=punc</dd> | |
<dt>text</dt> | |
<dd>"</dd> | |
<dt>comment</dt> | |
<dd>Format comment</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=comment()</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=comment</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd><--</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=string(.)</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd>--></dd> | |
<dt>comment</dt> | |
<dd>Format text</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=text()</dd> | |
<dt>attribute</dt> | |
<dd>@mode=generate</dd> | |
<dt>element</dt> | |
<dd><xsl:if></dd> | |
<dt>attribute</dt> | |
<dd>@test=normalize-space(.)</dd> | |
<dt>element</dt> | |
<dd><div></dd> | |
<dt>attribute</dt> | |
<dd>@class=text</dd> | |
<dt>element</dt> | |
<dd><xsl:copy></dd> | |
<dt>comment</dt> | |
<dd><xsl:value-of select="replace(., '&amp;lt;', '&amp;amp;lt;')" /></dd> | |
<dt>comment</dt> | |
<dd>Debugging output</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@name=write-debug-messages</dd> | |
<dt>element</dt> | |
<dd><dl></dd> | |
<dt>attribute</dt> | |
<dd>@id=debug-messages</dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=node()|@*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=@*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><dt></dd> | |
<dt>text</dt> | |
<dd>attribute</dd> | |
<dt>element</dt> | |
<dd><dd></dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd>@</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name(.)</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd>=</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=normalize-space()</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><dt></dd> | |
<dt>text</dt> | |
<dd>element</dd> | |
<dt>element</dt> | |
<dd><dd></dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd><</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name(.)</dd> | |
<dt>element</dt> | |
<dd><xsl:text></dd> | |
<dt>text</dt> | |
<dd>></dd> | |
<dt>element</dt> | |
<dd><xsl:apply-templates></dd> | |
<dt>attribute</dt> | |
<dd>@select=node()|@*</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=comment()</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><dt></dd> | |
<dt>text</dt> | |
<dd>comment</dd> | |
<dt>element</dt> | |
<dd><dd></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=normalize-space(.)</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=text()</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><xsl:if></dd> | |
<dt>attribute</dt> | |
<dd>@test=normalize-space(.)</dd> | |
<dt>element</dt> | |
<dd><dt></dd> | |
<dt>text</dt> | |
<dd>text</dd> | |
<dt>element</dt> | |
<dd><dd></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=normalize-space(.)</dd> | |
<dt>element</dt> | |
<dd><xsl:template></dd> | |
<dt>attribute</dt> | |
<dd>@match=processing-instruction()</dd> | |
<dt>attribute</dt> | |
<dd>@mode=debug</dd> | |
<dt>element</dt> | |
<dd><dt></dd> | |
<dt>text</dt> | |
<dd>processing-instruction</dd> | |
<dt>element</dt> | |
<dd><dd></dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=name(.)</dd> | |
<dt>text</dt> | |
<dd>,</dd> | |
<dt>element</dt> | |
<dd><xsl:value-of></dd> | |
<dt>attribute</dt> | |
<dd>@select=string(.)</dd> | |
</dl> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@main-background: #f8f8f8; | |
@main-foreground: black; | |
@mono-font: normal 11pt Consolas, monospace; | |
@element-spacing: 4px; | |
@text-spacing: 2px; | |
@eq-spacing: 2px; | |
.light { | |
@tree-colour: black; | |
@tree-back: white; | |
@punc: black; | |
@tag: blue; | |
@attr-name: #a00; | |
@attr-value: #4040ff; | |
@comment: #080; | |
@text: @tree-colour; | |
} | |
.dark { | |
@tree-back: black; | |
@tree-colour: white; | |
@punc: #80a0ff; | |
@tag: #80a0ff; | |
@attr-name: #ff8080; | |
@attr-value: #00ff40; | |
@comment: #60ff60; | |
@text: #eee; | |
} | |
body { | |
font: normal 12pt Verdana, Arial, sans-serif; | |
margin: 2em; | |
background-color: @main-background; | |
color: @main-foreground; | |
} | |
h1 { | |
font-size: 18pt; | |
} | |
div, ul, pre { margin: 0; padding: 0; } | |
.bold { font-weight: bold; } | |
.italic { font-style: italic; } | |
.wrap () { | |
text-wrap: wrap; | |
white-space: pre-wrap; | |
white-space: -moz-pre-wrap; | |
word-wrap: break-word; | |
} | |
.xml-tree { | |
.light; | |
display: block; | |
overflow: auto; | |
/*width: 900px;*/ | |
margin: 1em auto; | |
border: solid 3px @tree-colour; | |
padding: 0.5em; | |
color: @tree-colour; | |
background-color: @tree-back; | |
font: @mono-font; | |
line-height: 1.5em; | |
white-space: nowrap; | |
ul { | |
margin-left: 1em; | |
list-style: none; | |
div.element, div.comment, div.text { | |
margin: @element-spacing 0; | |
} | |
} | |
.punc { | |
color: @punc; | |
} | |
.tag { | |
.name, .punc { | |
//.bold; | |
color: @tag; | |
} | |
.attribute { | |
.name, .at { | |
color: @attr-name; | |
} | |
.eq { | |
padding: 0 @eq-spacing; | |
} | |
.value { | |
color: @attr-value; | |
} | |
} | |
} | |
.comment { | |
.wrap; | |
.italic; | |
color: @comment; | |
} | |
.text { | |
color: @text; | |
} | |
span.text { padding: 0 @text-spacing; } | |
} | |
/* Debugging output */ | |
@msg-border: dotted 1px #888; | |
#debug-messages { | |
margin: 2em 10%; | |
font: @mono-font; | |
dt, dd { | |
padding: 4px 0; | |
} | |
dt { | |
font-weight: bold; | |
float: left; | |
clear: left; | |
width: 15%; | |
&:first { | |
border-top: @msg-border; | |
} | |
} | |
dd { | |
margin-left: 2em; | |
border-bottom: @msg-border; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment