3.7 KiB
Parkdown
– a simple recursive descent Markdown parser for PHP (version >= 8.1)
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 (

) - 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

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