Syntax highlighting JavaScript in pdfs generated by asciidoc (via dblatex)
dan.j.allen Jun 6, 2012 10:55 PMAsciiDoc supports syntax highlighting of code in PDFs when you use the dblatex backend (the default).
a2x -f pdf yourdoc.asciidoc
However, dblatex does not include support for JavaScript (rather suprisingly). Thus, the following snippet in your document will cause pdf generation to fail:
[source,javascript]
----
function add(a, b) {
return a + b;
}
int total = add(2, 2);
----
In order to make this work, you need to define a new language in a custom dblatex style configuration file (extension .sty). AsciiDoc already uses a custom file, and dblatex only supports a single configuration file, so you first need to copy the file into your build directory (or wherever you want to stick it).
cp %ASCIIDOC_INSTALL_DIR%/dblatex/asciidoc-dblatex.sty custom-asciidoc-dblatex.sty
Next, append the following code to that custom file:
\usepackage[usenames,dvipsnames]{xcolor}
% Set custom colors
\definecolor{code}{gray}{0}
\definecolor{canvas}{gray}{0.96}
\definecolor{comment}{rgb}{0, 0.456, 0}
\definecolor{keyword}{rgb}{0.5, 0, 0.5}
% JavaScript is not part of the listings package...
% but thankfully this page shows how to add it:
% http://lenaherrmann.net/2010/05/20/javascript-syntax-highlighting-in-the-latex-listings-package
\lstdefinelanguage{javascript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, for, in, while, do, else, case, break},
ndkeywords={class, export, boolean, throw, implements, import, this},
sensitive=false,
comment=[l]{//},
morecomment=[s][\color{blue}\ttfamily]{/*}{*/},
morestring=[b]',
morestring=[b]"
}
% Parameters for formatting code (optional, affects all code listings)
\lstset{
backgroundcolor=\color{canvas},
basicstyle=\ttfamily\small\color{code},
commentstyle=\color{comment},
identifierstyle=\color{black},
keywordstyle=\color{keyword}\bfseries,
ndkeywordstyle=\color{keyword}\bfseries,
stringstyle=\color{blue}\ttfamily
}
Finally, you need to pass this style configuration to the a2x command via the dblatex-opts flag:
a2x -f pdf --dblatex-opts="-s custom-asciidoc-dblatex.sty" yourdoc.asciidoc
Now you should see the JavaScript code highlighted in the generated pdf.
This tip builds on the following blog post on this topic: http://lenaherrmann.net/2010/05/20/javascript-syntax-highlighting-in-the-latex-listings-package