https://github.com/kiranparajuli589/htmlmark
A very lightweight Markdown Parser ✨
https://github.com/kiranparajuli589/htmlmark
hacktoberfest hacktoberfest2023 javascript lexer markdown nodejs parser
Last synced: 9 months ago
JSON representation
A very lightweight Markdown Parser ✨
- Host: GitHub
- URL: https://github.com/kiranparajuli589/htmlmark
- Owner: kiranparajuli589
- License: gpl-3.0
- Created: 2022-07-03T10:57:24.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-11-20T19:44:56.000Z (about 1 year ago)
- Last Synced: 2025-05-05T04:39:23.800Z (9 months ago)
- Topics: hacktoberfest, hacktoberfest2023, javascript, lexer, markdown, nodejs, parser
- Language: JavaScript
- Homepage: https://kiranparajuli589.github.io/htmlmark/
- Size: 3.69 MB
- Stars: 17
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
HtmlMark

A very lightweight Markdown Parser powered by Regex
## 🔑 Why HtmlMark?
- 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
## 🌐 Demo
Checkout the features of the parser from this [Live Demo](https://kiranparajuli589.github.io/htmlmark/ 'Live Demo').
## 🎠 Installation
```bash
npm i htmlmark
```
## 💠 Usage
```js
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
```
## 🎡 Options
| 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 |
## 🎢 APIs
- `tokenize(markdown: string): Token[]`:
Returns the lexer from the markdown string
- `parse(markdown: string): string`:
Returns the HTML code from the markdown string
- `getFrontMatter(markdown: string): FrontMatter{}`:
Returns the front matter from the markdown string
### Lexer
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:
```json
{
"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"
}]
}
```
### Front Matter
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.
#### Example:
```md
---
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:
```json
{
"title": "Hello World",
"date": "2021-01-01",
"author": "John Doe"
}
```
## 💁 Contributing to HtmlMark
Contributions are always welcome, no matter how large or small. Before contributing, please read the [code of conduct](https://github.com/kiranparajuli589/htmlmark/blob/main/CODE_OF_CONDUCT.md 'code of conduct'). You can also find the development guide [here](https://github.com/kiranparajuli589/htmlmark/blob/main/CONTRIBUTING.md 'here').
## 📝 License
GNU GENERAL PUBLIC LICENSE v3.0 © [Kiran Parajuli](https://kiranparajuli.com.np 'Kiran Parajuli')