Skip to content

liolle/mdParser

Repository files navigation

mdParser

Generate an Abstract Syntax Tree from a Markdown file, providing a structured representation that you can manipulate or render in various formats such as HTML, plain text, or any custom output.

Installation

npm install @edllx/md-parser

Features

Name
Heading Tables
Unordered list Ordered list
Bold Quotes
Italic Unicode
Links
Inline code
Code block

Usage

import { Factory, tokenize, Token } from '@edllx/md-parser';

const tokens: Token[] = tokenize(`## Header2`);

const root: Token = Factory.ROOT(tokens);

Create and adapter

Here is an example

import {
  Token,
  TokenCompiler,
  Word,
  NewLine,
  Paragraph,
  LinkToken,
  Heading,
  ListToken,
  Decoration,
  InlineCode,
  CodeToken,
  CheckBoxToken,
} from '@edllx/md-parser';

import { JSXElement } from 'solid-js';

/**
    interface TokenCompiler<T> {
        compile: (token: Token) => T;
    }
**/

export class TokenToTsxAdapter implements TokenCompiler<JSXElement> {
  compile(token: Token) {
    return this.#recursiveCompile(token);
  }

  #recursiveCompile(token: Token): JSXElement {
    switch (true) {
      case token instanceof Word:
        return <span>TODO</span>;

      case token instanceof NewLine:
        return <span>TODO</span>;

      case token instanceof Paragraph:
        return <span>TODO</span>;

      case token instanceof LinkToken:
        return <span>TODO</span>;

      case token instanceof ListToken:
        return <span>TODO</span>;

      case token instanceof Heading:
        return <span>TODO</span>;

      case token instanceof Decoration:
        return <span>TODO</span>;

      case token instanceof InlineCode:
        return <span>TODO</span>;

      case token instanceof CodeToken:
        return <span>TODO</span>;

      default:
        return <span>TODO</span>;
    }
  }
}

use the adapter

import { Factory, tokenize, Token } from '@edllx/md-parser';
import { JSXElement } from 'solid-js';
import { TokenToTsxAdapter } from 'path-to-adapter';

const compiler = new TokenToTsxAdapter();
const tokens: Token[] = tokenize(`## Header2`);
const root: Token = Factory.ROOT(tokens);
const component: JSXElement = compiler.compile(root);

Demo

Packages

No packages published

Contributors 2

  •  
  •