You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by rg...@apache.org on 2007/09/01 02:37:40 UTC

svn commit: r571661 - /forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl

Author: rgardler
Date: Fri Aug 31 17:37:40 2007
New Revision: 571661

URL: http://svn.apache.org/viewvc?rev=571661&view=rev
Log:
escape quotes and slashes (thanks to Stuart Yeates, FOR-1045)

Modified:
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl

Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl?rev=571661&r1=571660&r2=571661&view=diff
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.input.doap/resources/stylesheets/descriptorIndex-to-JSON.xsl Fri Aug 31 17:37:40 2007
@@ -23,6 +23,42 @@
   xmlns:doap="http://usefulinc.com/ns/doap#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:foaf="http://xmlns.com/foaf/0.1/">
+
+ <xsl:template name="replaceString">
+   <xsl:param name="string" />
+   <xsl:param name="old" />
+   <xsl:param name="new" />
+     <xsl:choose>
+       <xsl:when test="contains($string, $old)">
+           <xsl:value-of select="substring-before($string, $old)"/><xsl:value-of
+ select="$new" /><xsl:call-template name="replaceString">
+                   <xsl:with-param name="string"><xsl:value-of select="substring-after($string, $old)" /></xsl:with-param>
+                   <xsl:with-param name="new"><xsl:value-of select="$new" /></xsl:with-param>
+                   <xsl:with-param name="old"><xsl:value-of select="$old" /></xsl:with-param>
+                 </xsl:call-template>
+       </xsl:when>
+       <xsl:otherwise>
+       <xsl:value-of select="$string" />
+       </xsl:otherwise>
+     </xsl:choose>
+ </xsl:template>
+
+
+ <xsl:template name="json-escape">
+     <xsl:param name="text"/>
+          <xsl:call-template name="replaceString">
+                   <xsl:with-param name="string">
+                       <xsl:call-template name="replaceString">
+                          <xsl:with-param name="string"><xsl:value-of select="$text" /></xsl:with-param>
+                          <xsl:with-param name="new">\\</xsl:with-param>
+                          <xsl:with-param name="old">\</xsl:with-param>
+                        </xsl:call-template></xsl:with-param>
+                  <xsl:with-param name="new">\"</xsl:with-param>
+                   <xsl:with-param name="old">"</xsl:with-param>
+           </xsl:call-template>
+</xsl:template>
+
+
   <xsl:template match="/">{ "items": [<xsl:apply-templates select="descriptors"/>]} 
   </xsl:template>
   
@@ -38,7 +74,7 @@
   <xsl:template match="rdf:RDF"><xsl:apply-templates select="doap:Project"/></xsl:template>
   
   <xsl:template match="doap:Project">
-    "label":"<xsl:value-of select="doap:name"/>",
+    "label":"<xsl:call-template name="json-escape"><xsl:with-param name="text" select="doap:name"/></xsl:call-template>",
     <xsl:call-template name="categories"/>
     <xsl:call-template name="maintainers"/>
     <xsl:call-template name="programming-language"/>
@@ -46,7 +82,7 @@
   </xsl:template>
   
   <xsl:template match="doap:homepage">
-    "<xsl:value-of select="local-name(.)"/>":"<xsl:apply-templates select="@rdf:resource"/>"<xsl:if test="not(position()=last())">, </xsl:if>
+    "<xsl:call-template name="json-escape"><xsl:with-param name="text" select="local-name(.)"/></xsl:call-template>":"<xsl:apply-templates select="@rdf:resource"/>"<xsl:if test="not(position()=last())">, </xsl:if>
   </xsl:template>
   
   <xsl:template name="maintainers">
@@ -60,7 +96,7 @@
   </xsl:template>
   
   <xsl:template match="foaf:Person">
-    "<xsl:value-of select="foaf:name"/>"<xsl:if test="not(position()=last())">,</xsl:if>
+    "<xsl:call-template name="json-escape"><xsl:with-param name="text" select="foaf:name"/></xsl:call-template>"<xsl:if test="not(position()=last())">,</xsl:if>
   </xsl:template>
   
   <xsl:template name="categories">
@@ -95,11 +131,11 @@
   </xsl:template>
   
   <xsl:template match="doap:programming-language">
-    "<xsl:value-of select="."/>"<xsl:if test="not(position()=last())">, </xsl:if>
+    "<xsl:call-template name="json-escape"><xsl:with-param name="text" select="."/></xsl:call-template>"<xsl:if test="not(position()=last())">, </xsl:if>
   </xsl:template>
   
   <xsl:template match="doap:*">
-    "<xsl:value-of select="local-name(.)"/>":"<xsl:value-of select="normalize-space(.)"/>"<xsl:if test="not(position()=last())">, </xsl:if>
+    "<xsl:call-template name="json-escape"><xsl:with-param name="text" select="local-name(.)"/></xsl:call-template>":"<xsl:call-template name="json-escape"><xsl:with-param name="text" select="normalize-space(.)"/></xsl:call-template>"<xsl:if test="not(position()=last())">, </xsl:if>
   </xsl:template>
     
 </xsl:stylesheet>