Skip to main content

A javascript lexer for Pygments that uses the babylon parser

Project description

A javascript lexer for Pygments that uses the babylon parser

WARNING!

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

Why?

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 :wink:.

Install

Nothing too much here, apart from the Node.js dependency:

pip install pygments-lexer-babylon

This will install Pygments for you (>=2.0), so if something depends on an older version, virtualenv is recommended. (Or use docker…)

Usage

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

Gotchas

  • 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 Pygments lexer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygments-lexer-babylon-0.11.0.tar.gz (470.0 kB view details)

Uploaded Source

File details

Details for the file pygments-lexer-babylon-0.11.0.tar.gz.

File metadata

File hashes

Hashes for pygments-lexer-babylon-0.11.0.tar.gz
Algorithm Hash digest
SHA256 8ba9a0c6f3fa9f018aaab4e53318d9d52a04774a822b664b20f0998802d2c193
MD5 14123bdcd21bae49509117c9994a5da7
BLAKE2b-256 12e05844d92842d07ef3419c062cab2d8462e7ffbe96ed5fbc3a5c69f7aa3ec2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page