Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.

There's a link here.

  1. List item
  2. Another list item
    1. Sub list item
    2. Another sub list item
      1. Sub sub list item
    3. Continuing sub list item
  3. Continuing list item
// Detect horizontal line block
function isHorizontalLineBlock(block) {
  return block === "***";
}

// Render horizontal line block
function horizontalLineBlock(block) {
  return `<hr>`;
}

// Compose an array of parsers
const parsers = [{
  matcher: isHorizontalLineBlock,
  renderers: [horizontalLineBlock]
}];

// And finally, our parser itself
function markdownToHTML(markdown) {
  // Create blocks
  const blocks = content.split(/\n\n/);

  // Parse blocks
  const parsedBlocks = blocks.map((block) => {
    // Let's find a parser that has a matcher that matches
    const parser = parsers.find((parser) => parser.matcher(block));

    // If match was found, let's run our renderers over `block`
    if (parser) {
      for (const renderer of match.renderers) {
        block = renderer(block);
      }
    }

    return block;
  });

  // And at last, join the blocks together for one big block.
  return parsedBlocks.join("");
}

This is bold italic text and this is also. What about italic text that has bold text?

Hi there, world!


This is a H1 heading with settext

And this is a H2 heading with settext

Testing paragraph right before a code block

code goes here

Heading goes here

Paragraph right after heading