Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rhysd/remark-emoji
Remark markdown transformer to replace :emoji: in text
https://github.com/rhysd/remark-emoji
emoji remark remark-plugin
Last synced: 2 days ago
JSON representation
Remark markdown transformer to replace :emoji: in text
- Host: GitHub
- URL: https://github.com/rhysd/remark-emoji
- Owner: rhysd
- License: mit
- Created: 2016-10-01T09:15:15.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-07-18T11:38:41.000Z (5 months ago)
- Last Synced: 2024-10-29T21:02:01.182Z (about 2 months ago)
- Topics: emoji, remark, remark-plugin
- Language: TypeScript
- Size: 676 KB
- Stars: 125
- Watchers: 6
- Forks: 18
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - remark-emoji
README
remark-emoji
============
[![CI][ci-badge]][ci]
[![npm][npm-badge]][npm][remark-emoji][npm] is a [remark](https://github.com/remarkjs/remark) plugin to replace `:emoji:` to real UTF-8
emojis in Markdown text. This plugin is built on top of [node-emoji](https://www.npmjs.com/package/node-emoji).
The accessibility support and [Emoticon](https://en.wikipedia.org/wiki/Emoticon) support are optionally available.## Demo
You can find a demo in the following [Codesandbox](https://codesandbox.io/p/sandbox/remark-emoji-example-w6yrmm).
## Usage
```
remark().use(emoji [, options]);
``````javascript
import { remark } from 'remark';
import emoji from 'remark-emoji';const doc = 'Emojis in this text will be replaced: :dog::+1:';
const processor = remark().use(emoji);
const file = await processor.process(doc);console.log(String(file));
// => Emojis in this text will be replaced: πΆπ
```Note:
- This package is [ESM only][esm-only] from v3.0.0 since remark packages migrated to ESM.
- This package supports Node.js v18 or later.## Options
### `options.accessible`
Setting to `true` makes the converted emoji text accessible with `role` and `aria-label` attributes. Each emoji
text is wrapped with `` element. The `role` and `aria-label` attribute are not allowed by default. Please
add them to the sanitization schema used by remark's HTML transformer. The default sanitization schema is exported
from [rehype-sanitize](https://www.npmjs.com/package/rehype-sanitize) package.For example,
```javascript
import remarkParse from 'remark-parse';
import toRehype from 'remark-rehype';
import sanitize, { defaultSchema } from 'rehype-sanitize';
import stringify from 'rehype-stringify';
import emoji from 'remark-emoji';
import { unified } from 'unified';// Allow using `role` and `aria-label` attributes in transformed HTML document
const schema = structuredClone(defaultSchema);
if ('span' in schema.attributes) {
schema.attributes.span.push('role', 'ariaLabel');
} else {
schema.attributes.span = ['role', 'ariaLabel'];
}// Markdown text processor pipeline
const processor = unified()
.use(remarkParse)
.use(emoji, { accessible: true })
.use(toRehype)
.use(sanitize, schema)
.use(stringify);const file = await processor.process('Hello :dog:!');
console.log(String(file));
```yields
```html
Hello πΆ!
```Default value is `false`.
### `options.padSpaceAfter`
Setting to `true` means that an extra whitespace is added after emoji.
This is useful when browser handle emojis with half character length and following character is hidden.
Default value is `false`.### `options.emoticon`
Setting to `true` means that [emoticon](https://www.npmjs.com/package/emoticon) shortcodes are supported (e.g. :-)
will be replaced by π). Default value is `false`.## TypeScript support
remark-emoji package contains [TypeScript](https://www.typescriptlang.org/) type definitions. The package is ready
for use with TypeScript.Note that the legacy `node` (or `node10`) resolution at [`moduleResolution`](https://www.typescriptlang.org/tsconfig#moduleResolution)
is not available since it enforces CommonJS module resolution and this package is ESM only. Please use `node16`,
`bundler`, or `nodenext` to enable ESM module resolution.## License
Distributed under [the MIT License](LICENSE).
[ci-badge]: https://github.com/rhysd/remark-emoji/actions/workflows/ci.yml/badge.svg
[ci]: https://github.com/rhysd/remark-emoji/actions/workflows/ci.yml
[npm-badge]: https://badge.fury.io/js/remark-emoji.svg
[npm]: https://www.npmjs.com/package/remark-emoji
[esm-only]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c