diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl new file mode 100644 index 00000000..060f8788 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl @@ -0,0 +1,367 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:redirect="http://xml.apache.org/xalan/redirect" + extension-element-prefixes="redirect"> + +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + + <xsl:output method="html" indent="yes" encoding="US-ASCII"/> + <xsl:decimal-format decimal-separator="." grouping-separator="," /> + + <xsl:param name="output.dir" select="'.'"/> + <xsl:param name="basedir" select="'.'"/> + + + + <!-- + Matches the root element of the data and starts the generation. + --> + <xsl:template match="checkstyle"> + <!-- create the sorted.html with the data --> + <redirect:write file="{$output.dir}/sorted.html"> + <xsl:call-template name="sorted.html"/> + </redirect:write> + + <!-- create the stylesheet.css with layout --> + <redirect:write file="{$output.dir}/sorted.css"> + <xsl:call-template name="sorted.css"/> + </redirect:write> + + <!-- create the switch.js for collepsing the data --> + <redirect:write file="{$output.dir}/switch.js"> + <xsl:call-template name="switch.js"/> + </redirect:write> + </xsl:template> + + + + <!-- + Generates the HTML page with the data. + --> + <xsl:template name="sorted.html"> + <html> + <head> + <title>CheckStyle Audit</title> + <script language="JavaScript" src="switch.js" type="text/javascript"></script> + <link rel="stylesheet" type="text/css" href="sorted.css"/> + </head> + <body onload="javascript:openFirst();"> + <h1>CheckStyle Audit</h1> + <p>Designed for use with + <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and + <a href='http://ant.apache.org/'>Ant</a>. + </p> + <xsl:apply-templates select="." mode="navigation"/> + <xsl:apply-templates select="." mode="data"/> + </body> + </html> + </xsl:template> + + + + <!-- + Key for detecting duplicate CheckModules + --> + <xsl:key name="module" match="file/error" use="@source"/> + + + + <!-- + Generates the navagation bar. + --> + <xsl:template match="checkstyle" mode="navigation"> + <ul id="navigation"> + <xsl:for-each select="file/error[generate-id() = generate-id(key('module',@source))]"> + <xsl:sort select="@source"/> + <xsl:variable name="last-index"> + <xsl:call-template name="last-index-of"> + <xsl:with-param name="txt" select="@source"/> + <xsl:with-param name="delimiter" select="'.'"></xsl:with-param> + </xsl:call-template> + </xsl:variable> + <li><a href="javascript:change('{@source}');"> + <xsl:value-of select="substring(@source, $last-index+1)"/> + </a></li> + </xsl:for-each> + </ul> + </xsl:template> + + + + <!-- + Generates the data part. + --> + <xsl:template match="checkstyle" mode="data"> + <div id="content"> + <xsl:for-each select="file/error[generate-id() = generate-id(key('module',@source))]"> + <xsl:sort select="@source"/> + <div class="hideable" id="{@source}"> + <xsl:variable name="module" select="@source"/> + <h2><xsl:value-of select="@source"/></h2> + <xsl:call-template name="data"> + <xsl:with-param name="filter" select="$module"/> + </xsl:call-template> + </div> + </xsl:for-each> + </div> + </xsl:template> + + + + <!-- + Generates the content table for the given check module. + @param filter full qualified module name + --> + <xsl:template name="data"> + <xsl:param name="filter"/> + + <table> + <tr> + <th>file</th> + <th>line</th> + <th>severity</th> + <th>message</th> + </tr> + <xsl:for-each select="/checkstyle/file"> + <xsl:choose> + <xsl:when test="error/@source=$filter"> + <xsl:call-template name="data-rows"> + <xsl:with-param name="node" select="."/> + <xsl:with-param name="filter" select="$filter"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:for-each> + </table> + </xsl:template> + + + + <!-- + Generates the data rows for the current check module. + Ignores errors in the current file from other modules. + @param node the file with the errors + @param filter full qualified module name + --> + <xsl:template name="data-rows"> + <xsl:param name="node"/> + <xsl:param name="filter"/> + + <xsl:for-each select="$node/error"> + <xsl:choose> + <xsl:when test="@source=$filter"> + <tr> + <!-- Hide the basdir. First char of the result is a path separator so remove that. --> + <td><xsl:value-of select="substring(substring-after($node/@name, $basedir),2)"/></td> + <td><xsl:value-of select="@line"/></td> + <td><xsl:value-of select="@severity"/></td> + <td><xsl:value-of select="@message"/></td> + </tr> + </xsl:when> + </xsl:choose> + </xsl:for-each> + </xsl:template> + + + + <!-- + Generates the CSS with the layout instructions. + Generated so this XSL is the single source of the whole report. + --> + <xsl:template name="sorted.css"> + body { + font:normal 80% arial,helvetica,sanserif; + color: black; + background-color: white; + margin: 0; + padding: 1em; + min-width: 41em; + } + h1 { + font-weight:bold; + font-size:140%; + margin: 0 0 0.7em; + padding: 0.3em; + text-align: center; + background-color: #eee; + border: 2px ridge silver; + } + html<xsl:text disable-output-escaping="yes">></xsl:text>body h1 { + border-color: gray; + } + + ul#navigation { + font-size: 0.83em; + float: left; width: 18em; + margin: 0 0 1.2em; padding: 0; + border: 1px dashed silver; + } + ul#navigation li { + list-style: none; + margin: 0; padding: 0.2em; + } + ul#navigation a { + display: block; + padding: 0.2em; + font-weight: bold; + } + ul#navigation a:link { + color: black; background-color: #eee; + } + ul#navigation a:visited { + color: #666; background-color: #eee; + } + ul#navigation a:hover { + color: red; background-color: white; + } + ul#navigation a:active { + color: white; background-color: gray; + } + + div#content { + margin: 0 1em 1em 16em; + padding: 0 1em; + } + * html div#content { + height: 1em; /* Workaround 3-Pixel-Bug of Internet Explorers */ + } + div#content h2 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + div#content p { + font-size: 1em; + margin: 1em 0; + } + table { + width:100%; + border-collapse:collapse; + } + table td, table th { + border:1px solid #000; + padding:3px 7px 2px 7px; + } + table th { + font-weight:bold; + background: #ccc; + color: black; + } + table tr:nth-child(odd) td { + background: #efefef; + } + table tr:nth-child(even) td { + background: #fff; + } + </xsl:template> + + + + <!-- + Generates the JavaScript for the dynamic style. + Generated so this XSL is the single source of the whole report. + --> + <xsl:template name="switch.js"> + /* + * Hides all "hideable" div-containers + */ + function hideAll() { + allElements = document.getElementsByTagName("div"); + for (i = 0; i <xsl:text disable-output-escaping="yes"><</xsl:text> allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display="none"; + } + } + return; + } + + /* + * Shows one div-container and hides the other. + * @param id id of the element to show + */ + function change(id) { + hideAll(); + e = document.getElementById(id); + if (e.style.display=="none") { + e.style.display=""; + } + window.scrollTo(0, 0); + return; + } + + /* + * Shows only the first data row. + * Used in body:onload so the user could directly see some messages. + */ + function openFirst() { + hideAll(); + for (i = 0; i <xsl:text disable-output-escaping="yes"><</xsl:text> allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display=""; + return; + } + } + return; + } + </xsl:template> + + + + <!-- + Calculates the index of the last occurence of a substring in a string. + @param txt the whole string in which to search + @delimiter the substring to search + --> + <xsl:template name="last-index-of"> + <xsl:param name="txt"/> + <xsl:param name="remainder" select="$txt"/> + <xsl:param name="delimiter" select="' '"/> + + <xsl:choose> + <xsl:when test="contains($remainder, $delimiter)"> + <xsl:call-template name="last-index-of"> + <xsl:with-param name="txt" select="$txt"/> + <xsl:with-param name="remainder" select="substring-after($remainder, $delimiter)"/> + <xsl:with-param name="delimiter" select="$delimiter"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="lastIndex" select="string-length(substring($txt, 1, string-length($txt)-string-length($remainder)))+1"/> + <xsl:choose> + <xsl:when test="string-length($remainder)=0"> + <xsl:value-of select="string-length($txt)"/> + </xsl:when> + <xsl:when test="$lastIndex>0"> + <xsl:value-of select="($lastIndex - string-length($delimiter))"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="0"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> |