[xsl] Re: css or xsl for increasing size of first letter in chapter?

Subject: [xsl] Re: css or xsl for increasing size of first letter in chapter?
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sat, 3 Aug 2002 23:45:19 -0700 (PDT)
--- Phillip Rhodes <spamsucks at rhoderunner dot com> wrote:

> Hi everyone.
> I am trying to increase the size of the very first letter for each
> chapter in an xhtml document. I have used the css pseudo class
> "first-letter" to do it, but it selects all the p elements in a
> chapter, not just the first.
> 
> p:first-letter {
> font-size: 16pt;
> }
> 
> I could use xsl to make the first child p of the chapter a special
> class of p like <p class="firstsentence">
> 
> Sort of like
> p.firstsentence:first-letter
> 
> But not sure if this is the way to go...., any handy XSL tricks for
> this?
> Thanks!
> 
> <html>
> <body>
> <chapter>
> <p>This is chapter 1</p>
> <p>another sentence</p>
> </chapter>
> <chapter>
> <p>This is chapter 2</p>
> </chapter>
> </body>
> </html>

Hi Philip,

The following transformation does it:

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  
  <xsl:template match="chapter/p[1]//text()[1]">
    <font size="+2">
      <xsl:value-of select="substring(., 1, 1)"/>
    </font>
    <xsl:value-of select="substring(., 2)"/>
  </xsl:template>
</xsl:stylesheet>

It is a customisation of the identity rule, adding a specific rule for
the first text node within the first "p" in a "chapter". 

The text is split into two -- the first character is wrapped within an
appropriate html element ("font" in this case), and the rest of the
text is simply copied.

With your source xml:

<html>
  <body>
    <chapter>
      <p>This is chapter 1</p>
      <p>another sentence</p>
    </chapter>
    <chapter>
      <p>This is chapter 2</p>
    </chapter>
  </body>
</html>

the result of applying this transformation is:

<html>
   <body>
      <chapter>
         <p><font size="+2">T</font>his is chapter 1
         </p>
         <p>another sentence</p>
      </chapter>
      <chapter>
         <p><font size="+2">T</font>his is chapter 2
         </p>
      </chapter>
   </body>
</html>


and this is displayed by a browser with the first characters of any
chapter visibly bigger.

Hope this helped.



=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

__________________________________________________
Do You Yahoo!?
Yahoo! Health - Feel better, live better
http://health.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread