ANSI syntax highlighting for the terminal
117
stars
115
commits
JavaScript
primary language
Nov 1, 2023
updated
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.
allMap of all (±190) grammars (Record<string, LanguageFn>).
See all from lowlight.
commonMap of common (37) grammars (Record<string, LanguageFn>).
See common from lowlight.
createEmphasize(grammars?)Create a emphasize instance.
grammars (Record<string, LanguageFn>, optional)
— grammars to addEmphasize (emphasize).
emphasize.highlight(language, value[, options])Highlight value (code) as language (name).
language (string)
— programming language namevalue (string)
— code to highlightsheet (Sheet, optional)
— style sheetemphasize.highlightAuto(value[, options])Highlight value (code) and guess its programming language.
value (string)
— code to highlightoptions (AutoOptions or Sheet,
optional)
— configuration or style sheetemphasize.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.
AutoOptionsConfiguration for highlightAuto (TypeScript type).
sheet (Sheet, optional)
— sheetsubset (Array<string>, default: all registered languages)
— list of allowed languagesLanguageFnHighlight.js grammar (TypeScript type).
ResultResult (TypeScript type).
language (string or undefined)
— detected programming language.relevance (number or undefined)
— how sure lowlight is that the given code is in the languagevalue (string)
— highlighted codeSheetMap 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>
StyleColor something (TypeScript type).
value (string)
— inputOutput (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.
111 commits
4 commits
JavaScript
100.0%
ANSI syntax highlighting for the terminal
117
stars
115
commits
JavaScript
primary language
Nov 1, 2023
updated
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.
allMap of all (±190) grammars (Record<string, LanguageFn>).
See all from lowlight.
commonMap of common (37) grammars (Record<string, LanguageFn>).
See common from lowlight.
createEmphasize(grammars?)Create a emphasize instance.
grammars (Record<string, LanguageFn>, optional)
— grammars to addEmphasize (emphasize).
emphasize.highlight(language, value[, options])Highlight value (code) as language (name).
language (string)
— programming language namevalue (string)
— code to highlightsheet (Sheet, optional)
— style sheetemphasize.highlightAuto(value[, options])Highlight value (code) and guess its programming language.
value (string)
— code to highlightoptions (AutoOptions or Sheet,
optional)
— configuration or style sheetemphasize.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.
AutoOptionsConfiguration for highlightAuto (TypeScript type).
sheet (Sheet, optional)
— sheetsubset (Array<string>, default: all registered languages)
— list of allowed languagesLanguageFnHighlight.js grammar (TypeScript type).
ResultResult (TypeScript type).
language (string or undefined)
— detected programming language.relevance (number or undefined)
— how sure lowlight is that the given code is in the languagevalue (string)
— highlighted codeSheetMap 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>
StyleColor something (TypeScript type).
value (string)
— inputOutput (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.
111 commits
4 commits
JavaScript
100.0%