From b01614a3ef2fd8e9d9e71d906acda8f68e70bbfa Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Thu, 18 Apr 2024 17:41:08 +0200 Subject: [PATCH] javaapi:// referencing --- .../Tdata/Common/Components/exampleSlides.xml | 11 +- ws/Docbook/Preprocess/Xsl/docbook2docbook.xsl | 118 +++++++++++++----- 2 files changed, 97 insertions(+), 32 deletions(-) diff --git a/ws/Docbook/Extensions/Tdata/Common/Components/exampleSlides.xml b/ws/Docbook/Extensions/Tdata/Common/Components/exampleSlides.xml index 68d10c1c2..422dca2c3 100644 --- a/ws/Docbook/Extensions/Tdata/Common/Components/exampleSlides.xml +++ b/ws/Docbook/Extensions/Tdata/Common/Components/exampleSlides.xml @@ -178,8 +178,8 @@ <listitem> <para>Referencing <link - xlink:href="javaapi://java.util.String">List</link> by Java - package syntax</para> + xlink:href="javaapi://java.util.List">List</link> by Java package + syntax</para> </listitem> <listitem> @@ -187,6 +187,13 @@ xlink:href="javaapi://java.lang.String">String</link> reference for <package>java.lang</package> default package</para> </listitem> + + <listitem> + <para><link + xlink:href="javaapi://java.lang.String#join(java.lang.CharSequence,java.lang.Iterable)">String.join</link> + method reference for <package>java.lang</package> default + package</para> + </listitem> </itemizedlist> </figure> diff --git a/ws/Docbook/Preprocess/Xsl/docbook2docbook.xsl b/ws/Docbook/Preprocess/Xsl/docbook2docbook.xsl index 9d39ba91b..09d879e03 100644 --- a/ws/Docbook/Preprocess/Xsl/docbook2docbook.xsl +++ b/ws/Docbook/Preprocess/Xsl/docbook2docbook.xsl @@ -1,11 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook"> + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" + xmlns:db="http://docbook.org/ns/docbook"> <xsl:include href="common.xsl"/> + <xsl:param name="javaApiBaseUrl" + >https://docs.oracle.com/en/java/javase/21/docs/api/java.base</xsl:param> + <xsl:param name="generateIdPrefix">__sdwordm4342cs__</xsl:param> <xsl:param name="nl"> <xsl:text> @@ -13,7 +16,7 @@ </xsl:param> <xsl:output indent="no"/> - <xsl:param name="lastAnswerId" select="document('lastAnswerId.xml',/)/lastAnswer/@id" /> + <xsl:param name="lastAnswerId" select="document('lastAnswerId.xml', /)/lastAnswer/@id"/> <!-- Excluding glossary self references --> <xsl:key name="internRef" match="//*[@linkend and not(ancestor::db:glossary)]" use="@linkend"/> @@ -55,28 +58,76 @@ <xsl:template match="node() | @*"> <xsl:copy> - <xsl:apply-templates select="node()| @*"/> + <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> - <xsl:template match="@db:href"> - <xsl:choose> - <xsl:when test="starts-with(., 'javaapi://')"> - <xsl:variable name="javaClassReference" select="substring-after(., 'javaapi://')"/> - <xsl:text>https://docs.oracle.com/en/java/javase/17/docs/api/java.base/</xsl:text> + <xsl:template match="@xlink:href"> + <xsl:attribute name="xlink:href"> + + <xsl:choose> + <xsl:when test="starts-with(., 'javaapi://')"> + + <xsl:variable name="javaUrl"> + <xsl:value-of select="substring-after(., 'javaapi://')"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="contains($javaUrl, '#')"> + <xsl:call-template name="javaApiClassname2htmlReference"> + <xsl:with-param name="javaApiClassname" select="substring-before($javaUrl, '#')"/> + </xsl:call-template> + <xsl:text>#</xsl:text> + + <xsl:message> + <xsl:value-of select="substring-after($javaUrl, '#')"/> + </xsl:message> + + <xsl:call-template name="javaApiArgs2htmlReference"> + <xsl:with-param name="javaArguments" select="substring-after($javaUrl, '#')"/> + </xsl:call-template> + + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="javaApiClassname2htmlReference"> + <xsl:with-param name="javaApiClassname" select="$javaUrl"/> + </xsl:call-template> + </xsl:otherwise> + + </xsl:choose> + </xsl:when> - <xsl:value-of select="$javaClassReference"/> + <xsl:otherwise> + <xsl:attribute name="xlink:href" select="."/> + </xsl:otherwise> + + </xsl:choose> + </xsl:attribute> + + </xsl:template> + + <xsl:template name="javaApiArgs2htmlReference"> + <xsl:param name="javaArguments"/> + <xsl:value-of select="$javaArguments"/> + </xsl:template> + + <xsl:template name="javaApiClassname2htmlReference"> + <xsl:param name="javaApiClassname"/> + <xsl:value-of select="$javaApiBaseUrl"/> + <xsl:choose> + <xsl:when test="contains($javaApiClassname, '.')"> + <xsl:text>/</xsl:text> + <xsl:value-of select="replace($javaApiClassname, '\.', '/')"/> </xsl:when> <xsl:otherwise> - <text>otherwise</text> - <xsl:value-of select="."/> + <xsl:text>/java/lang/</xsl:text> + <xsl:value-of select="$javaApiClassname"/> </xsl:otherwise> </xsl:choose> - + <xsl:text>.html</xsl:text> </xsl:template> - <xsl:template match="*" mode="hdmIdGenerate"> <xsl:choose> <xsl:when test="@xml:id"> @@ -90,7 +141,7 @@ </xsl:template> <!-- Providing list of exercises --> - <xsl:template match="db:book[not(db:part)]|db:part"> + <xsl:template match="db:book[not(db:part)] | db:part"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> <xsl:if test=".//db:qandaset"> @@ -101,13 +152,13 @@ <caption> <xsl:text>Exercises in </xsl:text> <emphasis> - <xsl:value-of select="ancestor-or-self::db:part/db:title" /> + <xsl:value-of select="ancestor-or-self::db:part/db:title"/> </emphasis> </caption> - <col width="25%" /> - <col width="2%" /> - <col width="45%" /> - <col width="28%" /> + <col width="25%"/> + <col width="2%"/> + <col width="45%"/> + <col width="28%"/> <tr> <th rowspan="2">Chapter</th> <th colspan="3">Exercise</th> @@ -121,7 +172,8 @@ <xsl:for-each-group select=".//db:qandaset" group-by="ancestor::db:chapter/@xml:id"> <xsl:for-each select="current-group()"> <tr> - <xsl:if test="1 = position()"> <!-- Group's key entry only present in first row --> + <xsl:if test="1 = position()"> + <!-- Group's key entry only present in first row --> <td valign="top" rowspan="{count(current-group())}"> <xref linkend="{current-grouping-key()}"/> </td> @@ -132,7 +184,8 @@ <td> <xsl:apply-templates select="." mode="selectOwnOrInheritedTitle"/> </td> - <td/> <!-- empty status of completion --> + <td/> + <!-- empty status of completion --> </tr> </xsl:for-each> @@ -149,7 +202,8 @@ <xsl:template match="db:qandaset" mode="qandaNumber"> <xsl:variable name="parentId" select="ancestor::db:part/@xml:id"/> - <xsl:value-of select="count(preceding::db:qandaset[ancestor::db:part/@xml:id = $parentId]) + 1"/> + <xsl:value-of select="count(preceding::db:qandaset[ancestor::db:part/@xml:id = $parentId]) + 1" + /> </xsl:template> <xsl:template match="db:chapter" mode="genQuandaset"> @@ -157,8 +211,8 @@ <title> <xsl:text>Exercises in </xsl:text> <emphasis> - <xsl:for-each select="db:title" > - <xsl:copy-of select="node()|text()"/> + <xsl:for-each select="db:title"> + <xsl:copy-of select="node() | text()"/> </xsl:for-each> </emphasis> </title> @@ -206,7 +260,8 @@ </xsl:choose> </xsl:template> - <xsl:template match="db:glossary/db:glosslist//db:glossentry[not(key('internRef', @xml:id)) and not(key('internRef', .//*/@xml:id))]"> + <xsl:template + match="db:glossary/db:glosslist//db:glossentry[not(key('internRef', @xml:id)) and not(key('internRef', .//*/@xml:id))]"> <xsl:comment> <xsl:text>Excluding non referenced glossary entry '</xsl:text> <xsl:value-of select="db:glossterm"/> @@ -232,17 +287,18 @@ --> <!-- make annotations --> - <xsl:template match="db:annotation[@role='make']"> + <xsl:template match="db:annotation[@role = 'make']"> <xsl:apply-templates select="*" mode="make"/> </xsl:template> - <xsl:template match="db:para[@role='eclipse']" mode='make'> + <xsl:template match="db:para[@role = 'eclipse']" mode="make"> <itemizedlist> <listitem> <para> <xsl:text>Maven module source code available at </xsl:text> - <filename xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/{.}"> + <filename + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/{.}"> <xsl:value-of select="."/> </filename> <xsl:text>.</xsl:text> @@ -252,7 +308,9 @@ <listitem> <para> <xsl:text>See </xsl:text> - <link xlink:href="https://www.jetbrains.com/help/idea/maven-support.html#maven_import_project_start"> hints regarding import</link> + <link + xlink:href="https://www.jetbrains.com/help/idea/maven-support.html#maven_import_project_start" + > hints regarding import</link> <xsl:text>.</xsl:text> </para> </listitem> -- GitLab