rehype-pre-language

This package is a unified (rehype) plugin to add language information as a property to pre element (compatible with new parser "micromark").
"unified" is a project that transforms content with abstract syntax trees (ASTs). "rehype" is a tool that transforms HTML with plugins. "hast" stands for HTML Abstract Syntax Tree (HAST) that rehype uses.
This plugin is a rehype plugin that adds language information into "className" of the <pre />
element that has a <code />
element inside if the <code />
element's className contains a language information.
When should I use this?
This plugin rehype-pre-language
is useful if there is no language information in <pre>
element but <code>
element like <pre><code className="language-typescript"></pre>
, and you need <pre>
element to have language information.
Installation
This package is suitable for ESM only. In Node.js (version 16+), install with npm:
npm install rehype-pre-language
or
yarn add rehype-pre-language
Usage
Say we have the following markdown file, example.md
:
```javascript
const me = "ipikuka";
```
And our module, example.js
, looks as follows:
import { read } from "to-vfile";
import remark from "remark";
import gfm from "remark-gfm";
import remarkRehype from "remark-rehype";
import rehypeStringify from "rehype-stringify";
import rehypePreLanguage from "rehype-pre-language";
main();
async function main() {
const file = await remark()
.use(gfm)
.use(remarkRehype)
.use(rehypePreLanguage)
.use(rehypeStringify)
.process(await read("example.md"));
console.log(String(file));
}
Now, running node example.js
you see that the <pre>
element has a "class" with language information:
<pre class="javascript"><code class="language-javascript">const me = "ipikuka";
</code></pre>
Without rehype-pre-language
, the <pre>
element wouldn't have a language information:
<pre><code class="language-javascript">const me = "ipikuka";
</code></pre>
Options
There is one string option which is a property of <pre>
element in which the language information is going to be passed.
type PreLanguageOption = string;
use(rehypePreLanguage, PreLanguageOption);
Examples:
use(rehypePreLanguage);
use(rehypePreLanguage, "className");
use(rehypePreLanguage, "data-language");
Syntax tree
This plugin modifies the hast
(HTML abstract syntax tree).
Types
This package is fully typed with TypeScript.
The plugin exports the type PreLanguageOption
.
Compatibility
This plugin works with unified version 6+ and remark version 7+.
Security
Use of rehype-pre-language
involves rehype (hast), but doesn't lead to cross-site scripting (XSS) attacks.
My Plugins
My Rehype Plugins
My Recma Plugins
recma-mdx-escape-missing-components
– Recma plugin to set the default value () => null
for the Components in MDX in case of missing or not provided so as not to throw an error
recma-mdx-change-props
– Recma plugin to change the props
parameter into the _props
in the function _createMdxContent(props) {/* */}
in the compiled source in order to be able to use {props.foo}
like expressions. It is useful for the next-mdx-remote
or next-mdx-remote-client
users in nextjs
applications.
License
MIT © ipikuka
Keywords
unified rehype rehype-plugin hast markdown