Browser XSLT support. Optimize for size.
Modified: trunk/cis/ReactOS.ApiStatus/Default.build
Modified: trunk/cis/ReactOS.ApiStatus/rapistatus.xsl
Modified: trunk/reactos/tools/rgenstat/rgenstat.c
Added: trunk/reactos/tools/rgenstat/web/index.html

Modified: trunk/cis/ReactOS.ApiStatus/Default.build
--- trunk/cis/ReactOS.ApiStatus/Default.build	2005-07-29 10:04:38 UTC (rev 16854)
+++ trunk/cis/ReactOS.ApiStatus/Default.build	2005-07-29 11:40:01 UTC (rev 16855)
@@ -21,7 +21,7 @@
 	<property name="reactos.dir" value="reactos" />
 	<property name="apistatus.xsl" value="rapistatus.xsl" />
 	<property name="apistatus.xml" value="rapistatus.xml" />
-	<property name="apistatus.html" value="index.html" />
+	<property name="apistatus.html" value="index2.html" />
 	<include buildfile="config.include" />
 
 	<target name="publish">

Modified: trunk/cis/ReactOS.ApiStatus/rapistatus.xsl
--- trunk/cis/ReactOS.ApiStatus/rapistatus.xsl	2005-07-29 10:04:38 UTC (rev 16854)
+++ trunk/cis/ReactOS.ApiStatus/rapistatus.xsl	2005-07-29 11:40:01 UTC (rev 16855)
@@ -76,22 +76,28 @@
 			<xsl:call-template name="ELEMENT">
 				<xsl:with-param name="class">c</xsl:with-param>
 			</xsl:call-template>
-			<xsl:apply-templates/>
+			<xsl:apply-templates>
+				<xsl:with-param name="base"><xsl:value-of select="@base"/></xsl:with-param>
+			</xsl:apply-templates>
 		</DIV>
 	</xsl:template>
 
 
 	<!-- function -->
 	<xsl:template match="functions">
-		<xsl:apply-templates select="function">
-			<xsl:sort select="@name"/>
+		<xsl:param name="base"/>
+		<xsl:apply-templates select="f">
+			<xsl:sort select="@n"/>
+			<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
 		</xsl:apply-templates>
 	</xsl:template>
 
-	<xsl:template match="functions/function">
+	<xsl:template match="functions/f">
+		<xsl:param name="base"/>
 		<DIV>
 			<xsl:call-template name="ELEMENT">
 				<xsl:with-param name="class">f</xsl:with-param>
+				<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
 			</xsl:call-template>
 			<xsl:apply-templates/>
 		</DIV>
@@ -102,6 +108,7 @@
 
 	<xsl:template name="ELEMENT">
 		<xsl:param name="class"/>
+		<xsl:param name="base"/>
 		<xsl:param name="image"/>
 			<xsl:attribute name="class">
 	  		<xsl:value-of select="$class"/>
@@ -109,10 +116,10 @@
 			</xsl:attribute>
 			<xsl:call-template name="toggle"/>
 			<xsl:choose>
-				<xsl:when test="./node() and local-name() != 'component' and @implemented = 'true'">
+				<xsl:when test="./node() and local-name() != 'component' and @i = 'true'">
           <img src="i.gif" class="i"/>
 				</xsl:when>
-				<xsl:when test="./node() and local-name() != 'component' and @implemented = 'false'">
+				<xsl:when test="./node() and local-name() != 'component' and @i = 'false'">
           <img src="u.gif" class="u"/>
 				</xsl:when>
 				<xsl:when test="./node() and local-name() = 'component' and @complete >= 100">
@@ -131,7 +138,10 @@
 				</xsl:otherwise>
 			</xsl:choose>
 			<xsl:call-template name="name"/>
- 			<xsl:call-template name="file"/>
+			<xsl:call-template name="n"/>
+ 			<xsl:call-template name="file">
+				<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
+			</xsl:call-template>
 			<xsl:call-template name="status"/>
 	</xsl:template>
 
@@ -173,9 +183,16 @@
 		</xsl:if>
 	</xsl:template>
 
+	<xsl:template name="n">
+		<xsl:if test="@n">
+			<SPAN class="l"><xsl:value-of select="@n"/></SPAN>
+		</xsl:if>
+	</xsl:template>
+
 	<xsl:template name="file">
-		<xsl:if test="@file">
-			<SPAN class="h"><xsl:value-of select="@file"/></SPAN>
+		<xsl:param name="base"/>
+		<xsl:if test="@f">
+			<SPAN class="h"><xsl:value-of select="$base"/><xsl:value-of select="@f"/></SPAN>
 		</xsl:if>
 	</xsl:template>
 

Modified: trunk/reactos/tools/rgenstat/rgenstat.c
--- trunk/reactos/tools/rgenstat/rgenstat.c	2005-07-29 10:04:38 UTC (rev 16854)
+++ trunk/reactos/tools/rgenstat/rgenstat.c	2005-07-29 11:40:01 UTC (rev 16855)
@@ -398,7 +398,7 @@
   return 0;
 }
 
-// Build a path and filename so it is of the format [cvs-module][directory][filename].
+// Build a path and filename so it is of the format [module][directory][filename].
 // Also convert all backslashes into forward slashes.
 static void
 get_filename(char *cvspath, char *filename, char *result)
@@ -659,10 +659,19 @@
   return strcmp(p->name, q->name);
 }
 
+char *
+get_filename_without_base(char *component_base,
+                          char *filename)
+{
+  return &filename[strlen(component_base)];
+}
+
 static void
-generate_xml_for_component(char *component_name)
+generate_xml_for_component(char *component_name,
+                           char *component_base)
 {
   PAPI_INFO api_info;
+  char canonical_base[MAX_PATH];
   char buf[200];
   int complete;
   int implemented_total;
@@ -678,28 +687,23 @@
   while (api_info != NULL)
     {
       if (api_info->tag_id == TAG_IMPLEMENTED)
-        {
           implemented_total ++;
-        }
       else if (api_info->tag_id == TAG_UNIMPLEMENTED)
-        {
           unimplemented_total ++;
-        }
 
       api_info = api_info->next;
     }
 
   if (implemented_total + unimplemented_total > 0)
-    {
       complete = ((implemented_total) * 100) / (implemented_total + unimplemented_total);
-    }
   else
-    {
       complete = 100;
-    }
 
-  sprintf(buf, "<component name=\"%s\" complete=\"%d\" implemented_total=\"%d\" unimplemented_total=\"%d\">",
-    component_name, complete, implemented_total, unimplemented_total);
+  strcpy(canonical_base, component_base);
+  path_to_url(canonical_base);
+
+  sprintf(buf, "<component name=\"%s\" base=\"%s\" complete=\"%d\" implemented_total=\"%d\" unimplemented_total=\"%d\">",
+    component_name, canonical_base, complete, implemented_total, unimplemented_total);
   write_line(buf);
 
   if (api_info_list != NULL)
@@ -709,12 +713,12 @@
       api_info = api_info_list;
       while (api_info != NULL)
         {
-          sprintf(buf, "<function name=\"%s\" implemented=\"%s\" file=\"%s\">",
+          sprintf(buf, "<f n=\"%s\" i=\"%s\" f=\"%s\" />",
             api_info->name,
             api_info->tag_id == TAG_IMPLEMENTED ? "true" : "false",
-            api_info->filename);
+            get_filename_without_base(component_base,
+	                              api_info->filename));
           write_line(buf);
-          write_line("</function>");
           api_info = api_info->next;
         }
 
@@ -783,38 +787,26 @@
 
       /* Skip whitespace and eol characters */
       while ((index < size) && (is_whitespace(buffer[index]) || (is_eol_char(buffer[index]))))
-        {
           index++;
-        }
       if ((file_pointer < size) && (buffer[index] == '\n'))
-        {
           index++;
-        }
 
       if (buffer[index] == ';')
         {
           /* Skip comments */
           while ((index < size) && (!is_eol_char(buffer[index])))
-            {
               index++;
-            }
           if ((index < size) && (buffer[index] == '\n'))
-            {
               index++;
-            }
           continue;
         }
 
       /* Get component name */
       start = index;
       while ((index < size) && (!is_whitespace(buffer[index])))
-        {
           index++;
-        }
       if (index >= size)
-        {
           break;
-        }
 
       len = index - start;
       strncpy(component_name, &buffer[start], len);
@@ -822,20 +814,14 @@
 
       /* Skip whitespace */
       while ((index < size) && (is_whitespace(buffer[index])))
-        {
           index++;
-        }
       if (index >= size)
-        {
           break;
-        }
 
       /* Get component path */
       start = index;
       while ((index < size) && (!is_whitespace(buffer[index]) && !is_eol_char(buffer[index])))
-        {
           index++;
-        }
 
       len = index - start;
       strncpy(component_path, &buffer[start], len);
@@ -851,20 +837,17 @@
 
       /* Skip to end of line */
       while ((index < size) && (!is_eol_char(buffer[index])))
-        {
           index++;
-        }
       if ((index < size) && (buffer[index] == '\n'))
-        {
           index++;
-        }
 
       canonical_path = convert_path(component_path);
       if (canonical_path != NULL)
         {
           process_directory(canonical_path, canonical_path);
           free(canonical_path);
-          generate_xml_for_component(component_name);
+          generate_xml_for_component(component_name,
+	                             component_path);
         }
     }
 

Added: trunk/reactos/tools/rgenstat/web/index.html
--- trunk/reactos/tools/rgenstat/web/index.html	2005-07-29 10:04:38 UTC (rev 16854)
+++ trunk/reactos/tools/rgenstat/web/index.html	2005-07-29 11:40:01 UTC (rev 16855)
@@ -0,0 +1,14 @@
+<html>
+<body>
+If your browser do not support XSLT click <a href="index2.html">here</a>.
+<script type="text/javascript">
+	var xml = new ActiveXObject("Microsoft.XMLDOM")
+	xml.async = false
+	xml.load("rapistatus.xml")
+	var xsl = new ActiveXObject("Microsoft.XMLDOM")
+	xsl.async = false
+	xsl.load("rapistatus.xsl")
+	document.write(xml.transformNode(xsl))
+</script>
+</body>
+</html>
Property changes on: trunk/reactos/tools/rgenstat/web/index.html
___________________________________________________________________
Name: svn:eol-style
   + native