[xiph-commits] r19108 - icecast/trunk/icecast/web
dm8tbr at svn.xiph.org
dm8tbr at svn.xiph.org
Sun Mar 9 05:19:36 PDT 2014
Author: dm8tbr
Date: 2014-03-09 05:19:35 -0700 (Sun, 09 Mar 2014)
New Revision: 19108
Added:
icecast/trunk/icecast/web/xml2json.xslt
Modified:
icecast/trunk/icecast/web/Makefile.am
Log:
Adding xml2json XSLT, svn r31 upstream trunk.
https://code.google.com/p/xml2json-xslt/
Modified: icecast/trunk/icecast/web/Makefile.am
===================================================================
--- icecast/trunk/icecast/web/Makefile.am 2014-03-04 21:25:40 UTC (rev 19107)
+++ icecast/trunk/icecast/web/Makefile.am 2014-03-09 12:19:35 UTC (rev 19108)
@@ -10,4 +10,6 @@
auth.xsl \
server_version.xsl \
tunein.png \
- key.png
+ key.png \
+ status-json.xsl \
+ xml2json.xslt
Added: icecast/trunk/icecast/web/xml2json.xslt
===================================================================
--- icecast/trunk/icecast/web/xml2json.xslt (rev 0)
+++ icecast/trunk/icecast/web/xml2json.xslt 2014-03-09 12:19:35 UTC (rev 19108)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--
+ Copyright (c) 2006,2008 Doeke Zanstra
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. Redistributions in binary
+ form must reproduce the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials provided with
+ the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+ <xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="text/x-json"/>
+ <xsl:strip-space elements="*"/>
+ <!--contant-->
+ <xsl:variable name="d">0123456789</xsl:variable>
+
+ <!-- ignore document text -->
+ <xsl:template match="text()[preceding-sibling::node() or following-sibling::node()]"/>
+
+ <!-- string -->
+ <xsl:template match="text()">
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="s" select="."/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- Main template for escaping strings; used by above template and for object-properties
+ Responsibilities: placed quotes around string, and chain up to next filter, escape-bs-string -->
+ <xsl:template name="escape-string">
+ <xsl:param name="s"/>
+ <xsl:text>"</xsl:text>
+ <xsl:call-template name="escape-bs-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ <xsl:text>"</xsl:text>
+ </xsl:template>
+
+ <!-- Escape the backslash (\) before everything else. -->
+ <xsl:template name="escape-bs-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <xsl:when test="contains($s,'\')">
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'\'),'\\')"/>
+ </xsl:call-template>
+ <xsl:call-template name="escape-bs-string">
+ <xsl:with-param name="s" select="substring-after($s,'\')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- Escape the double quote ("). -->
+ <xsl:template name="escape-quot-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <xsl:when test="contains($s,'"')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'"'),'\"')"/>
+ </xsl:call-template>
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="substring-after($s,'"')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- Replace tab, line feed and/or carriage return by its matching escape code. Can't escape backslash
+ or double quote here, because they don't replace characters (� becomes \t), but they prefix
+ characters (\ becomes \\). Besides, backslash should be seperate anyway, because it should be
+ processed first. This function can't do that. -->
+ <xsl:template name="encode-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <!-- tab -->
+ <xsl:when test="contains($s,'	')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'	'),'\t',substring-after($s,'	'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <!-- line feed -->
+ <xsl:when test="contains($s,'
')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'
'),'\n',substring-after($s,'
'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <!-- carriage return -->
+ <xsl:when test="contains($s,'
')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'
'),'\r',substring-after($s,'
'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise><xsl:value-of select="$s"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- number (no support for javascript mantissa) -->
+ <xsl:template match="text()[not(string(number())='NaN' or
+ (starts-with(.,'0' ) and . != '0'))]">
+ <xsl:value-of select="."/>
+ </xsl:template>
+
+ <!-- boolean, case-insensitive -->
+ <xsl:template match="text()[translate(.,'TRUE','true')='true']">true</xsl:template>
+ <xsl:template match="text()[translate(.,'FALSE','false')='false']">false</xsl:template>
+
+ <!-- object -->
+ <xsl:template match="*" name="base">
+ <xsl:if test="not(preceding-sibling::*)">{</xsl:if>
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="s" select="name()"/>
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ <!-- check type of node -->
+ <xsl:choose>
+ <!-- null nodes -->
+ <xsl:when test="count(child::node())=0">null</xsl:when>
+ <!-- other nodes -->
+ <xsl:otherwise>
+ <xsl:apply-templates select="child::node()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- end of type check -->
+ <xsl:if test="following-sibling::*">,</xsl:if>
+ <xsl:if test="not(following-sibling::*)">}</xsl:if>
+ </xsl:template>
+
+ <!-- array -->
+ <xsl:template match="*[count(../*[name(../*)=name(.)])=count(../*) and count(../*)>1]">
+ <xsl:if test="not(preceding-sibling::*)">[</xsl:if>
+ <xsl:choose>
+ <xsl:when test="not(child::node())">
+ <xsl:text>null</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="child::node()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="following-sibling::*">,</xsl:if>
+ <xsl:if test="not(following-sibling::*)">]</xsl:if>
+ </xsl:template>
+
+ <!-- convert root element to an anonymous container -->
+ <xsl:template match="/">
+ <xsl:apply-templates select="node()"/>
+ </xsl:template>
+
+</xsl:stylesheet>
More information about the commits
mailing list