home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / komunikace / netscape / nsb-install-8-1-2.exe / chrome / RSSPrettyPrint1.xsl < prev    next >
Extensible Markup Language  |  2006-09-12  |  18KB  |  526 lines

  1. <?xml version="1.0"?>
  2.  
  3. <xsl:stylesheet version="1.0"
  4.                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  5.                 xmlns:atom="http://purl.org/atom/ns#"
  6.                 xmlns:atom05="http://www.w3.org/2005/Atom"
  7.                 xmlns:rss10="http://purl.org/rss/1.0/"
  8.                 xmlns:rss09="http://my.netscape.com/rdf/simple/0.9/"
  9.                 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  10.                 xmlns:content="http://purl.org/rss/1.0/modules/content/"
  11.                 xmlns:dc="http://purl.org/dc/elements/1.1/"
  12.                 xmlns:nsfeeds="http://www.netscape.com/netscape/feeds/xml"
  13.                 xmlns="http://purl.org/atom/ns#">
  14.  
  15.   <xsl:output method="xml"/>
  16.  
  17.   <!-- The purpose of this stylesheet is to transform various RSS feed formats
  18.        into ATOM('05). -->
  19.  
  20.  
  21.   <!-- Main body of stylesheet -->
  22.   <xsl:template match="/">
  23.       <feed>
  24.           <xsl:choose>
  25.               <xsl:when test="boolean(atom:feed/atom:head)">
  26.                 <xsl:copy-of select="atom:feed/atom:head"/>
  27.             </xsl:when>
  28.             <xsl:otherwise>
  29.                    <head>
  30.                       <title>
  31.                           <xsl:choose>
  32.                               <xsl:when test="boolean(rss/channel/title)">
  33.                                   <xsl:value-of select="rss/channel/title"/>
  34.                               </xsl:when>
  35.                               <xsl:when test="boolean(atom:feed/atom:title)">
  36.                                   <xsl:value-of select="atom:feed/atom:title"/>
  37.                               </xsl:when>
  38.                               <xsl:when test="boolean(atom05:feed/atom05:title)">
  39.                                   <xsl:value-of select="atom05:feed/atom05:title"/>
  40.                               </xsl:when>
  41.                               <xsl:when test="boolean(rdf:RDF/rss10:channel/rss10:title)">
  42.                                   <xsl:value-of select="rdf:RDF/rss10:channel/rss10:title"/>
  43.                               </xsl:when>
  44.                               <xsl:when test="boolean(rss10:title)">
  45.                                   <xsl:value-of select="rss10:title"/>
  46.                               </xsl:when>
  47.                               <xsl:when test="boolean(rdf:RDF/rss09:channel/rss09:title)">
  48.                                   <xsl:value-of select="rdf:RDF/rss09:channel/rss09:title"/>
  49.                               </xsl:when>
  50.                               <xsl:when test="boolean(rdf:RDF/rss09:channel/rss09:description)">
  51.                                   <xsl:value-of select="rdf:RDF/rss09:channel/rss09:description"/>
  52.                               </xsl:when>
  53.                           </xsl:choose>
  54.                       </title>
  55.                       <updated>Unknown</updated>
  56.                       <link rel="alternate">
  57.                           <xsl:attribute name="href">
  58.                               about:blank
  59.                           </xsl:attribute>
  60.                       </link>
  61.                   </head>
  62.                </xsl:otherwise>
  63.           </xsl:choose>
  64.             <xsl:call-template name="rssitemlist"/>
  65.             <xsl:call-template name="atomitemlist"/>
  66.             <xsl:call-template name="atom05itemlist"/>
  67.             <xsl:call-template name="rss10itemlist"/>
  68.             <xsl:call-template name="rss09itemlist"/>
  69.       </feed>
  70.     </xsl:template>
  71.  
  72.     <!-- this prints out all of the rss 2.0 articles -->
  73.     <xsl:template name="rssitemlist">
  74.         <xsl:for-each select="rss/channel/item">
  75.             <entry>
  76.                 <head>
  77.                     <title><xsl:value-of select='../title'/></title>
  78.                     <xsl:choose>
  79.                       <xsl:when test="boolean(../link)">
  80.                             <link rel="alternate">
  81.                                 <xsl:attribute name="href"><xsl:value-of select="../link"/></xsl:attribute>
  82.                             </link>
  83.                       </xsl:when>
  84.                     </xsl:choose>
  85.                     <author>Unknown</author>
  86.                 </head>
  87.                 <title><xsl:value-of select="title"/></title>
  88.               <updated>
  89.                   <xsl:choose>
  90.                         <xsl:when test="boolean(pubDate)">
  91.                           <xsl:value-of select="pubDate"/>
  92.                       </xsl:when>
  93.                         <xsl:when test="boolean(dc:date)">
  94.                           <xsl:value-of select="dc:date"/>
  95.                       </xsl:when>
  96.                   </xsl:choose>
  97.               </updated>
  98.               <nicedate>
  99.                   <xsl:choose>
  100.                         <xsl:when test="boolean(pubDate)">
  101.                           <xsl:value-of select="pubDate"/>
  102.                       </xsl:when>
  103.                         <xsl:when test="boolean(dc:date)">
  104.                           <xsl:value-of select="dc:date"/>
  105.                       </xsl:when>
  106.                   </xsl:choose>
  107.               </nicedate>
  108.               <summary><xsl:value-of select="description"/></summary>
  109.               <xsl:if test="boolean(link)">
  110.                   <link rel="alternate">
  111.                       <xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
  112.                   </link>
  113.                 </xsl:if>
  114.             </entry>
  115.         </xsl:for-each>
  116.     </xsl:template>
  117.  
  118.  
  119.     <!-- this prints out all of the rss 0.9 articles -->
  120.     <xsl:template name="rss09itemlist">
  121.         <xsl:for-each select="rdf:RDF/rss09:item">
  122.             <entry>
  123.                 <head>
  124.                     <title>
  125.                         <xsl:choose>
  126.                             <xsl:when test="boolean(../rss09:channel/rss09:title)">
  127.                                 <xsl:value-of select='../rss09:channel/rss09:title'/>
  128.                             </xsl:when>
  129.                             <xsl:when test="boolean(../rss09:channel/rss09:description)">
  130.                                 <xsl:value-of select='../rss09:channel/rss09:description'/>
  131.                             </xsl:when>
  132.                         </xsl:choose>
  133.                     </title>
  134.                     <link rel="alternate">
  135.                         <xsl:choose>
  136.                             <xsl:when test="boolean(../rss09:channel/rss09:link)">
  137.                                 <xsl:attribute name="href">
  138.                                     <xsl:value-of select="../rss09:channel/rss09:link"/>
  139.                                 </xsl:attribute>
  140.                             </xsl:when>
  141.                             <xsl:otherwise>
  142.                                 <xsl:attribute name="href">about:blank</xsl:attribute>
  143.                             </xsl:otherwise>
  144.                         </xsl:choose>
  145.                     </link>
  146.                     <author>Unknown</author>
  147.                 </head>
  148.                 <title>
  149.                     <xsl:choose>
  150.                         <xsl:when test="boolean(rss09:title)">
  151.                             <xsl:value-of select='rss09:title'/>
  152.                         </xsl:when>
  153.                         <xsl:when test="boolean(rss09:description)">
  154.                             <xsl:value-of select='rss09:description'/>
  155.                         </xsl:when>
  156.                     </xsl:choose>
  157.                 </title>
  158.               <updated>
  159.                   <xsl:choose>
  160.                         <xsl:when test="boolean(rss09:pubDate)">
  161.                           <xsl:value-of select="rss09:pubDate"/>
  162.                       </xsl:when>
  163.                         <xsl:when test="boolean(dc:date)">
  164.                           <xsl:value-of select="dc:date"/>
  165.                       </xsl:when>
  166.                   </xsl:choose>
  167.               </updated>
  168.               <nicedate>
  169.                   <xsl:choose>
  170.                         <xsl:when test="boolean(rss09:pubDate)">
  171.                           <xsl:value-of select="rss09:pubDate"/>
  172.                       </xsl:when>
  173.                         <xsl:when test="boolean(dc:date)">
  174.                           <xsl:value-of select="dc:date"/>
  175.                       </xsl:when>
  176.                   </xsl:choose>
  177.               </nicedate>
  178.               <summary>
  179.                   <xsl:value-of select="rss09:description"/>
  180.               </summary>
  181.               <link rel="alternate">
  182.                   <xsl:attribute name="href"><xsl:value-of select="rss09:link"/></xsl:attribute>
  183.               </link>
  184.             </entry>
  185.         </xsl:for-each>
  186.     </xsl:template>
  187.  
  188.     <!-- this prints out all of the atom articles -->
  189.     <xsl:template name="atomitemlist">
  190.         <xsl:for-each select="atom:feed/atom:entry">
  191.             <entry>
  192.                 <xsl:choose>
  193.                     <xsl:when test="boolean(atom:head)">
  194.                             <xsl:copy-of select="atom:head"/>
  195.                     </xsl:when>
  196.                     <xsl:when test="boolean(../atom:head)">
  197.                         <xsl:copy-of select="../atom:head"/>
  198.                     </xsl:when>
  199.                     <xsl:otherwise>
  200.                         <head>
  201.                             <title><xsl:value-of select="../atom:title"/></title>
  202.                             <updated>
  203.                                 <xsl:choose>
  204.                                     <xsl:when test="boolean(../atom:updated)">
  205.                                         <xsl:value-of select="../atom:updated"/>
  206.                                     </xsl:when>
  207.                                     <xsl:when test="boolean(../atom:modified)">
  208.                                         <xsl:value-of select="../atom:modified"/>
  209.                                     </xsl:when>
  210.                                     <xsl:when test="boolean(../atom:issued)">
  211.                                         <xsl:value-of select="../atom:issued"/>
  212.                                     </xsl:when>
  213.                                 </xsl:choose>
  214.                             </updated>
  215.                             <xsl:copy-of select="../atom:link"/>
  216.                             <xsl:choose>
  217.                                 <xsl:when test="boolean(../atom:author)">
  218.                                     <xsl:copy-of select="../atom:author"/>
  219.                                 </xsl:when>
  220.                                 <xsl:when test="boolean(atom:author)">
  221.                                     <xsl:copy-of select="atom:author"/>
  222.                                 </xsl:when>
  223.                             </xsl:choose>
  224.                         </head>
  225.                     </xsl:otherwise>
  226.                 </xsl:choose>
  227.                 <id><xsl:value-of select="atom:id"/></id>
  228.                 <summary>
  229.                     <xsl:choose>
  230.                         <xsl:when test="boolean(atom:summary)">
  231.                             <xsl:if test="boolean(atom:summary/@type)">
  232.                                 <xsl:attribute name="type">
  233.                                     <xsl:value-of select="atom:summary/@type"/>
  234.                                 </xsl:attribute>
  235.                             </xsl:if>
  236.                             <xsl:if test="boolean(atom:summary/@mode)">
  237.                                 <xsl:attribute name="mode">
  238.                                     <xsl:value-of select="atom:summary/@mode"/>
  239.                                 </xsl:attribute>
  240.                             </xsl:if>
  241.                             <xsl:value-of select="atom:summary"/>
  242.                         </xsl:when>
  243.                         <xsl:when test="boolean(atom:description)">
  244.                             <xsl:if test="boolean(atom:description/@type)">
  245.                                 <xsl:attribute name="type">
  246.                                     <xsl:value-of select="atom:description/@type"/>
  247.                                 </xsl:attribute>
  248.                             </xsl:if>
  249.                             <xsl:if test="boolean(atom:description/@mode)">
  250.                                 <xsl:attribute name="mode">
  251.                                     <xsl:value-of select="atom:description/@mode"/>
  252.                                 </xsl:attribute>
  253.                             </xsl:if>
  254.                             <xsl:value-of select="atom:description"/>
  255.                         </xsl:when>
  256.                         <xsl:when test="boolean(atom:content)">
  257.                             <xsl:if test="boolean(atom:content/@type)">
  258.                                 <xsl:attribute name="type">
  259.                                     <xsl:value-of select="atom:content/@type"/>
  260.                                 </xsl:attribute>
  261.                             </xsl:if>
  262.                             <xsl:if test="boolean(atom:content/@mode)">
  263.                                 <xsl:attribute name="mode">
  264.                                     <xsl:value-of select="atom:content/@mode"/>
  265.                                 </xsl:attribute>
  266.                             </xsl:if>
  267.                             <xsl:value-of select="atom:content"/>
  268.                         </xsl:when>
  269.                     </xsl:choose>
  270.                 </summary>
  271.                 <title><xsl:value-of select="atom:title"/></title>
  272.                 <updated>
  273.                     <xsl:choose>
  274.                         <xsl:when test="boolean(atom:updated)">
  275.                             <xsl:value-of select="atom:updated"/>
  276.                         </xsl:when>
  277.                         <xsl:when test="boolean(atom:modified)">
  278.                             <xsl:value-of select="atom:modified"/>
  279.                         </xsl:when>
  280.                         <xsl:when test="boolean(atom:issued)">
  281.                             <xsl:value-of select="atom:issued"/>
  282.                         </xsl:when>
  283.                         <xsl:when test="boolean(../atom:updated)">
  284.                             <xsl:value-of select="../atom:updated"/>
  285.                         </xsl:when>
  286.                         <xsl:when test="boolean(../atom:modified)">
  287.                             <xsl:value-of select="../atom:modified"/>
  288.                         </xsl:when>
  289.                         <xsl:when test="boolean(../atom:issued)">
  290.                             <xsl:value-of select="../atom:issued"/>
  291.                         </xsl:when>
  292.                     </xsl:choose>
  293.                 </updated>
  294.                 <nicedate>
  295.                     <xsl:choose>
  296.                         <xsl:when test="boolean(atom:updated)">
  297.                             <xsl:value-of select="atom:updated"/>
  298.                         </xsl:when>
  299.                         <xsl:when test="boolean(atom:modified)">
  300.                             <xsl:value-of select="atom:modified"/>
  301.                         </xsl:when>
  302.                         <xsl:when test="boolean(atom:issued)">
  303.                             <xsl:value-of select="atom:issued"/>
  304.                         </xsl:when>
  305.                         <xsl:when test="boolean(../atom:updated)">
  306.                             <xsl:value-of select="../atom:updated"/>
  307.                         </xsl:when>
  308.                         <xsl:when test="boolean(../atom:modified)">
  309.                             <xsl:value-of select="../atom:modified"/>
  310.                         </xsl:when>
  311.                         <xsl:when test="boolean(../atom:issued)">
  312.                             <xsl:value-of select="../atom:issued"/>
  313.                         </xsl:when>
  314.                     </xsl:choose>
  315.                 </nicedate>
  316.                 <link rel="alternate">
  317.                     <xsl:attribute name="href">
  318.                         <xsl:choose>
  319.                             <xsl:when test="boolean(atom:link)">
  320.                                 <xsl:value-of select="atom:link/@href"/>
  321.                             </xsl:when>
  322.                             <xsl:when test="boolean(atom:head/atom:link)">
  323.                                 <xsl:value-of select="atom:head/atom:link/@href"/>
  324.                             </xsl:when>
  325.                             <xsl:when test="boolean(../atom:link)">
  326.                                 <xsl:value-of select="../atom:link/@href"/>
  327.                             </xsl:when>
  328.                             <xsl:when test="boolean(../atom:head/atom:link)">
  329.                                 <xsl:value-of select="../atom:head/atom:link/@href"/>
  330.                             </xsl:when>
  331.                         </xsl:choose>
  332.                     </xsl:attribute>
  333.                 </link>
  334.             </entry>
  335.         </xsl:for-each>
  336.     </xsl:template>
  337.  
  338.     <!-- this prints out all of the atom05 articles -->
  339.     <xsl:template name="atom05itemlist">
  340.         <xsl:for-each select="atom05:feed/atom05:entry">
  341.             <entry>
  342.                 <xsl:choose>
  343.                     <xsl:when test="boolean(atom05:head)">
  344.                             <xsl:copy-of select="atom05:head"/>
  345.                     </xsl:when>
  346.                     <xsl:when test="boolean(../atom05:head)">
  347.                         <xsl:copy-of select="../atom05:head"/>
  348.                     </xsl:when>
  349.                     <xsl:otherwise>
  350.                         <head>
  351.                             <title><xsl:value-of select="../atom05:title"/></title>
  352.                             <updated>
  353.                                 <xsl:choose>
  354.                                     <xsl:when test="boolean(../atom05:updated)">
  355.                                         <xsl:value-of select="../atom05:updated"/>
  356.                                     </xsl:when>
  357.                                     <xsl:when test="boolean(../atom05:modified)">
  358.                                         <xsl:value-of select="../atom05:modified"/>
  359.                                     </xsl:when>
  360.                                     <xsl:when test="boolean(../atom05:issued)">
  361.                                         <xsl:value-of select="../atom05:issued"/>
  362.                                     </xsl:when>
  363.                                 </xsl:choose>
  364.                             </updated>
  365.                             <xsl:copy-of select="../atom05:link"/>
  366.                             <xsl:choose>
  367.                                 <xsl:when test="boolean(../atom05:author)">
  368.                                     <xsl:copy-of select="../atom05:author"/>
  369.                                 </xsl:when>
  370.                                 <xsl:when test="boolean(atom05:author)">
  371.                                     <xsl:copy-of select="atom05:author"/>
  372.                                 </xsl:when>
  373.                             </xsl:choose>
  374.                         </head>
  375.                     </xsl:otherwise>
  376.                 </xsl:choose>
  377.                 <id><xsl:value-of select="atom05:id"/></id>
  378.                 <summary>
  379.                     <xsl:choose>
  380.                         <xsl:when test="boolean(atom05:summary)">
  381.                             <xsl:if test="boolean(atom05:summary/@type)">
  382.                                 <xsl:attribute name="type">
  383.                                     <xsl:value-of select="atom05:summary/@type"/>
  384.                                 </xsl:attribute>
  385.                             </xsl:if>
  386.                             <xsl:if test="boolean(atom05:summary/@mode)">
  387.                                 <xsl:attribute name="mode">
  388.                                     <xsl:value-of select="atom05:summary/@mode"/>
  389.                                 </xsl:attribute>
  390.                             </xsl:if>
  391.                             <xsl:value-of select="atom05:summary"/>
  392.                         </xsl:when>
  393.                         <xsl:when test="boolean(atom05:description)">
  394.                             <xsl:if test="boolean(atom05:description/@type)">
  395.                                 <xsl:attribute name="type">
  396.                                     <xsl:value-of select="atom05:description/@type"/>
  397.                                 </xsl:attribute>
  398.                             </xsl:if>
  399.                             <xsl:if test="boolean(atom05:description/@mode)">
  400.                                 <xsl:attribute name="mode">
  401.                                     <xsl:value-of select="atom05:description/@mode"/>
  402.                                 </xsl:attribute>
  403.                             </xsl:if>
  404.                             <xsl:value-of select="atom05:description"/>
  405.                         </xsl:when>
  406.                         <xsl:when test="boolean(atom05:content)">
  407.                             <xsl:if test="boolean(atom05:content/@type)">
  408.                                 <xsl:attribute name="type">
  409.                                     <xsl:value-of select="atom05:content/@type"/>
  410.                                 </xsl:attribute>
  411.                             </xsl:if>
  412.                             <xsl:if test="boolean(atom05:content/@mode)">
  413.                                 <xsl:attribute name="mode">
  414.                                     <xsl:value-of select="atom05:content/@mode"/>
  415.                                 </xsl:attribute>
  416.                             </xsl:if>
  417.                             <xsl:value-of select="atom05:content"/>
  418.                         </xsl:when>
  419.                     </xsl:choose>
  420.                 </summary>
  421.                 <title><xsl:value-of select="atom05:title"/></title>
  422.                 <updated>
  423.                     <xsl:choose>
  424.                         <xsl:when test="boolean(atom05:updated)">
  425.                             <xsl:value-of select="atom05:updated"/>
  426.                         </xsl:when>
  427.                         <xsl:when test="boolean(atom05:modified)">
  428.                             <xsl:value-of select="atom05:modified"/>
  429.                         </xsl:when>
  430.                         <xsl:when test="boolean(atom05:issued)">
  431.                             <xsl:value-of select="atom05:issued"/>
  432.                         </xsl:when>
  433.                         <xsl:when test="boolean(../atom05:updated)">
  434.                             <xsl:value-of select="../atom05:updated"/>
  435.                         </xsl:when>
  436.                         <xsl:when test="boolean(../atom05:modified)">
  437.                             <xsl:value-of select="../atom05:modified"/>
  438.                         </xsl:when>
  439.                         <xsl:when test="boolean(../atom05:issued)">
  440.                             <xsl:value-of select="../atom05:issued"/>
  441.                         </xsl:when>
  442.                     </xsl:choose>
  443.                 </updated>
  444.                 <nicedate>
  445.                     <xsl:choose>
  446.                         <xsl:when test="boolean(atom05:updated)">
  447.                             <xsl:value-of select="atom05:updated"/>
  448.                         </xsl:when>
  449.                         <xsl:when test="boolean(atom05:modified)">
  450.                             <xsl:value-of select="atom05:modified"/>
  451.                         </xsl:when>
  452.                         <xsl:when test="boolean(atom05:issued)">
  453.                             <xsl:value-of select="atom05:issued"/>
  454.                         </xsl:when>
  455.                         <xsl:when test="boolean(../atom05:updated)">
  456.                             <xsl:value-of select="../atom05:updated"/>
  457.                         </xsl:when>
  458.                         <xsl:when test="boolean(../atom05:modified)">
  459.                             <xsl:value-of select="../atom05:modified"/>
  460.                         </xsl:when>
  461.                         <xsl:when test="boolean(../atom05:issued)">
  462.                             <xsl:value-of select="../atom05:issued"/>
  463.                         </xsl:when>
  464.                     </xsl:choose>
  465.                 </nicedate>
  466.                 <link rel="alternate">
  467.                     <xsl:attribute name="href">
  468.                         <xsl:choose>
  469.                             <xsl:when test="boolean(atom05:link)">
  470.                                 <xsl:value-of select="atom05:link/@href"/>
  471.                             </xsl:when>
  472.                             <xsl:when test="boolean(atom05:head/atom05:link)">
  473.                                 <xsl:value-of select="atom05:head/atom05:link/@href"/>
  474.                             </xsl:when>
  475.                             <xsl:when test="boolean(../atom05:link)">
  476.                                 <xsl:value-of select="../atom05:link/@href"/>
  477.                             </xsl:when>
  478.                             <xsl:when test="boolean(../atom05:head/atom05:link)">
  479.                                 <xsl:value-of select="../atom05:head/atom05:link/@href"/>
  480.                             </xsl:when>
  481.                         </xsl:choose>
  482.                     </xsl:attribute>
  483.                 </link>
  484.             </entry>
  485.         </xsl:for-each>
  486.     </xsl:template>
  487.  
  488.     <!-- this prints out all of the rss 1.0 articles -->
  489.   <xsl:template name="rss10itemlist">
  490.       <xsl:for-each select="rdf:RDF/rss10:channel">
  491.           <xsl:call-template name="rss10item"/>
  492.       </xsl:for-each>
  493.   </xsl:template>
  494.  
  495.     <xsl:template name="rss10item">
  496.             <xsl:variable name="title" select="rss10:title"/>
  497.             <xsl:for-each select="../rss10:item">
  498.                 <entry>
  499.                     <head>
  500.                         <title><xsl:value-of select='$title'/></title>
  501.                         <link rel="alternate">about:blank</link>
  502.                         <author>Unknown</author>
  503.                     </head>
  504.                     <title><xsl:value-of select="rss10:title"/></title>
  505.                   <updated><xsl:value-of select="dc:date"/></updated>
  506.                   <nicedate><xsl:value-of select="dc:date"/></nicedate>
  507.                   <summary>
  508.                       <xsl:choose>
  509.                           <xsl:when test="boolean(rss10:description)">
  510.                               <xsl:value-of select="rss10:description"/>
  511.                           </xsl:when>
  512.                           <xsl:when test="boolean(content:encoded)">
  513.                               <xsl:attribute name="type">html</xsl:attribute>
  514.                               <xsl:value-of select="content:encoded"/>
  515.                           </xsl:when>
  516.                       </xsl:choose>
  517.                   </summary>
  518.                   <link rel="alternate">
  519.                       <xsl:attribute name="href"><xsl:value-of select="rss10:link"/></xsl:attribute>
  520.                   </link>
  521.                 </entry>
  522.             </xsl:for-each>
  523.     </xsl:template>
  524.  
  525. </xsl:stylesheet>
  526.