A javascript lexer for Pygments that uses the babylon parser
Node.js must be installed to use this package.
Set the environment variable PYGMENTS_NODE_COMMAND to the command
you use to run Node. The default is nodejs. If the following command works,
you are most probably OK:
nodejs -v
Pygments can not properly highlight new and shiny javascript (particulary jsx).
Until all these features are implemented in Pygments, you can use this package as a fallback.
Also, it is a good fun to experiment with various technologies 😉.
Nothing too much here, apart from the Node.js dependency:
pip install pygments-lexer-babylon
This will install Pygments for you (>=2.1), so if something depends on an older version, virtualenv is recommended.
(Or use docker...)
The importable name of the package: pygmentslexerbabylon.
It provides two lexers: BabylonLexer and BabylonHtmlLexer. The latter is needed because the built in
HtmlLexer hard codes the usage of JavascriptLexer between <script> tags.
If you have "manual" control over which lexer to use, do something like this:
from pygments import highlight
from pygments.formatters import HtmlFormatter
from pygmentslexerbabylon import BabylonLexer
lexer = BabylonLexer() # You select it manually...
formatter = HtmlFormatter(linenos=True, cssclass="source")
code = '<ReactComponent/>'
result = highlight(code, lexer, formatter)In some cases you do not have control over the selected lexer. Let's say, you use Markdown, which turns out to use code like this:
from pygments.lexers import get_lexer_by_name, guess_lexer
try:
lexer = get_lexer_by_name(self.lang)
except ValueError:
try:
lexer = guess_lexer(self.src)
except ValueError:
lexer = get_lexer_by_name('text')In this case use language name jsx for javascript files and htmlx for
html files.
If you use the pygmentize all the above works:
$ pygmentize -l jsx myreact.js # Note the extension is not jsx
$ pygmentize myreact.jsx
$ pygmentize -l htmlx htmlwithjsx.html
$ pygmentize htmlwithjsx.htmlx- It is a bit slower than
Pygments... - May fail for really large files (0.5 MB worked for me though)
- Produces slightly different result than the original
Pygmentslexer