VirtualBox

source: vbox/trunk/doc/manual/docbook-refentry-to-manual-sect1.xsl@ 67230

Last change on this file since 67230 was 56482, checked in by vboxsync, 9 years ago

Made docbook-refentry-to-manual-sect1.xsl produce valid docbook xml but with a few hints that can be used for nice manpage-like formatting.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1<?xml version="1.0"?>
2<!--
3 docbook-refentry-to-manual-sect1.xsl:
4 XSLT stylesheet for transforming a refentry (manpage)
5 to a sect1 for the user manual.
6
7 Copyright (C) 2006-2015 Oracle Corporation
8
9 This file is part of VirtualBox Open Source Edition (OSE), as
10 available from http://www.virtualbox.org. This file is free software;
11 you can redistribute it and/or modify it under the terms of the GNU
12 General Public License (GPL) as published by the Free Software
13 Foundation, in version 2 as it comes in the "COPYING" file of the
14 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16-->
17
18<xsl:stylesheet
19 version="1.0"
20 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
21 xmlns:str="http://xsltsl.org/string"
22 >
23
24 <xsl:import href="string.xsl"/>
25
26 <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
27 <xsl:strip-space elements="*"/>
28
29
30<!-- - - - - - - - - - - - - - - - - - - - - - -
31 global XSLT variables
32 - - - - - - - - - - - - - - - - - - - - - - -->
33
34
35
36<!-- - - - - - - - - - - - - - - - - - - - - - -
37 base operation is to copy.
38 - - - - - - - - - - - - - - - - - - - - - - -->
39
40<xsl:template match="node()|@*">
41 <xsl:copy>
42 <xsl:apply-templates select="node()|@*"/>
43 </xsl:copy>
44</xsl:template>
45
46
47<!-- - - - - - - - - - - - - - - - - - - - - - -
48
49 - - - - - - - - - - - - - - - - - - - - - - -->
50
51<!-- rename refentry to sect1 -->
52<xsl:template match="refentry">
53 <xsl:element name="sect1">
54 <xsl:attribute name="condition">refentry</xsl:attribute>
55 <xsl:apply-templates select="node()|@*"/>
56 </xsl:element>
57</xsl:template>
58
59<!-- Remove refentryinfo, keeping the title element. -->
60<xsl:template match="refentryinfo">
61 <xsl:if test="./title">
62 <xsl:copy-of select="./title"/>
63 </xsl:if>
64</xsl:template>
65
66<!-- Morph refnamediv into a brief description. -->
67<xsl:template match="refnamediv">
68 <xsl:element name="para">
69 <xsl:call-template name="capitalize">
70 <xsl:with-param name="text" select="normalize-space(./refpurpose)"/>
71 </xsl:call-template>
72 <xsl:text>.</xsl:text>
73 </xsl:element>
74</xsl:template>
75
76<!-- Morph the refsynopsisdiv part into a synopsis section. -->
77<xsl:template match="refsynopsisdiv">
78 <xsl:if test="name(*[1]) != 'cmdsynopsis'"><xsl:message terminate="yes">Expected refsynopsisdiv to start with cmdsynopsis</xsl:message></xsl:if>
79 <xsl:if test="title"><xsl:message terminate="yes">No title element supported in refsynopsisdiv</xsl:message></xsl:if>
80
81 <xsl:element name="sect2">
82 <xsl:attribute name="role">not-in-toc</xsl:attribute>
83 <xsl:attribute name="condition">refsynopsisdiv</xsl:attribute>
84 <xsl:element name="title">
85 <xsl:text>Synopsis</xsl:text>
86 </xsl:element>
87 <xsl:apply-templates />
88 </xsl:element>
89
90</xsl:template>
91
92<!-- refsect1 -> sect2 -->
93<xsl:template match="refsect1">
94 <xsl:if test="not(title)"><xsl:message terminate="yes">refsect1 requires title</xsl:message></xsl:if>
95 <xsl:element name="sect2">
96 <xsl:attribute name="role">not-in-toc</xsl:attribute>
97 <xsl:attribute name="condition">refsect1</xsl:attribute>
98 <xsl:apply-templates />
99 </xsl:element>
100</xsl:template>
101
102<!-- refsect2 -> sect3 -->
103<xsl:template match="refsect2">
104 <xsl:if test="not(title)"><xsl:message terminate="yes">refsect2 requires title</xsl:message></xsl:if>
105 <xsl:element name="sect3">
106 <xsl:attribute name="role">not-in-toc</xsl:attribute>
107 <xsl:attribute name="condition">refsect2</xsl:attribute>
108 <xsl:apply-templates />
109 </xsl:element>
110</xsl:template>
111
112<!-- refsect3 -> sect4 -->
113<xsl:template match="refsect3">
114 <xsl:if test="not(title)"><xsl:message terminate="yes">refsect3 requires title</xsl:message></xsl:if>
115 <xsl:element name="sect4">
116 <xsl:attribute name="role">not-in-toc</xsl:attribute>
117 <xsl:attribute name="condition">refsect3</xsl:attribute>
118 <xsl:apply-templates />
119 </xsl:element>
120</xsl:template>
121
122
123<!-- Remove refmeta. -->
124<xsl:template match="refmeta"/>
125
126<!--
127 remark extensions:
128 -->
129<!-- Default: remove all remarks. -->
130<xsl:template match="remark"/>
131
132<!-- help-manual - stuff that should only be included in the manual. -->
133<xsl:template match="remark[@role = 'help-manual']">
134 <xsl:apply-templates/>
135</xsl:template>
136
137<!-- help-copy-synopsis - used in refsect2 to copy synopsis from the refsynopsisdiv. -->
138<xsl:template match="remark[@role = 'help-copy-synopsis']">
139 <xsl:if test="not(parent::refsect2)">
140 <xsl:message terminate="yes">The help-copy-synopsis remark is only applicable in refsect2.</xsl:message>
141 </xsl:if>
142 <xsl:variable name="sSrcId" select="concat('synopsis-',../@id)"/>
143 <xsl:if test="not(/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId])">
144 <xsl:message terminate="yes">Could not find any cmdsynopsis with id=<xsl:value-of select="$sSrcId"/> in refsynopsisdiv.</xsl:message>
145 </xsl:if>
146 <xsl:element name="cmdsynopsis">
147 <xsl:copy-of select="/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId]/node()"/>
148 </xsl:element>
149</xsl:template>
150
151<!--
152 Captializes the given text.
153 -->
154<xsl:template name="capitalize">
155 <xsl:param name="text"/>
156 <xsl:call-template name="str:to-upper">
157 <xsl:with-param name="text" select="substring($text,1,1)"/>
158 </xsl:call-template>
159 <xsl:value-of select="substring($text,2)"/>
160</xsl:template>
161
162</xsl:stylesheet>
163
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette