OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-apps] Programlisting strip-spaces problem


The basic problem is that your current template converts the element to a
string.  When you convert an element to a string in XSLT, the child elements
are converted to strings too.  So your first substring expressions do the
reduction.

You'll need to handle text() nodes and element nodes differently, so you can
process the elements as elements.  I don't have an off-the-shelf solution
for what you want to do, but maybe someone else does.

Bob Stayton
Sagehill Enterprises
DocBook Consulting
bobs@sagehill.net


----- Original Message ----- 
From: "TiP" <TiP@tut.by>
To: <docbook-apps@lists.oasis-open.org>
Sent: Friday, October 01, 2004 12:20 AM
Subject: [docbook-apps] Programlisting strip-spaces problem


> Hello docbook-apps,
>
>   I've made some customizations to progamlisting to strip empty lines
> in the beginning and in the end of it. It is a recursive template, but
> this is not a problem. The problem is that all internal formatting of
> programlisting is lost. For example:
>
>      <programlisting>
> $ cvs -d:pserver:<parameter>username</parameter>@cvs.site.net:/repository
checkout <parameter>module</parameter>
>      </programlisting>
>
>   Template below produces output string by string, omitting newlines
> at the end and beginning. And somewhere during conversion internal
> formatting for these strings is lost. Like
> $ cvs -d:pserver:<TT>username</TT>@cvs.site.net:/repository checkout
<TT>module</TT>
> becomes
> $ cvs -d:pserver:username@cvs.site.net:/repository checkout module
> is there any way to avoid losing markup information?
> Maybe some exslt functions?
>
>   <xsl:template name="trim_newlines">
>     <xsl:param name="string" select="."/>
>     <xsl:param name="in_end_mode" select="false()"/> <!-- looking for
endstring -->
>      <xsl:message>
>       <xsl:copy-of select="$string"/>
>       <xsl:text>&#10;</xsl:text>
>     </xsl:message>
>
>     <xsl:if test="normalize-space($string)">         <!-- prevent endless
cycle on empty blocks -->
>       <xsl:variable name="nl" select="'&#xA;'" />
>       <xsl:variable name="beforenl" select="substring-before($string,$nl)"
/>
>       <xsl:variable name="afternl" select="substring-after($string,$nl)"
/>
>       <xsl:variable name="nextnl"
select="normalize-space(substring-before($afternl,$nl))" />
>       <xsl:choose>
>         <xsl:when test="not($in_end_mode) and
string-length(normalize-space($beforenl)) = 0">
>           <xsl:call-template name="trim_newlines">
>             <xsl:with-param name="string" select="$afternl" />
>             <xsl:with-param name="in_end_mode" select="$in_end_mode or
$nextnl" />
>           </xsl:call-template>
>         </xsl:when>
>         <xsl:otherwise>
>           <xsl:copy-of select="concat($beforenl,$nl)"/>
>           <xsl:call-template name="trim_newlines">
>             <xsl:with-param name="string" select="$afternl" />
>             <xsl:with-param name="in_end_mode" select="true()" />
>           </xsl:call-template>
>         </xsl:otherwise>
>       </xsl:choose>
>     </xsl:if>
>   </xsl:template>
>
> Tnx.
> -- 
>  TiP
>
>
>




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]