plugin to apply syntax highlighting to code with `starry-night`
29
stars
27
commits
JavaScript
primary language
Oct 11, 2024
updated
rehype plugin to apply syntax highlighting to code with
starry-night.
This package is a unified (rehype) plugin to
perform syntax highlighting.
It uses starry-night,
which is a high quality highlighter that can support tons of grammars and
approaches how GitHub renders code.
This plugin is useful when you want to perform syntax highlighting in rehype.
If you are not using rehype,
you can instead use starry-night directly.
You can combine this package with rehype-twoslash.
That processes JavaScript and TypeScript code with twoslash and
also uses starry-night just for that code.
starry-night has a WASM dependency,
and rather big grammars,
which means that this plugin might be too heavy particularly in browsers,
in which case rehype-highlight might be more
suitable.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install rehype-starry-night
In Deno with esm.sh:
import rehypeStarryNight from 'https://esm.sh/rehype-starry-night@2'
In browsers with esm.sh:
<script type="module">
import rehypeStarryNight from 'https://esm.sh/rehype-starry-night@2?bundle'
</script>
Say we have the following file example.md:
# Neptune
```rs
fn main() {
println!("Hello, Neptune!");
}
```
…and our module example.js contains:
import rehypeStarryNight from 'rehype-starry-night'
import rehypeStringify from 'rehype-stringify'
import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype'
import {read} from 'to-vfile'
import {unified} from 'unified'
const file = await read('example.md')
await unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeStarryNight)
.use(rehypeStringify)
.process(file)
console.log(String(file))
…then running node example.js yields:
<h1>Neptune</h1>
<pre><code class="language-rs"><span class="pl-k">fn</span> <span class="pl-en">main</span>() {
<span class="pl-en">println!</span>(<span class="pl-s"><span class="pl-pds">"</span>Hello, Neptune!<span class="pl-pds">"</span></span>);
}
</code></pre>
OptionsConfiguration for rehype-starry-night.
StarryNightOptionsallowMissingScopes? (boolean | null | undefined)
— do not warn for missing scopes (default: false)grammars? (ReadonlyArray<Grammar> | null | undefined)
— grammars to support (default: common)plainText? (ReadonlyArray<string> | null | undefined)
— list of language names to not highlight (default: [])rehypeStarryNight(options) (default)Plugin to highlight code with starry-night.
options? (Readonly<Options> | null | undefined)
— configuration (optional)Transform ((tree: Root, file: VFile) => Promise<Root>).
On the input side,
this plugin looks for code blocks with a language-* class.
On the output side,
this plugin generates span elements with classes that can be enhanced with
CSS.
See “CSS” in starry-night for more info.
Projects maintained by the unified collective are 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, rehype-starry-night@2,
compatible with Node.js 16.
This package is safe.
rehype-highlight
— highlight code blocks with lowlightrehype-twoslash
— process JavaScript/TypeScript code with twoslash and starry-night tooSee contributing.md in rehypejs/.github
for ways to get started.
See support.md for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
JavaScript
100.0%
plugin to apply syntax highlighting to code with `starry-night`
29
stars
27
commits
JavaScript
primary language
Oct 11, 2024
updated
rehype plugin to apply syntax highlighting to code with
starry-night.
This package is a unified (rehype) plugin to
perform syntax highlighting.
It uses starry-night,
which is a high quality highlighter that can support tons of grammars and
approaches how GitHub renders code.
This plugin is useful when you want to perform syntax highlighting in rehype.
If you are not using rehype,
you can instead use starry-night directly.
You can combine this package with rehype-twoslash.
That processes JavaScript and TypeScript code with twoslash and
also uses starry-night just for that code.
starry-night has a WASM dependency,
and rather big grammars,
which means that this plugin might be too heavy particularly in browsers,
in which case rehype-highlight might be more
suitable.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install rehype-starry-night
In Deno with esm.sh:
import rehypeStarryNight from 'https://esm.sh/rehype-starry-night@2'
In browsers with esm.sh:
<script type="module">
import rehypeStarryNight from 'https://esm.sh/rehype-starry-night@2?bundle'
</script>
Say we have the following file example.md:
# Neptune
```rs
fn main() {
println!("Hello, Neptune!");
}
```
…and our module example.js contains:
import rehypeStarryNight from 'rehype-starry-night'
import rehypeStringify from 'rehype-stringify'
import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype'
import {read} from 'to-vfile'
import {unified} from 'unified'
const file = await read('example.md')
await unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeStarryNight)
.use(rehypeStringify)
.process(file)
console.log(String(file))
…then running node example.js yields:
<h1>Neptune</h1>
<pre><code class="language-rs"><span class="pl-k">fn</span> <span class="pl-en">main</span>() {
<span class="pl-en">println!</span>(<span class="pl-s"><span class="pl-pds">"</span>Hello, Neptune!<span class="pl-pds">"</span></span>);
}
</code></pre>
OptionsConfiguration for rehype-starry-night.
StarryNightOptionsallowMissingScopes? (boolean | null | undefined)
— do not warn for missing scopes (default: false)grammars? (ReadonlyArray<Grammar> | null | undefined)
— grammars to support (default: common)plainText? (ReadonlyArray<string> | null | undefined)
— list of language names to not highlight (default: [])rehypeStarryNight(options) (default)Plugin to highlight code with starry-night.
options? (Readonly<Options> | null | undefined)
— configuration (optional)Transform ((tree: Root, file: VFile) => Promise<Root>).
On the input side,
this plugin looks for code blocks with a language-* class.
On the output side,
this plugin generates span elements with classes that can be enhanced with
CSS.
See “CSS” in starry-night for more info.
Projects maintained by the unified collective are 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, rehype-starry-night@2,
compatible with Node.js 16.
This package is safe.
rehype-highlight
— highlight code blocks with lowlightrehype-twoslash
— process JavaScript/TypeScript code with twoslash and starry-night tooSee contributing.md in rehypejs/.github
for ways to get started.
See support.md for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
JavaScript
100.0%