1 | <?xml version="1.0"?>
|
---|
2 | <!--
|
---|
3 | dita-refentry-flat-to-single-topic.xsl:
|
---|
4 | XSLT stylesheet for help converting a flat DITA manual page with nested
|
---|
5 | topic elements into individual topics and a map file for including them
|
---|
6 | in the right order.
|
---|
7 | -->
|
---|
8 | <!--
|
---|
9 | Copyright (C) 2023 Oracle and/or its affiliates.
|
---|
10 |
|
---|
11 | This file is part of VirtualBox base platform packages, as
|
---|
12 | available from https://www.virtualbox.org.
|
---|
13 |
|
---|
14 | This program is free software; you can redistribute it and/or
|
---|
15 | modify it under the terms of the GNU General Public License
|
---|
16 | as published by the Free Software Foundation, in version 3 of the
|
---|
17 | License.
|
---|
18 |
|
---|
19 | This program is distributed in the hope that it will be useful, but
|
---|
20 | WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
22 | General Public License for more details.
|
---|
23 |
|
---|
24 | You should have received a copy of the GNU General Public License
|
---|
25 | along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
26 |
|
---|
27 | SPDX-License-Identifier: GPL-3.0-only
|
---|
28 | -->
|
---|
29 |
|
---|
30 | <xsl:stylesheet
|
---|
31 | version="1.0"
|
---|
32 | xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
---|
33 | >
|
---|
34 |
|
---|
35 | <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
|
---|
36 | <xsl:strip-space elements="*"/>
|
---|
37 |
|
---|
38 | <!-- Script parameters: -->
|
---|
39 | <xsl:param name="g_sMode" select="not-specified"/>
|
---|
40 | <xsl:param name="g_idTopic" select="not-specified"/>
|
---|
41 |
|
---|
42 | <!--
|
---|
43 | Process root element according to g_sMode.
|
---|
44 | -->
|
---|
45 | <xsl:template match="/">
|
---|
46 | <xsl:choose>
|
---|
47 | <!-- map file -->
|
---|
48 | <xsl:when test="$g_sMode = 'map'">
|
---|
49 | <xsl:text disable-output-escaping='yes'><!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
|
---|
50 | </xsl:text>
|
---|
51 | <xsl:element name="map" >
|
---|
52 | <xsl:element name="title">
|
---|
53 | <xsl:value-of select="/topic/title"/>
|
---|
54 | </xsl:element>
|
---|
55 | <xsl:apply-templates mode="map"/>
|
---|
56 | </xsl:element>
|
---|
57 | </xsl:when>
|
---|
58 |
|
---|
59 | <!-- topic extraction -->
|
---|
60 | <xsl:when test="$g_sMode = 'topic'">
|
---|
61 | <xsl:text disable-output-escaping='yes'><!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
|
---|
62 | </xsl:text>
|
---|
63 | <xsl:apply-templates mode="topic" select="//topic[@id = $g_idTopic]"/>
|
---|
64 | </xsl:when>
|
---|
65 |
|
---|
66 |
|
---|
67 | <!-- Bad mode parameter: -->
|
---|
68 | <xsl:otherwise>
|
---|
69 | <xsl:message terminate="yes">Invalid g_sMode value!"</xsl:message>
|
---|
70 | </xsl:otherwise>
|
---|
71 | </xsl:choose>
|
---|
72 | </xsl:template>
|
---|
73 |
|
---|
74 | <!--
|
---|
75 | map: Default operation is to supress all output, except for topic elements
|
---|
76 | which are transformed to topicref.
|
---|
77 | -->
|
---|
78 | <xsl:template match="node()|@*" mode="map">
|
---|
79 | <xsl:apply-templates mode="map"/>
|
---|
80 | </xsl:template>
|
---|
81 |
|
---|
82 | <xsl:template match="topic" mode="map">
|
---|
83 | <xsl:element name="topicref">
|
---|
84 | <xsl:attribute name="href">
|
---|
85 | <xsl:value-of select="concat(@id,'.dita')"/>
|
---|
86 | </xsl:attribute>
|
---|
87 | <xsl:if test="count(./ancestor::*) != 0">
|
---|
88 | <xsl:attribute name="toc">no</xsl:attribute>
|
---|
89 | </xsl:if>
|
---|
90 | <xsl:apply-templates mode="map"/>
|
---|
91 | </xsl:element>
|
---|
92 | </xsl:template>
|
---|
93 |
|
---|
94 | <!--
|
---|
95 | topic: Default action is to copy everything except non-matching topic elements
|
---|
96 | We suppress class, domains and xmlns attributes in a hackish way here,
|
---|
97 | because the xmlns:ditaarch stuff confuses 1.8.5 (making it hang)...
|
---|
98 | -->
|
---|
99 | <xsl:template match="node()" mode="topic">
|
---|
100 | <xsl:copy>
|
---|
101 | <xsl:apply-templates mode="topic" select="@*|node()"/>
|
---|
102 | </xsl:copy>
|
---|
103 | </xsl:template>
|
---|
104 |
|
---|
105 | <xsl:template match="@*" mode="topic">
|
---|
106 | <!-- xsl:message>dbg: @*: name()='<xsl:value-of select="name()"/></xsl:message -->
|
---|
107 | <xsl:if test="name() != 'class' and name() != 'ditaarch:DITAArchVersion' and name() != 'domains' ">
|
---|
108 | <xsl:copy/>
|
---|
109 | </xsl:if>
|
---|
110 | </xsl:template>
|
---|
111 |
|
---|
112 | <xsl:template match="topic" mode="topic">
|
---|
113 | <xsl:if test="@id = $g_idTopic">
|
---|
114 | <xsl:element name="topic">
|
---|
115 | <xsl:apply-templates mode="topic" select="node()|@*"/>
|
---|
116 | </xsl:element>
|
---|
117 | </xsl:if>
|
---|
118 | </xsl:template>
|
---|
119 |
|
---|
120 |
|
---|
121 | </xsl:stylesheet>
|
---|
122 |
|
---|