The code that generates a single PRE block from multiple Word paragraphs worked perfectly … until Word decided I made a spelling error in one of the listings. Based on where it thinks the error is, Word can generate the w:proofErr element between w:p elements, thus breaking my code which assumed that the w:p elements are adjacent:
To fix this problem, I had to change following-sibling::*[1] expression into following-sibling::w:p[1] throughout the affected code. The fixed templates are included below:
<xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'code']"> <xsl:if test="not(preceding-sibling::w:p[1]/w:pPr/w:pStyle/@w:val = 'code')"> <pre class='{w:pPr/w:pStyle/@w:val}'> <xsl:apply-templates select='.' mode="pre" /> </pre> </xsl:if> </xsl:template> <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'code']" mode="pre"> <xsl:apply-templates /> <xsl:if test="following-sibling::w:p[1]/w:pPr/w:pStyle/@w:val = 'code'"> <xsl:text>
</xsl:text> <xsl:apply-templates mode="pre" select="following-sibling::w:p[1]" /> </xsl:if> </xsl:template> <xsl:template match="*" mode="pre" />
No comments:
Post a Comment