From 4a220cc1bf79e19e9cb5e94d8a650123a0347bb4 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 19 Mar 2023 11:11:37 -0700
Subject: [PATCH v3 3/4] docs: speed up docs build by special-casing the
 gentext.template

---
 doc/src/sgml/stylesheet-speedup-common.xsl | 79 ++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/doc/src/sgml/stylesheet-speedup-common.xsl b/doc/src/sgml/stylesheet-speedup-common.xsl
index e3fb582a1cc..5266ff587b9 100644
--- a/doc/src/sgml/stylesheet-speedup-common.xsl
+++ b/doc/src/sgml/stylesheet-speedup-common.xsl
@@ -96,5 +96,84 @@
 <!-- Just hardcode the language for the whole document, to make it faster. -->
 
 <xsl:template name="l10n.language">en</xsl:template>
+<xsl:param name='pg.l10n.xml' select="document('file:///usr/share/xml/docbook/stylesheet/docbook-xsl/common/en.xml')[1]"/>
+
+<xsl:template name="gentext.template.recurse">
+  <xsl:param name="context"/>
+  <xsl:param name="name"/>
+  <xsl:param name="origname"/>
+  <xsl:param name="verbose"/>
+
+
+  <xsl:choose>
+    <xsl:when test="contains($name, '/')">
+      <xsl:call-template name="gentext.template.recurse">
+        <xsl:with-param name="context" select="$context"/>
+        <xsl:with-param name="name" select="substring-after($name, '/')"/>
+        <xsl:with-param name="origname" select="$origname"/>
+        <xsl:with-param name="verbose" select="$verbose"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+
+      <!-- FIXME: should find a way to avoid the concat and [1] here -->
+      <xsl:variable name="template.node"
+                    select="key('l10n-template', concat($context, '#', $name))[1]"/>
+
+      <xsl:choose>
+        <xsl:when test="$template.node/@text">
+          <xsl:value-of select="$template.node/@text"/>
+        </xsl:when>
+        <xsl:when test="$verbose = 0">
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:message>
+            <xsl:text>No template for "</xsl:text>
+            <xsl:value-of select="$origname"/>
+            <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
+            <xsl:value-of select="$context"/>
+            <xsl:text>" in the "</xsl:text>
+            <xsl:text>" en localization.</xsl:text>
+          </xsl:message>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="gentext.template">
+  <xsl:param name="context" select="'default'"/>
+  <xsl:param name="name" select="'default'"/>
+  <xsl:param name="origname" select="$name"/>
+  <xsl:param name="lang" select="'en'"/>
+  <xsl:param name="verbose" select="1"/>
+
+  <!-- FIXME: unnecessary recursion for leading -->
+  <xsl:for-each select="$pg.l10n.xml">
+    <xsl:variable name="context.node"
+                  select="key('l10n-context', $context)[1]"/>
+
+    <xsl:if test="count($context.node) = 0
+                  and $verbose != 0">
+      <xsl:message>
+        <xsl:text>No context named "</xsl:text>
+        <xsl:value-of select="$context"/>
+        <xsl:text>" exists in the "</xsl:text>
+        <xsl:value-of select="$lang"/>
+        <xsl:text>" localization.</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:for-each select="$context.node">
+      <xsl:call-template name="gentext.template.recurse">
+        <xsl:with-param name="context" select="$context"/>
+        <xsl:with-param name="name" select="$name"/>
+        <xsl:with-param name="origname" select="$origname"/>
+        <xsl:with-param name="verbose" select="$verbose"/>
+      </xsl:call-template>
+    </xsl:for-each>
+  </xsl:for-each>
+</xsl:template>
 
 </xsl:stylesheet>
-- 
2.38.0

