a recusive descent markdown parser in PHP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.7 KiB

Parkdown

– a simple recursive descent Markdown parser for PHP (version >= 8.1)

Markdown is a simple markup language

Specification

Supported block types

Parkdown currently support the following block types:

  • codeblocks (with the ability to specify a language for the code block)
  • tables (with alignment specification)
  • paragraphs
  • block quotes
  • lists (like this one)
    • also nested
  • horizontal rules ---

Supported inline types

Parkdown currently support the following block types:

  • bold text (**bold**)
  • italic text (*italic*)
  • code snippets
  • images (![alt text](src url))
  • links ([link text][url or reference])

Additional functionality

  • references ([marker]: URL)

Examples

Paragraphs

A simple paragraph can contain **bold text**, `inline codeblocks` and *italic text*. We can also link [with a direct url][https://google.com] *(i.e. to google)*
or via reference to [a later defined url][massivedynamic], if we so desire.

A simple paragraph can contain bold text, inline codeblocks and italic text. We can also link with a direct url (i.e. to google) or via reference to a later defined url, if we so desire.

Paragraphs can be annotated with id and class attributes:

Paragraphs can be annotated with ids and classes {.thisIsAClass, .anotherClass, #thisIsAnID}

results in

Paragraphs can be annotated with ids and classes {.thisIsAClass, .anotherClass, #thisIsAnID}

<p class="thisIsAClass anotherClass" id="thisIsAnID">
	Paragraphs can be annotated with ids and classes
</p>

Images

![this is an alt text](https://images.unsplash.com/photo-1571171637578-41bc2dd41cd2?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&h=300&w=1740&q=80\)

this is an alt text

Horizontal rules

---

Block quotes

> Only two things are infinite,
> the universe and human stupidity,
> i am not totally shure about the universe, though...
>    – Albert Einstein

Only two things are infinite, the universe and human stupidity, i am not totally shure about the universe, though... – Albert Einstein

Code blocks


\`\`\`php
	function main(int $argc, array $argv) : int {
		echo "Hello World!";

		return 0;
	}
\`\`\`

	function main(int $argc, array $argv) : int {
		echo "Hello World!";

		return 0;
	}

Tables

| Product name | Amount   | Price  |
|--------------|:--------:|-------:|
| Football     |      7   | $18,00 |
| Golfball     |      122 | $7,00  |
| Fooseball    |      355 | $1,00  |
| Puck         |      58  | $12,00 |
Product name Amount Price
Football 7 $18,00
Golfball 122 $7,00
Fooseball 355 $1,00
Puck 58 $12,00

References

[massivedynamic]: https://massivedynamic.eu

Usage

Simply construct an new parkdown\Parkdown object and pass the Markdown source code to it's constructor. The parsed DOMDocument or it's HTML output can then be retrieved through the ::html() and ::tree() member functions.

Example

	use parkdown\Parkdown;

	$source = "
		This is a **bold** word in a paragraph.
	";

	$parser = new Parkdown($source);
	$tree   = $parser->tree();

	print_r($tree);
	echo $parser->html();

Testing

Unit tests can be run via composer:

	composer test