[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: DOCBOOK-APPS: xhtml transform problems
Jirka Kosek <jirka@kosek.cz> writes: > Eric Richardson wrote: > > > [...] > > This piece of xhtml won't validate as only inline and special > > block(map, applet etc.) are allowed inside of <p> whereas <pre> is > > block, from what I can gather from the DTD and the nsgmls > > validation error. > > DocBook allows elements like screen inside para. Stylesheet only > converts DocBook <para>s to HTML <p>s and <screen>s to <pre>s. If you > want to get correct HTML output, write screens on same level as paras: I was going to say the same thing, but I reckon Eric's got a reason for marking it up as he did-- there's a value in using para as the same container for both the intro text and the <screen>. > Cleaner solution would be to modify stylesheet to handle your code in > proper way. This is doable in theory, but it would make stylesheet much > more complicated and complex. Well, I can think of one easy stylesheet tweak: change the "para" template to generate <div class="para"> instead of <p>. Maybe a case of a cure worse than the disease, because it'll change globally. But not that big of a deal for anybody already using CSS to style pages. I don't think it's a long-term solution, but until a better one comes along... this one's not complicated, at least-- just change two lines in one template, drop it into a customization file: <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" exclude-result-prefixes="doc" version='1.0'> <xsl:import href="/usr/lib/sgml/stylesheet/xsl/docbook/nwalsh/xhtml/docbook.xsl"/> <!-- ******************************************************************** Simple DocBook stylesheet customization to generate <div class="para"> in place of <p> (globally); prevents invalid instances where HTML block elements end up inside <p>, e.g. <p><pre></pre></p> (<p> in HTML can only contain inline elements) Will need to use CSS to style div.para (e.g. margin-top & -bottom) ******************************************************************** --> <xsl:template match="para"> <div class="para"> <xsl:if test="position() = 1 and parent::listitem"> <a> <xsl:attribute name="name"> <xsl:call-template name="object.id"> <xsl:with-param name="object" select="parent::listitem"/> </xsl:call-template> </xsl:attribute> </a> </xsl:if> <xsl:if test="@id"> <a name="{@id}"/> </xsl:if> <xsl:apply-templates/> </div> </xsl:template> </xsl:stylesheet>
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC