# refractor [![Build][build-badge]][build] [![Coverage][coverage-badge]][coverage] [![Downloads][downloads-badge]][downloads] [![Size][size-badge]][size] 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 [Prism][], that’s [277 languages][names] (as of [`prism@1.27.0`][prismjs]) and all [themes][]. Want to use [`highlight.js`][hljs] instead? Try [`lowlight`][lowlight]! ## Contents * [Install](#install) * [Use](#use) * [API](#api) * [`refractor.register(syntax)`](#refractorregistersyntax) * [`refractor.alias(name[, alias])`](#refractoraliasname-alias) * [`refractor.highlight(value, language)`](#refractorhighlightvalue-language) * [`refractor.registered(language)`](#refractorregisteredlanguage) * [`refractor.listLanguages()`](#refractorlistlanguages) * [Browser](#browser) * [Plugins](#plugins) * [Syntaxes](#syntaxes) * [Related](#related) * [Projects](#projects) ## Install [npm][]: ```sh npm install refractor ``` [Use in the browser »][browser] ## Use ```js var refractor = require('refractor') var nodes = refractor.highlight('"use strict";', 'js') console.log(nodes) ``` Yields: ```js [ { 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 [`rehype`][rehype] or [`hast-util-to-html`][to-html] yields (you may have to wrap it into a fragment like so: `{type: 'root', children: nodes}`): ```html "use strict"; ``` > **Tip**: Use [`hast-to-hyperscript`][to-hyperscript] to transform to other > virtual DOMs, or DIY. ## API ### `refractor.register(syntax)` Register a [syntax][]. Needed if you’re using [`refractor/core`][browser]. ###### Example ```js var refractor = require('refractor/core') var markdown = require('refractor/lang/markdown') refractor.register(markdown) console.log(refractor.highlight('*Emphasis*', 'markdown')) ``` Yields: ```js [ { type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object], [Object], [Object]] } ] ``` ### `refractor.alias(name[, alias])` Register a new `alias` for the `name` language. ###### Signatures * `alias(name, alias|list)` * `alias(aliases)` ###### Parameters * `name` (`string`) — [Name][names] of a registered language * `alias` (`string`) — New alias for the registered language * `list` (`Array.`) — List of aliases * `aliases` (`Object.`) — Map where each key is a `name` and each value an `alias` or a `list` ###### Example ```js var refractor = require('refractor/core') var markdown = require('refractor/lang/markdown') 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]) syntax. ###### Returns Virtual nodes representing the highlighted value ([`Array.`][node]). ###### Example ```js var refractor = require('refractor/core') console.log(refractor.highlight('em { color: red }', 'css')) ``` Yields: ```js [ { type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object]] }, {type: 'text', value: ' '}, // … {type: 'text', value: ' red '}, { type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object]] } ] ``` ### `refractor.registered(language)` Check if a `language` ([name or alias][syntax]) is registered. ###### Example ```js var refractor = require('refractor/core') var markdown = require('refractor/lang/markdown') console.log(refractor.registered('markdown')) refractor.register(markdown) console.log(refractor.registered('markdown')) ``` Yields: ```js false true ``` ### `refractor.listLanguages()` List all registered languages ([names and aliases][syntax]). ###### Returns `Array.`. ###### Example ```js var refractor = require('refractor/core') var markdown = require('refractor/lang/markdown') console.log(refractor.listLanguages()) refractor.register(markdown) console.log(refractor.listLanguages()) ``` Yields: ```js [ 'markup', 'html', // … 'javascript', 'js' ] [ 'markup', 'html', // … 'javascript', 'js', 'markdown', 'md' ] ``` ## Browser I do not suggest using the [pre-bundled][releases] files or requiring `refractor` itself in the browser as that would include a 376kb (139kb GZipped) of code. Instead require `refractor/core` and include only the needed syntaxes. For example: ```js var refractor = require('refractor/core') refractor.register(require('refractor/lang/jsx')) console.log(refractor.highlight('', 'jsx')) ``` Yields: ```js [ { type: 'element', tagName: 'span', properties: {className: ['token', 'tag']}, children: [ {type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object], [Object]]}, {type: 'text', value: ' '}, {type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object]]}, {type: 'text', value: ' '}, {type: 'element', tagName: 'span', properties: {className: [Array]}, children: [[Object]]} ] } ] ``` …When using [browserify][] and minifying with [tinyify][] this results in just 65kb of code (23kb with GZip). ## Plugins `refractor` does not support Prism plugins: 1. Prism plugins often deal with the DOM, not Prism tokens 2. Prism is made using global variables instead of a module format, so all syntaxes below are custom built to work so you can `require` just what you need ## Syntaxes All syntaxes are included if you `require('refractor')`. If you’re using `refractor/core`, checked syntaxes are always included, but unchecked syntaxes are not and must be `require`d and [`register`][register]ed. Unlike in Prism, `cssExtras` and `phpExtras` are camel-cased instead of dash-cased. 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. * [x] [`clike`](https://github.com/wooorm/refractor/blob/main/lang/clike.js) * [x] [`css`](https://github.com/wooorm/refractor/blob/main/lang/css.js) * [x] [`javascript`](https://github.com/wooorm/refractor/blob/main/lang/javascript.js) — alias: `js` * [x] [`markup`](https://github.com/wooorm/refractor/blob/main/lang/markup.js) — alias: `html`, `mathml`, `svg`, `xml`, `ssml`, `atom`, `rss` * [ ] [`abap`](https://github.com/wooorm/refractor/blob/main/lang/abap.js) * [ ] [`abnf`](https://github.com/wooorm/refractor/blob/main/lang/abnf.js) * [ ] [`actionscript`](https://github.com/wooorm/refractor/blob/main/lang/actionscript.js) * [ ] [`ada`](https://github.com/wooorm/refractor/blob/main/lang/ada.js) * [ ] [`agda`](https://github.com/wooorm/refractor/blob/main/lang/agda.js) * [ ] [`al`](https://github.com/wooorm/refractor/blob/main/lang/al.js) * [ ] [`antlr4`](https://github.com/wooorm/refractor/blob/main/lang/antlr4.js) — alias: `g4` * [ ] [`apacheconf`](https://github.com/wooorm/refractor/blob/main/lang/apacheconf.js) * [ ] [`apex`](https://github.com/wooorm/refractor/blob/main/lang/apex.js) * [ ] [`apl`](https://github.com/wooorm/refractor/blob/main/lang/apl.js) * [ ] [`applescript`](https://github.com/wooorm/refractor/blob/main/lang/applescript.js) * [ ] [`aql`](https://github.com/wooorm/refractor/blob/main/lang/aql.js) * [ ] [`arduino`](https://github.com/wooorm/refractor/blob/main/lang/arduino.js) — alias: `ino` * [ ] [`arff`](https://github.com/wooorm/refractor/blob/main/lang/arff.js) * [ ] [`asciidoc`](https://github.com/wooorm/refractor/blob/main/lang/asciidoc.js) — alias: `adoc` * [ ] [`asm6502`](https://github.com/wooorm/refractor/blob/main/lang/asm6502.js) * [ ] [`asmatmel`](https://github.com/wooorm/refractor/blob/main/lang/asmatmel.js) * [ ] [`aspnet`](https://github.com/wooorm/refractor/blob/main/lang/aspnet.js) * [ ] [`autohotkey`](https://github.com/wooorm/refractor/blob/main/lang/autohotkey.js) * [ ] [`autoit`](https://github.com/wooorm/refractor/blob/main/lang/autoit.js) * [ ] [`avisynth`](https://github.com/wooorm/refractor/blob/main/lang/avisynth.js) — alias: `avs` * [ ] [`avroIdl`](https://github.com/wooorm/refractor/blob/main/lang/avro-idl.js) * [ ] [`bash`](https://github.com/wooorm/refractor/blob/main/lang/bash.js) — alias: `shell` * [ ] [`basic`](https://github.com/wooorm/refractor/blob/main/lang/basic.js) * [ ] [`batch`](https://github.com/wooorm/refractor/blob/main/lang/batch.js) * [ ] [`bbcode`](https://github.com/wooorm/refractor/blob/main/lang/bbcode.js) — alias: `shortcode` * [ ] [`bicep`](https://github.com/wooorm/refractor/blob/main/lang/bicep.js) * [ ] [`birb`](https://github.com/wooorm/refractor/blob/main/lang/birb.js) * [ ] [`bison`](https://github.com/wooorm/refractor/blob/main/lang/bison.js) * [ ] [`bnf`](https://github.com/wooorm/refractor/blob/main/lang/bnf.js) — alias: `rbnf` * [ ] [`brainfuck`](https://github.com/wooorm/refractor/blob/main/lang/brainfuck.js) * [ ] [`brightscript`](https://github.com/wooorm/refractor/blob/main/lang/brightscript.js) * [ ] [`bro`](https://github.com/wooorm/refractor/blob/main/lang/bro.js) * [ ] [`bsl`](https://github.com/wooorm/refractor/blob/main/lang/bsl.js) * [ ] [`c`](https://github.com/wooorm/refractor/blob/main/lang/c.js) * [ ] [`cfscript`](https://github.com/wooorm/refractor/blob/main/lang/cfscript.js) * [ ] [`chaiscript`](https://github.com/wooorm/refractor/blob/main/lang/chaiscript.js) * [ ] [`cil`](https://github.com/wooorm/refractor/blob/main/lang/cil.js) * [ ] [`clojure`](https://github.com/wooorm/refractor/blob/main/lang/clojure.js) * [ ] [`cmake`](https://github.com/wooorm/refractor/blob/main/lang/cmake.js) * [ ] [`cobol`](https://github.com/wooorm/refractor/blob/main/lang/cobol.js) * [ ] [`coffeescript`](https://github.com/wooorm/refractor/blob/main/lang/coffeescript.js) — alias: `coffee` * [ ] [`concurnas`](https://github.com/wooorm/refractor/blob/main/lang/concurnas.js) — alias: `conc` * [ ] [`coq`](https://github.com/wooorm/refractor/blob/main/lang/coq.js) * [ ] [`cpp`](https://github.com/wooorm/refractor/blob/main/lang/cpp.js) * [ ] [`crystal`](https://github.com/wooorm/refractor/blob/main/lang/crystal.js) * [ ] [`csharp`](https://github.com/wooorm/refractor/blob/main/lang/csharp.js) — alias: `dotnet`, `cs` * [ ] [`cshtml`](https://github.com/wooorm/refractor/blob/main/lang/cshtml.js) — alias: `razor` * [ ] [`csp`](https://github.com/wooorm/refractor/blob/main/lang/csp.js) * [ ] [`cssExtras`](https://github.com/wooorm/refractor/blob/main/lang/css-extras.js) * [ ] [`csv`](https://github.com/wooorm/refractor/blob/main/lang/csv.js) * [ ] [`cypher`](https://github.com/wooorm/refractor/blob/main/lang/cypher.js) * [ ] [`d`](https://github.com/wooorm/refractor/blob/main/lang/d.js) * [ ] [`dart`](https://github.com/wooorm/refractor/blob/main/lang/dart.js) * [ ] [`dataweave`](https://github.com/wooorm/refractor/blob/main/lang/dataweave.js) * [ ] [`dax`](https://github.com/wooorm/refractor/blob/main/lang/dax.js) * [ ] [`dhall`](https://github.com/wooorm/refractor/blob/main/lang/dhall.js) * [ ] [`diff`](https://github.com/wooorm/refractor/blob/main/lang/diff.js) * [ ] [`django`](https://github.com/wooorm/refractor/blob/main/lang/django.js) — alias: `jinja2` * [ ] [`dnsZoneFile`](https://github.com/wooorm/refractor/blob/main/lang/dns-zone-file.js) * [ ] [`docker`](https://github.com/wooorm/refractor/blob/main/lang/docker.js) — alias: `dockerfile` * [ ] [`dot`](https://github.com/wooorm/refractor/blob/main/lang/dot.js) — alias: `gv` * [ ] [`ebnf`](https://github.com/wooorm/refractor/blob/main/lang/ebnf.js) * [ ] [`editorconfig`](https://github.com/wooorm/refractor/blob/main/lang/editorconfig.js) * [ ] [`eiffel`](https://github.com/wooorm/refractor/blob/main/lang/eiffel.js) * [ ] [`ejs`](https://github.com/wooorm/refractor/blob/main/lang/ejs.js) — alias: `eta` * [ ] [`elixir`](https://github.com/wooorm/refractor/blob/main/lang/elixir.js) * [ ] [`elm`](https://github.com/wooorm/refractor/blob/main/lang/elm.js) * [ ] [`erb`](https://github.com/wooorm/refractor/blob/main/lang/erb.js) * [ ] [`erlang`](https://github.com/wooorm/refractor/blob/main/lang/erlang.js) * [ ] [`etlua`](https://github.com/wooorm/refractor/blob/main/lang/etlua.js) * [ ] [`excelFormula`](https://github.com/wooorm/refractor/blob/main/lang/excel-formula.js) * [ ] [`factor`](https://github.com/wooorm/refractor/blob/main/lang/factor.js) * [ ] [`$false`](https://github.com/wooorm/refractor/blob/main/lang/false.js) * [ ] [`firestoreSecurityRules`](https://github.com/wooorm/refractor/blob/main/lang/firestore-security-rules.js) * [ ] [`flow`](https://github.com/wooorm/refractor/blob/main/lang/flow.js) * [ ] [`fortran`](https://github.com/wooorm/refractor/blob/main/lang/fortran.js) * [ ] [`fsharp`](https://github.com/wooorm/refractor/blob/main/lang/fsharp.js) * [ ] [`ftl`](https://github.com/wooorm/refractor/blob/main/lang/ftl.js) * [ ] [`gap`](https://github.com/wooorm/refractor/blob/main/lang/gap.js) * [ ] [`gcode`](https://github.com/wooorm/refractor/blob/main/lang/gcode.js) * [ ] [`gdscript`](https://github.com/wooorm/refractor/blob/main/lang/gdscript.js) * [ ] [`gedcom`](https://github.com/wooorm/refractor/blob/main/lang/gedcom.js) * [ ] [`gherkin`](https://github.com/wooorm/refractor/blob/main/lang/gherkin.js) * [ ] [`git`](https://github.com/wooorm/refractor/blob/main/lang/git.js) * [ ] [`glsl`](https://github.com/wooorm/refractor/blob/main/lang/glsl.js) * [ ] [`gml`](https://github.com/wooorm/refractor/blob/main/lang/gml.js) * [ ] [`gn`](https://github.com/wooorm/refractor/blob/main/lang/gn.js) — alias: `gni` * [ ] [`goModule`](https://github.com/wooorm/refractor/blob/main/lang/go-module.js) * [ ] [`go`](https://github.com/wooorm/refractor/blob/main/lang/go.js) * [ ] [`graphql`](https://github.com/wooorm/refractor/blob/main/lang/graphql.js) * [ ] [`groovy`](https://github.com/wooorm/refractor/blob/main/lang/groovy.js) * [ ] [`haml`](https://github.com/wooorm/refractor/blob/main/lang/haml.js) * [ ] [`handlebars`](https://github.com/wooorm/refractor/blob/main/lang/handlebars.js) — alias: `hbs` * [ ] [`haskell`](https://github.com/wooorm/refractor/blob/main/lang/haskell.js) — alias: `hs` * [ ] [`haxe`](https://github.com/wooorm/refractor/blob/main/lang/haxe.js) * [ ] [`hcl`](https://github.com/wooorm/refractor/blob/main/lang/hcl.js) * [ ] [`hlsl`](https://github.com/wooorm/refractor/blob/main/lang/hlsl.js) * [ ] [`hoon`](https://github.com/wooorm/refractor/blob/main/lang/hoon.js) * [ ] [`hpkp`](https://github.com/wooorm/refractor/blob/main/lang/hpkp.js) * [ ] [`hsts`](https://github.com/wooorm/refractor/blob/main/lang/hsts.js) * [ ] [`http`](https://github.com/wooorm/refractor/blob/main/lang/http.js) * [ ] [`ichigojam`](https://github.com/wooorm/refractor/blob/main/lang/ichigojam.js) * [ ] [`icon`](https://github.com/wooorm/refractor/blob/main/lang/icon.js) * [ ] [`icuMessageFormat`](https://github.com/wooorm/refractor/blob/main/lang/icu-message-format.js) * [ ] [`idris`](https://github.com/wooorm/refractor/blob/main/lang/idris.js) — alias: `idr` * [ ] [`iecst`](https://github.com/wooorm/refractor/blob/main/lang/iecst.js) * [ ] [`ignore`](https://github.com/wooorm/refractor/blob/main/lang/ignore.js) — alias: `gitignore`, `hgignore`, `npmignore` * [ ] [`inform7`](https://github.com/wooorm/refractor/blob/main/lang/inform7.js) * [ ] [`ini`](https://github.com/wooorm/refractor/blob/main/lang/ini.js) * [ ] [`io`](https://github.com/wooorm/refractor/blob/main/lang/io.js) * [ ] [`j`](https://github.com/wooorm/refractor/blob/main/lang/j.js) * [ ] [`java`](https://github.com/wooorm/refractor/blob/main/lang/java.js) * [ ] [`javadoc`](https://github.com/wooorm/refractor/blob/main/lang/javadoc.js) * [ ] [`javadoclike`](https://github.com/wooorm/refractor/blob/main/lang/javadoclike.js) * [ ] [`javastacktrace`](https://github.com/wooorm/refractor/blob/main/lang/javastacktrace.js) * [ ] [`jexl`](https://github.com/wooorm/refractor/blob/main/lang/jexl.js) * [ ] [`jolie`](https://github.com/wooorm/refractor/blob/main/lang/jolie.js) * [ ] [`jq`](https://github.com/wooorm/refractor/blob/main/lang/jq.js) * [ ] [`jsExtras`](https://github.com/wooorm/refractor/blob/main/lang/js-extras.js) * [ ] [`jsTemplates`](https://github.com/wooorm/refractor/blob/main/lang/js-templates.js) * [ ] [`jsdoc`](https://github.com/wooorm/refractor/blob/main/lang/jsdoc.js) * [ ] [`json`](https://github.com/wooorm/refractor/blob/main/lang/json.js) — alias: `webmanifest` * [ ] [`json5`](https://github.com/wooorm/refractor/blob/main/lang/json5.js) * [ ] [`jsonp`](https://github.com/wooorm/refractor/blob/main/lang/jsonp.js) * [ ] [`jsstacktrace`](https://github.com/wooorm/refractor/blob/main/lang/jsstacktrace.js) * [ ] [`jsx`](https://github.com/wooorm/refractor/blob/main/lang/jsx.js) * [ ] [`julia`](https://github.com/wooorm/refractor/blob/main/lang/julia.js) * [ ] [`keepalived`](https://github.com/wooorm/refractor/blob/main/lang/keepalived.js) * [ ] [`keyman`](https://github.com/wooorm/refractor/blob/main/lang/keyman.js) * [ ] [`kotlin`](https://github.com/wooorm/refractor/blob/main/lang/kotlin.js) — alias: `kt`, `kts` * [ ] [`kumir`](https://github.com/wooorm/refractor/blob/main/lang/kumir.js) — alias: `kum` * [ ] [`kusto`](https://github.com/wooorm/refractor/blob/main/lang/kusto.js) * [ ] [`latex`](https://github.com/wooorm/refractor/blob/main/lang/latex.js) — alias: `tex`, `context` * [ ] [`latte`](https://github.com/wooorm/refractor/blob/main/lang/latte.js) * [ ] [`less`](https://github.com/wooorm/refractor/blob/main/lang/less.js) * [ ] [`lilypond`](https://github.com/wooorm/refractor/blob/main/lang/lilypond.js) * [ ] [`liquid`](https://github.com/wooorm/refractor/blob/main/lang/liquid.js) * [ ] [`lisp`](https://github.com/wooorm/refractor/blob/main/lang/lisp.js) * [ ] [`livescript`](https://github.com/wooorm/refractor/blob/main/lang/livescript.js) * [ ] [`llvm`](https://github.com/wooorm/refractor/blob/main/lang/llvm.js) * [ ] [`log`](https://github.com/wooorm/refractor/blob/main/lang/log.js) * [ ] [`lolcode`](https://github.com/wooorm/refractor/blob/main/lang/lolcode.js) * [ ] [`lua`](https://github.com/wooorm/refractor/blob/main/lang/lua.js) * [ ] [`magma`](https://github.com/wooorm/refractor/blob/main/lang/magma.js) * [ ] [`makefile`](https://github.com/wooorm/refractor/blob/main/lang/makefile.js) * [ ] [`markdown`](https://github.com/wooorm/refractor/blob/main/lang/markdown.js) — alias: `md` * [ ] [`markupTemplating`](https://github.com/wooorm/refractor/blob/main/lang/markup-templating.js) * [ ] [`matlab`](https://github.com/wooorm/refractor/blob/main/lang/matlab.js) * [ ] [`maxscript`](https://github.com/wooorm/refractor/blob/main/lang/maxscript.js) * [ ] [`mel`](https://github.com/wooorm/refractor/blob/main/lang/mel.js) * [ ] [`mermaid`](https://github.com/wooorm/refractor/blob/main/lang/mermaid.js) * [ ] [`mizar`](https://github.com/wooorm/refractor/blob/main/lang/mizar.js) * [ ] [`mongodb`](https://github.com/wooorm/refractor/blob/main/lang/mongodb.js) * [ ] [`monkey`](https://github.com/wooorm/refractor/blob/main/lang/monkey.js) * [ ] [`moonscript`](https://github.com/wooorm/refractor/blob/main/lang/moonscript.js) — alias: `moon` * [ ] [`n1ql`](https://github.com/wooorm/refractor/blob/main/lang/n1ql.js) * [ ] [`n4js`](https://github.com/wooorm/refractor/blob/main/lang/n4js.js) — alias: `n4jsd` * [ ] [`nand2tetrisHdl`](https://github.com/wooorm/refractor/blob/main/lang/nand2tetris-hdl.js) * [ ] [`naniscript`](https://github.com/wooorm/refractor/blob/main/lang/naniscript.js) * [ ] [`nasm`](https://github.com/wooorm/refractor/blob/main/lang/nasm.js) * [ ] [`neon`](https://github.com/wooorm/refractor/blob/main/lang/neon.js) * [ ] [`nevod`](https://github.com/wooorm/refractor/blob/main/lang/nevod.js) * [ ] [`nginx`](https://github.com/wooorm/refractor/blob/main/lang/nginx.js) * [ ] [`nim`](https://github.com/wooorm/refractor/blob/main/lang/nim.js) * [ ] [`nix`](https://github.com/wooorm/refractor/blob/main/lang/nix.js) * [ ] [`nsis`](https://github.com/wooorm/refractor/blob/main/lang/nsis.js) * [ ] [`objectivec`](https://github.com/wooorm/refractor/blob/main/lang/objectivec.js) — alias: `objc` * [ ] [`ocaml`](https://github.com/wooorm/refractor/blob/main/lang/ocaml.js) * [ ] [`opencl`](https://github.com/wooorm/refractor/blob/main/lang/opencl.js) * [ ] [`openqasm`](https://github.com/wooorm/refractor/blob/main/lang/openqasm.js) — alias: `qasm` * [ ] [`oz`](https://github.com/wooorm/refractor/blob/main/lang/oz.js) * [ ] [`parigp`](https://github.com/wooorm/refractor/blob/main/lang/parigp.js) * [ ] [`parser`](https://github.com/wooorm/refractor/blob/main/lang/parser.js) * [ ] [`pascal`](https://github.com/wooorm/refractor/blob/main/lang/pascal.js) — alias: `objectpascal` * [ ] [`pascaligo`](https://github.com/wooorm/refractor/blob/main/lang/pascaligo.js) * [ ] [`pcaxis`](https://github.com/wooorm/refractor/blob/main/lang/pcaxis.js) — alias: `px` * [ ] [`peoplecode`](https://github.com/wooorm/refractor/blob/main/lang/peoplecode.js) — alias: `pcode` * [ ] [`perl`](https://github.com/wooorm/refractor/blob/main/lang/perl.js) * [ ] [`phpExtras`](https://github.com/wooorm/refractor/blob/main/lang/php-extras.js) * [ ] [`php`](https://github.com/wooorm/refractor/blob/main/lang/php.js) * [ ] [`phpdoc`](https://github.com/wooorm/refractor/blob/main/lang/phpdoc.js) * [ ] [`plsql`](https://github.com/wooorm/refractor/blob/main/lang/plsql.js) * [ ] [`powerquery`](https://github.com/wooorm/refractor/blob/main/lang/powerquery.js) * [ ] [`powershell`](https://github.com/wooorm/refractor/blob/main/lang/powershell.js) * [ ] [`processing`](https://github.com/wooorm/refractor/blob/main/lang/processing.js) * [ ] [`prolog`](https://github.com/wooorm/refractor/blob/main/lang/prolog.js) * [ ] [`promql`](https://github.com/wooorm/refractor/blob/main/lang/promql.js) * [ ] [`properties`](https://github.com/wooorm/refractor/blob/main/lang/properties.js) * [ ] [`protobuf`](https://github.com/wooorm/refractor/blob/main/lang/protobuf.js) * [ ] [`psl`](https://github.com/wooorm/refractor/blob/main/lang/psl.js) * [ ] [`pug`](https://github.com/wooorm/refractor/blob/main/lang/pug.js) * [ ] [`puppet`](https://github.com/wooorm/refractor/blob/main/lang/puppet.js) * [ ] [`pure`](https://github.com/wooorm/refractor/blob/main/lang/pure.js) * [ ] [`purebasic`](https://github.com/wooorm/refractor/blob/main/lang/purebasic.js) * [ ] [`purescript`](https://github.com/wooorm/refractor/blob/main/lang/purescript.js) — alias: `purs` * [ ] [`python`](https://github.com/wooorm/refractor/blob/main/lang/python.js) — alias: `py` * [ ] [`q`](https://github.com/wooorm/refractor/blob/main/lang/q.js) * [ ] [`qml`](https://github.com/wooorm/refractor/blob/main/lang/qml.js) * [ ] [`qore`](https://github.com/wooorm/refractor/blob/main/lang/qore.js) * [ ] [`qsharp`](https://github.com/wooorm/refractor/blob/main/lang/qsharp.js) — alias: `qs` * [ ] [`r`](https://github.com/wooorm/refractor/blob/main/lang/r.js) * [ ] [`racket`](https://github.com/wooorm/refractor/blob/main/lang/racket.js) — alias: `rkt` * [ ] [`reason`](https://github.com/wooorm/refractor/blob/main/lang/reason.js) * [ ] [`regex`](https://github.com/wooorm/refractor/blob/main/lang/regex.js) * [ ] [`rego`](https://github.com/wooorm/refractor/blob/main/lang/rego.js) * [ ] [`renpy`](https://github.com/wooorm/refractor/blob/main/lang/renpy.js) — alias: `rpy` * [ ] [`rest`](https://github.com/wooorm/refractor/blob/main/lang/rest.js) * [ ] [`rip`](https://github.com/wooorm/refractor/blob/main/lang/rip.js) * [ ] [`roboconf`](https://github.com/wooorm/refractor/blob/main/lang/roboconf.js) * [ ] [`robotframework`](https://github.com/wooorm/refractor/blob/main/lang/robotframework.js) * [ ] [`ruby`](https://github.com/wooorm/refractor/blob/main/lang/ruby.js) — alias: `rb` * [ ] [`rust`](https://github.com/wooorm/refractor/blob/main/lang/rust.js) * [ ] [`sas`](https://github.com/wooorm/refractor/blob/main/lang/sas.js) * [ ] [`sass`](https://github.com/wooorm/refractor/blob/main/lang/sass.js) * [ ] [`scala`](https://github.com/wooorm/refractor/blob/main/lang/scala.js) * [ ] [`scheme`](https://github.com/wooorm/refractor/blob/main/lang/scheme.js) * [ ] [`scss`](https://github.com/wooorm/refractor/blob/main/lang/scss.js) * [ ] [`shellSession`](https://github.com/wooorm/refractor/blob/main/lang/shell-session.js) * [ ] [`smali`](https://github.com/wooorm/refractor/blob/main/lang/smali.js) * [ ] [`smalltalk`](https://github.com/wooorm/refractor/blob/main/lang/smalltalk.js) * [ ] [`smarty`](https://github.com/wooorm/refractor/blob/main/lang/smarty.js) * [ ] [`sml`](https://github.com/wooorm/refractor/blob/main/lang/sml.js) — alias: `smlnj` * [ ] [`solidity`](https://github.com/wooorm/refractor/blob/main/lang/solidity.js) — alias: `sol` * [ ] [`solutionFile`](https://github.com/wooorm/refractor/blob/main/lang/solution-file.js) * [ ] [`soy`](https://github.com/wooorm/refractor/blob/main/lang/soy.js) * [ ] [`sparql`](https://github.com/wooorm/refractor/blob/main/lang/sparql.js) — alias: `rq` * [ ] [`splunkSpl`](https://github.com/wooorm/refractor/blob/main/lang/splunk-spl.js) * [ ] [`sqf`](https://github.com/wooorm/refractor/blob/main/lang/sqf.js) * [ ] [`sql`](https://github.com/wooorm/refractor/blob/main/lang/sql.js) * [ ] [`squirrel`](https://github.com/wooorm/refractor/blob/main/lang/squirrel.js) * [ ] [`stan`](https://github.com/wooorm/refractor/blob/main/lang/stan.js) * [ ] [`stylus`](https://github.com/wooorm/refractor/blob/main/lang/stylus.js) * [ ] [`swift`](https://github.com/wooorm/refractor/blob/main/lang/swift.js) * [ ] [`systemd`](https://github.com/wooorm/refractor/blob/main/lang/systemd.js) * [ ] [`t4Cs`](https://github.com/wooorm/refractor/blob/main/lang/t4-cs.js) * [ ] [`t4Templating`](https://github.com/wooorm/refractor/blob/main/lang/t4-templating.js) * [ ] [`t4Vb`](https://github.com/wooorm/refractor/blob/main/lang/t4-vb.js) * [ ] [`tap`](https://github.com/wooorm/refractor/blob/main/lang/tap.js) * [ ] [`tcl`](https://github.com/wooorm/refractor/blob/main/lang/tcl.js) * [ ] [`textile`](https://github.com/wooorm/refractor/blob/main/lang/textile.js) * [ ] [`toml`](https://github.com/wooorm/refractor/blob/main/lang/toml.js) * [ ] [`tremor`](https://github.com/wooorm/refractor/blob/main/lang/tremor.js) * [ ] [`tsx`](https://github.com/wooorm/refractor/blob/main/lang/tsx.js) * [ ] [`tt2`](https://github.com/wooorm/refractor/blob/main/lang/tt2.js) * [ ] [`turtle`](https://github.com/wooorm/refractor/blob/main/lang/turtle.js) * [ ] [`twig`](https://github.com/wooorm/refractor/blob/main/lang/twig.js) * [ ] [`typescript`](https://github.com/wooorm/refractor/blob/main/lang/typescript.js) — alias: `ts` * [ ] [`typoscript`](https://github.com/wooorm/refractor/blob/main/lang/typoscript.js) — alias: `tsconfig` * [ ] [`unrealscript`](https://github.com/wooorm/refractor/blob/main/lang/unrealscript.js) — alias: `uc`, `uscript` * [ ] [`uorazor`](https://github.com/wooorm/refractor/blob/main/lang/uorazor.js) * [ ] [`uri`](https://github.com/wooorm/refractor/blob/main/lang/uri.js) — alias: `url` * [ ] [`v`](https://github.com/wooorm/refractor/blob/main/lang/v.js) * [ ] [`vala`](https://github.com/wooorm/refractor/blob/main/lang/vala.js) * [ ] [`vbnet`](https://github.com/wooorm/refractor/blob/main/lang/vbnet.js) * [ ] [`velocity`](https://github.com/wooorm/refractor/blob/main/lang/velocity.js) * [ ] [`verilog`](https://github.com/wooorm/refractor/blob/main/lang/verilog.js) * [ ] [`vhdl`](https://github.com/wooorm/refractor/blob/main/lang/vhdl.js) * [ ] [`vim`](https://github.com/wooorm/refractor/blob/main/lang/vim.js) * [ ] [`visualBasic`](https://github.com/wooorm/refractor/blob/main/lang/visual-basic.js) * [ ] [`warpscript`](https://github.com/wooorm/refractor/blob/main/lang/warpscript.js) * [ ] [`wasm`](https://github.com/wooorm/refractor/blob/main/lang/wasm.js) * [ ] [`webIdl`](https://github.com/wooorm/refractor/blob/main/lang/web-idl.js) * [ ] [`wiki`](https://github.com/wooorm/refractor/blob/main/lang/wiki.js) * [ ] [`wolfram`](https://github.com/wooorm/refractor/blob/main/lang/wolfram.js) — alias: `mathematica`, `wl`, `nb` * [ ] [`wren`](https://github.com/wooorm/refractor/blob/main/lang/wren.js) * [ ] [`xeora`](https://github.com/wooorm/refractor/blob/main/lang/xeora.js) — alias: `xeoracube` * [ ] [`xmlDoc`](https://github.com/wooorm/refractor/blob/main/lang/xml-doc.js) * [ ] [`xojo`](https://github.com/wooorm/refractor/blob/main/lang/xojo.js) * [ ] [`xquery`](https://github.com/wooorm/refractor/blob/main/lang/xquery.js) * [ ] [`yaml`](https://github.com/wooorm/refractor/blob/main/lang/yaml.js) — alias: `yml` * [ ] [`yang`](https://github.com/wooorm/refractor/blob/main/lang/yang.js) * [ ] [`zig`](https://github.com/wooorm/refractor/blob/main/lang/zig.js) ## Related * [`lowlight`][lowlight] — Same, but based on [`highlight.js`][hljs] ## Projects * [`react-syntax-highlighter`](https://github.com/conorhastings/react-syntax-highlighter) — [React][] component for syntax highlighting * [`rehype-prism`](https://github.com/mapbox/rehype-prism) — Syntax highlighting in [**rehype**](https://github.com/rehypejs/rehype) * [`react-refractor`](https://github.com/rexxars/react-refractor) — Syntax highlighter for [React][] ## License [MIT][license] © [Titus Wormer][author] [build-badge]: https://github.com/wooorm/refractor/workflows/main/badge.svg [build]: https://github.com/wooorm/refractor/actions [coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/refractor.svg [coverage]: https://codecov.io/github/wooorm/refractor [downloads-badge]: https://img.shields.io/npm/dm/refractor.svg [downloads]: https://www.npmjs.com/package/refractor [size-badge]: https://img.shields.io/bundlephobia/minzip/refractor.svg [size]: https://bundlephobia.com/result?p=refractor [npm]: https://www.npmjs.com/package/refractor/tutorial [license]: license [author]: https://wooorm.com [releases]: https://github.com/wooorm/refractor/releases [rehype]: https://github.com/rehypejs/rehype [names]: https://prismjs.com/#languages-list [themes]: https://prismjs.com/#theme [react]: https://facebook.github.io/react/ [vdom]: https://github.com/Matt-Esch/virtual-dom [to-hyperscript]: https://github.com/syntax-tree/hast-to-hyperscript [to-html]: https://github.com/syntax-tree/hast-util-to-html [browser]: #browser [prism]: https://github.com/PrismJS/prism [prismjs]: https://www.npmjs.com/package/prismjs [lowlight]: https://github.com/wooorm/lowlight [hljs]: https://github.com/isagalaev/highlight.js [browserify]: https://github.com/browserify/browserify [tinyify]: https://github.com/browserify/tinyify [node]: https://github.com/syntax-tree/hast#ast [syntax]: #syntaxes [register]: #refractorregistersyntax