lfs-index.xsl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?xml version='1.0' encoding='ISO-8859-1'?>
  2. <!DOCTYPE xsl:stylesheet [
  3. <!ENTITY lowercase "'Aa&#192;&#224;&#193;&#225;&#194;&#226;&#195;&#227;&#196;&#228;&#197;&#229;&#256;&#257;&#258;&#259;&#260;&#261;&#461;&#462;&#478;&#479;&#480;&#481;&#506;&#507;&#512;&#513;&#514;&#515;&#550;&#551;&#7680;&#7681;&#7834;&#7840;&#7841;&#7842;&#7843;&#7844;&#7845;&#7846;&#7847;&#7848;&#7849;&#7850;&#7851;&#7852;&#7853;&#7854;&#7855;&#7856;&#7857;&#7858;&#7859;&#7860;&#7861;&#7862;&#7863;Bb&#384;&#385;&#595;&#386;&#387;&#7682;&#7683;&#7684;&#7685;&#7686;&#7687;Cc&#199;&#231;&#262;&#263;&#264;&#265;&#266;&#267;&#268;&#269;&#391;&#392;&#597;&#7688;&#7689;Dd&#270;&#271;&#272;&#273;&#394;&#599;&#395;&#396;&#453;&#498;&#545;&#598;&#7690;&#7691;&#7692;&#7693;&#7694;&#7695;&#7696;&#7697;&#7698;&#7699;Ee&#200;&#232;&#201;&#233;&#202;&#234;&#203;&#235;&#274;&#275;&#276;&#277;&#278;&#279;&#280;&#281;&#282;&#283;&#516;&#517;&#518;&#519;&#552;&#553;&#7700;&#7701;&#7702;&#7703;&#7704;&#7705;&#7706;&#7707;&#7708;&#7709;&#7864;&#7865;&#7866;&#7867;&#7868;&#7869;&#7870;&#7871;&#7872;&#7873;&#7874;&#7875;&#7876;&#7877;&#7878;&#7879;Ff&#401;&#402;&#7710;&#7711;Gg&#284;&#285;&#286;&#287;&#288;&#289;&#290;&#291;&#403;&#608;&#484;&#485;&#486;&#487;&#500;&#501;&#7712;&#7713;Hh&#292;&#293;&#294;&#295;&#542;&#543;&#614;&#7714;&#7715;&#7716;&#7717;&#7718;&#7719;&#7720;&#7721;&#7722;&#7723;&#7830;Ii&#204;&#236;&#205;&#237;&#206;&#238;&#207;&#239;&#296;&#297;&#298;&#299;&#300;&#301;&#302;&#303;&#304;&#407;&#616;&#463;&#464;&#520;&#521;&#522;&#523;&#7724;&#7725;&#7726;&#7727;&#7880;&#7881;&#7882;&#7883;Jj&#308;&#309;&#496;&#669;Kk&#310;&#311;&#408;&#409;&#488;&#489;&#7728;&#7729;&#7730;&#7731;&#7732;&#7733;Ll&#313;&#314;&#315;&#316;&#317;&#318;&#319;&#320;&#321;&#322;&#410;&#456;&#564;&#619;&#620;&#621;&#7734;&#7735;&#7736;&#7737;&#7738;&#7739;&#7740;&#7741;Mm&#625;&#7742;&#7743;&#7744;&#7745;&#7746;&#7747;Nn&#209;&#241;&#323;&#324;&#325;&#326;&#327;&#328;&#413;&#626;&#414;&#544;&#459;&#504;&#505;&#565;&#627;&#7748;&#7749;&#7750;&#7751;&#7752;&#7753;&#7754;&#7755;Oo&#210;&#242;&#211;&#243;&#212;&#244;&#213;&#245;&#214;&#246;&#216;&#248;&#332;&#333;&#334;&#335;&#336;&#337;&#415;&#416;&#417;&#465;&#466;&#490;&#491;&#492;&#493;&#510;&#511;&#524;&#525;&#526;&#527;&#554;&#555;&#556;&#557;&#558;&#559;&#560;&#561;&#7756;&#7757;&#7758;&#7759;&#7760;&#7761;&#7762;&#7763;&#7884;&#7885;&#7886;&#7887;&#7888;&#7889;&#7890;&#7891;&#7892;&#7893;&#7894;&#7895;&#7896;&#7897;&#7898;&#7899;&#7900;&#7901;&#7902;&#7903;&#7904;&#7905;&#7906;&#7907;Pp&#420;&#421;&#7764;&#7765;&#7766;&#7767;Qq&#672;Rr&#340;&#341;&#342;&#343;&#344;&#345;&#528;&#529;&#530;&#531;&#636;&#637;&#638;&#7768;&#7769;&#7770;&#7771;&#7772;&#7773;&#7774;&#7775;Ss&#346;&#347;&#348;&#349;&#350;&#351;&#352;&#353;&#536;&#537;&#642;&#7776;&#7777;&#7778;&#7779;&#7780;&#7781;&#7782;&#7783;&#7784;&#7785;Tt&#354;&#355;&#356;&#357;&#358;&#359;&#427;&#428;&#429;&#430;&#648;&#538;&#539;&#566;&#7786;&#7787;&#7788;&#7789;&#7790;&#7791;&#7792;&#7793;&#7831;Uu&#217;&#249;&#218;&#250;&#219;&#251;&#220;&#252;&#360;&#361;&#362;&#363;&#364;&#365;&#366;&#367;&#368;&#369;&#370;&#371;&#431;&#432;&#467;&#468;&#469;&#470;&#471;&#472;&#473;&#474;&#475;&#476;&#532;&#533;&#534;&#535;&#7794;&#7795;&#7796;&#7797;&#7798;&#7799;&#7800;&#7801;&#7802;&#7803;&#7908;&#7909;&#7910;&#7911;&#7912;&#7913;&#7914;&#7915;&#7916;&#7917;&#7918;&#7919;&#7920;&#7921;Vv&#434;&#651;&#7804;&#7805;&#7806;&#7807;Ww&#372;&#373;&#7808;&#7809;&#7810;&#7811;&#7812;&#7813;&#7814;&#7815;&#7816;&#7817;&#7832;Xx&#7818;&#7819;&#7820;&#7821;Yy&#221;&#253;&#255;&#376;&#374;&#375;&#435;&#436;&#562;&#563;&#7822;&#7823;&#7833;&#7922;&#7923;&#7924;&#7925;&#7926;&#7927;&#7928;&#7929;Zz&#377;&#378;&#379;&#380;&#381;&#382;&#437;&#438;&#548;&#549;&#656;&#657;&#7824;&#7825;&#7826;&#7827;&#7828;&#7829;&#7829;'">
  4. <!ENTITY uppercase "'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPQQQRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVWWWWWWWWWWWWWWWXXXXXXYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZ'">
  5. <!ENTITY primary 'normalize-space(concat(primary/@sortas, primary[not(@sortas) or @sortas = ""]))'>
  6. <!ENTITY scope "count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))">
  7. ]>
  8. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  9. xmlns="http://www.w3.org/1999/xhtml"
  10. version="1.0">
  11. <!-- This stylesheet controls how the Index is generated -->
  12. <!-- Should the Index be generated? 1 = yes, 0 = no -->
  13. <xsl:param name="generate.index" select="1"></xsl:param>
  14. <!-- The indexing method used. Only 'basic' is supported by xsltproc -->
  15. <xsl:param name="index.method" select="'basic'"></xsl:param>
  16. <!-- The file name of the Index page.
  17. There is no upstream template with match="index", only a global
  18. match="*", thus the next template is enought to force the Index
  19. filename. -->
  20. <xsl:template match="index" mode="recursive-chunk-filename">
  21. <xsl:text>longindex.html</xsl:text>
  22. </xsl:template>
  23. <!--The Index title. We create this param to can have gettext support in
  24. both the Index page title and links that point to the Index page.
  25. It also allow us to change the title, if wanted.-->
  26. <xsl:param name="index-title">Index</xsl:param>
  27. <!-- The Index title in links that points to it. -->
  28. <!-- The original template is in {docbook-xsl}/common/titles.xsl -->
  29. <xsl:template match="index" mode="title.markup">
  30. <xsl:call-template name="gentext">
  31. <xsl:with-param name="key" select="$index-title"/>
  32. </xsl:call-template>
  33. </xsl:template>
  34. <!-- The Index title in the longindex.html page:
  35. Removed a lot of code not useful for us.
  36. Forced h1 title size. -->
  37. <!-- The original template is in {docbook-xsl}/xhtml/titlepage.templates.xsl -->
  38. <xsl:template name="index.titlepage">
  39. <div class="titlepage">
  40. <h1 class="index">
  41. <xsl:call-template name="gentext">
  42. <xsl:with-param name="key" select="$index-title"/>
  43. </xsl:call-template>
  44. </h1>
  45. </div>
  46. </xsl:template>
  47. <!--Divisions-->
  48. <xsl:template match="indexterm" mode="index-div-basic">
  49. <xsl:param name="scope" select="."/>
  50. <xsl:param name="role" select="''"/>
  51. <xsl:param name="type" select="''"/>
  52. <xsl:variable name="key" select="translate(substring(&primary;, 1, 1),&lowercase;,&uppercase;)"/>
  53. <xsl:variable name="divtitle" select="translate($key, &lowercase;, &uppercase;)"/>
  54. <!-- Make sure that we don't generate a div if there are no terms in scope -->
  55. <xsl:if test="key('letter', $key)[&scope;] [count(.|key('primary', &primary;)[&scope;][1]) = 1]">
  56. <div class="indexdiv">
  57. <xsl:if test="contains(concat(&lowercase;, &uppercase;), $key)">
  58. <h2>
  59. <xsl:choose>
  60. <xsl:when test="$divtitle = 'A'">
  61. <xsl:call-template name="gentext">
  62. <xsl:with-param name="key">Packages</xsl:with-param>
  63. </xsl:call-template>
  64. </xsl:when>
  65. <xsl:when test="$divtitle = 'B'">
  66. <xsl:call-template name="gentext">
  67. <xsl:with-param name="key">Programs</xsl:with-param>
  68. </xsl:call-template>
  69. </xsl:when>
  70. <xsl:when test="$divtitle = 'C'">
  71. <xsl:call-template name="gentext">
  72. <xsl:with-param name="key">Libraries</xsl:with-param>
  73. </xsl:call-template>
  74. </xsl:when>
  75. <xsl:when test="$divtitle = 'D'">
  76. <xsl:call-template name="gentext">
  77. <xsl:with-param name="key">Scripts</xsl:with-param>
  78. </xsl:call-template>
  79. </xsl:when>
  80. <xsl:when test="$divtitle = 'E'">
  81. <xsl:call-template name="gentext">
  82. <xsl:with-param name="key">Others</xsl:with-param>
  83. </xsl:call-template>
  84. </xsl:when>
  85. <xsl:otherwise>
  86. <xsl:value-of select="$divtitle"/>
  87. </xsl:otherwise>
  88. </xsl:choose>
  89. </h2>
  90. </xsl:if>
  91. <ul>
  92. <xsl:apply-templates select="key('letter', $key)[&scope;]
  93. [count(.|key('primary', &primary;)[&scope;][1])=1]" mode="index-primary">
  94. <xsl:with-param name="scope" select="$scope"/>
  95. <xsl:sort select="translate(&primary;, &lowercase;, &uppercase;)"/>
  96. </xsl:apply-templates>
  97. </ul>
  98. </div>
  99. </xsl:if>
  100. </xsl:template>
  101. <!-- Dropping the separator from here-->
  102. <xsl:template match="indexterm" mode="reference">
  103. <xsl:param name="scope" select="."/>
  104. <xsl:call-template name="reference">
  105. <xsl:with-param name="zones" select="normalize-space(@zone)"/>
  106. <xsl:with-param name="scope" select="$scope"/>
  107. </xsl:call-template>
  108. </xsl:template>
  109. <!-- Changing the output tags and re-addind the separator-->
  110. <xsl:template match="indexterm" mode="index-primary">
  111. <xsl:param name="scope" select="."/>
  112. <xsl:param name="role" select="''"/>
  113. <xsl:param name="type" select="''"/>
  114. <xsl:variable name="key" select="&primary;"/>
  115. <xsl:variable name="refs" select="key('primary', $key)[&scope;]"/>
  116. <li>
  117. <strong class="item">
  118. <xsl:value-of select="primary"/>
  119. <xsl:text>: </xsl:text>
  120. </strong>
  121. <xsl:for-each select="$refs[generate-id() = generate-id(key('primary-section',
  122. concat($key, &#34; &#34;, generate-id((ancestor-or-self::book |ancestor-or-self::part
  123. |ancestor-or-self::chapter |ancestor-or-self::appendix |ancestor-or-self::preface
  124. |ancestor-or-self::sect1 |ancestor-or-self::sect2 |ancestor-or-self::sect3
  125. |ancestor-or-self::sect4 |ancestor-or-self::sect5 |ancestor-or-self::index)[last()])))[&scope;][1])]">
  126. <xsl:apply-templates select="." mode="reference">
  127. <xsl:with-param name="scope" select="$scope"/>
  128. </xsl:apply-templates>
  129. </xsl:for-each>
  130. <xsl:if test="$refs/secondary">
  131. <ul>
  132. <xsl:apply-templates select="$refs[secondary and count(.|key('secondary',
  133. concat($key, &#34; &#34;, normalize-space(concat(secondary/@sortas,
  134. secondary[not(@sortas)]))))[&scope;][1]) = 1]" mode="index-secondary">
  135. <xsl:with-param name="scope" select="$scope"/>
  136. <xsl:sort select="translate(normalize-space(concat(secondary/@sortas,
  137. secondary[not(@sortas)])), &lowercase;, &uppercase;)"/>
  138. </xsl:apply-templates>
  139. </ul>
  140. </xsl:if>
  141. </li>
  142. </xsl:template>
  143. <xsl:template match="indexterm" mode="index-secondary">
  144. <xsl:param name="scope" select="."/>
  145. <xsl:param name="role" select="''"/>
  146. <xsl:param name="type" select="''"/>
  147. <xsl:variable name="key" select="concat(&primary;, &#34; &#34;,
  148. normalize-space(concat(secondary/@sortas, secondary[not(@sortas)])))"/>
  149. <xsl:variable name="refs" select="key('secondary', $key)[&scope;]"/>
  150. <li>
  151. <strong class="secitem">
  152. <xsl:value-of select="secondary"/>
  153. <xsl:text>: </xsl:text>
  154. </strong>
  155. <xsl:for-each select="$refs[generate-id() = generate-id(key('secondary-section',
  156. concat($key, &#34; &#34;, generate-id((ancestor-or-self::book |ancestor-or-self::part
  157. |ancestor-or-self::chapter |ancestor-or-self::appendix |ancestor-or-self::preface
  158. |ancestor-or-self::sect1 |ancestor-or-self::sect2 |ancestor-or-self::sect3
  159. |ancestor-or-self::sect4 |ancestor-or-self::sect5 |ancestor-or-self::index)[last()])))[&scope;][1])]">
  160. <xsl:apply-templates select="." mode="reference">
  161. <xsl:with-param name="scope" select="$scope"/>
  162. </xsl:apply-templates>
  163. </xsl:for-each>
  164. </li>
  165. </xsl:template>
  166. <!--Links (This template also fix a bug in the original code)-->
  167. <xsl:template name="reference">
  168. <xsl:param name="scope" select="."/>
  169. <xsl:param name="role" select="''"/>
  170. <xsl:param name="type" select="''"/>
  171. <xsl:param name="zones"/>
  172. <xsl:choose>
  173. <xsl:when test="contains($zones, ' ')">
  174. <xsl:variable name="zone" select="substring-before($zones, ' ')"/>
  175. <xsl:variable name="zone2" select="substring-after($zones, ' ')"/>
  176. <xsl:variable name="target" select="key('sections', $zone)[&scope;]"/>
  177. <xsl:variable name="target2" select="key('sections', $zone2)[&scope;]"/>
  178. <a>
  179. <xsl:attribute name="href">
  180. <xsl:call-template name="href.target.uri">
  181. <xsl:with-param name="object" select="$target[1]"/>
  182. </xsl:call-template>
  183. </xsl:attribute>
  184. <xsl:apply-templates select="$target[1]" mode="index-title-content"/>
  185. </a>
  186. <xsl:text> -- </xsl:text>
  187. <a>
  188. <xsl:attribute name="href">
  189. <xsl:call-template name="href.target.uri">
  190. <xsl:with-param name="object" select="$target2[1]"/>
  191. </xsl:call-template>
  192. </xsl:attribute>
  193. <xsl:call-template name="gentext">
  194. <xsl:with-param name="key">description</xsl:with-param>
  195. </xsl:call-template>
  196. </a>
  197. </xsl:when>
  198. <xsl:otherwise>
  199. <xsl:variable name="zone" select="$zones"/>
  200. <xsl:variable name="target" select="key('sections', $zone)[&scope;]"/>
  201. <a>
  202. <xsl:attribute name="href">
  203. <xsl:call-template name="href.target.uri">
  204. <xsl:with-param name="object" select="$target[1]"/>
  205. </xsl:call-template>
  206. </xsl:attribute>
  207. <xsl:apply-templates select="$target[1]" mode="index-title-content"/>
  208. </a>
  209. </xsl:otherwise>
  210. </xsl:choose>
  211. </xsl:template>
  212. <!-- Dropping unneeded anchors -->
  213. <xsl:template match="indexterm"/>
  214. </xsl:stylesheet>