Comparing version 1.20.0 to 2.0.0
300
index.js
@@ -1,299 +0,1 @@ | ||
'use strict' | ||
var low = require('./lib/core.js') | ||
module.exports = low | ||
low.registerLanguage('1c', require('highlight.js/lib/languages/1c')) | ||
low.registerLanguage('abnf', require('highlight.js/lib/languages/abnf')) | ||
low.registerLanguage( | ||
'accesslog', | ||
require('highlight.js/lib/languages/accesslog') | ||
) | ||
low.registerLanguage( | ||
'actionscript', | ||
require('highlight.js/lib/languages/actionscript') | ||
) | ||
low.registerLanguage('ada', require('highlight.js/lib/languages/ada')) | ||
low.registerLanguage( | ||
'angelscript', | ||
require('highlight.js/lib/languages/angelscript') | ||
) | ||
low.registerLanguage('apache', require('highlight.js/lib/languages/apache')) | ||
low.registerLanguage( | ||
'applescript', | ||
require('highlight.js/lib/languages/applescript') | ||
) | ||
low.registerLanguage('arcade', require('highlight.js/lib/languages/arcade')) | ||
low.registerLanguage('arduino', require('highlight.js/lib/languages/arduino')) | ||
low.registerLanguage('armasm', require('highlight.js/lib/languages/armasm')) | ||
low.registerLanguage('xml', require('highlight.js/lib/languages/xml')) | ||
low.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) | ||
low.registerLanguage('aspectj', require('highlight.js/lib/languages/aspectj')) | ||
low.registerLanguage( | ||
'autohotkey', | ||
require('highlight.js/lib/languages/autohotkey') | ||
) | ||
low.registerLanguage('autoit', require('highlight.js/lib/languages/autoit')) | ||
low.registerLanguage('avrasm', require('highlight.js/lib/languages/avrasm')) | ||
low.registerLanguage('awk', require('highlight.js/lib/languages/awk')) | ||
low.registerLanguage('axapta', require('highlight.js/lib/languages/axapta')) | ||
low.registerLanguage('bash', require('highlight.js/lib/languages/bash')) | ||
low.registerLanguage('basic', require('highlight.js/lib/languages/basic')) | ||
low.registerLanguage('bnf', require('highlight.js/lib/languages/bnf')) | ||
low.registerLanguage( | ||
'brainfuck', | ||
require('highlight.js/lib/languages/brainfuck') | ||
) | ||
low.registerLanguage('c-like', require('highlight.js/lib/languages/c-like')) | ||
low.registerLanguage('c', require('highlight.js/lib/languages/c')) | ||
low.registerLanguage('cal', require('highlight.js/lib/languages/cal')) | ||
low.registerLanguage( | ||
'capnproto', | ||
require('highlight.js/lib/languages/capnproto') | ||
) | ||
low.registerLanguage('ceylon', require('highlight.js/lib/languages/ceylon')) | ||
low.registerLanguage('clean', require('highlight.js/lib/languages/clean')) | ||
low.registerLanguage('clojure', require('highlight.js/lib/languages/clojure')) | ||
low.registerLanguage( | ||
'clojure-repl', | ||
require('highlight.js/lib/languages/clojure-repl') | ||
) | ||
low.registerLanguage('cmake', require('highlight.js/lib/languages/cmake')) | ||
low.registerLanguage( | ||
'coffeescript', | ||
require('highlight.js/lib/languages/coffeescript') | ||
) | ||
low.registerLanguage('coq', require('highlight.js/lib/languages/coq')) | ||
low.registerLanguage('cos', require('highlight.js/lib/languages/cos')) | ||
low.registerLanguage('cpp', require('highlight.js/lib/languages/cpp')) | ||
low.registerLanguage('crmsh', require('highlight.js/lib/languages/crmsh')) | ||
low.registerLanguage('crystal', require('highlight.js/lib/languages/crystal')) | ||
low.registerLanguage('csharp', require('highlight.js/lib/languages/csharp')) | ||
low.registerLanguage('csp', require('highlight.js/lib/languages/csp')) | ||
low.registerLanguage('css', require('highlight.js/lib/languages/css')) | ||
low.registerLanguage('d', require('highlight.js/lib/languages/d')) | ||
low.registerLanguage('markdown', require('highlight.js/lib/languages/markdown')) | ||
low.registerLanguage('dart', require('highlight.js/lib/languages/dart')) | ||
low.registerLanguage('delphi', require('highlight.js/lib/languages/delphi')) | ||
low.registerLanguage('diff', require('highlight.js/lib/languages/diff')) | ||
low.registerLanguage('django', require('highlight.js/lib/languages/django')) | ||
low.registerLanguage('dns', require('highlight.js/lib/languages/dns')) | ||
low.registerLanguage( | ||
'dockerfile', | ||
require('highlight.js/lib/languages/dockerfile') | ||
) | ||
low.registerLanguage('dos', require('highlight.js/lib/languages/dos')) | ||
low.registerLanguage('dsconfig', require('highlight.js/lib/languages/dsconfig')) | ||
low.registerLanguage('dts', require('highlight.js/lib/languages/dts')) | ||
low.registerLanguage('dust', require('highlight.js/lib/languages/dust')) | ||
low.registerLanguage('ebnf', require('highlight.js/lib/languages/ebnf')) | ||
low.registerLanguage('elixir', require('highlight.js/lib/languages/elixir')) | ||
low.registerLanguage('elm', require('highlight.js/lib/languages/elm')) | ||
low.registerLanguage('ruby', require('highlight.js/lib/languages/ruby')) | ||
low.registerLanguage('erb', require('highlight.js/lib/languages/erb')) | ||
low.registerLanguage( | ||
'erlang-repl', | ||
require('highlight.js/lib/languages/erlang-repl') | ||
) | ||
low.registerLanguage('erlang', require('highlight.js/lib/languages/erlang')) | ||
low.registerLanguage('excel', require('highlight.js/lib/languages/excel')) | ||
low.registerLanguage('fix', require('highlight.js/lib/languages/fix')) | ||
low.registerLanguage('flix', require('highlight.js/lib/languages/flix')) | ||
low.registerLanguage('fortran', require('highlight.js/lib/languages/fortran')) | ||
low.registerLanguage('fsharp', require('highlight.js/lib/languages/fsharp')) | ||
low.registerLanguage('gams', require('highlight.js/lib/languages/gams')) | ||
low.registerLanguage('gauss', require('highlight.js/lib/languages/gauss')) | ||
low.registerLanguage('gcode', require('highlight.js/lib/languages/gcode')) | ||
low.registerLanguage('gherkin', require('highlight.js/lib/languages/gherkin')) | ||
low.registerLanguage('glsl', require('highlight.js/lib/languages/glsl')) | ||
low.registerLanguage('gml', require('highlight.js/lib/languages/gml')) | ||
low.registerLanguage('go', require('highlight.js/lib/languages/go')) | ||
low.registerLanguage('golo', require('highlight.js/lib/languages/golo')) | ||
low.registerLanguage('gradle', require('highlight.js/lib/languages/gradle')) | ||
low.registerLanguage('groovy', require('highlight.js/lib/languages/groovy')) | ||
low.registerLanguage('haml', require('highlight.js/lib/languages/haml')) | ||
low.registerLanguage( | ||
'handlebars', | ||
require('highlight.js/lib/languages/handlebars') | ||
) | ||
low.registerLanguage('haskell', require('highlight.js/lib/languages/haskell')) | ||
low.registerLanguage('haxe', require('highlight.js/lib/languages/haxe')) | ||
low.registerLanguage('hsp', require('highlight.js/lib/languages/hsp')) | ||
low.registerLanguage('htmlbars', require('highlight.js/lib/languages/htmlbars')) | ||
low.registerLanguage('http', require('highlight.js/lib/languages/http')) | ||
low.registerLanguage('hy', require('highlight.js/lib/languages/hy')) | ||
low.registerLanguage('inform7', require('highlight.js/lib/languages/inform7')) | ||
low.registerLanguage('ini', require('highlight.js/lib/languages/ini')) | ||
low.registerLanguage('irpf90', require('highlight.js/lib/languages/irpf90')) | ||
low.registerLanguage('isbl', require('highlight.js/lib/languages/isbl')) | ||
low.registerLanguage('java', require('highlight.js/lib/languages/java')) | ||
low.registerLanguage( | ||
'javascript', | ||
require('highlight.js/lib/languages/javascript') | ||
) | ||
low.registerLanguage( | ||
'jboss-cli', | ||
require('highlight.js/lib/languages/jboss-cli') | ||
) | ||
low.registerLanguage('json', require('highlight.js/lib/languages/json')) | ||
low.registerLanguage('julia', require('highlight.js/lib/languages/julia')) | ||
low.registerLanguage( | ||
'julia-repl', | ||
require('highlight.js/lib/languages/julia-repl') | ||
) | ||
low.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin')) | ||
low.registerLanguage('lasso', require('highlight.js/lib/languages/lasso')) | ||
low.registerLanguage('latex', require('highlight.js/lib/languages/latex')) | ||
low.registerLanguage('ldif', require('highlight.js/lib/languages/ldif')) | ||
low.registerLanguage('leaf', require('highlight.js/lib/languages/leaf')) | ||
low.registerLanguage('less', require('highlight.js/lib/languages/less')) | ||
low.registerLanguage('lisp', require('highlight.js/lib/languages/lisp')) | ||
low.registerLanguage( | ||
'livecodeserver', | ||
require('highlight.js/lib/languages/livecodeserver') | ||
) | ||
low.registerLanguage( | ||
'livescript', | ||
require('highlight.js/lib/languages/livescript') | ||
) | ||
low.registerLanguage('llvm', require('highlight.js/lib/languages/llvm')) | ||
low.registerLanguage('lsl', require('highlight.js/lib/languages/lsl')) | ||
low.registerLanguage('lua', require('highlight.js/lib/languages/lua')) | ||
low.registerLanguage('makefile', require('highlight.js/lib/languages/makefile')) | ||
low.registerLanguage( | ||
'mathematica', | ||
require('highlight.js/lib/languages/mathematica') | ||
) | ||
low.registerLanguage('matlab', require('highlight.js/lib/languages/matlab')) | ||
low.registerLanguage('maxima', require('highlight.js/lib/languages/maxima')) | ||
low.registerLanguage('mel', require('highlight.js/lib/languages/mel')) | ||
low.registerLanguage('mercury', require('highlight.js/lib/languages/mercury')) | ||
low.registerLanguage('mipsasm', require('highlight.js/lib/languages/mipsasm')) | ||
low.registerLanguage('mizar', require('highlight.js/lib/languages/mizar')) | ||
low.registerLanguage('perl', require('highlight.js/lib/languages/perl')) | ||
low.registerLanguage( | ||
'mojolicious', | ||
require('highlight.js/lib/languages/mojolicious') | ||
) | ||
low.registerLanguage('monkey', require('highlight.js/lib/languages/monkey')) | ||
low.registerLanguage( | ||
'moonscript', | ||
require('highlight.js/lib/languages/moonscript') | ||
) | ||
low.registerLanguage('n1ql', require('highlight.js/lib/languages/n1ql')) | ||
low.registerLanguage('nginx', require('highlight.js/lib/languages/nginx')) | ||
low.registerLanguage('nim', require('highlight.js/lib/languages/nim')) | ||
low.registerLanguage('nix', require('highlight.js/lib/languages/nix')) | ||
low.registerLanguage( | ||
'node-repl', | ||
require('highlight.js/lib/languages/node-repl') | ||
) | ||
low.registerLanguage('nsis', require('highlight.js/lib/languages/nsis')) | ||
low.registerLanguage( | ||
'objectivec', | ||
require('highlight.js/lib/languages/objectivec') | ||
) | ||
low.registerLanguage('ocaml', require('highlight.js/lib/languages/ocaml')) | ||
low.registerLanguage('openscad', require('highlight.js/lib/languages/openscad')) | ||
low.registerLanguage('oxygene', require('highlight.js/lib/languages/oxygene')) | ||
low.registerLanguage('parser3', require('highlight.js/lib/languages/parser3')) | ||
low.registerLanguage('pf', require('highlight.js/lib/languages/pf')) | ||
low.registerLanguage('pgsql', require('highlight.js/lib/languages/pgsql')) | ||
low.registerLanguage('php', require('highlight.js/lib/languages/php')) | ||
low.registerLanguage( | ||
'php-template', | ||
require('highlight.js/lib/languages/php-template') | ||
) | ||
low.registerLanguage( | ||
'plaintext', | ||
require('highlight.js/lib/languages/plaintext') | ||
) | ||
low.registerLanguage('pony', require('highlight.js/lib/languages/pony')) | ||
low.registerLanguage( | ||
'powershell', | ||
require('highlight.js/lib/languages/powershell') | ||
) | ||
low.registerLanguage( | ||
'processing', | ||
require('highlight.js/lib/languages/processing') | ||
) | ||
low.registerLanguage('profile', require('highlight.js/lib/languages/profile')) | ||
low.registerLanguage('prolog', require('highlight.js/lib/languages/prolog')) | ||
low.registerLanguage( | ||
'properties', | ||
require('highlight.js/lib/languages/properties') | ||
) | ||
low.registerLanguage('protobuf', require('highlight.js/lib/languages/protobuf')) | ||
low.registerLanguage('puppet', require('highlight.js/lib/languages/puppet')) | ||
low.registerLanguage( | ||
'purebasic', | ||
require('highlight.js/lib/languages/purebasic') | ||
) | ||
low.registerLanguage('python', require('highlight.js/lib/languages/python')) | ||
low.registerLanguage( | ||
'python-repl', | ||
require('highlight.js/lib/languages/python-repl') | ||
) | ||
low.registerLanguage('q', require('highlight.js/lib/languages/q')) | ||
low.registerLanguage('qml', require('highlight.js/lib/languages/qml')) | ||
low.registerLanguage('r', require('highlight.js/lib/languages/r')) | ||
low.registerLanguage('reasonml', require('highlight.js/lib/languages/reasonml')) | ||
low.registerLanguage('rib', require('highlight.js/lib/languages/rib')) | ||
low.registerLanguage('roboconf', require('highlight.js/lib/languages/roboconf')) | ||
low.registerLanguage('routeros', require('highlight.js/lib/languages/routeros')) | ||
low.registerLanguage('rsl', require('highlight.js/lib/languages/rsl')) | ||
low.registerLanguage( | ||
'ruleslanguage', | ||
require('highlight.js/lib/languages/ruleslanguage') | ||
) | ||
low.registerLanguage('rust', require('highlight.js/lib/languages/rust')) | ||
low.registerLanguage('sas', require('highlight.js/lib/languages/sas')) | ||
low.registerLanguage('scala', require('highlight.js/lib/languages/scala')) | ||
low.registerLanguage('scheme', require('highlight.js/lib/languages/scheme')) | ||
low.registerLanguage('scilab', require('highlight.js/lib/languages/scilab')) | ||
low.registerLanguage('scss', require('highlight.js/lib/languages/scss')) | ||
low.registerLanguage('shell', require('highlight.js/lib/languages/shell')) | ||
low.registerLanguage('smali', require('highlight.js/lib/languages/smali')) | ||
low.registerLanguage( | ||
'smalltalk', | ||
require('highlight.js/lib/languages/smalltalk') | ||
) | ||
low.registerLanguage('sml', require('highlight.js/lib/languages/sml')) | ||
low.registerLanguage('sqf', require('highlight.js/lib/languages/sqf')) | ||
low.registerLanguage('sql_more', require('highlight.js/lib/languages/sql_more')) | ||
low.registerLanguage('sql', require('highlight.js/lib/languages/sql')) | ||
low.registerLanguage('stan', require('highlight.js/lib/languages/stan')) | ||
low.registerLanguage('stata', require('highlight.js/lib/languages/stata')) | ||
low.registerLanguage('step21', require('highlight.js/lib/languages/step21')) | ||
low.registerLanguage('stylus', require('highlight.js/lib/languages/stylus')) | ||
low.registerLanguage('subunit', require('highlight.js/lib/languages/subunit')) | ||
low.registerLanguage('swift', require('highlight.js/lib/languages/swift')) | ||
low.registerLanguage( | ||
'taggerscript', | ||
require('highlight.js/lib/languages/taggerscript') | ||
) | ||
low.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')) | ||
low.registerLanguage('tap', require('highlight.js/lib/languages/tap')) | ||
low.registerLanguage('tcl', require('highlight.js/lib/languages/tcl')) | ||
low.registerLanguage('thrift', require('highlight.js/lib/languages/thrift')) | ||
low.registerLanguage('tp', require('highlight.js/lib/languages/tp')) | ||
low.registerLanguage('twig', require('highlight.js/lib/languages/twig')) | ||
low.registerLanguage( | ||
'typescript', | ||
require('highlight.js/lib/languages/typescript') | ||
) | ||
low.registerLanguage('vala', require('highlight.js/lib/languages/vala')) | ||
low.registerLanguage('vbnet', require('highlight.js/lib/languages/vbnet')) | ||
low.registerLanguage('vbscript', require('highlight.js/lib/languages/vbscript')) | ||
low.registerLanguage( | ||
'vbscript-html', | ||
require('highlight.js/lib/languages/vbscript-html') | ||
) | ||
low.registerLanguage('verilog', require('highlight.js/lib/languages/verilog')) | ||
low.registerLanguage('vhdl', require('highlight.js/lib/languages/vhdl')) | ||
low.registerLanguage('vim', require('highlight.js/lib/languages/vim')) | ||
low.registerLanguage('x86asm', require('highlight.js/lib/languages/x86asm')) | ||
low.registerLanguage('xl', require('highlight.js/lib/languages/xl')) | ||
low.registerLanguage('xquery', require('highlight.js/lib/languages/xquery')) | ||
low.registerLanguage('zephir', require('highlight.js/lib/languages/zephir')) | ||
export {lowlight} from './lib/common.js' |
349
lib/core.js
@@ -1,36 +0,45 @@ | ||
'use strict' | ||
/** | ||
* @typedef {import('hast').Text} Text | ||
* | ||
* @typedef {import('highlight.js').HighlightResult} HighlightResult | ||
* @typedef {import('highlight.js').HLJSOptions} HighlightOptions | ||
* @typedef {import('highlight.js').LanguageFn} HighlightSyntax | ||
* @typedef {import('highlight.js').Emitter} HighlightEmitter | ||
* | ||
* @typedef {{type: 'element', tagName: 'span', properties: {className: Array.<string>}, children: Array.<LowlightElementSpan|Text>}} LowlightElementSpan | ||
* @typedef {{type: 'root', data: {language: string, relevance: number}, children: Array.<LowlightElementSpan|Text>}} LowlightRoot | ||
* | ||
* @typedef {Object} ExtraAutoOptions | ||
* @property {Array.<string>} [subset] List of allowed languages; defaults to all registered languages | ||
* | ||
* @typedef {Object} LowlightOptions | ||
* @property {string} [prefix='hljs-'] Class prefix | ||
* | ||
* @typedef {LowlightOptions & ExtraAutoOptions} LowlightAutoOptions | ||
*/ | ||
var high = require('highlight.js/lib/core') | ||
var fault = require('fault') | ||
import high from 'highlight.js/lib/core' | ||
import {fault} from 'fault' | ||
exports.highlight = highlight | ||
exports.highlightAuto = highlightAuto | ||
exports.registerLanguage = registerLanguage | ||
exports.listLanguages = listLanguages | ||
exports.registerAlias = registerAlias | ||
const own = {}.hasOwnProperty | ||
Emitter.prototype.addText = text | ||
Emitter.prototype.addKeyword = addKeyword | ||
Emitter.prototype.addSublanguage = addSublanguage | ||
Emitter.prototype.openNode = open | ||
Emitter.prototype.closeNode = close | ||
Emitter.prototype.closeAllNodes = noop | ||
Emitter.prototype.finalize = noop | ||
Emitter.prototype.toHTML = toHtmlNoop | ||
const defaultPrefix = 'hljs-' | ||
var defaultPrefix = 'hljs-' | ||
/** | ||
* Parse `value` (code) according to the `language` (name) grammar. | ||
* | ||
* @param {string} language Language name | ||
* @param {string} value Code value | ||
* @param {LowlightOptions} [options={}] Settings | ||
* @returns {LowlightRoot} | ||
*/ | ||
function highlight(language, value, options = {}) { | ||
let prefix = options.prefix | ||
// Highlighting `value` in the language `name`. | ||
function highlight(name, value, options) { | ||
var before = high.configure({}) | ||
var settings = options || {} | ||
var prefix = settings.prefix | ||
var result | ||
if (typeof name !== 'string') { | ||
throw fault('Expected `string` for name, got `%s`', name) | ||
if (typeof language !== 'string') { | ||
throw fault('Expected `string` for name, got `%s`', language) | ||
} | ||
if (!high.getLanguage(name)) { | ||
throw fault('Unknown language: `%s` is not registered', name) | ||
if (!high.getLanguage(language)) { | ||
throw fault('Unknown language: `%s` is not registered', language) | ||
} | ||
@@ -46,10 +55,11 @@ | ||
high.configure({__emitter: Emitter, classPrefix: prefix}) | ||
high.configure({__emitter: HastEmitter, classPrefix: prefix}) | ||
/** @type {HighlightResult & {_emitter: HastEmitter}} */ | ||
// @ts-ignore our emitter is added. | ||
const result = high.highlight(value, {language, ignoreIllegals: true}) | ||
high.configure({}) | ||
result = high.highlight(value, {language: name, ignoreIllegals: true}) | ||
high.configure(before || {}) | ||
/* istanbul ignore if - Highlight.js seems to use this (currently) for broken | ||
* grammars, so let’s keep it in there just to be sure. */ | ||
// Highlight.js seems to use this (currently) for broken grammars, so let’s | ||
// keep it in there just to be sure. | ||
/* c8 ignore next 3 */ | ||
if (result.errorRaised) { | ||
@@ -59,19 +69,29 @@ throw result.errorRaised | ||
return { | ||
relevance: result.relevance, | ||
language: result.language, | ||
value: result.emitter.rootNode.children | ||
} | ||
result._emitter.root.data.language = result.language | ||
result._emitter.root.data.relevance = result.relevance | ||
return result._emitter.root | ||
} | ||
function highlightAuto(value, options) { | ||
var settings = options || {} | ||
var subset = settings.subset || high.listLanguages() | ||
var prefix = settings.prefix | ||
var length = subset.length | ||
var index = -1 | ||
var result | ||
var secondBest | ||
var current | ||
var name | ||
/** | ||
* Parse `value` (code) by guessing its grammar. | ||
* | ||
* @param {string} value Code value | ||
* @param {LowlightAutoOptions} [options={}] Settings | ||
* @returns {LowlightRoot} | ||
*/ | ||
function highlightAuto(value, options = {}) { | ||
const subset = options.subset || high.listLanguages() | ||
let prefix = options.prefix | ||
let index = -1 | ||
/** @type {LowlightRoot} */ | ||
let result = { | ||
type: 'root', | ||
data: {language: null, relevance: 0}, | ||
children: [] | ||
} | ||
/** @type {string} */ | ||
let name | ||
/** @type {LowlightRoot} */ | ||
let current | ||
@@ -86,38 +106,31 @@ if (prefix === null || prefix === undefined) { | ||
secondBest = {relevance: 0, language: null, value: []} | ||
result = {relevance: 0, language: null, value: []} | ||
while (++index < length) { | ||
while (++index < subset.length) { | ||
name = subset[index] | ||
if (!high.getLanguage(name)) { | ||
continue | ||
} | ||
if (!high.getLanguage(name)) continue | ||
current = highlight(name, value, options) | ||
current.language = name | ||
if (current.relevance > secondBest.relevance) { | ||
secondBest = current | ||
} | ||
if (current.relevance > result.relevance) { | ||
secondBest = result | ||
result = current | ||
} | ||
if (current.data.relevance > result.data.relevance) result = current | ||
} | ||
if (secondBest.language) { | ||
result.secondBest = secondBest | ||
} | ||
return result | ||
} | ||
// Register a language. | ||
function registerLanguage(name, syntax) { | ||
high.registerLanguage(name, syntax) | ||
/** | ||
* Register a language. | ||
* | ||
* @param {string} language Language name | ||
* @param {HighlightSyntax} syntax Language syntax | ||
* @returns {void} | ||
*/ | ||
function registerLanguage(language, syntax) { | ||
high.registerLanguage(language, syntax) | ||
} | ||
// Get a list of all registered languages. | ||
/** | ||
* Get a list of all registered languages. | ||
* | ||
* @returns {Array.<string>} | ||
*/ | ||
function listLanguages() { | ||
@@ -127,35 +140,92 @@ return high.listLanguages() | ||
// Register more aliases for an already registered language. | ||
function registerAlias(name, alias) { | ||
var map = name | ||
var key | ||
const registerAlias = | ||
/** | ||
* @type {( | ||
* ((language: string, alias: string|Array.<string>) => void) & | ||
* ((aliases: Object<string, string|Array.<string>>) => void) | ||
* )} | ||
*/ | ||
( | ||
/** | ||
* Register more aliases for an already registered language. | ||
* | ||
* @param {string|Object<string, string|Array.<string>>} language | ||
* @param {string|Array.<string>} [alias] | ||
* @returns {void} | ||
*/ | ||
function (language, alias) { | ||
/** @type {Object<string, string|Array.<string>>} */ | ||
let map | ||
/** @type {string} */ | ||
let key | ||
if (alias) { | ||
map = {} | ||
map[name] = alias | ||
if (typeof language === 'string') { | ||
map = {} | ||
map[language] = alias | ||
} else { | ||
map = language | ||
} | ||
for (key in map) { | ||
if (own.call(map, key)) { | ||
high.registerAliases(map[key], {languageName: key}) | ||
} | ||
} | ||
} | ||
) | ||
/** @type {HighlightEmitter} */ | ||
class HastEmitter { | ||
/** | ||
* @param {HighlightOptions} options | ||
*/ | ||
constructor(options) { | ||
/** @type {HighlightOptions} */ | ||
this.options = options | ||
/** @type {LowlightRoot} */ | ||
this.root = { | ||
type: 'root', | ||
data: {language: undefined, relevance: 0}, | ||
children: [] | ||
} | ||
/** @type {[LowlightRoot, ...LowlightElementSpan[]]} */ | ||
this.stack = [this.root] | ||
} | ||
for (key in map) { | ||
high.registerAliases(map[key], {languageName: key}) | ||
/** | ||
* @param {string} value | ||
*/ | ||
addText(value) { | ||
if (value === '') return | ||
const current = this.stack[this.stack.length - 1] | ||
const tail = current.children[current.children.length - 1] | ||
if (tail && tail.type === 'text') { | ||
tail.value += value | ||
} else { | ||
current.children.push({type: 'text', value}) | ||
} | ||
} | ||
} | ||
function Emitter(options) { | ||
this.options = options | ||
this.rootNode = {children: []} | ||
this.stack = [this.rootNode] | ||
} | ||
/** | ||
* @param {string} value | ||
* @param {string} name | ||
*/ | ||
addKeyword(value, name) { | ||
this.openNode(name) | ||
this.addText(value) | ||
this.closeNode() | ||
} | ||
function addKeyword(value, name) { | ||
this.openNode(name) | ||
this.addText(value) | ||
this.closeNode() | ||
} | ||
/** | ||
* @param {HastEmitter} other | ||
* @param {string} name | ||
*/ | ||
addSublanguage(other, name) { | ||
const current = this.stack[this.stack.length - 1] | ||
const results = other.root.children | ||
function addSublanguage(other, name) { | ||
var stack = this.stack | ||
var current = stack[stack.length - 1] | ||
var results = other.rootNode.children | ||
var node = name | ||
? { | ||
if (name) { | ||
current.children.push({ | ||
type: 'element', | ||
@@ -165,48 +235,53 @@ tagName: 'span', | ||
children: results | ||
} | ||
: results | ||
}) | ||
} else { | ||
current.children.push(...results) | ||
} | ||
} | ||
current.children = current.children.concat(node) | ||
} | ||
/** | ||
* @param {string} name | ||
*/ | ||
openNode(name) { | ||
const className = name.split('.').map((d) => this.options.classPrefix + d) | ||
const current = this.stack[this.stack.length - 1] | ||
/** @type {LowlightElementSpan} */ | ||
const child = { | ||
type: 'element', | ||
tagName: 'span', | ||
properties: {className}, | ||
children: [] | ||
} | ||
function text(value) { | ||
var stack = this.stack | ||
var current | ||
var tail | ||
current.children.push(child) | ||
this.stack.push(child) | ||
} | ||
if (value === '') return | ||
/** | ||
*/ | ||
closeNode() { | ||
this.stack.pop() | ||
} | ||
current = stack[stack.length - 1] | ||
tail = current.children[current.children.length - 1] | ||
/** | ||
*/ | ||
closeAllNodes() {} | ||
if (tail && tail.type === 'text') { | ||
tail.value += value | ||
} else { | ||
current.children.push({type: 'text', value: value}) | ||
} | ||
} | ||
/** | ||
*/ | ||
finalize() {} | ||
function open(name) { | ||
var stack = this.stack | ||
var className = this.options.classPrefix + name | ||
var current = stack[stack.length - 1] | ||
var child = { | ||
type: 'element', | ||
tagName: 'span', | ||
properties: {className: [className]}, | ||
children: [] | ||
/** | ||
*/ | ||
toHTML() { | ||
return '' | ||
} | ||
current.children.push(child) | ||
stack.push(child) | ||
} | ||
function close() { | ||
this.stack.pop() | ||
export const lowlight = { | ||
highlight, | ||
highlightAuto, | ||
registerLanguage, | ||
listLanguages, | ||
registerAlias | ||
} | ||
function toHtmlNoop() { | ||
return '' | ||
} | ||
function noop() {} |
{ | ||
"name": "lowlight", | ||
"version": "1.20.0", | ||
"version": "2.0.0", | ||
"description": "Virtual syntax highlighting for virtual DOMs and non-HTML things", | ||
@@ -27,14 +27,25 @@ "license": "MIT", | ||
], | ||
"sideEffects": false, | ||
"type": "module", | ||
"main": "index.js", | ||
"types": "index.d.ts", | ||
"files": [ | ||
"index.js", | ||
"lib/core.js" | ||
"lib/core.d.ts", | ||
"lib/core.js", | ||
"index.d.ts", | ||
"index.js" | ||
], | ||
"dependencies": { | ||
"fault": "^1.0.0", | ||
"highlight.js": "~10.7.0" | ||
"@types/hast": "^2.0.0", | ||
"fault": "^2.0.0", | ||
"highlight.js": "~11.0.0" | ||
}, | ||
"devDependencies": { | ||
"browserify": "^17.0.0", | ||
"@types/mdast": "^3.0.0", | ||
"@types/tape": "^4.0.0", | ||
"@types/unist": "^2.0.0", | ||
"c8": "^7.0.0", | ||
"chalk": "^4.0.0", | ||
"nyc": "^15.0.0", | ||
"estree-util-is-identifier-name": "^2.0.0", | ||
"mdast-zone": "^5.0.0", | ||
"prettier": "^2.0.0", | ||
@@ -44,16 +55,18 @@ "rehype": "^11.0.0", | ||
"remark-preset-wooorm": "^8.0.0", | ||
"rimraf": "^3.0.0", | ||
"tape": "^5.0.0", | ||
"tinyify": "^3.0.0", | ||
"unist-util-remove-position": "^3.0.0", | ||
"xo": "^0.38.0" | ||
"type-coverage": "^2.0.0", | ||
"typescript": "^4.0.0", | ||
"unist-builder": "^3.0.0", | ||
"unist-util-remove-position": "^4.0.0", | ||
"xo": "^0.40.0" | ||
}, | ||
"scripts": { | ||
"prepack": "npm run build && npm run format", | ||
"build": "rimraf \"{lib/**,test/**,script/**,}*.d.ts\" && tsc && type-coverage", | ||
"generate": "node script/build-registry", | ||
"format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", | ||
"build-bundle": "browserify index.js -s lowlight > lowlight.js", | ||
"build-mangle": "browserify index.js -s lowlight -p tinyify > lowlight.min.js", | ||
"build": "npm run build-bundle && npm run build-mangle", | ||
"test-api": "node test", | ||
"test-coverage": "nyc --reporter lcov tape test/index.js", | ||
"test": "npm run generate && npm run format && npm run build && npm run test-coverage" | ||
"test-api": "node test/index.js", | ||
"test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node test/index.js", | ||
"test": "npm run generate && npm run build && npm run format && npm run test-coverage" | ||
}, | ||
@@ -70,25 +83,19 @@ "prettier": { | ||
"prettier": true, | ||
"esnext": false, | ||
"rules": { | ||
"unicorn/no-array-callback-reference": "off", | ||
"unicorn/no-fn-reference-in-iterator": "off", | ||
"unicorn/prefer-optional-catch-binding": "off", | ||
"unicorn/prefer-includes": "off", | ||
"guard-for-in": "off" | ||
}, | ||
"ignores": [ | ||
"lowlight.js" | ||
] | ||
"node/file-extension-in-import": "off", | ||
"unicorn/prefer-node-protocol": "off" | ||
} | ||
}, | ||
"remarkConfig": { | ||
"plugins": [ | ||
"preset-wooorm" | ||
"preset-wooorm", | ||
"./script/count.js", | ||
"./script/support.js" | ||
] | ||
}, | ||
"nyc": { | ||
"check-coverage": true, | ||
"lines": 100, | ||
"functions": 100, | ||
"branches": 100 | ||
"typeCoverage": { | ||
"atLeast": 100, | ||
"detail": true, | ||
"strict": true | ||
} | ||
} |
431
readme.md
@@ -12,5 +12,13 @@ # lowlight | ||
Lowlight is built to work with all syntaxes supported by [highlight.js][], | ||
that’s [191 languages][names] (and all 94 themes). | ||
Lowlight is built to work with all syntaxes supported by [highlight.js][]. | ||
There are three builds of lowlight: | ||
<!--index start--> | ||
* `lib/core.js` — 0 languages | ||
* `lib/common.js` (default) — 35 languages | ||
* `lib/all.js` — 191 languages | ||
<!--index end--> | ||
Want to use [Prism][] instead? | ||
@@ -24,9 +32,8 @@ Try [`refractor`][refractor]! | ||
* [API](#api) | ||
* [`low.highlight(language, value[, options])`](#lowhighlightlanguage-value-options) | ||
* [`low.highlightAuto(value[, options])`](#lowhighlightautovalue-options) | ||
* [`Result`](#result) | ||
* [`low.registerLanguage(name, syntax)`](#lowregisterlanguagename-syntax) | ||
* [`low.registerAlias(name[, alias])`](#lowregisteraliasname-alias) | ||
* [`low.listLanguages()`](#lowlistlanguages) | ||
* [Browser](#browser) | ||
* [`lowlight.highlight(language, value[, options])`](#lowlighthighlightlanguage-value-options) | ||
* [`lowlight.highlightAuto(value[, options])`](#lowlighthighlightautovalue-options) | ||
* [`lowlight.registerLanguage(language, syntax)`](#lowlightregisterlanguagelanguage-syntax) | ||
* [`lowlight.registerAlias(language, alias)`](#lowlightregisteraliaslanguage-alias) | ||
* [`lowlight.listLanguages()`](#lowlightlistlanguages) | ||
* [Syntaxes](#syntaxes) | ||
* [Related](#related) | ||
@@ -38,2 +45,5 @@ * [Projects](#projects) | ||
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c): | ||
Node 12+ is needed to use it and it must be `import`ed instead of `require`d. | ||
[npm][]: | ||
@@ -45,4 +55,2 @@ | ||
[Usage in the browser »][browser] | ||
## Use | ||
@@ -53,6 +61,7 @@ | ||
```js | ||
var low = require('lowlight') | ||
var tree = low.highlight('js', '"use strict";').value | ||
import {lowlight} from 'lowlight' | ||
console.log(tree) | ||
const tree = lowlight.highlight('js', '"use strict";') | ||
console.dir(tree, {depth: null}) | ||
``` | ||
@@ -63,22 +72,50 @@ | ||
```js | ||
[ | ||
{ | ||
type: 'element', | ||
tagName: 'span', | ||
properties: {className: ['hljs-meta']}, | ||
children: [{type: 'text', value: '"use strict"'}] | ||
}, | ||
{type: 'text', value: ';'} | ||
] | ||
{ | ||
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: ';'} | ||
] | ||
} | ||
``` | ||
Or, serialized with [rehype-stringify][]: | ||
hast trees can be serialized with [`hast-util-to-html`][to-html]: | ||
```js | ||
var unified = require('unified') | ||
var rehypeStringify = require('rehype-stringify') | ||
import {lowlight} from 'lowlight' | ||
import toHtml from 'hast-util-to-html' | ||
var processor = unified().use(rehypeStringify) | ||
var html = processor.stringify({type: 'root', children: tree}).toString() | ||
const tree = lowlight.highlight('js', '"use strict";') | ||
console.log(toHtml(tree)) | ||
``` | ||
Yields: | ||
```html | ||
<span class="hljs-meta">"use strict"</span>; | ||
``` | ||
hast trees can be turned into other things, like virtual DOMs, with | ||
[`hast-to-hyperscript`][to-hyperscript]. | ||
hast trees are also used throughout the **[rehype][]** (**[unified][]**) | ||
ecosystem: | ||
```js | ||
import unified from 'unified' | ||
import rehypeStringify from 'rehype-stringify' | ||
import {lowlight} from 'lowlight' | ||
const tree = lowlight.highlight('js', '"use strict";') | ||
const processor = unified().use(rehypeStringify) | ||
const html = processor.stringify(tree).toString() | ||
console.log(html) | ||
@@ -93,9 +130,9 @@ ``` | ||
> **Tip**: Use [`hast-to-hyperscript`][to-hyperscript] to transform to other | ||
> virtual DOMs, or DIY. | ||
## API | ||
### `low.highlight(language, value[, options])` | ||
This package exports the following identifiers: `lowlight`. | ||
There is no default export. | ||
### `lowlight.highlight(language, value[, options])` | ||
Parse `value` (`string`) according to the [`language`][names] grammar. | ||
@@ -109,10 +146,14 @@ | ||
[`Result`][result]. | ||
A hast [`Root`][root] with two `data` fields: | ||
* `relevance` (`number`) — How sure **low** is that the given code is in the | ||
language | ||
* `language` (`string`) — The detected `language` name | ||
###### Example | ||
```js | ||
var low = require('lowlight') | ||
import {lowlight} from 'lowlight' | ||
console.log(low.highlight('css', 'em { color: red }')) | ||
console.log(lowlight.highlight('css', 'em { color: red }')) | ||
``` | ||
@@ -123,6 +164,6 @@ | ||
```js | ||
{relevance: 4, language: 'css', value: [Array]} | ||
{type: 'root', data: {language: 'css', relevance: 3}, children: [Array]} | ||
``` | ||
### `low.highlightAuto(value[, options])` | ||
### `lowlight.highlightAuto(value[, options])` | ||
@@ -133,4 +174,4 @@ Parse `value` by guessing its grammar. | ||
* `prefix` (`string?`, default: `'hljs-'`) | ||
— Class prefix | ||
The options of `lowlight.highlight` are supported, plus: | ||
* `subset` (`Array.<string>?` default: all registered languages) | ||
@@ -141,3 +182,3 @@ — List of allowed languages | ||
[`Result`][result], with a `secondBest` if found. | ||
The same result as `lowlight.highlight` is returned. | ||
@@ -147,5 +188,5 @@ ###### Example | ||
```js | ||
var low = require('lowlight') | ||
import {lowlight} from 'lowlight' | ||
console.log(low.highlightAuto('"hello, " + name + "!"')) | ||
console.log(lowlight.highlightAuto('"hello, " + name + "!"')) | ||
``` | ||
@@ -156,29 +197,9 @@ | ||
```js | ||
{ | ||
relevance: 3, | ||
language: 'applescript', | ||
value: [Array], | ||
secondBest: {relevance: 3, language: 'basic', value: [Array]} | ||
} | ||
{type: 'root', data: {language: 'applescript', relevance: 3}, children: [Array]} | ||
``` | ||
### `Result` | ||
### `lowlight.registerLanguage(language, syntax)` | ||
`Result` is a highlighting result object. | ||
###### Properties | ||
* `relevance` (`number`) | ||
— How sure **low** is that the given code is in the found language | ||
* `language` (`string`) | ||
— The detected `language` | ||
* `value` ([`Array.<Node>`][hast-node]) | ||
— Virtual nodes representing the highlighted given code | ||
* `secondBest` ([`Result?`][result]) | ||
— Result of the second-best (based on `relevance`) match. | ||
Only set by `highlightAuto`, but can still be `null`. | ||
### `low.registerLanguage(name, syntax)` | ||
Register a [syntax][] as `name` (`string`). | ||
Register a [syntax][] as `language` (`string`). | ||
Useful in the browser or with custom grammars. | ||
@@ -189,8 +210,8 @@ | ||
```js | ||
var low = require('lowlight/lib/core') | ||
var xml = require('highlight.js/lib/languages/xml') | ||
import {lowlight} from 'lowlight/lib/core.js' | ||
import xml from 'highlight.js/lib/languages/xml.js' | ||
low.registerLanguage('xml', xml) | ||
lowlight.registerLanguage('xml', xml) | ||
console.log(low.highlight('html', '<em>Emphasis</em>')) | ||
console.log(lowlight.highlight('html', '<em>Emphasis</em>')) | ||
``` | ||
@@ -201,12 +222,12 @@ | ||
```js | ||
{relevance: 2, language: 'html', value: [Array]} | ||
{type: 'root', data: {language: 'html', relevance: 2}, children: [Array]} | ||
``` | ||
### `low.registerAlias(name[, alias])` | ||
### `lowlight.registerAlias(language, alias)` | ||
Register a new `alias` for the `name` language. | ||
Register a new `alias` for `language`. | ||
###### Signatures | ||
* `registerAlias(name, alias|list)` | ||
* `registerAlias(language, alias|list)` | ||
* `registerAlias(aliases)` | ||
@@ -216,7 +237,7 @@ | ||
* `name` (`string`) — [Name][names] of a registered language | ||
* `language` (`string`) — [Name][names] of a registered language | ||
* `alias` (`string`) — New alias for the registered language | ||
* `list` (`Array.<alias>`) — List of aliases | ||
* `aliases` (`Object.<alias|list>`) — Map where each key is a `name` and each | ||
value an `alias` or a `list` | ||
* `aliases` (`Object.<language, alias|list>`) — Map where each key is a | ||
`language` and each value an `alias` or a `list` | ||
@@ -226,16 +247,16 @@ ###### Example | ||
```js | ||
var low = require('lowlight/lib/core') | ||
var md = require('highlight.js/lib/languages/markdown') | ||
import {lowlight} from 'lowlight/lib/core.js' | ||
import md from 'highlight.js/lib/languages/markdown.js' | ||
low.registerLanguage('markdown', md) | ||
lowlight.registerLanguage('markdown', md) | ||
// low.highlight('mdown', '<em>Emphasis</em>') | ||
// lowlight.highlight('mdown', '<em>Emphasis</em>') | ||
// ^ would throw: Error: Unknown language: `mdown` is not registered | ||
low.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']}) | ||
low.highlight('mdown', '<em>Emphasis</em>') | ||
lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']}) | ||
lowlight.highlight('mdown', '<em>Emphasis</em>') | ||
// ^ Works! | ||
``` | ||
### `low.listLanguages()` | ||
### `lowlight.listLanguages()` | ||
@@ -251,33 +272,219 @@ List all registered languages. | ||
```js | ||
var low = require('lowlight/lib/core') | ||
var md = require('highlight.js/lib/languages/markdown') | ||
import {lowlight} from 'lowlight/lib/core.js' | ||
import md from 'highlight.js/lib/languages/markdown.js' | ||
console.log(low.listLanguages()) // => [] | ||
console.log(lowlight.listLanguages()) // => [] | ||
low.registerLanguage('markdown', md) | ||
lowlight.registerLanguage('markdown', md) | ||
console.log(low.listLanguages()) // => ['markdown'] | ||
console.log(lowlight.listLanguages()) // => ['markdown'] | ||
``` | ||
## Browser | ||
## Syntaxes | ||
It is not suggested to use the pre-built files or requiring `lowlight` in the | ||
browser as that would include 916kB (260kB GZipped) of code. | ||
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` | ||
Instead, require `lowlight/lib/core`, and include only the used highlighters. | ||
For example: | ||
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! | ||
```js | ||
var low = require('lowlight/lib/core') | ||
var js = require('highlight.js/lib/languages/javascript') | ||
<!--support start--> | ||
low.registerLanguage('javascript', js) | ||
* [ ] `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 | ||
* [x] `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++ | ||
* [x] `bash` (`sh`) — Bash | ||
* [ ] `basic` — BASIC | ||
* [ ] `bnf` — Backus–Naur Form | ||
* [ ] `brainfuck` (`bf`) — Brainfuck | ||
* [x] `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 | ||
* [x] `cpp` (`cc`, `c++`, `h++`, `hpp`, `hh`, `hxx`, `cxx`) — C++ | ||
* [ ] `crmsh` (`crm`, `pcmk`) — crmsh | ||
* [ ] `crystal` (`cr`) — Crystal | ||
* [x] `csharp` (`cs`, `c#`) — C# | ||
* [ ] `csp` — CSP | ||
* [x] `css` — CSS | ||
* [ ] `d` — D | ||
* [ ] `dart` — Dart | ||
* [ ] `delphi` (`dpr`, `dfm`, `pas`, `pascal`) — Delphi | ||
* [x] `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 | ||
* [x] `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 | ||
* [x] `ini` (`toml`) — TOML, also INI | ||
* [ ] `irpf90` — IRPF90 | ||
* [ ] `isbl` — ISBL | ||
* [x] `java` (`jsp`) — Java | ||
* [x] `javascript` (`js`, `jsx`, `mjs`, `cjs`) — Javascript | ||
* [ ] `jboss-cli` (`wildfly-cli`) — JBoss CLI | ||
* [x] `json` — JSON | ||
* [ ] `julia` — Julia | ||
* [ ] `julia-repl` — Julia REPL | ||
* [x] `kotlin` (`kt`, `kts`) — Kotlin | ||
* [ ] `lasso` (`ls`, `lassoscript`) — Lasso | ||
* [ ] `latex` (`tex`) — LaTeX | ||
* [ ] `ldif` — LDIF | ||
* [ ] `leaf` — Leaf | ||
* [x] `less` — Less | ||
* [ ] `lisp` — Lisp | ||
* [ ] `livecodeserver` — LiveCode | ||
* [ ] `livescript` (`ls`) — LiveScript | ||
* [ ] `llvm` — LLVM IR | ||
* [ ] `lsl` — LSL (Linden Scripting Language) | ||
* [x] `lua` — Lua | ||
* [x] `makefile` (`mk`, `mak`, `make`) — Makefile | ||
* [x] `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 | ||
* [x] `objectivec` (`mm`, `objc`, `obj-c`, `obj-c++`, `objective-c++`) — Objective-C | ||
* [ ] `ocaml` (`ml`) — OCaml | ||
* [ ] `openscad` (`scad`) — OpenSCAD | ||
* [ ] `oxygene` — Oxygene | ||
* [ ] `parser3` — Parser3 | ||
* [x] `perl` (`pl`, `pm`) — Perl | ||
* [ ] `pf` (`pf.conf`) — Packet Filter config | ||
* [ ] `pgsql` (`postgres`, `postgresql`) — PostgreSQL | ||
* [x] `php` — undefined | ||
* [x] `php-template` — PHP template | ||
* [x] `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 | ||
* [x] `python` (`py`, `gyp`, `ipython`) — Python | ||
* [x] `python-repl` (`pycon`) — undefined | ||
* [ ] `q` (`k`, `kdb`) — Q | ||
* [ ] `qml` (`qt`) — QML | ||
* [x] `r` — R | ||
* [ ] `reasonml` (`re`) — ReasonML | ||
* [ ] `rib` — RenderMan RIB | ||
* [ ] `roboconf` (`graph`, `instances`) — Roboconf | ||
* [ ] `routeros` (`mikrotik`) — Microtik RouterOS script | ||
* [ ] `rsl` — RenderMan RSL | ||
* [x] `ruby` (`rb`, `gemspec`, `podspec`, `thor`, `irb`) — Ruby | ||
* [ ] `ruleslanguage` — Oracle Rules Language | ||
* [x] `rust` (`rs`) — Rust | ||
* [ ] `sas` — SAS | ||
* [ ] `scala` — Scala | ||
* [ ] `scheme` — Scheme | ||
* [ ] `scilab` (`sci`) — Scilab | ||
* [x] `scss` — SCSS | ||
* [x] `shell` (`console`, `shellsession`) — Shell Session | ||
* [ ] `smali` — Smali | ||
* [ ] `smalltalk` (`st`) — Smalltalk | ||
* [ ] `sml` (`ml`) — SML (Standard ML) | ||
* [ ] `sqf` — SQF | ||
* [x] `sql` — SQL | ||
* [ ] `stan` (`stanfuncs`) — Stan | ||
* [ ] `stata` (`do`, `ado`) — Stata | ||
* [ ] `step21` (`p21`, `step`, `stp`) — STEP Part 21 | ||
* [ ] `stylus` (`styl`) — Stylus | ||
* [ ] `subunit` — SubUnit | ||
* [x] `swift` — Swift | ||
* [ ] `taggerscript` — Tagger Script | ||
* [ ] `tap` — Test Anything Protocol | ||
* [ ] `tcl` (`tk`) — Tcl | ||
* [ ] `thrift` — Thrift | ||
* [ ] `tp` — TP | ||
* [ ] `twig` (`craftcms`) — Twig | ||
* [x] `typescript` (`ts`, `tsx`) — TypeScript | ||
* [ ] `vala` — Vala | ||
* [x] `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 | ||
* [ ] `wren` — Wren | ||
* [ ] `x86asm` — Intel x86 Assembly | ||
* [ ] `xl` (`tao`) — XL | ||
* [x] `xml` (`html`, `xhtml`, `rss`, `atom`, `xjb`, `xsd`, `xsl`, `plist`, `wsf`, `svg`) — HTML, XML | ||
* [ ] `xquery` (`xpath`, `xq`) — XQuery | ||
* [x] `yaml` (`yml`) — YAML | ||
* [ ] `zephir` (`zep`) — Zephir | ||
low.highlight('js', '"use strict";') | ||
// See `Usage` for the results. | ||
``` | ||
<!--support end--> | ||
…when using [browserify][] and minifying with [tinyify][] this results in 24kB | ||
of code (9kB with GZip). | ||
## Related | ||
@@ -331,6 +538,10 @@ | ||
[rehype-stringify]: https://github.com/rehypejs/rehype/tree/main/packages/rehype-stringify | ||
[to-html]: https://github.com/syntax-tree/hast-util-to-html | ||
[hast-node]: https://github.com/syntax-tree/hast#ast | ||
[rehype]: https://github.com/rehypejs/rehype | ||
[unified]: https://github.com/unifiedjs/unified | ||
[root]: https://github.com/syntax-tree/hast#root | ||
[highlight.js]: https://github.com/highlightjs/highlight.js | ||
@@ -348,12 +559,4 @@ | ||
[browser]: #browser | ||
[result]: #result | ||
[prism]: https://github.com/PrismJS/prism | ||
[refractor]: https://github.com/wooorm/refractor | ||
[browserify]: https://github.com/browserify/browserify | ||
[tinyify]: https://github.com/browserify/tinyify |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7
543
Yes
28329
3
18
333
1
+ Added@types/hast@^2.0.0
+ Added@types/hast@2.3.10(transitive)
+ Added@types/unist@2.0.11(transitive)
+ Addedfault@2.0.1(transitive)
+ Addedhighlight.js@11.0.1(transitive)
- Removedfault@1.0.4(transitive)
- Removedhighlight.js@10.7.3(transitive)
Updatedfault@^2.0.0
Updatedhighlight.js@~11.0.0