Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed
https://markdown-it.github.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
2.0 KiB
51 lines
2.0 KiB
10 years ago
|
# Development recommendations
|
||
|
|
||
|
Prior to continue, make sure you've readed:
|
||
|
|
||
|
1. [README](https://github.com/markdown-it/markdown-it#markdown-it)
|
||
|
2. [API documentation](https://markdown-it.github.io/markdown-it/)
|
||
|
3. [Architecture description](architecture.md)
|
||
|
|
||
|
|
||
|
## General considerations for plugins.
|
||
|
|
||
|
1. Try to understand, where your plugin rule sould be located
|
||
|
- Will it conflict with existing markup (by priority)?
|
||
|
- If yes - you need to write inline or block rule.
|
||
|
- If no - you can morth tokens in core chain.
|
||
|
- Remember, that tokens morphing in core is always more simple than writing
|
||
|
block / inline rules. However, block / inline rules are usually faster
|
||
|
- Sometime it's enougth to modify renderer only (for example, to add
|
||
|
header IDs or target=_blank for the links)
|
||
|
2. Search existing [plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin)
|
||
|
or [rules](https://github.com/markdown-it/markdown-it/tree/master/lib),
|
||
|
doing something similar. It can me more simple to modify existing code,
|
||
|
instead of writing from scratch.
|
||
|
3. If you did all steps above, but still has questions - ask in
|
||
|
[tracker](https://github.com/markdown-it/markdown-it/issues). But, please:
|
||
|
- Be specific. Generic questions like "how to do plugins" and
|
||
|
"how to learn programming" are not accepted.
|
||
|
- Don't ask us to break [CommonMark](http://commonmark.org/) specification.
|
||
|
Such things should be discussed first on [CommonMark forum](http://talk.commonmark.org/).
|
||
|
|
||
|
|
||
|
## Notes for NPM packages
|
||
|
|
||
|
To simplify search:
|
||
|
|
||
|
- add to `package.json` keyswords `markdown-it` and `markdown-it-plugin` for plugins
|
||
|
- add keyword `markdown-it` for any other related packages.
|
||
|
|
||
|
|
||
|
## FAQ
|
||
|
|
||
|
#### I need async rule, how to do it?
|
||
|
|
||
|
Sorry. You can't do it directly. All complex parsers are sync by nature. But you
|
||
|
can use workarounds:
|
||
|
|
||
|
1. On parse phase, replace content by random number and store it in `env`.
|
||
|
2. Do async processing over collected data.
|
||
|
3. Render content and replace those random numbers with text
|
||
|
(or replace first, then render)
|