lowlight
Virtual syntax highlighting for virtual DOMs and non-HTML things, with language auto-detection. Perfect for React, VDOM, and others.
Lowlight is built to work with all syntaxes supported by highlight.js. There are three builds of lowlight:
lib/core.js
— 0 languageslib/common.js
(default) — 35 languageslib/all.js
— 190 languages
Want to use Prism instead?
Try refractor
!
Contents
Install
This package is ESM only:
Node 12+ is needed to use it and it must be import
ed instead of require
d.
npm:
npm install lowlight
Use
Highlight:
import {lowlight} from 'lowlight'
var tree = lowlight.highlight('js', '"use strict";')
console.dir(tree, {depth: null})
Yields:
{
type: 'root',
data: {language: 'js', relevance: 10},
children: [
{
type: 'element',
tagName: 'span',
properties: {className: ['hljs-meta']},
children: [{type: 'text', value: '"use strict"'}]
},
{type: 'text', value: ';'}
]
}
hast trees can be serialized with hast-util-to-html
:
import {lowlight} from 'lowlight'
import toHtml from 'hast-util-to-html'
var tree = lowlight.highlight('js', '"use strict";')
console.log(toHtml(tree))
Yields:
<span class="hljs-meta">"use strict"</span>;
hast trees can be turned into other things, like virtual DOMs, with
hast-to-hyperscript
.
hast trees are also used throughout the rehype (unified) ecosystem:
import unified from 'unified'
import rehypeStringify from 'rehype-stringify'
import {lowlight} from 'lowlight'
var tree = lowlight.highlight('js', '"use strict";')
var processor = unified().use(rehypeStringify)
var html = processor.stringify(tree).toString()
console.log(html)
Yields:
<span class="hljs-meta">"use strict"</span>;
API
This package exports the following identifiers: lowlight
.
There is no default export.
lowlight.highlight(language, value[, options])
Parse value
(string
) according to the language
grammar.
options
prefix
(string?
, default:'hljs-'
) — Class prefix
Returns
A hast Root
with two data
fields:
relevance
(number
) — How sure low is that the given code is in the languagelanguage
(string
) — The detectedlanguage
name
Example
import {lowlight} from 'lowlight'
console.log(lowlight.highlight('css', 'em { color: red }'))
Yields:
{type: 'root', data: {language: 'css', relevance: 3}, children: [Array]}
lowlight.highlightAuto(value[, options])
Parse value
by guessing its grammar.
options
The options of lowlight.highlight
are supported, plus:
subset
(Array.<string>?
default: all registered languages) — List of allowed languages
Returns
The same result as lowlight.highlight
is returned.
Example
import {lowlight} from 'lowlight'
console.log(lowlight.highlightAuto('"hello, " + name + "!"'))
Yields:
{type: 'root', data: {language: 'applescript', relevance: 3}, children: [Array]}
lowlight.registerLanguage(language, syntax)
Register a syntax as language
(string
).
Useful in the browser or with custom grammars.
Example
import {lowlight} from 'lowlight/lib/core.js'
import xml from 'highlight.js/lib/languages/xml.js'
lowlight.registerLanguage('xml', xml)
console.log(lowlight.highlight('html', '<em>Emphasis</em>'))
Yields:
{type: 'root', data: {language: 'html', relevance: 2}, children: [Array]}
lowlight.registerAlias(language, alias)
Register a new alias
for language
.
Signatures
registerAlias(language, alias|list)
registerAlias(aliases)
Parameters
language
(string
) — Name of a registered languagealias
(string
) — New alias for the registered languagelist
(Array.<alias>
) — List of aliasesaliases
(Object.<language, alias|list>
) — Map where each key is alanguage
and each value analias
or alist
Example
import {lowlight} from 'lowlight/lib/core.js'
import md from 'highlight.js/lib/languages/markdown.js'
lowlight.registerLanguage('markdown', md)
// lowlight.highlight('mdown', '<em>Emphasis</em>')
// ^ would throw: Error: Unknown language: `mdown` is not registered
lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})
lowlight.highlight('mdown', '<em>Emphasis</em>')
// ^ Works!
lowlight.listLanguages()
List all registered languages.
Returns
Array.<string>
.
Example
import {lowlight} from 'lowlight/lib/core.js'
import md from 'highlight.js/lib/languages/markdown.js'
console.log(lowlight.listLanguages()) // => []
lowlight.registerLanguage('markdown', md)
console.log(lowlight.listLanguages()) // => ['markdown']
Syntaxes
If you’re using lowlight/lib/core.js
, no syntaxes are included.
Checked syntaxes are included if you import lowlight
(or
lowlight/lib/common.js
).
Unchecked syntaxes are available through lowlight/lib/all.js
Note that highlight.js works as a singleton. That means that if you register a syntax anywhere in your project, it’ll become available everywhere!
-
1c
— 1C:Enterprise -
abnf
— Augmented Backus-Naur Form -
accesslog
— Apache Access Log -
actionscript
(as
) — ActionScript -
ada
— Ada -
angelscript
(asc
) — AngelScript -
apache
(apacheconf
) — Apache config -
applescript
(osascript
) — AppleScript -
arcade
— ArcGIS Arcade -
arduino
(ino
) — Arduino -
armasm
(arm
) — ARM Assembly -
asciidoc
(adoc
) — AsciiDoc -
aspectj
— AspectJ -
autohotkey
(ahk
) — AutoHotkey -
autoit
— AutoIt -
avrasm
— AVR Assembly -
awk
— Awk -
axapta
(x++
) — X++ -
bash
(sh
) — Bash -
basic
— BASIC -
bnf
— Backus–Naur Form -
brainfuck
(bf
) — Brainfuck -
c
(h
) — C -
cal
— C/AL -
capnproto
(capnp
) — Cap’n Proto -
ceylon
— Ceylon -
clean
(icl
,dcl
) — Clean -
clojure
(clj
) — Clojure -
clojure-repl
— Clojure REPL -
cmake
(cmake.in
) — CMake -
coffeescript
(coffee
,cson
,iced
) — CoffeeScript -
coq
— Coq -
cos
(cls
) — Caché Object Script -
cpp
(cc
,c++
,h++
,hpp
,hh
,hxx
,cxx
) — C++ -
crmsh
(crm
,pcmk
) — crmsh -
crystal
(cr
) — Crystal -
csharp
(cs
,c#
) — C# -
csp
— CSP -
css
— CSS -
d
— D -
dart
— Dart -
delphi
(dpr
,dfm
,pas
,pascal
) — Delphi -
diff
(patch
) — Diff -
django
(jinja
) — Django -
dns
(bind
,zone
) — DNS Zone -
dockerfile
(docker
) — Dockerfile -
dos
(bat
,cmd
) — Batch file (DOS) -
dsconfig
— undefined -
dts
— Device Tree -
dust
(dst
) — Dust -
ebnf
— Extended Backus-Naur Form -
elixir
— Elixir -
elm
— Elm -
erb
— ERB -
erlang
(erl
) — Erlang -
erlang-repl
— Erlang REPL -
excel
(xlsx
,xls
) — Excel formulae -
fix
— FIX -
flix
— Flix -
fortran
(f90
,f95
) — Fortran -
fsharp
(fs
) — F# -
gams
(gms
) — GAMS -
gauss
(gss
) — GAUSS -
gcode
(nc
) — G-code (ISO 6983) -
gherkin
(feature
) — Gherkin -
glsl
— GLSL -
gml
— GML -
go
(golang
) — Go -
golo
— Golo -
gradle
— Gradle -
groovy
— Groovy -
haml
— HAML -
handlebars
(hbs
,html.hbs
,html.handlebars
,htmlbars
) — Handlebars -
haskell
(hs
) — Haskell -
haxe
(hx
) — Haxe -
hsp
— HSP -
http
(https
) — HTTP -
hy
(hylang
) — Hy -
inform7
(i7
) — Inform 7 -
ini
(toml
) — TOML, also INI -
irpf90
— IRPF90 -
isbl
— ISBL -
java
(jsp
) — Java -
javascript
(js
,jsx
,mjs
,cjs
) — Javascript -
jboss-cli
(wildfly-cli
) — JBoss CLI -
json
— JSON -
julia
— Julia -
julia-repl
— Julia REPL -
kotlin
(kt
,kts
) — Kotlin -
lasso
(ls
,lassoscript
) — Lasso -
latex
(tex
) — LaTeX -
ldif
— LDIF -
leaf
— Leaf -
less
— Less -
lisp
— Lisp -
livecodeserver
— LiveCode -
livescript
(ls
) — LiveScript -
llvm
— LLVM IR -
lsl
— LSL (Linden Scripting Language) -
lua
— Lua -
makefile
(mk
,mak
,make
) — Makefile -
markdown
(md
,mkdown
,mkd
) — Markdown -
mathematica
(mma
,wl
) — Mathematica -
matlab
— Matlab -
maxima
— Maxima -
mel
— MEL -
mercury
(m
,moo
) — Mercury -
mipsasm
(mips
) — MIPS Assembly -
mizar
— Mizar -
mojolicious
— Mojolicious -
monkey
— Monkey -
moonscript
(moon
) — MoonScript -
n1ql
— N1QL -
nestedtext
(nt
) — Nested Text -
nginx
(nginxconf
) — Nginx config -
nim
— Nim -
nix
(nixos
) — Nix -
node-repl
— Node REPL -
nsis
— NSIS -
objectivec
(mm
,objc
,obj-c
,obj-c++
,objective-c++
) — Objective-C -
ocaml
(ml
) — OCaml -
openscad
(scad
) — OpenSCAD -
oxygene
— Oxygene -
parser3
— Parser3 -
perl
(pl
,pm
) — Perl -
pf
(pf.conf
) — Packet Filter config -
pgsql
(postgres
,postgresql
) — PostgreSQL -
php
— undefined -
php-template
— PHP template -
plaintext
(text
,txt
) — Plain text -
pony
— Pony -
powershell
(ps
,ps1
) — PowerShell -
processing
(pde
) — Processing -
profile
— Python profiler -
prolog
— Prolog -
properties
— .properties -
protobuf
— Protocol Buffers -
puppet
(pp
) — Puppet -
purebasic
(pb
,pbi
) — PureBASIC -
python
(py
,gyp
,ipython
) — Python -
python-repl
(pycon
) — undefined -
q
(k
,kdb
) — Q -
qml
(qt
) — QML -
r
— R -
reasonml
(re
) — ReasonML -
rib
— RenderMan RIB -
roboconf
(graph
,instances
) — Roboconf -
routeros
(mikrotik
) — Microtik RouterOS script -
rsl
— RenderMan RSL -
ruby
(rb
,gemspec
,podspec
,thor
,irb
) — Ruby -
ruleslanguage
— Oracle Rules Language -
rust
(rs
) — Rust -
sas
— SAS -
scala
— Scala -
scheme
— Scheme -
scilab
(sci
) — Scilab -
scss
— SCSS -
shell
(console
,shellsession
) — Shell Session -
smali
— Smali -
smalltalk
(st
) — Smalltalk -
sml
(ml
) — SML (Standard ML) -
sqf
— SQF -
sql
— SQL -
stan
(stanfuncs
) — Stan -
stata
(do
,ado
) — Stata -
step21
(p21
,step
,stp
) — STEP Part 21 -
stylus
(styl
) — Stylus -
subunit
— SubUnit -
swift
— Swift -
taggerscript
— Tagger Script -
tap
— Test Anything Protocol -
tcl
(tk
) — Tcl -
thrift
— Thrift -
tp
— TP -
twig
(craftcms
) — Twig -
typescript
(ts
,tsx
) — TypeScript -
vala
— Vala -
vbnet
(vb
) — Visual Basic .NET -
vbscript
(vbs
) — VBScript -
vbscript-html
— VBScript in HTML -
verilog
(v
,sv
,svh
) — Verilog -
vhdl
— VHDL -
vim
— Vim Script -
wasm
— WebAssembly -
x86asm
— Intel x86 Assembly -
xl
(tao
) — XL -
xml
(html
,xhtml
,rss
,atom
,xjb
,xsd
,xsl
,plist
,wsf
,svg
) — HTML, XML -
xquery
(xpath
,xq
) — XQuery -
yaml
(yml
) — YAML -
zephir
(zep
) — Zephir
Related
Projects
emphasize
— Syntax highlighting in ANSI, for the terminalreact-lowlight
— Syntax highlighter for Reactreact-syntax-highlighter
— React component for syntax highlightingrehype-highlight
— Syntax highlighting in rehyperemark-highlight.js
— Syntax highlighting in remarkjstransformer-lowlight
— Syntax highlighting for JSTransformers and Pug