Advertisement
Guest User

Untitled

a guest
Mar 20th, 2012
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 10.04 KB | None | 0 0
  1. <?xml version = "1.0"?>
  2.  
  3. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
  4.     <xsl:output
  5.         method="html"
  6.         encoding="windows-1251"
  7.         doctype-public = "-//W3C//DTD HTML 4.0//EN"
  8.         indent = "yes"
  9.    />
  10.     <xsl:strip-space elements="*"/>
  11.  
  12.     <xsl:template match="standings">
  13.         <html>
  14.             <head>
  15.                 <title>Standings</title>
  16.                 <link rel="stylesheet" href="../standings-wt.css" />
  17.             </head>
  18.             <body><table class="wrapper"><tr><td>
  19.                 <center>
  20.                     <xsl:apply-templates select="contest"/>
  21.                 </center>
  22.             </td></tr></table></body>
  23.         </html>
  24.     </xsl:template>
  25.  
  26.     <xsl:template match="contest">
  27.         <a name="{@name}">
  28.             <h2>
  29.                 <xsl:value-of select="@name"/>
  30.             </h2>
  31.         </a>
  32.         <p>
  33.             <xsl:if test = "@time and @length">
  34.                 <xsl:call-template name="write-time">
  35.                     <xsl:with-param name="time" select="@time"/>
  36.                 </xsl:call-template>
  37.                 <xsl:text> of </xsl:text>
  38.                 <xsl:call-template name="write-time">
  39.                     <xsl:with-param name="time" select="@length"/>
  40.                 </xsl:call-template>
  41.                 <br/>
  42.             </xsl:if>
  43.             <xsl:if test = "@status">
  44.                 <xsl:text>status: </xsl:text>
  45.                 <xsl:value-of select="@status"/>
  46.                 <xsl:if test="@frozen='yes'">
  47.                     <xsl:text>, frozen</xsl:text>
  48.                 </xsl:if>
  49.             </xsl:if>
  50.         </p>
  51.         <xsl:if test="count(session/problem/run)">
  52.             <p>
  53.                 <xsl:text>runs: </xsl:text>
  54.                 <xsl:value-of select="count(session/problem/run)"/>
  55.                 <xsl:text>, accepted: </xsl:text>
  56.                 <xsl:value-of select="count(session/problem/run[@accepted = 'yes'])"/>
  57.                 <br/>
  58.                 <xsl:for-each select="session/problem/run[@accepted = 'yes']">
  59.                     <xsl:sort select="@time" data-type="number" order="descending"/>
  60.                     <xsl:if test="position() = 1">
  61.                         <xsl:text>last success: </xsl:text>
  62.                         <xsl:value-of select="../../@party"/>
  63.                         <xsl:text>, </xsl:text>
  64.                         <xsl:value-of select="../@alias"/>
  65.                         <xsl:text>, </xsl:text>
  66.                         <xsl:call-template name="write-time">
  67.                             <xsl:with-param name="time" select="@time"/>
  68.                         </xsl:call-template>
  69.                     </xsl:if>
  70.                 </xsl:for-each>
  71.                 <br/>
  72.             </p>
  73.         </xsl:if>
  74.  
  75.         <xsl:variable name="challenge-problems" select="challenge/problem"/>
  76.         <table border="0" cellspacing="0" cellpadding="1">
  77.             <tr bgcolor="#ffffff">
  78.                 <th class="party">
  79.                     <xsl:text>Team</xsl:text>
  80.                 </th>
  81.                 <xsl:for-each select="$challenge-problems">
  82.                     <th class="problem">
  83.                         <xsl:value-of select="@alias"/>
  84.                     </th>
  85.                 </xsl:for-each>
  86.                 <th class="solved">
  87.                     <xsl:text>=</xsl:text>
  88.                 </th>
  89.                 <th class="penalty">
  90.                     <xsl:text>Time</xsl:text>
  91.                 </th>
  92.                 <th class="rank">
  93.                     <xsl:text>Rank</xsl:text>
  94.                 </th>
  95.             </tr>
  96.             <tr height="3">
  97.                 <td colspan="{4 + count($challenge-problems)}">
  98.                     <hr size="1" color="#000000"/>
  99.                 </td>
  100.             </tr>
  101.             <xsl:for-each select="session">
  102.                 <xsl:sort select="@solved" data-type="number" order="descending"/>
  103.                 <xsl:sort select="@penalty" data-type="number" order="ascending"/>
  104.                 <xsl:variable name="session-problems" select="problem"/>
  105.                 <xsl:variable name="cursolved" select="@solved"/>
  106.                 <xsl:variable name="unique">
  107.                     <xsl:choose>
  108.                         <xsl:when test="count(following-sibling::session[@solved = $cursolved]) = 0">1</xsl:when>
  109.                         <xsl:otherwise>0</xsl:otherwise>
  110.                     </xsl:choose>
  111.                 </xsl:variable>
  112.                 <xsl:variable name="solved" select="count(following-sibling::session[not(following-sibling::session/@solved = @solved)])+$unique"/>
  113.                 <tr>
  114.                     <xsl:choose>
  115.                         <xsl:when test="($solved mod 2 = 1) and (position() mod 2 = 0)">
  116.                             <xsl:attribute name = "bgcolor">#f8f8f8</xsl:attribute>
  117.                         </xsl:when>
  118.                         <xsl:when test="($solved mod 2 = 1) and (position() mod 2 = 1)">
  119.                             <xsl:attribute name = "bgcolor">#ffffff</xsl:attribute>
  120.                         </xsl:when>
  121.                         <xsl:when test="($solved mod 2 = 0) and (position() mod 2 = 1)">
  122.                             <xsl:attribute name = "bgcolor">#d0f0ff</xsl:attribute>
  123.                         </xsl:when>
  124.                         <xsl:when test="($solved mod 2 = 0) and (position() mod 2 = 0)">
  125.                             <xsl:attribute name = "bgcolor">#c8e8f8</xsl:attribute>
  126.                         </xsl:when>
  127.                     </xsl:choose>
  128.                     <td class="party">
  129.                         <xsl:value-of select="@party"/>
  130.                     </td>
  131.                     <xsl:for-each select="$challenge-problems">
  132.                         <td>
  133.                             <xsl:apply-templates select="$session-problems[@alias = current()/@alias]"/>
  134.                         </td>
  135.                     </xsl:for-each>
  136.                     <td>
  137.                         <xsl:number value="@solved"/>
  138.                     </td>                    
  139.                     <td class="penalty">
  140.                         <xsl:number value="@penalty" format="1" />
  141.                     </td>
  142.                     <td class="rank">
  143.                         <xsl:variable name="solved" select="@solved"/>
  144.                         <xsl:variable name="penalty" select="@penalty"/>
  145.                         <xsl:number value="position()-count(preceding::session[@solved=$solved and @penalty=$penalty])"/>
  146.                     </td>
  147.                 </tr>
  148.             </xsl:for-each>
  149.             <tr height="3">
  150.                 <td colspan="{4 + count($challenge-problems)}">
  151.                     <hr size="1" color="#000000"/>
  152.                 </td>
  153.             </tr>
  154.             <tr>
  155.                 <td>Total runs</td>
  156.                 <xsl:for-each select="$challenge-problems">
  157.                     <td>
  158.                         <xsl:value-of select="count(//problem[@alias = current()/@alias]/run)"/>
  159.                     </td>
  160.                 </xsl:for-each>
  161.             </tr>
  162.             <tr>
  163.                 <td>Accepted</td>
  164.                 <xsl:for-each select="$challenge-problems">
  165.                     <td>
  166.                         <xsl:value-of select="count(//problem[@alias = current()/@alias]/run[@accepted = 'yes'])"/>
  167.                     </td>
  168.                 </xsl:for-each>
  169.             </tr>
  170.             <tr>
  171.                 <td>Rejected</td>
  172.                 <xsl:for-each select="$challenge-problems">
  173.                     <td>
  174.                         <xsl:value-of select="count(//problem[@alias = current()/@alias]/run[@accepted != 'yes'])"/>
  175.                     </td>
  176.                 </xsl:for-each>
  177.             </tr>
  178.         </table>        
  179.     </xsl:template>
  180.  
  181.     <xsl:template match="problem">
  182.         <xsl:if test="@attempts = 0">.</xsl:if>
  183.         <xsl:if test="@attempts != 0">
  184.             <xsl:choose>
  185.                 <xsl:when test="@accepted = 0">
  186.                     <b>-<xsl:number value="@attempts"/></b>
  187.                 </xsl:when>
  188.                 <xsl:otherwise>
  189.                     <i>
  190.                     <xsl:if test="@attempts = 1">+</xsl:if>
  191.                     <xsl:if test="@attempts != 1">+<xsl:number value="@attempts - 1"/></xsl:if>
  192.                     <br/>
  193.                     <s>
  194.                     <xsl:call-template name="write-short-time">
  195.                         <xsl:with-param name="time" select="@time"/>
  196.                     </xsl:call-template>
  197.                     </s>
  198.                     </i>
  199.                 </xsl:otherwise>
  200.             </xsl:choose>
  201.         </xsl:if>
  202.     </xsl:template>
  203.  
  204.     <!--
  205.    <xsl:template name="write-time">
  206.        <xsl:param name="time"/>
  207.        <xsl:number value="floor($time div 3600000)" format="0"/>
  208.        <xsl:text>:</xsl:text>
  209.        <xsl:number value="floor($time div 60000) mod 60" format="00"/>
  210.        <xsl:text>:</xsl:text>
  211.        <xsl:number value="floor($time div 1000) mod 60" format="00"/>
  212.    </xsl:template>
  213.  
  214.    <xsl:template name="write-short-time">
  215.        <xsl:param name="time"/>
  216.        <xsl:number value="floor($time div 60000)" format="0"/>
  217.        <xsl:text>:</xsl:text>
  218.        <xsl:number value="floor($time div 1000) mod 60" format="00"/>
  219.    </xsl:template>
  220.     -->
  221.  
  222.     <xsl:template name="write-time">
  223.         <xsl:param name="time"/>
  224.         <xsl:number value="floor($time div 3600000)" format="0"/>
  225.         <xsl:text>:</xsl:text>
  226.         <xsl:number value="floor(floor($time div 60000) mod 60 div 10)" /><xsl:number value="floor($time div 60000) mod 60 mod 10" />
  227.         <xsl:text>:</xsl:text>
  228.         <xsl:number value="floor(floor($time div 1000) mod 60 div 10)" /><xsl:number value="floor($time div 1000) mod 60 mod 10" />
  229.     </xsl:template>
  230.  
  231.     <xsl:template name="write-short-time">
  232.         <xsl:param name="time"/>
  233.         <xsl:number value="floor($time div 60000)" format="0"/>
  234.         <xsl:text>:</xsl:text>
  235.         <xsl:number value="floor(floor($time div 1000) mod 60 div 10)" /><xsl:number value="floor($time div 1000) mod 60 mod 10" />
  236.     </xsl:template>
  237. </xsl:stylesheet>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement