wow- thanks. Thats cool. Olli
2007/1/8, Abel Braaksma <[EMAIL PROTECTED]>:
Oliver Müller wrote: > Maybe I don't got any other solution because I'm quite new to XSL-FO ... > I would really love to use text-indent, but in my case I don't see a > chance to do so. > [....] > I found no possibility to apply a new fo:block to all of the text > before and after Normally people choose XSLT to do that task, I assume you do so too. The best place to ask that question is on the XSLT list. Try http://www.mulberrytech.com/xsl/xsl-list/subscribe-unsubscribe.html to subscribe to that list. Since this is fairly trivial to do in XSLT 1 and 2 (what version do you use?), I will give you a solution that works for either version: INPUT DOC: <root> Lorem ipsum 1 <absatz /> Lorem ipsum 2 <absatz /> Lorem ipsum 3 </root> XSLT DOC: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output indent="yes"/> <xsl:template match="root"> <fo:root> <xsl:apply-templates /> </fo:root> </xsl:template> <xsl:template match="text()[preceding-sibling::*[1][self::absatz]]"> <fo:block text-indent="6pt"> <xsl:value-of select="."/> </fo:block> </xsl:template> </xsl:stylesheet> OUTPUT: <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> Lorem ipsum 1 <fo:block text-indent="6pt"> Lorem ipsum 2 </fo:block> <fo:block text-indent="6pt"> Lorem ipsum 3 </fo:block> </fo:root> If you want the first textblock to be indented as well, add the following to the match of the text-nodes with preceding-sibling: text()[following-sibling::*[1][local-name() = 'absatz']] or make a copy of it, and add this: <xsl:template match="text()[following-sibling::*[1][self::absatz]]"> <fo:block text-indent="6pt"> <xsl:value-of select="."/> </fo:block> </xsl:template> which will wrap all text nodes that have either a following node or a preceding node that is called "absatz". Note that the following (seemingly correct) versions do not yield the same results: text()[preceding-sibling::absatz] which will match the text-node if somewhere, between all siblings, there is a node 'absatz', and text()[preceding-sibling::absatz[1]] which will match if there is at least one node, somewhere, that matches the name 'absatz' (same as before) and text()[preceding-sibling::*[1][absatz]] which will match if the first sibling has a child 'absatz', which is not what we want. So, finally, this comes to: text()[preceding-sibling::*[1][local-name() = 'absatz']] Please note, that this explicitly does not wrap the text inside an fo:block when something else then an <absatz /> node is preceding or following the text node. Also, if the text node you want to match contains more nodes (like text in xhtml with <strong> and <em>), the above solution needs some tweaking (nothing fancy though). In that case, I think your chances are better at the XSLT mailing list. Note, too, that text nodes that do not match the predicate discussed above, will simply be output. Hope this helps! > <absatz />. > Thats why I'm using <fo:block /><fo:inline > font-size="10pt"> </fo:inline> > to get my linebreak and indent. Since you need a linebreak and an indent, you better wrap the texts in a fo:block, like you suggested already. Cheers, -- Abel Braaksma http://www.nuntia.nl --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]