VirtualBox

source: vbox/trunk/doc/manual/dita-refentry-flat-to-single-topic.xsl@ 99497

Last change on this file since 99497 was 99497, checked in by vboxsync, 13 months ago

manual: Split out the topics of converted manpages into separate files and generate ditamap files for each manpage to avoid needing to hardcode anything in UserManual.xml. This means that the topics inside a manpage can be supressed from the toc, but otoh, they get numbered (with 4.x). The per-topic files are named by refentry/refsect1/refsect2 @id and are currently not cleaned up by 'kmk clean'. bugref:10302

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
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'>&lt;!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"&gt;
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'>&lt;!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd"&gt;
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
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use