refractor-restyled-jsx v0.0.1
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 Prism,
that’s 234 languages (as of prism@1.22.0) and all
themes.
Want to use highlight.js instead?
Try lowlight!
Contents
Install
npm:
npm install refractorUse
var refractor = require('refractor')
var nodes = refractor.highlight('"use strict";', 'js')
console.log(nodes)Yields:
[
{
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 or hast-util-to-html
yields (you may have to wrap it into a fragment like so: {type: 'root',
children: nodes}):
<span class="token string">"use strict"</span><span class="token punctuation">;</span>Tip: Use
hast-to-hyperscriptto transform to other virtual DOMs, or DIY.
API
refractor.register(syntax)
Register a syntax.
Needed if you’re using refractor/core.
Example
var refractor = require('refractor/core')
var markdown = require('refractor/lang/markdown')
refractor.register(markdown)
console.log(refractor.highlight('*Emphasis*', 'markdown'))Yields:
[
{
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 of a registered languagealias(string) — New alias for the registered languagelist(Array.<alias>) — List of aliasesaliases(Object.<alias|list>) — Map where each key is anameand each value analiasor alist
Example
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.
Returns
Virtual nodes representing the highlighted value (Array.<Node>).
Example
var refractor = require('refractor/core')
console.log(refractor.highlight('em { color: red }', 'css'))Yields:
[
{
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) is registered.
Example
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:
false
truerefractor.listLanguages()
List all registered languages (names and aliases).
Returns
Array.<string>.
Example
var refractor = require('refractor/core')
var markdown = require('refractor/lang/markdown')
console.log(refractor.listLanguages())
refractor.register(markdown)
console.log(refractor.listLanguages())Yields:
[
'markup',
'html',
// …
'javascript',
'js'
]
[
'markup',
'html',
// …
'javascript',
'js',
'markdown',
'md'
]Browser
I do not suggest using the pre-bundled 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:
var refractor = require('refractor/core')
refractor.register(require('refractor/lang/jsx'))
console.log(refractor.highlight('<Dropdown primary />', 'jsx'))Yields:
[
{
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:
- 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
requirejust 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 required and registered.
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.
clikecssjavascript— alias:jsmarkup— alias:html,mathml,svg,xml,ssml,atom,rssabapabnfactionscriptadaagdaalantlr4— alias:g4apacheconfaplapplescriptaqlarduinoarffasciidoc— alias:adocasm6502aspnetautohotkeyautoitbash— alias:shellbasicbatchbbcode— alias:shortcodebirbbisonbnf— alias:rbnfbrainfuckbrightscriptbrobslccilclojurecmakecoffeescript— alias:coffeeconcurnas— alias:conccppcrystalcsharp— alias:dotnet,cscspcssExtrascypherddartdaxdhalldiffdjango— alias:jinja2dnsZoneFiledocker— alias:dockerfileebnfeditorconfigeiffelejs— alias:etaelixirelmerberlangetluaexcelFormulafactorfirestoreSecurityRulesflowfortranfsharpftlgcodegdscriptgedcomgherkingitglslgmlgographqlgroovyhamlhandlebarshaskell— alias:hshaxehclhlslhpkphstshttpichigojamiconiecstignoreinform7iniiojjavajavadocjavadoclikejavastacktracejoliejqjsExtrasjsTemplatesjsdocjson— alias:webmanifestjson5jsonpjsstacktracejsxjuliakeymankotlin— alias:kt,ktslatex— alias:tex,contextlattelesslilypondliquidlisplivescriptllvmlolcodeluamakefilemarkdown— alias:mdmarkupTemplatingmatlabmelmizarmongodbmonkeymoonscript— alias:moonn1qln4jsnand2tetrisHdlnaniscriptnasmneonnginxnimnixnsisobjectivec— alias:objcocamlopenclozparigpparserpascal— alias:objectpascalpascaligopcaxis— alias:pxpeoplecode— alias:pcodeperlphpExtrasphpphpdocplsqlpowerquerypowershellprocessingprologpropertiesprotobufpugpuppetpurepurebasicpurescript— alias:purspython— alias:pyqqmlqorerracket— alias:rktreasonregexrenpy— alias:rpyrestriproboconfrobotframeworkruby— alias:rbrustsassassscalaschemescssshellSessionsmalismalltalksmartysml— alias:smlnjsolidity— alias:solsolutionFilesoysparql— alias:rqsplunkSplsqfsqlstanstylusswiftt4Cst4Templatingt4Vbtaptcltextiletomltsxtt2turtletwigtypescript— alias:tstyposcript— alias:tsconfigunrealscript— alias:uc,uscriptvalavbnetvelocityverilogvhdlvimvisualBasicwarpscriptwasmwikixeora— alias:xeoracubexmlDocxojoxqueryyaml— alias:ymlyangzig
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
License
5 years ago