How to Style Codeblocks with a Zebra Effect
A possible requirement for your <codeblock>
elements could be to alternate the background color on each line. Some advantages of this
technique is that you can clearly see when text from the <codeblock>
is
wrapped.
Note: Adding this styling will remove syntax highlights on
codeblocks.
This effect can be done by altering the HTML5 output, creating a
div
for each line from the code block, then styling them.
To add this functionality using an Oxygen Publishing Template, follow these steps:
- If you have not already created a Publishing Template, you need to create one. For details, see How to Create a Publishing Template.
- Link the folder associated with the publishing template to your current project in the Project view.
- Using the view, create an xslt folder inside the project root folder.
- In this folder, create an XSL file (for example, named merged2html5Extension.xsl) with the following
content:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="*[contains(@class, ' pr-d/codeblock ')]"> <xsl:variable name="nm"> <xsl:next-match/> </xsl:variable> <xsl:apply-templates select="$nm" mode="zebra"/> </xsl:template> <xsl:template match="node() | @*" mode="zebra"> <xsl:copy> <xsl:apply-templates select="node() | @*" mode="#current"/> </xsl:copy> </xsl:template> <xsl:template match="*[contains(@class, ' pr-d/codeblock ')]" mode="zebra"> <xsl:element name="{name()}"> <xsl:copy-of select="@*"/> <xsl:attribute name="class" select="concat(@class, ' zebra')"/> <xsl:analyze-string regex="\n" select="."> <xsl:matching-substring/> <xsl:non-matching-substring> <div> <xsl:value-of select="."/> </div> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:element> </xsl:template> </xsl:stylesheet>
- Open the template
descriptor file associated with your publishing template (the
.opt file) and set the XSLT stylesheet created in the previous step
with the
com.oxygenxml.pdf.css.xsl.merged2html5
XSLT extension point:<publishing-template> ... <pdf> ... <xslt> <extension id="com.oxygenxml.pdf.css.xsl.merged2html5" file="xslt/merged2html5Extension.xsl"/> </xslt>
- Create a css folder in the publishing template directory. In this directory, save a custom CSS file with rules that style the
<codeblock>
structure. For example:.zebra { padding: 0; } .zebra > *:nth-of-type(odd) { background-color: lightgray; }
- Open the template
descriptor file associated with your publishing template (the
.opt file) and reference your custom CSS file in the
resources
element:<publishing-template> ... <pdf> ... <resources> <css file="css/custom.css"/> </resources>
- Edit the DITA Map PDF - based on HTML5 & CSS transformation scenario.
- In the Templates tab, click the Choose Custom Publishing Template link and select your template.
- Click OK to save the changes and run the transformation scenario.