Style sheets: fix docbook-xsl bug in autoidx

The template named generate-basic-index in
{docbook-xsl}/xhtml/autoidx.xsl has a bug that generates a div element
with a wrong xmlns:xlink attribute. See
https://github.com/docbook/xslt10-stylesheets/issues/239.
Rather than fixing docbook-xsl, which would work only in LFS (but we
want to be able to render on other distros), copy the faulty template
to our customization files (lfs-index.xsl), so that this one is used.
We can also simplify it a lot since we don't need all the cases
covered in general docbook-xsl.
Also remove the sed for this bug in the Makefile.
This commit is contained in:
Pierre Labastie 2024-01-17 19:43:51 +01:00
parent d4919db6ce
commit c40c526d34
2 changed files with 51 additions and 45 deletions

View File

@ -47,7 +47,6 @@ else
endif
blfs: html wget-list
help:
@ -108,7 +107,6 @@ $(BASEDIR)/index.html: $(RENDERTMP)/$(BLFSHTML) version
--stringparam base.dir $(BASEDIR)/ \
stylesheets/blfs-chunked.xsl \
$(RENDERTMP)/$(BLFSHTML)
$(Q)sed -i 's/xmlns:xlink.*xlink"//' $(BASEDIR)/longindex.html
@echo "Copying CSS code and images..."
$(Q)if [ ! -e $(BASEDIR)/stylesheets ]; then \
@ -142,7 +140,6 @@ $(BASEDIR)/$(NOCHUNKS_OUTPUT): $(RENDERTMP)/$(BLFSHTML) version
--output $(BASEDIR)/$(NOCHUNKS_OUTPUT) \
stylesheets/blfs-nochunks.xsl \
$(RENDERTMP)/$(BLFSHTML)
$(Q)sed -i 's/xmlns:xlink.*xlink"//' $(BASEDIR)/$(NOCHUNKS_OUTPUT)
@echo "Running Tidy and obfuscate.sh on non-chunked XHTML..."
$(Q)tidy -config tidy.conf $(BASEDIR)/$(NOCHUNKS_OUTPUT) || true

View File

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xsl:stylesheet [
<!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;'">
@ -15,45 +15,53 @@
xmlns="http://www.w3.org/1999/xhtml"
version="1.0">
<!-- This stylesheet controls how the Index is generated.
Due how they are created, the original XHTML stylesheets don't make
use of the entities from {docbook-xsl}/common/entities.ent.
We add the relevant ones in the DOCTYPE to have more readable templates.
Also, we remove support for @role and @type based Index due that it is
broken when used with @zone based cross-references. -->
<!-- Change the file name of the index page from the default ix01.html.
There is no upstream template with match="index", only a global
match="*", thus the following is enough to override the index
filename. -->
<!-- The file name of the Index page.
There is no upstream template with match="index", only a global
match="*", thus the next template is enought to force the Index
filename. -->
<xsl:template match="index" mode="recursive-chunk-filename">
<xsl:text>longindex.html</xsl:text>
</xsl:template>
<!-- The Index title in the longindex.html page:
Removed a lot of code not useful for us.
Forced h1 title size.
The original template is in {docbook-xsl}/xhtml/titlepage.templates.xsl
Use the original template now (as in LFS)
<xsl:template name="index.titlepage">
<h1 class="index">
<xsl:call-template name="gentext">
<xsl:with-param name="key" select="$index-title"/>
</xsl:call-template>
</h1>
</xsl:template>-->
<!-- The original template in {docbook-xsl}/xhtml/autoidx.xsl has
a bug (https://github.com/docbook/xslt10-stylesheets/issues/239)
that generates a <div> with a wrong xmlns:xlink attribute. So copy it
here where the bug does not occur, (and simplify it a lot).-->
<xsl:template name="generate-basic-index">
<xsl:param name="scope" select="NOTANODE"/>
<xsl:variable name="terms" select="//indexterm
[count(.|key('letter',
translate(substring(&primary;, 1, 1),
&lowercase;,
&uppercase;
)
) [&scope;][1]) = 1]"/>
<div class="index">
<xsl:apply-templates select="$terms" mode="index-div-basic">
<xsl:with-param name="position" select="position()"/>
<xsl:with-param name="scope" select="$scope"/>
<xsl:sort select="translate(&primary;, &lowercase;, &uppercase;)"/>
</xsl:apply-templates>
</div>
</xsl:template>
<!-- Divisions:
Override the default division titles, translating them from the default
'A', 'B', etc. to 'Packages', 'Programs', etc.
Add gentext support to division titles.
Use h2 for division titles instead of the default h3.
Change main listings from dl to ul format.
The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<!--Divisions:
Translate alphabetical divisions titles to by-type titles.
Added gentext support to divisions titles.
Using h2 for divisions titles.
Changed output from dl format to ul format. -->
<!-- The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<xsl:template match="indexterm" mode="index-div-basic">
<xsl:param name="scope" select="."/>
<xsl:variable name="key" select="translate(substring(&primary;, 1, 1),&lowercase;,&uppercase;)"/>
<xsl:variable name="divtitle" select="translate($key, &lowercase;, &uppercase;)"/>
<!-- Make sure that we don't generate a div if there are no terms in scope -->
<!-- Make sure that we don't generate a div if there are no terms in scope
-->
<xsl:if test="key('letter', $key)[&scope;] [count(.|key('primary', &primary;)[&scope;][1]) = 1]">
<xsl:if test="contains(concat(&lowercase;, &uppercase;), $key)">
<h2>
@ -135,12 +143,12 @@
</xsl:if>
</xsl:template>
<!-- Primary items:
Changed the output format from dl to ul.
Placed the term and separator into strong tags.
Placed the target links into a div.
Removed code for unused see and sealso childs. -->
<!-- The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<!-- Primary items:
Place term and separator into strong tags.
Place target links into a div.
Change main listings from dl to ul format.
Removed code for unused see and sealso children.
The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<xsl:template match="indexterm" mode="index-primary">
<xsl:param name="scope" select="."/>
<xsl:variable name="key" select="normalize-space(concat(primary/@sortas, &quot; &quot;, primary))"/>
@ -152,6 +160,7 @@
</strong>
<span class='indexref'>
<xsl:for-each select="$refs[generate-id() = generate-id(key('primary-section',concat($key, &sep;, &section.id;))[&scope;][1])]">
<!--<xsl:for-each select="$refs[not(see) and not(secondary)][count(ancestor::node()|$scope) = count(ancestor::node()) = 0]">-->
<xsl:apply-templates select="." mode="reference">
<xsl:with-param name="scope" select="$scope"/>
</xsl:apply-templates>
@ -168,12 +177,12 @@
</li>
</xsl:template>
<!-- Secondary items:
Changed the output format from dl to ul.
Placed the term and separator into strong tags.
Placed the target links into a div.
Removed code for unused tertiary, see, and sealso childs. -->
<!-- The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<!-- Secondary items:
Place term and separator into strong tags.
Place target links into a div.
Change main listings from dl to ul format.
Removed code for unused tertiary, see and sealso children.
The original template is in {docbook-xsl}/xhtml/autoidx.xsl -->
<xsl:template match="indexterm" mode="index-secondary">
<xsl:param name="scope" select="."/>
<xsl:variable name="key" select="concat(normalize-space(concat(primary/@sortas, &quot; &quot;, primary)), &quot; &quot;, normalize-space(concat(secondary/@sortas, &quot; &quot;, secondary)))"/>