1 <xsl:stylesheet version="3.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 xmlns:d="http://github.com/vinniefalco/docca"
5 exclude-result-prefixes="xs d">
7 <xsl:variable name="nl" select="'
'"/>
9 <xsl:variable name="leading-ns-regex" select="'^([^:<]+::)+'"/>
11 <xsl:function name="d:extract-ns-without-suffix">
12 <xsl:param name="name"/>
13 <xsl:sequence select="replace(d:extract-ns($name), '::$', '')"/>
16 <xsl:function name="d:extract-ns">
17 <xsl:param name="name"/>
18 <xsl:sequence select="replace($name, '('||$leading-ns-regex||').*', '$1')"/>
21 <!-- Strip all C++ namespace prefixes that come at the beginning -->
22 <xsl:function name="d:strip-ns">
23 <xsl:param name="name"/>
24 <xsl:sequence select="replace($name, $leading-ns-regex, '')"/>
27 <!-- Strip the common C++ namespace prefix for the docs as a whole -->
28 <!-- ASSUMPTION: $doc-ns is defined in the customizing stylesheet -->
29 <xsl:function name="d:strip-doc-ns">
30 <xsl:param name="name"/>
31 <xsl:sequence select="if ($name eq $doc-ns)
33 else replace($name, '^'||$doc-ns||'::', '')"/>
36 <xsl:function name="d:make-id">
37 <xsl:param name="name"/>
38 <xsl:sequence select="d:perform-replacements($name, $id-replacements)"/>
41 <xsl:function name="d:perform-replacements">
42 <xsl:param name="name"/>
43 <xsl:param name="replacements"/>
44 <xsl:variable name="next" select="head($replacements)"/>
45 <xsl:variable name="rest" select="tail($replacements)"/>
46 <xsl:sequence select="if (exists($next))
47 then d:perform-replacements(replace($name, $next/@pattern, $next/@with), $rest)
51 <xsl:variable name="id-replacements" select="$additional-id-replacements, $base-id-replacements"/>
53 <!-- Can be overridden by a customizing stylesheet -->
54 <xsl:variable name="additional-id-replacements" as="element(replace)*" select="()"/>
56 <xsl:variable name="base-id-replacements" as="element(replace)+">
57 <replace pattern="::" with="__"/>
58 <replace pattern="=" with="_eq_"/>
59 <replace pattern="!" with="_not_"/>
60 <replace pattern="->" with="_arrow_"/>
61 <replace pattern="<" with="_lt_"/>
62 <replace pattern=">" with="_gt_"/>
63 <replace pattern="~$" with="_bnot_"/> <!-- bitwise NOT -->
64 <replace pattern="~" with="_dtor_"/> <!-- destructor -->
65 <replace pattern="\[" with="_lb_"/>
66 <replace pattern="\]" with="_rb_"/>
67 <replace pattern="\(" with="_lp_"/>
68 <replace pattern="\)" with="_rp_"/>
69 <replace pattern="\+" with="_plus_"/>
70 <replace pattern="-" with="_minus_"/>
71 <replace pattern="\*" with="_star_"/>
72 <replace pattern="/" with="_slash_"/>
73 <replace pattern=" " with="_"/>
76 <xsl:function name="d:cleanup-param">
77 <xsl:param name="name"/>
78 <xsl:sequence select="d:perform-replacements($name, $param-replacements)"/>
81 <xsl:function name="d:cleanup-type">
82 <xsl:param name="name"/>
83 <xsl:sequence select="d:perform-replacements($name, $type-replacements)"/>
86 <xsl:variable name="param-replacements" select="$additional-param-replacements, $base-param-replacements"/>
88 <!-- Can be overridden by a customizing stylesheet -->
89 <xsl:variable name="additional-param-replacements" as="element(replace)*" select="()"/>
91 <xsl:variable name="base-param-replacements" as="element(replace)*">
92 <!-- Reformats '*', '&', and '...' in parameters, e.g. "void const*" -->
93 <replace pattern=" \*$" with="*"/>
94 <replace pattern=" (&&?)(\.{{3}})?$" with="$1$2"/>
97 <!-- NOTE: $type-replacements includes $param-replacements -->
98 <xsl:variable name="type-replacements" select="$additional-type-replacements, $base-type-replacements, $param-replacements"/>
100 <!-- Can be overridden by a customizing stylesheet -->
101 <xsl:variable name="additional-type-replacements" as="element(replace)*" select="()"/>
103 <xsl:variable name="base-type-replacements" as="element(replace)*">
104 <replace pattern="^virtual$" with=""/>