Package Exports
- refractor
- refractor/lang/abap.js
- refractor/lang/abnf.js
- refractor/lang/actionscript.js
- refractor/lang/ada.js
- refractor/lang/agda.js
- refractor/lang/al.js
- refractor/lang/antlr4.js
- refractor/lang/apacheconf.js
- refractor/lang/apex.js
- refractor/lang/apl.js
- refractor/lang/applescript.js
- refractor/lang/aql.js
- refractor/lang/arduino.js
- refractor/lang/arff.js
- refractor/lang/asciidoc.js
- refractor/lang/asm6502.js
- refractor/lang/aspnet.js
- refractor/lang/autohotkey.js
- refractor/lang/autoit.js
- refractor/lang/bash
- refractor/lang/bash.js
- refractor/lang/basic.js
- refractor/lang/batch.js
- refractor/lang/bbcode.js
- refractor/lang/birb.js
- refractor/lang/bison.js
- refractor/lang/bnf.js
- refractor/lang/brainfuck.js
- refractor/lang/brightscript.js
- refractor/lang/bro.js
- refractor/lang/bsl.js
- refractor/lang/c
- refractor/lang/c.js
- refractor/lang/cil.js
- refractor/lang/clike
- refractor/lang/clike.js
- refractor/lang/clojure.js
- refractor/lang/cmake.js
- refractor/lang/coffeescript.js
- refractor/lang/concurnas.js
- refractor/lang/cpp.js
- refractor/lang/crystal.js
- refractor/lang/csharp
- refractor/lang/csharp.js
- refractor/lang/csp.js
- refractor/lang/css
- refractor/lang/css-extras
- refractor/lang/css-extras.js
- refractor/lang/css.js
- refractor/lang/cypher.js
- refractor/lang/d.js
- refractor/lang/dart.js
- refractor/lang/dataweave.js
- refractor/lang/dax.js
- refractor/lang/dhall.js
- refractor/lang/diff
- refractor/lang/diff.js
- refractor/lang/django.js
- refractor/lang/dns-zone-file.js
- refractor/lang/docker.js
- refractor/lang/ebnf.js
- refractor/lang/editorconfig.js
- refractor/lang/eiffel.js
- refractor/lang/ejs.js
- refractor/lang/elixir.js
- refractor/lang/elm.js
- refractor/lang/erb.js
- refractor/lang/erlang.js
- refractor/lang/etlua.js
- refractor/lang/excel-formula.js
- refractor/lang/factor.js
- refractor/lang/firestore-security-rules.js
- refractor/lang/flow.js
- refractor/lang/fortran.js
- refractor/lang/fsharp.js
- refractor/lang/ftl.js
- refractor/lang/gcode.js
- refractor/lang/gdscript.js
- refractor/lang/gedcom.js
- refractor/lang/gherkin.js
- refractor/lang/git
- refractor/lang/git.js
- refractor/lang/glsl.js
- refractor/lang/gml.js
- refractor/lang/go
- refractor/lang/go.js
- refractor/lang/graphql
- refractor/lang/graphql.js
- refractor/lang/groovy.js
- refractor/lang/haml.js
- refractor/lang/handlebars
- refractor/lang/handlebars.js
- refractor/lang/haskell.js
- refractor/lang/haxe.js
- refractor/lang/hcl.js
- refractor/lang/hlsl.js
- refractor/lang/hpkp.js
- refractor/lang/hsts.js
- refractor/lang/http
- refractor/lang/http.js
- refractor/lang/ichigojam.js
- refractor/lang/icon.js
- refractor/lang/iecst.js
- refractor/lang/ignore.js
- refractor/lang/inform7.js
- refractor/lang/ini.js
- refractor/lang/io.js
- refractor/lang/j.js
- refractor/lang/java
- refractor/lang/java.js
- refractor/lang/javadoc.js
- refractor/lang/javadoclike.js
- refractor/lang/javascript
- refractor/lang/javascript.js
- refractor/lang/javastacktrace.js
- refractor/lang/jolie.js
- refractor/lang/jq.js
- refractor/lang/js-extras
- refractor/lang/js-extras.js
- refractor/lang/js-templates
- refractor/lang/js-templates.js
- refractor/lang/jsdoc.js
- refractor/lang/json
- refractor/lang/json.js
- refractor/lang/json5.js
- refractor/lang/jsonp.js
- refractor/lang/jsstacktrace.js
- refractor/lang/jsx
- refractor/lang/jsx.js
- refractor/lang/julia.js
- refractor/lang/keyman.js
- refractor/lang/kotlin.js
- refractor/lang/latex.js
- refractor/lang/latte.js
- refractor/lang/less.js
- refractor/lang/lilypond.js
- refractor/lang/liquid.js
- refractor/lang/lisp.js
- refractor/lang/livescript.js
- refractor/lang/llvm.js
- refractor/lang/lolcode.js
- refractor/lang/lua.js
- refractor/lang/makefile.js
- refractor/lang/markdown
- refractor/lang/markdown.js
- refractor/lang/markup
- refractor/lang/markup-templating
- refractor/lang/markup-templating.js
- refractor/lang/markup.js
- refractor/lang/matlab.js
- refractor/lang/mel.js
- refractor/lang/mizar.js
- refractor/lang/mongodb.js
- refractor/lang/monkey.js
- refractor/lang/moonscript.js
- refractor/lang/n1ql.js
- refractor/lang/n4js.js
- refractor/lang/nand2tetris-hdl.js
- refractor/lang/naniscript.js
- refractor/lang/nasm.js
- refractor/lang/neon.js
- refractor/lang/nginx.js
- refractor/lang/nim.js
- refractor/lang/nix.js
- refractor/lang/nsis.js
- refractor/lang/objectivec
- refractor/lang/objectivec.js
- refractor/lang/ocaml
- refractor/lang/ocaml.js
- refractor/lang/opencl.js
- refractor/lang/oz.js
- refractor/lang/parigp.js
- refractor/lang/parser.js
- refractor/lang/pascal.js
- refractor/lang/pascaligo.js
- refractor/lang/pcaxis.js
- refractor/lang/peoplecode.js
- refractor/lang/perl.js
- refractor/lang/php
- refractor/lang/php-extras.js
- refractor/lang/php.js
- refractor/lang/phpdoc.js
- refractor/lang/plsql.js
- refractor/lang/powerquery.js
- refractor/lang/powershell
- refractor/lang/powershell.js
- refractor/lang/processing.js
- refractor/lang/prolog.js
- refractor/lang/promql.js
- refractor/lang/properties.js
- refractor/lang/protobuf
- refractor/lang/protobuf.js
- refractor/lang/pug.js
- refractor/lang/puppet.js
- refractor/lang/pure.js
- refractor/lang/purebasic.js
- refractor/lang/purescript.js
- refractor/lang/python
- refractor/lang/python.js
- refractor/lang/q.js
- refractor/lang/qml.js
- refractor/lang/qore.js
- refractor/lang/r.js
- refractor/lang/racket.js
- refractor/lang/reason.js
- refractor/lang/regex.js
- refractor/lang/renpy.js
- refractor/lang/rest.js
- refractor/lang/rip.js
- refractor/lang/roboconf.js
- refractor/lang/robotframework.js
- refractor/lang/ruby
- refractor/lang/ruby.js
- refractor/lang/rust.js
- refractor/lang/sas.js
- refractor/lang/sass.js
- refractor/lang/scala.js
- refractor/lang/scheme.js
- refractor/lang/scss
- refractor/lang/scss.js
- refractor/lang/shell-session.js
- refractor/lang/smali.js
- refractor/lang/smalltalk.js
- refractor/lang/smarty.js
- refractor/lang/sml.js
- refractor/lang/solidity.js
- refractor/lang/solution-file.js
- refractor/lang/soy.js
- refractor/lang/sparql.js
- refractor/lang/splunk-spl.js
- refractor/lang/sqf.js
- refractor/lang/sql
- refractor/lang/sql.js
- refractor/lang/stan.js
- refractor/lang/stylus.js
- refractor/lang/swift
- refractor/lang/swift.js
- refractor/lang/t4-cs.js
- refractor/lang/t4-templating.js
- refractor/lang/t4-vb.js
- refractor/lang/tap.js
- refractor/lang/tcl.js
- refractor/lang/textile.js
- refractor/lang/toml.js
- refractor/lang/tsx
- refractor/lang/tsx.js
- refractor/lang/tt2.js
- refractor/lang/turtle.js
- refractor/lang/twig
- refractor/lang/twig.js
- refractor/lang/typescript
- refractor/lang/typescript.js
- refractor/lang/typoscript.js
- refractor/lang/unrealscript.js
- refractor/lang/vala.js
- refractor/lang/vbnet.js
- refractor/lang/velocity.js
- refractor/lang/verilog.js
- refractor/lang/vhdl.js
- refractor/lang/vim.js
- refractor/lang/visual-basic.js
- refractor/lang/warpscript.js
- refractor/lang/wasm.js
- refractor/lang/wiki.js
- refractor/lang/xeora.js
- refractor/lang/xml-doc.js
- refractor/lang/xojo.js
- refractor/lang/xquery.js
- refractor/lang/yaml
- refractor/lang/yaml.js
- refractor/lang/yang.js
- refractor/lang/zig.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (refractor) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
refractor
Lightweight, robust, elegant virtual syntax highlighting using Prism. Useful for virtual DOMs and non-HTML things. Perfect for React, VDOM, and others.
refractor
is built to work with all syntaxes supported by [highlight.js][].
There are three builds:
lib/core.js
— 0 languageslib/common.js
(default) — 36 languageslib/all.js
— 258 languages
Want to use highlight.js
instead?
Try lowlight
!
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 refractor
Use
import {refractor} from 'refractor'
var root = refractor.highlight('"use strict";', 'js')
console.log(root)
Yields:
{
type: 'root',
children: [
{
type: 'element',
tagName: 'span',
properties: {className: ['token', 'string']},
children: [{type: 'text', value: '"use strict"'}]
},
{
type: 'element',
tagName: 'span',
properties: {className: ['token', 'punctuation']},
children: [{type: 'text', value: ';'}]
}
]
}
Which serialized with hast-util-to-html
(or rehype
)
yields:
<span class="token string">"use strict"</span><span class="token punctuation">;</span>
Tip: Use
hast-to-hyperscript
to transform to other virtual DOMs, or DIY.
API
This package exports the following identifiers: refractor
.
There is no default export.
refractor.register(syntax)
Register a syntax.
Needed if you’re using refractor/core
.
Example
import {refractor} from 'refractor/core.js'
import markdown from 'refractor/lang/markdown.js'
refractor.register(markdown)
console.log(refractor.highlight('*Emphasis*', 'markdown'))
Yields:
{
type: 'root',
children: [
{type: 'element', tagName: 'span', properties: [Object], children: [Array]}
]
}
refractor.alias(name[, alias])
Register a new alias
for the name
language.
Signatures
alias(name, alias|list)
alias(aliases)
Parameters
name
(string
) — Name of a registered languagealias
(string
) — New alias for the registered languagelist
(Array.<alias>
) — List of aliasesaliases
(Object.<alias|list>
) — Map where each key is aname
and each value analias
or alist
Example
import {refractor} from 'refractor/core.js'
import markdown from 'refractor/lang/markdown.js'
refractor.register(markdown)
// refractor.highlight('*Emphasis*', 'mdown')
// ^ would throw: Error: Unknown language: `mdown` is not registered
refractor.alias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})
refractor.highlight('*Emphasis*', 'mdown')
// ^ Works!
refractor.highlight(value, language)
Parse value
(string
) according to the language
(name or alias)
syntax.
Returns
Virtual node representing the highlighted value (Root
).
Example
import {refractor} from 'refractor/core.js'
import css from 'refractor/lang/css.js'
refractor.register(css)
console.log(refractor.highlight('em { color: red }', 'css'))
Yields:
{
type: 'root',
children: [
{type: 'element', tagName: 'span', properties: [Object], children: [Array]},
{type: 'text', value: ' '},
// …
{type: 'text', value: ' red '},
{type: 'element', tagName: 'span', properties: [Object], children: [Array]}
]
}
refractor.registered(language)
Check if a language
(name or alias) is registered.
Example
import {refractor} from 'refractor/core.js'
import markdown from 'refractor/lang/markdown.js'
console.log(refractor.registered('markdown'))
refractor.register(markdown)
console.log(refractor.registered('markdown'))
Yields:
false
true
refractor.listLanguages()
List all registered languages (names and aliases).
Returns
Array.<string>
.
Example
import {refractor} from 'refractor/core.js'
import markdown from 'refractor/lang/markdown.js'
console.log(refractor.listLanguages())
refractor.register(markdown)
console.log(refractor.listLanguages())
Yields:
[]
[
'markup', // Note that `markup` (a lot of xml based languages) is a dep of markdown.
'html',
// …
'markdown',
'md'
]
Browser
It is not suggested to import refractor
itself in the browser as that would
include a 500kb (187kb minzipped) of code.
Instead import refractor/core.js
and include only the needed syntaxes.
For example:
import {refractor} from 'refractor/core.js'
import jsx from 'refractor/lang/jsx.js'
refractor.register(jsx)
console.log(refractor.highlight('<Dropdown primary />', 'jsx'))
…when using esbuild this results in 35.8kB of code (14kb minzipped).
Plugins
refractor
does not support Prism plugins:
- Prism plugins often deal with the DOM, not Prism tokens
- Prism is made using global variables instead of a module format, so all syntaxes below are custom built to work so you can import just what you need
Syntaxes
If you’re using refractor/lib/core.js
, no syntaxes are included.
Checked syntaxes are included if you import refractor
(or
refractor/lib/common.js
).
Unchecked syntaxes are available through refractor/lib/all.js
.
Note that Prism works as a singleton. That means that if you register a syntax anywhere in your project, it’ll become available everywhere!
Only these custom built syntaxes will work with refractor
because Prism’s own
syntaxes are made to work with global variables and are not requirable.
-
arduino
-
bash
— alias:shell
-
basic
-
c
-
clike
-
cpp
-
csharp
— alias:cs
,dotnet
-
css
-
diff
-
go
-
ini
-
java
-
javascript
— alias:js
-
json
— alias:webmanifest
-
kotlin
— alias:kt
,kts
-
less
-
lua
-
makefile
-
markdown
— alias:md
-
markup
— alias:atom
,html
,mathml
,rss
,ssml
,svg
,xml
-
markup-templating
-
objectivec
— alias:objc
-
perl
-
php
-
python
— alias:py
-
r
-
regex
-
ruby
— alias:rb
-
rust
-
sass
-
scss
-
sql
-
swift
-
typescript
— alias:ts
-
vbnet
-
yaml
— alias:yml
-
abap
-
abnf
-
actionscript
-
ada
-
agda
-
al
-
antlr4
— alias:g4
-
apacheconf
-
apex
-
apl
-
applescript
-
aql
-
arff
-
asciidoc
— alias:adoc
-
asm6502
-
aspnet
-
autohotkey
-
autoit
-
batch
-
bbcode
— alias:shortcode
-
birb
-
bison
-
bnf
— alias:rbnf
-
brainfuck
-
brightscript
-
bro
-
bsl
— alias:oscript
-
cfscript
— alias:cfc
-
chaiscript
-
cil
-
clojure
-
cmake
-
cobol
-
coffeescript
— alias:coffee
-
concurnas
— alias:conc
-
coq
-
crystal
-
csp
-
css-extras
-
csv
-
cypher
-
d
-
dart
-
dataweave
-
dax
-
dhall
-
django
— alias:jinja2
-
dns-zone-file
— alias:dns-zone
-
docker
— alias:dockerfile
-
dot
— alias:gv
-
ebnf
-
editorconfig
-
eiffel
-
ejs
— alias:eta
-
elixir
-
elm
-
erb
-
erlang
-
etlua
-
excel-formula
— alias:xls
,xlsx
-
factor
-
false
-
firestore-security-rules
-
flow
-
fortran
-
fsharp
-
ftl
-
gcode
-
gdscript
-
gedcom
-
gherkin
-
git
-
glsl
-
gml
— alias:gamemakerlanguage
-
graphql
-
groovy
-
haml
-
handlebars
— alias:hbs
-
haskell
— alias:hs
-
haxe
-
hcl
-
hlsl
-
hpkp
-
hsts
-
http
-
ichigojam
-
icon
-
icu-message-format
-
idris
— alias:idr
-
iecst
-
ignore
— alias:gitignore
,hgignore
,npmignore
-
inform7
-
io
-
j
-
javadoc
-
javadoclike
-
javastacktrace
-
jexl
-
jolie
-
jq
-
js-extras
-
js-templates
-
jsdoc
-
json5
-
jsonp
-
jsstacktrace
-
jsx
-
julia
-
keyman
-
kumir
— alias:kum
-
latex
— alias:context
,tex
-
latte
-
lilypond
— alias:ly
-
liquid
-
lisp
— alias:elisp
,emacs
,emacs-lisp
-
livescript
-
llvm
-
log
-
lolcode
-
matlab
-
mel
-
mizar
-
mongodb
-
monkey
-
moonscript
— alias:moon
-
n1ql
-
n4js
— alias:n4jsd
-
nand2tetris-hdl
-
naniscript
— alias:nani
-
nasm
-
neon
-
nevod
-
nginx
-
nim
-
nix
-
nsis
-
ocaml
-
opencl
-
openqasm
— alias:qasm
-
oz
-
parigp
-
parser
-
pascal
— alias:objectpascal
-
pascaligo
-
pcaxis
— alias:px
-
peoplecode
— alias:pcode
-
php-extras
-
phpdoc
-
plsql
-
powerquery
— alias:mscript
,pq
-
powershell
-
processing
-
prolog
-
promql
-
properties
-
protobuf
-
psl
-
pug
-
puppet
-
pure
-
purebasic
— alias:pbfasm
-
purescript
— alias:purs
-
q
-
qml
-
qore
-
qsharp
— alias:qs
-
racket
— alias:rkt
-
reason
-
rego
-
renpy
— alias:rpy
-
rest
-
rip
-
roboconf
-
robotframework
— alias:robot
-
sas
-
scala
-
scheme
-
shell-session
— alias:sh-session
,shellsession
-
smali
-
smalltalk
-
smarty
-
sml
— alias:smlnj
-
solidity
— alias:sol
-
solution-file
— alias:sln
-
soy
-
sparql
— alias:rq
-
splunk-spl
-
sqf
-
squirrel
-
stan
-
stylus
-
t4-cs
— alias:t4
-
t4-templating
-
t4-vb
-
tap
-
tcl
-
textile
-
toml
-
tsx
-
tt2
-
turtle
— alias:trig
-
twig
-
typoscript
— alias:tsconfig
-
unrealscript
— alias:uc
,uscript
-
uri
— alias:url
-
v
-
vala
-
velocity
-
verilog
-
vhdl
-
vim
-
visual-basic
— alias:vb
,vba
-
warpscript
-
wasm
-
wiki
-
wolfram
— alias:mathematica
,nb
,wl
-
xeora
— alias:xeoracube
-
xml-doc
-
xojo
-
xquery
-
yang
-
zig
Related
lowlight
— Same, but based onhighlight.js
Projects
react-syntax-highlighter
— React component for syntax highlightingrehype-prism
— Syntax highlighting in rehypereact-refractor
— Syntax highlighter for React