Re: [xsl] Open Office Multi-Line Normalization

Subject: Re: [xsl] Open Office Multi-Line Normalization
From: Michael B Allen <mba2000@xxxxxxxxxx>
Date: Wed, 18 Apr 2007 20:37:02 -0400
On Wed, 18 Apr 2007 18:16:50 -0400
Michael B Allen <mba2000@xxxxxxxxxx> wrote:

> On Wed, 18 Apr 2007 23:03:44 +0100
> David Carlisle <davidc@xxxxxxxxx> wrote:
> 
> > 
> > looks like you just want
> > 
> > <pre>
> > <xsl:apply-templates/>
> > </pre>
> > 
> > the default element and text node templates will do the rest for you,
> 
> Hi David,
> 
> Ok, but there's no outer tag to match on. I failed to mention that there
> are many of these "pre" sequences. If I can isolate each set then I can
> use the template you suggest.

This below seems to work but of course I'd be interested in improvements.

Basically this finds the p node with an immediately preceding sibling
that does not have the p_5f_prototype style. That's the first element
in the sequence. Then it finds the first p node after that one that does
not have the p_5f_prototype style. That's the node right after the last
element in the sequence. Then I just use [. << $end] to isolate the set.

<xsl:template match="text:p[@text:style-name='p_5f_prototype' and not(preceding-sibling::*[1][@text:style-name='p_5f_prototype'])]">
    <xsl:variable name="end" select="following-sibling::*[not(@text:style-name='p_5f_prototype')][1]"/>
    <pre>   
        <xsl:apply-templates mode="prototype" select=".|following-sibling::*[. &lt;&lt; $end]"/>
    </pre><xsl:text>
</xsl:text>
</xsl:template>
     
<xsl:template mode="prototype" match="text:s">
    <xsl:value-of select="substring('                     ', 1, @text:c)"/>
</xsl:template>
     
<xsl:template mode="prototype" match="text()|@*">
    <xsl:value-of select="."/><xsl:text>
</xsl:text>
</xsl:template>

The only wart is that an empty element does not produce a blank line
because I guess the empty element doesn't match 'text()'. Meaning the
following:

  <text:p text:style-name="p_5f_prototype">require_once('foo.php');</text:p>
  <text:p text:style-name="p_5f_prototype"/>
  <text:p text:style-name="p_5f_prototype">bool ...

yields:

  require_once('plexcel.php');
  bool ...

whereas I would like:

  require_once('plexcel.php');
  
  bool ...

Mike

-- 
Michael B Allen
PHP Active Directory Kerberos SSO
http://www.ioplex.com/

Current Thread