⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symbolsreporthtml.xsl

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 XSL
📖 第 1 页 / 共 2 页
字号:
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="/ResOrgExportFile">
    <html>
      <title>Symbols Report</title>
      <style>
	      body			         { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #000080; }
	      h1        			 { font-size: 14pt; font-weight: bold; } 
	      table     			 { font-size: 8pt; }
	      .table_caption		 { text-align: left; font-size: 10pt; font-weight: bold; }
	      .count			     { font-size: 8pt; font-style: italic; color: #0000ff; }	
      </style>

      <script language="JavaScript" event="onclick" for="DynMessLink">
	    var Selected = this.name;
	    var elmref = eval("document.all('" + Selected + "_h1')");
    	
        if (elmref) 
        {
		  if (elmref.style.display=='none')
		  {
		    elmref.style.display='';
		  }
		  else
		  {
		    elmref.style.display = 'none';
		  }
	    }
	    return false;
      </script>

<script language="JavaScript" >
//-----------------------------------------------------------------------------
// sortTable(id, col, rev)
//
//  id  - ID of the TABLE, TBODY, THEAD or TFOOT element to be sorted.
//  col - Index of the column to sort, 0 = first column, 1 = second column,
//        etc.
//  rev - If true, the column is sorted in reverse (descending) order
//        initially.
//
// Notes:
//   1.  The first column (index 0) is used as a secondary sort column and
//       always sorted in ascending order.
//
//   2.  This code is based on the "Table Sort Demo" code by Mike Hall
//       (http://www.brainjar.com) and is used with the author's consent
//-----------------------------------------------------------------------------

function sortTable(id, col, rev)
{
  // Get the table or table section to sort.
  var tblEl = document.getElementById(id);

  // The first time this function is called for a given table, set up an
  // array of reverse sort flags.

  if (tblEl.reverseSort == null)
  {
    tblEl.reverseSort = new Array();

    // Also, assume the team name column is initially sorted.
    tblEl.lastColumn = 0;
  }

  // If this column has not been sorted before, set the initial sort direction.
  if (tblEl.reverseSort[col] == null)
    tblEl.reverseSort[col] = rev;

  // If this column was the last one sorted, reverse its sort direction.
  if (col == tblEl.lastColumn)
    tblEl.reverseSort[col] = !tblEl.reverseSort[col];

  // Remember this column as the last one sorted.
  tblEl.lastColumn = col;

  // Set the table display style to "none" - necessary for Netscape 6 
  // browsers.

  var oldDsply = tblEl.style.display;
  tblEl.style.display = "none";

  // Sort the rows based on the content of the specified column using a
  // selection sort.
  var tmpEl;
  var i, j;
  var minVal, minIdx;
  var testVal;
  var cmp;

  for (i = 0; i &lt; tblEl.rows.length - 1; i++)
  {
    // Assume the current row has the minimum value.
    minIdx = i;
    minVal = getTextValue(tblEl.rows[i].cells[col]);

    // Search the rows that follow the current one for a smaller value.
    for (j = i + 1; j &lt; tblEl.rows.length; j++)
	{
      testVal = getTextValue(tblEl.rows[j].cells[col]);
      cmp = compareValues(minVal, testVal);

      // Negate the comparison result if the reverse sort flag is set.
      if (tblEl.reverseSort[col])
        cmp = -cmp;

      // Sort by the second column if those values are equal.
      if (cmp == 0 &amp;&amp; col != 0)
        cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]),
                            getTextValue(tblEl.rows[j].cells[1]));

      // If this row has a smaller value than the current minimum, remember its
      // position and update the current minimum value.
      if (cmp &gt; 0)
	  {
        minIdx = j;
        minVal = testVal;
      }
    }

    // By now, we have the row with the smallest value. Remove it from the
    // table and insert it before the current row.

    if (minIdx &gt; i)
	{
      tmpEl = tblEl.removeChild(tblEl.rows[minIdx]);
      tblEl.insertBefore(tmpEl, tblEl.rows[i]);
    }
  }

  // Set rankings.
  setRanks(tblEl, col, rev);

  // Restore the table's display style.
  tblEl.style.display = oldDsply;

  return false;
}

//-----------------------------------------------------------------------------
// Functions to get and compare values during a sort.
//-----------------------------------------------------------------------------

// This code is necessary for browsers that don't reflect the DOM constants
// (like IE).

if (document.ELEMENT_NODE == null)
{
  document.ELEMENT_NODE = 1;
  document.TEXT_NODE = 3;
}

function getTextValue(el)
{
  var i;
  var s;

  // Find and concatenate the values of all text nodes contained within the element.

  s = "";
  for (i = 0; i &lt; el.childNodes.length; i++)
    if (el.childNodes[i].nodeType == document.TEXT_NODE)
      s += el.childNodes[i].nodeValue;
    else if (el.childNodes[i].nodeType == document.ELEMENT_NODE &amp;&amp;
             el.childNodes[i].tagName == "BR")
      s += " ";
    else
      // Use recursion to get text within sub-elements.
      s += getTextValue(el.childNodes[i]);

  return normalizeString(s);
}

function compareValues(v1, v2)
{
  var f1, f2;

  // If the values are numeric, convert them to floats.
  f1 = parseFloat(v1);
  f2 = parseFloat(v2);

  if (!isNaN(f1) &amp;&amp; !isNaN(f2))
  {
    v1 = f1;
    v2 = f2;
  }

  // Compare the two values.
  if (v1 == v2)
    return 0;

  if (v1 &gt; v2)
    return 1

  return -1;
}

// Regular expressions for normalizing white space.
var whtSpEnds = new RegExp("^\\s*|\\s*$", "g");
var whtSpMult = new RegExp("\\s\\s+", "g");

function normalizeString(s)
{
  s = s.replace(whtSpMult, " ");  // Collapse any multiple whites space.
  s = s.replace(whtSpEnds, "");   // Remove leading or trailing white space.

  return s;
}


//-----------------------------------------------------------------------------
// Functions to update the table appearance after a sort.
//-----------------------------------------------------------------------------

// Style class names.
var rowClsNm = "alternateRow";
var colClsNm = "sortedColumn";

// Regular expressions for setting class names.
var rowTest = new RegExp(rowClsNm, "gi");
var colTest = new RegExp(colClsNm, "gi");

function setRanks(tblEl, col, rev)
{
  // Determine whether to start at the top row of the table and go down or
  // at the bottom row and work up. This is based on the current sort

  // direction of the column and its reversed flag.

  var i    = 0;
  var incr = 1;

  if (tblEl.reverseSort[col])
    rev = !rev;

  if (rev)
  {
    incr = -1;
    i = tblEl.rows.length - 1;
  }

  // Now go through each row in that direction and assign it a rank by
  // counting 1, 2, 3...
  var count   = 1;
  var rank    = count;
  var curVal;
  var lastVal = null;

  // Note that this loop is skipped if the table was sorted on the name column.
  while (col &gt; 0 &amp;&amp; i &gt;= 0 &amp;&amp; i &lt; tblEl.rows.length)
  {
    // Get the value of the sort column in this row.
    curVal = getTextValue(tblEl.rows[i].cells[col]);

    // On rows after the first, compare the sort value of this row to the
    // previous one. If they differ, update the rank to match the current row
    // count. (If they are the same, this row will get the same rank as the
    // previous one.)
    if (lastVal != null &amp;&amp; compareValues(curVal, lastVal) != 0)
        rank = count;

    // Set the rank for this row.
    tblEl.rows[i].rank = rank;

    // Save the sort value of the current row for the next time around and bump
    // the row counter and index.
    lastVal = curVal;
    count++;
    i += incr;
  }

  // Now go through each row (from top to bottom) and display its rank. Note
  // that when two or more rows are tied, the rank is shown on the first of
  // those rows only.

  var rowEl, cellEl;
  var lastRank = 0;

  // Go through the rows from top to bottom.
  for (i = 0; i &lt; tblEl.rows.length; i++)
  {
    rowEl = tblEl.rows[i];
    cellEl = rowEl.cells[0];
  }
}
</script>
	  
      <!-- The real stuff starts here -->
      <table width="100%" border="0"><tbody>
        <tr>
          <td class="tableheadingbgcolour" style="BORDER-TOP: blue thin ridge; BACKGROUND: lightblue; BORDER-BOTTOM: blue thin ridge" colSpan="2">
			 <br/>
			 <span class="titlebartext"><h1 align="center">Symbols Report</h1></span>
	      </td>
        </tr>
        <tr>
		  <br/><br/>
          <table border="0" width="100%" cellpadding="5" cellspacing="5">
	        <thead>
		      <tr>
                <br/><br/>
                <h3 align="left">Symbol Files</h3>
              </tr>
              <tr>
                <th align="left"><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  0, false);">PathName</a></th>
                <th><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  1, false);">Symbols</a></th>
                <th align="center" width="80"><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  2, false);">Resources /<br/>Controls</a></th>
                <th align="center" width="80"><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  3, false);">Commands</a></th>
                <th><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  4, false);">Internal<br/>Conflicts</a></th>
                <th><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  5, false);">External<br/>Conflicts</a></th>
                <th><a href="" onclick="this.blur(); return sortTable('FilesTableBody',  6, false);">Out of Range</a></th>
              </tr>
	  		</thead>
			<tbody id="FilesTableBody">
              <xsl:for-each select="File">
                <tr>
                  <td><xsl:value-of select="PathName" /><br/>(Resource File: <xsl:value-of select="ResourceFile" />)</td>
                  <td align="center"><xsl:value-of select="count(Symbols/Symbol)"/></td>
				  <td align="center">
				    <xsl:choose>
                      <xsl:when test="Metrics/Resources/MaxValue=0">None</xsl:when>
                      <xsl:otherwise><xsl:value-of select="Metrics/Resources/MinValue" />-<xsl:value-of select="Metrics/Resources/MaxValue" /></xsl:otherwise>
                    </xsl:choose>
	  			  </td>
				  <td align="center">
				    <xsl:choose>
                      <xsl:when test="Metrics/Commands/MaxValue=0">None</xsl:when>
                      <xsl:otherwise><xsl:value-of select="Metrics/Commands/MinValue" />-<xsl:value-of select="Metrics/Commands/MaxValue" /></xsl:otherwise>
                    </xsl:choose>
				  </td>
                  <td align="center">
                    <xsl:choose>
                      <xsl:when test="Metrics/Conflicts/Internal>0"><font color="red"><b><xsl:value-of select="Metrics/Conflicts/Internal" /></b></font></xsl:when>
                      <xsl:otherwise><xsl:value-of select="Metrics/Conflicts/Internal" /></xsl:otherwise>
                    </xsl:choose>
                  </td>
                  <td align="center">
                    <xsl:choose>
                      <xsl:when test="Metrics/Conflicts/External>0"><font color="red"><b><xsl:value-of select="Metrics/Conflicts/External" /></b></font></xsl:when>
                      <xsl:otherwise><xsl:value-of select="Metrics/Conflicts/External" /></xsl:otherwise>
                    </xsl:choose>
                  </td>
                  <td align="center">
                    <xsl:choose>
                      <xsl:when test="Options/CheckForOutOfRangeSymbols>0">
                        <xsl:choose>
                          <xsl:when test="Metrics/OutOfRangeSymbols>0"><font color="red"><b><xsl:value-of select="Metrics/OutOfRangeSymbols" /></b></font></xsl:when>
                          <xsl:otherwise><xsl:value-of select="Metrics/OutOfRangeSymbols" /></xsl:otherwise>
                        </xsl:choose>
					  </xsl:when>
					  <xsl:otherwise>n/a</xsl:otherwise>
                    </xsl:choose>
                  </td>
                </tr>
              </xsl:for-each>
			</tbody>
          </table>
          <br/>
          <br/>

          <!-- The properties for each file follow -->
          <xsl:for-each select="File">
            <tr>
			  <xsl:variable name="fileproperties" select="concat('FileProperties_', @uid)" />
              <xsl:variable name="fileproperties_id" select="concat($fileproperties, '_h1')" />
              <font class="table_caption">
			  
                <!-- <a id="DynMessLink" name="FileProperties" href="FileProperties_h1">File Properties</a> -->
                <a>
                  <xsl:attribute name="id">DynMessLink</xsl:attribute>
                  <xsl:attribute name="name"><xsl:value-of select="$fileproperties" /></xsl:attribute>
                 <xsl:attribute name="href"><xsl:value-of select="$fileproperties_id" /></xsl:attribute>
                 <xsl:value-of select="PathName" />
                </a>
				 
              </font>
              <br />
              <br />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -