- no use of external dependencies
- lexer: to produce markdown tokens
- parser: to produce the HTML code from the lexer
- code highlighting support
- support for front matter
Checkout the features of the parser from this Live Demo.
npm i htmlmark
import HtmlMark from 'htmlmark';
const opts = {
indent: 4,
highlightFn: (code, lang) => {
// return the highlighted code
},
useLinkRefs: true
};
const htmlmark = new HtmlMark(opts);
htmlmark.tokenize("## Hello World"); // returns the tokens
htmlmark.parse("## Hello World"); // returns the HTML code
Option | Type | Default | Description |
---|---|---|---|
indent | number |
4 |
Number of spaces (or tabs) to use for indentation |
tabSize | number |
4 |
Equivalent spaces for a single tab used |
highlightFn | function |
undefined |
Function to highlight the code |
useLinkRefs | boolean |
true |
Whether to use link references or not |
tokenize(markdown: string): Token[]
: Returns the lexer from the markdown stringparse(markdown: string): string
: Returns the HTML code from the markdown stringgetFrontMatter(markdown: string): FrontMatter{}
: Returns the front matter from the markdown string
The provided markdown string is scanned line by line and checked against various regex patterns to produce the accurate markdown tokens. A general token structure is as:
{
"indent": 0,
"level": 1,
"raw": "# Heading One Text",
"setext": false,
"type": "heading",
"value": "Heading One Text",
"tokens": [{
"raw": "Heading One Text",
"type": "text",
"value": "Heading One Text"
}]
}
The front matter is the metadata of the markdown file. It is written in the YAML format and is separated from the markdown content by a line containing three hyphens ---
. It must be placed at the top of the markdown file.
---
title: Hello World
date: 2021-01-01
author: John Doe
---
## Hello World
Lorem ipsum dollar sit amet
The above markdown file will produce the following front matter:
{
"title": "Hello World",
"date": "2021-01-01",
"author": "John Doe"
}
Contributions are always welcome, no matter how large or small. Before contributing, please read the code of conduct. You can also find the development guide here.
GNU GENERAL PUBLIC LICENSE v3.0 © Kiran Parajuli