ANSI syntax highlighting for the terminal
MIT License
ANSI syntax highlighting for the terminal.
This package wraps lowlight
to output ANSI syntax
highlighting instead of HTML.
It can support 190+ programming languages.
This package is useful when you want to display code on a terminal.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install emphasize
In Deno with esm.sh
:
import {all, common, createEmphasize} from 'https://esm.sh/emphasize@7'
In browsers with esm.sh
:
<script type="module">
import {all, common, createEmphasize} from 'https://esm.sh/emphasize@7?bundle'
</script>
Say example.css
looks as follows:
@font-face {
font-family: Alpha;
src: url('Bravo.otf');
}
body, .charlie, #delta {
color: #bada55;
background-color: rgba(33, 33, 33, 0.33);
font-family: "Alpha", sans-serif;
}
@import url(echo.css);
@media print {
a[href^=http]::after {
content: attr(href)
}
}
…and example.js
contains the following:
import fs from 'node:fs/promises'
import {emphasize} from 'emphasize'
const doc = String(await fs.readFile('example.css'))
const output = emphasize.highlightAuto(doc).value
console.log(output)
…now running node example.js
yields:
\x1B[32m@font-face\x1B[39m {
\x1B[33mfont-family\x1B[39m: Alpha;
\x1B[33msrc\x1B[39m: \x1B[31murl\x1B[39m(\x1B[36m'Bravo.otf'\x1B[39m);
}
\x1B[32mbody\x1B[39m, \x1B[34m.charlie\x1B[39m, \x1B[34m#delta\x1B[39m {
\x1B[33mcolor\x1B[39m: \x1B[36m#bada55\x1B[39m;
\x1B[33mbackground-color\x1B[39m: \x1B[31mrgba\x1B[39m(\x1B[36m33\x1B[39m, \x1B[36m33\x1B[39m, \x1B[36m33\x1B[39m, \x1B[36m0.33\x1B[39m);
\x1B[33mfont-family\x1B[39m: \x1B[36m"Alpha"\x1B[39m, sans-serif;
}
\x1B[32m@import\x1B[39m url(echo.css);
\x1B[32m@media\x1B[39m print {
\x1B[32ma\x1B[39m\x1B[35m[href^=http]\x1B[39m\x1B[35m::after\x1B[39m {
\x1B[33mcontent\x1B[39m: \x1B[31mattr\x1B[39m(href)
}
}
…which looks as follows:
This package exports the identifiers
all
,
common
,
and createEmphasize
.
There is no default export.
It exports the TypeScript types
AutoOptions
,
LanguageFn
,
Result
,
Sheet
,
and Style
.
all
Map of all (±190) grammars (Record<string, LanguageFn>
).
See all
from lowlight
.
common
Map of common (37) grammars (Record<string, LanguageFn>
).
See common
from lowlight
.
createEmphasize(grammars?)
Create a emphasize
instance.
grammars
(Record<string, LanguageFn>
, optional)Emphasize (emphasize
).
emphasize.highlight(language, value[, options])
Highlight value
(code) as language
(name).
language
(string
)value
(string
)sheet
(Sheet
, optional)emphasize.highlightAuto(value[, options])
Highlight value
(code) and guess its programming language.
value
(string
)options
(AutoOptions
or Sheet
,emphasize.listLanguages()
List registered languages.
emphasize.register(grammars)
Register languages.
See lowlight.register
.
emphasize.registerAlias(aliases)
Register aliases.
emphasize.registered(aliasOrLanguage)
Check whether an alias or name is registered.
See lowlight.registered
.
AutoOptions
Configuration for highlightAuto
(TypeScript type).
sheet
(Sheet
, optional)subset
(Array<string>
, default: all registered languages)LanguageFn
Highlight.js grammar (TypeScript type).
Result
Result (TypeScript type).
language
(string
or undefined
)relevance
(number
or undefined
)lowlight
is that the given code is in the languagevalue
(string
)Sheet
Map highlight.js
classes to styles functions
(TypeScript type).
The hljs-
prefix must not be used in those classes.
The “descendant selector” (a space) is supported.
For convenience chalk’s chaining of styles is suggested. An abbreviated example is as follows:
{
'comment': chalk.gray,
'meta meta-string': chalk.cyan,
'meta keyword': chalk.magenta,
'emphasis': chalk.italic,
'strong': chalk.bold,
'formula': chalk.inverse
}
type Sheet = Record<string, Style>
Style
Color something (TypeScript type).
value
(string
)Output (string
).
This projects is compatible with maintained versions of Node.js.
When we cut a new major release,
we drop support for unmaintained versions of Node.
This means we try to keep the current release line,
emphasize@7
,
compatible with Node.js 16.
This package is safe.
Yes please! See How to Contribute to Open Source.