Package Exports
- slimdown-js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (slimdown-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
slimdown-js
A basic regex-based Markdown parser based on the gist by Johnny Broadway, converted from PHP to TypeScript, extended with several additional elements (images, tables, code blocks) and published to npm
.
Inspired by:
- https://gist.github.com/plugnburn/f0d12e38b6416a77c098
- https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js
- https://gist.github.com/plugnburn/f0d12e38b6416a77c098
Supports the following elements (and can be extended via
Slimdown.add_rule(regexp: RegExp, replacement: string | Function)
):
- Headers
- Images
- Links
- Bold
- Emphasis
- Deletions
- Quotes
- Inline code
- Code blocks
- Blockquotes
- Tables
- Ordered/unordered lists (one level deep only)
Size
The main reason for using this library, which hasn't been extensively tested and is not completely compatible with the spec, is to have something small. Version 0.1.0's size is 2.614 bytes, uncompressed, and 1.267 bytes using gzip compression.
For more advanced scenario's, however, I can recommend marked, albeit at a bigger size: marked.min.js is 23.372 bytes uncompressed, and 7.684 bytes using gzip.
Playground
Head over to flems.io for a live example.
Usage
Here is the general use case:
import { Slimdown } from 'slimdown-js';
console.log(Slimdown.render('# Page title\n\nAnd **now** for something _completely_ different.'));
Adding rules
A simple rule to convert :)
to an image:
import { Slimdown } from 'slimdown-js';
Slimdown.addRule ('/(\W)\:\)(\W)/', '$1<img src="smiley.png" />$2');
console.log(Slimdown.render(('Know what I\'m sayin? :)'));
In this example, we add GitHub-style internal linking
(e.g., [[Another Page]]
).
import { Slimdown } from 'slimdown-js';
console.log(Slimdown.render(
const mywiki_internal_link = (title: string) => `<a href="${title.replace(/[^a-zA-Z0-9_-]+/g, '_')}">${title}</a>`;
Slimdown.add_rule('/\[\[(.*?)\]\]/e', mywiki_internal_link('$1'));
console.log(Slimdown.render ('Check [[This Page]] out!'));
A longer example
import { Slimdown } from 'slimdown-js';
console.log(Slimdown.render(`# A longer example
And *now* [a link](http://www.google.com) to **follow** and [another](http://yahoo.com/).
* One
* Two
* Three
## Subhead
One **two** three **four** five.
One __two__ three _four_ five __six__ seven _eight_.
1. One
2. Two
3. Three
More text with `inline($code)` sample.
> A block quote
> across two lines.
More text...`));