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>