Skip to content

Small, no dependencies, Markdown, HTML, and inline CSS parser. Just 4KB, available as ESM module from CDN.

Notifications You must be signed in to change notification settings

streamich/very-small-parser

Repository files navigation

very-small-parser

Usage

Live demo

On the web you can simply import the module using a script tag.

Using ESM.sh:

<script type="module">
  import { markdown } from '//esm.sh/very-small-parser';

  const ast = markdown.block.parsef('Hello __world__!');
  console.log(ast);
</script>

Using jsDelivr:

<script type="module">
  import { markdown } from '//esm.run/very-small-parser';

  const ast = markdown.block.parsef('Hello __world__!');
  console.log(ast);
</script>

To use TypeScript types or import into a Node.js project, you can install the package from npm:

npm install very-small-parser

Reference

Markdown

Parse Markdown document (block elements):

import { markdown } from 'very-small-parser';

const ast = markdown.block.parsef('Hello __world__!');

Parse Markdown inline markup only:

const ast = markdown.inline.parse('Hello __world__!');

Detect if text is likely to be a Markdown document:

import { is } from 'very-small-parser/lib/markdown/is';

is('Hello __world__!');     // true
is('<b>Hello</b>!');        // false

Pretty-print MDAST back to text:

import { markdown } from 'very-small-parser';
import { toText } from 'very-small-parser/lib/markdown/block/toText';

const mdast = markdown.block.parse('Hello __world__!');
const text = toText(mdast); // Hello __world__!

Convert MDAST to HAST (Markdown AST to HTML AST):

import { markdown } from 'very-small-parser';
import { toHast } from 'very-small-parser/lib/markdown/block/toHast';
import { toText } from 'very-small-parser/lib/html/toText';

const mdast = markdown.block.parse('Hello __world__!');
const hast = toHast(mdast);
const html = toText(hast); // <p>Hello <strong>world</strong>!</p>

HTML

Parse HTML to HAST (Hypertext Abstract Syntax Tree):

import { html } from 'very-small-parser';

const ast = html.parse('<b>Hello</b> <i>world</i>!');

Pretty-print HAST to HTML:

import { html } from 'very-small-parser';
import { toText } from 'very-small-parser/lib/html/toText';

const hast = html.parse('<b>Hello</b> <i>world</i>!');
const html = toText(hast); // '<b>Hello</b> <i>world</i>!'

Specify tabulation size for indentation when pretty-printing:

import { html } from 'very-small-parser';
import { toText } from 'very-small-parser/lib/html/toText';

const tab = '  ';
const hast = html.parse('<div><b>Hello</b><i>world</i>!</div>', tab);
const html = toText(hast);
// <div>
//   <b>Hello</b>
//   <i>world</i>
//   !
// </div>

Convert HAST to MDAST (HTML AST to Markdown AST):

import { html } from 'very-small-parser';
import { toMdast } from 'very-small-parser/lib/html/toMdast';
import { toText } from 'very-small-parser/lib/markdown/block/toText';

const hast = html.parse('<p><b>Hello</b> <i>world</i>!</p>');
const mdast = toMdast(hast);
const text = toText(mdast); // __Hello__ _world_!

JSON-ML

JSON-ML is a simple way to represent HTML as JSON. For example, the HTML <b>Hello</b> is represented as ['b', null, 'Hello']. The first element is the tag name, the second is the attributes, and the rest are children.

This package contains converters for JSON-ML to HAST and back. See the /src/html/json-ml directory.

About

Small, no dependencies, Markdown, HTML, and inline CSS parser. Just 4KB, available as ESM module from CDN.

Resources

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published