1
0
Fork 0

De-indent docblocks when rendering Texinfo

master
Mike Gerwitz 2015-09-29 21:37:34 -04:00
parent 5c4059e20a
commit 10b270250f
No known key found for this signature in database
GPG Key ID: F22BB8158EE30EAB
1 changed files with 45 additions and 5 deletions

View File

@ -56,7 +56,7 @@
-->
<template mode="xt:doc-gen" priority="7"
match="xsl:template[ @match ]">
<variable name="doc" as="comment()?"
<variable name="doc" as="xs:string?"
select="xt:get-docblock( . )" />
<variable name="mode" as="xs:string"
@ -116,7 +116,7 @@
-->
<template mode="xt:doc-gen" priority="5"
match="xsl:template|xsl:function">
<variable name="doc" as="comment()?"
<variable name="doc" as="xs:string?"
select="xt:get-docblock( . )" />
<variable name="param-str" as="xs:string"
@ -188,14 +188,54 @@
Only the immediately preceding comment is considered according to
the @code{xt:is-docblock} predicate above.
-->
<function name="xt:get-docblock" as="comment()?">
<function name="xt:get-docblock" as="xs:string?">
<param name="context" as="node()" />
<sequence select="( ( $context/preceding-sibling::node()[
<variable name="docblock" as="comment()?"
select="( ( $context/preceding-sibling::node()[
not( . instance of text()
and . = $xt:nl ) ] )
[ last() ] )
[ . instance of comment() ]" />
<sequence select="if ( not( $docblock ) ) then
()
else
xt:format-block( $docblock )" />
</function>
<!--
Format docblock for Texinfo
Currently, this only handles de-indenting text: certain Texinfo commands
must begin in column 1, and certain environments (like @code{example} and
@code{verbatim}) incur extra indentation based on how the XML docblock is
formatted.
This considers the indentation of the first line of the docblock following
the opening delimiter to be the indentation throughout the entire
docblock, and strips those characters from the beginning of each
line. Both tabs and spaces are recognized.
-->
<function name="xt:format-block" as="xs:string">
<param name="text" as="xs:string" />
<variable name="re" as="xs:string"
select="concat(
'^',
replace(
substring-before(
substring-after( $text, $xt:nl ),
$xt:nl ),
'(^[ ]*).+$', '$1', 'm' ) )" />
<!-- regexes that match empty strings aren't permitted, so we must check
against it -->
<sequence select="if ( $re = '^' ) then
$text
else
replace( $text, $re, '', 'm' )" />
</function>
@ -214,7 +254,7 @@
-->
<template mode="xt:doc-gen" priority="5"
match="comment()[ not( starts-with( ., '@comment' ) ) ]">
<value-of select="concat( ., $xt:nl )" />
<value-of select="xt:format-block( concat( ., $xt:nl ) )" />
</template>