Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/igassmann/remark-directive-rehype
Remark plugin to enable Markdown directives to be parsed as HTML.
https://github.com/igassmann/remark-directive-rehype
directive hast markdown mdast plugin rehype remark remark-directive remark-plugin unified
Last synced: about 1 month ago
JSON representation
Remark plugin to enable Markdown directives to be parsed as HTML.
- Host: GitHub
- URL: https://github.com/igassmann/remark-directive-rehype
- Owner: IGassmann
- License: unlicense
- Created: 2021-11-15T10:22:55.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-03-01T20:59:53.000Z (over 1 year ago)
- Last Synced: 2024-09-19T09:20:09.960Z (about 2 months ago)
- Topics: directive, hast, markdown, mdast, plugin, rehype, remark, remark-directive, remark-plugin, unified
- Language: TypeScript
- Homepage:
- Size: 162 KB
- Stars: 30
- Watchers: 1
- Forks: 3
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: docs/CONTRIBUTING.md
Awesome Lists containing this project
README
# remark-directive-rehype
**[remark][]** plugin to integrate [remark-directive][] with [remark-rehype][].
## What is this?
This package is a [unified][] ([remark][]) plugin to enable Markdown directives to be parsed as HTML
when using [remark-rehype][]. Markdown directives are first parsed with [remark-directive][]
which needs to be used before this plugin.**unified** is a project that transforms content with abstract syntax trees
(ASTs).
**remark** adds support for markdown to unified.
**rehype** adds support for HTML to unified.
**mdast** is the markdown AST that remark uses.
**hast** is the markdown AST that rehype uses.
This is a remark plugin that transforms mdast.## When should I use this?
This project is useful when you want directives parsed by [remark-directive][] to be later parsed as
HTML ([hast][] nodes) when using [remark-rehype][]. This is specifically useful when one wants to
convert Markdown directives into HTML tags that can be outputted as components with
[react-markdown][].## Installation
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).
In Node.js (version 12.20+, 14.14+, or 16.0+), install with [yarn][] or [npm][] :```sh
yarn add remark-directive-rehype
npm install remark-directive-rehype
```In Deno with [Skypack][]:
```js
import remarkDirectiveRehype from 'https://cdn.skypack.dev/remark-directive-rehype'
```In browsers with [Skypack][]:
```html
import remarkDirectiveRehype from 'https://cdn.skypack.dev/remark-directive-rehype?min'
```
## Usage
Say we have the following file, `example.md`:
```markdown
:::documentation-page{title="Welcome"}Please install :inline-code[unified]!
::copyright-notice{year="2020"}
:::
```And our module `example.js` looks as follows:
```js
import {read} from 'to-vfile'
import {unified} from 'unified'
import remarkParse from 'remark-parse'
import remarkDirective from 'remark-directive'
import remarkDirectiveRehype from 'remark-directive-rehype'
import remarkRehype from 'remark-rehype'
import rehypeStringify from 'rehype-stringify'main()
async function main() {
const file = await unified()
.use(remarkParse)
.use(remarkDirective)
.use(remarkDirectiveRehype)
.use(remarkRehype)
.use(rehypeStringify)
.process(await read('example.md'))console.log(String(file))
}
```Now running `node example` yields:
```html
Please install unified!
```
## Examples
### Example: `react-markdown`
You can use it with [react-markdown][] to render custom React components for each defined directive.
```js
import React from 'react'
import ReactDom from 'react-dom'
import ReactMarkdown from 'react-markdown'
import remarkDirective from 'remark-directive'
import remarkDirectiveRehype from 'remark-directive-rehype'const markdown = `
# Cat videos::youtube-video[Video of a cat in a box]{#01ab2cd3efg}
`const YouTubeVideo = ({id, children}) => (
{children}
)ReactDom.render(
,
document.body
)
```Yields:
```html
Cat videos
Video of a cat in a box
```### Example: `rehype-components`
You can use in conjunction with [rehype-components][] to render components made with [hastscript][].
```js
// …const file = await unified()
.use(remarkParse)
.use(remarkDirective)
.use(remarkDirectiveRehype)
.use(remarkRehype)
.use(rehypeComponents, {
components: {
'documentation-page': DocumentationPage,
'inline-code': InfoBox,
'copyright-notice': CopyrightNotice,
},
})
.use(rehypeStringify)
.process(await read('example.md'))console.log(String(file))
```See [rehype-components][] for more information on how to implement the components.
## Contributing
Contributions are always welcome!
See [`./docs/CONTRIBUTING.md`](./docs/CONTRIBUTING.md) for ways to get started.
[remark]: https://github.com/remarkjs/remark
[remark-directive]: https://github.com/remarkjs/remark-directive
[remark-rehype]: https://github.com/remarkjs/remark-rehype
[unified]: https://github.com/unifiedjs/unified
[hast]: https://github.com/syntax-tree/hast
[yarn]: https://yarnpkg.com/lang/en/docs/install/
[npm]: https://docs.npmjs.com/cli/install
[skypack]: https://www.skypack.dev/
[react-markdown]: https://github.com/remarkjs/react-markdown
[rehype-components]: https://github.com/marekweb/rehype-components
[hastscript]: https://github.com/syntax-tree/hastscript