The Wayback Machine - https://web.archive.org/web/20260201205116/https://github.com/php-collective/djot-php
Skip to content

A PHP parser for Djot, a modern light markup language

License

Notifications You must be signed in to change notification settings

php-collective/djot-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

123 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Djot PHP

CI codecov Latest Stable Version Total Downloads PHPStan PHP Version Software License

A PHP parser for Djot, a modern light markup language created by John MacFarlane (author of CommonMark/Pandoc).

Installation

composer require php-collective/djot

Quick Start

use Djot\DjotConverter;

$converter = new DjotConverter();
$html = $converter->convert('Hello *world*!');
// Output: <p>Hello <strong>world</strong>!</p>

Features

  • Block elements: Headings, paragraphs, code blocks, block quotes, lists, tables, divs, definition lists, line blocks
  • Inline elements: Emphasis, strong, links, images, code, superscript, subscript, highlight, insert, delete
  • Advanced: Footnotes, math expressions, symbols, block attributes, raw HTML blocks, comments
  • Smart typography: Curly quotes, en/em dashes, ellipsis
  • Multiple renderers: HTML, plain text, Markdown output
  • Extensions: Built-in extensions for external links, TOC, heading permalinks, @mentions, autolinks, default attributes
  • Extensible: Custom inline/block patterns, render events
  • File support: Parse and convert files directly

Example

use Djot\DjotConverter;
use Djot\Extension\ExternalLinksExtension;
use Djot\Extension\DefaultAttributesExtension;

$converter = new DjotConverter();

// Add extensions for common features
$converter
    ->addExtension(new ExternalLinksExtension())
    ->addExtension(new DefaultAttributesExtension([
        'table' => ['class' => 'table'],
    ]));

$djot = <<<'DJOT'
# Welcome

This is _emphasized_ and *strong* text with a [link](https://example.com).

| Name  | Role       |
|-------|------------|
| Alice | Developer  |
| Bob   | Designer   |

> "Djot is a light markup syntax."

```php
echo "Hello World";
DJOT;

echo $converter->convert($djot);

Output:

<h1>Welcome</h1>
<p>This is <em>emphasized</em> and <strong>strong</strong> text with a <a href="https://example.com" target="_blank" rel="noopener noreferrer">link</a>.</p>
<table class="table">
<thead>
<tr><th>Name</th><th>Role</th></tr>
</thead>
<tbody>
<tr><td>Alice</td><td>Developer</td></tr>
<tr><td>Bob</td><td>Designer</td></tr>
</tbody>
</table>
<blockquote>
<p>"Djot is a light markup syntax."</p>
</blockquote>
<pre><code class="language-php">echo "Hello World";
</code></pre>

Demo: Sandbox with live preview

https://sandbox.dereuromark.de/sandbox/djot

Documentation

Security

When processing untrusted user input, enable safe mode for XSS protection:

$converter = new DjotConverter(safeMode: true);
$html = $converter->convert($untrustedInput);

Safe mode automatically blocks dangerous URL schemes (javascript:, etc.), strips event handler attributes (onclick, etc.), and escapes raw HTML.

See Security Considerations for details and advanced configuration.

Implementations

See Also

  • Djot - Official Djot website with syntax reference and playground
  • jgm/djot - Reference implementation in JavaScript by John MacFarlane
  • JetBrains IDE support - Plugin for PhpStorm, IntelliJ IDEA, WebStorm, etc.

About

A PHP parser for Djot, a modern light markup language

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Contributors 2

  •  
  •  

Languages